diff --git a/iphone/Maps/Podfile.lock b/iphone/Maps/Podfile.lock index 637436d77f..a1147a255e 100644 --- a/iphone/Maps/Podfile.lock +++ b/iphone/Maps/Podfile.lock @@ -1,185 +1,3 @@ -PODS: - - AppsFlyerFramework (4.9.0) - - FBAudienceNetwork (5.9.0): - - FBSDKCoreKit/Basics (>= 5.6.0) - - FBSDKCoreKit (5.15.1): - - FBSDKCoreKit/Basics (= 5.15.1) - - FBSDKCoreKit/Core (= 5.15.1) - - FBSDKCoreKit/Basics (5.15.1) - - FBSDKCoreKit/Core (5.15.1): - - FBSDKCoreKit/Basics - - FBSDKLoginKit (5.15.1): - - FBSDKLoginKit/Login (= 5.15.1) - - FBSDKLoginKit/Login (5.15.1): - - FBSDKCoreKit (~> 5.0) - - Firebase/Analytics (6.26.0): - - Firebase/Core - - Firebase/Core (6.26.0): - - Firebase/CoreOnly - - FirebaseAnalytics (= 6.6.0) - - Firebase/CoreOnly (6.26.0): - - FirebaseCore (= 6.7.2) - - Firebase/Crashlytics (6.26.0): - - Firebase/CoreOnly - - FirebaseCrashlytics (~> 4.1.1) - - FirebaseAnalytics (6.6.0): - - FirebaseCore (~> 6.7) - - FirebaseInstallations (~> 1.3) - - GoogleAppMeasurement (= 6.6.0) - - GoogleUtilities/AppDelegateSwizzler (~> 6.0) - - GoogleUtilities/MethodSwizzler (~> 6.0) - - GoogleUtilities/Network (~> 6.0) - - "GoogleUtilities/NSData+zlib (~> 6.0)" - - nanopb (~> 1.30905.0) - - FirebaseAnalyticsInterop (1.5.0) - - FirebaseCore (6.7.2): - - FirebaseCoreDiagnostics (~> 1.3) - - FirebaseCoreDiagnosticsInterop (~> 1.2) - - GoogleUtilities/Environment (~> 6.5) - - GoogleUtilities/Logger (~> 6.5) - - FirebaseCoreDiagnostics (1.4.0): - - GoogleDataTransportCCTSupport (~> 3.1) - - GoogleUtilities/Environment (~> 6.5) - - GoogleUtilities/Logger (~> 6.5) - - nanopb (~> 1.30905.0) - - FirebaseCoreDiagnosticsInterop (1.2.0) - - FirebaseCrashlytics (4.1.1): - - FirebaseAnalyticsInterop (~> 1.2) - - FirebaseCore (~> 6.6) - - FirebaseInstallations (~> 1.1) - - GoogleDataTransport (~> 6.1) - - GoogleDataTransportCCTSupport (~> 3.1) - - nanopb (~> 1.30905.0) - - PromisesObjC (~> 1.2) - - FirebaseInstallations (1.3.0): - - FirebaseCore (~> 6.6) - - GoogleUtilities/Environment (~> 6.6) - - GoogleUtilities/UserDefaults (~> 6.6) - - PromisesObjC (~> 1.2) - - Flurry-iOS-SDK/FlurrySDK (11.1.0) - - GoogleAppMeasurement (6.6.0): - - GoogleUtilities/AppDelegateSwizzler (~> 6.0) - - GoogleUtilities/MethodSwizzler (~> 6.0) - - GoogleUtilities/Network (~> 6.0) - - "GoogleUtilities/NSData+zlib (~> 6.0)" - - nanopb (~> 1.30905.0) - - GoogleDataTransport (6.2.1) - - GoogleDataTransportCCTSupport (3.2.0): - - GoogleDataTransport (~> 6.1) - - nanopb (~> 1.30905.0) - - GoogleUtilities/AppDelegateSwizzler (6.7.1): - - GoogleUtilities/Environment - - GoogleUtilities/Logger - - GoogleUtilities/Network - - GoogleUtilities/Environment (6.7.1): - - PromisesObjC (~> 1.2) - - GoogleUtilities/Logger (6.7.1): - - GoogleUtilities/Environment - - GoogleUtilities/MethodSwizzler (6.7.1): - - GoogleUtilities/Logger - - GoogleUtilities/Network (6.7.1): - - GoogleUtilities/Logger - - "GoogleUtilities/NSData+zlib" - - GoogleUtilities/Reachability - - "GoogleUtilities/NSData+zlib (6.7.1)" - - GoogleUtilities/Reachability (6.7.1): - - GoogleUtilities/Logger - - GoogleUtilities/UserDefaults (6.7.1): - - GoogleUtilities/Logger - - MoPub-FacebookAudienceNetwork-Adapters (5.9.0.0): - - MoPub-FacebookAudienceNetwork-Adapters/MoPub (= 5.9.0.0) - - MoPub-FacebookAudienceNetwork-Adapters/Network (= 5.9.0.0) - - MoPub-FacebookAudienceNetwork-Adapters/MoPub (5.9.0.0): - - mopub-ios-sdk/Core (~> 5.6) - - mopub-ios-sdk/NativeAds (~> 5.6) - - MoPub-FacebookAudienceNetwork-Adapters/Network (5.9.0.0): - - FBAudienceNetwork (= 5.9.0) - - mopub-ios-sdk/Core (~> 5.6) - - mopub-ios-sdk/NativeAds (~> 5.6) - - mopub-ios-sdk (5.12.0): - - mopub-ios-sdk/MoPubSDK (= 5.12.0) - - mopub-ios-sdk/Avid (5.12.0): - - mopub-ios-sdk/Core - - mopub-ios-sdk/Core (5.12.0) - - mopub-ios-sdk/Moat (5.12.0): - - mopub-ios-sdk/Core - - mopub-ios-sdk/MoPubSDK (5.12.0): - - mopub-ios-sdk/Avid - - mopub-ios-sdk/Core - - mopub-ios-sdk/Moat - - mopub-ios-sdk/NativeAds - - mopub-ios-sdk/NativeAds (5.12.0): - - mopub-ios-sdk/Core - - nanopb (1.30905.0): - - nanopb/decode (= 1.30905.0) - - nanopb/encode (= 1.30905.0) - - nanopb/decode (1.30905.0) - - nanopb/encode (1.30905.0) - - PromisesObjC (1.2.9) - - Pushwoosh (5.16.0): - - Pushwoosh/Core (= 5.16.0) - - Pushwoosh/Core (5.16.0) +PODFILE CHECKSUM: deba2253f1e135a82d1d8c1740254e43cd41b1cf -DEPENDENCIES: - - AppsFlyerFramework (= 4.9.0) - - FBSDKCoreKit (= 5.15.1) - - FBSDKLoginKit (= 5.15.1) - - Firebase/Analytics (= 6.26.0) - - Firebase/Crashlytics (= 6.26.0) - - Flurry-iOS-SDK/FlurrySDK (= 11.1) - - MoPub-FacebookAudienceNetwork-Adapters (= 5.9.0) - - mopub-ios-sdk (= 5.12) - - Pushwoosh (= 5.16.0) - -SPEC REPOS: - trunk: - - AppsFlyerFramework - - FBAudienceNetwork - - FBSDKCoreKit - - FBSDKLoginKit - - Firebase - - FirebaseAnalytics - - FirebaseAnalyticsInterop - - FirebaseCore - - FirebaseCoreDiagnostics - - FirebaseCoreDiagnosticsInterop - - FirebaseCrashlytics - - FirebaseInstallations - - Flurry-iOS-SDK - - GoogleAppMeasurement - - GoogleDataTransport - - GoogleDataTransportCCTSupport - - GoogleUtilities - - MoPub-FacebookAudienceNetwork-Adapters - - mopub-ios-sdk - - nanopb - - PromisesObjC - - Pushwoosh - -SPEC CHECKSUMS: - AppsFlyerFramework: f57e5d590ad3124d3e594a76032a181bc91ec6cd - FBAudienceNetwork: 648648b13d8ea3d39676542dece2b04dbe867497 - FBSDKCoreKit: 1d5acf7c9d7a2f92bb1a242dc60cae5b7adb91df - FBSDKLoginKit: f1ea8026a58b52d30c9f2e6a58ca7d813619fb83 - Firebase: 7cf5f9c67f03cb3b606d1d6535286e1080e57eb6 - FirebaseAnalytics: 96634d356482d4f3af8fe459a0ebf19a99c71b75 - FirebaseAnalyticsInterop: 3f86269c38ae41f47afeb43ebf32a001f58fcdae - FirebaseCore: f42e5e5f382cdcf6b617ed737bf6c871a6947b17 - FirebaseCoreDiagnostics: 4505e4d4009b1d93f605088ee7d7764d5f0d1c84 - FirebaseCoreDiagnosticsInterop: 296e2c5f5314500a850ad0b83e9e7c10b011a850 - FirebaseCrashlytics: a87cce5746d3335995bd18b1b60d073cd05a6920 - FirebaseInstallations: 6f5f680e65dc374397a483c32d1799ba822a395b - Flurry-iOS-SDK: 88c0399d6d276325dc9f74f6183c1070e6c3f21e - GoogleAppMeasurement: 67458367830514fb20fd9e233496f1eef9d90185 - GoogleDataTransport: 9a8a16f79feffc7f42096743de2a7c4815e84020 - GoogleDataTransportCCTSupport: 489c1265d2c85b68187a83a911913d190012158d - GoogleUtilities: e121a3867449ce16b0e35ddf1797ea7a389ffdf2 - MoPub-FacebookAudienceNetwork-Adapters: c9cbf2549ab2e108086594ab18f1709cc5897300 - mopub-ios-sdk: bb61d5741ba16c6a78e5a54e37bc60ef8c9a80a8 - nanopb: c43f40fadfe79e8b8db116583945847910cbabc9 - PromisesObjC: b48e0338dbbac2207e611750777895f7a5811b75 - Pushwoosh: 6cba171e52f3f7b8ccd280f492a5831deac2f594 - -PODFILE CHECKSUM: 6a5506aaa77abf026437e209f61e422241c8e153 - -COCOAPODS: 1.9.3 +COCOAPODS: 1.10.0 diff --git a/iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/AppsFlyerLib b/iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/AppsFlyerLib deleted file mode 120000 index fd96586f85..0000000000 --- a/iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/AppsFlyerLib +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/AppsFlyerLib \ No newline at end of file diff --git a/iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/Headers b/iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/Headers deleted file mode 120000 index a177d2a6b9..0000000000 --- a/iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/Headers +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Headers \ No newline at end of file diff --git a/iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/Modules/module.modulemap b/iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/Modules/module.modulemap deleted file mode 100644 index 047c0b9dac..0000000000 --- a/iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/Modules/module.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module AppsFlyerLib { - umbrella header "AppsFlyerTracker.h" - - export * - module * { export * } -} \ No newline at end of file diff --git a/iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/Versions/A/AppsFlyerLib b/iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/Versions/A/AppsFlyerLib deleted file mode 100644 index 1876a687c4..0000000000 Binary files a/iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/Versions/A/AppsFlyerLib and /dev/null differ diff --git a/iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/Versions/A/Headers/AppsFlyerCrossPromotionHelper.h b/iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/Versions/A/Headers/AppsFlyerCrossPromotionHelper.h deleted file mode 100644 index 3fdf0d7486..0000000000 --- a/iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/Versions/A/Headers/AppsFlyerCrossPromotionHelper.h +++ /dev/null @@ -1,47 +0,0 @@ -// -// CrossPromotionHelper.h -// AppsFlyerLib -// -// Created by Gil Meroz on 27/01/2017. -// -// - -#import -#import - - -NS_ASSUME_NONNULL_BEGIN -/** - AppsFlyer allows you to track and attribute installs originating - from cross promotion campaigns of your existing apps. - Afterwards, you can optimize on your cross-promotion traffic to get even better results. - */ -@interface AppsFlyerCrossPromotionHelper : NSObject - -/** - To track an impression use the following API call. - Make sure to use the promoted App ID as it appears within the AppsFlyer dashboard. - - @param appID Promoted App ID - @param campaign A campaign name - */ -+ (void)trackCrossPromoteImpression:(nonnull NSString*)appID - campaign:(nullable NSString*)campaign; - -/** - iOS allows you to utilize the StoreKit component to open - the App Store while remaining in the context of your app. - More details at https://support.appsflyer.com/hc/en-us/articles/115004481946-Cross-Promotion-Tracking#tracking-cross-promotion-impressions - - @param appID Promoted App ID - @param campaign A campaign name - @param parameters Additional params like `@{@"af_sub1": @"val", @"custom_param": @"val2" }` - @param openStoreBlock Contains promoted `clickURL` - */ -+ (void)trackAndOpenStore:(nonnull NSString*)appID - campaign:(nullable NSString *)campaign - paramters:(nullable NSDictionary*)parameters - openStore:(void (^)(NSURLSession *urlSession,NSURL *clickURL))openStoreBlock; -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/Versions/A/Headers/AppsFlyerLinkGenerator.h b/iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/Versions/A/Headers/AppsFlyerLinkGenerator.h deleted file mode 100644 index cc6462827e..0000000000 --- a/iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/Versions/A/Headers/AppsFlyerLinkGenerator.h +++ /dev/null @@ -1,50 +0,0 @@ -// -// LinkGenerator.h -// AppsFlyerLib -// -// Created by Gil Meroz on 27/01/2017. -// -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - Payload container for the `generateInviteUrlWithLinkGenerator:completionHandler:` from `AppsFlyerShareInviteHelper` - */ -@interface AppsFlyerLinkGenerator: NSObject - -/// Instance initialization is not allowed. Use generated instance -/// from `-[AppsFlyerShareInviteHelper generateInviteUrlWithLinkGenerator:completionHandler]` -- (instancetype)init NS_UNAVAILABLE; -/// Instance initialization is not allowed. Use generated instance -/// from `-[AppsFlyerShareInviteHelper generateInviteUrlWithLinkGenerator:completionHandler]` -+ (instancetype)new NS_UNAVAILABLE; - -/// The channel through which the invite was sent (e.g. Facebook/Gmail/etc.). Usage: Recommended -- (void)setChannel :(nonnull NSString *)channel; -/// ReferrerCustomerId setter -- (void)setReferrerCustomerId:(nonnull NSString *)referrerCustomerId; -/// A campaign name. Usage: Optional -- (void)setCampaign :(nonnull NSString *)campaign; -/// ReferrerUID setter -- (void)setReferrerUID :(nonnull NSString *)referrerUID; -/// Referrer name -- (void)setReferrerName :(nonnull NSString *)referrerName; -/// The URL to referrer user avatar. Usage: Optional -- (void)setReferrerImageURL :(nonnull NSString *)referrerImageURL; -/// AppleAppID -- (void)setAppleAppID :(nonnull NSString *)appleAppID; -/// Deeplink path -- (void)setDeeplinkPath :(nonnull NSString *)deeplinkPath; -/// Base deeplink path -- (void)setBaseDeeplink :(nonnull NSString *)baseDeeplink; -/// A single key value custom parameter. Usage: Optional -- (void)addParameterValue :(nonnull NSString *)value forKey:(NSString*)key; -/// Multiple key value custom parameters. Usage: Optional -- (void)addParameters :(nonnull NSDictionary *)parameters; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/Versions/A/Headers/AppsFlyerShareInviteHelper.h b/iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/Versions/A/Headers/AppsFlyerShareInviteHelper.h deleted file mode 100644 index 7d7bd42cf8..0000000000 --- a/iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/Versions/A/Headers/AppsFlyerShareInviteHelper.h +++ /dev/null @@ -1,35 +0,0 @@ -// -// ShareInviteHelper.h -// AppsFlyerLib -// -// Created by Gil Meroz on 27/01/2017. -// -// - -#import -#import "AppsFlyerLinkGenerator.h" -/** - AppsFlyerShareInviteHelper - */ -@interface AppsFlyerShareInviteHelper : NSObject - -NS_ASSUME_NONNULL_BEGIN - -/** - * The AppsFlyerShareInviteHelper class builds the invite URL according to various setter methods - * which allow passing on additional information on the click. - * This information is available through `onConversionDataReceived:` when the user accepts the invite and installs the app. - * In addition, campaign and channel parameters are visible within the AppsFlyer Dashboard. - */ -+ (void) generateInviteUrlWithLinkGenerator:(AppsFlyerLinkGenerator * (^)(AppsFlyerLinkGenerator *generator))generatorCreator - completionHandler:(void (^)(NSURL * _Nullable url))completionHandler; - -/** - * It is recommended to generate an in-app event after the invite is sent to track the invites from the senders' perspective. - * This enables you to find the users that tend most to invite friends, and the media sources that get you these users. - */ -+ (void) trackInvite:(nullable NSString *)channel parameters:(nullable NSDictionary *)parameters; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/Versions/A/Headers/AppsFlyerTracker.h b/iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/Versions/A/Headers/AppsFlyerTracker.h deleted file mode 100644 index 86326676d9..0000000000 --- a/iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/Versions/A/Headers/AppsFlyerTracker.h +++ /dev/null @@ -1,532 +0,0 @@ -// -// AppsFlyerTracker.h -// AppsFlyerLib -// -// AppsFlyer iOS SDK 4.9.0 (813) -// Copyright (c) 2019 AppsFlyer Ltd. All rights reserved. -// - -#import -#import "AppsFlyerCrossPromotionHelper.h" -#import "AppsFlyerShareInviteHelper.h" - - - -// In app event names constants -#define AFEventLevelAchieved @"af_level_achieved" -#define AFEventAddPaymentInfo @"af_add_payment_info" -#define AFEventAddToCart @"af_add_to_cart" -#define AFEventAddToWishlist @"af_add_to_wishlist" -#define AFEventCompleteRegistration @"af_complete_registration" -#define AFEventTutorial_completion @"af_tutorial_completion" -#define AFEventInitiatedCheckout @"af_initiated_checkout" -#define AFEventPurchase @"af_purchase" -#define AFEventRate @"af_rate" -#define AFEventSearch @"af_search" -#define AFEventSpentCredits @"af_spent_credits" -#define AFEventAchievementUnlocked @"af_achievement_unlocked" -#define AFEventContentView @"af_content_view" -#define AFEventListView @"af_list_view" -#define AFEventTravelBooking @"af_travel_booking" -#define AFEventShare @"af_share" -#define AFEventInvite @"af_invite" -#define AFEventLogin @"af_login" -#define AFEventReEngage @"af_re_engage" -#define AFEventUpdate @"af_update" -#define AFEventOpenedFromPushNotification @"af_opened_from_push_notification" -#define AFEventLocation @"af_location_coordinates" -#define AFEventCustomerSegment @"af_customer_segment" - -#define AFEventSubscribe @"af_subscribe" -#define AFEventStartTrial @"af_start_trial" -#define AFEventAdClick @"af_ad_click" -#define AFEventAdView @"af_ad_view" - -// In app event parameter names -#define AFEventParamContent @"af_content" -#define AFEventParamAchievenmentId @"af_achievement_id" -#define AFEventParamLevel @"af_level" -#define AFEventParamScore @"af_score" -#define AFEventParamSuccess @"af_success" -#define AFEventParamPrice @"af_price" -#define AFEventParamContentType @"af_content_type" -#define AFEventParamContentId @"af_content_id" -#define AFEventParamContentList @"af_content_list" -#define AFEventParamCurrency @"af_currency" -#define AFEventParamQuantity @"af_quantity" -#define AFEventParamRegistrationMethod @"af_registration_method" -#define AFEventParamPaymentInfoAvailable @"af_payment_info_available" -#define AFEventParamMaxRatingValue @"af_max_rating_value" -#define AFEventParamRatingValue @"af_rating_value" -#define AFEventParamSearchString @"af_search_string" -#define AFEventParamDateA @"af_date_a" -#define AFEventParamDateB @"af_date_b" -#define AFEventParamDestinationA @"af_destination_a" -#define AFEventParamDestinationB @"af_destination_b" -#define AFEventParamDescription @"af_description" -#define AFEventParamClass @"af_class" -#define AFEventParamEventStart @"af_event_start" -#define AFEventParamEventEnd @"af_event_end" -#define AFEventParamLat @"af_lat" -#define AFEventParamLong @"af_long" -#define AFEventParamCustomerUserId @"af_customer_user_id" -#define AFEventParamValidated @"af_validated" -#define AFEventParamRevenue @"af_revenue" -#define AFEventProjectedParamRevenue @"af_projected_revenue" -#define AFEventParamReceiptId @"af_receipt_id" -#define AFEventParamTutorialId @"af_tutorial_id" -#define AFEventParamAchievenmentId @"af_achievement_id" -#define AFEventParamVirtualCurrencyName @"af_virtual_currency_name" -#define AFEventParamDeepLink @"af_deep_link" -#define AFEventParamOldVersion @"af_old_version" -#define AFEventParamNewVersion @"af_new_version" -#define AFEventParamReviewText @"af_review_text" -#define AFEventParamCouponCode @"af_coupon_code" -#define AFEventParamOrderId @"af_order_id" -#define AFEventParam1 @"af_param_1" -#define AFEventParam2 @"af_param_2" -#define AFEventParam3 @"af_param_3" -#define AFEventParam4 @"af_param_4" -#define AFEventParam5 @"af_param_5" -#define AFEventParam6 @"af_param_6" -#define AFEventParam7 @"af_param_7" -#define AFEventParam8 @"af_param_8" -#define AFEventParam9 @"af_param_9" -#define AFEventParam10 @"af_param_10" - -#define AFEventParamDepartingDepartureDate @"af_departing_departure_date" -#define AFEventParamReturningDepartureDate @"af_returning_departure_date" -#define AFEventParamDestinationList @"af_destination_list" //array of string -#define AFEventParamCity @"af_city" -#define AFEventParamRegion @"af_region" -#define AFEventParamCountry @"af_country" - - -#define AFEventParamDepartingArrivalDate @"af_departing_arrival_date" -#define AFEventParamReturningArrivalDate @"af_returning_arrival_date" -#define AFEventParamSuggestedDestinations @"af_suggested_destinations" //array of string -#define AFEventParamTravelStart @"af_travel_start" -#define AFEventParamTravelEnd @"af_travel_end" -#define AFEventParamNumAdults @"af_num_adults" -#define AFEventParamNumChildren @"af_num_children" -#define AFEventParamNumInfants @"af_num_infants" -#define AFEventParamSuggestedHotels @"af_suggested_hotels" //array of string - -#define AFEventParamUserScore @"af_user_score" -#define AFEventParamHotelScore @"af_hotel_score" -#define AFEventParamPurchaseCurrency @"af_purchase_currency" - -#define AFEventParamPreferredStarRatings @"af_preferred_star_ratings" //array of int (basically a tuple (min,max) but we'll use array of int and instruct the developer to use two values) - -#define AFEventParamPreferredPriceRange @"af_preferred_price_range" //array of int (basically a tuple (min,max) but we'll use array of int and instruct the developer to use two values) -#define AFEventParamPreferredNeighborhoods @"af_preferred_neighborhoods" //array of string -#define AFEventParamPreferredNumStops @"af_preferred_num_stops" - -#define AFEventParamAdRevenueAdType @"af_adrev_ad_type" -#define AFEventParamAdRevenueNetworkName @"af_adrev_network_name" -#define AFEventParamAdRevenuePlacementId @"af_adrev_placement_id" -#define AFEventParamAdRevenueAdSize @"af_adrev_ad_size" -#define AFEventParamAdRevenueMediatedNetworkName @"af_adrev_mediated_network_name" - -#define kDefaultOneLink @"go.onelink.me" -#define kNoOneLinkFallback @"https://app.appsflyer.com" -#define kINviteAppleAppID @"af_siteid" - - - - -/// Mail hashing type -typedef enum { - /// None - EmailCryptTypeNone = 0, - /// SHA1 - EmailCryptTypeSHA1 = 1, - /// MD5 - EmailCryptTypeMD5 = 2, - /// SHA256 - EmailCryptTypeSHA256 = 3 -} EmailCryptType; - -/** - Conform and subscribe to this protocol to allow getting data about conversion and - install attribution - */ -@protocol AppsFlyerTrackerDelegate - -@optional -/** - `installData` contains information about install. - Organic/non-organic, etc. - */ -- (void)onConversionDataReceived:(NSDictionary *)installData; - -/** - Any errors that occurred during the conversion request. - */ -- (void)onConversionDataRequestFailure:(NSError *)error; - -/** - `attributionData` contains information about OneLink, deeplink. - */ -- (void)onAppOpenAttribution:(NSDictionary *)attributionData; - -/** - Any errors that occurred during the attribution request. - */ -- (void)onAppOpenAttributionFailure:(NSError *)error; - -@end - -/** - You can track installs, app updates, sessions and additional in-app events - (including in-app purchases, game levels, etc.) - to evaluate ROI and user engagement. - The iOS SDK is compatible with all iOS/tvOS devices with iOS version 7 and above. - - @see [SDK Integration Validator](https://support.appsflyer.com/hc/en-us/articles/207032066-AppsFlyer-SDK-Integration-iOS) - for more information. - - */ -@interface AppsFlyerTracker : NSObject - -/** - Gets the singleton instance of the AppsFlyerTracker class, creating it if - necessary. - - @return The singleton instance of AppsFlyerTracker. - */ -+ (AppsFlyerTracker *)sharedTracker; - -/** - In case you use your own user ID in your app, you can set this property to that ID. - Enables you to cross-reference your own unique ID with AppsFlyer’s unique ID and the other devices’ IDs - */ -@property(nonatomic, strong, setter = setCustomerUserID:) NSString * customerUserID; - -/** - In case you use custom data and you want to receive it in the raw reports. - - @see [Setting additional custom data](https://support.appsflyer.com/hc/en-us/articles/207032066-AppsFlyer-SDK-Integration-iOS#setting-additional-custom-data) for more information. - */ -@property(nonatomic, strong, setter = setAdditionalData:) NSDictionary * customData; - -/** - Use this property to set your AppsFlyer's dev key - */ -@property(nonatomic, strong, setter = setAppsFlyerDevKey:) NSString * appsFlyerDevKey; - -/** - Use this property to set your app's Apple ID(taken from the app's page on iTunes Connect) - */ -@property(nonatomic, strong, setter = setAppleAppID:) NSString * appleAppID; - -/** - In case of in app purchase events, you can set the currency code your user has purchased with. - The currency code is a 3 letter code according to ISO standards - - Objective-C: - -
- [[AppsFlyerTracker sharedTracker] setCurrencyCode:@"USD"];
- 
- - Swift: - -
- AppsFlyerTracker.shared().currencyCode = "USD"
- 
- */ -@property(nonatomic, strong) NSString *currencyCode; - -/** - AppsFlyer SDK collect Apple's `advertisingIdentifier` if the `AdSupport.framework` included in the SDK. - You can disable this behavior by setting the following property to YES - */ -@property(atomic) BOOL disableAppleAdSupportTracking; - -/** - Prints SDK messages to the console log. This property should only be used in `DEBUG` mode. - The default value is `NO` - */ -@property(nonatomic, setter = setIsDebug:) BOOL isDebug; - -/** - Set this flag to `YES`, to collect the current device name(e.g. "My iPhone"). Default value is `NO` - */ -@property(nonatomic, setter = setShouldCollectDeviceName:) BOOL shouldCollectDeviceName; - -/** - Set your `OneLink ID` from OneLink configuration. Used in User Invites to generate a OneLink. - */ -@property(nonatomic, strong, setter = setAppInviteOneLink:) NSString * appInviteOneLinkID; - -/** - Opt-out tracking for specific user - */ -@property(atomic) BOOL deviceTrackingDisabled; - -/** - Opt-out tracking for Apple Search Ads attributions - */ -@property(atomic) BOOL disableIAdTracking; - -/** - AppsFlyer delegate. See `AppsFlyerTrackerDelegate` - */ -@property(weak, nonatomic) id delegate; - -/** - In app purchase receipt validation Apple environment(production or sandbox). The default value is NO - */ -@property(nonatomic, setter = setUseReceiptValidationSandbox:) BOOL useReceiptValidationSandbox; - -/** - Set this flag to test uninstall on Apple environment(production or sandbox). The default value is NO - */ -@property(nonatomic, setter = setUseUninstallSandbox:) BOOL useUninstallSandbox; - -/** - Advertising Id(exposed for RemoteDebug) - */ -@property(nonatomic, strong) NSString *advertiserId; - -/** - For advertisers who wrap OneLink within another Universal Link. - An advertiser will be able to deeplink from a OneLink wrapped within another Universal Link and also track this retargeting conversion. - - Objective-C: - -
- [[AppsFlyerTracker sharedTracker] setResolveDeepLinkURLs:@[@"domain.com", @"subdomain.domain.com"]];
- 
- */ -@property(nonatomic) NSArray *resolveDeepLinkURLs; - -/** - Use this to send the user's emails - - @param userEmails The list of strings that hold mails - @param type Hash algoritm - */ -- (void)setUserEmails:(NSArray *)userEmails withCryptType:(EmailCryptType)type; - -/** - Track application launch(session). - Add the following method at the `applicationDidBecomeActive` in AppDelegate class - */ -- (void)trackAppLaunch; - -/** - Use this method to track events in your app like purchases or user actions - - @param eventName Contains name of event that could be provided from predefined constants in `AppsFlyerTracker.h` - @param value Contains value for handling by backend - -
- [[AppsFlyer sharedTracker] trackEvent:AFEventPurchase withValue:"200"];
- 
- - */ -- (void)trackEvent:(NSString *)eventName withValue:(NSString *)value __attribute__((deprecated)); - -/** - Use this method to track an events with mulitple values. See AppsFlyer's documentation for details. - - Objective-C: - -
- [[AppsFlyerTracker sharedTracker] trackEvent:AFEventPurchase
-        withValues: @{AFEventParamRevenue  : @200,
-                      AFEventParamCurrency : @"USD",
-                      AFEventParamQuantity : @2,
-                      AFEventParamContentId: @"092",
-                      AFEventParamReceiptId: @"9277"}];
- 
- - Swift: - -
- AppsFlyerTracker.shared().trackEvent(AFEventPurchase,
-        withValues: [AFEventParamRevenue  : "1200",
-                     AFEventParamContent  : "shoes",
-                     AFEventParamContentId: "123"])
- 
- - @param eventName Contains name of event that could be provided from predefined constants in `AppsFlyerTracker.h` - @param values Contains dictionary of values for handling by backend - */ -- (void)trackEvent:(NSString *)eventName withValues:(NSDictionary *)values; - -/** - To track and validate in app purchases you can call this method from the completeTransaction: method on - your `SKPaymentTransactionObserver`. - - @param productIdentifier The product identifier - @param price The product price - @param currency The product currency - @param tranactionId The purchase transaction Id - @param params The additional param, which you want to receive it in the raw reports - @param successBlock The success callback - @param failedBlock The failure callback - */ -- (void)validateAndTrackInAppPurchase:(NSString *)productIdentifier - price:(NSString *)price - currency:(NSString *)currency - transactionId:(NSString *)tranactionId - additionalParameters:(NSDictionary *)params - success:(void (^)(NSDictionary *response))successBlock - failure:(void (^)(NSError *error, id reponse))failedBlock NS_AVAILABLE(10_7, 7_0); - -/** - To Track location for geo-fencing. Does the same as code below. - -
- AppsFlyerTracker.shared().trackEvent(AFEventLocation, withValues: [AFEventParamLong:longitude, AFEventParamLat:latitude])
- 
- - @param longitude The location longitude - @param latitude The location latitude - */ -- (void)trackLocation:(double)longitude latitude:(double)latitude; - -/** - This method returns AppsFlyer's internal id(unique for your app) - - @return Internal AppsFlyer Id - */ -- (NSString *)getAppsFlyerUID; - -/** - In case you want to use AppsFlyer tracking data in your app you can use the following method set a - delegate with callback buttons for the tracking data. See AppsFlyerTrackerDelegate above. - - @param delegate The AppsFlyer delegate reference - */ -- (void)loadConversionDataWithDelegate:(id)delegate __attribute__((deprecated)); - -/** - In case you want to track deep linking. Does the same as `-handleOpenURL:sourceApplication:withAnnotation`. - - @warning Prefered to use `-handleOpenURL:sourceApplication:withAnnotation`. - - @param url The URL that was passed to your AppDelegate. - @param sourceApplication The sourceApplication that passed to your AppDelegate. - */ -- (void)handleOpenURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication; - -/** - In case you want to track deep linking. - Call this method from inside your AppDelegate `-application:openURL:sourceApplication:annotation:` - - @param url The URL that was passed to your AppDelegate. - @param sourceApplication The sourceApplication that passed to your AppDelegate. - @param annotation The annotation that passed to your app delegate. - */ -- (void)handleOpenURL:(NSURL *)url - sourceApplication:(NSString *)sourceApplication - withAnnotation:(id)annotation; - -/** - Call this method from inside of your AppDelegate `-application:openURL:options:` method. - This method is functionally the same as calling the AppsFlyer method - `-handleOpenURL:sourceApplication:withAnnotation`. - - @param url The URL that was passed to your app delegate - @param options The options dictionary that was passed to your AppDelegate. - */ -- (void)handleOpenUrl:(NSURL *)url options:(NSDictionary *)options; - -/** - Allow AppsFlyer to handle restoration from an NSUserActivity. - Use this method to track deep links with OneLink. - - @param userActivity The NSUserActivity that caused the app to be opened. - */ -- (BOOL)continueUserActivity:(NSUserActivity *)userActivity - restorationHandler:(void (^)(NSArray *))restorationHandler NS_AVAILABLE_IOS(9_0); - -/** - This method is not used anymore. Exist only for backward compatability. Don't use. - - @param userActivity The NSUserActivity param. - */ -- (void)didUpdateUserActivity:(NSUserActivity *)userActivity NS_AVAILABLE_IOS(9_0); - -/** - Enable AppsFlyer to handle a push notification. - - @see [Learn more here](https://support.appsflyer.com/hc/en-us/articles/207364076-Measuring-Push-Notification-Re-Engagement-Campaigns) - - @warning To make it work - set data, related to AppsFlyer under key @"af". - - @param pushPayload The `userInfo` from received remote notification. One of root keys should be @"af". - */ -- (void)handlePushNotification:(NSDictionary *)pushPayload; - - -/** - Register uninstall - you should register for remote notification and provide AppsFlyer the push device token. - - @param deviceToken The `deviceToken` from `-application:didRegisterForRemoteNotificationsWithDeviceToken:` - */ -- (void)registerUninstall:(NSData *)deviceToken; - -/** - Get SDK version. - - @return The AppsFlyer SDK version info. - */ -- (NSString *)getSDKVersion; - -/** - This is for internal use. - */ -- (void)remoteDebuggingCallWithData:(NSString *)data; - -/** - @brief This property accepts a string value representing the host name for all endpoints. - Can be used to Zero rate your application’s data usage. Contact your CSM for more information. - - @warning To use `default` SDK endpoint – set value to `nil`. - - Objective-C: - -
- [[AppsFlyerTracker sharedTracker] setHost:@"example.com"];
- 
- - Swift: - -
- AppsFlyerTracker.shared().host = "example.com"
- 
- */ -@property(nonatomic, strong) NSString *host; - -- (void)setHost:(NSString *)host DEPRECATED_MSG_ATTRIBUTE("Use -[AppsFlyerTracker setHost:withHostPrefix:] instead"); - -/** - * This function set the host name and prefix host name for all the endpoints - **/ -- (void)setHost:(NSString *)host withHostPrefix:(NSString *)hostPrefix; - -/** - * This property accepts a string value representing the prefix host name for all endpoints. - * for example "test" prefix with default host name will have the address "host.appsflyer.com" - */ -@property(nonatomic, strong, readonly) NSString *hostPrefix; - -/** - This property is responsible for timeout between sessions in seconds. - Default value is 5 seconds. - */ -@property(atomic) NSUInteger minTimeBetweenSessions; - -/** - API to shut down all SDK activities. - - @warning This will disable all requests from AppsFlyer SDK. - */ -@property(atomic) BOOL isStopTracking; - -@end diff --git a/iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/Versions/Current b/iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/Versions/Current deleted file mode 120000 index 8c7e5a667f..0000000000 --- a/iphone/Maps/Pods/AppsFlyerFramework/AppsFlyerLib.framework/Versions/Current +++ /dev/null @@ -1 +0,0 @@ -A \ No newline at end of file diff --git a/iphone/Maps/Pods/AppsFlyerFramework/README.md b/iphone/Maps/Pods/AppsFlyerFramework/README.md deleted file mode 100644 index bfb3b938e2..0000000000 --- a/iphone/Maps/Pods/AppsFlyerFramework/README.md +++ /dev/null @@ -1,68 +0,0 @@ -

- -

- ------------ -[![Version](https://img.shields.io/cocoapods/v/AppsFlyerFramework.svg?style=flat)](http://cocoapods.org/pods/AppsFlyerFramework) - -[AppsFlyer](https://www.appsflyer.com/) helps mobile marketers measure and improve their performance through amazing tools, really big data and over 2,000 integrations. - - - -- Supports iOS 8+ - -Installation ------------- - -### CocoaPods - -Just add `pod 'AppsFlyerFramework'` into your [Podfile](https://guides.cocoapods.org/syntax/podfile.html). - -Then run - -```zsh -$ pod install -``` - -Finally, import the framework: - -```swift -// Swift -import AppsFlyerLib -``` - -```objc -// ObjC -#import -``` - -### Carthage - -Just add the following into your [Cartfile](https://github.com/Carthage/Carthage/blob/master/Documentation/Artifacts.md#cartfile): -``` -binary "https://raw.githubusercontent.com/AppsFlyerSDK/AppsFlyerFramework/master/AppsFlyerTracker.json" -``` - -Then run - -```zsh -$ carthage bootstrap -``` - -**Note:** -Old URI referencing `Carthage.json` is deprecated. If you use it please update your Cartfile to the new one to ease dependency management. - - - -Changelog ------------- - -You can find the release changelog [here](https://support.appsflyer.com/hc/en-us/articles/115001224823-AppsFlyer-iOS-SDK-Release-Notes). - ---- - -In order for us to provide optimal support, we would kindly ask you to submit any issues to support@appsflyer.com - -*When submitting an issue please specify your AppsFlyer sign-up (account) email, your app ID, production steps, logs, code snippets and any additional relevant information.* - ----------- diff --git a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/FBAudienceNetwork b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/FBAudienceNetwork deleted file mode 100644 index 754b5e30c4..0000000000 Binary files a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/FBAudienceNetwork and /dev/null differ diff --git a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdBridgeCommon.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdBridgeCommon.h deleted file mode 100644 index 313c7d2fbc..0000000000 --- a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdBridgeCommon.h +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -/*** - * This is a bridge file for Audience Network Unity SDK. - * - * This file may be used to build your own Audience Network iOS SDK wrapper, - * but note that we don't support customisations of the Audience Network codebase. - * - ***/ - -#import - -#import -#import - -FB_EXTERN_C_BEGIN - -// External to this project -typedef NS_ENUM(NSInteger, FBGLViewController) { - FBGLViewControllerNone, - FBGLViewControllerUnity, - FBGLViewControllerCocos2D, -}; - -__attribute__((weak)) extern UIViewController *UnityGetGLViewController(void); -__attribute__((__always_inline__)) extern FBGLViewController fbad_Cocos2DGetGLViewController( - UIViewController **glViewController); - -__attribute__((__always_inline__)) extern UIViewController *fbad_GetGLViewController(void); -__attribute__((__always_inline__)) extern FBGLViewController fbad_UnityGetGLViewController( - UIViewController **glViewController); - -FB_EXTERN_C_END diff --git a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdBridgeContainer.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdBridgeContainer.h deleted file mode 100644 index ace31e0493..0000000000 --- a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdBridgeContainer.h +++ /dev/null @@ -1,103 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -/*** - * This is a bridge file for Audience Network Unity SDK. - * - * This file may be used to build your own Audience Network iOS SDK wrapper, - * but note that we don't support customisations of the Audience Network codebase. - * - ***/ - -#import - -#import -#import -#import -#import - -typedef void (*FBAdBridgeCallback)(uint32_t uniqueId); -typedef void (*FBAdBridgeErrorCallback)(uint32_t uniqueId, char const *error); - -@interface FBAdBridgeContainer : NSObject - -@property (nonatomic, assign) int32_t uniqueId; - -// Explicitly remove callbacks -- (void)dispose; - -@end - -@interface FBAdViewBridgeContainer : FBAdBridgeContainer - -@property (nonatomic, strong) FBAdView *adView; - -@property (nonatomic, assign) FBAdBridgeCallback adViewDidClickCallback; -@property (nonatomic, assign) FBAdBridgeCallback adViewDidFinishHandlingClickCallback; -@property (nonatomic, assign) FBAdBridgeCallback adViewDidLoadCallback; -@property (nonatomic, assign) FBAdBridgeErrorCallback adViewDidFailWithErrorCallback; -@property (nonatomic, assign) FBAdBridgeCallback adViewWillLogImpressionCallback; - -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; - -- (instancetype)initWithAdView:(FBAdView *)adView withUniqueId:(int32_t)uniqueId NS_DESIGNATED_INITIALIZER; - -@end - -@interface FBInterstitialAdBridgeContainer : FBAdBridgeContainer - -@property (nonatomic, strong) FBInterstitialAd *interstitialAd; - -@property (nonatomic, assign) FBAdBridgeCallback interstitialAdDidClickCallback; -@property (nonatomic, assign) FBAdBridgeCallback interstitialAdDidCloseCallback; -@property (nonatomic, assign) FBAdBridgeCallback interstitialAdWillCloseCallback; -@property (nonatomic, assign) FBAdBridgeCallback interstitialAdDidLoadCallback; -@property (nonatomic, assign) FBAdBridgeErrorCallback interstitialAdDidFailWithErrorCallback; -@property (nonatomic, assign) FBAdBridgeCallback interstitialAdWillLogImpressionCallback; - -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; - -- (instancetype)initWithInterstitialAd:(FBInterstitialAd *)interstitialAd - withUniqueId:(int32_t)uniqueId NS_DESIGNATED_INITIALIZER; - -@end - -@interface FBRewardedVideoAdBridgeContainer : FBAdBridgeContainer - -@property (nonatomic, strong) FBRewardedVideoAd *rewardedVideoAd; - -@property (nonatomic, assign) FBAdBridgeCallback rewardedVideoAdDidClickCallback; -@property (nonatomic, assign) FBAdBridgeCallback rewardedVideoAdDidCloseCallback; -@property (nonatomic, assign) FBAdBridgeCallback rewardedVideoAdWillCloseCallback; -@property (nonatomic, assign) FBAdBridgeCallback rewardedVideoAdDidLoadCallback; -@property (nonatomic, assign) FBAdBridgeErrorCallback rewardedVideoAdDidFailWithErrorCallback; -@property (nonatomic, assign) FBAdBridgeCallback rewardedVideoAdWillLogImpressionCallback; - -@property (nonatomic, assign) FBAdBridgeCallback rewardedVideoAdVideoCompleteCallback; -@property (nonatomic, assign) FBAdBridgeCallback rewardedVideoAdServerRewardDidSucceedCallback; -@property (nonatomic, assign) FBAdBridgeCallback rewardedVideoAdServerRewardDidFailCallback; - -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; - -- (instancetype)initWithRewardedVideoAd:(FBRewardedVideoAd *)rewardedVideoAd - withUniqueId:(int32_t)uniqueId NS_DESIGNATED_INITIALIZER; - -@end diff --git a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdChoicesView.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdChoicesView.h deleted file mode 100644 index 5c47090afa..0000000000 --- a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdChoicesView.h +++ /dev/null @@ -1,125 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -@class FBAdImage; -@class FBNativeAdBase; -@class FBNativeAdViewAttributes; - -/** - FBAdChoicesView offers a simple way to display a sponsored or AdChoices icon. - */ -FB_CLASS_EXPORT FB_SUBCLASSING_RESTRICTED @interface FBAdChoicesView : UIView - -/** - Access to the text label contained in this view. - */ -@property (nonatomic, weak, readonly, nullable) UILabel *label; - -/** - Determines whether the background mask is shown, or a transparent mask is used. - */ -@property (nonatomic, assign, getter=isBackgroundShown) BOOL backgroundShown; - -/** - Determines whether the view can be expanded upon being tapped, or defaults to fullsize. Defaults to NO. - */ -@property (nonatomic, assign, readonly, getter=isExpandable) BOOL expandable; - -/** - The native ad that provides AdChoices info, such as the image url, and click url. Setting this updates the nativeAd. - */ -@property (nonatomic, weak, readwrite, nullable) FBNativeAdBase *nativeAd; - -/** - Affects background mask rendering. Setting this property updates the rendering. - */ -@property (nonatomic, assign, readwrite) UIRectCorner corner; - -/** - Affects background mask rendering. Setting this property updates the rendering. - */ -@property (nonatomic, assign, readwrite) UIEdgeInsets insets; - -/** - The view controller to present the ad choices info from. If nil, the top view controller is used. - */ -@property (nonatomic, weak, readwrite, null_resettable) UIViewController *rootViewController; - -/** - The tag for AdChoices view. It always returns FBNativeAdViewTagChoicesIcon. - */ -@property (nonatomic, assign, readonly) FBNativeAdViewTag nativeAdViewTag; - -/** - Initialize this view with a given native ad. Configuration is pulled from the native ad. - - @param nativeAd The native ad to initialize with. - */ -- (instancetype)initWithNativeAd:(FBNativeAdBase *)nativeAd; - -/** - Initialize this view with a given native ad. Configuration is pulled from the native ad. - - @param nativeAd The native ad to initialize with. - @param expandable Controls whether view defaults to expanded or not, see property documentation - */ -- (instancetype)initWithNativeAd:(FBNativeAdBase *)nativeAd expandable:(BOOL)expandable; - -/** - Initialize this view with a given native ad. Configuration is pulled from the native ad. - - @param nativeAd The native ad to initialize with. - @param expandable Controls whether view defaults to expanded or not, see property documentation - @param attributes Attributes to configure look and feel. - */ -- (instancetype)initWithNativeAd:(FBNativeAdBase *)nativeAd - expandable:(BOOL)expandable - attributes:(nullable FBNativeAdViewAttributes *)attributes; - -/** - Using the superview, this updates the frame of this view, positioning the icon in the top right corner by default. - */ -- (void)updateFrameFromSuperview; - -/** - Using the superview, this updates the frame of this view, positioning the icon in the corner specified. - UIRectCornerAllCorners not supported. - - @param corner The corner to display this view from. - */ -- (void)updateFrameFromSuperview:(UIRectCorner)corner; - -/** - Using the superview, this updates the frame of this view, positioning the icon in the corner specified. - UIRectCornerAllCorners not supported. - - @param corner The corner to display this view from. - @param insets Insets to take into account when positioning the view. Only respective insets are applied to corners. - */ -- (void)updateFrameFromSuperview:(UIRectCorner)corner insets:(UIEdgeInsets)insets; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdDefines.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdDefines.h deleted file mode 100644 index 761c70d9bb..0000000000 --- a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdDefines.h +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#ifndef FBAudienceNetwork_FBAdDefines_h -#define FBAudienceNetwork_FBAdDefines_h - -#ifdef __cplusplus -#define FB_EXTERN_C_BEGIN extern "C" { -#define FB_EXTERN_C_END } -#else -#define FB_EXTERN_C_BEGIN -#define FB_EXTERN_C_END -#endif - -#ifdef __cplusplus -#define FB_EXPORT extern "C" __attribute__((visibility("default"))) -#else -#define FB_EXPORT extern __attribute__((visibility("default"))) -#endif - -#define FB_CLASS_EXPORT __attribute__((visibility("default"))) -#define FB_DEPRECATED __attribute__((deprecated)) -#define FB_DEPRECATED_WITH_MESSAGE(M) __attribute__((deprecated(M))) - -#if __has_feature(objc_generics) -#define FB_NSArrayOf(x) NSArray -#define FB_NSMutableArrayOf(x) NSMutableArray -#define FB_NSDictionaryOf(x, y) NSDictionary -#define FB_NSMutableDictionaryOf(x, y) NSMutableDictionary -#define FB_NSSetOf(x) NSSet -#define FB_NSMutableSetOf(x) NSMutableSet -#else -#define FB_NSArrayOf(x) NSArray -#define FB_NSMutableArrayOf(x) NSMutableArray -#define FB_NSDictionaryOf(x, y) NSDictionary -#define FB_NSMutableDictionaryOf(x, y) NSMutableDictionary -#define FB_NSSetOf(x) NSSet -#define FB_NSMutableSetOf(x) NSMutableSet -#define __covariant -#endif - -#if !__has_feature(nullability) -#define NS_ASSUME_NONNULL_BEGIN -#define NS_ASSUME_NONNULL_END -#define nullable -#define __nullable -#endif - -#ifndef FB_SUBCLASSING_RESTRICTED -#if defined(__has_attribute) && __has_attribute(objc_subclassing_restricted) -#define FB_SUBCLASSING_RESTRICTED __attribute__((objc_subclassing_restricted)) -#else -#define FB_SUBCLASSING_RESTRICTED -#endif -#endif - -#endif diff --git a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdExperienceConfig.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdExperienceConfig.h deleted file mode 100644 index a1986c720f..0000000000 --- a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdExperienceConfig.h +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -#import - -NS_ASSUME_NONNULL_BEGIN - -typedef NSString *FBAdExperienceType NS_STRING_ENUM; -extern FBAdExperienceType const FBAdExperienceTypeRewarded; -extern FBAdExperienceType const FBAdExperienceTypeInterstitial; -extern FBAdExperienceType const FBAdExperienceTypeRewardedInterstitial; - -FB_CLASS_EXPORT -/** - FBAdExperienceConfig is class designed to add some configuration to ad experience - */ -@interface FBAdExperienceConfig : NSObject - -/** - Ad experience type to set up - */ -@property (nonatomic, strong, readwrite, nonnull) FBAdExperienceType adExperienceType; - -- (instancetype)init NS_UNAVAILABLE; - -+ (instancetype)new NS_UNAVAILABLE; - -/** - Creates an FBAdExperienceConfig with a specified type of experience - */ -- (instancetype)initWithAdExperienceType:(FBAdExperienceType)adExperienceType NS_DESIGNATED_INITIALIZER; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdExtraHint.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdExtraHint.h deleted file mode 100644 index fb262889ba..0000000000 --- a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdExtraHint.h +++ /dev/null @@ -1,100 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -#import - -NS_ASSUME_NONNULL_BEGIN - -typedef NSString *FBAdExtraHintKeyword NS_STRING_ENUM; -extern FBAdExtraHintKeyword const FBAdExtraHintKeywordAccessories; -extern FBAdExtraHintKeyword const FBAdExtraHintKeywordArtHistory; -extern FBAdExtraHintKeyword const FBAdExtraHintKeywordAutomotive; -extern FBAdExtraHintKeyword const FBAdExtraHintKeywordBeauty; -extern FBAdExtraHintKeyword const FBAdExtraHintKeywordBiology; -extern FBAdExtraHintKeyword const FBAdExtraHintKeywordBoardGames; -extern FBAdExtraHintKeyword const FBAdExtraHintKeywordBusinessSoftware; -extern FBAdExtraHintKeyword const FBAdExtraHintKeywordBuyingSellingHomes; -extern FBAdExtraHintKeyword const FBAdExtraHintKeywordCats; -extern FBAdExtraHintKeyword const FBAdExtraHintKeywordCelebrities; -extern FBAdExtraHintKeyword const FBAdExtraHintKeywordClothing; -extern FBAdExtraHintKeyword const FBAdExtraHintKeywordComicBooks; -extern FBAdExtraHintKeyword const FBAdExtraHintKeywordDesktopVideo; -extern FBAdExtraHintKeyword const FBAdExtraHintKeywordDogs; -extern FBAdExtraHintKeyword const FBAdExtraHintKeywordEducation; -extern FBAdExtraHintKeyword const FBAdExtraHintKeywordEmail; -extern FBAdExtraHintKeyword const FBAdExtraHintKeywordEntertainment; -extern FBAdExtraHintKeyword const FBAdExtraHintKeywordFamilyParenting; -extern FBAdExtraHintKeyword const FBAdExtraHintKeywordFashion; -extern FBAdExtraHintKeyword const FBAdExtraHintKeywordFineArt; -extern FBAdExtraHintKeyword const FBAdExtraHintKeywordFoodDrink; -extern FBAdExtraHintKeyword const FBAdExtraHintKeywordFrenchCuisine; -extern FBAdExtraHintKeyword const FBAdExtraHintKeywordGovernment; -extern FBAdExtraHintKeyword const FBAdExtraHintKeywordHealthFitness; -extern FBAdExtraHintKeyword const FBAdExtraHintKeywordHobbies; -extern FBAdExtraHintKeyword const FBAdExtraHintKeywordHomeGarden; -extern FBAdExtraHintKeyword const FBAdExtraHintKeywordHumor; -extern FBAdExtraHintKeyword const FBAdExtraHintKeywordInternetTechnology; -extern FBAdExtraHintKeyword const FBAdExtraHintKeywordLargeAnimals; -extern FBAdExtraHintKeyword const FBAdExtraHintKeywordLaw; -extern FBAdExtraHintKeyword const FBAdExtraHintKeywordLegalIssues; -extern FBAdExtraHintKeyword const FBAdExtraHintKeywordLiterature; -extern FBAdExtraHintKeyword const FBAdExtraHintKeywordMarketing; -extern FBAdExtraHintKeyword const FBAdExtraHintKeywordMovies; -extern FBAdExtraHintKeyword const FBAdExtraHintKeywordMusic; -extern FBAdExtraHintKeyword const FBAdExtraHintKeywordNews; -extern FBAdExtraHintKeyword const FBAdExtraHintKeywordPersonalFinance; -extern FBAdExtraHintKeyword const FBAdExtraHintKeywordPets; -extern FBAdExtraHintKeyword const FBAdExtraHintKeywordPhotography; -extern FBAdExtraHintKeyword const FBAdExtraHintKeywordPolitics; -extern FBAdExtraHintKeyword const FBAdExtraHintKeywordRealEstate; -extern FBAdExtraHintKeyword const FBAdExtraHintKeywordRoleplayingGames; -extern FBAdExtraHintKeyword const FBAdExtraHintKeywordScience; -extern FBAdExtraHintKeyword const FBAdExtraHintKeywordShopping; -extern FBAdExtraHintKeyword const FBAdExtraHintKeywordSociety; -extern FBAdExtraHintKeyword const FBAdExtraHintKeywordSports; -extern FBAdExtraHintKeyword const FBAdExtraHintKeywordTechnology; -extern FBAdExtraHintKeyword const FBAdExtraHintKeywordTelevision; -extern FBAdExtraHintKeyword const FBAdExtraHintKeywordTravel; -extern FBAdExtraHintKeyword const FBAdExtraHintKeywordVideoComputerGames; - -FB_CLASS_EXPORT -@interface FBAdExtraHint : NSObject - -@property (nonatomic, copy, nullable) - NSString *contentURL FB_DEPRECATED_WITH_MESSAGE("Extra hints are no longer used in Audience Network"); - -@property (nonatomic, copy, nullable) - NSString *extraData FB_DEPRECATED_WITH_MESSAGE("Extra hints are no longer used in Audience Network"); - -@property (nonatomic, copy, nullable) - NSString *mediationData FB_DEPRECATED_WITH_MESSAGE("Extra hints are no longer used in Audience Network"); - -- (instancetype)initWithKeywords:(NSArray *)keywords - FB_DEPRECATED_WITH_MESSAGE("Keywords are no longer used in Audience Network"); - -- (void)addKeyword:(FBAdExtraHintKeyword)keyword - FB_DEPRECATED_WITH_MESSAGE("Keywords are no longer used in Audience Network"); - -- (void)removeKeyword:(FBAdExtraHintKeyword)keyword - FB_DEPRECATED_WITH_MESSAGE("Keywords are no longer used in Audience Network"); - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdIconView.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdIconView.h deleted file mode 100644 index f9e8ed9700..0000000000 --- a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdIconView.h +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -#import -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -FB_CLASS_EXPORT -FB_DEPRECATED_WITH_MESSAGE("This class will be removed in a future release. Use FBMediaView instead.") -@interface FBAdIconView : FBMediaView - -/** - The tag for the icon view. It always returns FBNativeAdViewTagIcon. - */ -@property (nonatomic, assign, readonly) FBNativeAdViewTag nativeAdViewTag; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdImage.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdImage.h deleted file mode 100644 index 088d1ef2fc..0000000000 --- a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdImage.h +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - Represents an image creative. - */ -FB_CLASS_EXPORT -@interface FBAdImage : NSObject - -/** - Typed access to the image url. - */ -@property (nonatomic, copy, readonly) NSURL *url; -/** - Typed access to the image width. - */ -@property (nonatomic, assign, readonly) NSInteger width; -/** - Typed access to the image height. - */ -@property (nonatomic, assign, readonly) NSInteger height; - -/** - This is a method to initialize an FBAdImage. - - @param url the image url. - @param width the image width. - @param height the image height. - */ -- (instancetype)initWithURL:(NSURL *)url width:(NSInteger)width height:(NSInteger)height NS_DESIGNATED_INITIALIZER; - -/** - Loads an image from self.url over the network, or returns the cached image immediately. - - @param block Block to handle the loaded image. - */ -- (void)loadImageAsyncWithBlock:(nullable void (^)(UIImage *__nullable image))block; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdOptionsView.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdOptionsView.h deleted file mode 100644 index 4115454f50..0000000000 --- a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdOptionsView.h +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -NS_ASSUME_NONNULL_BEGIN - -@class FBNativeAdBase; - -/** - Minimum dimensions of the view. - */ -extern const CGFloat FBAdOptionsViewWidth; -extern const CGFloat FBAdOptionsViewHeight; - -@interface FBAdOptionsView : UIView - -/** - The native ad that provides AdChoices info, such as click url. Setting this updates the nativeAd. - */ -@property (nonatomic, weak, readwrite, nullable) FBNativeAdBase *nativeAd; - -/** - The color to be used when drawing the AdChoices view. - */ -@property (nonatomic, strong, nullable) UIColor *foregroundColor; - -/** - Only show the ad choices triangle icon. Default is NO. - - Sizing note: - - Single icon is rendered in a square frame, it will default to the smallest dimension. - - Non single icon requires aspect ratio of the view to be 2.4 or less. - */ -@property (nonatomic, assign) BOOL useSingleIcon; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdSettings.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdSettings.h deleted file mode 100644 index 3cd5bf5674..0000000000 --- a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdSettings.h +++ /dev/null @@ -1,227 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - Audience Network error domain - */ -FB_EXPORT NSString *const FBAudienceNetworkErrorDomain; -/** - Audience Network error FBMediaView error domain - */ -FB_EXPORT NSString *const FBAudienceNetworkMediaViewErrorDomain; - -/** - Audience Network SDK logging levels - */ -typedef NS_ENUM(NSInteger, FBAdLogLevel) { - /// No logging - FBAdLogLevelNone, - /// Notifications - FBAdLogLevelNotification, - /// Errors only - FBAdLogLevelError, - /// Warnings only - FBAdLogLevelWarning, - /// Standard log level - FBAdLogLevelLog, - /// Debug logging - FBAdLogLevelDebug, - /// Log everything (verbose) - FBAdLogLevelVerbose -}; - -/** - Test Ad type to be injected when test mode is on - */ -typedef NS_ENUM(NSInteger, FBAdTestAdType) { - /// This will return a random ad type when test mode is on. - FBAdTestAdType_Default, - /// 16x9 image ad with app install CTA option - FBAdTestAdType_Img_16_9_App_Install, - /// 16x9 image ad with link CTA option - FBAdTestAdType_Img_16_9_Link, - /// 16x9 HD video 46 sec ad with app install CTA option - FBAdTestAdType_Vid_HD_16_9_46s_App_Install, - /// 16x9 HD video 46 sec ad with link CTA option - FBAdTestAdType_Vid_HD_16_9_46s_Link, - /// 16x9 HD video 15 sec ad with app install CTA option - FBAdTestAdType_Vid_HD_16_9_15s_App_Install, - /// 16x9 HD video 15 sec ad with link CTA option - FBAdTestAdType_Vid_HD_16_9_15s_Link, - /// 9x16 HD video 39 sec ad with app install CTA option - FBAdTestAdType_Vid_HD_9_16_39s_App_Install, - /// 9x16 HD video 39 sec ad with link CTA option - FBAdTestAdType_Vid_HD_9_16_39s_Link, - /// carousel ad with square image and app install CTA option - FBAdTestAdType_Carousel_Img_Square_App_Install, - /// carousel ad with square image and link CTA option - FBAdTestAdType_Carousel_Img_Square_Link, - /// carousel ad with square video and link CTA option - FBAdTestAdType_Carousel_Vid_Square_Link, - /// sample playable ad with app install CTA - FBAdTestAdType_Playable -}; - -@protocol FBAdLoggingDelegate; - -/** - AdSettings contains global settings for all ad controls. - */ -FB_CLASS_EXPORT FB_SUBCLASSING_RESTRICTED @interface FBAdSettings : NSObject - -/** - Controls support for audio-only video playback when the app is backgrounded. Note that this is only supported - when using FBMediaViewVideoRenderer, and requires corresponding support for background audio to be added to - the app. Default value is NO. - */ -@property (class, nonatomic, assign, getter=isBackgroundVideoPlaybackAllowed) BOOL backgroundVideoPlaybackAllowed; - -/** - When test mode is on, setting a non default value for testAdType will - requests the specified type of ad. - */ -@property (class, nonatomic, assign) FBAdTestAdType testAdType; - -/** - When this delegate is set, logs will be redirected to the delegate instead of being logged directly to the console with - NSLog. This can be used in combination with external logging frameworks. - */ -@property (class, nonatomic, weak, nullable) id loggingDelegate; - -/** - Generates bidder token that needs to be included in the server side bid request to Facebook endpoint. - */ -@property (class, nonatomic, copy, readonly) NSString *bidderToken; - -/** - Generates routing token needed for requests routing in reverse-proxy, since we don't have cookies in app environments. - */ -@property (class, nonatomic, copy, readonly) NSString *routingToken; - -/** - Returns test mode on/off. - */ -+ (BOOL)isTestMode; - -/** - Returns the hashid of the device to use test mode on. - */ -+ (NSString *)testDeviceHash; - -/** - Adds a test device. - - @param deviceHash The id of the device to use test mode, can be obtained from debug log or testDeviceHash - - - - Copy the current device Id from debug log and add it as a test device to get test ads. Apps - running on emulator will automatically get test ads. Test devices should be added before loadAd is called. - */ -+ (void)addTestDevice:(NSString *)deviceHash; - -/** - Add a collection of test devices. See `+addTestDevices:` for details. - - @param devicesHash The array of the device id to use test mode, can be obtained from debug log or testDeviceHash - */ -+ (void)addTestDevices:(FB_NSArrayOf(NSString *) *)devicesHash; - -/** - Clear all the added test devices - */ -+ (void)clearTestDevices; - -/** - Clears the added test device - - @param deviceHash The id of the device using test mode, can be obtained from debug log or testDeviceHash - */ -+ (void)clearTestDevice:(NSString *)deviceHash; - -/** - Configures the ad control for treatment as child-directed. - - @param isChildDirected Indicates whether you would like your ad control to be treated as child-directed - - Note that you may have other legal obligations under the Children's Online Privacy Protection Act (COPPA). - Please review the FTC's guidance and consult with your own legal counsel. - */ -+ (void)setIsChildDirected:(BOOL)isChildDirected - FB_DEPRECATED_WITH_MESSAGE( - "isChildDirected method is no longer supported in Audience Network. Use +mixedAudience instead"); - -/** - Configures the ad control for treatment as mixed audience directed. - Information for Mixed Audience Apps and Services: https://developers.facebook.com/docs/audience-network/coppa - */ -@property (class, nonatomic, assign, getter=isMixedAudience) BOOL mixedAudience; - -/** - If an ad provided service is mediating Audience Network in their sdk, it is required to set the name of the mediation - service - - @param service Representing the name of the mediation that is mediation Audience Network - */ -+ (void)setMediationService:(NSString *)service; - -/** - Gets the url prefix to use when making ad requests. - - This method should never be used in production. - */ -+ (nullable NSString *)urlPrefix; - -/** - Sets the url prefix to use when making ad requests. - - - - This method should never be used in production. - */ -+ (void)setUrlPrefix:(nullable NSString *)urlPrefix; - -/** - Gets the current SDK logging level - */ -+ (FBAdLogLevel)getLogLevel; - -/** - Sets the current SDK logging level - */ -+ (void)setLogLevel:(FBAdLogLevel)level; - -@end - -@protocol FBAdLoggingDelegate - -- (void)logAtLevel:(FBAdLogLevel)level - withFileName:(NSString *)fileName - withLineNumber:(int)lineNumber - withThreadId:(long)threadId - withBody:(NSString *)body; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdSettingsBridge.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdSettingsBridge.h deleted file mode 100644 index 1dc99c575a..0000000000 --- a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdSettingsBridge.h +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -/*** - * This is a bridge file for Audience Network Unity SDK. - * - * Please refer to FBAdSettings.h for full documentation of the API. - * - * This file may be used to build your own Audience Network iOS SDK wrapper, - * but note that we don't support customisations of the Audience Network codebase. - * - ***/ - -#import - -NS_ASSUME_NONNULL_BEGIN - -FB_EXTERN_C_BEGIN - -FB_EXPORT void FBAdSettingsBridgeAddTestDevice(char const *deviceID); -FB_EXPORT void FBAdSettingsBridgeSetURLPrefix(char const *urlPrefix); -FB_EXPORT void FBAdSettingsBridgeSetIsChildDirected(bool isChildDirected); -FB_EXPORT void FBAdSettingsBridgeSetMixedAudience(bool mixedAudience); -FB_EXPORT char const *__nullable FBAdSettingsBridgeGetBidderToken(void); - -FB_EXTERN_C_END - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdSize.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdSize.h deleted file mode 100644 index ef17ba95be..0000000000 --- a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdSize.h +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -#import - -NS_ASSUME_NONNULL_BEGIN - -/// Represents the ad size. -struct FBAdSize { - /// Internal size - CGSize size; -}; - -/// Represents the ad size. -typedef struct FBAdSize FBAdSize; - -/** - DEPRECATED - Represents the fixed banner ad size - 320pt by 50pt. - */ -FB_EXPORT FBAdSize const kFBAdSize320x50; - -/** - Represents the flexible banner ad size, where banner width depends on - its container width, and banner height is fixed as 50pt. - */ -FB_EXPORT FBAdSize const kFBAdSizeHeight50Banner; - -/** - Represents the flexible banner ad size, where banner width depends on - its container width, and banner height is fixed as 90pt. - */ -FB_EXPORT FBAdSize const kFBAdSizeHeight90Banner; - -/** - Represents the interstitial ad size. - */ -FB_EXPORT FBAdSize const kFBAdSizeInterstitial; - -/** - Represents the flexible rectangle ad size, where width depends on - its container width, and height is fixed as 250pt. - */ -FB_EXPORT FBAdSize const kFBAdSizeHeight250Rectangle; - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdUtilityBridge.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdUtilityBridge.h deleted file mode 100644 index 17c008b609..0000000000 --- a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdUtilityBridge.h +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -/*** - * This is a bridge file for Audience Network Unity SDK. - * - * Please refer to FBAdScreen.h for full documentation of the API. - * - * This file may be used to build your own Audience Network iOS SDK wrapper, - * but note that we don't support customisations of the Audience Network codebase. - * - ***/ - -#import - -FB_EXTERN_C_BEGIN - -FB_EXPORT double FBAdUtilityBridgeGetDeviceWidth(void); -FB_EXPORT double FBAdUtilityBridgeGetDeviceHeight(void); -FB_EXPORT double FBAdUtilityBridgeGetWidth(void); -FB_EXPORT double FBAdUtilityBridgeGetHeight(void); - -FB_EXPORT double FBAdUtilityBridgeConvertFromDeviceSize(double deviceSize); - -FB_EXTERN_C_END diff --git a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdView.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdView.h deleted file mode 100644 index de27718e8a..0000000000 --- a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdView.h +++ /dev/null @@ -1,161 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -#import -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -@protocol FBAdViewDelegate; - -/** - A customized UIView to represent a Facebook ad (a.k.a. banner ad). - */ -FB_CLASS_EXPORT -@interface FBAdView : UIView - -/** - This is a method to initialize an FBAdView matching the given placement id. - - @param placementID The id of the ad placement. You can create your placement id from Facebook developers page. - @param adSize The size of the ad; for example, kFBAdSizeHeight50Banner or kFBAdSizeHeight90Banner. - @param rootViewController The view controller that will be used to present the ad and the app store view. - */ -- (instancetype)initWithPlacementID:(NSString *)placementID - adSize:(FBAdSize)adSize - rootViewController:(nullable UIViewController *)rootViewController NS_DESIGNATED_INITIALIZER; - -/** - This is a method to initialize an FBAdView matching the given placement id with a given bidding payload. - - @param placementID The id of the ad placement. You can create your placement id from Facebook developers page. - @param bidPayload The bid payload sent from the server. - @param rootViewController The view controller that will be used to present the ad and the app store view. - @param error An out value that returns any error encountered during init. - */ -- (nullable instancetype)initWithPlacementID:(NSString *)placementID - bidPayload:(NSString *)bidPayload - rootViewController:(nullable UIViewController *)rootViewController - error:(NSError *__autoreleasing *)error; - -/** - Begins loading the FBAdView content. - - - You can implement `adViewDidLoad:` and `adView:didFailWithError:` methods - of `FBAdViewDelegate` if you would like to be notified as loading succeeds or fails. - */ -- (void)loadAd; - -/** - Begins loading the FBAdView content from a bid payload attained through a server side bid. - - - You can implement `adViewDidLoad:` and `adView:didFailWithError:` methods - of `FBAdViewDelegate` if you would like to be notified as loading succeeds or fails. - - @param bidPayload The payload of the ad bid. You can get your bid id from Facebook bidder endpoint. - */ -- (void)loadAdWithBidPayload:(NSString *)bidPayload; - -/** - There is no reason to call this method anymore. Autorefresh is disabled by default. - */ -- (void)disableAutoRefresh FB_DEPRECATED; - -/** - Typed access to the id of the ad placement. - */ -@property (nonatomic, copy, readonly) NSString *placementID; -/** - Typed access to the app's root view controller. - */ -@property (nonatomic, weak, readonly, nullable) UIViewController *rootViewController; -/** - Call isAdValid to check whether ad is valid - */ -@property (nonatomic, getter=isAdValid, readonly) BOOL adValid; -/** - the delegate - */ -@property (nonatomic, weak, nullable) id delegate; -/** - FBAdExtraHint to provide extra info - */ -@property (nonatomic, strong, nullable) FBAdExtraHint *extraHint; - -@end - -/** - The methods declared by the FBAdViewDelegate protocol allow the adopting delegate to respond - to messages from the FBAdView class and thus respond to operations such as whether the ad has - been loaded, the person has clicked the ad. - */ -@protocol FBAdViewDelegate - -@optional - -/** - Sent after an ad has been clicked by the person. - - @param adView An FBAdView object sending the message. - */ -- (void)adViewDidClick:(FBAdView *)adView; -/** - When an ad is clicked, the modal view will be presented. And when the user finishes the - interaction with the modal view and dismiss it, this message will be sent, returning control - to the application. - - @param adView An FBAdView object sending the message. - */ -- (void)adViewDidFinishHandlingClick:(FBAdView *)adView; -/** - Sent when an ad has been successfully loaded. - - @param adView An FBAdView object sending the message. - */ -- (void)adViewDidLoad:(FBAdView *)adView; -/** - Sent after an FBAdView fails to load the ad. - - @param adView An FBAdView object sending the message. - @param error An error object containing details of the error. - */ -- (void)adView:(FBAdView *)adView didFailWithError:(NSError *)error; - -/** - Sent immediately before the impression of an FBAdView object will be logged. - - @param adView An FBAdView object sending the message. - */ -- (void)adViewWillLogImpression:(FBAdView *)adView; - -/** - Asks the delegate for a view controller to present modal content, such as the in-app - browser that can appear when an ad is clicked. - - @return A view controller that is used to present modal content. - */ -@property (nonatomic, readonly, strong) UIViewController *viewControllerForPresentingModalView; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdViewBridge.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdViewBridge.h deleted file mode 100644 index 378bd1ed81..0000000000 --- a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAdViewBridge.h +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -/*** - * This is a bridge file for Audience Network Unity SDK. - * - * Please refer to FBAdView.h and FBAdExtraHint.h for full documentation of the API. - * - * This file may be used to build your own Audience Network iOS SDK wrapper, - * but note that we don't support customisations of the Audience Network codebase. - * - ***/ - -#import - -FB_EXTERN_C_BEGIN - -typedef NS_ENUM(int32_t, FBAdViewBridgeSize) { - FBAdViewBridgeSizeHeight50BannerKey, - FBAdViewBridgeSizeHeight90BannerKey, - FBAdViewBridgeSizeInterstitalKey, - FBAdViewBridgeSizeHeight250RectangleKey -}; - -FB_EXPORT int32_t FBAdViewBridgeSizeHeight50Banner(void); -FB_EXPORT int32_t FBAdViewBridgeSizeHeight90Banner(void); -FB_EXPORT int32_t FBAdViewBridgeSizeInterstital(void); -FB_EXPORT int32_t FBAdViewBridgeSizeHeight250Rectangle(void); - -FB_EXPORT int32_t FBAdViewBridgeCreate(char const *placementID, FBAdViewBridgeSize size); -FB_EXPORT int32_t FBAdViewBridgeLoad(int32_t uniqueId); -FB_EXPORT int32_t FBAdViewBridgeLoadWithBidPayload(int32_t uniqueId, char *bidPayload); - -FB_EXPORT bool FBAdViewBridgeIsValid(int32_t uniqueId); -FB_EXPORT void FBAdViewBridgeShow(int32_t uniqueId, double x, double y, double width, double height); -FB_EXPORT char const *FBAdViewBridgeGetPlacementId(int32_t uniqueId); -FB_EXPORT void FBAdViewBridgeDisableAutoRefresh(int32_t uniqueId); -FB_EXPORT void FBAdViewBridgeSetExtraHints(int32_t uniqueId, char const *extraHints); -FB_EXPORT void FBAdViewBridgeRelease(int32_t uniqueId); - -FB_EXPORT void FBAdViewBridgeOnLoad(int32_t uniqueId, FBAdBridgeCallback callback); -FB_EXPORT void FBAdViewBridgeOnImpression(int32_t uniqueId, FBAdBridgeCallback callback); -FB_EXPORT void FBAdViewBridgeOnClick(int32_t uniqueId, FBAdBridgeCallback callback); -FB_EXPORT void FBAdViewBridgeOnError(int32_t uniqueId, FBAdBridgeErrorCallback callback); -FB_EXPORT void FBAdViewBridgeOnFinishedClick(int32_t uniqueId, FBAdBridgeCallback callback); - -FB_EXTERN_C_END diff --git a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAudienceNetwork.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAudienceNetwork.h deleted file mode 100644 index 546e0a763c..0000000000 --- a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAudienceNetwork.h +++ /dev/null @@ -1,60 +0,0 @@ - -// Copyright 2004-present Facebook. All Rights Reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import - -// Unity Bridge -#import -#import -#import -#import -#import -#import -#import - -// NOTE: Any changes should also be made to the module.modulemap -// to ensure comptability with Swift apps using Cocoapods - -#define FB_AD_SDK_VERSION @"5.9.0" diff --git a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAudienceNetworkAds.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAudienceNetworkAds.h deleted file mode 100644 index 399ce5b696..0000000000 --- a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBAudienceNetworkAds.h +++ /dev/null @@ -1,103 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - FBAdInitSettings is an object to incapsulate all the settings you can pass to SDK on initialization call. - */ -FB_CLASS_EXPORT FB_SUBCLASSING_RESTRICTED @interface FBAdInitSettings : NSObject - -/** - Designated initializer for FBAdInitSettings - If an ad provided service is mediating Audience Network in their sdk, it is required to set the name of the mediation - service - - @param placementIDs An array of placement identifiers. - @param mediationService String to identify mediation provider. - */ -- (instancetype)initWithPlacementIDs:(NSArray *)placementIDs mediationService:(NSString *)mediationService; - -/** - An array of placement identifiers. - */ -@property (nonatomic, copy, readonly) NSArray *placementIDs; - -/** - String to identify mediation provider. - */ -@property (nonatomic, copy, readonly) NSString *mediationService; - -@end - -/** - FBAdInitResults is an object to incapsulate all the results you'll get as a result of SDK initialization call. - */ -FB_CLASS_EXPORT FB_SUBCLASSING_RESTRICTED @interface FBAdInitResults : NSObject - -/** - Boolean which says whether initialization was successful - */ -@property (nonatomic, assign, readonly, getter=isSuccess) BOOL success; - -/** - Message which provides more details about initialization result - */ -@property (nonatomic, copy, readonly) NSString *message; - -@end - -/** - FBAudienceNetworkAds is an entry point to AN SDK. - */ -typedef NS_ENUM(NSInteger, FBAdFormatTypeName) { - FBAdFormatTypeNameUnknown = 0, - FBAdFormatTypeNameBanner, - FBAdFormatTypeNameInterstitial, - FBAdFormatTypeNameInstream, - FBAdFormatTypeNameNative, - FBAdFormatTypeNameNativeBanner, - FBAdFormatTypeNameRewardedVideo, -}; - -FB_CLASS_EXPORT FB_SUBCLASSING_RESTRICTED @interface FBAudienceNetworkAds : NSObject - -/** - Initialize Audience Network SDK at any given point of time. It will be called automatically with default settigs when - you first touch AN related code otherwise. - - @param settings The settings to initialize with - @param completionHandler The block which will be called when initialization finished - */ -+ (void)initializeWithSettings:(nullable FBAdInitSettings *)settings - completionHandler:(nullable void (^)(FBAdInitResults *results))completionHandler; - -/** - Returns ad format type name for a given placement id. - - @param placementId Placement id that is configured for the current app. - */ -+ (FBAdFormatTypeName)adFormatTypeNameForPlacementId:(NSString *)placementId; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBInstreamAdView.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBInstreamAdView.h deleted file mode 100644 index 3950a41faf..0000000000 --- a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBInstreamAdView.h +++ /dev/null @@ -1,147 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -@protocol FBInstreamAdViewDelegate; - -/** - A customized UIView to display an instream video ad by Facebook. - */ -FB_CLASS_EXPORT FB_SUBCLASSING_RESTRICTED @interface FBInstreamAdView : UIView - -/** - Returns YES if the instream ad has been successfully loaded. - - Note that the `adView:didFailWithError:` delegate method will be also be called - instead of `adViewDidLoad:` if the ad fails to load for any reason. - */ -@property (nonatomic, getter=isAdValid, readonly) BOOL adValid; - -/** - This property must be set prior to calling `loadAd`, so that delegate method calls - are received and handled. - */ -@property (nonatomic, weak, nullable) id delegate; - -/** - Typed access to the id of the ad placement. - */ -@property (nonatomic, copy, readonly) NSString *placementID; - -/** - FBAdExtraHint to provide extra info - */ -@property (nonatomic, strong, nullable) FBAdExtraHint *extraHint; - -/** - Initializes and returns a newly allocated FBInstreamAdView object with the - given placement id. - - @param placementID The id of the ad placement. You can create your placement id from Facebook developers page. - */ -- (nullable instancetype)initWithPlacementID:(NSString *)placementID NS_DESIGNATED_INITIALIZER; - -/** - Begins loading ad content. - - You should implement `adViewDidLoad:` and `adView:didFailWithError:` methods - of `FBInstreamAdViewDelegate` to be notified when loading succeeds or fails. - */ -- (void)loadAd; - -/** - Begins loading ad content from a bid payload attained through a server side bid. - - - You can implement `adViewDidLoad:` and `adView:didFailWithError:` methods - of `FBInstreamAdViewDelegate` to be notified when loading succeeds or fails. - - @param bidPayload The payload of the ad bid. You can get your bid id from Facebook bidder endpoint. - */ -- (void)loadAdWithBidPayload:(NSString *)bidPayload; - -/** - Begins ad playback. This method should only be called after an `adViewDidLoad:` call - has been received. - - @param rootViewController The view controller that will be used to modally - present additional view controllers, to render the ad's landing page for example. - */ -- (BOOL)showAdFromRootViewController:(nullable UIViewController *)rootViewController; - -@end - -/** - The FBInstreamAdViewDelegate protocol defines methods that allow the owner of an - FBInstreamAdView to respond to various stages of ad operation. - */ -@protocol FBInstreamAdViewDelegate - -/** - Sent when an FBInstreamAdView instance successfully loads an ad. - - @param adView The FBInstreamAdView object sending the message. - */ -- (void)adViewDidLoad:(FBInstreamAdView *)adView; - -/** - Sent when ad playback has completed and the FBInstreamAdView is ready to be - deallocated. This method is mutually exclusive to `adView:didFailWithError:`, and - it is impossible for both methods to be received for a single ad session. - - @param adView The FBInstreamAdView object sending the message. - */ -- (void)adViewDidEnd:(FBInstreamAdView *)adView; - -/** - Sent when ad playback has failed to load or play an ad, and the FBInstreamAdView - is ready to be deallocated. It is possible for this method to be called after - `loadAd` (if they ad fails to load) or after `showAdFromRootViewController:` - (if the ad has a playback failure). - - @param adView The FBInstreamAdView object sending the message. - @param error An NSError object containing details of the error. - */ -- (void)adView:(FBInstreamAdView *)adView didFailWithError:(NSError *)error; - -@optional - -/** - Sent when the user has touched the click-through interface element. The ad's - landing page will be shown. - - @param adView The FBInstreamAdView object sending the message. - */ -- (void)adViewDidClick:(FBInstreamAdView *)adView; - -/** - Sent immediately before the impression of an FBInstreamAdView object will be logged. - - @param adView The FBInstreamAdView object sending the message. - */ -- (void)adViewWillLogImpression:(FBInstreamAdView *)adView; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBInterstitialAd.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBInterstitialAd.h deleted file mode 100644 index 3366c5c276..0000000000 --- a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBInterstitialAd.h +++ /dev/null @@ -1,152 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -#import -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -@protocol FBInterstitialAdDelegate; - -/** - A modal view controller to represent a Facebook interstitial ad. This - is a full-screen ad shown in your application. - */ -FB_CLASS_EXPORT FB_SUBCLASSING_RESTRICTED @interface FBInterstitialAd : NSObject - -/** - Typed access to the id of the ad placement. - */ -@property (nonatomic, copy, readonly) NSString *placementID; -/** - the delegate - */ -@property (nonatomic, weak, nullable) id delegate; -/** - FBAdExtraHint to provide extra info - */ -@property (nonatomic, strong, nullable) FBAdExtraHint *extraHint; - -/** - This is a method to initialize an FBInterstitialAd matching the given placement id. - - @param placementID The id of the ad placement. You can create your placement id from Facebook developers page. - */ -- (instancetype)initWithPlacementID:(NSString *)placementID NS_DESIGNATED_INITIALIZER; - -/** - Returns true if the interstitial ad has been successfully loaded. - - - You should check `isAdValid` before trying to show the ad. - */ -@property (nonatomic, getter=isAdValid, readonly) BOOL adValid; - -/** - Begins loading the FBInterstitialAd content. - - - You can implement `interstitialAdDidLoad:` and `interstitialAd:didFailWithError:` methods - of `FBInterstitialAdDelegate` if you would like to be notified as loading succeeds or fails. - */ -- (void)loadAd; - -/** - Begins loading the FBInterstitialAd content from a bid payload attained through a server side bid. - - - You can implement `adViewDidLoad:` and `adView:didFailWithError:` methods - of `FBAdViewDelegate` if you would like to be notified as loading succeeds or fails. - - @param bidPayload The payload of the ad bid. You can get your bid id from Facebook bidder endpoint. - */ -- (void)loadAdWithBidPayload:(NSString *)bidPayload; - -/** - Presents the interstitial ad modally from the specified view controller. - - @param rootViewController The view controller that will be used to present the interstitial ad. - - - You can implement `interstitialAdDidClick:`, `interstitialAdWillClose:` and `interstitialAdWillClose` - methods of `FBInterstitialAdDelegate` if you would like to stay informed for thoses events - */ -- (BOOL)showAdFromRootViewController:(nullable UIViewController *)rootViewController; - -@end - -/** - The methods declared by the FBInterstitialAdDelegate protocol allow the adopting delegate to respond - to messages from the FBInterstitialAd class and thus respond to operations such as whether the - interstitial ad has been loaded, user has clicked or closed the interstitial. - */ -@protocol FBInterstitialAdDelegate - -@optional - -/** - Sent after an ad in the FBInterstitialAd object is clicked. The appropriate app store view or - app browser will be launched. - - @param interstitialAd An FBInterstitialAd object sending the message. - */ -- (void)interstitialAdDidClick:(FBInterstitialAd *)interstitialAd; - -/** - Sent after an FBInterstitialAd object has been dismissed from the screen, returning control - to your application. - - @param interstitialAd An FBInterstitialAd object sending the message. - */ -- (void)interstitialAdDidClose:(FBInterstitialAd *)interstitialAd; - -/** - Sent immediately before an FBInterstitialAd object will be dismissed from the screen. - - @param interstitialAd An FBInterstitialAd object sending the message. - */ -- (void)interstitialAdWillClose:(FBInterstitialAd *)interstitialAd; - -/** - Sent when an FBInterstitialAd successfully loads an ad. - - @param interstitialAd An FBInterstitialAd object sending the message. - */ -- (void)interstitialAdDidLoad:(FBInterstitialAd *)interstitialAd; - -/** - Sent when an FBInterstitialAd failes to load an ad. - - @param interstitialAd An FBInterstitialAd object sending the message. - @param error An error object containing details of the error. - */ -- (void)interstitialAd:(FBInterstitialAd *)interstitialAd didFailWithError:(NSError *)error; - -/** - Sent immediately before the impression of an FBInterstitialAd object will be logged. - - @param interstitialAd An FBInterstitialAd object sending the message. - */ -- (void)interstitialAdWillLogImpression:(FBInterstitialAd *)interstitialAd; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBInterstitialAdBridge.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBInterstitialAdBridge.h deleted file mode 100644 index c111748503..0000000000 --- a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBInterstitialAdBridge.h +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -/*** - * This is a bridge file for Audience Network Unity SDK. - * - * Please refer to FBInterstitialAd.h and FBAdExtraHint.h for full documentation of the API. - * - * This file may be used to build your own Audience Network iOS SDK wrapper, - * but note that we don't support customisations of the Audience Network codebase. - * - ***/ - -#import - -FB_EXTERN_C_BEGIN - -FB_EXPORT int32_t FBInterstitialAdBridgeCreate(char const *placementID); -FB_EXPORT int32_t FBInterstitialAdBridgeLoad(int32_t uniqueId); -FB_EXPORT int32_t FBInterstitialAdBridgeLoadWithBidPayload(int32_t uniqueId, char *bidPayload); - -FB_EXPORT bool FBInterstitialAdBridgeIsValid(int32_t uniqueId); -FB_EXPORT char const *FBInterstitialAdBridgeGetPlacementId(int32_t uniqueId); -FB_EXPORT bool FBInterstitialAdBridgeShow(int32_t uniqueId); -FB_EXPORT void FBInterstitialAdBridgeSetExtraHints(int32_t uniqueId, char const *extraHints); -FB_EXPORT void FBInterstitialAdBridgeRelease(int32_t uniqueId); - -FB_EXPORT void FBInterstitialAdBridgeOnLoad(int32_t uniqueId, FBAdBridgeCallback callback); -FB_EXPORT void FBInterstitialAdBridgeOnImpression(int32_t uniqueId, FBAdBridgeCallback callback); -FB_EXPORT void FBInterstitialAdBridgeOnClick(int32_t uniqueId, FBAdBridgeCallback callback); -FB_EXPORT void FBInterstitialAdBridgeOnError(int32_t uniqueId, FBAdBridgeErrorCallback callback); -FB_EXPORT void FBInterstitialAdBridgeOnDidClose(int32_t uniqueId, FBAdBridgeCallback callback); -FB_EXPORT void FBInterstitialAdBridgeOnWillClose(int32_t uniqueId, FBAdBridgeCallback callback); - -FB_EXTERN_C_END diff --git a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBMediaView.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBMediaView.h deleted file mode 100644 index 43625628da..0000000000 --- a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBMediaView.h +++ /dev/null @@ -1,140 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -#import -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -@protocol FBMediaViewDelegate; -@class FBNativeAd; - -/** - The FBMediaView loads media content from a given FBNativeAd. This view takes the place of manually loading a cover - image. - */ -FB_CLASS_EXPORT -@interface FBMediaView : UIView - -/** - the delegate - */ -@property (nonatomic, weak, nullable) id delegate; - -/** - A custom FBMediaViewVideoRenderer instance, used to override the default user experience of video ads. - The video renderer can only be set prior to registering the mediaView to a nativeAd - */ -@property (nonatomic, strong) FBMediaViewVideoRenderer *videoRenderer; - -/** - The current volume of the media view, ranging from 0.0 through 1.0. - */ -@property (nonatomic, assign, readonly) float volume; - -/** - Shows if the video will autoplay or not - */ -@property (nonatomic, readonly, getter=isAutoplayEnabled) BOOL autoplayEnabled; - -/** - The aspect ratio of the media view visual content. Returns a positive CGFloat, or 0.0 if no ad is currently loaded. - */ -@property (nonatomic, assign, readonly) CGFloat aspectRatio; - -/** - The tag for media view. It always returns FBNativeAdViewTagMedia. - */ -@property (nonatomic, assign, readonly) FBNativeAdViewTag nativeAdViewTag; - -/** - Changes the width of the FBMediaView's frame based on the current height, respecting aspectRatio. - */ -- (void)applyNaturalWidth; - -/** - Changes the height of the FBMediaView's frame based on the current width, respecting aspectRatio. - */ -- (void)applyNaturalHeight; - -@end - -/** - The methods declared by the FBMediaViewDelegate protocol allow the adopting delegate to respond to messages from the - FBMediaView class and thus respond to operations such as whether the media content has been loaded. - */ -@protocol FBMediaViewDelegate - -@optional - -/** - Sent when an FBMediaView has been successfully loaded. - - @param mediaView An FBMediaView object sending the message. - */ -- (void)mediaViewDidLoad:(FBMediaView *)mediaView; - -/** - Sent just before an FBMediaView will enter the fullscreen layout. - - @param mediaView An FBMediaView object sending the message. - */ -- (void)mediaViewWillEnterFullscreen:(FBMediaView *)mediaView; - -/** - Sent after an FBMediaView has exited the fullscreen layout. - - @param mediaView An FBMediaView object sending the message. - */ -- (void)mediaViewDidExitFullscreen:(FBMediaView *)mediaView; - -/** - Sent when an FBMediaView has changed the playback volume of a video ad. - - @param mediaView An FBMediaView object sending the message. - @param volume The current ad video volume (after the volume change). - */ -- (void)mediaView:(FBMediaView *)mediaView videoVolumeDidChange:(float)volume; - -/** - Sent after a video ad in an FBMediaView enters a paused state. - - @param mediaView An FBMediaView object sending the message. - */ -- (void)mediaViewVideoDidPause:(FBMediaView *)mediaView; - -/** - Sent after a video ad in an FBMediaView enters a playing state. - - @param mediaView An FBMediaView object sending the message. - */ -- (void)mediaViewVideoDidPlay:(FBMediaView *)mediaView; - -/** - Sent when a video ad in an FBMediaView reaches the end of playback. - - @param mediaView An FBMediaView object sending the message. - */ -- (void)mediaViewVideoDidComplete:(FBMediaView *)mediaView; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBMediaViewVideoRenderer.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBMediaViewVideoRenderer.h deleted file mode 100644 index 336956b0da..0000000000 --- a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBMediaViewVideoRenderer.h +++ /dev/null @@ -1,149 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import -#import - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - The FBMediaViewVideoRenderer class allows for customization of the user experience for video ads in FBMediaView. This - class should be subclassed, and an instance of that subclass should be passed to the videoRenderer property of an - FBMediaView instance. - */ -FB_CLASS_EXPORT -@interface FBMediaViewVideoRenderer : UIView - -/** - The aspect ratio of the video content. Returns a positive CGFloat, or 0.0 if no ad is currently loaded. - */ -@property (nonatomic, assign, readonly) CGFloat aspectRatio; - -/** - The current video playback time, as a CMTime value. - */ -@property (nonatomic, assign, readonly) CMTime currentTime; - -/** - The duration of the video, as a CMTime value. Returns kCMTimeIndefinite if no video is loaded. - */ -@property (nonatomic, assign, readonly) CMTime duration; - -/** - Indicates whether the video is currently playing. - */ -@property (nonatomic, assign, readonly, getter=isPlaying) BOOL playing; - -/** - The current volume of the video, ranging from 0.0 through 1.0. - */ -@property (nonatomic, assign) float volume; - -/** - Starts or resumes video playback. - */ -- (void)playVideo; - -/** - Pauses video playback. - */ -- (void)pauseVideo; - -/** - Used to put the video into seek mode. Video playback halts, and one or more calls to seekVideoToTime: can be made - before calling disengageVideoSeek. - */ -- (void)engageVideoSeek; - -/** - Take the video out of seek mode. - */ -- (void)disengageVideoSeek; - -/** - Seeks the video to a particular time location. Only works after calling `engageVideoSeek`. - @param time The requested time location, expressed as a CMTime value. - */ -- (void)seekVideoToTime:(CMTime)time; - -/** - Requests the periodic invocation of a given block during playback to report changing time. - @param interval The time interval at which the block should be invoked during normal playback, according to progress of - the player's current time. - @param queue A serial dispatch queue onto which block should be enqueued. - @param block The block to be invoked periodically. - */ -- (nullable id)addPeriodicTimeObserverForInterval:(CMTime)interval - queue:(dispatch_queue_t)queue - usingBlock:(void (^)(CMTime time))block; - -/** - Cancels a previously registered periodic time observer. - */ -- (void)removeTimeObserver:(id)observer; - -/** - Called when the video volume has changed. - */ -- (void)videoDidChangeVolume; - -/** - Called when video content has loaded. - */ -- (void)videoDidLoad; - -/** - Called when video playback was paused. - */ -- (void)videoDidPause; - -/** - Called when video playback has begun or was resumed. - */ -- (void)videoDidPlay; - -/** - Called when seek mode was engaged. - */ -- (void)videoDidEngageSeek; - -/** - Called when a video seek was performed. - */ -- (void)videoDidSeek; - -/** - Called when seek mode was disengaged. - */ -- (void)videoDidDisengageSeek; - -/** - Called when video playback ends. - */ -- (void)videoDidEnd; - -/** - Called when video playback encounters an error. - */ -- (void)videoDidFailWithError:(NSError *)error; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeAd.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeAd.h deleted file mode 100644 index eef11b9f43..0000000000 --- a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeAd.h +++ /dev/null @@ -1,171 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -#import -#import -#import - -#import "FBAdImage.h" - -NS_ASSUME_NONNULL_BEGIN - -@protocol FBNativeAdDelegate; - -/** - The FBNativeAd represents ad metadata to allow you to construct custom ad views. - See the AdUnitsSample in the sample apps section of the Audience Network framework. - */ -FB_CLASS_EXPORT FB_SUBCLASSING_RESTRICTED @interface FBNativeAd : FBNativeAdBase - -/** - the delegate - */ -@property (nonatomic, weak, nullable) id delegate; - -- (instancetype)initWithPlacementID:(NSString *)placementID; - -/** - This is a method to associate a FBNativeAd with the UIView you will use to display the native ads. - - @param view The UIView you created to render all the native ads data elements. - @param mediaView The FBMediaView you created to render the media (cover image / video / carousel) - @param iconView The FBMediaView you created to render the icon - @param viewController The UIViewController that will be used to present SKStoreProductViewController - (iTunes Store product information) or the in-app browser. If nil is passed, the top view controller currently shown - will be used. The whole area of the UIView will be clickable. - */ -- (void)registerViewForInteraction:(UIView *)view - mediaView:(FBMediaView *)mediaView - iconView:(nullable FBMediaView *)iconView - viewController:(nullable UIViewController *)viewController; - -/** - This is a method to associate FBNativeAd with the UIView you will use to display the native ads - and set clickable areas. - - @param view The UIView you created to render all the native ads data elements. - @param mediaView The FBMediaView you created to render the media (cover image / video / carousel) - @param iconView The FBMediaView you created to render the icon - @param viewController The UIViewController that will be used to present SKStoreProductViewController - (iTunes Store product information). If nil is passed, the top view controller currently shown will be used. - @param clickableViews An array of UIView you created to render the native ads data element, e.g. - CallToAction button, Icon image, which you want to specify as clickable. - */ -- (void)registerViewForInteraction:(UIView *)view - mediaView:(FBMediaView *)mediaView - iconView:(nullable FBMediaView *)iconView - viewController:(nullable UIViewController *)viewController - clickableViews:(nullable NSArray *)clickableViews; - -/** - This is a method to associate a FBNativeAd with the UIView you will use to display the native ads. - - @param view The UIView you created to render all the native ads data elements. - @param mediaView The FBMediaView you created to render the media (cover image / video / carousel) - @param iconImageView The UIImageView you created to render the icon - @param viewController The UIViewController that will be used to present SKStoreProductViewController - (iTunes Store product information) or the in-app browser. If nil is passed, the top view controller currently shown - will be used. The whole area of the UIView will be clickable. - */ -- (void)registerViewForInteraction:(UIView *)view - mediaView:(FBMediaView *)mediaView - iconImageView:(nullable UIImageView *)iconImageView - viewController:(nullable UIViewController *)viewController; - -/** - This is a method to associate FBNativeAd with the UIView you will use to display the native ads - and set clickable areas. - - @param view The UIView you created to render all the native ads data elements. - @param mediaView The FBMediaView you created to render the media (cover image / video / carousel) - @param iconImageView The UIImageView you created to render the icon. Image will be set - @param viewController The UIViewController that will be used to present SKStoreProductViewController - (iTunes Store product information). If nil is passed, the top view controller currently shown will be used. - @param clickableViews An array of UIView you created to render the native ads data element, e.g. - CallToAction button, Icon image, which you want to specify as clickable. - */ -- (void)registerViewForInteraction:(UIView *)view - mediaView:(FBMediaView *)mediaView - iconImageView:(nullable UIImageView *)iconImageView - viewController:(nullable UIViewController *)viewController - clickableViews:(nullable NSArray *)clickableViews; - -/** - This is a method to use to download all media for the ad (adChoicesIcon, icon, image, video). - This is only needed to be called if the mediaCachePolicy is set to FBNativeAdsCachePolicyNone. - */ -- (void)downloadMedia; - -@end - -/** - The methods declared by the FBNativeAdDelegate protocol allow the adopting delegate to respond to messages - from the FBNativeAd class and thus respond to operations such as whether the native ad has been loaded. - */ -@protocol FBNativeAdDelegate - -@optional - -/** - Sent when an FBNativeAd has been successfully loaded. - - @param nativeAd An FBNativeAd object sending the message. - */ -- (void)nativeAdDidLoad:(FBNativeAd *)nativeAd; - -/** - Sent when an FBNativeAd has succesfully downloaded all media - */ -- (void)nativeAdDidDownloadMedia:(FBNativeAd *)nativeAd; - -/** - Sent immediately before the impression of an FBNativeAd object will be logged. - - @param nativeAd An FBNativeAd object sending the message. - */ -- (void)nativeAdWillLogImpression:(FBNativeAd *)nativeAd; - -/** - Sent when an FBNativeAd is failed to load. - - @param nativeAd An FBNativeAd object sending the message. - @param error An error object containing details of the error. - */ -- (void)nativeAd:(FBNativeAd *)nativeAd didFailWithError:(NSError *)error; - -/** - Sent after an ad has been clicked by the person. - - @param nativeAd An FBNativeAd object sending the message. - */ -- (void)nativeAdDidClick:(FBNativeAd *)nativeAd; - -/** - When an ad is clicked, the modal view will be presented. And when the user finishes the - interaction with the modal view and dismiss it, this message will be sent, returning control - to the application. - - @param nativeAd An FBNativeAd object sending the message. - */ -- (void)nativeAdDidFinishHandlingClick:(FBNativeAd *)nativeAd; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeAdBase.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeAdBase.h deleted file mode 100644 index 30d1a331fb..0000000000 --- a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeAdBase.h +++ /dev/null @@ -1,206 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -#import - -#import "FBAdSettings.h" - -typedef NS_ENUM(NSInteger, FBAdFormatType) { - FBAdFormatTypeUnknown = 0, - FBAdFormatTypeImage, - FBAdFormatTypeVideo, - FBAdFormatTypeCarousel -}; - -NS_ASSUME_NONNULL_BEGIN - -@class FBAdIconView; -@class FBAdImage; -@class FBAdPlacementDefinition; -@class FBAdProvider; -@class FBMediaView; -@class FBNativeAdDataModel; -@class FBNativeAdViewAttributes; - -/** - Determines if caching of the ad's assets should be done before calling adDidLoad - */ -typedef NS_ENUM(NSInteger, FBNativeAdsCachePolicy) { - /// No ad content is cached - FBNativeAdsCachePolicyNone, - /// All content is cached - FBNativeAdsCachePolicyAll, -}; - -/** - The Internal representation of an Ad - */ -@interface FBNativeAdBase : NSObject -/** - Typed access to the id of the ad placement. - */ -@property (nonatomic, copy, readonly) NSString *placementID; -/** - Typed access to the headline that the advertiser entered when they created their ad. This is usually the ad's main - title. - */ -@property (nonatomic, copy, readonly, nullable) NSString *headline; -/** - Typed access to the link description which is additional information that the advertiser may have entered. - */ -@property (nonatomic, copy, readonly, nullable) NSString *linkDescription; -/** - Typed access to the name of the Facebook Page or mobile app that represents the business running the ad. - */ -@property (nonatomic, copy, readonly, nullable) NSString *advertiserName; -/** - Typed access to the ad social context, for example "Over half a million users". - */ -@property (nonatomic, copy, readonly, nullable) NSString *socialContext; -/** - Typed access to the call to action phrase of the ad, for example "Install Now". - */ -@property (nonatomic, copy, readonly, nullable) NSString *callToAction; -/** - Typed access to the body raw untruncated text, Contains the text that the advertiser entered when they created their - ad. This often tells people what the ad is promoting. - */ -@property (nonatomic, copy, readonly, nullable) NSString *rawBodyText; -/** - Typed access to the body text, truncated at length 90, which contains the text that the advertiser entered when they - created their ad. This often tells people what the ad is promoting. - */ -@property (nonatomic, copy, readonly, nullable) NSString *bodyText; -/** - Typed access to the word 'sponsored', translated into the language being used by the person viewing the ad. - */ -@property (nonatomic, copy, readonly, nullable) NSString *sponsoredTranslation; -/** - Typed access to the word 'ad', translated into the language being used by the person viewing the ad. - */ -@property (nonatomic, copy, readonly, nullable) NSString *adTranslation; -/** - Typed access to the word 'promoted', translated into the language being used by the person viewing the ad. - */ -@property (nonatomic, copy, readonly, nullable) NSString *promotedTranslation; -/** - Typed access to the AdChoices icon. See `FBAdImage` for details. See `FBAdChoicesView` for an included implementation. - */ -@property (nonatomic, strong, readonly, nullable) FBAdImage *adChoicesIcon; -/** - Typed access to the icon image. Only available after ad is successfully loaded. - */ -@property (nonatomic, strong, readonly, nullable) UIImage *iconImage; -/** - Aspect ratio of the ad creative. - */ -@property (nonatomic, assign, readonly) CGFloat aspectRatio; -/** - Typed access to the AdChoices URL. Navigate to this link when the icon is tapped. See `FBAdChoicesView` for an included - implementation. - */ -@property (nonatomic, copy, readonly, nullable) NSURL *adChoicesLinkURL; -/** - Typed access to the AdChoices text, usually a localized version of "AdChoices". See `FBAdChoicesView` for an included - implementation. - */ -@property (nonatomic, copy, readonly, nullable) NSString *adChoicesText; -/** - Typed access to the ad format type. See `FBAdFormatType` enum for more details. - */ -@property (nonatomic, assign, readonly) FBAdFormatType adFormatType; -/** - Read only access to native ad caching policy, it is set in loadAWithMediaCachePolicy: - */ -@property (nonatomic, readonly) FBNativeAdsCachePolicy mediaCachePolicy; - -/** - Call isAdValid to check whether native ad is valid & internal consistent prior rendering using its properties. If - rendering is done as part of the loadAd callback, it is guarantee to be consistent - */ -@property (nonatomic, getter=isAdValid, readonly) BOOL adValid; - -@property (nonatomic, getter=isRegistered, readonly) BOOL registered; -/** - FBAdExtraHint to provide extra info - */ -@property (nonatomic, strong, nullable) FBAdExtraHint *extraHint; -/** - This is a method to disconnect a FBNativeAd with the UIView you used to display the native ads. - */ -- (void)unregisterView; - -/** - Begins loading the FBNativeAd content. - - You can implement `nativeAdDidLoad:` and `nativeAd:didFailWithError:` methods - of `FBNativeAdDelegate` if you would like to be notified as loading succeeds or fails. - */ -- (void)loadAd; - -/** - Begins loading the FBNativeAd content. - - You can implement `nativeAdDidLoad:` and `nativeAd:didFailWithError:` methods - of `FBNativeAdDelegate` if you would like to be notified as loading succeeds or fails. - - @param mediaCachePolicy controls which media (images, video, etc) from the native ad are cached before the native ad - calls nativeAdLoaded on its delegate. The default is to cache everything. Note that impression is not logged until the - media for the ad is visible on screen (Video or Image for FBNativeAd / Icon for FBNativeBannerAd) and setting this to - anything else than FBNativeAdsCachePolicyAll will delay the impression call. - */ -- (void)loadAdWithMediaCachePolicy:(FBNativeAdsCachePolicy)mediaCachePolicy; - -/** - Begins loading the FBNativeAd content from a bid payload attained through a server side bid. - - @param bidPayload The payload of the ad bid. You can get your bid payload from Facebook bidder endpoint. - */ -- (void)loadAdWithBidPayload:(NSString *)bidPayload; - -/** - Begins loading the FBNativeAd content from a bid payload attained through a server side bid. - - @param bidPayload The payload of the ad bid. You can get your bid payload from Facebook bidder endpoint. - - @param mediaCachePolicy controls which media (images, video, etc) from the native ad are cached before the native ad - calls nativeAdLoaded on its delegate. The default is to cache everything. Note that impression is not logged until the - media for the ad is visible on screen (Video or Image for FBNativeAd / Icon for FBNativeBannerAd) and setting this to - anything else than FBNativeAdsCachePolicyAll will delay the impression call. - */ -- (void)loadAdWithBidPayload:(NSString *)bidPayload mediaCachePolicy:(FBNativeAdsCachePolicy)mediaCachePolicy; - -/** - Creates a new instance of a FBNativeAdBase from a bid payload. The actual subclass returned will depend on the contents - of the payload. - - @param placementId The placement ID of the ad. - - @param bidPayload The bid payload received from the server. - - @param error An out value that returns any error encountered during init. - */ -+ (nullable instancetype)nativeAdWithPlacementId:(NSString *)placementId - bidPayload:(NSString *)bidPayload - error:(NSError *__autoreleasing *)error; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeAdBaseView.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeAdBaseView.h deleted file mode 100644 index 6a5c916408..0000000000 --- a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeAdBaseView.h +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -@class FBNativeAdViewAttributes; - -/** - The FBNativeAdBaseView creates prebuilt native ad base template views and manages native ads. - */ -FB_CLASS_EXPORT -@interface FBNativeAdBaseView : UIView - -/** - A view controller that is used to present modal content. If nil, the view searches for a view controller. - */ -@property (nonatomic, weak, nullable) UIViewController *rootViewController; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeAdCollectionViewAdProvider.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeAdCollectionViewAdProvider.h deleted file mode 100644 index f49bcc44c2..0000000000 --- a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeAdCollectionViewAdProvider.h +++ /dev/null @@ -1,96 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import -#import - -#import -#import -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - Additional functionality on top of FBNativeAdsManager to assist in using native ads within a UICollectionView. This - class contains a mechanism to map indexPaths to native ads in a stable manner as well as helpers which assist in doing - the math to include ads at a regular interval within a collection view. - */ -FB_CLASS_EXPORT -@interface FBNativeAdCollectionViewAdProvider : NSObject - -/** - Passes delegate methods from FBNativeAd. Separate delegate calls will be made for each native ad contained. - */ -@property (nonatomic, weak, nullable) id delegate; - -/** - FBAdExtraHint to provide extra info - */ -@property (nonatomic, strong, nullable) FBAdExtraHint *extraHint; - -/** - Create a FBNativeAdCollectionViewAdProvider. - - @param manager The FBNativeAdsManager which is consumed by this class. - */ -- (instancetype)initWithManager:(FBNativeAdsManager *)manager NS_DESIGNATED_INITIALIZER; - -/** - Retrieve a native ad for an indexPath, will return the same ad for a given indexPath until the native ads manager is - refreshed. This method is intended for usage with a collection view and specifically the caller is recommended to wait - until collectionView:cellForRowAtIndexPath: to ensure getting the best native ad for the given collection cell. - - @param collectionView The collectionView where native ad will be used - @param indexPath The indexPath to use as a key for this native ad - @return A FBNativeAd which is loaded and ready to be used. - */ -- (FBNativeAd *)collectionView:(UICollectionView *)collectionView nativeAdForRowAtIndexPath:(NSIndexPath *)indexPath; - -/** - Support for evenly distributed native ads within a collection view. Computes whether this cell is an ad or not. - - @param indexPath The indexPath of the cell within the collection view - @param stride The frequency that native ads are to appear within the collection view - @return Boolean indicating whether the cell at the path is an ad - */ -- (BOOL)isAdCellAtIndexPath:(NSIndexPath *)indexPath forStride:(NSUInteger)stride; - -/** - Support for evenly distributed native ads within a collection view. Adjusts a non-ad cell indexPath to the indexPath - it would be in a collection with no ads. - - @param indexPath The indexPath to of the non-ad cell - @param stride The frequency that native ads are to appear within the collection view - @return An indexPath adjusted to what it would be in a collection view with no ads - */ -- (nullable NSIndexPath *)adjustNonAdCellIndexPath:(NSIndexPath *)indexPath forStride:(NSUInteger)stride; - -/** - Support for evenly distributed native ads within a collection view. Adjusts the total count of cells within the - collection view to account for the ad cells. - - @param count The count of cells in the collection view not including ads - @param stride The frequency that native ads are to appear within the collection view - @return The total count of cells within the collection view including both ad and non-ad cells - */ -- (NSUInteger)adjustCount:(NSUInteger)count forStride:(NSUInteger)stride; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeAdCollectionViewCellProvider.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeAdCollectionViewCellProvider.h deleted file mode 100644 index 7ce2f42679..0000000000 --- a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeAdCollectionViewCellProvider.h +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import -#import - -#import -#import -#import -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - Class which assists in putting FBNativeAdViews into UICollectionViews. This class manages the creation of - UICollectionViewCells which host native ad views. Functionality is provided to create UICollectionCellViews as needed - for a given indexPath as well as computing the height of the cells. - */ -FB_CLASS_EXPORT FB_SUBCLASSING_RESTRICTED @interface FBNativeAdCollectionViewCellProvider - : FBNativeAdCollectionViewAdProvider - -/** - Method to create a FBNativeAdCollectionViewCellProvider. - - @param manager The naitve ad manager consumed by this provider - @param type The type of this native ad template. For more information, consult FBNativeAdViewType. - */ -- (instancetype)initWithManager:(FBNativeAdsManager *)manager forType:(FBNativeAdViewType)type; - -/** - Method to create a FBNativeAdCollectionViewCellProvider. - - @param manager The naitve ad manager consumed by this provider - @param type The type of this native ad template. For more information, consult FBNativeAdViewType. - @param attributes The layout of this native ad template. For more information, consult FBNativeAdViewLayout. - */ -- (instancetype)initWithManager:(FBNativeAdsManager *)manager - forType:(FBNativeAdViewType)type - forAttributes:(FBNativeAdViewAttributes *)attributes NS_DESIGNATED_INITIALIZER; - -/** - Helper method for implementors of UICollectionViewDataSource who would like to host native ad UICollectionViewCells in - their collection view. - */ -- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView - cellForItemAtIndexPath:(NSIndexPath *)indexPath; - -/** - Helper method for implementors of UICollectionViewDelegate who would like to host native ad UICollectionViewCells in - their collection view. - */ -- (CGFloat)collectionView:(UICollectionView *)collectionView heightForRowAtIndexPath:(NSIndexPath *)indexPath; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeAdScrollView.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeAdScrollView.h deleted file mode 100644 index c9fe5ba259..0000000000 --- a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeAdScrollView.h +++ /dev/null @@ -1,130 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -#import -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -@protocol FBNativeAdView; - -/** - Contains multiple ads in a scroll view. - - - If adding this view to a XIB or Storyboard, you may recieve the error "Unknown class FBNativeAdScrollView in Interface - Builder file" in some cases. This error is caused by the linker failing to include FBNativeAdScrollView in your build. - To resolve this, call [FBNativeAdScrollView class] in your project, or add "-all_load -ObjC" to "Other Linker Flags" in - your project settings. - */ -FB_CLASS_EXPORT FB_SUBCLASSING_RESTRICTED @interface FBNativeAdScrollView : UIView - -/** - Maximum native ads that this scroll view will load. Defaults to 10. If changed after calling loadAds, all current ads - will be discarded and loadAds must be called again. - */ -@property (nonatomic, assign, readonly) NSUInteger maximumNativeAdCount; - -/** - Toggles animating the loaded views. Default is YES. - */ -@property (nonatomic, assign, getter=isAnimationEnabled) BOOL animationEnabled; - -/** - Horizontal inset for views in the scroll view. Defaults to 8 points. - */ -@property (nonatomic, assign) CGFloat xInset; - -/** - Reloads the same ads for the same manager. Default is NO. - */ -@property (nonatomic, assign, getter=isAdPersistenceEnabled) BOOL adPersistenceEnabled; - -/** - A view controller that is used to present modal content. If nil, the view searches for a view controller. - */ -@property (nonatomic, weak, nullable) UIViewController *rootViewController; - -/** - Passes delegate methods from FBNativeAd. Separate delegate calls will be made for each native ad contained. - */ -@property (nonatomic, weak, nullable) id delegate; - -/** - Creates a native ad horizontal scroll view for a given native ads manager and native ad template. The manager can be - preloaded with ads, and loadAds will use the preloaded ads from the manager. Otherwise, the scroll view uses the - manager to load ads normally. - @param manager An instance of FBNativeAdManager. Can be preloaded with ads. - @param type The type of this native ad template. For more information, consult FBNativeAdViewType. - */ -- (instancetype)initWithNativeAdsManager:(FBNativeAdsManager *)manager withType:(FBNativeAdViewType)type; - -/** - Creates a native ad horizontal scroll view for a given native ads manager and native ad template. The manager can be - preloaded with ads, and loadAds will use the preloaded ads from the manager. Otherwise, the scroll view uses the - manager to load ads normally. - @param manager An instance of FBNativeAdManager. Can be preloaded with ads. - @param type The type of this native ad template. For more information, consult FBNativeAdViewType. - @param attributes The layout of this native ad template. For more information, consult FBNativeAdViewLayout. - */ -- (instancetype)initWithNativeAdsManager:(FBNativeAdsManager *)manager - withType:(FBNativeAdViewType)type - withAttributes:(FBNativeAdViewAttributes *)attributes; - -/** - Creates a native ad horizontal scroll view for a given native ads manager and native ad template. The manager can be - preloaded with ads, and loadAds will use the preloaded ads from the manager. Otherwise, the scroll view uses the - manager to load ads normally. - @param manager An instance of FBNativeAdManager. Can be preloaded with ads. - @param type The type of this native ad template. For more information, consult FBNativeAdViewType. - @param attributes The layout of this native ad template. For more information, consult FBNativeAdViewLayout. - @param maximumNativeAdCount Maximum native ads to show at once. - */ -- (instancetype)initWithNativeAdsManager:(FBNativeAdsManager *)manager - withType:(FBNativeAdViewType)type - withAttributes:(FBNativeAdViewAttributes *)attributes - withMaximum:(NSUInteger)maximumNativeAdCount; - -/** - This is a method to create a native ad horizontal scroll view from a user provided view. - @param manager An instance of FBNativeAdManager. Can be preloaded with ads. - @param childViewProvider Block that creates new views for each loaded native ad. Must not reuse the same instance, but - return a new view for each call. Views may be arbitrarily resized and should support resizing their content through - Auto Layout constraints, autoresizing masks, or manual resizing. - */ -- (instancetype)initWithNativeAdsManager:(FBNativeAdsManager *)manager - withViewProvider:(UIView * (^)(FBNativeAd *nativeAd, NSUInteger position))childViewProvider; - -/** - This is a method to create a native ad horizontal scroll view from a user provided view. - @param manager An instance of FBNativeAdManager. Can be preloaded with ads. - @param childViewProvider Block that creates new views for each loaded native ad. Must not reuse the same instance, but - return a new view for each call. Views may be arbitrarily resized and should support resizing their content through - Auto Layout constraints, autoresizing masks, or manual resizing. - @param maximumNativeAdCount Maximum native ads to show at once. - */ -- (instancetype)initWithNativeAdsManager:(FBNativeAdsManager *)manager - withViewProvider:(UIView * (^)(FBNativeAd *nativeAd, NSUInteger position))childViewProvider - withMaximum:(NSUInteger)maximumNativeAdCount NS_DESIGNATED_INITIALIZER; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeAdTableViewAdProvider.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeAdTableViewAdProvider.h deleted file mode 100644 index 2b15b158a3..0000000000 --- a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeAdTableViewAdProvider.h +++ /dev/null @@ -1,96 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import -#import - -#import -#import -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - Additional functionality on top of FBNativeAdsManager to assist in using native ads within a UITableView. This class - contains a mechanism to map indexPaths to native ads in a stable manner as well as helpers which assist in doing the - math to include ads at a regular interval within a table view. - */ -FB_CLASS_EXPORT -@interface FBNativeAdTableViewAdProvider : NSObject - -/** - Passes delegate methods from FBNativeAd. Separate delegate calls will be made for each native ad contained. - */ -@property (nonatomic, weak, nullable) id delegate; - -/** - FBAdExtraHint to provide extra info - */ -@property (nonatomic, strong, nullable) FBAdExtraHint *extraHint; - -/** - Create a FBNativeAdTableViewAdProvider. - - @param manager The FBNativeAdsManager which is consumed by this class. - */ -- (instancetype)initWithManager:(FBNativeAdsManager *)manager NS_DESIGNATED_INITIALIZER; - -/** - Retrieve a native ad for an indexPath, will return the same ad for a given indexPath until the native ads manager is - refreshed. This method is intended for usage with a table view and specifically the caller is recommended to wait until - tableView:cellForRowAtIndexPath: to ensure getting the best native ad for the given table cell. - - @param tableView The tableView where native ad will be used - @param indexPath The indexPath to use as a key for this native ad - @return A FBNativeAd which is loaded and ready to be used. - */ -- (FBNativeAd *)tableView:(UITableView *)tableView nativeAdForRowAtIndexPath:(NSIndexPath *)indexPath; - -/** - Support for evenly distributed native ads within a table view. Computes whether this cell is an ad or not. - - @param indexPath The indexPath of the cell within the table view - @param stride The frequency that native ads are to appear within the table view - @return Boolean indicating whether the cell at the path is an ad - */ -- (BOOL)isAdCellAtIndexPath:(NSIndexPath *)indexPath forStride:(NSUInteger)stride; - -/** - Support for evenly distributed native ads within a table view. Adjusts a non-ad cell indexPath to the indexPath it - would be in a collection with no ads. - - @param indexPath The indexPath to of the non-ad cell - @param stride The frequency that native ads are to appear within the table view - @return An indexPath adjusted to what it would be in a table view with no ads - */ -- (nullable NSIndexPath *)adjustNonAdCellIndexPath:(NSIndexPath *)indexPath forStride:(NSUInteger)stride; - -/** - Support for evenly distributed native ads within a table view. Adjusts the total count of cells within the table view - to account for the ad cells. - - @param count The count of cells in the table view not including ads - @param stride The frequency that native ads are to appear within the table view - @return The total count of cells within the table view including both ad and non-ad cells - */ -- (NSUInteger)adjustCount:(NSUInteger)count forStride:(NSUInteger)stride; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeAdTableViewCellProvider.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeAdTableViewCellProvider.h deleted file mode 100644 index ff2d4ef26a..0000000000 --- a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeAdTableViewCellProvider.h +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import -#import - -#import -#import -#import -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - Class which assists in putting FBNativeAdViews into UITableViews. This class manages the creation of UITableViewCells - which host native ad views. Functionality is provided to create UITableCellViews as needed for a given indexPath as - well as computing the height of the cells. - */ -FB_CLASS_EXPORT FB_SUBCLASSING_RESTRICTED @interface FBNativeAdTableViewCellProvider - : FBNativeAdTableViewAdProvider - -/** - Method to create a FBNativeAdTableViewCellProvider. - - @param manager The naitve ad manager consumed by this provider - @param type The type of this native ad template. For more information, consult FBNativeAdViewType. - */ -- (instancetype)initWithManager:(FBNativeAdsManager *)manager forType:(FBNativeAdViewType)type; - -/** - Method to create a FBNativeAdTableViewCellProvider. - - @param manager The naitve ad manager consumed by this provider - @param type The type of this native ad template. For more information, consult FBNativeAdViewType. - @param attributes The layout of this native ad template. For more information, consult FBNativeAdViewLayout. - */ -- (instancetype)initWithManager:(FBNativeAdsManager *)manager - forType:(FBNativeAdViewType)type - forAttributes:(FBNativeAdViewAttributes *)attributes NS_DESIGNATED_INITIALIZER; - -/** - Helper method for implementors of UITableViewDataSource who would like to host native ad UITableViewCells in their - table view. - */ -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath; - -/** - Helper method for implementors of UITableViewDelegate who would like to host native ad UITableViewCells in their table - view. - */ -- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath; - -/** - Helper method for implementors of UITableViewDelegate who would like to host native ad UITableViewCells in their table - view. - */ -- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeAdView.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeAdView.h deleted file mode 100644 index c008187eeb..0000000000 --- a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeAdView.h +++ /dev/null @@ -1,94 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -#import -#import -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - Determines the type of native ad template. Different views are created - for different values of FBNativeAdViewType - */ -typedef NS_ENUM(NSInteger, FBNativeAdViewType) { - /// Fixed height view, 300 points - FBNativeAdViewTypeGenericHeight300 = 3, - /// Fixed height view, 400 points - FBNativeAdViewTypeGenericHeight400 = 4, - /// Dynamic height, will be rendered to make the best use of the size set. - FBNativeAdViewTypeDynamic = 6, -}; - -/** - The FBNativeAdView creates prebuilt native ad template views and manages native ads. - */ -FB_CLASS_EXPORT -@interface FBNativeAdView : FBNativeAdBaseView - -/** - The type of the view, specifies which template to use - */ -@property (nonatomic, assign, readonly) FBNativeAdViewType type; - -/** - This is a method to create a native ad template using the given native ad and using default ad view attributes. - @param nativeAd The native ad to use to create this view. - */ -+ (instancetype)nativeAdViewWithNativeAd:(FBNativeAd *)nativeAd; - -/** - This is a method to create a native ad template using the given native ad and ad view attributes. - @param nativeAd The native ad to use to create this view. - */ -+ (instancetype)nativeAdViewWithNativeAd:(FBNativeAd *)nativeAd withAttributes:(FBNativeAdViewAttributes *)attributes; - -/** - This is a method to create a native ad template using the given placement id and type. - @param nativeAd The native ad to use to create this view. - @param type The type of this native ad template. For more information, consult FBNativeAdViewType. - */ -+ (instancetype)nativeAdViewWithNativeAd:(FBNativeAd *)nativeAd withType:(FBNativeAdViewType)type; - -/** - This is a method to create a native ad template using the given placement id and type. - @param nativeAd The native ad to use to create this view. - @param type The type of this native ad template. For more information, consult FBNativeAdViewType. - @param attributes The attributes to render this native ad template with. - */ -+ (instancetype)nativeAdViewWithNativeAd:(FBNativeAd *)nativeAd - withType:(FBNativeAdViewType)type - withAttributes:(FBNativeAdViewAttributes *)attributes; - -@end - -@interface FBNativeAdViewAttributes (FBNativeAdView) - -/** - Returns default attributes for a given type. - - @param type The type for this layout. - */ -+ (instancetype)defaultAttributesForType:(FBNativeAdViewType)type; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeAdViewAttributes.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeAdViewAttributes.h deleted file mode 100644 index 9c1e39422b..0000000000 --- a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeAdViewAttributes.h +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - Describes the look and feel of a native ad view. - */ -@interface FBNativeAdViewAttributes : NSObject - -/** - This is a method to create native ad view attributes with a dictionary - */ -- (instancetype)initWithDictionary:(NSDictionary *)dict NS_DESIGNATED_INITIALIZER; - -/** - Background color of the native ad view. - */ -@property (nonatomic, copy, nullable) UIColor *backgroundColor; -/** - Color of the title label. - */ -@property (nonatomic, copy, nullable) UIColor *titleColor; -/** - Color of the advertiser name label. - */ -@property (nonatomic, copy, nullable) UIColor *advertiserNameColor; -/** - Color of the ad choices icon. - */ -@property (nonatomic, copy, nullable) UIColor *adChoicesForegroundColor; -/** - Font of the title label. - */ -@property (nonatomic, copy, nullable) UIFont *titleFont; -/** - Color of the description label. - */ -@property (nonatomic, copy, nullable) UIColor *descriptionColor; -/** - Font of the description label. - */ -@property (nonatomic, copy, nullable) UIFont *descriptionFont; -/** - Background color of the call to action button. - */ -@property (nonatomic, copy, nullable) UIColor *buttonColor; -/** - Color of the call to action button's title label. - */ -@property (nonatomic, copy, nullable) UIColor *buttonTitleColor; -/** - Font of the call to action button's title label. - */ -@property (nonatomic, copy, nullable) UIFont *buttonTitleFont; -/** - Border color of the call to action button. If nil, no border is shown. - */ -@property (nonatomic, copy, nullable) UIColor *buttonBorderColor; -/** - Enables or disables autoplay for some types of media. Defaults to YES. - */ -@property (nonatomic, assign, getter=isAutoplayEnabled) BOOL autoplayEnabled - __attribute((deprecated("This attribute is no longer used."))); - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeAdsManager.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeAdsManager.h deleted file mode 100644 index 20ed38e935..0000000000 --- a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeAdsManager.h +++ /dev/null @@ -1,120 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -#import -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - @protocol FBNativeAdsManagerDelegate - - Messages from FBNativeAdsManager indicating success or failure loading ads. - */ -@protocol FBNativeAdsManagerDelegate - -/** - When the FBNativeAdsManager has finished loading a batch of ads this message will be sent. A batch of ads may be - loaded in response to calling loadAds or due to an automatic refresh by the FBNativeAdsManager. At the point this - message is fired all of the native ads will already be loaded and will not hence send their own nativeAdLoad: or - nativeAd:didFailWithError: message. - - */ -- (void)nativeAdsLoaded; - -/** - When the FBNativeAdsManager has reached a failure while attempting to load a batch of ads this message will be sent to - the application. - @param error An NSError object with information about the failure. - */ -- (void)nativeAdsFailedToLoadWithError:(NSError *)error; - -@end - -/** - This class provides a mechanism to fetch a set of ads and then use them within your application. The recommended usage - is to call nextNativeAd: at the moment when you are about to render an ad. The native ads manager supports giving out - as many ads as needed by cloning over the set of ads it got back from the server which can be useful for feed - scenarios. - */ -FB_CLASS_EXPORT FB_SUBCLASSING_RESTRICTED @interface FBNativeAdsManager : NSObject - -/** - The delegate - */ -@property (nonatomic, weak, nullable) id delegate; - -/** - Set the native ads manager caching policy. This controls which media from the native ads are cached before the native - ads manager calls nativeAdsLoaded on its delegate. The default is to not block on caching. - */ -@property (nonatomic, assign) FBNativeAdsCachePolicy mediaCachePolicy; - -/** - Number of unique native ads that can be accessed through nextNativeAd:. This is not valid until the nativeAdsLoaded: - message has been sent. - */ -@property (nonatomic, assign, readonly) NSUInteger uniqueNativeAdCount; - -/** - Returns YES after nativeAdsLoaded: message has been sent. - */ -@property (nonatomic, assign, getter=isValid, readonly) BOOL valid; - -/** - FBAdExtraHint to provide extra info - */ -@property (nonatomic, strong, nullable) FBAdExtraHint *extraHint; - -/** - Initialize the native ads manager. - - @param placementID The id of the ad placement. You can create your placement id from Facebook developers page. - @param numAdsRequested The number of ads you would like the native ads manager to retrieve. - */ -- (instancetype)initWithPlacementID:(NSString *)placementID - forNumAdsRequested:(NSUInteger)numAdsRequested NS_DESIGNATED_INITIALIZER; - -/** - The method that kicks off the loading of ads. It may be called again in the future to refresh the ads manually. - */ -- (void)loadAds; - -/** - By default the native ads manager will refresh its ads periodically. This does not mean that any ads which are shown - in the application's UI will be refreshed but simply that calling nextNativeAd: may return different ads at different - times. This method disables that functionality. - */ -- (void)disableAutoRefresh; - -/** - Retrieve the next native ad to be used from the batch. It is highly recommended that the caller wait until immediately - before rendering the ad content to call this method to ensure the best ad for the given context is used. If more than - uniqueNativeAdCount ads are requested cloned ads will be returned. Periodically the native ads manager will refresh and - new ads will be returned. - - @return A FBNativeAd which is loaded and ready to be used. - */ -@property (nonatomic, readonly, strong, nullable) FBNativeAd *nextNativeAd; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeBannerAd.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeBannerAd.h deleted file mode 100644 index 1a8ec0750b..0000000000 --- a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeBannerAd.h +++ /dev/null @@ -1,168 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -#import -#import -#import - -#import "FBAdImage.h" - -NS_ASSUME_NONNULL_BEGIN - -@protocol FBNativeBannerAdDelegate; - -@class FBMediaView; - -/** - The FBNativeBannerAd represents ad metadata to allow you to construct custom ad views. - See the AdUnitsSample in the sample apps section of the Audience Network framework. - */ -FB_CLASS_EXPORT FB_SUBCLASSING_RESTRICTED @interface FBNativeBannerAd : FBNativeAdBase - -@property (nonatomic, weak, nullable) id delegate; - -- (instancetype)initWithPlacementID:(NSString *)placementID; - -/** - This is a method to associate a FBNativeBannerAd with the UIView you will use to display the native ads. - - @param view The UIView you created to render all the native ads data elements. - @param iconView The FBMediaView you created to render the icon - @param viewController The UIViewController that will be used to present SKStoreProductViewController - (iTunes Store product information) or the in-app browser. If nil is passed, the top view controller currently shown - will be used. - - - The whole area of the UIView will be clickable. - */ -- (void)registerViewForInteraction:(UIView *)view - iconView:(FBMediaView *)iconView - viewController:(nullable UIViewController *)viewController; - -/** - This is a method to associate FBNativeBannerAd with the UIView you will use to display the native ads - and set clickable areas. - - @param view The UIView you created to render all the native ads data elements. - @param iconView The FBMediaView you created to render the icon - @param viewController The UIViewController that will be used to present SKStoreProductViewController - (iTunes Store product information). If nil is passed, the top view controller currently shown will be used. - @param clickableViews An array of UIView you created to render the native ads data element, e.g. - CallToAction button, Icon image, which you want to specify as clickable. - */ -- (void)registerViewForInteraction:(UIView *)view - iconView:(FBMediaView *)iconView - viewController:(nullable UIViewController *)viewController - clickableViews:(nullable NSArray *)clickableViews; - -/** - This is a method to associate a FBNativeBannerAd with the UIView you will use to display the native ads. - - @param view The UIView you created to render all the native ads data elements. - @param iconImageView The UIImageView you created to render the icon - @param viewController The UIViewController that will be used to present SKStoreProductViewController - (iTunes Store product information) or the in-app browser. If nil is passed, the top view controller currently shown - will be used. - - - The whole area of the UIView will be clickable. - */ -- (void)registerViewForInteraction:(UIView *)view - iconImageView:(UIImageView *)iconImageView - viewController:(nullable UIViewController *)viewController; - -/** - This is a method to associate FBNativeBannerAd with the UIView you will use to display the native ads - and set clickable areas. - - @param view The UIView you created to render all the native ads data elements. - @param iconImageView The UIImageView you created to render the icon - @param viewController The UIViewController that will be used to present SKStoreProductViewController - (iTunes Store product information). If nil is passed, the top view controller currently shown will be used. - @param clickableViews An array of UIView you created to render the native ads data element, e.g. - CallToAction button, Icon image, which you want to specify as clickable. - */ -- (void)registerViewForInteraction:(UIView *)view - iconImageView:(UIImageView *)iconImageView - viewController:(nullable UIViewController *)viewController - clickableViews:(nullable NSArray *)clickableViews; - -/** - This is a method to use to download all media for the ad (adChoicesIcon, icon). - This is only needed to be called if the mediaCachePolicy is set to FBNativeAdsCachePolicyNone. - */ -- (void)downloadMedia; - -@end - -/** - The methods declared by the FBNativeBannerAdDelegate protocol allow the adopting delegate to respond to messages - from the FBNativeBannerAd class and thus respond to operations such as whether the native banner ad has been loaded. - */ -@protocol FBNativeBannerAdDelegate - -@optional - -/** - Sent when an FBNativeBannerAd has been successfully loaded. - - @param nativeBannerAd An FBNativeBannerAd object sending the message. - */ -- (void)nativeBannerAdDidLoad:(FBNativeBannerAd *)nativeBannerAd; - -/** - Sent when an FBNativeBannerAd has succesfully downloaded all media - */ -- (void)nativeBannerAdDidDownloadMedia:(FBNativeBannerAd *)nativeBannerAd; - -/** - Sent immediately before the impression of an FBNativeBannerAd object will be logged. - - @param nativeBannerAd An FBNativeBannerAd object sending the message. - */ -- (void)nativeBannerAdWillLogImpression:(FBNativeBannerAd *)nativeBannerAd; - -/** - Sent when an FBNativeBannerAd is failed to load. - - @param nativeBannerAd An FBNativeBannerAd object sending the message. - @param error An error object containing details of the error. - */ -- (void)nativeBannerAd:(FBNativeBannerAd *)nativeBannerAd didFailWithError:(NSError *)error; - -/** - Sent after an ad has been clicked by the person. - - @param nativeBannerAd An FBNativeBannerAd object sending the message. - */ -- (void)nativeBannerAdDidClick:(FBNativeBannerAd *)nativeBannerAd; - -/** - When an ad is clicked, the modal view will be presented. And when the user finishes the - interaction with the modal view and dismiss it, this message will be sent, returning control - to the application. - - @param nativeBannerAd An FBNativeBannerAd object sending the message. - */ -- (void)nativeBannerAdDidFinishHandlingClick:(FBNativeBannerAd *)nativeBannerAd; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeBannerAdView.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeBannerAdView.h deleted file mode 100644 index b598124d7c..0000000000 --- a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBNativeBannerAdView.h +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -#import -#import -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - Determines the type of native banner ad template. Different views are created - for different values of FBNativeAdBannerViewType - */ -typedef NS_ENUM(NSInteger, FBNativeBannerAdViewType) { - /// Fixed height view, 100 points (banner equivalent) - FBNativeBannerAdViewTypeGenericHeight100 = 1, - /// Fixed height view, 120 points (banner equivalent) - FBNativeBannerAdViewTypeGenericHeight120 = 2, - /// Fixed height view, 50 points (banner equivalent) - FBNativeBannerAdViewTypeGenericHeight50 = 5, -}; - -/** - The FBNativeBannerAdView creates prebuilt native banner ad template views and manages native banner ads. - */ -FB_CLASS_EXPORT -@interface FBNativeBannerAdView : FBNativeAdBaseView - -/** - The type of the view, specifies which template to use - */ -@property (nonatomic, assign, readonly) FBNativeBannerAdViewType type; - -/** - This is a method to create a native ad template using the given placement id and type. - @param nativeBannerAd The native banner ad to use to create this view. - @param type The type of this native banner ad template. For more information, consult FBNativeAdBannerViewType. - */ -+ (instancetype)nativeBannerAdViewWithNativeBannerAd:(FBNativeBannerAd *)nativeBannerAd - withType:(FBNativeBannerAdViewType)type; - -/** - This is a method to create a native ad template using the given placement id and type. - @param nativeBannerAd The native banner ad to use to create this view. - @param type The type of this native banner ad template. For more information, consult FBNativeAdBannerViewType. - @param attributes The attributes to render this native ad template with. - */ -+ (instancetype)nativeBannerAdViewWithNativeBannerAd:(FBNativeBannerAd *)nativeBannerAd - withType:(FBNativeBannerAdViewType)type - withAttributes:(FBNativeAdViewAttributes *)attributes; - -@end - -@interface FBNativeAdViewAttributes (FBNativeBannerAdView) - -/** - Returns default attributes for a given type. - - @param type The type for this layout. - */ -+ (instancetype)defaultAttributesForBannerType:(FBNativeBannerAdViewType)type; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBRewardedVideoAd.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBRewardedVideoAd.h deleted file mode 100644 index d6e204985e..0000000000 --- a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBRewardedVideoAd.h +++ /dev/null @@ -1,217 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import -#import - -#import -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -@protocol FBRewardedVideoAdDelegate; - -/** - A modal view controller to represent a Facebook rewarded video ad. This - is a full-screen ad shown in your application. - */ -FB_CLASS_EXPORT FB_SUBCLASSING_RESTRICTED @interface FBRewardedVideoAd : NSObject - -/** - Typed access to the id of the ad placement. - */ -@property (nonatomic, copy, readonly) NSString *placementID; - -/** - The duration of the video, as a CMTime value. Returns kCMTimeIndefinite if no video is loaded. - */ -@property (nonatomic, assign, readonly) CMTime duration; - -/** - the delegate - */ -@property (nonatomic, weak, nullable) id delegate; - -/** - Returns true if the rewarded video ad has been successfully loaded. - You should check `isAdValid` before trying to show the ad. - */ -@property (nonatomic, getter=isAdValid, readonly) BOOL adValid; - -/** - FBAdExtraHint to provide extra info - */ -@property (nonatomic, strong, nullable) FBAdExtraHint *extraHint; - -/** - FBAdExperiencConfig to provide additional ad configuration - */ -@property (nonatomic, copy, nullable) FBAdExperienceConfig *adExperienceConfig; - -/** - This is a method to initialize an FBRewardedVideoAd matching the given placement id. - - @param placementID The id of the ad placement. You can create your placement id from Facebook developers page. - */ -- (instancetype)initWithPlacementID:(NSString *)placementID; - -/** - This is a method to initialize an FBRewardedVideoAd matching the given placement id and allows the publisher to set - the reward to give to a user. - - - Parameter placementID The id of the ad placement. You can create your placement id from Facebook developers page. - - Parameter userID the id of the user - - Parameter currency reward currency type - */ -- (instancetype)initWithPlacementID:(NSString *)placementID - withUserID:(nullable NSString *)userID - withCurrency:(nullable NSString *)currency; - -/** - Begins loading the FBRewardedVideoAd content. - - - You can implement `rewardedVideoAdDidLoad:` and `rewardedVideoAd:didFailWithError:` methods - of `FBRewardedVideoAdDelegate` if you would like to be notified as loading succeeds or fails. - */ -- (void)loadAd; - -/** - Begins loading the FBRewardedVideoAd content from a bid payload attained through a server side bid. - - - You can implement `rewardedVideoAdDidLoad:` and `rewardedVideoAd:didFailWithError:` methods - of `FBRewardedVideoAdDelegate` if you would like to be notified as loading succeeds or fails. - */ -- (void)loadAdWithBidPayload:(NSString *)bidPayload; - -/** - This method allows the publisher to set the reward to give to a user. Returns NO if it was not able - to set Reward Data. - - - Parameter userID the id of the user - - Parameter currency reward currency type - */ - -- (BOOL)setRewardDataWithUserID:(NSString *)userID withCurrency:(NSString *)currency; - -/** - Presents the rewarded video ad modally from the specified view controller. - - @param rootViewController The view controller that will be used to present the rewarded video ad. - - - You can implement `rewardedVideoAdDidClick:` and `rewardedVideoAdWillClose:` - methods of `FBRewardedVideoAdDelegate` if you would like to stay informed for those events. - */ -- (BOOL)showAdFromRootViewController:(UIViewController *)rootViewController; - -/** - Presents the rewarded video ad modally from the specified view controller. - - @param rootViewController The view controller that will be used to present the rewarded video ad. - @param flag Pass YES to animate the presentation; otherwise, pass NO. - - - You can implement `rewardedVideoAdDidClick:` and `rewardedVideoAdWillClose:` - methods of `FBRewardedVideoAdDelegate` if you would like to stay informed for those events. - */ -- (BOOL)showAdFromRootViewController:(UIViewController *)rootViewController animated:(BOOL)flag; - -@end - -/** - The methods declared by the FBRewardedVideoAdDelegate protocol allow the adopting delegate to respond - to messages from the FBRewardedVideoAd class and thus respond to operations such as whether the ad has - been loaded, the person has clicked the ad or closed video/end card. - */ -@protocol FBRewardedVideoAdDelegate - -@optional - -/** - Sent after an ad has been clicked by the person. - - @param rewardedVideoAd An FBRewardedVideoAd object sending the message. - */ -- (void)rewardedVideoAdDidClick:(FBRewardedVideoAd *)rewardedVideoAd; - -/** - Sent when an ad has been successfully loaded. - - @param rewardedVideoAd An FBRewardedVideoAd object sending the message. - */ -- (void)rewardedVideoAdDidLoad:(FBRewardedVideoAd *)rewardedVideoAd; - -/** - Sent after an FBRewardedVideoAd object has been dismissed from the screen, returning control - to your application. - - @param rewardedVideoAd An FBRewardedVideoAd object sending the message. - */ -- (void)rewardedVideoAdDidClose:(FBRewardedVideoAd *)rewardedVideoAd; - -/** - Sent immediately before an FBRewardedVideoAd object will be dismissed from the screen. - - @param rewardedVideoAd An FBRewardedVideoAd object sending the message. - */ -- (void)rewardedVideoAdWillClose:(FBRewardedVideoAd *)rewardedVideoAd; - -/** - Sent after an FBRewardedVideoAd fails to load the ad. - - @param rewardedVideoAd An FBRewardedVideoAd object sending the message. - @param error An error object containing details of the error. - */ -- (void)rewardedVideoAd:(FBRewardedVideoAd *)rewardedVideoAd didFailWithError:(NSError *)error; - -/** - Sent after the FBRewardedVideoAd object has finished playing the video successfully. - Reward the user on this callback. - - @param rewardedVideoAd An FBRewardedVideoAd object sending the message. - */ -- (void)rewardedVideoAdVideoComplete:(FBRewardedVideoAd *)rewardedVideoAd; - -/** - Sent immediately before the impression of an FBRewardedVideoAd object will be logged. - - @param rewardedVideoAd An FBRewardedVideoAd object sending the message. - */ -- (void)rewardedVideoAdWillLogImpression:(FBRewardedVideoAd *)rewardedVideoAd; - -/** - Sent if server call to publisher's reward endpoint returned HTTP status code 200. - - @param rewardedVideoAd An FBRewardedVideoAd object sending the message. - */ -- (void)rewardedVideoAdServerRewardDidSucceed:(FBRewardedVideoAd *)rewardedVideoAd; - -/** - Sent if server call to publisher's reward endpoint did not return HTTP status code 200 - or if the endpoint timed out. - - @param rewardedVideoAd An FBRewardedVideoAd object sending the message. - */ -- (void)rewardedVideoAdServerRewardDidFail:(FBRewardedVideoAd *)rewardedVideoAd; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBRewardedVideoAdBridge.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBRewardedVideoAdBridge.h deleted file mode 100644 index 6d0bf7e7ac..0000000000 --- a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/FBRewardedVideoAdBridge.h +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -/*** - * This is a bridge file for Audience Network Unity SDK. - * - * Please refer to FBRewardedVideoAd.h and FBAdExtraHint.h for full documentation of the API. - * - * This file may be used to build your own Audience Network iOS SDK wrapper, - * but note that we don't support customisations of the Audience Network codebase. - * - ***/ - -#import - -FB_EXTERN_C_BEGIN - -FB_EXPORT int32_t FBRewardedVideoAdBridgeCreate(char const *placementID); -FB_EXPORT int32_t FBRewardedVideoAdBridgeCreateWithReward(char const *placementID, - char const *userID, - char const *currency); - -FB_EXPORT int32_t FBRewardedVideoAdBridgeLoad(int32_t uniqueId); -FB_EXPORT int32_t FBRewardedVideoAdBridgeLoadWithBidPayload(int32_t uniqueId, char *bidPayload); - -FB_EXPORT bool FBRewardedVideoAdBridgeIsValid(int32_t uniqueId); -FB_EXPORT char const *FBRewardedVideoAdBridgeGetPlacementId(int32_t uniqueId); -FB_EXPORT bool FBRewardedVideoAdBridgeShow(int32_t uniqueId); -FB_EXPORT bool FBRewardedVideoAdBridgeShowAnimated(int32_t uniqueId, bool isAnimated); -FB_EXPORT void FBRewardedVideoAdBridgeSetExtraHints(int32_t uniqueId, char const *extraHints); -FB_EXPORT void FBRewardedVideoAdBridgeRelease(int32_t uniqueId); - -FB_EXPORT void FBRewardedVideoAdBridgeOnLoad(int32_t uniqueId, FBAdBridgeCallback callback); -FB_EXPORT void FBRewardedVideoAdBridgeOnImpression(int32_t uniqueId, FBAdBridgeCallback callback); -FB_EXPORT void FBRewardedVideoAdBridgeOnClick(int32_t uniqueId, FBAdBridgeCallback callback); -FB_EXPORT void FBRewardedVideoAdBridgeOnError(int32_t uniqueId, FBAdBridgeErrorCallback callback); -FB_EXPORT void FBRewardedVideoAdBridgeOnDidClose(int32_t uniqueId, FBAdBridgeCallback callback); -FB_EXPORT void FBRewardedVideoAdBridgeOnWillClose(int32_t uniqueId, FBAdBridgeCallback callback); -FB_EXPORT void FBRewardedVideoAdBridgeOnVideoComplete(int32_t uniqueId, FBAdBridgeCallback callback); -FB_EXPORT void FBRewardedVideoAdBridgeOnServerRewardSuccess(int32_t uniqueId, FBAdBridgeCallback callback); -FB_EXPORT void FBRewardedVideoAdBridgeOnServerRewardFailure(int32_t uniqueId, FBAdBridgeCallback callback); - -FB_EXTERN_C_END diff --git a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/UIView+FBNativeAdViewTag.h b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/UIView+FBNativeAdViewTag.h deleted file mode 100644 index ca37fef8f4..0000000000 --- a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Headers/UIView+FBNativeAdViewTag.h +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - Determines the possible tags for native ad views. - */ -typedef NS_ENUM(NSUInteger, FBNativeAdViewTag) { - FBNativeAdViewTagIcon = 5, - FBNativeAdViewTagTitle, - FBNativeAdViewTagCoverImage, - FBNativeAdViewTagSubtitle, - FBNativeAdViewTagBody, - FBNativeAdViewTagCallToAction, - FBNativeAdViewTagSocialContext, - FBNativeAdViewTagChoicesIcon, - FBNativeAdViewTagMedia, -}; - -/** - Use this category to set tags for views you are using for native ad. - This will enable better analytics. - */ -@interface UIView (FBNativeAdViewTag) -@property (nonatomic, assign) FBNativeAdViewTag nativeAdViewTag; -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Info.plist b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Info.plist deleted file mode 100644 index 1b126a5a4f..0000000000 Binary files a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Info.plist and /dev/null differ diff --git a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Modules/module.modulemap b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Modules/module.modulemap deleted file mode 100644 index 1c74ba58a1..0000000000 --- a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/Modules/module.modulemap +++ /dev/null @@ -1,58 +0,0 @@ -framework module FBAudienceNetwork { - umbrella header "FBAudienceNetwork.h" - - export * - module * { - export * - } - - requires objc, blocks - - link framework "AdSupport" - link framework "AudioToolbox" - link framework "AVFoundation" - link framework "CFNetwork" - link framework "CoreGraphics" - link framework "CoreImage" - link framework "CoreMedia" - link framework "CoreMotion" - link framework "CoreTelephony" - link framework "Foundation" - link framework "LocalAuthentication" - link framework "SafariServices" - link framework "Security" - link framework "StoreKit" - link framework "SystemConfiguration" - link framework "UIKit" - link framework "WebKit" - link framework "VideoToolbox" - - link "c++" - link "xml2" - - header "FBAdChoicesView.h" - header "FBAdDefines.h" - header "FBAdExperienceConfig.h" - header "FBAdSettings.h" - header "FBAdView.h" - header "FBInstreamAdView.h" - header "FBInterstitialAd.h" - header "FBMediaView.h" - header "FBNativeAd.h" - header "FBNativeAdScrollView.h" - header "FBNativeAdTableViewAdProvider.h" - header "FBNativeAdTableViewCellProvider.h" - header "FBNativeAdCollectionViewAdProvider.h" - header "FBNativeAdCollectionViewCellProvider.h" - header "FBNativeAdView.h" - header "FBNativeAdsManager.h" - header "FBRewardedVideoAd.h" - - header "FBAdBridgeCommon.h" - header "FBAdBridgeContainer.h" - header "FBAdSettingsBridge.h" - header "FBAdUtilityBridge.h" - header "FBAdViewBridge.h" - header "FBInterstitialAdBridge.h" - header "FBRewardedVideoAdBridge.h" -} diff --git a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/PkgInfo b/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/PkgInfo deleted file mode 100644 index 9d5b594400..0000000000 --- a/iphone/Maps/Pods/FBAudienceNetwork/Static/FBAudienceNetwork.framework/PkgInfo +++ /dev/null @@ -1 +0,0 @@ -APPLWRUN diff --git a/iphone/Maps/Pods/FBAudienceNetwork/licenses b/iphone/Maps/Pods/FBAudienceNetwork/licenses deleted file mode 100644 index 6c63b3527b..0000000000 --- a/iphone/Maps/Pods/FBAudienceNetwork/licenses +++ /dev/null @@ -1,12 +0,0 @@ -This software may contain the following third party software: - -ZipArchive -Copyright (c) 2010-2015, Sam Soffes, https://soff.es - -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. - - \ No newline at end of file diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/FBSDKAppEvents.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/FBSDKAppEvents.h deleted file mode 100644 index e191a7f5d1..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/FBSDKAppEvents.h +++ /dev/null @@ -1,865 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -#if !TARGET_OS_TV -#import -#endif - -#ifdef BUCK -#import -#else -#import "FBSDKGraphRequestConnection.h" -#endif - -NS_ASSUME_NONNULL_BEGIN - -@class FBSDKAccessToken; -@class FBSDKGraphRequest; - -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 - -/** NSNotificationCenter name indicating a result of a failed log flush attempt. The posted object will be an NSError instance. */ -FOUNDATION_EXPORT NSNotificationName const FBSDKAppEventsLoggingResultNotification -NS_SWIFT_NAME(AppEventsLoggingResult); - -#else - -/** NSNotificationCenter name indicating a result of a failed log flush attempt. The posted object will be an NSError instance. */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventsLoggingResultNotification -NS_SWIFT_NAME(AppEventsLoggingResultNotification); - -#endif - -/** optional plist key ("FacebookLoggingOverrideAppID") for setting `loggingOverrideAppID` */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventsOverrideAppIDBundleKey -NS_SWIFT_NAME(AppEventsOverrideAppIDBundleKey); - -/** - - NS_ENUM (NSUInteger, FBSDKAppEventsFlushBehavior) - - Specifies when `FBSDKAppEvents` sends log events to the server. - - */ -typedef NS_ENUM(NSUInteger, FBSDKAppEventsFlushBehavior) -{ - - /** Flush automatically: periodically (once a minute or every 100 logged events) and always at app reactivation. */ - FBSDKAppEventsFlushBehaviorAuto = 0, - - /** Only flush when the `flush` method is called. When an app is moved to background/terminated, the - events are persisted and re-established at activation, but they will only be written with an - explicit call to `flush`. */ - FBSDKAppEventsFlushBehaviorExplicitOnly, -} NS_SWIFT_NAME(AppEvents.FlushBehavior); - -/** - NS_ENUM(NSUInteger, FBSDKProductAvailability) - Specifies product availability for Product Catalog product item update - */ -typedef NS_ENUM(NSUInteger, FBSDKProductAvailability) -{ - /** - * Item ships immediately - */ - FBSDKProductAvailabilityInStock = 0, - /** - * No plan to restock - */ - FBSDKProductAvailabilityOutOfStock, - /** - * Available in future - */ - FBSDKProductAvailabilityPreOrder, - /** - * Ships in 1-2 weeks - */ - FBSDKProductAvailabilityAvailableForOrder, - /** - * Discontinued - */ - FBSDKProductAvailabilityDiscontinued, -} NS_SWIFT_NAME(AppEvents.ProductAvailability); - -/** - NS_ENUM(NSUInteger, FBSDKProductCondition) - Specifies product condition for Product Catalog product item update - */ -typedef NS_ENUM(NSUInteger, FBSDKProductCondition) -{ - FBSDKProductConditionNew = 0, - FBSDKProductConditionRefurbished, - FBSDKProductConditionUsed, -} NS_SWIFT_NAME(AppEvents.ProductCondition); - -/** - @methodgroup Predefined event names for logging events common to many apps. Logging occurs through the `logEvent` family of methods on `FBSDKAppEvents`. - Common event parameters are provided in the `FBSDKAppEventsParameterNames*` constants. - */ - -/// typedef for FBSDKAppEventName -typedef NSString *const FBSDKAppEventName NS_TYPED_EXTENSIBLE_ENUM NS_SWIFT_NAME(AppEvents.Name); - -/** Log this event when the user has achieved a level in the app. */ -FOUNDATION_EXPORT FBSDKAppEventName FBSDKAppEventNameAchievedLevel; - -/** Log this event when the user has entered their payment info. */ -FOUNDATION_EXPORT FBSDKAppEventName FBSDKAppEventNameAddedPaymentInfo; - -/** Log this event when the user has added an item to their cart. The valueToSum passed to logEvent should be the item's price. */ -FOUNDATION_EXPORT FBSDKAppEventName FBSDKAppEventNameAddedToCart; - -/** Log this event when the user has added an item to their wishlist. The valueToSum passed to logEvent should be the item's price. */ -FOUNDATION_EXPORT FBSDKAppEventName FBSDKAppEventNameAddedToWishlist; - -/** Log this event when a user has completed registration with the app. */ -FOUNDATION_EXPORT FBSDKAppEventName FBSDKAppEventNameCompletedRegistration; - -/** Log this event when the user has completed a tutorial in the app. */ -FOUNDATION_EXPORT FBSDKAppEventName FBSDKAppEventNameCompletedTutorial; - -/** Log this event when the user has entered the checkout process. The valueToSum passed to logEvent should be the total price in the cart. */ -FOUNDATION_EXPORT FBSDKAppEventName FBSDKAppEventNameInitiatedCheckout; - -/** Log this event when the user has completed a transaction. The valueToSum passed to logEvent should be the total price of the transaction. */ -FOUNDATION_EXPORT FBSDKAppEventName FBSDKAppEventNamePurchased; - -/** Log this event when the user has rated an item in the app. The valueToSum passed to logEvent should be the numeric rating. */ -FOUNDATION_EXPORT FBSDKAppEventName FBSDKAppEventNameRated; - -/** Log this event when a user has performed a search within the app. */ -FOUNDATION_EXPORT FBSDKAppEventName FBSDKAppEventNameSearched; - -/** Log this event when the user has spent app credits. The valueToSum passed to logEvent should be the number of credits spent. */ -FOUNDATION_EXPORT FBSDKAppEventName FBSDKAppEventNameSpentCredits; - -/** Log this event when the user has unlocked an achievement in the app. */ -FOUNDATION_EXPORT FBSDKAppEventName FBSDKAppEventNameUnlockedAchievement; - -/** Log this event when a user has viewed a form of content in the app. */ -FOUNDATION_EXPORT FBSDKAppEventName FBSDKAppEventNameViewedContent; - -/** A telephone/SMS, email, chat or other type of contact between a customer and your business. */ -FOUNDATION_EXPORT FBSDKAppEventName FBSDKAppEventNameContact; - -/** The customization of products through a configuration tool or other application your business owns. */ -FOUNDATION_EXPORT FBSDKAppEventName FBSDKAppEventNameCustomizeProduct; - -/** The donation of funds to your organization or cause. */ -FOUNDATION_EXPORT FBSDKAppEventName FBSDKAppEventNameDonate; - -/** When a person finds one of your locations via web or application, with an intention to visit (example: find product at a local store). */ -FOUNDATION_EXPORT FBSDKAppEventName FBSDKAppEventNameFindLocation; - -/** The booking of an appointment to visit one of your locations. */ -FOUNDATION_EXPORT FBSDKAppEventName FBSDKAppEventNameSchedule; - -/** The subsequent subscriptions after the start of a paid subscription for a product or service you offer. */ -FOUNDATION_EXPORT FBSDKAppEventName FBSDKAppEventNameSubscriptionHeartbeat __attribute((deprecated("This attribute is no longer used."))); - -/** The start of a free trial of a product or service you offer (example: trial subscription). */ -FOUNDATION_EXPORT FBSDKAppEventName FBSDKAppEventNameStartTrial; - -/** The submission of an application for a product, service or program you offer (example: credit card, educational program or job). */ -FOUNDATION_EXPORT FBSDKAppEventName FBSDKAppEventNameSubmitApplication; - -/** The start of a paid subscription for a product or service you offer. */ -FOUNDATION_EXPORT FBSDKAppEventName FBSDKAppEventNameSubscribe; - -/** Log this event when the user views an ad. */ -FOUNDATION_EXPORT FBSDKAppEventName FBSDKAppEventNameAdImpression; - -/** Log this event when the user clicks an ad. */ -FOUNDATION_EXPORT FBSDKAppEventName FBSDKAppEventNameAdClick; - -/** - @methodgroup Predefined event name parameters for common additional information to accompany events logged through the `logEvent` family - of methods on `FBSDKAppEvents`. Common event names are provided in the `FBAppEventName*` constants. - */ - -/// typedef for FBSDKAppEventParameterName -typedef NSString *const FBSDKAppEventParameterName NS_TYPED_EXTENSIBLE_ENUM NS_SWIFT_NAME(AppEvents.ParameterName); - - /** - * Parameter key used to specify data for the one or more pieces of content being logged about. - * Data should be a JSON encoded string. - * Example: - * "[{\"id\": \"1234\", \"quantity\": 2, \"item_price\": 5.99}, {\"id\": \"5678\", \"quantity\": 1, \"item_price\": 9.99}]" - */ -FOUNDATION_EXPORT FBSDKAppEventParameterName FBSDKAppEventParameterNameContent; - -/** Parameter key used to specify an ID for the specific piece of content being logged about. Could be an EAN, article identifier, etc., depending on the nature of the app. */ -FOUNDATION_EXPORT FBSDKAppEventParameterName FBSDKAppEventParameterNameContentID; - -/** Parameter key used to specify a generic content type/family for the logged event, e.g. "music", "photo", "video". Options to use will vary based upon what the app is all about. */ -FOUNDATION_EXPORT FBSDKAppEventParameterName FBSDKAppEventParameterNameContentType; - -/** Parameter key used to specify currency used with logged event. E.g. "USD", "EUR", "GBP". See ISO-4217 for specific values. One reference for these is . */ -FOUNDATION_EXPORT FBSDKAppEventParameterName FBSDKAppEventParameterNameCurrency; - -/** Parameter key used to specify a description appropriate to the event being logged. E.g., the name of the achievement unlocked in the `FBAppEventNameAchievementUnlocked` event. */ -FOUNDATION_EXPORT FBSDKAppEventParameterName FBSDKAppEventParameterNameDescription; - -/** Parameter key used to specify the level achieved in a `FBAppEventNameAchieved` event. */ -FOUNDATION_EXPORT FBSDKAppEventParameterName FBSDKAppEventParameterNameLevel; - -/** Parameter key used to specify the maximum rating available for the `FBAppEventNameRate` event. E.g., "5" or "10". */ -FOUNDATION_EXPORT FBSDKAppEventParameterName FBSDKAppEventParameterNameMaxRatingValue; - -/** Parameter key used to specify how many items are being processed for an `FBAppEventNameInitiatedCheckout` or `FBAppEventNamePurchased` event. */ -FOUNDATION_EXPORT FBSDKAppEventParameterName FBSDKAppEventParameterNameNumItems; - -/** Parameter key used to specify whether payment info is available for the `FBAppEventNameInitiatedCheckout` event. `FBSDKAppEventParameterValueYes` and `FBSDKAppEventParameterValueNo` are good canonical values to use for this parameter. */ -FOUNDATION_EXPORT FBSDKAppEventParameterName FBSDKAppEventParameterNamePaymentInfoAvailable; - -/** Parameter key used to specify method user has used to register for the app, e.g., "Facebook", "email", "Twitter", etc */ -FOUNDATION_EXPORT FBSDKAppEventParameterName FBSDKAppEventParameterNameRegistrationMethod; - -/** Parameter key used to specify the string provided by the user for a search operation. */ -FOUNDATION_EXPORT FBSDKAppEventParameterName FBSDKAppEventParameterNameSearchString; - -/** Parameter key used to specify whether the activity being logged about was successful or not. `FBSDKAppEventParameterValueYes` and `FBSDKAppEventParameterValueNo` are good canonical values to use for this parameter. */ -FOUNDATION_EXPORT FBSDKAppEventParameterName FBSDKAppEventParameterNameSuccess; - -/** - @methodgroup Predefined event name parameters for common additional information to accompany events logged through the `logProductItem` method on `FBSDKAppEvents`. - */ - -/// typedef for FBSDKAppEventParameterProduct -typedef NSString *const FBSDKAppEventParameterProduct NS_TYPED_EXTENSIBLE_ENUM NS_SWIFT_NAME(AppEvents.ParameterProduct); - -/** Parameter key used to specify the product item's category. */ -FOUNDATION_EXPORT FBSDKAppEventParameterProduct FBSDKAppEventParameterProductCategory; - -/** Parameter key used to specify the product item's custom label 0. */ -FOUNDATION_EXPORT FBSDKAppEventParameterProduct FBSDKAppEventParameterProductCustomLabel0; - -/** Parameter key used to specify the product item's custom label 1. */ -FOUNDATION_EXPORT FBSDKAppEventParameterProduct FBSDKAppEventParameterProductCustomLabel1; - -/** Parameter key used to specify the product item's custom label 2. */ -FOUNDATION_EXPORT FBSDKAppEventParameterProduct FBSDKAppEventParameterProductCustomLabel2; - -/** Parameter key used to specify the product item's custom label 3. */ -FOUNDATION_EXPORT FBSDKAppEventParameterProduct FBSDKAppEventParameterProductCustomLabel3; - -/** Parameter key used to specify the product item's custom label 4. */ -FOUNDATION_EXPORT FBSDKAppEventParameterProduct FBSDKAppEventParameterProductCustomLabel4; - -/** Parameter key used to specify the product item's AppLink app URL for iOS. */ -FOUNDATION_EXPORT FBSDKAppEventParameterProduct FBSDKAppEventParameterProductAppLinkIOSUrl; - -/** Parameter key used to specify the product item's AppLink app ID for iOS App Store. */ -FOUNDATION_EXPORT FBSDKAppEventParameterProduct FBSDKAppEventParameterProductAppLinkIOSAppStoreID; - -/** Parameter key used to specify the product item's AppLink app name for iOS. */ -FOUNDATION_EXPORT FBSDKAppEventParameterProduct FBSDKAppEventParameterProductAppLinkIOSAppName; - -/** Parameter key used to specify the product item's AppLink app URL for iPhone. */ -FOUNDATION_EXPORT FBSDKAppEventParameterProduct FBSDKAppEventParameterProductAppLinkIPhoneUrl; - -/** Parameter key used to specify the product item's AppLink app ID for iPhone App Store. */ -FOUNDATION_EXPORT FBSDKAppEventParameterProduct FBSDKAppEventParameterProductAppLinkIPhoneAppStoreID; - -/** Parameter key used to specify the product item's AppLink app name for iPhone. */ -FOUNDATION_EXPORT FBSDKAppEventParameterProduct FBSDKAppEventParameterProductAppLinkIPhoneAppName; - -/** Parameter key used to specify the product item's AppLink app URL for iPad. */ -FOUNDATION_EXPORT FBSDKAppEventParameterProduct FBSDKAppEventParameterProductAppLinkIPadUrl; - -/** Parameter key used to specify the product item's AppLink app ID for iPad App Store. */ -FOUNDATION_EXPORT FBSDKAppEventParameterProduct FBSDKAppEventParameterProductAppLinkIPadAppStoreID; - -/** Parameter key used to specify the product item's AppLink app name for iPad. */ -FOUNDATION_EXPORT FBSDKAppEventParameterProduct FBSDKAppEventParameterProductAppLinkIPadAppName; - -/** Parameter key used to specify the product item's AppLink app URL for Android. */ -FOUNDATION_EXPORT FBSDKAppEventParameterProduct FBSDKAppEventParameterProductAppLinkAndroidUrl; - -/** Parameter key used to specify the product item's AppLink fully-qualified package name for intent generation. */ -FOUNDATION_EXPORT FBSDKAppEventParameterProduct FBSDKAppEventParameterProductAppLinkAndroidPackage; - -/** Parameter key used to specify the product item's AppLink app name for Android. */ -FOUNDATION_EXPORT FBSDKAppEventParameterProduct FBSDKAppEventParameterProductAppLinkAndroidAppName; - -/** Parameter key used to specify the product item's AppLink app URL for Windows Phone. */ -FOUNDATION_EXPORT FBSDKAppEventParameterProduct FBSDKAppEventParameterProductAppLinkWindowsPhoneUrl; - -/** Parameter key used to specify the product item's AppLink app ID, as a GUID, for App Store. */ -FOUNDATION_EXPORT FBSDKAppEventParameterProduct FBSDKAppEventParameterProductAppLinkWindowsPhoneAppID; - -/** Parameter key used to specify the product item's AppLink app name for Windows Phone. */ -FOUNDATION_EXPORT FBSDKAppEventParameterProduct FBSDKAppEventParameterProductAppLinkWindowsPhoneAppName; - -/* - @methodgroup Predefined values to assign to event parameters that accompany events logged through the `logEvent` family - of methods on `FBSDKAppEvents`. Common event parameters are provided in the `FBSDKAppEventParameterName*` constants. - */ - -/// typedef for FBSDKAppEventParameterValue -typedef NSString *const FBSDKAppEventParameterValue NS_TYPED_EXTENSIBLE_ENUM NS_SWIFT_NAME(AppEvents.ParameterValue); - -/** Yes-valued parameter value to be used with parameter keys that need a Yes/No value */ -FOUNDATION_EXPORT FBSDKAppEventParameterValue FBSDKAppEventParameterValueYes; - -/** No-valued parameter value to be used with parameter keys that need a Yes/No value */ -FOUNDATION_EXPORT FBSDKAppEventParameterValue FBSDKAppEventParameterValueNo; - -/** Parameter key used to specify the type of ad in an FBSDKAppEventNameAdImpression - * or FBSDKAppEventNameAdClick event. - * E.g. "banner", "interstitial", "rewarded_video", "native" */ -FOUNDATION_EXPORT FBSDKAppEventParameterName FBSDKAppEventParameterNameAdType; - -/** Parameter key used to specify the unique ID for all events within a subscription - * in an FBSDKAppEventNameSubscribe or FBSDKAppEventNameStartTrial event. */ -FOUNDATION_EXPORT FBSDKAppEventParameterName FBSDKAppEventParameterNameOrderID; - -/* - @methodgroup Predefined values to assign to user data store - */ - -/// typedef for FBSDKAppEventUserDataType -typedef NSString *const FBSDKAppEventUserDataType NS_TYPED_EXTENSIBLE_ENUM NS_SWIFT_NAME(AppEvents.UserDataType); - -/** Parameter key used to specify user's email. */ -FOUNDATION_EXPORT FBSDKAppEventUserDataType FBSDKAppEventEmail; - -/** Parameter key used to specify user's first name. */ -FOUNDATION_EXPORT FBSDKAppEventUserDataType FBSDKAppEventFirstName; - -/** Parameter key used to specify user's last name. */ -FOUNDATION_EXPORT FBSDKAppEventUserDataType FBSDKAppEventLastName; - -/** Parameter key used to specify user's phone. */ -FOUNDATION_EXPORT FBSDKAppEventUserDataType FBSDKAppEventPhone; - -/** Parameter key used to specify user's date of birth. */ -FOUNDATION_EXPORT FBSDKAppEventUserDataType FBSDKAppEventDateOfBirth; - -/** Parameter key used to specify user's gender. */ -FOUNDATION_EXPORT FBSDKAppEventUserDataType FBSDKAppEventGender; - -/** Parameter key used to specify user's city. */ -FOUNDATION_EXPORT FBSDKAppEventUserDataType FBSDKAppEventCity; - -/** Parameter key used to specify user's state. */ -FOUNDATION_EXPORT FBSDKAppEventUserDataType FBSDKAppEventState; - -/** Parameter key used to specify user's zip. */ -FOUNDATION_EXPORT FBSDKAppEventUserDataType FBSDKAppEventZip; - -/** Parameter key used to specify user's country. */ -FOUNDATION_EXPORT FBSDKAppEventUserDataType FBSDKAppEventCountry; - -/** - - - Client-side event logging for specialized application analytics available through Facebook App Insights - and for use with Facebook Ads conversion tracking and optimization. - - - - The `FBSDKAppEvents` static class has a few related roles: - - + Logging predefined and application-defined events to Facebook App Insights with a - numeric value to sum across a large number of events, and an optional set of key/value - parameters that define "segments" for this event (e.g., 'purchaserStatus' : 'frequent', or - 'gamerLevel' : 'intermediate') - - + Logging events to later be used for ads optimization around lifetime value. - - + Methods that control the way in which events are flushed out to the Facebook servers. - - Here are some important characteristics of the logging mechanism provided by `FBSDKAppEvents`: - - + Events are not sent immediately when logged. They're cached and flushed out to the Facebook servers - in a number of situations: - - when an event count threshold is passed (currently 100 logged events). - - when a time threshold is passed (currently 15 seconds). - - when an app has gone to background and is then brought back to the foreground. - - + Events will be accumulated when the app is in a disconnected state, and sent when the connection is - restored and one of the above 'flush' conditions are met. - - + The `FBSDKAppEvents` class is thread-safe in that events may be logged from any of the app's threads. - - + The developer can set the `flushBehavior` on `FBSDKAppEvents` to force the flushing of events to only - occur on an explicit call to the `flush` method. - - + The developer can turn on console debug output for event logging and flushing to the server by using - the `FBSDKLoggingBehaviorAppEvents` value in `[FBSettings setLoggingBehavior:]`. - - Some things to note when logging events: - - + There is a limit on the number of unique event names an app can use, on the order of 1000. - + There is a limit to the number of unique parameter names in the provided parameters that can - be used per event, on the order of 25. This is not just for an individual call, but for all - invocations for that eventName. - + Event names and parameter names (the keys in the NSDictionary) must be between 2 and 40 characters, and - must consist of alphanumeric characters, _, -, or spaces. - + The length of each parameter value can be no more than on the order of 100 characters. - - */ - -NS_SWIFT_NAME(AppEvents) -@interface FBSDKAppEvents : NSObject - -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; - -/* - * Control over event batching/flushing - */ - -/** - - The current event flushing behavior specifying when events are sent back to Facebook servers. - */ -@property (class, nonatomic, assign) FBSDKAppEventsFlushBehavior flushBehavior; - -/** - Set the 'override' App ID for App Event logging. - - - - In some cases, apps want to use one Facebook App ID for login and social presence and another - for App Event logging. (An example is if multiple apps from the same company share an app ID for login, but - want distinct logging.) By default, this value is `nil`, and defers to the `FBSDKAppEventsOverrideAppIDBundleKey` - plist value. If that's not set, it defaults to `[FBSDKSettings appID]`. - - This should be set before any other calls are made to `FBSDKAppEvents`. Thus, you should set it in your application - delegate's `application:didFinishLaunchingWithOptions:` delegate. - */ -@property (class, nonatomic, copy, nullable) NSString *loggingOverrideAppID; - -/* - The custom user ID to associate with all app events. - - The userID is persisted until it is cleared by passing nil. - */ -@property (class, nonatomic, copy, nullable) NSString *userID; - -/* - * Basic event logging - */ - -/** - - Log an event with just an eventName. - - @param eventName The name of the event to record. Limitations on number of events and name length - are given in the `FBSDKAppEvents` documentation. - - */ -+ (void)logEvent:(FBSDKAppEventName)eventName; - -/** - - Log an event with an eventName and a numeric value to be aggregated with other events of this name. - - @param eventName The name of the event to record. Limitations on number of events and name length - are given in the `FBSDKAppEvents` documentation. Common event names are provided in `FBAppEventName*` constants. - - @param valueToSum Amount to be aggregated into all events of this eventName, and App Insights will report - the cumulative and average value of this amount. - */ -+ (void)logEvent:(FBSDKAppEventName)eventName - valueToSum:(double)valueToSum; - - -/** - - Log an event with an eventName and a set of key/value pairs in the parameters dictionary. - Parameter limitations are described above. - - @param eventName The name of the event to record. Limitations on number of events and name construction - are given in the `FBSDKAppEvents` documentation. Common event names are provided in `FBAppEventName*` constants. - - @param parameters Arbitrary parameter dictionary of characteristics. The keys to this dictionary must - be NSString's, and the values are expected to be NSString or NSNumber. Limitations on the number of - parameters and name construction are given in the `FBSDKAppEvents` documentation. Commonly used parameter names - are provided in `FBSDKAppEventParameterName*` constants. - */ -+ (void)logEvent:(FBSDKAppEventName)eventName - parameters:(NSDictionary *)parameters; - -/** - - Log an event with an eventName, a numeric value to be aggregated with other events of this name, - and a set of key/value pairs in the parameters dictionary. - - @param eventName The name of the event to record. Limitations on number of events and name construction - are given in the `FBSDKAppEvents` documentation. Common event names are provided in `FBAppEventName*` constants. - - @param valueToSum Amount to be aggregated into all events of this eventName, and App Insights will report - the cumulative and average value of this amount. - - @param parameters Arbitrary parameter dictionary of characteristics. The keys to this dictionary must - be NSString's, and the values are expected to be NSString or NSNumber. Limitations on the number of - parameters and name construction are given in the `FBSDKAppEvents` documentation. Commonly used parameter names - are provided in `FBSDKAppEventParameterName*` constants. - - */ -+ (void)logEvent:(FBSDKAppEventName)eventName - valueToSum:(double)valueToSum - parameters:(NSDictionary *)parameters; - - -/** - - Log an event with an eventName, a numeric value to be aggregated with other events of this name, - and a set of key/value pairs in the parameters dictionary. Providing session lets the developer - target a particular . If nil is provided, then `[FBSession activeSession]` will be used. - - @param eventName The name of the event to record. Limitations on number of events and name construction - are given in the `FBSDKAppEvents` documentation. Common event names are provided in `FBAppEventName*` constants. - - @param valueToSum Amount to be aggregated into all events of this eventName, and App Insights will report - the cumulative and average value of this amount. Note that this is an NSNumber, and a value of `nil` denotes - that this event doesn't have a value associated with it for summation. - - @param parameters Arbitrary parameter dictionary of characteristics. The keys to this dictionary must - be NSString's, and the values are expected to be NSString or NSNumber. Limitations on the number of - parameters and name construction are given in the `FBSDKAppEvents` documentation. Commonly used parameter names - are provided in `FBSDKAppEventParameterName*` constants. - - @param accessToken The optional access token to log the event as. - */ -+ (void)logEvent:(FBSDKAppEventName)eventName - valueToSum:(nullable NSNumber *)valueToSum - parameters:(NSDictionary *)parameters - accessToken:(nullable FBSDKAccessToken *)accessToken; - -/* - * Purchase logging - */ - -/** - - Log a purchase of the specified amount, in the specified currency. - - @param purchaseAmount Purchase amount to be logged, as expressed in the specified currency. This value - will be rounded to the thousandths place (e.g., 12.34567 becomes 12.346). - - @param currency Currency, is denoted as, e.g. "USD", "EUR", "GBP". See ISO-4217 for - specific values. One reference for these is . - - - This event immediately triggers a flush of the `FBSDKAppEvents` event queue, unless the `flushBehavior` is set - to `FBSDKAppEventsFlushBehaviorExplicitOnly`. - - */ -+ (void)logPurchase:(double)purchaseAmount - currency:(NSString *)currency; - -/** - - Log a purchase of the specified amount, in the specified currency, also providing a set of - additional characteristics describing the purchase. - - @param purchaseAmount Purchase amount to be logged, as expressed in the specified currency.This value - will be rounded to the thousandths place (e.g., 12.34567 becomes 12.346). - - @param currency Currency, is denoted as, e.g. "USD", "EUR", "GBP". See ISO-4217 for - specific values. One reference for these is . - - @param parameters Arbitrary parameter dictionary of characteristics. The keys to this dictionary must - be NSString's, and the values are expected to be NSString or NSNumber. Limitations on the number of - parameters and name construction are given in the `FBSDKAppEvents` documentation. Commonly used parameter names - are provided in `FBSDKAppEventParameterName*` constants. - - - This event immediately triggers a flush of the `FBSDKAppEvents` event queue, unless the `flushBehavior` is set - to `FBSDKAppEventsFlushBehaviorExplicitOnly`. - - */ -+ (void)logPurchase:(double)purchaseAmount - currency:(NSString *)currency - parameters:(NSDictionary *)parameters; - -/** - - Log a purchase of the specified amount, in the specified currency, also providing a set of - additional characteristics describing the purchase, as well as an to log to. - - @param purchaseAmount Purchase amount to be logged, as expressed in the specified currency.This value - will be rounded to the thousandths place (e.g., 12.34567 becomes 12.346). - - @param currency Currency, is denoted as, e.g. "USD", "EUR", "GBP". See ISO-4217 for - specific values. One reference for these is . - - @param parameters Arbitrary parameter dictionary of characteristics. The keys to this dictionary must - be NSString's, and the values are expected to be NSString or NSNumber. Limitations on the number of - parameters and name construction are given in the `FBSDKAppEvents` documentation. Commonly used parameter names - are provided in `FBSDKAppEventParameterName*` constants. - - @param accessToken The optional access token to log the event as. - - - This event immediately triggers a flush of the `FBSDKAppEvents` event queue, unless the `flushBehavior` is set - to `FBSDKAppEventsFlushBehaviorExplicitOnly`. - - */ -+ (void)logPurchase:(double)purchaseAmount - currency:(NSString *)currency - parameters:(NSDictionary *)parameters - accessToken:(nullable FBSDKAccessToken *)accessToken; - - -/* - * Push Notifications Logging - */ - -/** - Log an app event that tracks that the application was open via Push Notification. - - @param payload Notification payload received via `UIApplicationDelegate`. - */ -+ (void)logPushNotificationOpen:(NSDictionary *)payload; - -/** - Log an app event that tracks that a custom action was taken from a push notification. - - @param payload Notification payload received via `UIApplicationDelegate`. - @param action Name of the action that was taken. - */ -+ (void)logPushNotificationOpen:(NSDictionary *)payload action:(NSString *)action; - -/** - Uploads product catalog product item as an app event - @param itemID Unique ID for the item. Can be a variant for a product. - Max size is 100. - @param availability If item is in stock. Accepted values are: - in stock - Item ships immediately - out of stock - No plan to restock - preorder - Available in future - available for order - Ships in 1-2 weeks - discontinued - Discontinued - @param condition Product condition: new, refurbished or used. - @param description Short text describing product. Max size is 5000. - @param imageLink Link to item image used in ad. - @param link Link to merchant's site where someone can buy the item. - @param title Title of item. - @param priceAmount Amount of purchase, in the currency specified by the 'currency' - parameter. This value will be rounded to the thousandths place - (e.g., 12.34567 becomes 12.346). - @param currency Currency used to specify the amount. - E.g. "USD", "EUR", "GBP". See ISO-4217 for specific values. One reference for these is - @param gtin Global Trade Item Number including UPC, EAN, JAN and ISBN - @param mpn Unique manufacture ID for product - @param brand Name of the brand - Note: Either gtin, mpn or brand is required. - @param parameters Optional fields for deep link specification. - */ -+ (void)logProductItem:(NSString *)itemID - availability:(FBSDKProductAvailability)availability - condition:(FBSDKProductCondition)condition - description:(NSString *)description - imageLink:(NSString *)imageLink - link:(NSString *)link - title:(NSString *)title - priceAmount:(double)priceAmount - currency:(NSString *)currency - gtin:(nullable NSString *)gtin - mpn:(nullable NSString *)mpn - brand:(nullable NSString *)brand - parameters:(nullable NSDictionary *)parameters; - -/** - - Notifies the events system that the app has launched and, when appropriate, logs an "activated app" event. - This function is called automatically from FBSDKApplicationDelegate applicationDidBecomeActive, unless - one overrides 'FacebookAutoLogAppEventsEnabled' key to false in the project info plist file. - In case 'FacebookAutoLogAppEventsEnabled' is set to false, then it should typically be placed in the - app delegates' `applicationDidBecomeActive:` method. - - This method also takes care of logging the event indicating the first time this app has been launched, which, among other things, is used to - track user acquisition and app install ads conversions. - - - - `activateApp` will not log an event on every app launch, since launches happen every time the app is backgrounded and then foregrounded. - "activated app" events will be logged when the app has not been active for more than 60 seconds. This method also causes a "deactivated app" - event to be logged when sessions are "completed", and these events are logged with the session length, with an indication of how much - time has elapsed between sessions, and with the number of background/foreground interruptions that session had. This data - is all visible in your app's App Events Insights. - */ -+ (void)activateApp; - -/* - * Push Notifications Registration and Uninstall Tracking - */ - -/** - Sets and sends device token to register the current application for push notifications. - - - - Sets and sends a device token from `NSData` representation that you get from `UIApplicationDelegate.-application:didRegisterForRemoteNotificationsWithDeviceToken:`. - - @param deviceToken Device token data. - */ -+ (void)setPushNotificationsDeviceToken:(NSData *)deviceToken; - -/** - Sets and sends device token string to register the current application for push notifications. - - - - Sets and sends a device token string - - @param deviceTokenString Device token string. - */ -+ (void)setPushNotificationsDeviceTokenString:(NSString *)deviceTokenString -NS_SWIFT_NAME(setPushNotificationsDeviceToken(_:)); - -/** - Explicitly kick off flushing of events to Facebook. This is an asynchronous method, but it does initiate an immediate - kick off. Server failures will be reported through the NotificationCenter with notification ID `FBSDKAppEventsLoggingResultNotification`. - */ -+ (void)flush; - -/** - Creates a request representing the Graph API call to retrieve a Custom Audience "third party ID" for the app's Facebook user. - Callers will send this ID back to their own servers, collect up a set to create a Facebook Custom Audience with, - and then use the resultant Custom Audience to target ads. - - The JSON in the request's response will include an "custom_audience_third_party_id" key/value pair, with the value being the ID retrieved. - This ID is an encrypted encoding of the Facebook user's ID and the invoking Facebook app ID. - Multiple calls with the same user will return different IDs, thus these IDs cannot be used to correlate behavior - across devices or applications, and are only meaningful when sent back to Facebook for creating Custom Audiences. - - The ID retrieved represents the Facebook user identified in the following way: if the specified access token is valid, - the ID will represent the user associated with that token; otherwise the ID will represent the user logged into the - native Facebook app on the device. If there is no native Facebook app, no one is logged into it, or the user has opted out - at the iOS level from ad tracking, then a `nil` ID will be returned. - - This method returns `nil` if either the user has opted-out (via iOS) from Ad Tracking, the app itself has limited event usage - via the `[FBSDKSettings limitEventAndDataUsage]` flag, or a specific Facebook user cannot be identified. - - @param accessToken The access token to use to establish the user's identity for users logged into Facebook through this app. - If `nil`, then the `[FBSDKAccessToken currentAccessToken]` is used. - */ -+ (nullable FBSDKGraphRequest *)requestForCustomAudienceThirdPartyIDWithAccessToken:(nullable FBSDKAccessToken *)accessToken; - -/* - Clears the custom user ID to associate with all app events. - */ -+ (void)clearUserID; - -/* - Sets custom user data to associate with all app events. All user data are hashed - and used to match Facebook user from this instance of an application. - - The user data will be persisted between application instances. - - @param email user's email - @param firstName user's first name - @param lastName user's last name - @param phone user's phone - @param dateOfBirth user's date of birth - @param gender user's gender - @param city user's city - @param state user's state - @param zip user's zip - @param country user's country - */ -+ (void)setUserEmail:(nullable NSString *)email - firstName:(nullable NSString *)firstName - lastName:(nullable NSString *)lastName - phone:(nullable NSString *)phone - dateOfBirth:(nullable NSString *)dateOfBirth - gender:(nullable NSString *)gender - city:(nullable NSString *)city - state:(nullable NSString *)state - zip:(nullable NSString *)zip - country:(nullable NSString *)country -NS_SWIFT_NAME(setUser(email:firstName:lastName:phone:dateOfBirth:gender:city:state:zip:country:)); - -/* - Returns the set user data else nil -*/ -+ (nullable NSString *)getUserData; - -/* - Clears the current user data -*/ -+ (void)clearUserData; - -/* - Sets custom user data to associate with all app events. All user data are hashed - and used to match Facebook user from this instance of an application. - - The user data will be persisted between application instances. - - @param data data - @param type data type, e.g. FBSDKAppEventEmail, FBSDKAppEventPhone - */ -+ (void)setUserData:(nullable NSString *)data - forType:(FBSDKAppEventUserDataType)type; - -/* - Clears the current user data of certain type - */ -+ (void)clearUserDataForType:(FBSDKAppEventUserDataType)type; - -/* - Sends a request to update the properties for the current user, set by `setUserID:` - - You must call `FBSDKAppEvents setUserID:` before making this call. - @param properties the custom user properties - @param handler the optional completion handler - */ -+ (void)updateUserProperties:(NSDictionary *)properties handler:(nullable FBSDKGraphRequestBlock)handler; - -#if !TARGET_OS_TV -/* - Intended to be used as part of a hybrid webapp. - If you call this method, the FB SDK will inject a new JavaScript object into your webview. - If the FB Pixel is used within the webview, and references the app ID of this app, - then it will detect the presence of this injected JavaScript object - and pass Pixel events back to the FB SDK for logging using the AppEvents framework. - - @param webView The webview to augment with the additional JavaScript behaviour - */ -+ (void)augmentHybridWKWebView:(WKWebView *)webView; -#endif - -/* - * Unity helper functions - */ - -/** - - Set if the Unity is already initialized - - @param isUnityInit whether Unity is initialized. - - */ -+ (void)setIsUnityInit:(BOOL)isUnityInit; - -/* - Send event binding to Unity - */ -+ (void)sendEventBindingsToUnity; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/FBSDKAppEvents.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/FBSDKAppEvents.m deleted file mode 100644 index d3d4e73fc7..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/FBSDKAppEvents.m +++ /dev/null @@ -1,1487 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKAppEvents.h" -#import "FBSDKAppEvents+Internal.h" -#import "FBSDKApplicationDelegate+Internal.h" -#import - -#import - -#import "FBSDKAccessToken.h" -#import "FBSDKAppEventsState.h" -#import "FBSDKAppEventsStateManager.h" -#import "FBSDKAppEventsUtility.h" -#import "FBSDKConstants.h" -#import "FBSDKDynamicFrameworkLoader.h" -#import "FBSDKError.h" -#import "FBSDKEventDeactivationManager.h" -#import "FBSDKFeatureManager.h" -#import "FBSDKGraphRequest+Internal.h" -#import "FBSDKInternalUtility.h" -#import "FBSDKLogger.h" -#import "FBSDKRestrictiveDataFilterManager.h" -#import "FBSDKPaymentObserver.h" -#import "FBSDKServerConfiguration.h" -#import "FBSDKServerConfigurationManager.h" -#import "FBSDKSettings.h" -#import "FBSDKTimeSpentData.h" -#import "FBSDKUtility.h" -#import "FBSDKUserDataStore.h" - -#if !TARGET_OS_TV - -#import "FBSDKAddressFilterManager.h" -#import "FBSDKEventBindingManager.h" -#import "FBSDKHybridAppEventsScriptMessageHandler.h" -#import "FBSDKModelManager.h" - -#endif - -// -// Public event names -// - -// General purpose -FBSDKAppEventName FBSDKAppEventNameCompletedRegistration = @"fb_mobile_complete_registration"; -FBSDKAppEventName FBSDKAppEventNameViewedContent = @"fb_mobile_content_view"; -FBSDKAppEventName FBSDKAppEventNameSearched = @"fb_mobile_search"; -FBSDKAppEventName FBSDKAppEventNameRated = @"fb_mobile_rate"; -FBSDKAppEventName FBSDKAppEventNameCompletedTutorial = @"fb_mobile_tutorial_completion"; -FBSDKAppEventName FBSDKAppEventNameContact = @"Contact"; -FBSDKAppEventName FBSDKAppEventNameCustomizeProduct = @"CustomizeProduct"; -FBSDKAppEventName FBSDKAppEventNameDonate = @"Donate"; -FBSDKAppEventName FBSDKAppEventNameFindLocation = @"FindLocation"; -FBSDKAppEventName FBSDKAppEventNameSchedule = @"Schedule"; -FBSDKAppEventName FBSDKAppEventNameStartTrial = @"StartTrial"; -FBSDKAppEventName FBSDKAppEventNameSubmitApplication = @"SubmitApplication"; -FBSDKAppEventName FBSDKAppEventNameSubscribe = @"Subscribe"; -FBSDKAppEventName FBSDKAppEventNameSubscriptionHeartbeat = @"SubscriptionHeartbeat"; -FBSDKAppEventName FBSDKAppEventNameAdImpression = @"AdImpression"; -FBSDKAppEventName FBSDKAppEventNameAdClick = @"AdClick"; - -// Ecommerce related -FBSDKAppEventName FBSDKAppEventNameAddedToCart = @"fb_mobile_add_to_cart"; -FBSDKAppEventName FBSDKAppEventNameAddedToWishlist = @"fb_mobile_add_to_wishlist"; -FBSDKAppEventName FBSDKAppEventNameInitiatedCheckout = @"fb_mobile_initiated_checkout"; -FBSDKAppEventName FBSDKAppEventNameAddedPaymentInfo = @"fb_mobile_add_payment_info"; -FBSDKAppEventName FBSDKAppEventNameProductCatalogUpdate = @"fb_mobile_catalog_update"; -FBSDKAppEventName FBSDKAppEventNamePurchased = @"fb_mobile_purchase"; - -// Gaming related -FBSDKAppEventName FBSDKAppEventNameAchievedLevel = @"fb_mobile_level_achieved"; -FBSDKAppEventName FBSDKAppEventNameUnlockedAchievement = @"fb_mobile_achievement_unlocked"; -FBSDKAppEventName FBSDKAppEventNameSpentCredits = @"fb_mobile_spent_credits"; - -// -// Public event parameter names -// - -FBSDKAppEventParameterName FBSDKAppEventParameterNameCurrency = @"fb_currency"; -FBSDKAppEventParameterName FBSDKAppEventParameterNameRegistrationMethod = @"fb_registration_method"; -FBSDKAppEventParameterName FBSDKAppEventParameterNameContentType = @"fb_content_type"; -FBSDKAppEventParameterName FBSDKAppEventParameterNameContent = @"fb_content"; -FBSDKAppEventParameterName FBSDKAppEventParameterNameContentID = @"fb_content_id"; -FBSDKAppEventParameterName FBSDKAppEventParameterNameSearchString = @"fb_search_string"; -FBSDKAppEventParameterName FBSDKAppEventParameterNameSuccess = @"fb_success"; -FBSDKAppEventParameterName FBSDKAppEventParameterNameMaxRatingValue = @"fb_max_rating_value"; -FBSDKAppEventParameterName FBSDKAppEventParameterNamePaymentInfoAvailable = @"fb_payment_info_available"; -FBSDKAppEventParameterName FBSDKAppEventParameterNameNumItems = @"fb_num_items"; -FBSDKAppEventParameterName FBSDKAppEventParameterNameLevel = @"fb_level"; -FBSDKAppEventParameterName FBSDKAppEventParameterNameDescription = @"fb_description"; -FBSDKAppEventParameterName FBSDKAppEventParameterLaunchSource = @"fb_mobile_launch_source"; -FBSDKAppEventParameterName FBSDKAppEventParameterNameAdType = @"ad_type"; -FBSDKAppEventParameterName FBSDKAppEventParameterNameOrderID = @"fb_order_id"; - -// -// Public event parameter names for DPA Catalog -// - -FBSDKAppEventParameterProduct FBSDKAppEventParameterProductCustomLabel0 = @"fb_product_custom_label_0"; -FBSDKAppEventParameterProduct FBSDKAppEventParameterProductCustomLabel1 = @"fb_product_custom_label_1"; -FBSDKAppEventParameterProduct FBSDKAppEventParameterProductCustomLabel2 = @"fb_product_custom_label_2"; -FBSDKAppEventParameterProduct FBSDKAppEventParameterProductCustomLabel3 = @"fb_product_custom_label_3"; -FBSDKAppEventParameterProduct FBSDKAppEventParameterProductCustomLabel4 = @"fb_product_custom_label_4"; -FBSDKAppEventParameterProduct FBSDKAppEventParameterProductCategory = @"fb_product_category"; -FBSDKAppEventParameterProduct FBSDKAppEventParameterProductAppLinkIOSUrl = @"fb_product_applink_ios_url"; -FBSDKAppEventParameterProduct FBSDKAppEventParameterProductAppLinkIOSAppStoreID = @"fb_product_applink_ios_app_store_id"; -FBSDKAppEventParameterProduct FBSDKAppEventParameterProductAppLinkIOSAppName = @"fb_product_applink_ios_app_name"; -FBSDKAppEventParameterProduct FBSDKAppEventParameterProductAppLinkIPhoneUrl = @"fb_product_applink_iphone_url"; -FBSDKAppEventParameterProduct FBSDKAppEventParameterProductAppLinkIPhoneAppStoreID = @"fb_product_applink_iphone_app_store_id"; -FBSDKAppEventParameterProduct FBSDKAppEventParameterProductAppLinkIPhoneAppName = @"fb_product_applink_iphone_app_name"; -FBSDKAppEventParameterProduct FBSDKAppEventParameterProductAppLinkIPadUrl = @"fb_product_applink_ipad_url"; -FBSDKAppEventParameterProduct FBSDKAppEventParameterProductAppLinkIPadAppStoreID = @"fb_product_applink_ipad_app_store_id"; -FBSDKAppEventParameterProduct FBSDKAppEventParameterProductAppLinkIPadAppName = @"fb_product_applink_ipad_app_name"; -FBSDKAppEventParameterProduct FBSDKAppEventParameterProductAppLinkAndroidUrl = @"fb_product_applink_android_url"; -FBSDKAppEventParameterProduct FBSDKAppEventParameterProductAppLinkAndroidPackage = @"fb_product_applink_android_package"; -FBSDKAppEventParameterProduct FBSDKAppEventParameterProductAppLinkAndroidAppName = @"fb_product_applink_android_app_name"; -FBSDKAppEventParameterProduct FBSDKAppEventParameterProductAppLinkWindowsPhoneUrl = @"fb_product_applink_windows_phone_url"; -FBSDKAppEventParameterProduct FBSDKAppEventParameterProductAppLinkWindowsPhoneAppID = @"fb_product_applink_windows_phone_app_id"; -FBSDKAppEventParameterProduct FBSDKAppEventParameterProductAppLinkWindowsPhoneAppName = @"fb_product_applink_windows_phone_app_name"; - -// -// Public event parameter values -// - -FBSDKAppEventParameterValue FBSDKAppEventParameterValueNo = @"0"; -FBSDKAppEventParameterValue FBSDKAppEventParameterValueYes = @"1"; - -// -// Public event user data types -// - -FBSDKAppEventUserDataType FBSDKAppEventEmail = @"em"; -FBSDKAppEventUserDataType FBSDKAppEventFirstName = @"fn"; -FBSDKAppEventUserDataType FBSDKAppEventLastName = @"ln"; -FBSDKAppEventUserDataType FBSDKAppEventPhone = @"ph"; -FBSDKAppEventUserDataType FBSDKAppEventDateOfBirth = @"dob"; -FBSDKAppEventUserDataType FBSDKAppEventGender = @"ge"; -FBSDKAppEventUserDataType FBSDKAppEventCity = @"ct"; -FBSDKAppEventUserDataType FBSDKAppEventState = @"st"; -FBSDKAppEventUserDataType FBSDKAppEventZip = @"zp"; -FBSDKAppEventUserDataType FBSDKAppEventCountry = @"country"; - -// -// Event names internal to this file -// -FBSDKAppEventName FBSDKAppEventNameLoginViewUsage = @"fb_login_view_usage"; -FBSDKAppEventName FBSDKAppEventNameShareSheetLaunch = @"fb_share_sheet_launch"; -FBSDKAppEventName FBSDKAppEventNameShareSheetDismiss = @"fb_share_sheet_dismiss"; -FBSDKAppEventName FBSDKAppEventNameShareTrayDidLaunch = @"fb_share_tray_did_launch"; -FBSDKAppEventName FBSDKAppEventNameShareTrayDidSelectActivity = @"fb_share_tray_did_select_activity"; -FBSDKAppEventName FBSDKAppEventNamePermissionsUILaunch = @"fb_permissions_ui_launch"; -FBSDKAppEventName FBSDKAppEventNamePermissionsUIDismiss = @"fb_permissions_ui_dismiss"; -FBSDKAppEventName FBSDKAppEventNameFBDialogsPresentShareDialog = @"fb_dialogs_present_share"; -FBSDKAppEventName FBSDKAppEventNameFBDialogsPresentShareDialogPhoto = @"fb_dialogs_present_share_photo"; -FBSDKAppEventName FBSDKAppEventNameFBDialogsPresentShareDialogOG = @"fb_dialogs_present_share_og"; -FBSDKAppEventName FBSDKAppEventNameFBDialogsPresentLikeDialogOG = @"fb_dialogs_present_like_og"; -FBSDKAppEventName FBSDKAppEventNameFBDialogsPresentMessageDialog = @"fb_dialogs_present_message"; -FBSDKAppEventName FBSDKAppEventNameFBDialogsPresentMessageDialogPhoto = @"fb_dialogs_present_message_photo"; -FBSDKAppEventName FBSDKAppEventNameFBDialogsPresentMessageDialogOG = @"fb_dialogs_present_message_og"; - -FBSDKAppEventName FBSDKAppEventNameFBDialogsNativeLoginDialogStart = @"fb_dialogs_native_login_dialog_start"; -NSString *const FBSDKAppEventsNativeLoginDialogStartTime = @"fb_native_login_dialog_start_time"; - -FBSDKAppEventName FBSDKAppEventNameFBDialogsNativeLoginDialogEnd = @"fb_dialogs_native_login_dialog_end"; -NSString *const FBSDKAppEventsNativeLoginDialogEndTime = @"fb_native_login_dialog_end_time"; - -FBSDKAppEventName FBSDKAppEventNameFBDialogsWebLoginCompleted = @"fb_dialogs_web_login_dialog_complete"; -NSString *const FBSDKAppEventsWebLoginE2E = @"fb_web_login_e2e"; - -FBSDKAppEventName FBSDKAppEventNameFBSessionAuthStart = @"fb_mobile_login_start"; -FBSDKAppEventName FBSDKAppEventNameFBSessionAuthEnd = @"fb_mobile_login_complete"; -FBSDKAppEventName FBSDKAppEventNameFBSessionAuthMethodStart = @"fb_mobile_login_method_start"; -FBSDKAppEventName FBSDKAppEventNameFBSessionAuthMethodEnd = @"fb_mobile_login_method_complete"; - -FBSDKAppEventName FBSDKAppEventNameFBSDKLikeButtonImpression = @"fb_like_button_impression"; -FBSDKAppEventName FBSDKAppEventNameFBSDKLoginButtonImpression = @"fb_login_button_impression"; -FBSDKAppEventName FBSDKAppEventNameFBSDKSendButtonImpression = @"fb_send_button_impression"; -FBSDKAppEventName FBSDKAppEventNameFBSDKShareButtonImpression = @"fb_share_button_impression"; -FBSDKAppEventName FBSDKAppEventNameFBSDKLiveStreamingButtonImpression = @"fb_live_streaming_button_impression"; - -FBSDKAppEventName FBSDKAppEventNameFBSDKSmartLoginService = @"fb_smart_login_service"; - -FBSDKAppEventName FBSDKAppEventNameFBSDKLikeButtonDidTap = @"fb_like_button_did_tap"; -FBSDKAppEventName FBSDKAppEventNameFBSDKLoginButtonDidTap = @"fb_login_button_did_tap"; -FBSDKAppEventName FBSDKAppEventNameFBSDKSendButtonDidTap = @"fb_send_button_did_tap"; -FBSDKAppEventName FBSDKAppEventNameFBSDKShareButtonDidTap = @"fb_share_button_did_tap"; -FBSDKAppEventName FBSDKAppEventNameFBSDKLiveStreamingButtonDidTap = @"fb_live_streaming_button_did_tap"; - -FBSDKAppEventName FBSDKAppEventNameFBSDKLikeControlDidDisable = @"fb_like_control_did_disable"; -FBSDKAppEventName FBSDKAppEventNameFBSDKLikeControlDidLike = @"fb_like_control_did_like"; -FBSDKAppEventName FBSDKAppEventNameFBSDKLikeControlDidPresentDialog = @"fb_like_control_did_present_dialog"; -FBSDKAppEventName FBSDKAppEventNameFBSDKLikeControlDidTap = @"fb_like_control_did_tap"; -FBSDKAppEventName FBSDKAppEventNameFBSDKLikeControlDidUnlike = @"fb_like_control_did_unlike"; -FBSDKAppEventName FBSDKAppEventNameFBSDKLikeControlError = @"fb_like_control_error"; -FBSDKAppEventName FBSDKAppEventNameFBSDKLikeControlImpression = @"fb_like_control_impression"; -FBSDKAppEventName FBSDKAppEventNameFBSDKLikeControlNetworkUnavailable = @"fb_like_control_network_unavailable"; - -FBSDKAppEventName FBSDKAppEventNameFBSDKEventShareDialogResult = @"fb_dialog_share_result"; -FBSDKAppEventName FBSDKAppEventNameFBSDKEventMessengerShareDialogResult = @"fb_messenger_dialog_share_result"; -FBSDKAppEventName FBSDKAppEventNameFBSDKEventAppInviteShareDialogResult = @"fb_app_invite_dialog_share_result"; - -FBSDKAppEventName FBSDKAppEventNameFBSDKEventShareDialogShow = @"fb_dialog_share_show"; -FBSDKAppEventName FBSDKAppEventNameFBSDKEventMessengerShareDialogShow = @"fb_messenger_dialog_share_show"; -FBSDKAppEventName FBSDKAppEventNameFBSDKEventAppInviteShareDialogShow = @"fb_app_invite_share_show"; - -FBSDKAppEventName FBSDKAppEventNameFBSessionFASLoginDialogResult = @"fb_mobile_login_fas_dialog_result"; - -FBSDKAppEventName FBSDKAppEventNameFBSDKLiveStreamingStart = @"fb_sdk_live_streaming_start"; -FBSDKAppEventName FBSDKAppEventNameFBSDKLiveStreamingStop = @"fb_sdk_live_streaming_stop"; -FBSDKAppEventName FBSDKAppEventNameFBSDKLiveStreamingPause = @"fb_sdk_live_streaming_pause"; -FBSDKAppEventName FBSDKAppEventNameFBSDKLiveStreamingResume = @"fb_sdk_live_streaming_resume"; -FBSDKAppEventName FBSDKAppEventNameFBSDKLiveStreamingError = @"fb_sdk_live_streaming_error"; -FBSDKAppEventName FBSDKAppEventNameFBSDKLiveStreamingUpdateStatus = @"fb_sdk_live_streaming_update_status"; -FBSDKAppEventName FBSDKAppEventNameFBSDKLiveStreamingVideoID = @"fb_sdk_live_streaming_video_id"; -FBSDKAppEventName FBSDKAppEventNameFBSDKLiveStreamingMic = @"fb_sdk_live_streaming_mic"; -FBSDKAppEventName FBSDKAppEventNameFBSDKLiveStreamingCamera = @"fb_sdk_live_streaming_camera"; - -// Event Parameters internal to this file -NSString *const FBSDKAppEventParameterDialogOutcome = @"fb_dialog_outcome"; -NSString *const FBSDKAppEventParameterDialogErrorMessage = @"fb_dialog_outcome_error_message"; -NSString *const FBSDKAppEventParameterDialogMode = @"fb_dialog_mode"; -NSString *const FBSDKAppEventParameterDialogShareContentType = @"fb_dialog_share_content_type"; -NSString *const FBSDKAppEventParameterDialogShareContentUUID = @"fb_dialog_share_content_uuid"; -NSString *const FBSDKAppEventParameterDialogShareContentPageID = @"fb_dialog_share_content_page_id"; -NSString *const FBSDKAppEventParameterShareTrayActivityName = @"fb_share_tray_activity"; -NSString *const FBSDKAppEventParameterShareTrayResult = @"fb_share_tray_result"; -NSString *const FBSDKAppEventParameterLogTime = @"_logTime"; -NSString *const FBSDKAppEventParameterEventName = @"_eventName"; -NSString *const FBSDKAppEventParameterImplicitlyLogged = @"_implicitlyLogged"; -NSString *const FBSDKAppEventParameterInBackground = @"_inBackground"; - -NSString *const FBSDKAppEventParameterLiveStreamingPrevStatus = @"live_streaming_prev_status"; -NSString *const FBSDKAppEventParameterLiveStreamingStatus = @"live_streaming_status"; -NSString *const FBSDKAppEventParameterLiveStreamingError = @"live_streaming_error"; -NSString *const FBSDKAppEventParameterLiveStreamingVideoID = @"live_streaming_video_id"; -NSString *const FBSDKAppEventParameterLiveStreamingMicEnabled = @"live_streaming_mic_enabled"; -NSString *const FBSDKAppEventParameterLiveStreamingCameraEnabled = @"live_streaming_camera_enabled"; - -FBSDKAppEventParameterProduct FBSDKAppEventParameterProductItemID = @"fb_product_item_id"; -FBSDKAppEventParameterProduct FBSDKAppEventParameterProductAvailability = @"fb_product_availability"; -FBSDKAppEventParameterProduct FBSDKAppEventParameterProductCondition = @"fb_product_condition"; -FBSDKAppEventParameterProduct FBSDKAppEventParameterProductDescription = @"fb_product_description"; -FBSDKAppEventParameterProduct FBSDKAppEventParameterProductImageLink = @"fb_product_image_link"; -FBSDKAppEventParameterProduct FBSDKAppEventParameterProductLink = @"fb_product_link"; -FBSDKAppEventParameterProduct FBSDKAppEventParameterProductTitle = @"fb_product_title"; -FBSDKAppEventParameterProduct FBSDKAppEventParameterProductGTIN = @"fb_product_gtin"; -FBSDKAppEventParameterProduct FBSDKAppEventParameterProductMPN = @"fb_product_mpn"; -FBSDKAppEventParameterProduct FBSDKAppEventParameterProductBrand = @"fb_product_brand"; -FBSDKAppEventParameterProduct FBSDKAppEventParameterProductPriceAmount = @"fb_product_price_amount"; -FBSDKAppEventParameterProduct FBSDKAppEventParameterProductPriceCurrency = @"fb_product_price_currency"; - -// Event parameter values internal to this file -NSString *const FBSDKAppEventsDialogOutcomeValue_Completed = @"Completed"; -NSString *const FBSDKAppEventsDialogOutcomeValue_Cancelled = @"Cancelled"; -NSString *const FBSDKAppEventsDialogOutcomeValue_Failed = @"Failed"; - -NSString *const FBSDKAppEventsDialogShareModeAutomatic = @"Automatic"; -NSString *const FBSDKAppEventsDialogShareModeBrowser = @"Browser"; -NSString *const FBSDKAppEventsDialogShareModeNative = @"Native"; -NSString *const FBSDKAppEventsDialogShareModeShareSheet = @"ShareSheet"; -NSString *const FBSDKAppEventsDialogShareModeWeb = @"Web"; -NSString *const FBSDKAppEventsDialogShareModeFeedBrowser = @"FeedBrowser"; -NSString *const FBSDKAppEventsDialogShareModeFeedWeb = @"FeedWeb"; -NSString *const FBSDKAppEventsDialogShareModeUnknown = @"Unknown"; - -NSString *const FBSDKAppEventsDialogShareContentTypeOpenGraph = @"OpenGraph"; -NSString *const FBSDKAppEventsDialogShareContentTypeStatus = @"Status"; -NSString *const FBSDKAppEventsDialogShareContentTypePhoto = @"Photo"; -NSString *const FBSDKAppEventsDialogShareContentTypeVideo = @"Video"; -NSString *const FBSDKAppEventsDialogShareContentTypeCamera = @"Camera"; -NSString *const FBSDKAppEventsDialogShareContentTypeMessengerGenericTemplate = @"GenericTemplate"; -NSString *const FBSDKAppEventsDialogShareContentTypeMessengerMediaTemplate = @"MediaTemplate"; -NSString *const FBSDKAppEventsDialogShareContentTypeMessengerOpenGraphMusicTemplate = @"OpenGraphMusicTemplate"; -NSString *const FBSDKAppEventsDialogShareContentTypeUnknown = @"Unknown"; - -NSString *const FBSDKGateKeeperAppEventsKillSwitch = @"app_events_killswitch"; - -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 - -NSNotificationName const FBSDKAppEventsLoggingResultNotification = @"com.facebook.sdk:FBSDKAppEventsLoggingResultNotification"; - -#else - -NSString *const FBSDKAppEventsLoggingResultNotification = @"com.facebook.sdk:FBSDKAppEventsLoggingResultNotification"; - -#endif - -NSString *const FBSDKAppEventsOverrideAppIDBundleKey = @"FacebookLoggingOverrideAppID"; - -// -// Push Notifications -// -// Activities Endpoint Parameter -static NSString *const FBSDKActivitesParameterPushDeviceToken = @"device_token"; -// Event Names -static FBSDKAppEventName FBSDKAppEventNamePushTokenObtained = @"fb_mobile_obtain_push_token"; -static FBSDKAppEventName FBSDKAppEventNamePushOpened = @"fb_mobile_push_opened"; -// Event Parameter -static NSString *const FBSDKAppEventParameterPushCampaign = @"fb_push_campaign"; -static NSString *const FBSDKAppEventParameterPushAction = @"fb_push_action"; -// Payload Keys -static NSString *const FBSDKAppEventsPushPayloadKey = @"fb_push_payload"; -static NSString *const FBSDKAppEventsPushPayloadCampaignKey = @"campaign"; - -// -// Augmentation of web browser constants -// -NSString *const FBSDKAppEventsWKWebViewMessagesPixelIDKey = @"pixelID"; -NSString *const FBSDKAppEventsWKWebViewMessagesHandlerKey = @"fbmqHandler"; -NSString *const FBSDKAppEventsWKWebViewMessagesEventKey = @"event"; -NSString *const FBSDKAppEventsWKWebViewMessagesParamsKey = @"params"; -NSString *const FBSDKAPPEventsWKWebViewMessagesProtocolKey = @"fbmq-0.1"; - -#define NUM_LOG_EVENTS_TO_TRY_TO_FLUSH_AFTER 100 -#define FLUSH_PERIOD_IN_SECONDS 15 -#define USER_ID_USER_DEFAULTS_KEY @"com.facebook.sdk.appevents.userid" - -#define FBUnityUtilityClassName "FBUnityUtility" -#define FBUnityUtilityUpdateBindingsSelector @"triggerUpdateBindings:" - -static NSString *g_overrideAppID = nil; - -@interface FBSDKAppEvents () - -@property (nonatomic, assign) FBSDKAppEventsFlushBehavior flushBehavior; -//for testing only. -@property (nonatomic, assign) BOOL disableTimer; - -@property (nonatomic, copy) NSString *pushNotificationsDeviceTokenString; - -@property (nonatomic, strong) dispatch_source_t flushTimer; - -@property (nonatomic, copy) NSString *userID; - -@end - -@implementation FBSDKAppEvents -{ - BOOL _explicitEventsLoggedYet; - FBSDKServerConfiguration *_serverConfiguration; - FBSDKAppEventsState *_appEventsState; -#if !TARGET_OS_TV - FBSDKEventBindingManager *_eventBindingManager; -#endif - BOOL _isUnityInit; -} - -#pragma mark - Object Lifecycle - -+ (void)initialize -{ - if (self == [FBSDKAppEvents class]) { - g_overrideAppID = [[[NSBundle mainBundle] objectForInfoDictionaryKey:FBSDKAppEventsOverrideAppIDBundleKey] copy]; - [FBSDKBasicUtility anonymousID]; - } -} - -- (instancetype)init -{ - self = [super init]; - if (self) { - _flushBehavior = FBSDKAppEventsFlushBehaviorAuto; - - __weak FBSDKAppEvents *weakSelf = self; - self.flushTimer = [FBSDKUtility startGCDTimerWithInterval:FLUSH_PERIOD_IN_SECONDS - block:^{ - [weakSelf flushTimerFired:nil]; - }]; - - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - _userID = [defaults stringForKey:USER_ID_USER_DEFAULTS_KEY]; - [self fetchServerConfiguration:nil]; - } - - return self; -} - -- (void)registerNotifications { - [[NSNotificationCenter defaultCenter] - addObserver:self - selector:@selector(applicationMovingFromActiveStateOrTerminating) - name:UIApplicationWillResignActiveNotification - object:NULL]; - - [[NSNotificationCenter defaultCenter] - addObserver:self - selector:@selector(applicationMovingFromActiveStateOrTerminating) - name:UIApplicationWillTerminateNotification - object:NULL]; - - [[NSNotificationCenter defaultCenter] - addObserver:self - selector:@selector(applicationDidBecomeActive) - name:UIApplicationDidBecomeActiveNotification - object:NULL]; -} - -- (void)dealloc -{ - [[NSNotificationCenter defaultCenter] removeObserver:self]; - [FBSDKUtility stopGCDTimer:self.flushTimer]; -} - -#pragma mark - Public Methods - -+ (void)logEvent:(FBSDKAppEventName)eventName -{ - [FBSDKAppEvents logEvent:eventName - parameters:@{}]; -} - -+ (void)logEvent:(FBSDKAppEventName)eventName - valueToSum:(double)valueToSum -{ - [FBSDKAppEvents logEvent:eventName - valueToSum:valueToSum - parameters:@{}]; -} - -+ (void)logEvent:(FBSDKAppEventName)eventName - parameters:(NSDictionary *)parameters -{ - [FBSDKAppEvents logEvent:eventName - valueToSum:nil - parameters:parameters - accessToken:nil]; -} - -+ (void)logEvent:(FBSDKAppEventName)eventName - valueToSum:(double)valueToSum - parameters:(NSDictionary *)parameters -{ - [FBSDKAppEvents logEvent:eventName - valueToSum:@(valueToSum) - parameters:parameters - accessToken:nil]; -} - -+ (void)logEvent:(FBSDKAppEventName)eventName - valueToSum:(NSNumber *)valueToSum - parameters:(NSDictionary *)parameters - accessToken:(FBSDKAccessToken *)accessToken -{ - [[FBSDKAppEvents singleton] instanceLogEvent:eventName - valueToSum:valueToSum - parameters:parameters - isImplicitlyLogged:(BOOL)parameters[FBSDKAppEventParameterImplicitlyLogged] - accessToken:accessToken]; -} - -+ (void)logPurchase:(double)purchaseAmount - currency:(NSString *)currency -{ - [FBSDKAppEvents logPurchase:purchaseAmount - currency:currency - parameters:@{}]; -} - -+ (void)logPurchase:(double)purchaseAmount - currency:(NSString *)currency - parameters:(NSDictionary *)parameters -{ - [FBSDKAppEvents logPurchase:purchaseAmount - currency:currency - parameters:parameters - accessToken:nil]; -} - -+ (void)logPurchase:(double)purchaseAmount - currency:(NSString *)currency - parameters:(NSDictionary *)parameters - accessToken:(FBSDKAccessToken *)accessToken -{ - - // A purchase event is just a regular logged event with a given event name - // and treating the currency value as going into the parameters dictionary. - NSDictionary *newParameters; - if (!parameters) { - newParameters = @{ FBSDKAppEventParameterNameCurrency : currency }; - } else { - newParameters = [NSMutableDictionary dictionaryWithDictionary:parameters]; - [newParameters setValue:currency forKey:FBSDKAppEventParameterNameCurrency]; - } - - [FBSDKAppEvents logEvent:FBSDKAppEventNamePurchased - valueToSum:@(purchaseAmount) - parameters:newParameters - accessToken:accessToken]; - - // Unless the behavior is set to only allow explicit flushing, we go ahead and flush, since purchase events - // are relatively rare and relatively high value and worth getting across on wire right away. - if ([FBSDKAppEvents flushBehavior] != FBSDKAppEventsFlushBehaviorExplicitOnly) { - [[FBSDKAppEvents singleton] flushForReason:FBSDKAppEventsFlushReasonEagerlyFlushingEvent]; - } -} - -/* - * Push Notifications Logging - */ - -+ (void)logPushNotificationOpen:(NSDictionary *)payload -{ - [self logPushNotificationOpen:payload action:@""]; -} - -+ (void)logPushNotificationOpen:(NSDictionary *)payload action:(NSString *)action -{ - NSDictionary *facebookPayload = payload[FBSDKAppEventsPushPayloadKey]; - if (!facebookPayload) { - return; - } - NSString *campaign = facebookPayload[FBSDKAppEventsPushPayloadCampaignKey]; - if (campaign.length == 0) { - [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors - logEntry:@"Malformed payload specified for logging a push notification open."]; - return; - } - - NSMutableDictionary *parameters = [NSMutableDictionary dictionaryWithObject:campaign forKey:FBSDKAppEventParameterPushCampaign]; - if (action && action.length > 0) { - parameters[FBSDKAppEventParameterPushAction] = action; - } - [self logEvent:FBSDKAppEventNamePushOpened parameters:parameters]; -} - -/* - * Uploads product catalog product item as an app event - */ -+ (void)logProductItem:(NSString *)itemID - availability:(FBSDKProductAvailability)availability - condition:(FBSDKProductCondition)condition - description:(NSString *)description - imageLink:(NSString *)imageLink - link:(NSString *)link - title:(NSString *)title - priceAmount:(double)priceAmount - currency:(NSString *)currency - gtin:(NSString *)gtin - mpn:(NSString *)mpn - brand:(NSString *)brand - parameters:(NSDictionary *)parameters -{ - if (itemID == nil) { - [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors - logEntry:@"itemID cannot be null"]; - return; - } else if (description == nil) { - [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors - logEntry:@"description cannot be null"]; - return; - } else if (imageLink == nil) { - [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors - logEntry:@"imageLink cannot be null"]; - return; - } else if (link == nil) { - [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors - logEntry:@"link cannot be null"]; - return; - } else if (title == nil) { - [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors - logEntry:@"title cannot be null"]; - return; - } else if (currency == nil) { - [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors - logEntry:@"currency cannot be null"]; - return; - } else if (gtin == nil && mpn == nil && brand == nil) { - [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors - logEntry:@"Either gtin, mpn or brand is required"]; - return; - } - - NSMutableDictionary *dict = [NSMutableDictionary dictionary]; - if (nil != parameters) { - [dict setValuesForKeysWithDictionary:parameters]; - } - - dict[FBSDKAppEventParameterProductItemID] = itemID; - - NSString *avail = nil; - switch (availability) { - case FBSDKProductAvailabilityInStock: - avail = @"IN_STOCK"; break; - case FBSDKProductAvailabilityOutOfStock: - avail = @"OUT_OF_STOCK"; break; - case FBSDKProductAvailabilityPreOrder: - avail = @"PREORDER"; break; - case FBSDKProductAvailabilityAvailableForOrder: - avail = @"AVALIABLE_FOR_ORDER"; break; - case FBSDKProductAvailabilityDiscontinued: - avail = @"DISCONTINUED"; break; - } - if (avail) { - dict[FBSDKAppEventParameterProductAvailability] = avail; - } - - NSString *cond = nil; - switch (condition) { - case FBSDKProductConditionNew: - cond = @"NEW"; break; - case FBSDKProductConditionRefurbished: - cond = @"REFURBISHED"; break; - case FBSDKProductConditionUsed: - cond = @"USED"; break; - } - if (cond) { - dict[FBSDKAppEventParameterProductCondition] = cond; - } - - dict[FBSDKAppEventParameterProductDescription] = description; - dict[FBSDKAppEventParameterProductImageLink] = imageLink; - dict[FBSDKAppEventParameterProductLink] = link; - dict[FBSDKAppEventParameterProductTitle] = title; - dict[FBSDKAppEventParameterProductPriceAmount] = [NSString stringWithFormat:@"%.3lf", priceAmount]; - dict[FBSDKAppEventParameterProductPriceCurrency] = currency; - if (gtin) { - dict[FBSDKAppEventParameterProductGTIN] = gtin; - } - if (mpn) { - dict[FBSDKAppEventParameterProductMPN] = mpn; - } - if (brand) { - dict[FBSDKAppEventParameterProductBrand] = brand; - } - - [FBSDKAppEvents logEvent:FBSDKAppEventNameProductCatalogUpdate - parameters:dict]; -} - -+ (void)activateApp -{ - [FBSDKAppEventsUtility ensureOnMainThread:NSStringFromSelector(_cmd) className:NSStringFromClass(self)]; - - // Fetch app settings and register for transaction notifications only if app supports implicit purchase - // events - FBSDKAppEvents *instance = [FBSDKAppEvents singleton]; - [instance publishInstall]; - [instance fetchServerConfiguration:NULL]; - - // Restore time spent data, indicating that we're being called from "activateApp", which will, - // when appropriate, result in logging an "activated app" and "deactivated app" (for the - // previous session) App Event. - [FBSDKTimeSpentData restore:YES]; -} - -+ (void)setPushNotificationsDeviceToken:(NSData *)deviceToken -{ - NSString *deviceTokenString = [FBSDKInternalUtility hexadecimalStringFromData:deviceToken]; - [FBSDKAppEvents setPushNotificationsDeviceTokenString:deviceTokenString]; -} - -+ (void)setPushNotificationsDeviceTokenString:(NSString *)deviceTokenString -{ - if (deviceTokenString == nil) { - [FBSDKAppEvents singleton].pushNotificationsDeviceTokenString = nil; - return; - } - - if (![deviceTokenString isEqualToString:([FBSDKAppEvents singleton].pushNotificationsDeviceTokenString)]) { - [FBSDKAppEvents singleton].pushNotificationsDeviceTokenString = deviceTokenString; - - [FBSDKAppEvents logEvent:FBSDKAppEventNamePushTokenObtained]; - - // Unless the behavior is set to only allow explicit flushing, we go ahead and flush the event - if ([FBSDKAppEvents flushBehavior] != FBSDKAppEventsFlushBehaviorExplicitOnly) { - [[FBSDKAppEvents singleton] flushForReason:FBSDKAppEventsFlushReasonEagerlyFlushingEvent]; - } - } -} - -+ (FBSDKAppEventsFlushBehavior)flushBehavior -{ - return [FBSDKAppEvents singleton].flushBehavior; -} - -+ (void)setFlushBehavior:(FBSDKAppEventsFlushBehavior)flushBehavior -{ - [FBSDKAppEvents singleton].flushBehavior = flushBehavior; -} - -+ (NSString *)loggingOverrideAppID -{ - return g_overrideAppID; -} - -+ (void)setLoggingOverrideAppID:(NSString *)appID -{ - if (![g_overrideAppID isEqualToString:appID]) { - FBSDKConditionalLog(![FBSDKAppEvents singleton]->_explicitEventsLoggedYet, - FBSDKLoggingBehaviorDeveloperErrors, - @"[FBSDKAppEvents setLoggingOverrideAppID:] should only be called prior to any events being logged."); - g_overrideAppID = appID; - } -} - -+ (void)flush -{ - [[FBSDKAppEvents singleton] flushForReason:FBSDKAppEventsFlushReasonExplicit]; -} - -+ (void)setUserID:(NSString *)userID -{ - if ([[[self class] singleton].userID isEqualToString:userID]) { - return; - } - [[self class] singleton].userID = userID; - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - [defaults setObject:userID forKey:USER_ID_USER_DEFAULTS_KEY]; - [defaults synchronize]; -} - -+ (void)clearUserID -{ - [self setUserID:nil]; -} - -+ (NSString *)userID -{ - return [[self class] singleton].userID; -} - -+ (void)setUserEmail:(nullable NSString *)email - firstName:(nullable NSString *)firstName - lastName:(nullable NSString *)lastName - phone:(nullable NSString *)phone - dateOfBirth:(nullable NSString *)dateOfBirth - gender:(nullable NSString *)gender - city:(nullable NSString *)city - state:(nullable NSString *)state - zip:(nullable NSString *)zip - country:(nullable NSString *)country -{ - [FBSDKUserDataStore setAndHashUserEmail:email - firstName:firstName - lastName:lastName - phone:phone - dateOfBirth:dateOfBirth - gender:gender - city:city - state:state - zip:zip - country:country]; -} - -+ (NSString*)getUserData -{ - return [FBSDKUserDataStore getHashedData]; -} - -+ (void)clearUserData -{ - [FBSDKUserDataStore setAndHashUserEmail:nil - firstName:nil - lastName:nil - phone:nil - dateOfBirth:nil - gender:nil - city:nil - state:nil - zip:nil - country:nil]; -} - -+ (void)setUserData:(nullable NSString *)data - forType:(FBSDKAppEventUserDataType)type -{ - [FBSDKUserDataStore setAndHashData:data forType:type]; -} - -+ (void)clearUserDataForType:(FBSDKAppEventUserDataType)type -{ - [FBSDKUserDataStore clearDataForType:type]; -} - - -+ (void)updateUserProperties:(NSDictionary *)properties handler:(FBSDKGraphRequestBlock)handler -{ - NSString *userID = [[self class] userID]; - - if (userID.length == 0) { - [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors logEntry:@"Missing [FBSDKAppEvents userID] for [FBSDKAppEvents updateUserProperties:]"]; - NSError *error = [FBSDKError requiredArgumentErrorWithName:@"userID" message:@"Missing [FBSDKAppEvents userID] for [FBSDKAppEvents updateUserProperties:]"]; - if (handler) { - handler(nil, nil, error); - } - return; - } - NSMutableDictionary *dataDictionary = [NSMutableDictionary dictionaryWithCapacity:3]; - [FBSDKBasicUtility dictionary:dataDictionary setObject:[FBSDKAppEvents userID] forKey:@"user_unique_id"]; - [FBSDKBasicUtility dictionary:dataDictionary setObject:[FBSDKAppEventsUtility advertiserID] forKey:@"advertiser_id"]; - [FBSDKBasicUtility dictionary:dataDictionary setObject:properties forKey:@"custom_data"]; - - NSError *error; - __block NSError *invalidObjectError; - NSString *dataJSONString = [FBSDKBasicUtility JSONStringForObject:@[dataDictionary] error:&error invalidObjectHandler:^id(id object, BOOL *stop) { - *stop = YES; - invalidObjectError = [FBSDKError unknownErrorWithMessage:@"The values in the properties dictionary must be NSStrings or NSNumbers"]; - return nil; - }]; - if (!error) { - error = invalidObjectError; - } - if (error) { - [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors logEntry:@"Failed to serialize properties for [FBSDKAppEvents updateUserProperties:]"]; - if (handler) { - handler(nil, nil, error); - } - return; - } - NSDictionary *params = @{ @"data" : dataJSONString }; - FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:[NSString stringWithFormat:@"%@/user_properties", [[self singleton] appID]] - parameters:params - tokenString:[FBSDKAccessToken currentAccessToken].tokenString - HTTPMethod:FBSDKHTTPMethodPOST - flags:FBSDKGraphRequestFlagDisableErrorRecovery | - FBSDKGraphRequestFlagDoNotInvalidateTokenOnError | - FBSDKGraphRequestFlagSkipClientToken - ]; - [request startWithCompletionHandler:handler]; -} - -#if !TARGET_OS_TV -+ (void)augmentHybridWKWebView:(WKWebView *)webView { - // Ensure we can instantiate WebKit before trying this - Class WKWebViewClass = fbsdkdfl_WKWebViewClass(); - if (WKWebViewClass != nil && [webView isKindOfClass:WKWebViewClass]) { - Class WKUserScriptClass = fbsdkdfl_WKUserScriptClass(); - if (WKUserScriptClass != nil) { - WKUserContentController *controller = webView.configuration.userContentController; - FBSDKHybridAppEventsScriptMessageHandler *scriptHandler = [[FBSDKHybridAppEventsScriptMessageHandler alloc] init]; - [controller addScriptMessageHandler:scriptHandler name:FBSDKAppEventsWKWebViewMessagesHandlerKey]; - - NSString *js = [NSString stringWithFormat:@"window.fbmq_%@={'sendEvent': function(pixel_id,event_name,custom_data){var msg={\"%@\":pixel_id, \"%@\":event_name,\"%@\":custom_data};window.webkit.messageHandlers[\"%@\"].postMessage(msg);}, 'getProtocol':function(){return \"%@\";}}", - [[self singleton] appID], - FBSDKAppEventsWKWebViewMessagesPixelIDKey, - FBSDKAppEventsWKWebViewMessagesEventKey, - FBSDKAppEventsWKWebViewMessagesParamsKey, - FBSDKAppEventsWKWebViewMessagesHandlerKey, - FBSDKAPPEventsWKWebViewMessagesProtocolKey - ]; - - [controller addUserScript:[[WKUserScriptClass alloc] initWithSource:js injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:NO]]; - } - } - else { - [FBSDKAppEventsUtility logAndNotify:@"You must call augmentHybridWKWebView with WebKit linked to your project and a WKWebView instance"]; - } -} -#endif - -+ (void)setIsUnityInit:(BOOL)isUnityInit -{ - [FBSDKAppEvents singleton]->_isUnityInit = isUnityInit; -} - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Warc-performSelector-leaks" -+ (void)sendEventBindingsToUnity -{ - // Send event bindings to Unity only Unity is initialized - if ([FBSDKAppEvents singleton]->_isUnityInit - && [FBSDKAppEvents singleton]->_serverConfiguration - && [NSJSONSerialization isValidJSONObject:[FBSDKAppEvents singleton]->_serverConfiguration.eventBindings] - ) { - NSData *jsonData = [NSJSONSerialization dataWithJSONObject:[FBSDKAppEvents singleton]->_serverConfiguration.eventBindings ?: @"" - options:0 - error:nil]; - NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; - Class classFBUnityUtility = objc_lookUpClass(FBUnityUtilityClassName); - SEL updateBindingSelector = NSSelectorFromString(FBUnityUtilityUpdateBindingsSelector); - if ([classFBUnityUtility respondsToSelector:updateBindingSelector]) { - [classFBUnityUtility performSelector:updateBindingSelector withObject:jsonString]; - } - } -} -#pragma clang diagnostic pop - -#pragma mark - Internal Methods - -+ (void)logInternalEvent:(FBSDKAppEventName)eventName - isImplicitlyLogged:(BOOL)isImplicitlyLogged; -{ - [FBSDKAppEvents logInternalEvent:eventName - parameters:@{} - isImplicitlyLogged:isImplicitlyLogged]; -} - -+ (void)logInternalEvent:(FBSDKAppEventName)eventName - valueToSum:(double)valueToSum - isImplicitlyLogged:(BOOL)isImplicitlyLogged -{ - [FBSDKAppEvents logInternalEvent:eventName - valueToSum:valueToSum - parameters:@{} - isImplicitlyLogged:isImplicitlyLogged]; -} - -+ (void)logInternalEvent:(FBSDKAppEventName)eventName - parameters:(NSDictionary *)parameters - isImplicitlyLogged:(BOOL)isImplicitlyLogged -{ - [FBSDKAppEvents logInternalEvent:eventName - valueToSum:nil - parameters:parameters - isImplicitlyLogged:isImplicitlyLogged - accessToken:nil]; -} - -+ (void)logInternalEvent:(FBSDKAppEventName)eventName - parameters:(NSDictionary *)parameters - isImplicitlyLogged:(BOOL)isImplicitlyLogged - accessToken:(FBSDKAccessToken *)accessToken -{ - [FBSDKAppEvents logInternalEvent:eventName - valueToSum:nil - parameters:parameters - isImplicitlyLogged:isImplicitlyLogged - accessToken:accessToken]; -} - -+ (void)logInternalEvent:(FBSDKAppEventName)eventName - valueToSum:(double)valueToSum - parameters:(NSDictionary *)parameters - isImplicitlyLogged:(BOOL)isImplicitlyLogged -{ - [FBSDKAppEvents logInternalEvent:eventName - valueToSum:@(valueToSum) - parameters:parameters - isImplicitlyLogged:isImplicitlyLogged - accessToken:nil]; -} - -+ (void)logInternalEvent:(NSString *)eventName - valueToSum:(NSNumber *)valueToSum - parameters:(NSDictionary *)parameters - isImplicitlyLogged:(BOOL)isImplicitlyLogged - accessToken:(FBSDKAccessToken *)accessToken -{ - if ([FBSDKSettings isAutoLogAppEventsEnabled]) { - [[FBSDKAppEvents singleton] instanceLogEvent:eventName - valueToSum:valueToSum - parameters:parameters - isImplicitlyLogged:isImplicitlyLogged - accessToken:accessToken]; - } -} - -+ (void)logImplicitEvent:(NSString *)eventName - valueToSum:(NSNumber *)valueToSum - parameters:(NSDictionary *)parameters - accessToken:(FBSDKAccessToken *)accessToken -{ - [[FBSDKAppEvents singleton] instanceLogEvent:eventName - valueToSum:valueToSum - parameters:parameters - isImplicitlyLogged:YES - accessToken:accessToken]; -} - - -#ifdef DEBUG -static dispatch_once_t *onceTokenPointer; -+ (void)resetSingleton -{ - if (onceTokenPointer) { - *onceTokenPointer = 0; - } -} -#endif - -+ (FBSDKAppEvents *)singleton -{ - static dispatch_once_t onceToken; -#ifdef DEBUG - onceTokenPointer = &onceToken; -#endif - static FBSDKAppEvents *shared = nil; - dispatch_once(&onceToken, ^{ - shared = [[self alloc] init]; - }); - return shared; -} - -- (void)flushForReason:(FBSDKAppEventsFlushReason)flushReason -{ - // Always flush asynchronously, even on main thread, for two reasons: - // - most consistent code path for all threads. - // - allow locks being held by caller to be released prior to actual flushing work being done. - @synchronized (self) { - if (!_appEventsState) { - return; - } - FBSDKAppEventsState *copy = [_appEventsState copy]; - _appEventsState = [[FBSDKAppEventsState alloc] initWithToken:copy.tokenString - appID:copy.appID]; - dispatch_async(dispatch_get_main_queue(), ^{ - [self flushOnMainQueue:copy forReason:flushReason]; - }); - } -} - -#pragma mark - Private Methods -- (NSString *)appID -{ - return [FBSDKAppEvents loggingOverrideAppID] ?: [FBSDKSettings appID]; -} - -- (void)publishInstall -{ - NSString *appID = [self appID]; - if (appID.length == 0) { - [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors logEntry:@"Missing [FBSDKAppEvents appID] for [FBSDKAppEvents publishInstall:]"]; - return; - } - NSString *lastAttributionPingString = [NSString stringWithFormat:@"com.facebook.sdk:lastAttributionPing%@", appID]; - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - if ([defaults objectForKey:lastAttributionPingString]) { - return; - } - [self fetchServerConfiguration:^{ - NSDictionary *params = [FBSDKAppEventsUtility activityParametersDictionaryForEvent:@"MOBILE_APP_INSTALL" - implicitEventsOnly:NO - shouldAccessAdvertisingID:self->_serverConfiguration.isAdvertisingIDEnabled]; - NSString *path = [NSString stringWithFormat:@"%@/activities", appID]; - FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:path - parameters:params - tokenString:nil - HTTPMethod:FBSDKHTTPMethodPOST - flags:FBSDKGraphRequestFlagDoNotInvalidateTokenOnError | FBSDKGraphRequestFlagDisableErrorRecovery]; - [request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { - if (!error) { - [defaults setObject:[NSDate date] forKey:lastAttributionPingString]; - NSString *lastInstallResponseKey = [NSString stringWithFormat:@"com.facebook.sdk:lastInstallResponse%@", appID]; - [defaults setObject:result forKey:lastInstallResponseKey]; - [defaults synchronize]; - } - }]; - }]; -} - -#if !TARGET_OS_TV -- (void)enableCodelessEvents { - if (_serverConfiguration.isCodelessEventsEnabled) { - [FBSDKCodelessIndexer enable]; - - if (!_eventBindingManager) { - _eventBindingManager = [[FBSDKEventBindingManager alloc] init]; - } - - if ([FBSDKInternalUtility isUnity]) { - [FBSDKAppEvents sendEventBindingsToUnity]; - } else { - [_eventBindingManager updateBindings:[FBSDKEventBindingManager - parseArray:_serverConfiguration.eventBindings]]; - } - } -} -#endif - -// app events can use a server configuration up to 24 hours old to minimize network traffic. -- (void)fetchServerConfiguration:(FBSDKCodeBlock)callback -{ - [FBSDKServerConfigurationManager loadServerConfigurationWithCompletionBlock:^(FBSDKServerConfiguration *serverConfiguration, NSError *error) { - self->_serverConfiguration = serverConfiguration; - - if (self->_serverConfiguration.implicitPurchaseLoggingEnabled && [FBSDKSettings isAutoLogAppEventsEnabled]) { - [FBSDKPaymentObserver startObservingTransactions]; - } else { - [FBSDKPaymentObserver stopObservingTransactions]; - } -#if !TARGET_OS_TV - [FBSDKFeatureManager checkFeature:FBSDKFeatureCodelessEvents completionBlock:^(BOOL enabled) { - if (enabled) { - [self enableCodelessEvents]; - } - }]; - [FBSDKFeatureManager checkFeature:FBSDKFeatureAAM completionBlock:^(BOOL enabled) { - if (enabled) { - // Enable AAM - [FBSDKMetadataIndexer enable]; - } - }]; -#endif - -#if !defined BUCK && !TARGET_OS_TV - [FBSDKFeatureManager checkFeature:FBSDKFeaturePrivacyProtection completionBlock:^(BOOL enabled) { - if (enabled) { - [FBSDKModelManager enable]; - } - }]; -#endif - if (callback) { - callback(); - } - }]; -} - -- (void)instanceLogEvent:(FBSDKAppEventName)eventName - valueToSum:(NSNumber *)valueToSum - parameters:(NSDictionary *)parameters - isImplicitlyLogged:(BOOL)isImplicitlyLogged - accessToken:(FBSDKAccessToken *)accessToken -{ - // Kill events if kill-switch is enabled - if ([FBSDKGateKeeperManager boolForKey:FBSDKGateKeeperAppEventsKillSwitch - defaultValue:NO]) { - [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorAppEvents - formatString:@"FBSDKAppEvents: KillSwitch is enabled and fail to log app event: %@", - eventName]; - return; - } - - if (isImplicitlyLogged && _serverConfiguration && !_serverConfiguration.isImplicitLoggingSupported) { - return; - } - - if (!isImplicitlyLogged && !_explicitEventsLoggedYet) { - _explicitEventsLoggedYet = YES; - } - __block BOOL failed = ![FBSDKAppEventsUtility validateIdentifier:eventName]; - - // Make sure parameter dictionary is well formed. Log and exit if not. - [parameters enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { - if (![key isKindOfClass:[NSString class]]) { - [FBSDKAppEventsUtility logAndNotify:[NSString stringWithFormat:@"The keys in the parameters must be NSStrings, '%@' is not.", key]]; - failed = YES; - } - if (![FBSDKAppEventsUtility validateIdentifier:key]) { - failed = YES; - } - if (![obj isKindOfClass:[NSString class]] && ![obj isKindOfClass:[NSNumber class]]) { - [FBSDKAppEventsUtility logAndNotify:[NSString stringWithFormat:@"The values in the parameters dictionary must be NSStrings or NSNumbers, '%@' is not.", obj]]; - failed = YES; - } - } - ]; - - if (failed) { - return; - } - // Filter out deactivated params - parameters = [FBSDKEventDeactivationManager processParameters:parameters eventName:eventName]; - -#if !defined BUCK && !TARGET_OS_TV - // Filter out address data - parameters = [FBSDKAddressFilterManager processParameters:parameters]; -#endif - // Filter out restrictive keys - parameters = [FBSDKRestrictiveDataFilterManager processParameters:parameters - eventName:eventName]; - - NSMutableDictionary *eventDictionary = [NSMutableDictionary dictionaryWithDictionary:parameters]; - eventDictionary[FBSDKAppEventParameterEventName] = eventName; - if (!eventDictionary[FBSDKAppEventParameterLogTime]) { - eventDictionary[FBSDKAppEventParameterLogTime] = @([FBSDKAppEventsUtility unixTimeNow]); - } - [FBSDKBasicUtility dictionary:eventDictionary setObject:valueToSum forKey:@"_valueToSum"]; - if (isImplicitlyLogged) { - eventDictionary[FBSDKAppEventParameterImplicitlyLogged] = @"1"; - } - - NSString *currentViewControllerName; - UIApplicationState applicationState; - if ([NSThread isMainThread]) { - // We only collect the view controller when on the main thread, as the behavior off - // the main thread is unpredictable. Besides, UI state for off-main-thread computations - // isn't really relevant anyhow. - UIViewController *vc = [UIApplication sharedApplication].keyWindow.rootViewController; - vc = vc.presentedViewController ?: vc; - if (vc) { - currentViewControllerName = [[vc class] description]; - } else { - currentViewControllerName = @"no_ui"; - } - applicationState = [UIApplication sharedApplication].applicationState; - } else { - currentViewControllerName = @"off_thread"; - applicationState = [FBSDKApplicationDelegate applicationState]; - } - eventDictionary[@"_ui"] = currentViewControllerName; - - if (applicationState == UIApplicationStateBackground) { - eventDictionary[FBSDKAppEventParameterInBackground] = @"1"; - } - - NSString *tokenString = [FBSDKAppEventsUtility tokenStringToUseFor:accessToken]; - NSString *appID = [self appID]; - - @synchronized (self) { - if (!_appEventsState) { - _appEventsState = [[FBSDKAppEventsState alloc] initWithToken:tokenString appID:appID]; - } else if (![_appEventsState isCompatibleWithTokenString:tokenString appID:appID]) { - if (self.flushBehavior == FBSDKAppEventsFlushBehaviorExplicitOnly) { - [FBSDKAppEventsStateManager persistAppEventsData:_appEventsState]; - } else { - [self flushForReason:FBSDKAppEventsFlushReasonSessionChange]; - } - _appEventsState = [[FBSDKAppEventsState alloc] initWithToken:tokenString appID:appID]; - } - - [_appEventsState addEvent:eventDictionary isImplicit:isImplicitlyLogged]; - if (!isImplicitlyLogged) { - [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorAppEvents - formatString:@"FBSDKAppEvents: Recording event @ %ld: %@", - [FBSDKAppEventsUtility unixTimeNow], - eventDictionary]; - } - - [self checkPersistedEvents]; - - if (_appEventsState.events.count > NUM_LOG_EVENTS_TO_TRY_TO_FLUSH_AFTER && - self.flushBehavior != FBSDKAppEventsFlushBehaviorExplicitOnly) { - [self flushForReason:FBSDKAppEventsFlushReasonEventThreshold]; - } - } -} - -// this fetches persisted event states. -// for those matching the currently tracked events, add it. -// otherwise, either flush (if not explicitonly behavior) or persist them back. -- (void)checkPersistedEvents -{ - NSArray *existingEventsStates = [FBSDKAppEventsStateManager retrievePersistedAppEventsStates]; - if (existingEventsStates.count == 0) { - return; - } - FBSDKAppEventsState *matchingEventsPreviouslySaved = nil; - // reduce lock time by creating a new FBSDKAppEventsState to collect matching persisted events. - @synchronized(self) { - if (_appEventsState) { - matchingEventsPreviouslySaved = [[FBSDKAppEventsState alloc] initWithToken:_appEventsState.tokenString - appID:_appEventsState.appID]; - } - } - for (FBSDKAppEventsState *saved in existingEventsStates) { - if ([saved isCompatibleWithAppEventsState:matchingEventsPreviouslySaved]) { - [matchingEventsPreviouslySaved addEventsFromAppEventState:saved]; - } else { - if (self.flushBehavior == FBSDKAppEventsFlushBehaviorExplicitOnly) { - [FBSDKAppEventsStateManager persistAppEventsData:saved]; - } else { - dispatch_async(dispatch_get_main_queue(), ^{ - [self flushOnMainQueue:saved forReason:FBSDKAppEventsFlushReasonPersistedEvents]; - }); - } - } - } - if (matchingEventsPreviouslySaved.events.count > 0) { - @synchronized(self) { - if ([_appEventsState isCompatibleWithAppEventsState:matchingEventsPreviouslySaved]) { - [_appEventsState addEventsFromAppEventState:matchingEventsPreviouslySaved]; - } - } - } -} - -- (void)flushOnMainQueue:(FBSDKAppEventsState *)appEventsState - forReason:(FBSDKAppEventsFlushReason)reason -{ - - if (appEventsState.events.count == 0) { - return; - } - - if (appEventsState.appID.length == 0) { - [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors logEntry:@"Missing [FBSDKAppEvents appEventsState.appID] for [FBSDKAppEvents flushOnMainQueue:]"]; - return; - } - - [FBSDKAppEventsUtility ensureOnMainThread:NSStringFromSelector(_cmd) className:NSStringFromClass([self class])]; - - [self fetchServerConfiguration:^(void) { - NSString *receipt_data = appEventsState.extractReceiptData; - NSString *encodedEvents = [appEventsState JSONStringForEvents:self->_serverConfiguration.implicitLoggingEnabled]; - if (!encodedEvents) { - [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorAppEvents - logEntry:@"FBSDKAppEvents: Flushing skipped - no events after removing implicitly logged ones.\n"]; - return; - } - NSMutableDictionary *postParameters = [FBSDKAppEventsUtility - activityParametersDictionaryForEvent:@"CUSTOM_APP_EVENTS" - implicitEventsOnly:appEventsState.areAllEventsImplicit - shouldAccessAdvertisingID:self->_serverConfiguration.advertisingIDEnabled]; - NSInteger length = receipt_data.length; - if (length > 0) { - postParameters[@"receipt_data"] = receipt_data; - } - - postParameters[@"custom_events"] = encodedEvents; - if (appEventsState.numSkipped > 0) { - postParameters[@"num_skipped_events"] = [NSString stringWithFormat:@"%lu", (unsigned long)appEventsState.numSkipped]; - } - if (self.pushNotificationsDeviceTokenString) { - postParameters[FBSDKActivitesParameterPushDeviceToken] = self.pushNotificationsDeviceTokenString; - } - - NSString *loggingEntry = nil; - if ([FBSDKSettings.loggingBehaviors containsObject:FBSDKLoggingBehaviorAppEvents]) { - NSData *prettyJSONData = [NSJSONSerialization dataWithJSONObject:appEventsState.events - options:NSJSONWritingPrettyPrinted - error:NULL]; - NSString *prettyPrintedJsonEvents = [[NSString alloc] initWithData:prettyJSONData - encoding:NSUTF8StringEncoding]; - // Remove this param -- just an encoding of the events which we pretty print later. - NSMutableDictionary *paramsForPrinting = [postParameters mutableCopy]; - [paramsForPrinting removeObjectForKey:@"custom_events_file"]; - - loggingEntry = [NSString stringWithFormat:@"FBSDKAppEvents: Flushed @ %ld, %lu events due to '%@' - %@\nEvents: %@", - [FBSDKAppEventsUtility unixTimeNow], - (unsigned long)appEventsState.events.count, - [FBSDKAppEventsUtility flushReasonToString:reason], - paramsForPrinting, - prettyPrintedJsonEvents]; - } - - FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:[NSString stringWithFormat:@"%@/activities", appEventsState.appID] - parameters:postParameters - tokenString:appEventsState.tokenString - HTTPMethod:FBSDKHTTPMethodPOST - flags:FBSDKGraphRequestFlagDoNotInvalidateTokenOnError | FBSDKGraphRequestFlagDisableErrorRecovery]; - - [request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { - [self handleActivitiesPostCompletion:error - loggingEntry:loggingEntry - appEventsState:(FBSDKAppEventsState *)appEventsState]; - }]; - - }]; -} - -- (void)handleActivitiesPostCompletion:(NSError *)error - loggingEntry:(NSString *)loggingEntry - appEventsState:(FBSDKAppEventsState *)appEventsState -{ - typedef NS_ENUM(NSUInteger, FBSDKAppEventsFlushResult) { - FlushResultSuccess, - FlushResultServerError, - FlushResultNoConnectivity - }; - - [FBSDKAppEventsUtility ensureOnMainThread:NSStringFromSelector(_cmd) className:NSStringFromClass([self class])]; - - FBSDKAppEventsFlushResult flushResult = FlushResultSuccess; - if (error) { - NSInteger errorCode = [error.userInfo[FBSDKGraphRequestErrorHTTPStatusCodeKey] integerValue]; - - // We interpret a 400 coming back from FBRequestConnection as a server error due to improper data being - // sent down. Otherwise we assume no connectivity, or another condition where we could treat it as no connectivity. - // Adding 404 as having wrong/missing appID results in 404 and that is not a connectivity issue - flushResult = (errorCode == 400 || errorCode == 404) ? FlushResultServerError : FlushResultNoConnectivity; - } - - if (flushResult == FlushResultServerError) { - // Only log events that developer can do something with (i.e., if parameters are incorrect). - // as opposed to cases where the token is bad. - if ([error.userInfo[FBSDKGraphRequestErrorKey] unsignedIntegerValue] == FBSDKGraphRequestErrorOther) { - NSString *message = [NSString stringWithFormat:@"Failed to send AppEvents: %@", error]; - [FBSDKAppEventsUtility logAndNotify:message allowLogAsDeveloperError:!appEventsState.areAllEventsImplicit]; - } - } else if (flushResult == FlushResultNoConnectivity) { - @synchronized(self) { - if ([appEventsState isCompatibleWithAppEventsState:_appEventsState]) { - [_appEventsState addEventsFromAppEventState:appEventsState]; - } else { - // flush failed due to connectivity. Persist to be tried again later. - [FBSDKAppEventsStateManager persistAppEventsData:appEventsState]; - } - } - } - - NSString *resultString = @""; - switch (flushResult) { - case FlushResultSuccess: - resultString = @"Success"; - break; - - case FlushResultNoConnectivity: - resultString = @"No Connectivity"; - break; - - case FlushResultServerError: - resultString = [NSString stringWithFormat:@"Server Error - %@", error.description]; - break; - } - - [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorAppEvents - formatString:@"%@\nFlush Result : %@", loggingEntry, resultString]; -} - -- (void)flushTimerFired:(id)arg -{ - [FBSDKAppEventsUtility ensureOnMainThread:NSStringFromSelector(_cmd) className:NSStringFromClass([self class])]; - if (self.flushBehavior != FBSDKAppEventsFlushBehaviorExplicitOnly && !self.disableTimer) { - [self flushForReason:FBSDKAppEventsFlushReasonTimer]; - } -} - -- (void)applicationDidBecomeActive -{ - [FBSDKAppEventsUtility ensureOnMainThread:NSStringFromSelector(_cmd) className:NSStringFromClass([self class])]; - - [self checkPersistedEvents]; - - // Restore time spent data, indicating that we're not being called from "activateApp". - [FBSDKTimeSpentData restore:NO]; -} - -- (void)applicationMovingFromActiveStateOrTerminating -{ - // When moving from active state, we don't have time to wait for the result of a flush, so - // just persist events to storage, and we'll process them at the next activation. - FBSDKAppEventsState *copy = nil; - @synchronized (self) { - copy = [_appEventsState copy]; - _appEventsState = nil; - } - if (copy) { - [FBSDKAppEventsStateManager persistAppEventsData:copy]; - } - [FBSDKTimeSpentData suspend]; -} - -#pragma mark - Custom Audience - -+ (FBSDKGraphRequest *)requestForCustomAudienceThirdPartyIDWithAccessToken:(FBSDKAccessToken *)accessToken -{ - accessToken = accessToken ?: [FBSDKAccessToken currentAccessToken]; - // Rules for how we use the attribution ID / advertiser ID for an 'custom_audience_third_party_id' Graph API request - // 1) if the OS tells us that the user has Limited Ad Tracking, then just don't send, and return a nil in the token. - // 2) if the app has set 'limitEventAndDataUsage', this effectively implies that app-initiated ad targeting shouldn't happen, - // so use that data here to return nil as well. - // 3) if we have a user session token, then no need to send attribution ID / advertiser ID back as the udid parameter - // 4) otherwise, send back the udid parameter. - - if ([FBSDKAppEventsUtility advertisingTrackingStatus] == FBSDKAdvertisingTrackingDisallowed || FBSDKSettings.shouldLimitEventAndDataUsage) { - return nil; - } - - NSString *tokenString = [FBSDKAppEventsUtility tokenStringToUseFor:accessToken]; - NSString *udid = nil; - if (!accessToken) { - // We don't have a logged in user, so we need some form of udid representation. Prefer advertiser ID if - // available, and back off to attribution ID if not. Note that this function only makes sense to be - // called in the context of advertising. - udid = [FBSDKAppEventsUtility advertiserID]; - if (!udid) { - udid = [FBSDKAppEventsUtility attributionID]; - } - - if (!udid) { - // No udid, and no user token. No point in making the request. - return nil; - } - } - - NSDictionary *parameters = nil; - if (udid) { - parameters = @{ @"udid" : udid }; - } - - NSString *graphPath = [NSString stringWithFormat:@"%@/custom_audience_third_party_id", [[self singleton] appID]]; - FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:graphPath - parameters:parameters - tokenString:tokenString - HTTPMethod:nil - flags:FBSDKGraphRequestFlagDoNotInvalidateTokenOnError | FBSDKGraphRequestFlagDisableErrorRecovery]; - - return request; -} - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/AAM/FBSDKMetadataIndexer.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/AAM/FBSDKMetadataIndexer.h deleted file mode 100644 index 3b97764e55..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/AAM/FBSDKMetadataIndexer.h +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface FBSDKMetadataIndexer : NSObject - -+ (void)enable; - -@end - -NS_ASSUME_NONNULL_END - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/AAM/FBSDKMetadataIndexer.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/AAM/FBSDKMetadataIndexer.m deleted file mode 100644 index 98d19f7165..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/AAM/FBSDKMetadataIndexer.m +++ /dev/null @@ -1,329 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKMetadataIndexer.h" - -#import -#import -#import - -#import - -#import "FBSDKCoreKit+Internal.h" - -static const int FBSDKMetadataIndexerMaxTextLength = 100; -static const int FBSDKMetadataIndexerMaxIndicatorLength = 100; -static const int FBSDKMetadataIndexerMaxValue = 5; - -static NSString * const FIELD_K = @"k"; -static NSString * const FIELD_V = @"v"; -static NSString * const FIELD_K_DELIMITER = @","; - -FBSDKAppEventUserDataType FBSDKAppEventRule1 = @"r1"; -FBSDKAppEventUserDataType FBSDKAppEventRule2 = @"r2"; - -static NSArray *FBSDKMetadataIndexerKeys; -static NSMutableDictionary *> *_rules; -static NSMutableDictionary *> *_store; -static dispatch_queue_t serialQueue; - -@implementation FBSDKMetadataIndexer - -+ (void)initialize -{ - FBSDKMetadataIndexerKeys = @[FBSDKAppEventRule1, FBSDKAppEventRule2]; - serialQueue = dispatch_queue_create("com.facebook.appevents.MetadataIndexer", DISPATCH_QUEUE_SERIAL); -} - -+ (void)enable -{ - if (FBSDKAdvertisingTrackingAllowed != [FBSDKAppEventsUtility advertisingTrackingStatus]) { - return; - } - [FBSDKServerConfigurationManager loadServerConfigurationWithCompletionBlock:^(FBSDKServerConfiguration *serverConfiguration, NSError *error) { - if (error) { - return; - } - [FBSDKMetadataIndexer setupWithRules:serverConfiguration.AAMRules]; - }]; -} - -+ (void)setupWithRules:(NSDictionary * _Nullable)rules -{ - if (0 == rules.count) { - return; - } - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - [FBSDKMetadataIndexer constructRules:rules]; - [FBSDKMetadataIndexer initStore]; - - BOOL isEnabled = NO; - for (NSString *key in FBSDKMetadataIndexerKeys) { - BOOL isRuleEnabled = (nil != [_rules objectForKey:key]); - if (isRuleEnabled) { - isEnabled = YES; - } - if (!isRuleEnabled) { - [_store removeObjectForKey:key]; - [FBSDKUserDataStore setHashData:nil forType:key]; - } - } - - if (isEnabled) { - [FBSDKMetadataIndexer setupMetadataIndexing]; - } - }); -} - -+ (void)initStore -{ - _store = [[NSMutableDictionary alloc] init]; - for (NSString *key in FBSDKMetadataIndexerKeys) { - NSString *data = [FBSDKUserDataStore getHashedDataForType:key]; - if (data.length > 0) { - _store[key] = [NSMutableArray arrayWithArray:[data componentsSeparatedByString:FIELD_K_DELIMITER]]; - } - } - - for (NSString *key in FBSDKMetadataIndexerKeys) { - if (!_store[key]) { - _store[key] = [[NSMutableArray alloc] init]; - } - } -} - -+ (void)constructRules:(NSDictionary * _Nullable)rules -{ - if (!_rules) { - _rules = [[NSMutableDictionary alloc] init]; - } - - for (NSString *key in rules) { - NSDictionary *value = [FBSDKTypeUtility dictionaryValue:rules[key]]; - if (value && value[FIELD_K].length > 0 && value[FIELD_V].length > 0) { - _rules[key] = value; - } - } -} - -+ (void)setupMetadataIndexing -{ - void (^block)(UIView *) = ^(UIView *view) { - // Indexing when the view is removed from window and conforms to UITextInput, and skip UIFieldEditor, which is an internval view of UITextField - if (![view window] && ![NSStringFromClass([view class]) isEqualToString:@"UIFieldEditor"] && [view conformsToProtocol:@protocol(UITextInput)]) { - NSString *text = [FBSDKViewHierarchy getText:view]; - NSString *placeholder = [FBSDKViewHierarchy getHint:view]; - BOOL secureTextEntry = [self checkSecureTextEntry:view]; - NSArray *labels = [self getLabelsOfView:view]; - UIKeyboardType keyboardType = [self getKeyboardType:view]; - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) { - [self getMetadataWithText:[self normalizedValue:text] - placeholder:[self normalizeField:placeholder] - labels:labels - secureTextEntry:secureTextEntry - inputType:keyboardType]; - }); - } - }; - - [FBSDKSwizzler swizzleSelector:@selector(didMoveToWindow) onClass:[UIView class] withBlock:block named:@"metadataIndexingUIView"]; - - // iOS 12: UITextField implements didMoveToWindow without calling parent implementation - if (@available(iOS 12, *)) { - [FBSDKSwizzler swizzleSelector:@selector(didMoveToWindow) onClass:[UITextField class] withBlock:block named:@"metadataIndexingUITextField"]; - } else { - [FBSDKSwizzler swizzleSelector:@selector(didMoveToWindow) onClass:[UIControl class] withBlock:block named:@"metadataIndexingUIControl"]; - } -} - -+ (NSArray *)getSiblingViewsOfView:(UIView *)view -{ - NSObject *parent = [FBSDKViewHierarchy getParent:view]; - if (parent) { - NSArray *views = [FBSDKViewHierarchy getChildren:parent]; - if (views) { - NSMutableArray *siblings = [NSMutableArray arrayWithArray:views]; - [siblings removeObject:view]; - return [siblings copy]; - } - } - return nil; -} - -+ (NSArray *)getLabelsOfView:(UIView *)view -{ - NSMutableArray *labels = [[NSMutableArray alloc] init]; - - NSString *placeholder = [self normalizeField:[FBSDKViewHierarchy getHint:view]]; - if (placeholder) { - [labels addObject:placeholder]; - } - - NSArray *siblingViews = [self getSiblingViewsOfView:view]; - for (id sibling in siblingViews) { - if ([sibling isKindOfClass:[UILabel class]]) { - NSString *text = [self normalizeField:[FBSDKViewHierarchy getText:sibling]]; - if (text) { - [labels addObject:text]; - } - } - } - return [labels copy]; -} - -+ (BOOL)checkSecureTextEntry:(UIView *)view -{ - if ([view isKindOfClass:[UITextField class]]) { - return ((UITextField *)view).secureTextEntry; - } - if ([view isKindOfClass:[UITextView class]]) { - return ((UITextView *)view).secureTextEntry; - } - - return NO; -} - -+ (UIKeyboardType)getKeyboardType:(UIView *)view -{ - if ([view isKindOfClass:[UITextField class]]) { - return ((UITextField *)view).keyboardType; - } - if ([view isKindOfClass:[UITextView class]]) { - return ((UITextView *)view).keyboardType; - } - - return UIKeyboardTypeDefault; -} - -+ (void)getMetadataWithText:(NSString *)text - placeholder:(NSString *)placeholder - labels:(NSArray *)labels - secureTextEntry:(BOOL)secureTextEntry - inputType:(UIKeyboardType)inputType -{ - if (secureTextEntry || - [placeholder containsString:@"password"] || - text.length == 0 || - text.length > FBSDKMetadataIndexerMaxTextLength || - placeholder.length >= FBSDKMetadataIndexerMaxIndicatorLength) { - return; - } - - for (NSString *key in _rules) { - NSDictionary *rule = _rules[key]; - BOOL isRuleKMatched = [self checkMetadataHint:placeholder matchRuleK:rule[FIELD_K]] - || [self checkMetadataLabels:labels matchRuleK:rule[FIELD_K]]; - BOOL isRuleVMatched = [self checkMetadataText:text matchRuleV:rule[FIELD_V]]; - if (isRuleKMatched && isRuleVMatched) { - [FBSDKMetadataIndexer checkAndAppendData:text forKey:key]; - } - } -} - -#pragma mark - Helper Methods - -+ (void)checkAndAppendData:(NSString *)data - forKey:(NSString *)key -{ - NSString *hashData = [FBSDKUtility SHA256Hash:data]; - dispatch_async(serialQueue, ^{ - if (hashData.length == 0 || [_store[key] containsObject:hashData]) { - return; - } - - while (_store[key].count >= FBSDKMetadataIndexerMaxValue) { - [_store[key] removeObjectAtIndex:0]; - } - [_store[key] addObject:hashData]; - [FBSDKUserDataStore setHashData:[_store[key] componentsJoinedByString:@","] - forType:key]; - }); -} - -+ (BOOL)checkMetadataLabels:(NSArray *)labels - matchRuleK:(NSString *)ruleK -{ - for (NSString *label in labels) { - if ([self checkMetadataHint:label matchRuleK:ruleK]) { - return YES; - } - } - return NO; -} - -+ (BOOL)checkMetadataHint:(NSString *)hint - matchRuleK:(NSString *)ruleK -{ - if (hint.length > 0 && ruleK) { - NSArray *items = [ruleK componentsSeparatedByString:@","]; - for (NSString *item in items) { - if ([hint containsString:item]) { - return YES; - } - } - } - return NO; -} - -+ (BOOL)checkMetadataText:(NSString *)text - matchRuleV:(NSString *)ruleV -{ - if (text.length > 0 && ruleV) { - NSRegularExpression *regex = [[NSRegularExpression alloc] initWithPattern:ruleV - options:NSRegularExpressionCaseInsensitive - error:nil]; - NSUInteger matches = [regex numberOfMatchesInString:text options:0 range:NSMakeRange(0, text.length)]; - - NSString *prunedText = [[text componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"+- ()."]] componentsJoinedByString:@""]; - NSUInteger prunedMatches = [regex numberOfMatchesInString:prunedText options:0 range:NSMakeRange(0, prunedText.length)]; - - return matches > 0 || prunedMatches > 0; - } - return NO; -} - -+ (NSString *)normalizeField:(NSString *)field -{ - if (!field) { - return nil; - } - NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[_-]|\\s" - options:NSRegularExpressionCaseInsensitive - error:nil]; - return [regex stringByReplacingMatchesInString:field - options:0 - range:NSMakeRange(0, field.length) - withTemplate:@""].lowercaseString; -} - -+ (NSString *)normalizedValue:(NSString *)value -{ - if (!value) { - return nil; - } - return [value stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]].lowercaseString; -} - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessIndexer.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessIndexer.h deleted file mode 100644 index 68d1d4ed13..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessIndexer.h +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import - -NS_ASSUME_NONNULL_BEGIN - -typedef void(^FBSDKCodelessSettingLoadBlock)(BOOL isCodelessSetupEnabled, NSError *_Nullable error); - -NS_SWIFT_NAME(CodelessIndexer) -@interface FBSDKCodelessIndexer : NSObject - -@property (class, nonatomic, copy, readonly) NSString *extInfo; - -+ (void)enable; - -@end - -NS_ASSUME_NONNULL_END - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessIndexer.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessIndexer.m deleted file mode 100644 index 3e1f395eee..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessIndexer.m +++ /dev/null @@ -1,414 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKCodelessIndexer.h" - -#import -#import -#import - -#import - -#import "FBSDKCoreKit+Internal.h" -#import "FBSDKGraphRequest.h" -#import "FBSDKSettings.h" - -@implementation FBSDKCodelessIndexer - -static BOOL _isCodelessIndexing; -static BOOL _isCheckingSession; -static BOOL _isCodelessIndexingEnabled; -static BOOL _isGestureSet; - -static NSMutableDictionary *_codelessSetting; -static const NSTimeInterval kTimeout = 4.0; - -static NSString *_deviceSessionID; -static NSTimer *_appIndexingTimer; -static NSString *_lastTreeHash; - -+ (void)enable -{ - if (_isGestureSet) { - return; - } -#if TARGET_OS_SIMULATOR - [self setupGesture]; -#else - [self loadCodelessSettingWithCompletionBlock:^(BOOL isCodelessSetupEnabled, NSError *error) { - if (isCodelessSetupEnabled) { - [self setupGesture]; - } - }]; -#endif -} - -// DO NOT call this function, it is only called once in the load function -+ (void)loadCodelessSettingWithCompletionBlock:(FBSDKCodelessSettingLoadBlock)completionBlock -{ - NSString *appID = [FBSDKSettings appID]; - if (appID == nil) { - return; - } - - [FBSDKServerConfigurationManager loadServerConfigurationWithCompletionBlock:^(FBSDKServerConfiguration *serverConfiguration, NSError *serverConfigurationLoadingError) { - if (!serverConfiguration.codelessEventsEnabled) { - return; - } - - // load the defaults - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - NSString *defaultKey = [NSString stringWithFormat:CODELESS_SETTING_KEY, appID]; - NSData *data = [defaults objectForKey:defaultKey]; - if ([data isKindOfClass:[NSData class]]) { - NSMutableDictionary *codelessSetting = [NSKeyedUnarchiver unarchiveObjectWithData:data]; - if (codelessSetting) { - _codelessSetting = codelessSetting; - } - } - if (!_codelessSetting) { - _codelessSetting = [[NSMutableDictionary alloc] init]; - } - - if (![self _codelessSetupTimestampIsValid:[_codelessSetting objectForKey:CODELESS_SETTING_TIMESTAMP_KEY]]) { - FBSDKGraphRequest *request = [self requestToLoadCodelessSetup:appID]; - if (request == nil) { - return; - } - FBSDKGraphRequestConnection *requestConnection = [[FBSDKGraphRequestConnection alloc] init]; - requestConnection.timeout = kTimeout; - [requestConnection addRequest:request completionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *codelessLoadingError) { - if (codelessLoadingError) { - return; - } - - NSDictionary *resultDictionary = [FBSDKTypeUtility dictionaryValue:result]; - if (resultDictionary) { - BOOL isCodelessSetupEnabled = [FBSDKTypeUtility boolValue:resultDictionary[CODELESS_SETUP_ENABLED_FIELD]]; - [_codelessSetting setObject:@(isCodelessSetupEnabled) forKey:CODELESS_SETUP_ENABLED_KEY]; - [_codelessSetting setObject:[NSDate date] forKey:CODELESS_SETTING_TIMESTAMP_KEY]; - // update the cached copy in user defaults - [defaults setObject:[NSKeyedArchiver archivedDataWithRootObject:_codelessSetting] forKey:defaultKey]; - completionBlock(isCodelessSetupEnabled, codelessLoadingError); - } - }]; - [requestConnection start]; - } else { - completionBlock([FBSDKTypeUtility boolValue:[_codelessSetting objectForKey:CODELESS_SETUP_ENABLED_KEY]], nil); - } - }]; -} - -+ (FBSDKGraphRequest *)requestToLoadCodelessSetup:(NSString *)appID -{ - NSString *advertiserID = [FBSDKAppEventsUtility advertiserID]; - if (!advertiserID) { - return nil; - } - - NSDictionary *parameters = @{ - @"fields": CODELESS_SETUP_ENABLED_FIELD, - @"advertiser_id": advertiserID - }; - - FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:appID - parameters:parameters - tokenString:nil - HTTPMethod:nil - flags:FBSDKGraphRequestFlagSkipClientToken | FBSDKGraphRequestFlagDisableErrorRecovery]; - return request; -} - -+ (BOOL)_codelessSetupTimestampIsValid:(NSDate *)timestamp -{ - return (timestamp != nil && [[NSDate date] timeIntervalSinceDate:timestamp] < CODELESS_SETTING_CACHE_TIMEOUT); -} - -+ (void)setupGesture -{ - _isGestureSet = YES; - [UIApplication sharedApplication].applicationSupportsShakeToEdit = YES; - Class class = [UIApplication class]; - - [FBSDKSwizzler swizzleSelector:@selector(motionBegan:withEvent:) onClass:class withBlock:^{ - if ([FBSDKServerConfigurationManager cachedServerConfiguration].isCodelessEventsEnabled) { - [self checkCodelessIndexingSession]; - } - } named:@"motionBegan"]; -} - -+ (void)checkCodelessIndexingSession -{ - if (_isCheckingSession) return; - - _isCheckingSession = YES; - NSDictionary *parameters = @{ - CODELESS_INDEXING_SESSION_ID_KEY: [self currentSessionDeviceID], - CODELESS_INDEXING_EXT_INFO_KEY: [self extInfo] - }; - FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] - initWithGraphPath:[NSString stringWithFormat:@"%@/%@", - [FBSDKSettings appID], CODELESS_INDEXING_SESSION_ENDPOINT] - parameters:parameters - HTTPMethod:FBSDKHTTPMethodPOST]; - [request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { - _isCheckingSession = NO; - if ([result isKindOfClass:[NSDictionary class]]) { - _isCodelessIndexingEnabled = [((NSDictionary *)result)[CODELESS_INDEXING_STATUS_KEY] boolValue]; - if (_isCodelessIndexingEnabled) { - _lastTreeHash = nil; - if (!_appIndexingTimer) { - _appIndexingTimer = [NSTimer timerWithTimeInterval:CODELESS_INDEXING_UPLOAD_INTERVAL_IN_SECONDS - target:self - selector:@selector(startIndexing) - userInfo:nil - repeats:YES]; - - [[NSRunLoop mainRunLoop] addTimer:_appIndexingTimer forMode:NSDefaultRunLoopMode]; - } - } else { - _deviceSessionID = nil; - } - } - }]; -} - -+ (NSString *)currentSessionDeviceID -{ - if (!_deviceSessionID) { - _deviceSessionID = [NSUUID UUID].UUIDString; - } - return _deviceSessionID; -} - -+ (NSString *)extInfo -{ - struct utsname systemInfo; - uname(&systemInfo); - NSString *machine = @(systemInfo.machine); - NSString *advertiserID = [FBSDKAppEventsUtility advertiserID] ?: @""; - machine = machine ?: @""; - NSString *debugStatus = [FBSDKAppEventsUtility isDebugBuild] ? @"1" : @"0"; -#if TARGET_IPHONE_SIMULATOR - NSString *isSimulator = @"1"; -#else - NSString *isSimulator = @"0"; -#endif - NSLocale *locale = [NSLocale currentLocale]; - NSString *languageCode = [locale objectForKey:NSLocaleLanguageCode]; - NSString *countryCode = [locale objectForKey:NSLocaleCountryCode]; - NSString *localeString = locale.localeIdentifier; - if (languageCode && countryCode) { - localeString = [NSString stringWithFormat:@"%@_%@", languageCode, countryCode]; - } - - NSString *extinfo = [FBSDKBasicUtility JSONStringForObject:@[machine, - advertiserID, - debugStatus, - isSimulator, - localeString] - error:NULL - invalidObjectHandler:NULL]; - - return extinfo ?: @""; -} - -+ (void)startIndexing { - if (!_isCodelessIndexingEnabled) { - return; - } - - if (UIApplicationStateActive != [UIApplication sharedApplication].applicationState) { - return; - } - - // If userAgentSuffix begins with Unity, trigger unity code to upload view hierarchy - NSString *userAgentSuffix = [FBSDKSettings userAgentSuffix]; - if (userAgentSuffix != nil && [userAgentSuffix hasPrefix:@"Unity"]) { - Class FBUnityUtility = objc_lookUpClass("FBUnityUtility"); - SEL selector = NSSelectorFromString(@"triggerUploadViewHierarchy"); - if (FBUnityUtility && selector && [FBUnityUtility respondsToSelector:selector]) { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Warc-performSelector-leaks" - [FBUnityUtility performSelector:selector]; -#pragma clang diagnostic pop - } - } else { - [self uploadIndexing]; - } -} - -+ (void)uploadIndexing -{ - if (_isCodelessIndexing) { - return; - } - - NSString *tree = [FBSDKCodelessIndexer currentViewTree]; - - [self uploadIndexing:tree]; -} - -+ (void)uploadIndexing:(NSString *)tree -{ - if (_isCodelessIndexing) { - return; - } - - if (!tree) { - return; - } - - NSString *currentTreeHash = [FBSDKUtility SHA256Hash:tree]; - if (_lastTreeHash && [_lastTreeHash isEqualToString:currentTreeHash]) { - return; - } - - _lastTreeHash = currentTreeHash; - - NSBundle *mainBundle = [NSBundle mainBundle]; - NSString *version = [mainBundle objectForInfoDictionaryKey:@"CFBundleShortVersionString"]; - - FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] - initWithGraphPath:[NSString stringWithFormat:@"%@/%@", - [FBSDKSettings appID], CODELESS_INDEXING_ENDPOINT] - parameters:@{ - CODELESS_INDEXING_TREE_KEY: tree, - CODELESS_INDEXING_APP_VERSION_KEY: version ?: @"", - CODELESS_INDEXING_PLATFORM_KEY: @"iOS", - CODELESS_INDEXING_SESSION_ID_KEY: [self currentSessionDeviceID] - } - HTTPMethod:FBSDKHTTPMethodPOST]; - _isCodelessIndexing = YES; - [request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { - _isCodelessIndexing = NO; - if ([result isKindOfClass:[NSDictionary class]]) { - _isCodelessIndexingEnabled = [result[CODELESS_INDEXING_STATUS_KEY] boolValue]; - if (!_isCodelessIndexingEnabled) { - _deviceSessionID = nil; - } - } - }]; -} - -+ (NSString *)currentViewTree -{ - NSMutableArray *trees = [NSMutableArray array]; - - NSArray *windows = [UIApplication sharedApplication].windows; - for (UIWindow *window in windows) { - NSDictionary *tree = [FBSDKCodelessIndexer recursiveCaptureTree:window]; - if (tree) { - if (window.isKeyWindow) { - [trees insertObject:tree atIndex:0]; - } else { - [trees addObject:tree]; - } - } - } - - if (0 == trees.count) { - return nil; - } - - NSArray *viewTrees = [trees reverseObjectEnumerator].allObjects; - - NSData *data = UIImageJPEGRepresentation([FBSDKCodelessIndexer screenshot], 0.5); - NSString *screenshot = [data base64EncodedStringWithOptions:0]; - - NSMutableDictionary *treeInfo = [NSMutableDictionary dictionary]; - - treeInfo[@"view"] = viewTrees; - treeInfo[@"screenshot"] = screenshot ?: @""; - - NSString *tree = nil; - data = [NSJSONSerialization dataWithJSONObject:treeInfo options:0 error:nil]; - if (data) { - tree = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; - } - - return tree; -} - -+ (NSDictionary *)recursiveCaptureTree:(NSObject *)obj -{ - if (!obj) { - return nil; - } - - NSMutableDictionary *result = [FBSDKViewHierarchy getDetailAttributesOf:obj]; - - NSArray *children = [FBSDKViewHierarchy getChildren:obj]; - NSMutableArray *childrenTrees = [NSMutableArray array]; - for (NSObject *child in children) { - NSDictionary *objTree = [self recursiveCaptureTree:child]; - [childrenTrees addObject:objTree]; - } - - if (childrenTrees.count > 0) { - [result setValue:[childrenTrees copy] forKey:VIEW_HIERARCHY_CHILD_VIEWS_KEY]; - } - - return [result copy]; -} - -+ (UIImage *)screenshot { - UIWindow *window = [UIApplication sharedApplication].delegate.window; - - UIGraphicsBeginImageContext(window.bounds.size); - [window drawViewHierarchyInRect:window.bounds afterScreenUpdates:YES]; - UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - - return image; -} - -+ (NSDictionary *)dimensionOf:(NSObject *)obj -{ - UIView *view = nil; - - if ([obj isKindOfClass:[UIView class]]) { - view = (UIView *)obj; - } else if ([obj isKindOfClass:[UIViewController class]]) { - view = ((UIViewController *)obj).view; - } - - CGRect frame = view.frame; - CGPoint offset = CGPointZero; - - if ([view isKindOfClass:[UIScrollView class]]) - offset = ((UIScrollView *)view).contentOffset; - - return @{ - CODELESS_VIEW_TREE_TOP_KEY: @((int)frame.origin.y), - CODELESS_VIEW_TREE_LEFT_KEY: @((int)frame.origin.x), - CODELESS_VIEW_TREE_WIDTH_KEY: @((int)frame.size.width), - CODELESS_VIEW_TREE_HEIGHT_KEY: @((int)frame.size.height), - CODELESS_VIEW_TREE_OFFSET_X_KEY: @((int)offset.x), - CODELESS_VIEW_TREE_OFFSET_Y_KEY: @((int)offset.y), - CODELESS_VIEW_TREE_VISIBILITY_KEY: view.isHidden ? @4 : @0 - }; -} - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessParameterComponent.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessParameterComponent.h deleted file mode 100644 index e9c1f6ab7c..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessParameterComponent.h +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import - -NS_SWIFT_NAME(CodelessParameterComponent) -@interface FBSDKCodelessParameterComponent : NSObject - -@property (nonatomic, copy, readonly) NSString *name; -@property (nonatomic, copy, readonly) NSString *value; -@property (nonatomic, readonly) NSArray *path; -@property (nonatomic, copy, readonly) NSString *pathType; - -- (instancetype)initWithJSON:(NSDictionary *)dict; - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessParameterComponent.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessParameterComponent.m deleted file mode 100644 index c5dc127074..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessParameterComponent.m +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKCodelessParameterComponent.h" - -#import "FBSDKCodelessPathComponent.h" -#import "FBSDKViewHierarchyMacros.h" - -@implementation FBSDKCodelessParameterComponent - -- (instancetype)initWithJSON:(NSDictionary *)dict { - if (self = [super init]) { - _name = [dict[CODELESS_MAPPING_PARAMETER_NAME_KEY] copy]; - _value = [dict[CODELESS_MAPPING_PARAMETER_VALUE_KEY] copy]; - _pathType = [dict[CODELESS_MAPPING_PATH_TYPE_KEY] copy]; - - NSArray *ary = dict[CODELESS_MAPPING_PATH_KEY]; - NSMutableArray *mut = [NSMutableArray array]; - for (NSDictionary *info in ary) { - FBSDKCodelessPathComponent *component = [[FBSDKCodelessPathComponent alloc] initWithJSON:info]; - [mut addObject:component]; - } - _path = [mut copy]; - } - - return self; -} - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessPathComponent.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessPathComponent.h deleted file mode 100644 index 6e62250b48..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessPathComponent.h +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import - -typedef NS_OPTIONS(int, FBSDKCodelessMatchBitmaskField) -{ - FBSDKCodelessMatchBitmaskFieldID = 1, - FBSDKCodelessMatchBitmaskFieldText = 1 << 1, - FBSDKCodelessMatchBitmaskFieldTag = 1 << 2, - FBSDKCodelessMatchBitmaskFieldDescription = 1 << 3, - FBSDKCodelessMatchBitmaskFieldHint = 1 << 4 -}; - -NS_SWIFT_NAME(CodelessPathComponent) -@interface FBSDKCodelessPathComponent : NSObject - -@property (nonatomic, copy, readonly) NSString *className; -@property (nonatomic, copy, readonly) NSString *text; -@property (nonatomic, copy, readonly) NSString *hint; -@property (nonatomic, copy, readonly) NSString *desc; // description -@property (nonatomic, readonly) int index; -@property (nonatomic, readonly) int tag; -@property (nonatomic, readonly) int section; -@property (nonatomic, readonly) int row; -@property (nonatomic, readonly) int matchBitmask; - -- (instancetype)initWithJSON:(NSDictionary*)dict; - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessPathComponent.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessPathComponent.m deleted file mode 100644 index 1fadc32c6b..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessPathComponent.m +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKCodelessPathComponent.h" - -#import "FBSDKViewHierarchyMacros.h" - -@implementation FBSDKCodelessPathComponent - -- (instancetype)initWithJSON:(NSDictionary *)dict { - if (self = [super init]) { - _className = [dict[CODELESS_MAPPING_CLASS_NAME_KEY] copy]; - _text = [dict[CODELESS_MAPPING_TEXT_KEY] copy]; - _hint = [dict[CODELESS_MAPPING_HINT_KEY] copy]; - _desc = [dict[CODELESS_MAPPING_DESC_KEY] copy]; - - - if (dict[CODELESS_MAPPING_INDEX_KEY]) { - _index = [dict[CODELESS_MAPPING_INDEX_KEY] intValue]; - } else { - _index = -1; - } - - if (dict[CODELESS_MAPPING_SECTION_KEY]) { - _section = [dict[CODELESS_MAPPING_SECTION_KEY] intValue]; - } else { - _section = -1; - } - - if (dict[CODELESS_MAPPING_ROW_KEY]) { - _row = [dict[CODELESS_MAPPING_ROW_KEY] intValue]; - } else { - _row = -1; - } - - _tag = [dict[CODELESS_MAPPING_TAG_KEY] intValue]; - _matchBitmask = [dict[CODELESS_MAPPING_MATCH_BITMASK_KEY] intValue]; - } - - return self; -} - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKEventBinding.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKEventBinding.h deleted file mode 100644 index 0214b6fd27..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKEventBinding.h +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import - -NS_SWIFT_NAME(EventBinding) -@interface FBSDKEventBinding : NSObject - -@property (nonatomic, copy, readonly) NSString *eventName; -@property (nonatomic, copy, readonly) NSString *eventType; -@property (nonatomic, copy, readonly) NSString *appVersion; -@property (nonatomic, readonly) NSArray *path; -@property (nonatomic, copy, readonly) NSString *pathType; -@property (nonatomic, readonly) NSArray *parameters; - -+ (BOOL)isViewMatchPath:(UIView *)view path:(NSArray *)path; -+ (BOOL)isPath:(NSArray *)path matchViewPath:(NSArray *)viewPath; -- (FBSDKEventBinding *)initWithJSON:(NSDictionary *)dict; -- (void)trackEvent:(id)sender; - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKEventBinding.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKEventBinding.m deleted file mode 100644 index bc0ca520b4..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKEventBinding.m +++ /dev/null @@ -1,282 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKEventBinding.h" - -#import "FBSDKAppEvents.h" -#import "FBSDKAppEventsUtility.h" -#import "FBSDKCodelessParameterComponent.h" -#import "FBSDKCodelessPathComponent.h" -#import "FBSDKSwizzler.h" -#import "FBSDKUtility.h" -#import "FBSDKViewHierarchy.h" -#import "FBSDKViewHierarchyMacros.h" - -#define CODELESS_PATH_TYPE_ABSOLUTE @"absolute" -#define CODELESS_PATH_TYPE_RELATIVE @"relative" -#define CODELESS_CODELESS_EVENT_KEY @"_is_fb_codeless" -#define PARAMETER_NAME_PRICE @"_valueToSum" - -@implementation FBSDKEventBinding - -- (FBSDKEventBinding *)initWithJSON:(NSDictionary *)dict -{ - if ((self = [super init])) { - _eventName = [dict[CODELESS_MAPPING_EVENT_NAME_KEY] copy]; - _eventType = [dict[CODELESS_MAPPING_EVENT_TYPE_KEY] copy]; - _appVersion = [dict[CODELESS_MAPPING_APP_VERSION_KEY] copy]; - _pathType = [dict[CODELESS_MAPPING_PATH_TYPE_KEY] copy]; - - NSArray *pathComponents = dict[CODELESS_MAPPING_PATH_KEY]; - NSMutableArray *mut = [NSMutableArray array]; - for (NSDictionary *info in pathComponents) { - FBSDKCodelessPathComponent *component = [[FBSDKCodelessPathComponent alloc] initWithJSON:info]; - [mut addObject:component]; - } - _path = [mut copy]; - - NSArray *parameters = dict[CODELESS_MAPPING_PARAMETERS_KEY]; - mut = [NSMutableArray array]; - for (NSDictionary *info in parameters) { - FBSDKCodelessParameterComponent *component = [[FBSDKCodelessParameterComponent alloc] initWithJSON:info]; - [mut addObject:component]; - } - _parameters = [mut copy]; - } - return self; -} - -- (void)trackEvent:(id)sender -{ - UIView *sourceView = [sender isKindOfClass:[UIView class]] ? (UIView *)sender : nil; - NSMutableDictionary *params = [NSMutableDictionary dictionary]; - params[CODELESS_CODELESS_EVENT_KEY] = @"1"; - for (FBSDKCodelessParameterComponent *component in self.parameters) { - NSString *text = component.value; - if (!text || text.length == 0) { - text = [FBSDKEventBinding findParameterOfPath:component.path - pathType:component.pathType - sourceView:sourceView]; - } - if (text) { - if ([component.name isEqualToString:PARAMETER_NAME_PRICE]) { - NSNumber *value = [FBSDKAppEventsUtility getNumberValue:text]; - params[component.name] = value; - } else { - params[component.name] = text; - } - } - } - - [FBSDKAppEvents logEvent:_eventName parameters:[params copy]]; -} - -+ (BOOL)matchAnyView:(NSArray *)views - pathComponent:(FBSDKCodelessPathComponent *)component -{ - for (NSObject *view in views) { - if ([self match:view pathComponent:component]) { - return YES; - } - } - return NO; -} - -+ (BOOL)match:(NSObject *)view -pathComponent:(FBSDKCodelessPathComponent *)component -{ - NSString *className = NSStringFromClass([view class]); - if (![className isEqualToString:component.className]) { - return NO; - } - - if (component.index >= 0) { - NSObject *parent = [FBSDKViewHierarchy getParent:view]; - if (parent) { - NSArray *children = [FBSDKViewHierarchy getChildren:[FBSDKViewHierarchy getParent:view]]; - NSUInteger index = [children indexOfObject:view]; - if (index == NSNotFound || index != component.index) { - return NO; - } - } else { - if (0 != component.index) { - return NO; - } - } - } - - if ((component.matchBitmask & FBSDKCodelessMatchBitmaskFieldText) > 0) { - NSString *text = [FBSDKViewHierarchy getText:view]; - BOOL match = ((text.length == 0 && component.text.length == 0) - || [text isEqualToString:component.text]); - if (!match) { - return NO; - } - } - - if ((component.matchBitmask & FBSDKCodelessMatchBitmaskFieldTag) > 0 - && [view isKindOfClass:[UIView class]] - && component.tag != ((UIView *)view).tag) { - return NO; - } - - if ((component.matchBitmask & FBSDKCodelessMatchBitmaskFieldHint) > 0) { - NSString *hint = [FBSDKViewHierarchy getHint:view]; - BOOL match = ((hint.length == 0 && component.hint.length == 0) - || [hint isEqualToString:component.hint]); - if (!match) { - return NO; - } - } - - return YES; -} - -+ (BOOL)isViewMatchPath:(UIView *)view path:(NSArray *)path -{ - NSArray *viewPath = [FBSDKViewHierarchy getPath:view]; - BOOL isMatch = [self isPath:path matchViewPath:viewPath]; - - return isMatch; -} - -+ (BOOL)isPath:(NSArray *)path matchViewPath:(NSArray *)viewPath { - for (NSInteger i = 0; i < MIN(path.count, viewPath.count); i++) { - NSInteger idxPath = path.count - i - 1; - NSInteger idxViewPath = viewPath.count - i - 1; - - FBSDKCodelessPathComponent *pathComponent = path[idxPath]; - FBSDKCodelessPathComponent *viewPathComponent = viewPath[idxViewPath]; - - if (![pathComponent.className isEqualToString:viewPathComponent.className]) { - return NO; - } - - if (pathComponent.index >= 0 - && pathComponent.index != viewPathComponent.index) { - return NO; - } - - if ((pathComponent.matchBitmask & FBSDKCodelessMatchBitmaskFieldText) > 0) { - NSString *text = viewPathComponent.text; - BOOL match = ((text.length == 0 && pathComponent.text.length == 0) - || [text isEqualToString:pathComponent.text] - || [[FBSDKUtility SHA256Hash:text] isEqualToString:pathComponent.text]); - if (!match) { - return NO; - } - } - - if ((pathComponent.matchBitmask & FBSDKCodelessMatchBitmaskFieldTag) > 0 - && pathComponent.tag != viewPathComponent.tag) { - return NO; - } - - if ((pathComponent.matchBitmask & FBSDKCodelessMatchBitmaskFieldHint) > 0) { - NSString *hint = viewPathComponent.hint; - BOOL match = ((hint.length == 0 && pathComponent.hint.length == 0) - || [hint isEqualToString:pathComponent.hint] - || [[FBSDKUtility SHA256Hash:hint] isEqualToString:pathComponent.hint]); - if (!match) { - return NO; - } - } - } - - return YES; -} - -+ (NSObject *)findViewByPath:(NSArray *)path parent:(NSObject *)parent level:(int)level { - if (level >= path.count) { - return nil; - } - - FBSDKCodelessPathComponent *pathComponent = path[level]; - - // If found parent, skip to next level - if ([pathComponent.className isEqualToString:CODELESS_MAPPING_PARENT_CLASS_NAME]) { - NSObject *nextParent = [FBSDKViewHierarchy getParent:parent]; - - return [FBSDKEventBinding findViewByPath:path parent:nextParent level:level + 1]; - } else if ([pathComponent.className isEqualToString:CODELESS_MAPPING_CURRENT_CLASS_NAME]) { - return parent; - } - - NSArray *children; - if (parent) { - children = [FBSDKViewHierarchy getChildren:parent]; - } else { - UIWindow *window = [UIApplication sharedApplication].delegate.window; - if (window) { - children = @[window]; - } else { - return nil; - } - } - - if (path.count - 1 == level) { - int index = pathComponent.index; - if (index >= 0) { - NSObject *child = index < children.count ? children[index] : nil; - if ([self match:child pathComponent:pathComponent]) { - return child; - } - } else { - for (NSObject *child in children) { - if ([self match:child pathComponent:pathComponent]) { - return child; - } - } - } - } else { - for (NSObject *child in children) { - NSObject *result = [self findViewByPath:path parent:child level:level + 1]; - if (result) { - return result; - } - } - } - - return nil; -} - -// MARK: - find event parameters via relative path -+ (NSString *)findParameterOfPath:(NSArray *)path - pathType:(NSString *)pathType - sourceView:(UIView *)sourceView { - if (0 == path.count) { - return nil; - } - - UIView *rootView = sourceView; - if (![pathType isEqualToString:CODELESS_PATH_TYPE_RELATIVE]) { - rootView = nil; - } - - NSObject *foundObj = [self findViewByPath:path parent:rootView level:0]; - - return [FBSDKViewHierarchy getText:foundObj]; -} - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKEventBindingManager.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKEventBindingManager.h deleted file mode 100644 index 23ee4dcc95..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKEventBindingManager.h +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import - -NS_SWIFT_NAME(EventBindingManager) -@interface FBSDKEventBindingManager : NSObject - -- (FBSDKEventBindingManager*)initWithJSON:(NSDictionary*)dict; -- (void)updateBindings:(NSArray *)bindings; -+ (NSArray *)parseArray:(NSArray *)array; - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKEventBindingManager.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKEventBindingManager.m deleted file mode 100644 index 06bf86d767..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKEventBindingManager.m +++ /dev/null @@ -1,397 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKEventBindingManager.h" - -#import - -#import - -#import "FBSDKCodelessPathComponent.h" -#import "FBSDKEventBinding.h" -#import "FBSDKSwizzler.h" -#import "FBSDKTypeUtility.h" -#import "FBSDKViewHierarchy.h" -#import "FBSDKViewHierarchyMacros.h" - -#define ReactNativeTargetKey @"target" -#define ReactNativeTouchEndEventName @"touchEnd" - -#define ReactNativeClassRCTTextView "RCTTextView" -#define ReactNativeClassRCTImageView "RCTImageVIew" -#define ReactNativeClassRCTTouchEvent "RCTTouchEvent" -#define ReactNativeClassRCTTouchHandler "RCTTouchHandler" - -@interface FBSDKEventBindingManager () -{ - BOOL isStarted; - NSMutableDictionary *reactBindings; - NSSet *validClasses; - BOOL hasReactNative; - NSArray *eventBindings; -} -@end - -@implementation FBSDKEventBindingManager - -- (id)init { - self = [super init]; - if (self) { - isStarted = NO; - hasReactNative = NO; - reactBindings = [NSMutableDictionary dictionary]; - - NSMutableSet *classes = [NSMutableSet set]; - [classes addObject:[UIControl class]]; - [classes addObject:[UITableView class]]; - [classes addObject:[UICollectionView class]]; - // ReactNative - Class classRCTRootView = objc_lookUpClass(ReactNativeClassRCTRootView); - if (classRCTRootView != nil) { - hasReactNative = YES; - Class classRCTView = objc_lookUpClass(ReactNativeClassRCTView); - Class classRCTTextView = objc_lookUpClass(ReactNativeClassRCTTextView); - Class classRCTImageView = objc_lookUpClass(ReactNativeClassRCTImageView); - if (classRCTView) { - [classes addObject:classRCTView]; - } - if (classRCTTextView) { - [classes addObject:classRCTTextView]; - } - if (classRCTImageView) { - [classes addObject:classRCTImageView]; - } - } - validClasses = [NSSet setWithSet:classes]; - } - return self; -} - -+ (NSArray *)parseArray:(NSArray *)array { - NSMutableArray *result = [NSMutableArray array]; - - for (NSDictionary *json in array) { - FBSDKEventBinding *binding = [[FBSDKEventBinding alloc] initWithJSON:json]; - [result addObject:binding]; - } - - return [result copy]; -} - -- (FBSDKEventBindingManager*)initWithJSON:(NSDictionary*)dict -{ - if ((self = [super init])) { - NSArray *eventBindingsDict = [FBSDKTypeUtility arrayValue:dict[@"event_bindings"]]; - NSMutableArray *bindings = [NSMutableArray array]; - for (NSDictionary *d in eventBindingsDict) { - FBSDKEventBinding *e = [[FBSDKEventBinding alloc] initWithJSON:d]; - [bindings addObject:e]; - } - eventBindings = [bindings copy]; - } - return self; -} - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wundeclared-selector" -- (void)start -{ - if (isStarted) { - return; - } - - if (0 == eventBindings.count) { - return; - } - - isStarted = YES; - - void (^blockToWindow)(id view) = ^(id view) { - [self matchView:view delegate:nil]; - }; - - [FBSDKSwizzler swizzleSelector:@selector(didMoveToWindow) - onClass:[UIControl class] - withBlock:blockToWindow named:@"map_control"]; - - // ReactNative - if (hasReactNative) { // If app is built via ReactNative - Class classRCTView = objc_lookUpClass(ReactNativeClassRCTView); - Class classRCTTextView = objc_lookUpClass(ReactNativeClassRCTTextView); - Class classRCTImageView = objc_lookUpClass(ReactNativeClassRCTImageView); - Class classRCTTouchHandler = objc_lookUpClass(ReactNativeClassRCTTouchHandler); - - // All react-native views would be added tp RCTRootView, so no need to check didMoveToWindow - [FBSDKSwizzler swizzleSelector:@selector(didMoveToWindow) - onClass:classRCTView - withBlock:blockToWindow - named:@"match_react_native"]; - [FBSDKSwizzler swizzleSelector:@selector(didMoveToWindow) - onClass:classRCTTextView - withBlock:blockToWindow - named:@"match_react_native"]; - [FBSDKSwizzler swizzleSelector:@selector(didMoveToWindow) - onClass:classRCTImageView - withBlock:blockToWindow - named:@"match_react_native"]; - - // RCTTouchHandler handles with touch events, like touchEnd and uses RCTEventDispather to dispatch events, so we can check _updateAndDispatchTouches to fire events - [FBSDKSwizzler swizzleSelector:@selector(_updateAndDispatchTouches:eventName:) onClass:classRCTTouchHandler withBlock:^(id touchHandler, SEL command, id touches, id eventName){ - if ([touches isKindOfClass:[NSSet class]] && [eventName isKindOfClass:[NSString class]]) { - @try { - NSString *reactEventName = (NSString *)eventName; - NSSet *reactTouches = (NSSet *)touches; - if ([reactEventName isEqualToString:ReactNativeTouchEndEventName]) { - for (UITouch *touch in reactTouches) { - UIView *targetView = ((UITouch *)touch).view.superview; - NSNumber *reactTag = nil; - // Find the closest React-managed touchable view like RCTTouchHandler - while(targetView) { - reactTag = [FBSDKViewHierarchy getViewReactTag:targetView]; - if (reactTag != nil && targetView.userInteractionEnabled) { - break; - } - targetView = targetView.superview; - } - FBSDKEventBinding *eventBinding = self->reactBindings[reactTag]; - if (reactTag != nil && eventBinding != nil) { - [eventBinding trackEvent:nil]; - } - } - } - } - @catch(NSException *exception) { - // Catch exception here to prevent LytroKit from crashing app - } - } - } named:@"dispatch_rn_event"]; - } - - // UITableView - void (^tableViewBlock)(UITableView *tableView, - SEL cmd, - id delegate) = - ^(UITableView *tableView, SEL cmd, id delegate) { - if (!delegate) { - return; - } - - [self matchView:tableView delegate:delegate]; - }; - [FBSDKSwizzler swizzleSelector:@selector(setDelegate:) - onClass:[UITableView class] - withBlock:tableViewBlock - named:@"match_table_view"]; - // UICollectionView - void (^collectionViewBlock)(UICollectionView *collectionView, - SEL cmd, - id delegate) = - ^(UICollectionView *collectionView, SEL cmd, id delegate) { - if (nil == delegate) { - return; - } - - [self matchView:collectionView delegate:delegate]; - }; - [FBSDKSwizzler swizzleSelector:@selector(setDelegate:) - onClass:[UICollectionView class] - withBlock:collectionViewBlock - named:@"handle_collection_view"]; -} - -- (void)rematchBindings { - if (0 == eventBindings.count) { - return; - } - - NSArray *windows = [UIApplication sharedApplication].windows; - for (UIWindow *window in windows) { - [self matchSubviewsIn:window]; - } -} - -- (void)matchSubviewsIn:(UIView *)view { - if (!view) { - return; - } - - for (UIView *subview in view.subviews) { - BOOL isValidClass = NO; - for (Class cls in validClasses) { - if ([subview isKindOfClass:cls]) { - isValidClass = YES; - break; - } - } - - if (isValidClass) { - if ([subview isKindOfClass:[UITableView class]]) { - UITableView *tableView = (UITableView *)subview; - if (tableView.delegate) { - [self matchView:subview delegate:tableView.delegate]; - } - } else if ([subview isKindOfClass:[UICollectionView class]]) { - UICollectionView *collectionView = (UICollectionView *)subview; - if (collectionView.delegate) { - [self matchView:subview delegate:collectionView.delegate]; - } - } else { - [self matchView:subview delegate:nil]; - } - } - - if (![subview isKindOfClass:[UIControl class]]) { - [self matchSubviewsIn:subview]; - } - } -} - -// check if the view is matched to any event -- (void)matchView:(UIView *)view delegate:(id)delegate { - if (0 == eventBindings.count) { - return; - } - - fb_dispatch_on_main_thread(^{ - if (![view window]) { - return; - } - - NSArray *path = [FBSDKViewHierarchy getPath:view]; - - fb_dispatch_on_default_thread(^{ - if ([view isKindOfClass:[UIControl class]]) { - UIControl *control = (UIControl *)view; - for (FBSDKEventBinding *binding in self->eventBindings) { - if ([FBSDKEventBinding isPath:binding.path matchViewPath:path]) { - fb_dispatch_on_main_thread(^{ - [control addTarget:binding - action:@selector(trackEvent:) - forControlEvents:UIControlEventTouchUpInside]; - }); - break; - } - } - } else if (self->hasReactNative - && [view respondsToSelector:@selector(reactTag)]) { - for (FBSDKEventBinding *binding in self->eventBindings) { - if ([FBSDKEventBinding isPath:binding.path matchViewPath:path]) { - fb_dispatch_on_main_thread(^{ - if (view) { - NSNumber *reactTag = [FBSDKViewHierarchy getViewReactTag:view]; - if (reactTag != nil) { - self->reactBindings[reactTag] = binding; - } - } - }); - break; - } - } - } else if ([view isKindOfClass:[UITableView class]] - && [delegate conformsToProtocol:@protocol(UITableViewDelegate)]) { - fb_dispatch_on_default_thread(^{ - NSMutableSet *matchedBindings = [NSMutableSet set]; - for (FBSDKEventBinding *binding in self->eventBindings) { - if (binding.path.count > 1) { - NSArray *shortPath = [binding.path - subarrayWithRange:NSMakeRange(0, binding.path.count - 1)]; - if ([FBSDKEventBinding isPath:shortPath matchViewPath:path]) { - [matchedBindings addObject:binding]; - } - } - } - - if (matchedBindings.count > 0) { - NSArray *bindings = matchedBindings.allObjects; - void (^block)(id, SEL, id, id) = ^(id target, SEL command, UITableView *tableView, NSIndexPath *indexPath) { - fb_dispatch_on_main_thread(^{ - for (FBSDKEventBinding *binding in bindings) { - FBSDKCodelessPathComponent *component = binding.path.lastObject; - if ((component.section == -1 || component.section == indexPath.section) - && (component.row == -1 || component.row == indexPath.row)) { - UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; - [binding trackEvent:cell]; - } - } - }); - }; - [FBSDKSwizzler swizzleSelector:@selector(tableView:didSelectRowAtIndexPath:) - onClass:[delegate class] - withBlock:block - named:@"handle_table_view"]; - } - }); - } else if ([view isKindOfClass:[UICollectionView class]] - && [delegate conformsToProtocol:@protocol(UICollectionViewDelegate)]) { - fb_dispatch_on_default_thread(^{ - NSMutableSet *matchedBindings = [NSMutableSet set]; - for (FBSDKEventBinding *binding in self->eventBindings) { - if (binding.path.count > 1) { - NSArray *shortPath = [binding.path - subarrayWithRange:NSMakeRange(0, binding.path.count - 1)]; - if ([FBSDKEventBinding isPath:shortPath matchViewPath:path]) { - [matchedBindings addObject:binding]; - } - } - } - - if (matchedBindings.count > 0) { - NSArray *bindings = matchedBindings.allObjects; - void (^block)(id, SEL, id, id) = ^(id target, SEL command, UICollectionView *collectionView, NSIndexPath *indexPath) { - fb_dispatch_on_main_thread(^{ - for (FBSDKEventBinding *binding in bindings) { - FBSDKCodelessPathComponent *component = binding.path.lastObject; - if ((component.section == -1 || component.section == indexPath.section) - && (component.row == -1 || component.row == indexPath.row)) { - UICollectionViewCell *cell = [collectionView cellForItemAtIndexPath:indexPath]; - [binding trackEvent:cell]; - } - } - }); - }; - [FBSDKSwizzler swizzleSelector:@selector(collectionView:didSelectItemAtIndexPath:) - onClass:[delegate class] - withBlock:block - named:@"handle_collection_view"]; - } - }); - } - }); - }); -} - -#pragma clang diagnostic pop -- (void)updateBindings:(NSArray *)bindings { - eventBindings = bindings; - [reactBindings removeAllObjects]; - if (!isStarted) { - [self start]; - } - - fb_dispatch_on_main_thread(^{ - [self rematchBindings]; - }); -} - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/EventDeactivation/FBSDKEventDeactivationManager.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/EventDeactivation/FBSDKEventDeactivationManager.h deleted file mode 100644 index bb38bf4669..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/EventDeactivation/FBSDKEventDeactivationManager.h +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface FBSDKEventDeactivationManager : NSObject - -+ (void)enable; -+ (void)updateDeactivatedEvents:(nullable NSDictionary *)events; -+ (void)processEvents:(NSMutableArray *> *)events; -+ (nullable NSDictionary *)processParameters:(nullable NSDictionary *)parameters - eventName:(NSString *)eventName; - -@end - -NS_ASSUME_NONNULL_END - diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/EventDeactivation/FBSDKEventDeactivationManager.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/EventDeactivation/FBSDKEventDeactivationManager.m deleted file mode 100644 index 77c2e3b8e4..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/EventDeactivation/FBSDKEventDeactivationManager.m +++ /dev/null @@ -1,119 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKEventDeactivationManager.h" - -static NSString *const DEPRECATED_PARAM_KEY = @"deprecated_param"; -static NSString *const DEPRECATED_EVENT_KEY = @"is_deprecated_event"; - -@interface FBSDKDeactivatedEvent : NSObject - -@property (nonatomic, readonly, copy) NSString *eventName; -@property (nonatomic, readonly, copy, nullable) NSSet *deactivatedParams; - --(instancetype)initWithEventName:(NSString *)eventName - deactivatedParams:(NSSet *)deactivatedParams; - -@end - -@implementation FBSDKDeactivatedEvent - --(instancetype)initWithEventName:(NSString *)eventName - deactivatedParams:(NSSet *)deactivatedParams -{ - self = [super init]; - if (self) { - _eventName = eventName; - _deactivatedParams = deactivatedParams; - } - - return self; -} - -@end - -@implementation FBSDKEventDeactivationManager - -static BOOL isEventDeactivationEnabled = NO; - -static NSMutableSet *_deactivatedEvents; -static NSMutableArray *_eventsWithDeactivatedParams; - -+ (void)enable -{ - isEventDeactivationEnabled = YES; -} - -+ (void)updateDeactivatedEvents:(nullable NSDictionary *)events -{ - if (!isEventDeactivationEnabled || events.count == 0) { - return; - } - [_deactivatedEvents removeAllObjects]; - [_eventsWithDeactivatedParams removeAllObjects]; - NSMutableArray *deactivatedParamsArray = [NSMutableArray array]; - NSMutableSet *deactivatedEventSet = [NSMutableSet set]; - for (NSString *eventName in events.allKeys) { - NSDictionary *eventInfo = events[eventName]; - if (!eventInfo) { - return; - } - if (eventInfo[DEPRECATED_EVENT_KEY]) { - [deactivatedEventSet addObject:eventName]; - } - if (eventInfo[DEPRECATED_PARAM_KEY]) { - FBSDKDeactivatedEvent *eventWithDeactivatedParams = [[FBSDKDeactivatedEvent alloc] initWithEventName:eventName - deactivatedParams:[NSSet setWithArray:eventInfo[DEPRECATED_PARAM_KEY]]]; - [deactivatedParamsArray addObject:eventWithDeactivatedParams]; - } - } - _deactivatedEvents = deactivatedEventSet; - _eventsWithDeactivatedParams = deactivatedParamsArray; -} - -+ (void)processEvents:(NSMutableArray *> *)events -{ - if (!isEventDeactivationEnabled) { - return; - } - NSArray *> *eventArray = [events copy]; - for (NSDictionary *> *event in eventArray) { - if ([_deactivatedEvents containsObject:event[@"event"][@"_eventName"]]) { - [events removeObject:event]; - } - } -} - -+ (nullable NSDictionary *)processParameters:(nullable NSDictionary *)parameters - eventName:(NSString *)eventName -{ - if (!isEventDeactivationEnabled || parameters.count == 0 || _eventsWithDeactivatedParams.count == 0) { - return parameters; - } - NSMutableDictionary *params = [NSMutableDictionary dictionaryWithDictionary:parameters]; - for (NSString *key in [parameters keyEnumerator]) { - for (FBSDKDeactivatedEvent *event in _eventsWithDeactivatedParams) { - if ([event.eventName isEqualToString:eventName] && [event.deactivatedParams containsObject:key]) { - [params removeObjectForKey:key]; - } - } - } - return [params copy]; -} - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEvents+Internal.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEvents+Internal.h deleted file mode 100644 index 282a3f8f8f..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEvents+Internal.h +++ /dev/null @@ -1,245 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#if SWIFT_PACKAGE -#import "FBSDKAppEvents.h" -#else -#import -#endif - -#import "FBSDKAppEventsUtility.h" - -@class FBSDKGraphRequest; - -// Internally known event names - -/** Use to log that the share dialog was launched */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameShareSheetLaunch; - -/** Use to log that the share dialog was dismissed */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameShareSheetDismiss; - -/** Use to log that the permissions UI was launched */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventNamePermissionsUILaunch; - -/** Use to log that the permissions UI was dismissed */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventNamePermissionsUIDismiss; - -/** Use to log that the login view was used */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameLoginViewUsage; - -/** Use to log that the share tray launched. */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameShareTrayDidLaunch; - -/** Use to log that the person selected a sharing target. */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameShareTrayDidSelectActivity; - -// Internally known event parameters - -/** String parameter specifying the outcome of a dialog invocation */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterDialogOutcome; - -/** Parameter key used to specify which application launches this application. */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterLaunchSource; - -/** Use to log the result of a call to FBDialogs presentShareDialogWithParams: */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBDialogsPresentShareDialog; - -/** Use to log the result of a call to FBDialogs presentShareDialogWithOpenGraphActionParams: */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBDialogsPresentShareDialogOG; - -/** Use to log the result of a call to FBDialogs presentLikeDialogWithLikeParams: */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBDialogsPresentLikeDialogOG; - -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBDialogsPresentShareDialogPhoto; -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBDialogsPresentMessageDialog; -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBDialogsPresentMessageDialogPhoto; -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBDialogsPresentMessageDialogOG; - -/** Use to log the start of an auth request that cannot be fulfilled by the token cache */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSessionAuthStart; - -/** Use to log the end of an auth request that was not fulfilled by the token cache */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSessionAuthEnd; - -/** Use to log the start of a specific auth method as part of an auth request */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSessionAuthMethodStart; - -/** Use to log the end of the last tried auth method as part of an auth request */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSessionAuthMethodEnd; - -/** Use to log the timestamp for the transition to the Facebook native login dialog */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBDialogsNativeLoginDialogStart; - -/** Use to log the timestamp for the transition back to the app after the Facebook native login dialog */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBDialogsNativeLoginDialogEnd; - -/** Use to log the e2e timestamp metrics for web login */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBDialogsWebLoginCompleted; - -/** Use to log the result of the App Switch OS AlertView. Only available on OS >= iOS10 */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSessionFASLoginDialogResult; - -/** Use to log the live streaming events from sdk */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKLiveStreamingStart; -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKLiveStreamingStop; -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKLiveStreamingPause; -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKLiveStreamingResume; -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKLiveStreamingError; -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKLiveStreamingUpdateStatus; -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKLiveStreamingVideoID; -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKLiveStreamingMic; -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKLiveStreamingCamera; - -/** Use to log the results of a share dialog */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKEventShareDialogResult; -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKEventMessengerShareDialogResult; -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKEventAppInviteShareDialogResult; - -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKEventShareDialogShow; -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKEventMessengerShareDialogShow; -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKEventAppInviteShareDialogShow; - -FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterDialogMode; -FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterDialogShareContentType; -FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterDialogShareContentUUID; -FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterDialogShareContentPageID; - -/** Use to log parameters for share tray use */ -FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterShareTrayActivityName; -FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterShareTrayResult; - -/** Use to log parameters for live streaming*/ -FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterLiveStreamingPrevStatus; -FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterLiveStreamingStatus; -FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterLiveStreamingError; -FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterLiveStreamingVideoID; -FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterLiveStreamingMicEnabled; -FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterLiveStreamingCameraEnabled; - -// Internally known event parameter values - -FOUNDATION_EXPORT NSString *const FBSDKAppEventsDialogOutcomeValue_Completed; -FOUNDATION_EXPORT NSString *const FBSDKAppEventsDialogOutcomeValue_Cancelled; -FOUNDATION_EXPORT NSString *const FBSDKAppEventsDialogOutcomeValue_Failed; - -FOUNDATION_EXPORT NSString *const FBSDKAppEventsDialogShareContentTypeOpenGraph; -FOUNDATION_EXPORT NSString *const FBSDKAppEventsDialogShareContentTypeStatus; -FOUNDATION_EXPORT NSString *const FBSDKAppEventsDialogShareContentTypePhoto; -FOUNDATION_EXPORT NSString *const FBSDKAppEventsDialogShareContentTypeVideo; -FOUNDATION_EXPORT NSString *const FBSDKAppEventsDialogShareContentTypeCamera; -FOUNDATION_EXPORT NSString *const FBSDKAppEventsDialogShareContentTypeMessengerGenericTemplate; -FOUNDATION_EXPORT NSString *const FBSDKAppEventsDialogShareContentTypeMessengerMediaTemplate; -FOUNDATION_EXPORT NSString *const FBSDKAppEventsDialogShareContentTypeMessengerOpenGraphMusicTemplate; -FOUNDATION_EXPORT NSString *const FBSDKAppEventsDialogShareContentTypeUnknown; - - -FOUNDATION_EXPORT NSString *const FBSDKAppEventsDialogShareModeAutomatic; -FOUNDATION_EXPORT NSString *const FBSDKAppEventsDialogShareModeBrowser; -FOUNDATION_EXPORT NSString *const FBSDKAppEventsDialogShareModeNative; -FOUNDATION_EXPORT NSString *const FBSDKAppEventsDialogShareModeShareSheet; -FOUNDATION_EXPORT NSString *const FBSDKAppEventsDialogShareModeWeb; -FOUNDATION_EXPORT NSString *const FBSDKAppEventsDialogShareModeFeedBrowser; -FOUNDATION_EXPORT NSString *const FBSDKAppEventsDialogShareModeFeedWeb; -FOUNDATION_EXPORT NSString *const FBSDKAppEventsDialogShareModeUnknown; - -FOUNDATION_EXPORT NSString *const FBSDKAppEventsNativeLoginDialogStartTime; -FOUNDATION_EXPORT NSString *const FBSDKAppEventsNativeLoginDialogEndTime; - -FOUNDATION_EXPORT NSString *const FBSDKAppEventsWebLoginE2E; - -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKLikeButtonImpression; -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKLoginButtonImpression; -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKSendButtonImpression; -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKShareButtonImpression; -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKLiveStreamingButtonImpression; - -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKSmartLoginService; - -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKLikeButtonDidTap; -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKLoginButtonDidTap; -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKSendButtonDidTap; -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKShareButtonDidTap; -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKLiveStreamingButtonDidTap; - -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKLikeControlDidDisable; -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKLikeControlDidLike; -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKLikeControlDidPresentDialog; -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKLikeControlDidTap; -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKLikeControlDidUnlike; -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKLikeControlError; -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKLikeControlImpression; -FOUNDATION_EXPORT NSString *const FBSDKAppEventNameFBSDKLikeControlNetworkUnavailable; - -FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterDialogErrorMessage; -FOUNDATION_EXPORT NSString *const FBSDKAppEventParameterLogTime; - -FOUNDATION_EXPORT NSString *const FBSDKAppEventsWKWebViewMessagesHandlerKey; -FOUNDATION_EXPORT NSString *const FBSDKAppEventsWKWebViewMessagesActionKey; -FOUNDATION_EXPORT NSString *const FBSDKAppEventsWKWebViewMessagesEventKey; -FOUNDATION_EXPORT NSString *const FBSDKAppEventsWKWebViewMessagesParamsKey; -FOUNDATION_EXPORT NSString *const FBSDKAppEventsWKWebViewMessagesPixelTrackKey; -FOUNDATION_EXPORT NSString *const FBSDKAppEventsWKWebViewMessagesPixelTrackCustomKey; -FOUNDATION_EXPORT NSString *const FBSDKAppEventsWKWebViewMessagesPixelTrackSingleKey; -FOUNDATION_EXPORT NSString *const FBSDKAppEventsWKWebViewMessagesPixelTrackSingleCustomKey; -FOUNDATION_EXPORT NSString *const FBSDKAppEventsWKWebViewMessagesPixelIDKey; - -@interface FBSDKAppEvents (Internal) - -@property (class, nonatomic, strong, readonly) FBSDKAppEvents *singleton; - -#ifdef DEBUG -+ (void)resetSingleton; -#endif - -+ (void)logInternalEvent:(FBSDKAppEventName)eventName - isImplicitlyLogged:(BOOL)isImplicitlyLogged; - -+ (void)logInternalEvent:(FBSDKAppEventName)eventName - valueToSum:(double)valueToSum - isImplicitlyLogged:(BOOL)isImplicitlyLogged; - -+ (void)logInternalEvent:(FBSDKAppEventName)eventName - parameters:(NSDictionary *)parameters - isImplicitlyLogged:(BOOL)isImplicitlyLogged; - -+ (void)logInternalEvent:(FBSDKAppEventName)eventName - parameters:(NSDictionary *)parameters - isImplicitlyLogged:(BOOL)isImplicitlyLogged - accessToken:(FBSDKAccessToken *)accessToken; - -+ (void)logInternalEvent:(FBSDKAppEventName)eventName - valueToSum:(double)valueToSum - parameters:(NSDictionary *)parameters - isImplicitlyLogged:(BOOL)isImplicitlyLogged; - -+ (void)logInternalEvent:(NSString *)eventName - valueToSum:(NSNumber *)valueToSum - parameters:(NSDictionary *)parameters - isImplicitlyLogged:(BOOL)isImplicitlyLogged - accessToken:(FBSDKAccessToken *)accessToken; - -+ (void)logImplicitEvent:(NSString *)eventName - valueToSum:(NSNumber *)valueToSum - parameters:(NSDictionary *)parameters - accessToken:(FBSDKAccessToken *)accessToken; - -- (void)flushForReason:(FBSDKAppEventsFlushReason)flushReason; -- (void)registerNotifications; - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsDeviceInfo.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsDeviceInfo.h deleted file mode 100644 index bd25235175..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsDeviceInfo.h +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -NS_SWIFT_NAME(AppEventsDeviceInfo) -@interface FBSDKAppEventsDeviceInfo : NSObject - -+ (void)extendDictionaryWithDeviceInfo:(NSMutableDictionary *)dictionary; - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsDeviceInfo.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsDeviceInfo.m deleted file mode 100644 index 631fba933b..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsDeviceInfo.m +++ /dev/null @@ -1,279 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKAppEventsDeviceInfo.h" - -#import -#import - -#if !TARGET_OS_TV -#import -#import -#endif - -#import -#import - -#import "FBSDKAppEvents+Internal.h" -#import "FBSDKDynamicFrameworkLoader.h" -#import "FBSDKInternalUtility.h" -#import "FBSDKUtility.h" - -#define FB_ARRAY_COUNT(x) sizeof(x) / sizeof(x[0]) - -static const u_int FB_GROUP1_RECHECK_DURATION = 30 * 60; // seconds - -// Apple reports storage in binary gigabytes (1024^3) in their About menus, etc. -static const u_int FB_GIGABYTE = 1024 * 1024 * 1024; // bytes - -@implementation FBSDKAppEventsDeviceInfo -{ - // Ephemeral data, may change during the lifetime of an app. We collect them in different - // 'group' frequencies - group1 may gets collected once every 30 minutes. - - // group1 - NSString *_carrierName; - NSString *_timeZoneAbbrev; - unsigned long long _remainingDiskSpaceGB; - NSString *_timeZoneName; - - // Persistent data, but we maintain it to make rebuilding the device info as fast as possible. - NSString *_bundleIdentifier; - NSString *_longVersion; - NSString *_shortVersion; - NSString *_sysVersion; - NSString *_machine; - NSString *_language; - unsigned long long _totalDiskSpaceGB; - unsigned long long _coreCount; - CGFloat _width; - CGFloat _height; - CGFloat _density; - - // Other state - long _lastGroup1CheckTime; - BOOL _isEncodingDirty; - NSString *_encodedDeviceInfo; -} - -#pragma mark - Public Methods - -+ (void)extendDictionaryWithDeviceInfo:(NSMutableDictionary *)dictionary -{ - dictionary[@"extinfo"] = [[self sharedDeviceInfo] encodedDeviceInfo]; -} - -#pragma mark - Internal Methods - -+ (void)initialize -{ - if (self == [FBSDKAppEventsDeviceInfo class]) { - [[self sharedDeviceInfo] _collectPersistentData]; - } -} - -+ (instancetype)sharedDeviceInfo -{ - static FBSDKAppEventsDeviceInfo *_sharedDeviceInfo = nil; - if (_sharedDeviceInfo == nil) { - _sharedDeviceInfo = [[FBSDKAppEventsDeviceInfo alloc] init]; - } - return _sharedDeviceInfo; -} - -- (instancetype)init -{ - if ((self = [super init])) { - _isEncodingDirty = YES; - } - return self; -} - -- (NSString *)encodedDeviceInfo -{ - @synchronized (self) { - - BOOL isGroup1Expired = [self _isGroup1Expired]; - BOOL isEncodingExpired = isGroup1Expired; // Can || other groups in if we add them - - // As long as group1 hasn't expired, we can just return the last generated value - if (_encodedDeviceInfo && !isEncodingExpired) { - return _encodedDeviceInfo; - } - - if (isGroup1Expired) { - [self _collectGroup1Data]; - } - - if (_isEncodingDirty) { - self.encodedDeviceInfo = [self _generateEncoding]; - _isEncodingDirty = NO; - } - - return _encodedDeviceInfo; - } -} - -- (void)setEncodedDeviceInfo:(NSString *)encodedDeviceInfo -{ - @synchronized (self) { - if (![_encodedDeviceInfo isEqualToString:encodedDeviceInfo]) { - _encodedDeviceInfo = [encodedDeviceInfo copy]; - } - } -} - -// This data need only be collected once. -- (void)_collectPersistentData -{ - // Bundle stuff - NSBundle *mainBundle = [NSBundle mainBundle]; - _bundleIdentifier = mainBundle.bundleIdentifier; - _longVersion = [mainBundle objectForInfoDictionaryKey:@"CFBundleVersion"]; - _shortVersion = [mainBundle objectForInfoDictionaryKey:@"CFBundleShortVersionString"]; - - // Locale stuff - _language = [NSLocale currentLocale].localeIdentifier; - - // Device stuff - UIDevice *device = [UIDevice currentDevice]; - _sysVersion = device.systemVersion; - _coreCount = [FBSDKAppEventsDeviceInfo _coreCount]; - - UIScreen *sc = [UIScreen mainScreen]; - CGRect sr = sc.bounds; - _width = sr.size.width; - _height = sr.size.height; - _density = sc.scale; - - struct utsname systemInfo; - uname(&systemInfo); - _machine = @(systemInfo.machine); - - // Disk space stuff - float totalDiskSpace = [FBSDKAppEventsDeviceInfo _getTotalDiskSpace].floatValue; - _totalDiskSpaceGB = (unsigned long long)round(totalDiskSpace / FB_GIGABYTE); -} - -- (BOOL)_isGroup1Expired -{ - return ([FBSDKAppEventsUtility unixTimeNow] - _lastGroup1CheckTime) > FB_GROUP1_RECHECK_DURATION; -} - -// This data is collected only once every GROUP1_RECHECK_DURATION. -- (void)_collectGroup1Data -{ - // Carrier - NSString *newCarrierName = [FBSDKAppEventsDeviceInfo _getCarrier]; - if (![newCarrierName isEqualToString:_carrierName]) { - _carrierName = newCarrierName; - _isEncodingDirty = YES; - } - - // Time zone - NSTimeZone *timeZone = [NSTimeZone systemTimeZone]; - NSString *timeZoneName = timeZone.name; - if (![timeZoneName isEqualToString:_timeZoneName]) { - _timeZoneName = timeZoneName; - _timeZoneAbbrev = timeZone.abbreviation; - _isEncodingDirty = YES; - } - - // Remaining disk space - float remainingDiskSpace = [FBSDKAppEventsDeviceInfo _getRemainingDiskSpace].floatValue; - unsigned long long newRemainingDiskSpaceGB = (unsigned long long)round(remainingDiskSpace / FB_GIGABYTE); - if (_remainingDiskSpaceGB != newRemainingDiskSpaceGB) { - _remainingDiskSpaceGB = newRemainingDiskSpaceGB; - _isEncodingDirty = YES; - } - - _lastGroup1CheckTime = [FBSDKAppEventsUtility unixTimeNow]; -} - -- (NSString *)_generateEncoding -{ - // Keep a bit of precision on density as it's the most likely to become non-integer. - NSString *densityString = _density ? [NSString stringWithFormat:@"%.02f", _density] : @""; - - NSArray *arr = @[ - @"i2", // version - starts with 'i' for iOS, we'll use 'a' for Android - _bundleIdentifier ?: @"", - _longVersion ?: @"", - _shortVersion ?: @"", - _sysVersion ?: @"", - _machine ?: @"", - _language ?: @"", - _timeZoneAbbrev ?: @"", - _carrierName ?: @"", - _width ? @((unsigned long)_width) : @"", - _height ? @((unsigned long)_height) : @"", - densityString, - @(_coreCount) ?: @"", - @(_totalDiskSpaceGB) ?: @"", - @(_remainingDiskSpaceGB) ?: @"", - _timeZoneName ?: @"" - ]; - - return [FBSDKBasicUtility JSONStringForObject:arr error:NULL invalidObjectHandler:NULL]; -} - -#pragma mark - Helper Methods - -+ (NSNumber *)_getTotalDiskSpace -{ - NSDictionary *attrs = [[[NSFileManager alloc] init] attributesOfFileSystemForPath:NSHomeDirectory() - error:nil]; - return attrs[NSFileSystemSize]; -} - -+ (NSNumber *)_getRemainingDiskSpace -{ - NSDictionary *attrs = [[[NSFileManager alloc] init] attributesOfFileSystemForPath:NSHomeDirectory() - error:nil]; - return attrs[NSFileSystemFreeSize]; -} - -+ (uint)_coreCount -{ - return [FBSDKAppEventsDeviceInfo _readSysCtlUInt:CTL_HW type:HW_AVAILCPU]; -} - -+ (uint)_readSysCtlUInt:(int)ctl type:(int)type -{ - int mib[2] = {ctl, type}; - uint value; - size_t size = sizeof value; - if (0 != sysctl(mib, FB_ARRAY_COUNT(mib), &value, &size, NULL, 0)) { - return 0; - } - return value; -} - -+ (NSString *)_getCarrier -{ -#if TARGET_OS_TV || TARGET_IPHONE_SIMULATOR - return @"NoCarrier"; -#else - // Dynamically load class for this so calling app doesn't need to link framework in. - CTTelephonyNetworkInfo *networkInfo = [[fbsdkdfl_CTTelephonyNetworkInfoClass() alloc] init]; - CTCarrier *carrier = networkInfo.subscriberCellularProvider; - return carrier.carrierName ?: @"NoCarrier"; -#endif -} - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsState.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsState.h deleted file mode 100644 index a23dea7fc1..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsState.h +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -// this type is not thread safe. -NS_SWIFT_NAME(AppEventsState) -@interface FBSDKAppEventsState : NSObject - -@property (nonatomic, readonly, copy) NSArray *events; -@property (nonatomic, readonly, assign) NSUInteger numSkipped; -@property (nonatomic, readonly, copy) NSString *tokenString; -@property (nonatomic, readonly, copy) NSString *appID; -@property (nonatomic, readonly, getter=areAllEventsImplicit) BOOL allEventsImplicit; - -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; -- (instancetype)initWithToken:(NSString *)tokenString appID:(NSString *)appID NS_DESIGNATED_INITIALIZER; - -- (void)addEvent:(NSDictionary *)eventDictionary isImplicit:(BOOL)isImplicit; -- (void)addEventsFromAppEventState:(FBSDKAppEventsState *)appEventsState; -- (BOOL)isCompatibleWithAppEventsState:(FBSDKAppEventsState *)appEventsState; -- (BOOL)isCompatibleWithTokenString:(NSString *)tokenString appID:(NSString *)appID; -- (NSString *)JSONStringForEvents:(BOOL)includeImplicitEvents; -- (NSString *)extractReceiptData; - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsState.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsState.m deleted file mode 100644 index 3fcf9af1e0..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsState.m +++ /dev/null @@ -1,185 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKAppEventsState.h" - -#import "FBSDKBasicUtility.h" -#import "FBSDKEventDeactivationManager.h" -#import "FBSDKRestrictiveDataFilterManager.h" - -#define FBSDK_APPEVENTSTATE_ISIMPLICIT_KEY @"isImplicit" - -#define FBSDK_APPEVENTSSTATE_MAX_EVENTS 1000 - -#define FBSDK_APPEVENTSSTATE_APPID_KEY @"appID" -#define FBSDK_APPEVENTSSTATE_EVENTS_KEY @"events" -#define FBSDK_APPEVENTSSTATE_NUMSKIPPED_KEY @"numSkipped" -#define FBSDK_APPEVENTSSTATE_TOKENSTRING_KEY @"tokenString" -#define FBSDK_APPEVENTSTATE_RECEIPTDATA_KEY @"receipt_data" -#define FBSDK_APPEVENTSTATE_RECEIPTID_KEY @"receipt_id" - -@implementation FBSDKAppEventsState -{ - NSMutableArray *_mutableEvents; -} - -- (instancetype)initWithToken:(NSString *)tokenString appID:(NSString *)appID -{ - if ((self = [super init])) { - _tokenString = [tokenString copy]; - _appID = [appID copy]; - _mutableEvents = [NSMutableArray array]; - } - return self; -} - -- (instancetype)copyWithZone:(NSZone *)zone -{ - FBSDKAppEventsState *copy = [[FBSDKAppEventsState allocWithZone:zone] initWithToken:_tokenString appID:_appID]; - if (copy) { - [copy->_mutableEvents addObjectsFromArray:_mutableEvents]; - copy->_numSkipped = _numSkipped; - } - return copy; -} - -#pragma mark - NSCoding - -+ (BOOL)supportsSecureCoding -{ - return YES; -} - -- (id)initWithCoder:(NSCoder *)decoder -{ - NSString *appID = [decoder decodeObjectOfClass:[NSString class] forKey:FBSDK_APPEVENTSSTATE_APPID_KEY]; - NSString *tokenString = [decoder decodeObjectOfClass:[NSString class] forKey:FBSDK_APPEVENTSSTATE_TOKENSTRING_KEY]; - NSArray *events = [decoder decodeObjectOfClass:[NSArray class] forKey:FBSDK_APPEVENTSSTATE_EVENTS_KEY]; - NSUInteger numSkipped = [[decoder decodeObjectOfClass:[NSNumber class] forKey:FBSDK_APPEVENTSSTATE_NUMSKIPPED_KEY] unsignedIntegerValue]; - - if ((self = [self initWithToken:tokenString appID:appID])) { - _mutableEvents = [NSMutableArray arrayWithArray:events]; - _numSkipped = numSkipped; - } - return self; -} - -- (void)encodeWithCoder:(NSCoder *)encoder -{ - [encoder encodeObject:_appID forKey:FBSDK_APPEVENTSSTATE_APPID_KEY]; - [encoder encodeObject:_tokenString forKey:FBSDK_APPEVENTSSTATE_TOKENSTRING_KEY]; - [encoder encodeObject:@(_numSkipped) forKey:FBSDK_APPEVENTSSTATE_NUMSKIPPED_KEY]; - [encoder encodeObject:_mutableEvents forKey:FBSDK_APPEVENTSSTATE_EVENTS_KEY]; -} - -#pragma mark - Implementation - -- (NSArray *)events -{ - return [_mutableEvents copy]; -} - -- (void)addEventsFromAppEventState:(FBSDKAppEventsState *)appEventsState -{ - NSArray *toAdd = appEventsState->_mutableEvents; - NSInteger excess = _mutableEvents.count + toAdd.count - FBSDK_APPEVENTSSTATE_MAX_EVENTS; - if (excess > 0) { - NSInteger range = FBSDK_APPEVENTSSTATE_MAX_EVENTS - _mutableEvents.count; - toAdd = [toAdd subarrayWithRange:NSMakeRange(0, range)]; - _numSkipped += excess; - } - - [_mutableEvents addObjectsFromArray:toAdd]; -} - -- (void)addEvent:(NSDictionary *)eventDictionary - isImplicit:(BOOL)isImplicit { - if (_mutableEvents.count >= FBSDK_APPEVENTSSTATE_MAX_EVENTS) { - _numSkipped++; - } else { - [_mutableEvents addObject:@{ - @"event" : [eventDictionary mutableCopy], - FBSDK_APPEVENTSTATE_ISIMPLICIT_KEY : @(isImplicit) - }]; - } -} - -- (NSString *)extractReceiptData { - NSMutableString *receipts_string = [NSMutableString string]; - NSInteger transactionId = 1; - for (NSMutableDictionary* events in _mutableEvents) { - NSMutableDictionary *event = events[@"event"]; - - NSString* receipt = event[@"receipt_data"]; - // Add receipt id as the identifier for receipt data in event parameter. - // Receipt data will be sent as post parameter rather than the event parameter - if (receipt) { - NSString* idKey = [NSString stringWithFormat:@"receipt_%ld", (long)transactionId]; - event[FBSDK_APPEVENTSTATE_RECEIPTID_KEY] = idKey; - NSString* receiptWithId = [NSString stringWithFormat:@"%@::%@;;;", idKey, receipt]; - [receipts_string appendString:receiptWithId]; - transactionId++; - } - } - return receipts_string; -} - -- (BOOL)areAllEventsImplicit -{ - for (NSDictionary *event in _mutableEvents) { - if (![[event valueForKey:FBSDK_APPEVENTSTATE_ISIMPLICIT_KEY] boolValue]) { - return NO; - } - } - return YES; -} - -- (BOOL)isCompatibleWithAppEventsState:(FBSDKAppEventsState *)appEventsState -{ - return ([self isCompatibleWithTokenString:appEventsState.tokenString appID:appEventsState.appID]); -} - -- (BOOL)isCompatibleWithTokenString:(NSString *)tokenString appID:(NSString *)appID -{ - // token strings can be nil (e.g., no user token) but appIDs should not. - BOOL tokenCompatible = ([self.tokenString isEqualToString:tokenString] || - (self.tokenString == nil && tokenString == nil)); - return (tokenCompatible && - [self.appID isEqualToString:appID]); -} - -- (NSString *)JSONStringForEvents:(BOOL)includeImplicitEvents -{ - [FBSDKEventDeactivationManager processEvents:_mutableEvents]; - - NSMutableArray *events = [[NSMutableArray alloc] initWithCapacity:_mutableEvents.count]; - for (NSDictionary *eventAndImplicitFlag in _mutableEvents) { - if (!includeImplicitEvents && [eventAndImplicitFlag[FBSDK_APPEVENTSTATE_ISIMPLICIT_KEY] boolValue]) { - continue; - } - NSMutableDictionary *event = eventAndImplicitFlag[@"event"]; - NSAssert(event != nil, @"event cannot be nil"); - [event removeObjectForKey:FBSDK_APPEVENTSTATE_RECEIPTDATA_KEY]; - - [events addObject:event]; - } - - return [FBSDKBasicUtility JSONStringForObject:events error:NULL invalidObjectHandler:NULL]; -} - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsStateManager.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsStateManager.h deleted file mode 100644 index 046ff217cf..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsStateManager.h +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -@class FBSDKAppEventsState; - -NS_SWIFT_NAME(AppEventsStateManager) -@interface FBSDKAppEventsStateManager : NSObject - -+ (void)clearPersistedAppEventsStates; - -// reads all saved event states, appends the param, and writes them all. -+ (void)persistAppEventsData:(FBSDKAppEventsState *)appEventsState; - -// returns the array of saved app event states and deletes them. -+ (NSArray *)retrievePersistedAppEventsStates; - - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsStateManager.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsStateManager.m deleted file mode 100644 index 294b558d4a..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsStateManager.m +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKAppEventsStateManager.h" - -#import - -#import "FBSDKAppEventsState.h" -#import "FBSDKAppEventsUtility.h" -#import "FBSDKInternalUtility.h" -#import "FBSDKLogger.h" -#import "FBSDKSettings.h" - -// A quick optimization to allow returning empty array if we know there are no persisted events. -static BOOL g_canSkipDiskCheck = NO; - -@implementation FBSDKAppEventsStateManager - -+ (void)clearPersistedAppEventsStates -{ - [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorAppEvents - logEntry:@"FBSDKAppEvents Persist: Clearing"]; - [[NSFileManager defaultManager] removeItemAtPath:[[self class] filePath] - error:NULL]; - g_canSkipDiskCheck = YES; -} - -+ (void)persistAppEventsData:(FBSDKAppEventsState *)appEventsState -{ - [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorAppEvents - formatString:@"FBSDKAppEvents Persist: Writing %lu events", (unsigned long)appEventsState.events.count]; - - if (!appEventsState.events.count) { - return; - } - NSMutableArray *existingEvents = [NSMutableArray arrayWithArray:[[self class] retrievePersistedAppEventsStates]]; - [existingEvents addObject:appEventsState]; - - [NSKeyedArchiver archiveRootObject:existingEvents toFile:[[self class] filePath]]; - g_canSkipDiskCheck = NO; -} - -+ (NSArray *)retrievePersistedAppEventsStates -{ - NSMutableArray *eventsStates = [NSMutableArray array]; - if (!g_canSkipDiskCheck) { - [eventsStates addObjectsFromArray:[NSKeyedUnarchiver unarchiveObjectWithFile:[[self class] filePath]]]; - - [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorAppEvents - formatString:@"FBSDKAppEvents Persist: Read %lu event states. First state has %lu events", - (unsigned long)eventsStates.count, - (unsigned long)(eventsStates.count > 0 ? ((FBSDKAppEventsState *)eventsStates[0]).events.count : 0)]; - [[self class] clearPersistedAppEventsStates]; - } - return eventsStates; -} - -#pragma mark - Private Helpers - -+ (NSString *)filePath -{ - return [FBSDKBasicUtility persistenceFilePath:@"com-facebook-sdk-AppEventsPersistedEvents.json"]; -} -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsUtility.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsUtility.h deleted file mode 100644 index 6b0baa29dd..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsUtility.h +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -@class FBSDKAccessToken; - -typedef NS_ENUM(NSUInteger, FBSDKAdvertisingTrackingStatus) -{ - FBSDKAdvertisingTrackingAllowed, - FBSDKAdvertisingTrackingDisallowed, - FBSDKAdvertisingTrackingUnspecified -} NS_SWIFT_NAME(AppEventsUtility.AdvertisingTrackingStatus); - -typedef NS_ENUM(NSUInteger, FBSDKAppEventsFlushReason) -{ - FBSDKAppEventsFlushReasonExplicit, - FBSDKAppEventsFlushReasonTimer, - FBSDKAppEventsFlushReasonSessionChange, - FBSDKAppEventsFlushReasonPersistedEvents, - FBSDKAppEventsFlushReasonEventThreshold, - FBSDKAppEventsFlushReasonEagerlyFlushingEvent -} NS_SWIFT_NAME(AppEventsUtility.FlushReason); - -NS_SWIFT_NAME(AppEventsUtility) -@interface FBSDKAppEventsUtility : NSObject - -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; - -@property (class, nonatomic, copy, readonly) NSString *advertiserID; -@property (class, nonatomic, assign, readonly) FBSDKAdvertisingTrackingStatus advertisingTrackingStatus; -@property (class, nonatomic, strong, readonly) NSString *attributionID; -@property (class, nonatomic, assign, readonly) long unixTimeNow; -@property (class, nonatomic, assign, readonly) BOOL isDebugBuild; - -+ (NSMutableDictionary *)activityParametersDictionaryForEvent:(NSString *)eventCategory - implicitEventsOnly:(BOOL)implicitEventsOnly - shouldAccessAdvertisingID:(BOOL)shouldAccessAdvertisingID; - -+ (void)ensureOnMainThread:(NSString *)methodName className:(NSString *)className; -+ (NSString *)flushReasonToString:(FBSDKAppEventsFlushReason)flushReason; -+ (void)logAndNotify:(NSString *)msg allowLogAsDeveloperError:(BOOL)allowLogAsDeveloperError; -+ (void)logAndNotify:(NSString *)msg; -+ (NSString *)tokenStringToUseFor:(FBSDKAccessToken *)token; -+ (BOOL)validateIdentifier:(NSString *)identifier; -+ (id)getVariable:(NSString *)variableName fromInstance:(NSObject *)instance; -+ (NSNumber *)getNumberValue:(NSString *)text; -+ (BOOL)isSensitiveUserData:(NSString *)text; - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsUtility.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsUtility.m deleted file mode 100644 index a353aa5225..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsUtility.m +++ /dev/null @@ -1,430 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKAppEventsUtility.h" - -#import - -#import - -#import "FBSDKAccessToken.h" -#import "FBSDKAppEvents.h" -#import "FBSDKAppEventsDeviceInfo.h" -#import "FBSDKConstants.h" -#import "FBSDKDynamicFrameworkLoader.h" -#import "FBSDKError.h" -#import "FBSDKInternalUtility.h" -#import "FBSDKLogger.h" -#import "FBSDKSettings.h" -#import "FBSDKTimeSpentData.h" - -#define FBSDK_APPEVENTSUTILITY_ANONYMOUSIDFILENAME @"com-facebook-sdk-PersistedAnonymousID.json" -#define FBSDK_APPEVENTSUTILITY_ANONYMOUSID_KEY @"anon_id" -#define FBSDK_APPEVENTSUTILITY_MAX_IDENTIFIER_LENGTH 40 - -@implementation FBSDKAppEventsUtility - -+ (NSMutableDictionary *)activityParametersDictionaryForEvent:(NSString *)eventCategory - implicitEventsOnly:(BOOL)implicitEventsOnly - shouldAccessAdvertisingID:(BOOL)shouldAccessAdvertisingID { - NSMutableDictionary *parameters = [NSMutableDictionary dictionary]; - parameters[@"event"] = eventCategory; - -#if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_7_0 - NSString *attributionID = [[self class] attributionID]; // Only present on iOS 6 and below. - [FBSDKBasicUtility dictionary:parameters setObject:attributionID forKey:@"attribution"]; -#endif - - if (!implicitEventsOnly && shouldAccessAdvertisingID) { - NSString *advertiserID = [[self class] advertiserID]; - [FBSDKBasicUtility dictionary:parameters setObject:advertiserID forKey:@"advertiser_id"]; - } - - parameters[FBSDK_APPEVENTSUTILITY_ANONYMOUSID_KEY] = [FBSDKBasicUtility anonymousID]; - - FBSDKAdvertisingTrackingStatus advertisingTrackingStatus = [[self class] advertisingTrackingStatus]; - if (advertisingTrackingStatus != FBSDKAdvertisingTrackingUnspecified) { - BOOL allowed = (advertisingTrackingStatus == FBSDKAdvertisingTrackingAllowed); - parameters[@"advertiser_tracking_enabled"] = @(allowed).stringValue; - } - if (advertisingTrackingStatus == FBSDKAdvertisingTrackingAllowed) { - NSString *userData = [FBSDKAppEvents getUserData]; - if (userData){ - parameters[@"ud"] = userData; - } - } - - parameters[@"application_tracking_enabled"] = @(!FBSDKSettings.limitEventAndDataUsage).stringValue; - - NSString *userID = [FBSDKAppEvents userID]; - if (userID) { - parameters[@"app_user_id"] = userID; - } - - [FBSDKAppEventsDeviceInfo extendDictionaryWithDeviceInfo:parameters]; - - static dispatch_once_t fetchBundleOnce; - static NSMutableArray *urlSchemes; - - dispatch_once(&fetchBundleOnce, ^{ - NSBundle *mainBundle = [NSBundle mainBundle]; - urlSchemes = [[NSMutableArray alloc] init]; - for (NSDictionary *fields in [mainBundle objectForInfoDictionaryKey:@"CFBundleURLTypes"]) { - NSArray *schemesForType = fields[@"CFBundleURLSchemes"]; - if (schemesForType) { - [urlSchemes addObjectsFromArray:schemesForType]; - } - } - }); - - if (urlSchemes.count > 0) { - parameters[@"url_schemes"] = [FBSDKBasicUtility JSONStringForObject:urlSchemes error:NULL invalidObjectHandler:NULL]; - } - - return parameters; -} - -+ (NSString *)advertiserID -{ - if (!FBSDKSettings.isAdvertiserIDCollectionEnabled) { - return nil; - } - - NSString *result = nil; - - Class ASIdentifierManagerClass = fbsdkdfl_ASIdentifierManagerClass(); - if ([ASIdentifierManagerClass class]) { - ASIdentifierManager *manager = [ASIdentifierManagerClass sharedManager]; - result = manager.advertisingIdentifier.UUIDString; - } - - return result; -} - -+ (FBSDKAdvertisingTrackingStatus)advertisingTrackingStatus -{ - static dispatch_once_t fetchAdvertisingTrackingStatusOnce; - static FBSDKAdvertisingTrackingStatus status; - - dispatch_once(&fetchAdvertisingTrackingStatusOnce, ^{ - status = FBSDKAdvertisingTrackingUnspecified; - Class ASIdentifierManagerClass = fbsdkdfl_ASIdentifierManagerClass(); - if ([ASIdentifierManagerClass class]) { - ASIdentifierManager *manager = [ASIdentifierManagerClass sharedManager]; - if (manager) { - status = manager.advertisingTrackingEnabled ? FBSDKAdvertisingTrackingAllowed : FBSDKAdvertisingTrackingDisallowed; - } - } - }); - - return status; -} - -+ (NSString *)attributionID -{ -#if TARGET_OS_TV - return nil; -#else - return [UIPasteboard pasteboardWithName:@"fb_app_attribution" create:NO].string; -#endif -} - -#pragma mark - Internal, for testing - -+ (void)clearLibraryFiles -{ - [[NSFileManager defaultManager] removeItemAtPath:[[self class] persistenceFilePath:FBSDK_APPEVENTSUTILITY_ANONYMOUSIDFILENAME] - error:NULL]; - [[NSFileManager defaultManager] removeItemAtPath:[[self class] persistenceFilePath:FBSDKTimeSpentFilename] - error:NULL]; -} - -+ (void)ensureOnMainThread:(NSString *)methodName className:(NSString *)className -{ - FBSDKConditionalLog([NSThread isMainThread], - FBSDKLoggingBehaviorDeveloperErrors, - @"*** <%@, %@> is not called on the main thread. This can lead to errors.", - methodName, - className); -} - -+ (NSString *)flushReasonToString:(FBSDKAppEventsFlushReason)flushReason -{ - NSString *result = @"Unknown"; - switch (flushReason) { - case FBSDKAppEventsFlushReasonExplicit: - result = @"Explicit"; - break; - case FBSDKAppEventsFlushReasonTimer: - result = @"Timer"; - break; - case FBSDKAppEventsFlushReasonSessionChange: - result = @"SessionChange"; - break; - case FBSDKAppEventsFlushReasonPersistedEvents: - result = @"PersistedEvents"; - break; - case FBSDKAppEventsFlushReasonEventThreshold: - result = @"EventCountThreshold"; - break; - case FBSDKAppEventsFlushReasonEagerlyFlushingEvent: - result = @"EagerlyFlushingEvent"; - break; - } - return result; -} - -+ (void)logAndNotify:(NSString *)msg -{ - [[self class] logAndNotify:msg allowLogAsDeveloperError:YES]; -} - -+ (void)logAndNotify:(NSString *)msg allowLogAsDeveloperError:(BOOL)allowLogAsDeveloperError -{ - NSString *behaviorToLog = FBSDKLoggingBehaviorAppEvents; - if (allowLogAsDeveloperError) { - if ([FBSDKSettings.loggingBehaviors containsObject:FBSDKLoggingBehaviorDeveloperErrors]) { - // Rather than log twice, prefer 'DeveloperErrors' if it's set over AppEvents. - behaviorToLog = FBSDKLoggingBehaviorDeveloperErrors; - } - } - - [FBSDKLogger singleShotLogEntry:behaviorToLog logEntry:msg]; - NSError *error = [FBSDKError errorWithCode:FBSDKErrorAppEventsFlush message:msg]; - [[NSNotificationCenter defaultCenter] postNotificationName:FBSDKAppEventsLoggingResultNotification object:error]; -} - -+ (BOOL)matchString:(NSString *)string - firstCharacterSet:(NSCharacterSet *)firstCharacterSet -restOfStringCharacterSet:(NSCharacterSet *)restOfStringCharacterSet -{ - if (string.length == 0) { - return NO; - } - for (NSUInteger i = 0; i < string.length; i++) { - const unichar c = [string characterAtIndex:i]; - if (i == 0) { - if (![firstCharacterSet characterIsMember:c]) { - return NO; - } - } else { - if (![restOfStringCharacterSet characterIsMember:c]) { - return NO; - } - } - } - return YES; -} - -+ (BOOL)regexValidateIdentifier:(NSString *)identifier -{ - static NSCharacterSet *firstCharacterSet; - static NSCharacterSet *restOfStringCharacterSet; - static dispatch_once_t onceToken; - static NSMutableSet *cachedIdentifiers; - dispatch_once(&onceToken, ^{ - NSMutableCharacterSet *mutableSet = [NSMutableCharacterSet alphanumericCharacterSet]; - [mutableSet addCharactersInString:@"_"]; - firstCharacterSet = [mutableSet copy]; - - [mutableSet addCharactersInString:@"- "]; - restOfStringCharacterSet = [mutableSet copy]; - cachedIdentifiers = [[NSMutableSet alloc] init]; - }); - - @synchronized(self) { - if (![cachedIdentifiers containsObject:identifier]) { - if ([self matchString:identifier - firstCharacterSet:firstCharacterSet - restOfStringCharacterSet:restOfStringCharacterSet]) { - [cachedIdentifiers addObject:identifier]; - } else { - return NO; - } - } - } - return YES; -} - -+ (BOOL)validateIdentifier:(NSString *)identifier -{ - if (identifier == nil || identifier.length == 0 || identifier.length > FBSDK_APPEVENTSUTILITY_MAX_IDENTIFIER_LENGTH || ![[self class] regexValidateIdentifier:identifier]) { - [[self class] logAndNotify:[NSString stringWithFormat:@"Invalid identifier: '%@'. Must be between 1 and %d characters, and must be contain only alphanumerics, _, - or spaces, starting with alphanumeric or _.", - identifier, FBSDK_APPEVENTSUTILITY_MAX_IDENTIFIER_LENGTH]]; - return NO; - } - - return YES; -} - -// Given a candidate token (which may be nil), find the real token to string to use. -// Precedence: 1) provided token, 2) current token, 3) app | client token, 4) fully anonymous session. -+ (NSString *)tokenStringToUseFor:(FBSDKAccessToken *)token -{ - if (!token) { - token = [FBSDKAccessToken currentAccessToken]; - } - - NSString *appID = [FBSDKAppEvents loggingOverrideAppID] ?: token.appID ?: [FBSDKSettings appID]; - NSString *tokenString = token.tokenString; - if (!tokenString || ![appID isEqualToString:token.appID]) { - // If there's an logging override app id present, then we don't want to use the client token since the client token - // is intended to match up with the primary app id (and AppEvents doesn't require a client token). - NSString *clientTokenString = [FBSDKSettings clientToken]; - if (clientTokenString && appID && [appID isEqualToString:token.appID]){ - tokenString = [NSString stringWithFormat:@"%@|%@", appID, clientTokenString]; - } else if (appID) { - tokenString = nil; - } - } - return tokenString; -} - -+ (long)unixTimeNow -{ - return (long)round([NSDate date].timeIntervalSince1970); -} - -+ (id)getVariable:(NSString *)variableName fromInstance:(NSObject *)instance { - Ivar ivar = class_getInstanceVariable([instance class], variableName.UTF8String); - if (ivar != NULL) { - const char *encoding = ivar_getTypeEncoding(ivar); - if (encoding != NULL && encoding[0] == '@') { - return object_getIvar(instance, ivar); - } - } - - return nil; -} - -+ (NSNumber *)getNumberValue:(NSString *)text { - NSNumber *value = @0; - - NSLocale *locale = [NSLocale currentLocale]; - - NSString *ds = [locale objectForKey:NSLocaleDecimalSeparator] ?: @"."; - NSString *gs = [locale objectForKey:NSLocaleGroupingSeparator] ?: @","; - NSString *separators = [ds stringByAppendingString:gs]; - - NSString *regex = [NSString stringWithFormat:@"[+-]?([0-9]+[%1$@]?)?[%1$@]?([0-9]+[%1$@]?)+", separators]; - NSRegularExpression *re = [NSRegularExpression regularExpressionWithPattern:regex - options:0 - error:nil]; - NSTextCheckingResult *match = [re firstMatchInString:text - options:0 - range:NSMakeRange(0, text.length)]; - if (match) { - NSString *validText = [text substringWithRange:match.range]; - NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; - formatter.locale = locale; - formatter.numberStyle = NSNumberFormatterDecimalStyle; - - value = [formatter numberFromString:validText]; - if (nil == value) { - value = @(validText.floatValue); - } - } - - return value; -} - -+ (BOOL)isDebugBuild { -#if TARGET_IPHONE_SIMULATOR - return YES; -#else - BOOL isDevelopment = NO; - - // There is no provisioning profile in AppStore Apps. - @try - { - NSData *data = [NSData dataWithContentsOfFile:[NSBundle.mainBundle pathForResource:@"embedded" ofType:@"mobileprovision"]]; - if (data) { - const char *bytes = [data bytes]; - NSMutableString *profile = [[NSMutableString alloc] initWithCapacity:data.length]; - for (NSUInteger i = 0; i < data.length; i++) { - [profile appendFormat:@"%c", bytes[i]]; - } - // Look for debug value, if detected we're in a development build. - NSString *cleared = [[profile componentsSeparatedByCharactersInSet:NSCharacterSet.whitespaceAndNewlineCharacterSet] componentsJoinedByString:@""]; - isDevelopment = ([cleared rangeOfString:@"get-task-allow"].length > 0); - } - - return isDevelopment; - } - @catch(NSException *exception) - { - - } - - return NO; -#endif -} - -+ (BOOL)isSensitiveUserData:(NSString *)text -{ - if (0 == text.length) { - return NO; - } - - return [self isEmailAddress:text] || [self isCreditCardNumber:text]; -} - -+ (BOOL)isCreditCardNumber:(NSString *)text -{ - text = [[text componentsSeparatedByCharactersInSet:[NSCharacterSet.decimalDigitCharacterSet invertedSet]] componentsJoinedByString:@""]; - - if (text.doubleValue == 0) { - return NO; - } - - if (text.length < 9 || text.length > 21) { - return NO; - } - - const char *chars = [text cStringUsingEncoding:NSUTF8StringEncoding]; - if (NULL == chars) { - return NO; - } - - BOOL isOdd = YES; - int oddSum = 0; - int evenSum = 0; - - for (int i = (int)text.length - 1; i >= 0; i--) { - int digit = chars[i] - '0'; - - if (isOdd) - oddSum += digit; - else - evenSum += digit / 5 + (2 * digit) % 10; - - isOdd = !isOdd; - } - - return ((oddSum + evenSum) % 10 == 0); -} - -+ (BOOL)isEmailAddress:(NSString *)text -{ - NSString *pattern = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"; - NSRegularExpression *regex = [[NSRegularExpression alloc] initWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:nil]; - NSUInteger matches = [regex numberOfMatchesInString:text options:0 range:NSMakeRange(0, [text length])]; - return matches > 0; -} - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKHybridAppEventsScriptMessageHandler.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKHybridAppEventsScriptMessageHandler.h deleted file mode 100644 index 79eb205ef0..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKHybridAppEventsScriptMessageHandler.h +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import -#import - -NS_SWIFT_NAME(HybridAppEventsScriptMessageHandler) -@interface FBSDKHybridAppEventsScriptMessageHandler : NSObject - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKHybridAppEventsScriptMessageHandler.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKHybridAppEventsScriptMessageHandler.m deleted file mode 100644 index 40709d931a..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKHybridAppEventsScriptMessageHandler.m +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKHybridAppEventsScriptMessageHandler.h" - -#if SWIFT_PACKAGE -#import "FBSDKAppEvents.h" -#else -#import -#endif - -#import "FBSDKAppEvents+Internal.h" - -NSString *const FBSDKAppEventsWKWebViewMessagesPixelReferralParamKey = @"_fb_pixel_referral_id"; - -@class WKUserContentController; - -@implementation FBSDKHybridAppEventsScriptMessageHandler - -- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message { - - if ([message.name isEqualToString:FBSDKAppEventsWKWebViewMessagesHandlerKey]) { - NSString *event = message.body[FBSDKAppEventsWKWebViewMessagesEventKey]; - if (event.length > 0) { - NSString *stringedParams = message.body[FBSDKAppEventsWKWebViewMessagesParamsKey]; - NSMutableDictionary *params = nil; - NSError *jsonParseError = nil; - if ([stringedParams isKindOfClass:[NSString class]]) { - params = [NSJSONSerialization JSONObjectWithData:[stringedParams dataUsingEncoding:NSUTF8StringEncoding] - options:NSJSONReadingMutableContainers - error:&jsonParseError - ]; - } - NSString *pixelID = message.body[FBSDKAppEventsWKWebViewMessagesPixelIDKey]; - if (pixelID == nil) { - [FBSDKAppEventsUtility logAndNotify:@"Can't bridge an event without a referral Pixel ID. Check your webview Pixel configuration."]; - return; - } - if (jsonParseError != nil || ![params isKindOfClass:[NSDictionary class]] || params == nil) { - [FBSDKAppEventsUtility logAndNotify:@"Could not find parameters for your Pixel request. Check your webview Pixel configuration."]; - params = [[NSMutableDictionary alloc] initWithObjectsAndKeys:pixelID, FBSDKAppEventsWKWebViewMessagesPixelReferralParamKey, nil]; - } - else { - params[FBSDKAppEventsWKWebViewMessagesPixelReferralParamKey] = pixelID; - } - [FBSDKAppEvents logInternalEvent:event - parameters:params - isImplicitlyLogged:NO]; - } - } -} - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKPaymentObserver.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKPaymentObserver.h deleted file mode 100644 index aae6d63fe1..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKPaymentObserver.h +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -// Class to encapsulate implicit logging of purchase events -NS_SWIFT_NAME(PaymentObserver) -@interface FBSDKPaymentObserver : NSObject -+ (void)startObservingTransactions; -+ (void)stopObservingTransactions; -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKPaymentObserver.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKPaymentObserver.m deleted file mode 100644 index 95ee5639fb..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKPaymentObserver.m +++ /dev/null @@ -1,547 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKPaymentObserver.h" - -#import - -#import "FBSDKCoreKit+Internal.h" - -#import "FBSDKAppEvents+Internal.h" -#import "FBSDKDynamicFrameworkLoader.h" -#import "FBSDKLogger.h" -#import "FBSDKSettings.h" - -static NSString *const FBSDKPaymentObserverOriginalTransactionKey = @"com.facebook.appevents.PaymentObserver.originalTransaction"; -static NSString *const FBSDKPaymentObserverDelimiter = @","; - -static NSString *const FBSDKAppEventParameterImplicitlyLoggedPurchase = @"_implicitlyLogged"; -static NSString *const FBSDKAppEventNamePurchaseFailed = @"fb_mobile_purchase_failed"; -static NSString *const FBSDKAppEventNamePurchaseRestored = @"fb_mobile_purchase_restored"; -static NSString *const FBSDKAppEventParameterNameInAppPurchaseType = @"fb_iap_product_type"; -static NSString *const FBSDKAppEventParameterNameProductTitle = @"fb_content_title"; -static NSString *const FBSDKAppEventParameterNameOriginalTransactionID = @"fb_original_transaction_id"; -static NSString *const FBSDKAppEventParameterNameTransactionID = @"fb_transaction_id"; -static NSString *const FBSDKAppEventParameterNameTransactionDate = @"fb_transaction_date"; -static NSString *const FBSDKAppEventParameterNameSubscriptionPeriod = @"fb_iap_subs_period"; -static NSString *const FBSDKAppEventParameterNameIsStartTrial = @"fb_iap_is_start_trial"; -static NSString *const FBSDKAppEventParameterNameHasFreeTrial = @"fb_iap_has_free_trial"; -static NSString *const FBSDKAppEventParameterNameTrialPeriod = @"fb_iap_trial_period"; -static NSString *const FBSDKAppEventParameterNameTrialPrice = @"fb_iap_trial_price"; -static int const FBSDKMaxParameterValueLength = 100; -static NSMutableArray *g_pendingRequestors; - -static NSString *const FBSDKGateKeeperAppEventsIfAutoLogSubs = @"app_events_if_auto_log_subs"; - -@interface FBSDKPaymentProductRequestor : NSObject - -@property (nonatomic, retain) SKPaymentTransaction *transaction; - -- (instancetype)initWithTransaction:(SKPaymentTransaction*)transaction; -- (void)resolveProducts; - -@end - -@interface FBSDKPaymentObserver() -@end - -@implementation FBSDKPaymentObserver -{ - BOOL _observingTransactions; -} - -+ (void)startObservingTransactions -{ - [[self singleton] startObservingTransactions]; -} - -+ (void)stopObservingTransactions -{ - [[self singleton] stopObservingTransactions]; -} - -#pragma mark - Internal Methods - -+ (FBSDKPaymentObserver *)singleton -{ - static dispatch_once_t pred; - static FBSDKPaymentObserver *shared = nil; - - dispatch_once(&pred, ^{ - shared = [[FBSDKPaymentObserver alloc] init]; - }); - return shared; -} - -- (instancetype) init -{ - self = [super init]; - if (self) { - _observingTransactions = NO; - } - return self; -} - -- (void)startObservingTransactions -{ - @synchronized (self) { - if (!_observingTransactions) { - [(SKPaymentQueue *)[fbsdkdfl_SKPaymentQueueClass() defaultQueue] addTransactionObserver:self]; - _observingTransactions = YES; - } - } -} - -- (void)stopObservingTransactions -{ - @synchronized (self) { - if (_observingTransactions) { - [(SKPaymentQueue *)[fbsdkdfl_SKPaymentQueueClass() defaultQueue] removeTransactionObserver:self]; - _observingTransactions = NO; - } - } -} - -- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions -{ - for (SKPaymentTransaction *transaction in transactions) { - switch (transaction.transactionState) { - case SKPaymentTransactionStatePurchasing: - case SKPaymentTransactionStatePurchased: - case SKPaymentTransactionStateFailed: - case SKPaymentTransactionStateRestored: - [self handleTransaction:transaction]; - break; - case SKPaymentTransactionStateDeferred: - break; - } - } -} - -- (void)handleTransaction:(SKPaymentTransaction *)transaction -{ - FBSDKPaymentProductRequestor *productRequest = [[FBSDKPaymentProductRequestor alloc] initWithTransaction:transaction]; - [productRequest resolveProducts]; -} - -@end - -@interface FBSDKPaymentProductRequestor() -@property (nonatomic, retain) SKProductsRequest *productRequest; -@end - -@implementation FBSDKPaymentProductRequestor -{ - NSMutableSet *_originalTransactionSet; - NSSet *_eventsWithReceipt; - NSDateFormatter *_formatter; -} - -+ (void)initialize -{ - if ([self class] == [FBSDKPaymentProductRequestor class]) { - g_pendingRequestors = [[NSMutableArray alloc] init]; - } -} - -- (instancetype)initWithTransaction:(SKPaymentTransaction*)transaction -{ - self = [super init]; - if (self) { - _transaction = transaction; - _formatter = [[NSDateFormatter alloc] init]; - _formatter.dateFormat = @"yyyy-MM-dd HH:mm:ssZ"; - NSString *data = [[NSUserDefaults standardUserDefaults] stringForKey:FBSDKPaymentObserverOriginalTransactionKey]; - _eventsWithReceipt = [NSSet setWithArray:@[FBSDKAppEventNamePurchased, FBSDKAppEventNameSubscribe, - FBSDKAppEventNameStartTrial]]; - if (data) { - _originalTransactionSet = [NSMutableSet setWithArray:[data componentsSeparatedByString:FBSDKPaymentObserverDelimiter]]; - } else { - _originalTransactionSet = [[NSMutableSet alloc] init]; - } - } - return self; -} - -- (void)setProductRequest:(SKProductsRequest *)productRequest -{ - if (productRequest != _productRequest) { - if (_productRequest) { - _productRequest.delegate = nil; - } - _productRequest = productRequest; - } -} - -- (void)resolveProducts -{ - NSString *productId = self.transaction.payment.productIdentifier; - NSSet *productIdentifiers = [NSSet setWithObjects:productId, nil]; - self.productRequest = [[fbsdkdfl_SKProductsRequestClass() alloc] initWithProductIdentifiers:productIdentifiers]; - self.productRequest.delegate = self; - @synchronized(g_pendingRequestors) { - [g_pendingRequestors addObject:self]; - } - [self.productRequest start]; -} - -- (NSString *)getTruncatedString:(NSString *)inputString -{ - if (!inputString) { - return @""; - } - - return inputString.length <= FBSDKMaxParameterValueLength ? inputString : [inputString substringToIndex:FBSDKMaxParameterValueLength]; -} - -- (void)logTransactionEvent:(SKProduct *)product -{ - if ([self isSubscription:product] && - [FBSDKGateKeeperManager boolForKey:FBSDKGateKeeperAppEventsIfAutoLogSubs - defaultValue:NO]) { - [self logImplicitSubscribeTransaction:self.transaction ofProduct:product]; - } else { - [self logImplicitPurchaseTransaction:self.transaction ofProduct:product]; - } -} - -- (BOOL)isSubscription:(SKProduct *)product -{ -#if !TARGET_OS_TV -#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_11_1 - if (@available(iOS 11.2, *)) { - return (product.subscriptionPeriod != nil) && ((unsigned long)product.subscriptionPeriod.numberOfUnits > 0); - } -#endif -#endif - return NO; -} - -- (NSMutableDictionary *)getEventParametersOfProduct:(SKProduct *)product - withTransaction:(SKPaymentTransaction *)transaction -{ - NSString *transactionID = nil; - NSString *transactionDate = nil; - switch (transaction.transactionState) { - case SKPaymentTransactionStatePurchasing: - break; - case SKPaymentTransactionStatePurchased: - transactionID = self.transaction.transactionIdentifier; - transactionDate = [_formatter stringFromDate:self.transaction.transactionDate]; - break; - case SKPaymentTransactionStateFailed: - break; - case SKPaymentTransactionStateRestored: - transactionDate = [_formatter stringFromDate:self.transaction.transactionDate]; - break; - default: break; - } - SKPayment *payment = transaction.payment; - NSMutableDictionary *eventParameters = [NSMutableDictionary dictionaryWithDictionary: @{ - FBSDKAppEventParameterNameContentID: payment.productIdentifier ?: @"", - FBSDKAppEventParameterNameNumItems: @(payment.quantity), - FBSDKAppEventParameterNameTransactionDate: transactionDate ?: @"", - }]; - if (product) { - [eventParameters addEntriesFromDictionary: @{ - FBSDKAppEventParameterNameCurrency: [product.priceLocale objectForKey:NSLocaleCurrencyCode], - FBSDKAppEventParameterNameNumItems: @(payment.quantity), - FBSDKAppEventParameterNameProductTitle: [self getTruncatedString:product.localizedTitle], - FBSDKAppEventParameterNameDescription: [self getTruncatedString:product.localizedDescription], - }]; - if (transactionID) { - eventParameters[FBSDKAppEventParameterNameTransactionID] = transactionID; - } - } - -#if !TARGET_OS_TV -#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_11_1 - if (@available(iOS 11.2, *)) { - if ([self isSubscription:product]) { - // subs inapp - eventParameters[FBSDKAppEventParameterNameSubscriptionPeriod] = [self durationOfSubscriptionPeriod:product.subscriptionPeriod]; - eventParameters[FBSDKAppEventParameterNameInAppPurchaseType] = @"subs"; - eventParameters[FBSDKAppEventParameterNameIsStartTrial] = [self isStartTrial:transaction ofProduct:product] ? @"1" : @"0"; - // trial information for subs - SKProductDiscount *discount = product.introductoryPrice; - if (discount) { - if (discount.paymentMode == SKProductDiscountPaymentModeFreeTrial) { - eventParameters[FBSDKAppEventParameterNameHasFreeTrial] = @"1"; - } else { - eventParameters[FBSDKAppEventParameterNameHasFreeTrial] = @"0"; - } - eventParameters[FBSDKAppEventParameterNameTrialPeriod] = [self durationOfSubscriptionPeriod:discount.subscriptionPeriod]; - eventParameters[FBSDKAppEventParameterNameTrialPrice] = discount.price; - } - } else { - eventParameters[FBSDKAppEventParameterNameInAppPurchaseType] = @"inapp"; - } - } -#endif -#endif - return eventParameters; -} - -- (void)appendOriginalTransactionID:(NSString *)transactionID -{ - if (!transactionID) { - return; - } - [_originalTransactionSet addObject:transactionID]; - [[NSUserDefaults standardUserDefaults] setObject:[[_originalTransactionSet allObjects] componentsJoinedByString:FBSDKPaymentObserverDelimiter] - forKey:FBSDKPaymentObserverOriginalTransactionKey]; -} - -- (void)clearOriginalTransactionID:(NSString *)transactionID -{ - if (!transactionID) { - return; - } - [_originalTransactionSet removeObject:transactionID]; - [[NSUserDefaults standardUserDefaults] setObject:[[_originalTransactionSet allObjects] componentsJoinedByString:FBSDKPaymentObserverDelimiter] - forKey:FBSDKPaymentObserverOriginalTransactionKey]; -} - -- (BOOL)isStartTrial:(SKPaymentTransaction *)transaction - ofProduct:(SKProduct *)product -{ -#if !TARGET_OS_TV -#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_11_1 -#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_11_4 -#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_12_1 - // promotional offer starting from iOS 12.2 - if (@available(iOS 12.2, *)) { - SKPaymentDiscount *paymentDiscount = transaction.payment.paymentDiscount; - if (paymentDiscount) { - NSArray *discounts = product.discounts; - for (SKProductDiscount *discount in discounts) { - if (discount.paymentMode == SKProductDiscountPaymentModeFreeTrial && - [paymentDiscount.identifier isEqualToString:discount.identifier]) { - return YES; - } - } - } - } -#endif -#endif - // introductory offer starting from iOS 11.2 - if (@available(iOS 11.2, *)) { - if (product.introductoryPrice && - product.introductoryPrice.paymentMode == SKProductDiscountPaymentModeFreeTrial) { - NSString *originalTransactionID = transaction.originalTransaction.transactionIdentifier; - // only consider the very first trial transaction as start trial - if (!originalTransactionID) { - return YES; - } - } - } -#endif -#endif - return NO; -} - -- (BOOL)hasStartTrial:(SKProduct *)product -{ -#if !TARGET_OS_TV -#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_11_1 -#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_11_4 -#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_12_1 - // promotional offer starting from iOS 12.2 - if (@available(iOS 12.2, *)) { - NSArray *discounts = product.discounts; - for (SKProductDiscount *discount in discounts) { - if (discount.paymentMode == SKProductDiscountPaymentModeFreeTrial) { - return YES; - } - } - } -#endif -#endif - // introductory offer starting from iOS 11.2 - if (@available(iOS 11.2, *)) { - if (product.introductoryPrice && (product.introductoryPrice.paymentMode == SKProductDiscountPaymentModeFreeTrial)) { - return YES; - } - } -#endif -#endif - return NO; -} - -- (NSString *)durationOfSubscriptionPeriod:(id)subcriptionPeriod -{ -#if !TARGET_OS_TV -#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_11_1 - if (@available(iOS 11.2, *)) { - if (subcriptionPeriod && [subcriptionPeriod isKindOfClass:[SKProductSubscriptionPeriod class]]) { - SKProductSubscriptionPeriod *period = (SKProductSubscriptionPeriod *)subcriptionPeriod; - NSString *unit = nil; - switch (period.unit) { - case SKProductPeriodUnitDay: unit = @"D"; break; - case SKProductPeriodUnitWeek: unit = @"W"; break; - case SKProductPeriodUnitMonth: unit = @"M"; break; - case SKProductPeriodUnitYear: unit = @"Y"; break; - } - return [NSString stringWithFormat:@"P%lu%@", (unsigned long)period.numberOfUnits, unit]; - } - } -#endif -#endif - return nil; -} - -- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response -{ - NSArray* products = response.products; - NSArray* invalidProductIdentifiers = response.invalidProductIdentifiers; - if (products.count + invalidProductIdentifiers.count != 1) { - [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorAppEvents - formatString:@"FBSDKPaymentObserver: Expect to resolve one product per request"]; - } - SKProduct *product = nil; - if (products.count) { - product = products[0]; - } - [self logTransactionEvent:product]; -} - -- (void)requestDidFinish:(SKRequest *)request -{ - [self cleanUp]; -} - -- (void)request:(SKRequest *)request didFailWithError:(NSError *)error -{ - [self logTransactionEvent:nil]; - [self cleanUp]; -} - -- (void)cleanUp -{ - @synchronized(g_pendingRequestors) { - [g_pendingRequestors removeObject:self]; - } -} - -- (void)logImplicitSubscribeTransaction:(SKPaymentTransaction *)transaction - ofProduct:(SKProduct *)product -{ - NSString *eventName = nil; - NSString *originalTransactionID = transaction.originalTransaction.transactionIdentifier; - switch (transaction.transactionState) { - case SKPaymentTransactionStatePurchasing: - eventName = @"SubscriptionInitiatedCheckout"; - break; - case SKPaymentTransactionStatePurchased: - if ([self isStartTrial:transaction ofProduct:product]) { - eventName = FBSDKAppEventNameStartTrial; - [self clearOriginalTransactionID:originalTransactionID]; - } else { - if (originalTransactionID && [_originalTransactionSet containsObject:originalTransactionID]) { - return; - } - eventName = FBSDKAppEventNameSubscribe; - [self appendOriginalTransactionID:(originalTransactionID ?: transaction.transactionIdentifier)]; - } - break; - case SKPaymentTransactionStateFailed: - eventName = @"SubscriptionFailed"; - break; - case SKPaymentTransactionStateRestored: - eventName = @"SubscriptionRestore"; - break; - case SKPaymentTransactionStateDeferred: - return; - } - - double totalAmount = 0; - if (product) { - totalAmount = transaction.payment.quantity * product.price.doubleValue; - } - - [self logImplicitTransactionEvent:eventName - valueToSum:totalAmount - parameters:[self getEventParametersOfProduct:product withTransaction:transaction]]; -} - -- (void)logImplicitPurchaseTransaction:(SKPaymentTransaction *)transaction - ofProduct:(SKProduct *)product -{ - NSString *eventName = nil; - switch (transaction.transactionState) { - case SKPaymentTransactionStatePurchasing: - eventName = FBSDKAppEventNameInitiatedCheckout; - break; - case SKPaymentTransactionStatePurchased: - eventName = FBSDKAppEventNamePurchased; - break; - case SKPaymentTransactionStateFailed: - eventName = FBSDKAppEventNamePurchaseFailed; - break; - case SKPaymentTransactionStateRestored: - eventName = FBSDKAppEventNamePurchaseRestored; - break; - case SKPaymentTransactionStateDeferred: - return; - } - - double totalAmount = 0; - if (product) { - totalAmount = transaction.payment.quantity * product.price.doubleValue; - } - - [self logImplicitTransactionEvent:eventName - valueToSum:totalAmount - parameters:[self getEventParametersOfProduct:product withTransaction:transaction]]; -} - -- (void)logImplicitTransactionEvent:(NSString *)eventName - valueToSum:(double)valueToSum - parameters:(NSDictionary *)parameters -{ - NSMutableDictionary *eventParameters = [NSMutableDictionary dictionaryWithDictionary:parameters]; - - if ([_eventsWithReceipt containsObject:eventName]) { - NSData* receipt = [self fetchDeviceReceipt]; - if (receipt) { - NSString *base64encodedReceipt = [receipt base64EncodedStringWithOptions:0]; - eventParameters[@"receipt_data"] = base64encodedReceipt; - } - } - - eventParameters[FBSDKAppEventParameterImplicitlyLoggedPurchase] = @"1"; - [FBSDKAppEvents logEvent:eventName - valueToSum:valueToSum - parameters:eventParameters]; - - // Unless the behavior is set to only allow explicit flushing, we go ahead and flush, since purchase events - // are relatively rare and relatively high value and worth getting across on wire right away. - if ([FBSDKAppEvents flushBehavior] != FBSDKAppEventsFlushBehaviorExplicitOnly) { - [[FBSDKAppEvents singleton] flushForReason:FBSDKAppEventsFlushReasonEagerlyFlushingEvent]; - } -} - -// Fetch the current receipt for this application. -- (NSData*)fetchDeviceReceipt -{ - NSURL *receiptURL = [NSBundle bundleForClass:[self class]].appStoreReceiptURL; - NSData *receipt = [NSData dataWithContentsOfURL:receiptURL]; - return receipt; -} - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKTimeSpentData.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKTimeSpentData.h deleted file mode 100644 index 0eb583e6c4..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKTimeSpentData.h +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -FOUNDATION_EXPORT NSString *const FBSDKTimeSpentFilename; - -// Class to encapsulate persisting of time spent data collected by [FBSDKAppEvents activateApp]. The activate app App Event is -// logged when restore: is called with sufficient time since the last deactivation. -NS_SWIFT_NAME(TimeSpentData) -@interface FBSDKTimeSpentData : NSObject - -+ (void)suspend; -+ (void)restore:(BOOL)calledFromActivateApp; - -+ (void)setSourceApplication:(NSString *)sourceApplication openURL:(NSURL *)url; -+ (void)setSourceApplication:(NSString *)sourceApplication isFromAppLink:(BOOL)isFromAppLink; -+ (void)registerAutoResetSourceApplication; - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKTimeSpentData.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKTimeSpentData.m deleted file mode 100644 index d57c7e9bcb..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKTimeSpentData.m +++ /dev/null @@ -1,319 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKTimeSpentData.h" - -#import "FBSDKAppEvents+Internal.h" -#import "FBSDKAppEventsUtility.h" -#import "FBSDKInternalUtility.h" -#import "FBSDKLogger.h" -#import "FBSDKServerConfiguration.h" -#import "FBSDKServerConfigurationManager.h" -#import "FBSDKSettings.h" - - -// Filename and keys for session length -NSString *const FBSDKTimeSpentFilename = @"com-facebook-sdk-AppEventsTimeSpent.json"; -static NSString *const FBSDKTimeSpentPersistKeySessionSecondsSpent = @"secondsSpentInCurrentSession"; -static NSString *const FBSDKTimeSpentPersistKeySessionNumInterruptions = @"numInterruptions"; -static NSString *const FBSDKTimeSpentPersistKeyLastSuspendTime = @"lastSuspendTime"; -static NSString *const FBSDKTimeSpentPersistKeySessionID = @"sessionID"; - -static NSString *const FBSDKAppEventNameActivatedApp = @"fb_mobile_activate_app"; -static NSString *const FBSDKAppEventNameDeactivatedApp = @"fb_mobile_deactivate_app"; -static NSString *const FBSDKAppEventParameterNameSessionInterruptions = @"fb_mobile_app_interruptions"; -static NSString *const FBSDKAppEventParameterNameTimeBetweenSessions = @"fb_mobile_time_between_sessions"; -static NSString *const FBSDKAppEventParameterNameSessionID = @"_session_id"; - - -static const int SECS_PER_MIN = 60; -static const int SECS_PER_HOUR = 60 * SECS_PER_MIN; -static const int SECS_PER_DAY = 24 * SECS_PER_HOUR; - -static NSString *g_sourceApplication; -static BOOL g_isOpenedFromAppLink; - -// Will be translated and displayed in App Insights. Need to maintain same number and value of quanta on the server. -static const long INACTIVE_SECONDS_QUANTA[] = -{ - 5 * SECS_PER_MIN, - 15 * SECS_PER_MIN, - 30 * SECS_PER_MIN, - 1 * SECS_PER_HOUR, - 6 * SECS_PER_HOUR, - 12 * SECS_PER_HOUR, - 1 * SECS_PER_DAY, - 2 * SECS_PER_DAY, - 3 * SECS_PER_DAY, - 7 * SECS_PER_DAY, - 14 * SECS_PER_DAY, - 21 * SECS_PER_DAY, - 28 * SECS_PER_DAY, - 60 * SECS_PER_DAY, - 90 * SECS_PER_DAY, - 120 * SECS_PER_DAY, - 150 * SECS_PER_DAY, - 180 * SECS_PER_DAY, - 365 * SECS_PER_DAY, - LONG_MAX, // keep as LONG_MAX to guarantee loop will terminate -}; - -/** - * This class encapsulates the notion of an app 'session' - the length of time that the user has - * spent in the app that can be considered a single usage of the app. Apps may be frequently interrupted - * do to other device activity, like a text message, so this class allows those interruptions to be smoothed - * out and the time actually spent in the app excluding this interruption time to be accumulated. Also, - * once a certain amount of time has gone by where the app is not in the foreground, we consider the - * session to be complete, and a new session beginning. When this occurs, we log a 'deactivate app' event - * with the duration of the previous session as the 'value' of this event, along with the number of - * interruptions from that previous session as an event parameter. - */ -@implementation FBSDKTimeSpentData -{ - BOOL _isCurrentlyLoaded; - BOOL _shouldLogActivateEvent; - BOOL _shouldLogDeactivateEvent; - long _secondsSpentInCurrentSession; - long _timeSinceLastSuspend; - int _numInterruptionsInCurrentSession; - long _lastRestoreTime; - long _lastSuspendTime; - NSString *_sessionID; -} - -// -// Public methods -// - -+ (void)suspend -{ - [self.singleton instanceSuspend]; -} - -+ (void)restore:(BOOL)calledFromActivateApp -{ - [self.singleton instanceRestore:calledFromActivateApp]; -} - -// -// Internal methods -// -+ (FBSDKTimeSpentData *)singleton -{ - static dispatch_once_t pred; - static FBSDKTimeSpentData *shared = nil; - - dispatch_once(&pred, ^{ - shared = [[FBSDKTimeSpentData alloc] init]; - }); - return shared; -} - -// Calculate and persist time spent data for this instance of the app activation. -- (void)instanceSuspend -{ - - [FBSDKAppEventsUtility ensureOnMainThread:NSStringFromSelector(_cmd) className:NSStringFromClass([self class])]; - if (!_isCurrentlyLoaded) { - FBSDKConditionalLog(YES, FBSDKLoggingBehaviorInformational, @"[FBSDKTimeSpentData suspend] invoked without corresponding restore"); - return; - } - - long now = [FBSDKAppEventsUtility unixTimeNow]; - long timeSinceRestore = now - _lastRestoreTime; - - // Can happen if the clock on the device is changed - if (timeSinceRestore < 0) { - [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorAppEvents - formatString:@"Clock skew detected"]; - timeSinceRestore = 0; - } - - _secondsSpentInCurrentSession += timeSinceRestore; - - NSDictionary *timeSpentData = - @{ - FBSDKTimeSpentPersistKeySessionSecondsSpent : @(_secondsSpentInCurrentSession), - FBSDKTimeSpentPersistKeySessionNumInterruptions : @(_numInterruptionsInCurrentSession), - FBSDKTimeSpentPersistKeyLastSuspendTime : @(now), - FBSDKTimeSpentPersistKeySessionID : _sessionID, - }; - - NSString *content = [FBSDKBasicUtility JSONStringForObject:timeSpentData error:NULL invalidObjectHandler:NULL]; - - [content writeToFile:[FBSDKBasicUtility persistenceFilePath:FBSDKTimeSpentFilename] - atomically:YES - encoding:NSASCIIStringEncoding - error:nil]; - - [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorAppEvents - formatString:@"FBSDKTimeSpentData Persist: %@", content]; - - _isCurrentlyLoaded = NO; -} - - -// Called during activation - either through an explicit 'activateApp' call or implicitly when the app is foregrounded. -// In both cases, we restore the persisted event data. In the case of the activateApp, we log an 'app activated' -// event if there's been enough time between the last deactivation and now. -- (void)instanceRestore:(BOOL)calledFromActivateApp -{ - - [FBSDKAppEventsUtility ensureOnMainThread:NSStringFromSelector(_cmd) className:NSStringFromClass([self class])]; - - // It's possible to call this multiple times during the time the app is in the foreground. If this is the case, - // just restore persisted data the first time. - if (!_isCurrentlyLoaded) { - - NSString *content = - [[NSString alloc] initWithContentsOfFile:[FBSDKBasicUtility persistenceFilePath:FBSDKTimeSpentFilename] - usedEncoding:nil - error:nil]; - - [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorAppEvents - formatString:@"FBSDKTimeSpentData Restore: %@", content]; - - long now = [FBSDKAppEventsUtility unixTimeNow]; - if (!content) { - - // Nothing persisted, so this is the first launch. - _sessionID = [NSUUID UUID].UUIDString; - _secondsSpentInCurrentSession = 0; - _numInterruptionsInCurrentSession = 0; - _lastSuspendTime = 0; - - // We want to log the app activation event on the first launch, but not the deactivate event - _shouldLogActivateEvent = YES; - _shouldLogDeactivateEvent = NO; - - } else { - - NSDictionary *results = [FBSDKBasicUtility objectForJSONString:content error:NULL]; - - _lastSuspendTime = [results[FBSDKTimeSpentPersistKeyLastSuspendTime] longValue]; - - _timeSinceLastSuspend = now - _lastSuspendTime; - _secondsSpentInCurrentSession = [results[FBSDKTimeSpentPersistKeySessionSecondsSpent] intValue]; - _sessionID = results[FBSDKTimeSpentPersistKeySessionID] ? : [NSUUID UUID].UUIDString; - _numInterruptionsInCurrentSession = [results[FBSDKTimeSpentPersistKeySessionNumInterruptions] intValue]; - _shouldLogActivateEvent = (_timeSinceLastSuspend > [FBSDKServerConfigurationManager cachedServerConfiguration].sessionTimoutInterval); - - // Other than the first launch, we always log the last session's deactivate with this session's activate. - _shouldLogDeactivateEvent = _shouldLogActivateEvent; - - if (!_shouldLogDeactivateEvent) { - // If we're not logging, then the time we spent deactivated is considered another interruption. But cap it - // so errant or test uses doesn't blow out the cardinality on the backend processing - _numInterruptionsInCurrentSession = MIN(_numInterruptionsInCurrentSession + 1, 200); - } - - } - - _lastRestoreTime = now; - _isCurrentlyLoaded = YES; - - if (calledFromActivateApp) { - // It's important to log deactivate first to reset sessionID - if (_shouldLogDeactivateEvent) { - [FBSDKAppEvents logEvent:FBSDKAppEventNameDeactivatedApp - valueToSum:_secondsSpentInCurrentSession - parameters:[self appEventsParametersForDeactivate]]; - - // We've logged the session stats, now reset. - _secondsSpentInCurrentSession = 0; - _numInterruptionsInCurrentSession = 0; - _sessionID = [NSUUID UUID].UUIDString; - } - - if (_shouldLogActivateEvent) { - [FBSDKAppEvents logEvent:FBSDKAppEventNameActivatedApp - parameters:[self appEventsParametersForActivate]]; - // Unless the behavior is set to only allow explicit flushing, we go ahead and flush. App launch - // events are critical to Analytics so we don't want to lose them. - if ([FBSDKAppEvents flushBehavior] != FBSDKAppEventsFlushBehaviorExplicitOnly) { - [[FBSDKAppEvents singleton] flushForReason:FBSDKAppEventsFlushReasonEagerlyFlushingEvent]; - } - } - } - } -} - -- (NSDictionary *)appEventsParametersForActivate -{ - return @{ - FBSDKAppEventParameterLaunchSource: [[self class] getSourceApplication], - FBSDKAppEventParameterNameSessionID: _sessionID, - }; -} - -- (NSDictionary *)appEventsParametersForDeactivate -{ - int quantaIndex = 0; - while (_timeSinceLastSuspend > INACTIVE_SECONDS_QUANTA[quantaIndex]) { - quantaIndex++; - } - - NSMutableDictionary *params = [@{ FBSDKAppEventParameterNameSessionInterruptions : @(_numInterruptionsInCurrentSession), - FBSDKAppEventParameterNameTimeBetweenSessions : [NSString stringWithFormat:@"session_quanta_%d", quantaIndex], - FBSDKAppEventParameterLaunchSource: [[self class] getSourceApplication], - FBSDKAppEventParameterNameSessionID : _sessionID ?: @"", - } mutableCopy]; - if (_lastSuspendTime) { - params[FBSDKAppEventParameterLogTime] = @(_lastSuspendTime); - } - return [params copy]; -} - -+ (void)setSourceApplication:(NSString *)sourceApplication openURL:(NSURL *)url -{ - [self setSourceApplication:sourceApplication - isFromAppLink:[FBSDKInternalUtility dictionaryFromFBURL:url][@"al_applink_data"] != nil]; -} - -+ (void)setSourceApplication:(NSString *)sourceApplication isFromAppLink:(BOOL)isFromAppLink -{ - g_isOpenedFromAppLink = isFromAppLink; - g_sourceApplication = sourceApplication; -} - -+ (NSString *)getSourceApplication -{ - NSString *openType = @"Unclassified"; - if (g_isOpenedFromAppLink) { - openType = @"AppLink"; - } - return (g_sourceApplication ? - [NSString stringWithFormat:@"%@(%@)", openType, g_sourceApplication] - : openType); -} - -+ (void)resetSourceApplication -{ - g_sourceApplication = nil; - g_isOpenedFromAppLink = NO; -} - -+ (void)registerAutoResetSourceApplication -{ - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(resetSourceApplication) - name:UIApplicationDidEnterBackgroundNotification - object:nil]; -} - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKUserDataStore.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKUserDataStore.h deleted file mode 100644 index c0266856be..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKUserDataStore.h +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -#import "FBSDKAppEvents+Internal.h" - -NS_ASSUME_NONNULL_BEGIN - -NS_SWIFT_NAME(UserDataStore) -@interface FBSDKUserDataStore : NSObject - -+ (void)setAndHashUserEmail:(nullable NSString *)email - firstName:(nullable NSString *)firstName - lastName:(nullable NSString *)lastName - phone:(nullable NSString *)phone - dateOfBirth:(nullable NSString *)dateOfBirth - gender:(nullable NSString *)gender - city:(nullable NSString *)city - state:(nullable NSString *)state - zip:(nullable NSString *)zip - country:(nullable NSString *)country; -+ (void)setAndHashData:(nullable NSString *)data - forType:(FBSDKAppEventUserDataType)type; -+ (void)setHashData:(nullable NSString *)hashData - forType:(FBSDKAppEventUserDataType)type; -+ (nullable NSString *)getHashedData; -+ (nullable NSString *)getHashedDataForType:(FBSDKAppEventUserDataType)type; -+ (void)clearDataForType:(FBSDKAppEventUserDataType)type; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKUserDataStore.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKUserDataStore.m deleted file mode 100644 index f49832e474..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKUserDataStore.m +++ /dev/null @@ -1,199 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKUserDataStore.h" - -#import "FBSDKAppEventsUtility.h" -#import "FBSDKLogger.h" -#import "FBSDKSettings.h" -#import "FBSDKUtility.h" - -static NSString *const FBSDKUserDataKey = @"com.facebook.appevents.UserDataStore.userData"; - -static NSMutableDictionary *hashedUserData; -static dispatch_queue_t serialQueue; - -@implementation FBSDKUserDataStore - -+ (void)initialize -{ - serialQueue = dispatch_queue_create("com.facebook.appevents.UserDataStore", DISPATCH_QUEUE_SERIAL); - NSString *userData = [[NSUserDefaults standardUserDefaults] stringForKey:FBSDKUserDataKey]; - if (userData) { - hashedUserData = (NSMutableDictionary *)[NSJSONSerialization JSONObjectWithData:[userData dataUsingEncoding:NSUTF8StringEncoding] - options:NSJSONReadingMutableContainers - error:nil]; - } - if (!hashedUserData) { - hashedUserData = [[NSMutableDictionary alloc] init]; - } -} - -+ (void)setAndHashUserEmail:(nullable NSString *)email - firstName:(nullable NSString *)firstName - lastName:(nullable NSString *)lastName - phone:(nullable NSString *)phone - dateOfBirth:(nullable NSString *)dateOfBirth - gender:(nullable NSString *)gender - city:(nullable NSString *)city - state:(nullable NSString *)state - zip:(nullable NSString *)zip - country:(nullable NSString *)country -{ - NSMutableDictionary *ud = [[NSMutableDictionary alloc] init]; - if (email) { - ud[FBSDKAppEventEmail] = [FBSDKUserDataStore encryptData:email type:FBSDKAppEventEmail]; - } - if (firstName) { - ud[FBSDKAppEventFirstName] = [FBSDKUserDataStore encryptData:firstName type:FBSDKAppEventFirstName]; - } - if (lastName) { - ud[FBSDKAppEventLastName] = [FBSDKUserDataStore encryptData:lastName type:FBSDKAppEventLastName]; - } - if (phone) { - ud[FBSDKAppEventPhone] = [FBSDKUserDataStore encryptData:phone type:FBSDKAppEventPhone]; - } - if (dateOfBirth) { - ud[FBSDKAppEventDateOfBirth] = [FBSDKUserDataStore encryptData:dateOfBirth type:FBSDKAppEventDateOfBirth]; - } - if (gender) { - ud[FBSDKAppEventGender] = [FBSDKUserDataStore encryptData:gender type:FBSDKAppEventGender]; - } - if (city) { - ud[FBSDKAppEventCity] = [FBSDKUserDataStore encryptData:city type:FBSDKAppEventCity]; - } - if (state) { - ud[FBSDKAppEventState] = [FBSDKUserDataStore encryptData:state type:FBSDKAppEventState]; - } - if (zip) { - ud[FBSDKAppEventZip] = [FBSDKUserDataStore encryptData:zip type:FBSDKAppEventZip]; - } - if (country) { - ud[FBSDKAppEventCountry] = [FBSDKUserDataStore encryptData:country type:FBSDKAppEventCountry]; - } - - dispatch_async(serialQueue, ^{ - hashedUserData = [ud mutableCopy]; - [[NSUserDefaults standardUserDefaults] setObject:[FBSDKUserDataStore stringByHashedData:hashedUserData] - forKey:FBSDKUserDataKey]; - }); -} - -+ (void)setAndHashData:(nullable NSString *)data - forType:(FBSDKAppEventUserDataType)type -{ - [FBSDKUserDataStore setHashData:[FBSDKUserDataStore encryptData:data type:type] - forType:type]; -} - -+ (void)setHashData:(nullable NSString *)hashData - forType:(FBSDKAppEventUserDataType)type -{ - dispatch_async(serialQueue, ^{ - if (!hashData) { - [hashedUserData removeObjectForKey:type]; - } else { - hashedUserData[type] = hashData; - } - [[NSUserDefaults standardUserDefaults] setObject:[FBSDKUserDataStore stringByHashedData:hashedUserData] - forKey:FBSDKUserDataKey]; - }); -} - -+ (void)clearDataForType:(FBSDKAppEventUserDataType)type -{ - [FBSDKUserDataStore setAndHashData:nil forType:type]; -} - -+ (NSString *)getHashedData -{ - __block NSString *hashedUserDataString; - dispatch_sync(serialQueue, ^{ - hashedUserDataString = [FBSDKUserDataStore stringByHashedData:hashedUserData]; - }); - return hashedUserDataString; -} - -+ (NSString *)getHashedDataForType:(FBSDKAppEventUserDataType)type -{ - __block NSString *hashedData; - dispatch_sync(serialQueue, ^{ - hashedData = [hashedUserData objectForKey:type]; - }); - return hashedData; -} - -+ (NSString *)stringByHashedData:(id)hashedData -{ - NSError *error; - NSData *jsonData = [NSJSONSerialization dataWithJSONObject:hashedData - options:0 - error:&error]; - if (jsonData) { - return [[NSString alloc] initWithData:jsonData - encoding:NSUTF8StringEncoding]; - } else { - [FBSDKAppEventsUtility logAndNotify:[NSString stringWithFormat:@"Invalid json object: %@", error]]; - return @""; - } -} - -+ (NSString *)encryptData:(NSString *)data - type:(FBSDKAppEventUserDataType)type -{ - if (data.length == 0 || [FBSDKUserDataStore maybeSHA256Hashed:data]) { - return data; - } - return [FBSDKUtility SHA256Hash:[FBSDKUserDataStore normalizeData:data type:type]]; -} - -+ (NSString *)normalizeData:(NSString *)data - type:(FBSDKAppEventUserDataType)type -{ - NSString *normalizedData = @""; - NSSet *set = [NSSet setWithArray: - @[FBSDKAppEventEmail, FBSDKAppEventFirstName, FBSDKAppEventLastName, FBSDKAppEventCity, FBSDKAppEventState, FBSDKAppEventCountry]]; - if ([set containsObject:type]) { - normalizedData = [data stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; - normalizedData = normalizedData.lowercaseString; - } else if ([type isEqualToString:FBSDKAppEventPhone]) { - NSError *error = nil; - NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[^0-9]" - options:NSRegularExpressionCaseInsensitive - error:&error - ]; - normalizedData = [regex stringByReplacingMatchesInString:data - options:0 - range:NSMakeRange(0, data.length) - withTemplate:@"" - ]; - } else if ([type isEqualToString:FBSDKAppEventGender]) { - NSString *temp = [data stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; - temp = temp.lowercaseString; - normalizedData = temp.length > 0 ? [temp substringToIndex:1]: @""; - } - return normalizedData; -} - -+ (BOOL)maybeSHA256Hashed:(NSString *)data -{ - NSRange range = [data rangeOfString:@"[A-Fa-f0-9]{64}" options:NSRegularExpressionSearch]; - return (data.length == 64) && (range.location != NSNotFound); -} - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/ML/FBSDKModelManager.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/ML/FBSDKModelManager.h deleted file mode 100644 index 6adebf64d8..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/ML/FBSDKModelManager.h +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import - -typedef void (^FBSDKDownloadCompletionBlock)(BOOL success); - -@interface FBSDKModelManager : NSObject - -+ (void)enable; -+ (nullable NSDictionary *)getRules; -+ (nullable NSString *)getWeightsPath:(NSString *_Nonnull)useCaseKey; - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/ML/FBSDKModelManager.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/ML/FBSDKModelManager.m deleted file mode 100644 index 314fe5ecdd..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/ML/FBSDKModelManager.m +++ /dev/null @@ -1,233 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKModelManager.h" - -#import "FBSDKAddressFilterManager.h" -#import "FBSDKAddressInferencer.h" -#import "FBSDKEventInferencer.h" -#import "FBSDKFeatureExtractor.h" -#import "FBSDKFeatureManager.h" -#import "FBSDKGraphRequest.h" -#import "FBSDKGraphRequestConnection.h" -#import "FBSDKSettings.h" -#import "FBSDKSuggestedEventsIndexer.h" -#import "FBSDKTypeUtility.h" -#import "FBSDKViewHierarchyMacros.h" - -#define FBSDK_ML_MODEL_PATH @"models" - -static NSString *const MODEL_INFO_KEY= @"com.facebook.sdk:FBSDKModelInfo"; -static NSString *const ASSET_URI_KEY = @"asset_uri"; -static NSString *const RULES_URI_KEY = @"rules_uri"; -static NSString *const THRESHOLDS_KEY = @"thresholds"; -static NSString *const USE_CASE_KEY = @"use_case"; -static NSString *const VERSION_ID_KEY = @"version_id"; -static NSString *const MODEL_DATA_KEY = @"data"; -static NSString *const ADDRESS_FILTERING_KEY = @"DATA_DETECTION_ADDRESS"; - -static NSString *_directoryPath; -static NSMutableDictionary *_modelInfo; - -@implementation FBSDKModelManager - -+ (void)enable -{ - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - NSString *languageCode = [[NSLocale currentLocale] objectForKey:NSLocaleLanguageCode]; - // If the languageCode could not be fetched successfully, it's regarded as "en" by default. - if (languageCode && ![languageCode isEqualToString:@"en"]) { - return; - } - - NSString *dirPath = [NSTemporaryDirectory() stringByAppendingPathComponent:FBSDK_ML_MODEL_PATH]; - if (![[NSFileManager defaultManager] fileExistsAtPath:dirPath]) { - [[NSFileManager defaultManager] createDirectoryAtPath:dirPath withIntermediateDirectories:NO attributes:NULL error:NULL]; - } - _directoryPath = dirPath; - - // fetch api - FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] - initWithGraphPath:[NSString stringWithFormat:@"%@/model_asset", [FBSDKSettings appID]]]; - - [request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { - if (error) { - return; - } - NSDictionary *resultDictionary = [FBSDKTypeUtility dictionaryValue:result]; - NSDictionary *modelInfo = [self convertToDictionary:resultDictionary[MODEL_DATA_KEY]]; - if (!modelInfo) { - return; - } - // update cache - [[NSUserDefaults standardUserDefaults] setObject:modelInfo forKey:MODEL_INFO_KEY]; - - [FBSDKFeatureManager checkFeature:FBSDKFeatureSuggestedEvents completionBlock:^(BOOL enabled) { - if (enabled) { - [self getModelAndRules:SUGGEST_EVENT_KEY handler:^(BOOL success){ - if (success) { - [FBSDKEventInferencer loadWeights]; - [FBSDKFeatureExtractor loadRules]; - [FBSDKSuggestedEventsIndexer enable]; - } - }]; - } - }]; - [FBSDKFeatureManager checkFeature:FBSDKFeaturePIIFiltering completionBlock:^(BOOL enabled) { - if (enabled) { - [self getModelAndRules:ADDRESS_FILTERING_KEY handler:^(BOOL success){ - if (success) { - [FBSDKAddressInferencer loadWeights]; - [FBSDKAddressInferencer initializeDenseFeature]; - [FBSDKAddressFilterManager enable]; - } - }]; - } - }]; - }]; - }); -} - -+ (void)getModelAndRules:(NSString *)useCaseKey - handler:(FBSDKDownloadCompletionBlock)handler -{ - dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); - dispatch_group_t group = dispatch_group_create(); - _modelInfo = [[NSUserDefaults standardUserDefaults] objectForKey:MODEL_INFO_KEY]; - if (!_modelInfo || !_directoryPath) { - if (handler) { - handler(NO); - return; - } - } - NSDictionary *model = [_modelInfo objectForKey:useCaseKey]; - - if (!model) { - if (handler) { - handler(NO); - return; - } - } - - // clear old model files - NSArray *files = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:_directoryPath error:nil]; - NSString *prefixWithVersion = [NSString stringWithFormat:@"%@_%@", useCaseKey, model[VERSION_ID_KEY]]; - - for (NSString *file in files) { - if ([file hasPrefix:useCaseKey] && ![file hasPrefix:prefixWithVersion]) { - [[NSFileManager defaultManager] removeItemAtPath:[_directoryPath stringByAppendingPathComponent:file] error:nil]; - } - } - - // download model asset - NSString *assetUrlString = [model objectForKey:ASSET_URI_KEY]; - NSString *assetFilePath; - if (assetUrlString.length > 0) { - assetFilePath = [_directoryPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@_%@.weights", useCaseKey, model[VERSION_ID_KEY]]]; - [self download:assetUrlString filePath:assetFilePath queue:queue group:group]; - } - - // download rules - NSString *rulesUrlString = [model objectForKey:RULES_URI_KEY]; - NSString *rulesFilePath; - // rules are optional and rulesUrlString may be empty - if (rulesUrlString.length > 0) { - rulesFilePath = [_directoryPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@_%@.rules", useCaseKey, model[VERSION_ID_KEY]]]; - [self download:rulesUrlString filePath:rulesFilePath queue:queue group:group]; - } - dispatch_group_notify(group, dispatch_get_main_queue(), ^{ - if (handler) { - if ([[NSFileManager defaultManager] fileExistsAtPath:assetFilePath] && (!rulesUrlString || (rulesUrlString && [[NSFileManager defaultManager] fileExistsAtPath:rulesFilePath]))) { - handler(YES); - return; - } - handler(NO); - } - }); -} - -+ (void)download:(NSString *)urlString - filePath:(NSString *)filePath - queue:(dispatch_queue_t)queue - group:(dispatch_group_t)group -{ - if (!filePath || [[NSFileManager defaultManager] fileExistsAtPath:filePath]) { - return; - } - dispatch_group_async(group, queue, ^{ - NSURL *url = [NSURL URLWithString:urlString]; - NSData *urlData = [NSData dataWithContentsOfURL:url]; - if (urlData) { - [urlData writeToFile:filePath atomically:YES]; - } - }); -} - -+ (nullable NSMutableDictionary *)convertToDictionary:(NSArray *> *)models -{ - if ([models count] == 0) { - return nil; - } - NSMutableDictionary *modelInfo = [NSMutableDictionary dictionary]; - for (NSDictionary *model in models) { - if (model[USE_CASE_KEY]) { - [modelInfo addEntriesFromDictionary:@{model[USE_CASE_KEY]:model}]; - } - } - return modelInfo; -} - -+ (nullable NSDictionary *)getRules -{ - NSDictionary *cachedModelInfo = [[NSUserDefaults standardUserDefaults] objectForKey:MODEL_INFO_KEY]; - if (!cachedModelInfo) { - return nil; - } - NSDictionary *model = [cachedModelInfo objectForKey:SUGGEST_EVENT_KEY]; - if (model && model[VERSION_ID_KEY]) { - NSString *filePath = [_directoryPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@_%@.rules", SUGGEST_EVENT_KEY, model[VERSION_ID_KEY]]]; - if (filePath) { - NSData *ruelsData = [NSData dataWithContentsOfFile:filePath]; - NSDictionary *rules = [NSJSONSerialization JSONObjectWithData:ruelsData options:0 error:nil]; - return rules; - } - } - return nil; -} - -+ (nullable NSString *)getWeightsPath:(NSString *_Nonnull)useCaseKey -{ - NSDictionary *cachedModelInfo = [[NSUserDefaults standardUserDefaults] objectForKey:MODEL_INFO_KEY]; - if (!cachedModelInfo || !_directoryPath) { - return nil; - } - NSDictionary *model = [cachedModelInfo objectForKey:useCaseKey]; - if (model && model[VERSION_ID_KEY]) { - return [_directoryPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@_%@.weights", useCaseKey, model[VERSION_ID_KEY]]]; - } - return nil; -} - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/ML/FBSDKModelRuntime.hpp b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/ML/FBSDKModelRuntime.hpp deleted file mode 100644 index 2b5cfe5e7f..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/ML/FBSDKModelRuntime.hpp +++ /dev/null @@ -1,310 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#include -#include -#include -#include -#include - -#import - -#include "FBSDKStandaloneModel.hpp" - -#define SEQ_LEN 128 -#define ALPHABET_SIZE 256 -#define EMBEDDING_SIZE 64 -#define DENSE_FEATURE_LEN 30 - -const int CONV_BLOCKS[3][3] = {{32, 2, SEQ_LEN - 1}, {32, 3, SEQ_LEN - 2}, {32, 5, SEQ_LEN - 4}}; - -namespace mat1 { - static void relu(float *data, int len) { - float min = 0; - float max = FLT_MAX; - vDSP_vclip(data, 1, &min, &max, data, 1, len); - } - - static void concatenate(float *dst, float *a, float *b, int a_len, int b_len) { - memcpy(dst, a, a_len * sizeof(float)); - memcpy(dst + a_len, b, b_len * sizeof(float)); - } - - static void softmax(float *data, int n) { - int i = 0; - float max = FLT_MIN; - float sum = 0; - - for (i = 0; i < n; i++) { - if (data[i] > max) { - max = data[i]; - } - } - - for (i = 0; i < n; i++){ - data[i] = expf(data[i] - max); - } - - for (i = 0; i < n; i++){ - sum += data[i]; - } - - for (i = 0; i < n; i++){ - data[i] = data[i] / sum; - } - } - - static float* embedding(int *a, float *b, int n_examples, int seq_length, int embedding_size) { - int i,j,k,val; - float* res = (float *)malloc(sizeof(float) * (n_examples * seq_length * embedding_size)); - for (i = 0; i < n_examples; i++) { - for (j = 0; j < seq_length; j++) { - val = a[i * seq_length + j]; - for (k = 0; k < embedding_size; k++) { - res[(embedding_size * seq_length) * i + embedding_size * j + k] = b[val * embedding_size + k]; - } - } - } - return res; - } - - /* - a shape: n_examples, in_vector_size - b shape: n_examples, out_vector_size - c shape: out_vector_size - return shape: n_examples, out_vector_size - */ - static float* dense(float *a, float *b, float *c, int n_examples, int in_vector_size, int out_vector_size) { - int i,j; - float *m_res = (float *)malloc(sizeof(float) * (n_examples * out_vector_size)); - vDSP_mmul(a, 1, b, 1, m_res, 1, n_examples, out_vector_size, in_vector_size); - for (i = 0; i < n_examples; i++) { - for (j = 0; j < out_vector_size; j++) { - m_res[i * out_vector_size + j] += c[j]; - } - } - return m_res; - } - - /* - x shape: n_examples, seq_len, input_size - w shape: kernel_size, input_size, output_size - return shape: n_examples, seq_len - kernel_size + 1, output_size - */ - static float* conv1D(float *x, float *w, int n_examples, int seq_len, int input_size, int kernel_size, int output_size) { - int n, o, i, k, m; - float sum; - float *res = (float *)malloc(sizeof(float) * (n_examples * (seq_len - kernel_size + 1) * output_size)); - float *temp_x = (float *)malloc(sizeof(float) * (kernel_size * input_size)); - float *temp_w = (float *)malloc(sizeof(float) * (kernel_size * input_size)); - for (n = 0; n < n_examples; n++){ - for (o = 0; o < output_size; o++){ - for (i = 0; i < seq_len - kernel_size + 1; i++) { - sum = 0; - for (m = 0; m < kernel_size; m++) { - for (k = 0; k < input_size; k++) { - temp_x[m * input_size + k] = x[n * (seq_len * input_size) + (m + i) * input_size + k]; - temp_w[m * input_size + k] = w[(m * input_size + k) * output_size + o]; - } - } - vDSP_dotpr(temp_x, 1, temp_w, 1, &sum, kernel_size * input_size); - res[(n * (output_size * (seq_len - kernel_size + 1)) + i * output_size + o)] = sum; - } - } - } - free(temp_x); - free(temp_w); - return res; - } - - /* - input shape: n_examples, len, n_channel - return shape: n_examples, len - pool_size + 1, n_channel - */ - static float* maxPool1D(float *input, int n_examples, int input_len, int n_channel, int pool_size) { - int res_len = input_len - pool_size + 1; - float* res = (float *)calloc(n_examples * res_len * n_channel, sizeof(float)); - - for (int n = 0; n < n_examples; n++) { - for (int c = 0; c < n_channel; c++) { - for (int i = 0; i < res_len; i++) { - for (int r = i; r < i + pool_size; r++) { - int res_pos = n * (n_channel * res_len) + i * n_channel + c; - int input_pos = n * (n_channel * input_len) + r * n_channel + c; - if (r == i) { - res[res_pos] = input[input_pos]; - } else { - res[res_pos] = fmax(res[res_pos], input[input_pos]); - } - } - } - } - } - return res; - } - - static int* vectorize(const char *texts, int str_len, int max_len) { - int *res = (int *)malloc(sizeof(int) * max_len); - for (int i = 0; i < max_len; i++) { - if (i < str_len){ - res[i] = static_cast(texts[i]); - } else { - res[i] = 0; - } - } - return res; - } - - /* - input shape: m, n - return shape: n, m - */ - static float* transpose2D(float *input, int m, int n) { - float *transposed = (float *)malloc(sizeof(float) * m * n); - for (int i = 0; i < m; i++){ - for (int j = 0; j < n; j++) { - transposed[j * m + i] = input[i * n + j]; - } - } - return transposed; - } - - /* - input shape: m, n, p - return shape: p, n, m - */ - static float* transpose3D(float *input, int64_t m, int n, int p) { - float *transposed = (float *)malloc((size_t)(sizeof(float) * m * n * p)); - for (int i = 0; i < m; i++){ - for (int j = 0; j < n; j++) { - for (int k = 0; k < p; k++) { - transposed[k * m * n + j * m + i] = input[i * n * p + j * p + k]; - } - } - } - return transposed; - } - - static float* add(float *a, float *b, int m, int n, int p) { - for(int i = 0; i < m * n; i++){ - for(int j = 0; j < p; j++){ - a[i * p + j] += b[j]; - } - } - return a; - } - - static float* predictOnText(const char *texts, std::unordered_map& weights, float *df) { - int *x; - float *embed_x; - float *dense1_x; - float *dense2_x; - float *dense3_x; - float *c1; - float *c2; - float *c3; - float *ca; - float *cb; - float *cc; - - mat::MTensor& embed_t = weights.at("embed.weight"); - mat::MTensor& conv1w_t = weights.at("convs.0.weight"); // (32, 64, 2) - mat::MTensor& conv2w_t = weights.at("convs.1.weight"); - mat::MTensor& conv3w_t = weights.at("convs.2.weight"); - mat::MTensor& conv1b_t = weights.at("convs.0.bias"); - mat::MTensor& conv2b_t = weights.at("convs.1.bias"); - mat::MTensor& conv3b_t = weights.at("convs.2.bias"); - mat::MTensor& fc1w_t = weights.at("fc1.weight"); // (128, 126) - mat::MTensor& fc1b_t = weights.at("fc1.bias"); // 128 - mat::MTensor& fc2w_t = weights.at("fc2.weight"); // (64, 128) - mat::MTensor& fc2b_t = weights.at("fc2.bias"); // 64 - mat::MTensor& fc3w_t = weights.at("fc3.weight"); // (2, 64) or (4, 64) - mat::MTensor& fc3b_t = weights.at("fc3.bias"); // 2 or 4 - - float *embed_weight = embed_t.data(); - float *convs_0_weight = transpose3D(conv1w_t.data(), (int)conv1w_t.size(0), (int)conv1w_t.size(1), (int)conv1w_t.size(2)); // (2, 64, 32) - float *convs_1_weight = transpose3D(conv2w_t.data(), (int)conv2w_t.size(0), (int)conv2w_t.size(1), (int)conv2w_t.size(2)); - float *convs_2_weight = transpose3D(conv3w_t.data(), (int)conv3w_t.size(0), (int)conv3w_t.size(1), (int)conv3w_t.size(2)); - float *convs_0_bias = conv1b_t.data(); - float *convs_1_bias = conv2b_t.data(); - float *convs_2_bias = conv3b_t.data(); - float *fc1_weight = transpose2D(fc1w_t.data(), (int)fc1w_t.size(0), (int)fc1w_t.size(1)); - float *fc2_weight = transpose2D(fc2w_t.data(), (int)fc2w_t.size(0), (int)fc2w_t.size(1)); - float *fc3_weight = transpose2D(fc3w_t.data(), (int)fc3w_t.size(0), (int)fc3w_t.size(1)); - float *fc1_bias = fc1b_t.data(); - float *fc2_bias = fc2b_t.data(); - float *fc3_bias = fc3b_t.data(); - - // vectorize text - x = vectorize(texts, (int)strlen(texts), SEQ_LEN); - - // embedding - embed_x = embedding(x, embed_weight, 1, SEQ_LEN, EMBEDDING_SIZE); // (1, 128, 64) - free(x); - - // conv1D - c1 = conv1D(embed_x, convs_0_weight, 1, SEQ_LEN, EMBEDDING_SIZE, (int)conv1w_t.size(2), (int)conv1w_t.size(0)); // (1, 127, 32) CONV_BLOCKS[0][1], CONV_BLOCKS[0][0] - c2 = conv1D(embed_x, convs_1_weight, 1, SEQ_LEN, EMBEDDING_SIZE, (int)conv2w_t.size(2), (int)conv2w_t.size(0)); // (1, 126, 32) - c3 = conv1D(embed_x, convs_2_weight, 1, SEQ_LEN, EMBEDDING_SIZE, (int)conv3w_t.size(2), (int)conv3w_t.size(0)); // (1, 124, 32) - free(embed_x); - - // add bias - add(c1, convs_0_bias, 1, (int)(SEQ_LEN - conv1w_t.size(2) + 1), (int)conv1w_t.size(0)); - add(c2, convs_1_bias, 1, (int)(SEQ_LEN - conv2w_t.size(2) + 1), (int)conv2w_t.size(0)); - add(c3, convs_2_bias, 1, (int)(SEQ_LEN - conv3w_t.size(2) + 1), (int)conv3w_t.size(0)); - - // relu - relu(c1, (int)(SEQ_LEN - conv1w_t.size(2) + 1) * (int)conv1w_t.size(0)); - relu(c2, (int)(SEQ_LEN - conv2w_t.size(2) + 1) * (int)conv2w_t.size(0)); - relu(c3, (int)(SEQ_LEN - conv3w_t.size(2) + 1) * (int)conv3w_t.size(0)); - - // max pooling - ca = maxPool1D(c1, 1, (int)(SEQ_LEN - conv1w_t.size(2) + 1), (int)conv1w_t.size(0), (int)(SEQ_LEN - conv1w_t.size(2) + 1)); // (1, 1, 32) - cb = maxPool1D(c2, 1, (int)(SEQ_LEN - conv2w_t.size(2) + 1), (int)conv2w_t.size(0), (int)(SEQ_LEN - conv2w_t.size(2) + 1)); // (1, 1, 32) - cc = maxPool1D(c3, 1, (int)(SEQ_LEN - conv3w_t.size(2) + 1), (int)conv3w_t.size(0), (int)(SEQ_LEN - conv3w_t.size(2) + 1)); // (1, 1, 32) - free(c1); - free(c2); - free(c3); - - // concatenate - float *concat = (float *)malloc((size_t)(sizeof(float) * (conv1w_t.size(0) + conv2w_t.size(0) + conv3w_t.size(0) + 30))); - concatenate(concat, ca, cb, (int)conv1w_t.size(0), (int)conv2w_t.size(0)); - concatenate(concat + conv1w_t.size(0) + conv2w_t.size(0), cc, df, (int)conv3w_t.size(0), 30); - free(ca); - free(cb); - free(cc); - - // dense + relu - dense1_x = dense(concat, fc1_weight, fc1_bias, 1, (int)fc1w_t.size(1), (int)fc1w_t.size(0)); - free(concat); - relu(dense1_x, (int)fc1b_t.size(0)); - dense2_x = dense(dense1_x, fc2_weight, fc2_bias, 1, (int)fc2w_t.size(1), (int)fc2w_t.size(0)); - relu(dense2_x, (int)fc2b_t.size(0)); - free(dense1_x); - dense3_x = dense(dense2_x, fc3_weight, fc3_bias, 1, (int)fc3w_t.size(1), (int)fc3w_t.size(0)); - free(dense2_x); - softmax(dense3_x, (int)fc3b_t.size(0)); - return dense3_x; - } -} - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/ML/FBSDKModelUtility.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/ML/FBSDKModelUtility.h deleted file mode 100644 index 3012e8e3c5..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/ML/FBSDKModelUtility.h +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import - -@interface FBSDKModelUtility : NSObject - -+ (NSString *)normalizeText:(NSString *)text; - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/ML/FBSDKModelUtility.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/ML/FBSDKModelUtility.m deleted file mode 100644 index 9c1bff6761..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/ML/FBSDKModelUtility.m +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import - -#import "FBSDKModelUtility.h" - -@implementation FBSDKModelUtility : NSObject - -+ (NSString *)normalizeText:(NSString *)text -{ - NSMutableArray *tokens = [[text componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] mutableCopy]; - [tokens removeObject:@""]; - return [tokens componentsJoinedByString: @" "]; -} - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/ML/FBSDKStandaloneModel.hpp b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/ML/FBSDKStandaloneModel.hpp deleted file mode 100644 index 2cec1084b8..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/ML/FBSDKStandaloneModel.hpp +++ /dev/null @@ -1,152 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#import - -// minimal aten implementation -#define MAT_ALWAYS_INLINE inline __attribute__((always_inline)) -namespace mat { - - template - class MTensorAccessor { - public: - MAT_ALWAYS_INLINE - MTensorAccessor(T* data, const int64_t* sizes, const int64_t* strides) - : data_(data), sizes_(sizes), strides_(strides) {} - - MAT_ALWAYS_INLINE MTensorAccessor operator[](int64_t i) { - return MTensorAccessor( - this->data_ + this->strides_[0] * i, - this->sizes_ + 1, - this->strides_ + 1); - } - T* data_; - private: - const int64_t* sizes_; - const int64_t* strides_; - }; - - template - class MTensorAccessor { - public: - MAT_ALWAYS_INLINE - MTensorAccessor(T* data, const int64_t* sizes, const int64_t* strides) - : data_(data), sizes_(sizes), strides_(strides) {} - - MAT_ALWAYS_INLINE T& operator[](int64_t i) { - // assume stride==1 in innermost dimension. - // DCHECK_EQ(strides_[0], 1); - return this->data_[i]; - } - T* data_; - - private: - const int64_t* sizes_; - const int64_t* strides_; - }; - - static void* MAllocateMemory(size_t nbytes) { - void* ptr = nullptr; - assert(nbytes > 0); -#ifdef __ANDROID__ - ptr = memalign(64, nbytes); -#else - const int ret = posix_memalign(&ptr, 64, nbytes); - (void)ret; - assert(ret == 0); -#endif - return ptr; - } - - static void MFreeMemory(void* ptr) { - free(ptr); - } - - static void MCheckPtr(void* ptr) { - if (ptr) { - MFreeMemory(ptr); - } - } - - class MTensor { - public: - MTensor(){}; - MTensor(const std::vector& sizes) { - auto strides = std::vector(sizes.size()); - strides[strides.size() - 1] = 1; - for (auto i = static_cast(strides.size()) - 2; i >= 0; --i) { - strides[i] = strides[i + 1] * sizes[i + 1]; - } - strides_ = strides; - sizes_ = sizes; - // assume float32 storage. - size_t nbytes = sizeof(float); - for (auto size : sizes) { - nbytes *= size; - } - storage_ = std::shared_ptr(MAllocateMemory(nbytes), MCheckPtr); - } - - int64_t size(int dim) { - return sizes_[dim]; - } - - const std::vector& sizes() const { - return sizes_; - } - - const std::vector& strides() const { - return strides_; - } - - template - T* data() { - return static_cast(storage_.get()); - } - - template - MTensorAccessor accessor() { - return MTensorAccessor(data(), sizes().data(), strides().data()); - } - - private: - std::vector sizes_; - std::vector strides_; - std::shared_ptr storage_; - }; - - static MTensor mempty(const std::vector& sizes) { - return MTensor(sizes); - } -} // namespace mat - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/RestrictiveDataFilter/FBSDKAddressFilterManager.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/RestrictiveDataFilter/FBSDKAddressFilterManager.h deleted file mode 100644 index c6245d88bc..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/RestrictiveDataFilter/FBSDKAddressFilterManager.h +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import - -@interface FBSDKAddressFilterManager : NSObject - -+ (void)enable; -+ (nullable NSDictionary *)processParameters:(nullable NSDictionary *)parameters; - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/RestrictiveDataFilter/FBSDKAddressFilterManager.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/RestrictiveDataFilter/FBSDKAddressFilterManager.m deleted file mode 100644 index a9f1d25d19..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/RestrictiveDataFilter/FBSDKAddressFilterManager.m +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKAddressFilterManager.h" - -#import "FBSDKAddressInferencer.h" -#import "FBSDKBasicUtility.h" -#import "FBSDKGateKeeperManager.h" -#import "FBSDKSettings.h" -#import "FBSDKTypeUtility.h" - -static BOOL isAddressFilterEnabled = NO; -static BOOL isSampleEnabled = NO; - -@implementation FBSDKAddressFilterManager - -+ (void)enable -{ - isAddressFilterEnabled = YES; - isSampleEnabled = [FBSDKGateKeeperManager boolForKey:@"FBSDKFeatureAddressDetectionSample" defaultValue:false]; -} - -+ (nullable NSDictionary *)processParameters:(nullable NSDictionary *)parameters -{ - if (!isAddressFilterEnabled || parameters.count == 0) { - return parameters; - } - NSMutableDictionary *params = [NSMutableDictionary dictionaryWithDictionary:parameters]; - NSMutableDictionary *addressParams = [NSMutableDictionary dictionary]; - - for (NSString *key in [parameters keyEnumerator]) { - NSString *valueString =[FBSDKTypeUtility stringValue:parameters[key]]; - BOOL shouldFilter = [FBSDKAddressInferencer shouldFilterParam:valueString]; - if (shouldFilter) { - [addressParams setObject:isSampleEnabled ? valueString : @"" forKey:key]; - [params removeObjectForKey:key]; - } - } - if ([addressParams count] > 0) { - NSString *addressParamsJSONString = [FBSDKBasicUtility JSONStringForObject:addressParams - error:NULL - invalidObjectHandler:NULL]; - [FBSDKBasicUtility dictionary:params setObject:addressParamsJSONString forKey:@"_onDeviceParams"]; - } - return [params copy]; -} - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/RestrictiveDataFilter/FBSDKAddressInferencer.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/RestrictiveDataFilter/FBSDKAddressInferencer.h deleted file mode 100644 index e95ecd2c0e..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/RestrictiveDataFilter/FBSDKAddressInferencer.h +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface FBSDKAddressInferencer : NSObject - -+ (void)initializeDenseFeature; -+ (void)loadWeights; -+ (BOOL)shouldFilterParam:(nullable NSString *)param; - -@end - -NS_ASSUME_NONNULL_END - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/RestrictiveDataFilter/FBSDKAddressInferencer.mm b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/RestrictiveDataFilter/FBSDKAddressInferencer.mm deleted file mode 100644 index 6d163183d3..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/RestrictiveDataFilter/FBSDKAddressInferencer.mm +++ /dev/null @@ -1,213 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKAddressInferencer.h" - -#import "FBSDKModelManager.h" -#import "FBSDKModelRuntime.hpp" -#import "FBSDKModelUtility.h" -#import "FBSDKStandaloneModel.hpp" - -#include - -static NSString *const MODEL_INFO_KEY= @"com.facebook.sdk:FBSDKModelInfo"; -static NSString *const THRESHOLDS_KEY = @"thresholds"; -static NSString *const DATA_DETECTION_ADDRESS_KEY = @"DATA_DETECTION_ADDRESS"; -static NSDictionary *const WEIGHTS_INFO = @{@"embed.weight" : @[@(256), @(64)], - @"convs.0.weight" : @[@(32), @(64), @(2)], - @"convs.0.bias" : @[@(32)], - @"convs.1.weight" : @[@(32), @(64), @(3)], - @"convs.1.bias" : @[@(32)], - @"convs.2.weight" : @[@(32), @(64), @(5)], - @"convs.2.bias" : @[@(32)], - @"fc1.weight": @[@(128), @(126)], - @"fc1.bias": @[@(128)], - @"fc2.weight": @[@(64), @(128)], - @"fc2.bias": @[@(64)], - @"fc3.weight": @[@(2), @(64)], - @"fc3.bias": @[@(2)]}; - -static NSDictionary *const WEIGHTS_KEYS = @{@"embedding.weight": @"embed.weight", - @"dense1.weight": @"fc1.weight", - @"dense2.weight": @"fc2.weight", - @"dense3.weight": @"fc3.weight", - @"dense1.bias": @"fc1.bias", - @"dense2.bias": @"fc2.bias", - @"dense3.bias": @"fc3.bias"}; - -@implementation FBSDKAddressInferencer : NSObject - -static std::unordered_map _weights; -static std::vector _denseFeature; - -+ (void)initializeDenseFeature -{ - std::vector dense_feature(30); - std::fill(dense_feature.begin(), dense_feature.end(), 0); - _denseFeature = dense_feature; -} - -+ (void)loadWeights -{ - NSString *path = [FBSDKModelManager getWeightsPath:DATA_DETECTION_ADDRESS_KEY]; - if (!path) { - return; - } - NSData *latestData = [NSData dataWithContentsOfFile:path - options:NSDataReadingMappedIfSafe - error:nil]; - if (!latestData) { - return; - } - std::unordered_map weights = [self loadWeights:latestData]; - if ([self validateWeights:weights]) { - _weights = weights; - } -} - -+ (bool)validateWeights: (std::unordered_map) weights -{ - if (WEIGHTS_INFO.count != weights.size()) { - return false; - } - try { - for (NSString *key in WEIGHTS_INFO) { - if (weights.count(std::string([key UTF8String])) == 0) { - return false; - } - mat::MTensor tensor = weights[std::string([key UTF8String])]; - const std::vector& actualSize = tensor.sizes(); - NSArray *expectedSize = WEIGHTS_INFO[key]; - if (actualSize.size() != expectedSize.count) { - return false; - } - for (int i = 0; i < expectedSize.count; i++) { - if((int)actualSize[i] != (int)[expectedSize[i] intValue]) { - return false; - } - } - } - } catch (const std::exception &e) { - return false; - } - return true; -} - -+ (std::unordered_map)loadWeights:(NSData *)weightsData{ - std::unordered_map weights; - - const void *data = weightsData.bytes; - NSUInteger totalLength = weightsData.length; - - int totalFloats = 0; - if (weightsData.length < 4) { - // Make sure data length is valid - return weights; - } - try { - int length; - memcpy(&length, data, 4); - if (length + 4 > totalLength) { - // Make sure data length is valid - return weights; - } - - char *json = (char *)data + 4; - NSDictionary *info = [NSJSONSerialization JSONObjectWithData:[NSData dataWithBytes:json length:length] - options:0 - error:nil]; - NSArray *keys = [[info allKeys] sortedArrayUsingComparator:^NSComparisonResult(NSString *key1, NSString *key2) { - return [key1 compare:key2]; - }]; - - float *floats = (float *)(json + length); - for (NSString *key in keys) { - NSString *finalKey = key; - NSString *mapping = [WEIGHTS_KEYS objectForKey:key]; - if (mapping) { - finalKey = mapping; - } - std::string s_name([finalKey UTF8String]); - - std::vector v_shape; - NSArray *shape = [info objectForKey:key]; - int count = 1; - for (NSNumber *_s in shape) { - int i = [_s intValue]; - v_shape.push_back(i); - count *= i; - } - - totalFloats += count; - - if ((4 + length + totalFloats * 4) > totalLength) { - // Make sure data length is valid - break; - } - mat::MTensor tensor = mat::mempty(v_shape); - float *tensor_data = tensor.data(); - memcpy(tensor_data, floats, sizeof(float) * count); - floats += count; - - weights[s_name] = tensor; - } - } catch (const std::exception &e) {} - - return weights; -} - -+ (BOOL)shouldFilterParam:(nullable NSString *)param -{ - if (!param || _weights.size() == 0 || _denseFeature.size() == 0) { - return false; - } - - NSString *text = [FBSDKModelUtility normalizeText:param]; - const char *bytes = [text UTF8String]; - if ((int)strlen(bytes) == 0) { - return false; - } - float *predictedRaw; - NSMutableDictionary *modelInfo = [[NSUserDefaults standardUserDefaults] objectForKey:MODEL_INFO_KEY]; - if (!modelInfo) { - return false; - } - NSDictionary * addressModelInfo = [modelInfo objectForKey:DATA_DETECTION_ADDRESS_KEY]; - if (!addressModelInfo) { - return false; - } - NSMutableArray *thresholds = [addressModelInfo objectForKey:THRESHOLDS_KEY]; - float threshold = [thresholds[0] floatValue]; - try { - predictedRaw = mat1::predictOnText(bytes, _weights, &_denseFeature[0]); - if (!predictedRaw[1]) { - return false; - } - return predictedRaw[1] >= threshold; - } catch (const std::exception &e) { - return false; - } -} - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/RestrictiveDataFilter/FBSDKRestrictiveDataFilterManager.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/RestrictiveDataFilter/FBSDKRestrictiveDataFilterManager.h deleted file mode 100644 index 6c70282d77..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/RestrictiveDataFilter/FBSDKRestrictiveDataFilterManager.h +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface FBSDKRestrictiveDataFilterManager : NSObject - -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; - -+ (void)enable; -+ (void)updateFilters:(nullable NSDictionary *)restrictiveParams; -+ (nullable NSDictionary *)processParameters:(nullable NSDictionary *)parameters - eventName:(NSString *)eventName; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/RestrictiveDataFilter/FBSDKRestrictiveDataFilterManager.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/RestrictiveDataFilter/FBSDKRestrictiveDataFilterManager.m deleted file mode 100644 index df7d5a42ce..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/RestrictiveDataFilter/FBSDKRestrictiveDataFilterManager.m +++ /dev/null @@ -1,146 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKRestrictiveDataFilterManager.h" - -#import "FBSDKBasicUtility.h" -#import "FBSDKTypeUtility.h" - -static NSString *const RESTRICTIVE_PARAM_KEY = @"restrictive_param"; - -@interface FBSDKRestrictiveEventFilter : NSObject - -@property (nonatomic, readonly, copy) NSString *eventName; -@property (nonatomic, readonly, copy) NSDictionary *restrictiveParams; - -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; - --(instancetype)initWithEventName:(NSString *)eventName - restrictiveParams:(NSDictionary *)restrictiveParams; - -@end - -@implementation FBSDKRestrictiveEventFilter - --(instancetype)initWithEventName:(NSString *)eventName - restrictiveParams:(NSDictionary *)restrictiveParams -{ - self = [super init]; - if (self) { - _eventName = eventName; - _restrictiveParams = restrictiveParams; - } - - return self; -} - -@end - -@implementation FBSDKRestrictiveDataFilterManager - -static BOOL isRestrictiveEventFilterEnabled = NO; - -static NSMutableArray *_params; - -+ (void)updateFilters:(nullable NSDictionary *)restrictiveParams -{ - if (!isRestrictiveEventFilterEnabled) { - return; - } - if (restrictiveParams.count > 0) { - [_params removeAllObjects]; - NSMutableArray *eventFilterArray = [NSMutableArray array]; - for (NSString *eventName in restrictiveParams.allKeys) { - NSDictionary *eventInfo = restrictiveParams[eventName]; - if (!eventInfo) { - return; - } - if (eventInfo[RESTRICTIVE_PARAM_KEY]) { - FBSDKRestrictiveEventFilter *restrictiveEventFilter = [[FBSDKRestrictiveEventFilter alloc] initWithEventName:eventName - restrictiveParams:eventInfo[RESTRICTIVE_PARAM_KEY]]; - [eventFilterArray addObject:restrictiveEventFilter]; - } - } - _params = eventFilterArray; - } -} - -+ (nullable NSString *)getMatchedDataTypeWithEventName:(NSString *)eventName - paramKey:(NSString *)paramKey -{ - // match by params in custom events with event name - for (FBSDKRestrictiveEventFilter *filter in _params) { - if ([filter.eventName isEqualToString:eventName]) { - NSString *type = [FBSDKTypeUtility stringValue:filter.restrictiveParams[paramKey]]; - if (type) { - return type; - } - } - } - return nil; -} - -+ (NSDictionary *)processParameters:(NSDictionary *)parameters - eventName:(NSString *)eventName -{ - if (!isRestrictiveEventFilterEnabled) { - return parameters; - } - if (parameters) { - NSMutableDictionary *params = [NSMutableDictionary dictionaryWithDictionary:parameters]; - NSMutableDictionary *restrictedParams = [NSMutableDictionary dictionary]; - - for (NSString *key in [parameters keyEnumerator]) { - NSString *type = [FBSDKRestrictiveDataFilterManager getMatchedDataTypeWithEventName:eventName - paramKey:key]; - if (type) { - [restrictedParams setObject:type forKey:key]; - [params removeObjectForKey:key]; - } - } - - if ([[restrictedParams allKeys] count] > 0) { - NSString *restrictedParamsJSONString = [FBSDKBasicUtility JSONStringForObject:restrictedParams - error:NULL - invalidObjectHandler:NULL]; - [FBSDKBasicUtility dictionary:params setObject:restrictedParamsJSONString forKey:@"_restrictedParams"]; - } - - return [params copy]; - } - - return nil; -} - -+ (void)enable -{ - isRestrictiveEventFilterEnabled = YES; -} - -#pragma mark Helper functions - -+ (BOOL)isMatchedWithPattern:(NSString *)pattern - text:(NSString *)text -{ - NSRegularExpression *regex = [[NSRegularExpression alloc] initWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:nil]; - NSUInteger matches = [regex numberOfMatchesInString:text options:0 range:NSMakeRange(0, text.length)]; - return matches > 0; -} - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/SuggestedEvents/FBSDKEventInferencer.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/SuggestedEvents/FBSDKEventInferencer.h deleted file mode 100644 index cbcb2a5c3c..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/SuggestedEvents/FBSDKEventInferencer.h +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface FBSDKEventInferencer : NSObject - -+ (void)loadWeights; -+ (NSDictionary *)predict:(NSString *)buttonText - viewTree:(NSMutableDictionary *)viewTree - withLog:(BOOL)isPrint; - -@end - -NS_ASSUME_NONNULL_END - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/SuggestedEvents/FBSDKEventInferencer.mm b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/SuggestedEvents/FBSDKEventInferencer.mm deleted file mode 100644 index aa4f183888..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/SuggestedEvents/FBSDKEventInferencer.mm +++ /dev/null @@ -1,227 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKEventInferencer.h" - -#import - -#import "FBSDKFeatureExtractor.h" -#import "FBSDKModelManager.h" -#import "FBSDKModelRuntime.hpp" -#import "FBSDKModelUtility.h" -#import "FBSDKViewHierarchyMacros.h" - -#include - -static NSString *const MODEL_INFO_KEY= @"com.facebook.sdk:FBSDKModelInfo"; -static NSString *const THRESHOLDS_KEY = @"thresholds"; -static NSString *const SUGGESTED_EVENT[4] = {@"fb_mobile_add_to_cart", @"fb_mobile_complete_registration", @"other", @"fb_mobile_purchase"}; -static NSDictionary *const DEFAULT_PREDICTION = @{SUGGEST_EVENT_KEY: SUGGESTED_EVENTS_OTHER}; -static NSDictionary *const WEIGHTS_INFO = @{@"embed.weight" : @[@(256), @(64)], - @"convs.0.weight" : @[@(32), @(64), @(2)], - @"convs.0.bias" : @[@(32)], - @"convs.1.weight" : @[@(32), @(64), @(3)], - @"convs.1.bias" : @[@(32)], - @"convs.2.weight" : @[@(32), @(64), @(5)], - @"convs.2.bias" : @[@(32)], - @"fc1.weight": @[@(128), @(126)], - @"fc1.bias": @[@(128)], - @"fc2.weight": @[@(64), @(128)], - @"fc2.bias": @[@(64)], - @"fc3.weight": @[@(4), @(64)], - @"fc3.bias": @[@(4)]}; - -static std::unordered_map _weights; - -@implementation FBSDKEventInferencer : NSObject - -+ (void)loadWeights -{ - NSString *path = [FBSDKModelManager getWeightsPath:SUGGEST_EVENT_KEY]; - if (!path) { - return; - } - NSData *latestData = [NSData dataWithContentsOfFile:path - options:NSDataReadingMappedIfSafe - error:nil]; - if (!latestData) { - return; - } - std::unordered_map weights = [self loadWeights:latestData]; - if ([self validateWeights:weights]) { - _weights = weights; - } -} - -+ (bool)validateWeights: (std::unordered_map) weights -{ - if (WEIGHTS_INFO.count != weights.size()) { - return false; - } - try { - for (NSString *key in WEIGHTS_INFO) { - if (weights.count(std::string([key UTF8String])) == 0) { - return false; - } - mat::MTensor tensor = weights[std::string([key UTF8String])]; - const std::vector& actualSize = tensor.sizes(); - NSArray *expectedSize = WEIGHTS_INFO[key]; - if (actualSize.size() != expectedSize.count) { - return false; - } - for (int i = 0; i < expectedSize.count; i++) { - if((int)actualSize[i] != (int)[expectedSize[i] intValue]) { - return false; - } - } - } - } catch (const std::exception &e) { - return false; - } - return true; -} - -+ (std::unordered_map)loadWeights:(NSData *)weightsData{ - std::unordered_map weights; - try { - const void *data = weightsData.bytes; - NSUInteger totalLength = weightsData.length; - - int totalFloats = 0; - if (weightsData.length < 4) { - // Make sure data length is valid - return weights; - } - - int length; - memcpy(&length, data, 4); - if (length + 4 > totalLength) { - // Make sure data length is valid - return weights; - } - - char *json = (char *)data + 4; - NSDictionary *info = [NSJSONSerialization JSONObjectWithData:[NSData dataWithBytes:json length:length] - options:0 - error:nil]; - NSArray *keys = [[info allKeys] sortedArrayUsingComparator:^NSComparisonResult(NSString *key1, NSString *key2) { - return [key1 compare:key2]; - }]; - - float *floats = (float *)(json + length); - for (NSString *key in keys) { - std::string s_name([key UTF8String]); - - std::vector v_shape; - NSArray *shape = [info objectForKey:key]; - int count = 1; - for (NSNumber *_s in shape) { - int i = [_s intValue]; - v_shape.push_back(i); - count *= i; - } - - totalFloats += count; - - if ((4 + length + totalFloats * 4) > totalLength) { - // Make sure data length is valid - break; - } - mat::MTensor tensor = mat::mempty(v_shape); - float *tensor_data = tensor.data(); - memcpy(tensor_data, floats, sizeof(float) * count); - floats += count; - - weights[s_name] = tensor; - } - } catch(const std::exception &e) {} - - return weights; -} - -+ (NSDictionary *)predict:(NSString *)buttonText - viewTree:(NSMutableDictionary *)viewTree - withLog:(BOOL)isPrint -{ - if (buttonText.length == 0 || _weights.size() == 0) { - return DEFAULT_PREDICTION; - } - try { - // Get bytes tensor - NSString *textFeature = [FBSDKModelUtility normalizeText:[FBSDKFeatureExtractor getTextFeature:buttonText withScreenName:viewTree[@"screenname"]]]; - if (textFeature.length == 0) { - return DEFAULT_PREDICTION; - } - const char *bytes = [textFeature UTF8String]; - if ((int)strlen(bytes) == 0) { - return DEFAULT_PREDICTION; - } - - // Get dense tensor - std::vector dense_tensor_shape; - dense_tensor_shape.push_back(1); - dense_tensor_shape.push_back(30); - mat::MTensor dense_tensor = mat::mempty(dense_tensor_shape); - float *dense_tensor_data = dense_tensor.data(); - float *dense_data = [FBSDKFeatureExtractor getDenseFeatures:viewTree]; - if (!dense_data) { - return DEFAULT_PREDICTION; - } - - NSMutableDictionary *result = [[NSMutableDictionary alloc] init]; - - // Get dense feature string - NSMutableArray *denseDataArray = [NSMutableArray array]; - for (int i=0; i < 30; i++) { - [denseDataArray addObject:[NSNumber numberWithFloat: dense_data[i]]]; - } - [result setObject:[denseDataArray componentsJoinedByString:@","] forKey:DENSE_FEATURE_KEY]; - - memcpy(dense_tensor_data, dense_data, sizeof(float) * 30); - free(dense_data); - float *res = mat1::predictOnText(bytes, _weights, dense_tensor_data); - NSMutableDictionary *modelInfo = [[NSUserDefaults standardUserDefaults] objectForKey:MODEL_INFO_KEY]; - if (!modelInfo) { - return DEFAULT_PREDICTION; - } - NSDictionary * suggestedEventModelInfo = [modelInfo objectForKey:SUGGEST_EVENT_KEY]; - if (!suggestedEventModelInfo) { - return DEFAULT_PREDICTION; - } - NSMutableArray *thresholds = [suggestedEventModelInfo objectForKey:THRESHOLDS_KEY]; - if (thresholds.count < 4) { - return DEFAULT_PREDICTION; - } - - for (int i = 0; i < thresholds.count; i++){ - if ((float)res[i] >= (float)[thresholds[i] floatValue]) { - [result setObject:SUGGESTED_EVENT[i] forKey:SUGGEST_EVENT_KEY]; - return result; - } - } - } catch (const std::exception &e) {} - return DEFAULT_PREDICTION; -} - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/SuggestedEvents/FBSDKFeatureExtractor.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/SuggestedEvents/FBSDKFeatureExtractor.h deleted file mode 100644 index 6207abd295..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/SuggestedEvents/FBSDKFeatureExtractor.h +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface FBSDKFeatureExtractor : NSObject - -+ (void)loadRules; -+ (NSString *)getTextFeature:(NSString *)text - withScreenName:(NSString *)screenName; -+ (float *)getDenseFeatures:(NSDictionary *)viewHierarchy; - -@end - -NS_ASSUME_NONNULL_END - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/SuggestedEvents/FBSDKFeatureExtractor.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/SuggestedEvents/FBSDKFeatureExtractor.m deleted file mode 100644 index 71954bc062..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/SuggestedEvents/FBSDKFeatureExtractor.m +++ /dev/null @@ -1,345 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKFeatureExtractor.h" - -#import "FBSDKCoreKit+Internal.h" -#import "FBSDKModelManager.h" - -#define REGEX_CR_PASSWORD_FIELD @"password" -#define REGEX_CR_HAS_CONFIRM_PASSWORD_FIELD @"(?i)(confirm.*password)|(password.*(confirmation|confirm)|confirmation)" -#define REGEX_CR_HAS_LOG_IN_KEYWORDS @"(?i)(sign in)|login|signIn" -#define REGEX_CR_HAS_SIGN_ON_KEYWORDS @"(?i)(sign.*(up|now)|registration|" \ -@"register|(create|apply).*(profile|account)|open.*account|" \ -@"account.*(open|creation|application)|enroll|join.*now)" -#define REGEX_ADD_TO_CART_BUTTON_TEXT @"(?i)add to(\\s|\\Z)|update(\\s|\\Z)|cart" -#define REGEX_ADD_TO_CART_PAGE_TITLE @"(?i)add to(\\s|\\Z)|update(\\s|\\Z)|cart|shop|buy" - -static NSDictionary *_languageInfo; -static NSDictionary *_eventInfo; -static NSDictionary *_textTypeInfo; -static NSDictionary *_rules; - -void sum(float *val0, float *val1); - -@implementation FBSDKFeatureExtractor - -+ (void)initialize -{ - _languageInfo = @{ - @"ENGLISH" : @"1", - @"GERMAN" : @"2", - @"SPANISH" : @"3", - @"JAPANESE" : @"4" - }; - _eventInfo = @{ - @"VIEW_CONTENT" : @"0", - @"SEARCH" : @"1", - @"ADD_TO_CART" : @"2", - @"ADD_TO_WISHLIST" : @"3", - @"INITIATE_CHECKOUT" : @"4", - @"ADD_PAYMENT_INFO" : @"5", - @"PURCHASE" : @"6", - @"LEAD" : @"7", - @"COMPLETE_REGISTRATION" : @"8" - }; - _textTypeInfo = @{ - @"BUTTON_TEXT": @"1", - @"PAGE_TITLE": @"2", - @"RESOLVED_DOCUMENT_LINK": @"3", - @"BUTTON_ID": @"4" - }; -} - -+ (void)loadRules -{ - _rules = [FBSDKModelManager getRules]; -} - -+ (NSString *)getTextFeature:(NSString *)text - withScreenName:(NSString *)screenName -{ - // use "|" and "," to separate different text based on the rule of how text processed during training - NSString *appName = [[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString *)kCFBundleNameKey]; - return [[NSString stringWithFormat:@"%@ | %@, %@", appName, screenName, text] lowercaseString]; -} - -+ (float *)getDenseFeatures:(NSDictionary *)viewHierarchy -{ - if (!_rules) { - return nil; - } - NSMutableArray *> *viewTree = [viewHierarchy[VIEW_HIERARCHY_VIEW_KEY] mutableCopy]; - NSString *screenName = viewHierarchy[VIEW_HIERARCHY_SCREEN_NAME_KEY]; - NSMutableArray *> *siblings = [NSMutableArray array]; - - [self pruneTree:[viewTree[0] mutableCopy] siblings:siblings]; - - float *result = [self parseFeatures:viewTree[0]]; - - NSMutableDictionary *interactedNode; - for (NSMutableDictionary *node in siblings) { - if ([[node objectForKey:VIEW_HIERARCHY_IS_INTERACTED_KEY] boolValue]) { - interactedNode = node; - } - } - - NSString *viewTreeString = [[NSString alloc] initWithData:[NSJSONSerialization dataWithJSONObject:viewTree options:0 error:nil] encoding:NSUTF8StringEncoding]; - - float *nonparseResult = [self nonparseFeatures:interactedNode siblings:siblings screenname:screenName viewTreeString:viewTreeString]; - sum(result, nonparseResult); - free(nonparseResult); - - return result; -} - -#pragma mark - Helper functions -+ (BOOL)pruneTree:(NSMutableDictionary *)node siblings:(NSMutableArray *)siblings -{ - // If it's interacted, don't prune away the children and just return. - BOOL isInteracted = [[node objectForKey:VIEW_HIERARCHY_IS_INTERACTED_KEY] boolValue]; - if (isInteracted) { - return true; - } - - NSMutableArray *> *newChildren = [NSMutableArray array]; - // If a child is interacted, we're at the right level and we want to grab everything - BOOL isChildInteracted = NO; - BOOL isDescendantInteracted = NO; - - NSMutableArray *> *childviews = [node objectForKey:VIEW_HIERARCHY_CHILD_VIEWS_KEY]; - for (NSMutableDictionary *child in childviews) { - if ([child[VIEW_HIERARCHY_IS_INTERACTED_KEY] boolValue]) { - isChildInteracted = YES; - isDescendantInteracted = YES; - } - } - - if (isChildInteracted) { - [siblings addObjectsFromArray:childviews]; - } else { - for (NSMutableDictionary *c in childviews) { - NSMutableDictionary *child = [c mutableCopy]; - if ([self pruneTree:child siblings:siblings]) { - isDescendantInteracted = YES; - [newChildren addObject:child]; - } - } - node[VIEW_HIERARCHY_CHILD_VIEWS_KEY] = newChildren; - } - - return isDescendantInteracted; -} - -+ (float *)nonparseFeatures:(NSMutableDictionary *)node - siblings:(NSMutableArray *)siblings - screenname:(NSString *)screenname - viewTreeString:(NSString *)viewTreeString -{ - float *densefeat = (float *)calloc(30, sizeof(float)); - - densefeat[3] = MAX((float)siblings.count - 1, 0); - - densefeat[9] = [siblings filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(id _Nullable evaluatedObject, NSDictionary * _Nullable bindings) { - return [self isButton:evaluatedObject]; - }]].count; - if ([self isButton:node]) { - densefeat[9] -= 1; - } - - densefeat[13] = -1; - densefeat[14] = -1; - - NSString *pageTitle = screenname ?: @""; - NSString *formFieldsJSON = viewTreeString; - NSString *buttonID = @""; - NSString *buttonText = @""; - - if ([self isButton:node]) { - NSMutableString *buttonTextString = [NSMutableString string]; - NSMutableString *buttonHintString = [NSMutableString string]; - [self update:node text:buttonTextString hint:buttonHintString]; - buttonText = (NSString *)buttonTextString; - buttonID = (NSString *)buttonHintString; - } - - // Regex features - densefeat[15] = [self regexMatch:@"ENGLISH" event:@"COMPLETE_REGISTRATION" textType:@"BUTTON_TEXT" matchText:buttonText]; - densefeat[16] = [self regexMatch:@"ENGLISH" event:@"COMPLETE_REGISTRATION" textType:@"PAGE_TITLE" matchText:pageTitle]; - densefeat[17] = [self regexMatch:@"ENGLISH" event:@"COMPLETE_REGISTRATION" textType:@"BUTTON_ID" matchText:buttonID]; - - densefeat[18] = [formFieldsJSON containsString:REGEX_CR_PASSWORD_FIELD] ? 1.0 : 0.0; - - densefeat[19] = [self regextMatch:REGEX_CR_HAS_CONFIRM_PASSWORD_FIELD text:formFieldsJSON]; - densefeat[20] = [self regextMatch:REGEX_CR_HAS_LOG_IN_KEYWORDS text:formFieldsJSON]; - densefeat[21] = [self regextMatch:REGEX_CR_HAS_SIGN_ON_KEYWORDS text:formFieldsJSON]; - - // Purchase specific features - densefeat[22] = [self regexMatch:@"ENGLISH" event:@"PURCHASE" textType:@"BUTTON_TEXT" matchText:buttonText]; - densefeat[24] = [self regexMatch:@"ENGLISH" event:@"PURCHASE" textType:@"PAGE_TITLE" matchText:pageTitle]; - - // AddToCart specific features - densefeat[25] = [self regextMatch:REGEX_ADD_TO_CART_BUTTON_TEXT text:buttonText]; - densefeat[27] = [self regextMatch:REGEX_ADD_TO_CART_PAGE_TITLE text:pageTitle]; - - // Lead specific features - densefeat[28] = [self regexMatch:@"ENGLISH" event:@"LEAD" textType:@"BUTTON_TEXT" matchText:buttonText]; - densefeat[29] = [self regexMatch:@"ENGLISH" event:@"LEAD" textType:@"PAGE_TITLE" matchText:pageTitle]; - - return densefeat; -} - -+ (float *)parseFeatures:(NSMutableDictionary *)node -{ - float *densefeat = (float *)calloc(30, sizeof(float)); - - NSString *text = [node[VIEW_HIERARCHY_TEXT_KEY] lowercaseString] ?: @""; - NSString *hint = [node[VIEW_HIERARCHY_HINT_KEY] lowercaseString] ?: @""; - NSString *className = [node[VIEW_HIERARCHY_CLASS_NAME_KEY] lowercaseString] ?: @""; - - if ([self foundIndicators:[@"$,amount,price,total" componentsSeparatedByString:@","] - inValues:@[text, hint]]) { - densefeat[0] += 1.0; - } - - if ([self foundIndicators:[@"password,pwd" componentsSeparatedByString:@","] - inValues:@[text, hint]]) { - densefeat[1] += 1.0; - } - - if ([self foundIndicators:[@"phone,tel" componentsSeparatedByString:@","] - inValues:@[text, hint]]) { - densefeat[2] += 1.0; - } - - if ([self foundIndicators:@[@"search"] - inValues:@[text, hint]]) { - densefeat[4] += 1.0; - } - - // Input field with general text - if ([className containsString:@"text"] && [className containsString:@"edit"]) { - densefeat[5] += 1.0; - } - - // Input field with number or phone - if (([className containsString:@"num"] || [className containsString:@"phone"]) && [className containsString:@"edit"]) { - densefeat[6] += 1.0; - } - - if ([hint containsString:@"email"] || [text containsString:@"@"]) { - densefeat[7] += 1.0; - } - - // Check Box - if ([className containsString:@"checkbox"]) { - densefeat[8] += 1.0; - } - - if ([self foundIndicators:[@"complete,confirm,done,submit" componentsSeparatedByString:@","] - inValues:@[text]]) { - densefeat[10] += 1.0; - } - - densefeat[11] = 0.0; - - // Radio Button - if ([className containsString:@"radio"] && [className containsString:@"button"]) { - densefeat[12] += 1.0; - } - - NSMutableArray *> *childviews = node[VIEW_HIERARCHY_CHILD_VIEWS_KEY]; - - for (int i = 0; i < childviews.count; i++) { - sum(densefeat, [self parseFeatures:childviews[i]]); - } - - return densefeat; -} - -void sum(float *val0, float *val1) { - for (int i = 0; i < 30; i++) { - val0[i] += val1[i]; - } -} - -+ (BOOL)isButton:(NSDictionary *)node -{ - int classtypebitmask = [[node objectForKey:VIEW_HIERARCHY_CLASS_TYPE_BITMASK_KEY] intValue]; - return (classtypebitmask & FBCodelessClassBitmaskUIButton) > 0; -} - -+ (void)update:(NSDictionary *)node - text:(NSMutableString *)buttonTextString - hint:(NSMutableString *)buttonHintString -{ - NSString *text = [node[VIEW_HIERARCHY_TEXT_KEY] lowercaseString]; - NSString *hint = [node[VIEW_HIERARCHY_HINT_KEY] lowercaseString]; - - if (text.length > 0) { - [buttonTextString appendFormat:@"%@ ", text]; - } - if (hint.length > 0) { - [buttonHintString appendFormat:@"%@ ", hint]; - } - - NSMutableArray *> *childviews = node[VIEW_HIERARCHY_CHILD_VIEWS_KEY]; - for (NSMutableDictionary *child in childviews) { - [self update:child text:buttonTextString hint:buttonHintString]; - } -} - -+ (BOOL)foundIndicators:(NSArray *)indicators inValues:(NSArray *)values -{ - for (NSString *indicator in indicators) { - for (NSString *value in values) { - if ([value containsString:indicator]) { - return YES; - } - } - } - - return NO; -} - -+ (float)regextMatch:(NSString *)pattern text:(NSString *)text -{ - NSRegularExpression *re = [NSRegularExpression regularExpressionWithPattern:pattern options:0 error:nil]; - NSRange range = NSMakeRange(0, text.length); - NSArray *matched = [re matchesInString:text options:0 range:range]; - return matched.count > 0 ? 1.0 : 0.0; -} - -+ (float)regexMatch:(NSString *)language - event:(NSString *)event - textType:(NSString *)textType - matchText:(NSString *)matchText -{ - NSString *pattern = _rules[@"rulesForLanguage"][_languageInfo[language]] - [@"rulesForEvent"][_eventInfo[event]] - [@"positiveRules"][_textTypeInfo[textType]]; - return [self regextMatch:pattern text:matchText]; -} - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/SuggestedEvents/FBSDKSuggestedEventsIndexer.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/SuggestedEvents/FBSDKSuggestedEventsIndexer.h deleted file mode 100644 index d8eaed6462..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/SuggestedEvents/FBSDKSuggestedEventsIndexer.h +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface FBSDKSuggestedEventsIndexer : NSObject - -+ (void)enable; - -@end - -NS_ASSUME_NONNULL_END - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/SuggestedEvents/FBSDKSuggestedEventsIndexer.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/SuggestedEvents/FBSDKSuggestedEventsIndexer.m deleted file mode 100644 index 55b0c4e398..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/SuggestedEvents/FBSDKSuggestedEventsIndexer.m +++ /dev/null @@ -1,271 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKSuggestedEventsIndexer.h" - -#import -#import -#import - -#import - -#import "FBSDKCoreKit+Internal.h" -#import "FBSDKEventInferencer.h" - -NSString * const OptInEvents = @"production_events"; -NSString * const UnconfirmedEvents = @"eligible_for_prediction_events"; - -static NSMutableArray *> *_viewTrees; -static NSMutableSet *_optInEvents; -static NSMutableSet *_unconfirmedEvents; - -@implementation FBSDKSuggestedEventsIndexer - -+ (void)initialize -{ - _viewTrees = [NSMutableArray array]; - _optInEvents = [NSMutableSet set]; - _unconfirmedEvents = [NSMutableSet set]; -} - -+ (void)enable -{ - [FBSDKServerConfigurationManager loadServerConfigurationWithCompletionBlock:^(FBSDKServerConfiguration *serverConfiguration, NSError *error) { - if (error) { - return; - } - - NSDictionary *suggestedEventsSetting = serverConfiguration.suggestedEventsSetting; - if ([suggestedEventsSetting isKindOfClass:[NSNull class]] || !suggestedEventsSetting[OptInEvents] || !suggestedEventsSetting[UnconfirmedEvents]) { - return; - } - - [_optInEvents addObjectsFromArray:suggestedEventsSetting[OptInEvents]]; - [_unconfirmedEvents addObjectsFromArray:suggestedEventsSetting[UnconfirmedEvents]]; - - [FBSDKSuggestedEventsIndexer setup]; - }]; -} - -+ (void)setup -{ - // won't do the model prediction when there is no opt-in event and unconfirmed event - if (_optInEvents.count == 0 && _unconfirmedEvents.count == 0) { - return; - } - - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - - // swizzle UIButton - [FBSDKSwizzler swizzleSelector:@selector(didMoveToWindow) onClass:[UIButton class] withBlock:^(UIButton *button) { - if (button.window) { - [button addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchDown]; - } - } named:@"suggested_events"]; - - // UITableView - void (^tableViewBlock)(UITableView *tableView, - SEL cmd, - id delegate) = - ^(UITableView *tableView, SEL cmd, id delegate) { - [self handleView:tableView withDelegate:delegate]; - }; - [FBSDKSwizzler swizzleSelector:@selector(setDelegate:) - onClass:[UITableView class] - withBlock:tableViewBlock - named:@"suggested_events"]; - - // UICollectionView - void (^collectionViewBlock)(UICollectionView *collectionView, - SEL cmd, - id delegate) = - ^(UICollectionView *collectionView, SEL cmd, id delegate) { - [self handleView:collectionView withDelegate:delegate]; - }; - [FBSDKSwizzler swizzleSelector:@selector(setDelegate:) - onClass:[UICollectionView class] - withBlock:collectionViewBlock - named:@"suggested_events"]; - - fb_dispatch_on_main_thread(^{ - [self rematchBindings]; - }); - }); -} - -+ (void)rematchBindings { - NSArray *windows = [UIApplication sharedApplication].windows; - for (UIWindow *window in windows) { - [self matchSubviewsIn:window]; - } -} - -+ (void)matchSubviewsIn:(UIView *)view { - if (!view) { - return; - } - - for (UIView *subview in view.subviews) { - - if ([subview isKindOfClass:[UITableView class]]) { - UITableView *tableView = (UITableView *)subview; - [self handleView:tableView withDelegate:tableView.delegate]; - } else if ([subview isKindOfClass:[UICollectionView class]]) { - UICollectionView *collectionView = (UICollectionView *)subview; - [self handleView:collectionView withDelegate:collectionView.delegate]; - } else if ([subview isKindOfClass:[UIButton class]]) { - [(UIButton *)subview addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchDown]; - } - - if (![subview isKindOfClass:[UIControl class]]) { - [self matchSubviewsIn:subview]; - } - } -} - -+ (void)buttonClicked:(UIButton *)button -{ - [self predictEvent:button withText:[FBSDKViewHierarchy getText:button]]; -} - -+ (void)handleView:(UIView *)view withDelegate:(id)delegate -{ - if (!delegate) { - return; - } - - if ([view isKindOfClass:[UITableView class]] - && [delegate respondsToSelector:@selector(tableView:didSelectRowAtIndexPath:)]) { - void (^block)(id, SEL, id, id) = ^(id target, SEL command, UITableView *tableView, NSIndexPath *indexPath) { - UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; - [self predictEvent:cell withText:[self getTextFromContentView:[cell contentView]]]; - }; - [FBSDKSwizzler swizzleSelector:@selector(tableView:didSelectRowAtIndexPath:) - onClass:[delegate class] - withBlock:block - named:@"suggested_events"]; - } else if ([view isKindOfClass:[UICollectionView class]] - && [delegate respondsToSelector:@selector(collectionView:didSelectItemAtIndexPath:)]) { - void (^block)(id, SEL, id, id) = ^(id target, SEL command, UICollectionView *collectionView, NSIndexPath *indexPath) { - UICollectionViewCell *cell = [collectionView cellForItemAtIndexPath:indexPath]; - [self predictEvent:cell withText:[self getTextFromContentView:[cell contentView]]]; - }; - [FBSDKSwizzler swizzleSelector:@selector(collectionView:didSelectItemAtIndexPath:) - onClass:[delegate class] - withBlock:block - named:@"suggested_events"]; - } -} - -+ (void)predictEvent:(NSObject *)obj withText:(NSString *)text -{ - if (text.length > 100 || text.length == 0 || [FBSDKAppEventsUtility isSensitiveUserData: text]) { - return; - } - - NSMutableArray *> *trees = [NSMutableArray array]; - - fb_dispatch_on_main_thread(^{ - NSArray *windows = [UIApplication sharedApplication].windows; - for (UIWindow *window in windows) { - NSDictionary *tree = [FBSDKViewHierarchy recursiveCaptureTree:window withObject:obj]; - if (tree) { - if (window.isKeyWindow) { - [trees insertObject:tree atIndex:0]; - } else { - [trees addObject:tree]; - } - } - } - NSMutableDictionary *treeInfo = [NSMutableDictionary dictionary]; - - NSString *screenName = nil; - UIViewController *topMostViewController = [FBSDKInternalUtility topMostViewController]; - if (topMostViewController) { - screenName = NSStringFromClass([topMostViewController class]); - } - - treeInfo[VIEW_HIERARCHY_VIEW_KEY] = trees; - treeInfo[VIEW_HIERARCHY_SCREEN_NAME_KEY] = screenName ?: @""; - - [_viewTrees addObject:treeInfo]; - - NSDictionary *viewTree = [_viewTrees lastObject]; - - fb_dispatch_on_default_thread(^{ - NSDictionary *result = [FBSDKEventInferencer predict:text viewTree:[viewTree mutableCopy] withLog:YES]; - NSString *event = result[SUGGEST_EVENT_KEY]; - if (!event || [event isEqualToString:SUGGESTED_EVENTS_OTHER]) { - return; - } - if ([_optInEvents containsObject:event]) { - [FBSDKAppEvents logEvent:event - parameters:@{@"_is_suggested_event": @"1", - @"_button_text": text - }]; - } else if ([_unconfirmedEvents containsObject:event]) { - // Only send back not confirmed events to advertisers - [self logSuggestedEvent:event withText:text withDenseFeature:result[DENSE_FEATURE_KEY] ?: @""]; - } - }); - }); -} - -#pragma mark - Helper Methods - -+ (NSString *)getTextFromContentView:(UIView *)contentView -{ - NSMutableArray *textArray = [NSMutableArray array]; - for (UIView *subView in [contentView subviews]) { - NSString *label = [FBSDKViewHierarchy getText:subView]; - if (label.length > 0) { - [textArray addObject:label]; - } - } - return [textArray componentsJoinedByString:@" "]; -} - -+ (void)logSuggestedEvent:(NSString *)event withText:(NSString *)text withDenseFeature:(NSString *)denseFeature -{ - NSString *metadata = [FBSDKBasicUtility JSONStringForObject:@{@"button_text": text, - @"dense": denseFeature, - } - error:nil - invalidObjectHandler:nil]; - if (!metadata) { - return; - } - - FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] - initWithGraphPath:[NSString stringWithFormat:@"%@/suggested_events", [FBSDKSettings appID]] - parameters: @{@"event_name": event, - @"metadata": metadata, - } - HTTPMethod:FBSDKHTTPMethodPOST]; - [request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {}]; - return; -} - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/ViewHierarchy/FBSDKViewHierarchy.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/ViewHierarchy/FBSDKViewHierarchy.h deleted file mode 100644 index 99db73a12f..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/ViewHierarchy/FBSDKViewHierarchy.h +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import - -typedef NS_ENUM(NSUInteger, FBCodelessClassBitmask) { - /** Indicates that the class is subclass of UIControl */ - FBCodelessClassBitmaskUIControl = 1 << 3, - /** Indicates that the class is subclass of UIControl */ - FBCodelessClassBitmaskUIButton = 1 << 4, - /** Indicates that the class is ReactNative Button */ - FBCodelessClassBitmaskReactNativeButton = 1 << 6, - /** Indicates that the class is UITableViewCell */ - FBCodelessClassBitmaskUITableViewCell = 1 << 7, - /** Indicates that the class is UICollectionViewCell */ - FBCodelessClassBitmaskUICollectionViewCell = 1 << 8, - /** Indicates that the class is UILabel */ - FBCodelessClassBitmaskLabel = 1 << 10, - /** Indicates that the class is UITextView or UITextField*/ - FBCodelessClassBitmaskInput = 1 << 11, - /** Indicates that the class is UIPicker*/ - FBCodelessClassBitmaskPicker = 1 << 12, - /** Indicates that the class is UISwitch*/ - FBCodelessClassBitmaskSwitch = 1 << 13, - /** Indicates that the class is UIViewController*/ - FBCodelessClassBitmaskUIViewController = 1 << 17, -}; - -extern void fb_dispatch_on_main_thread(dispatch_block_t block); -extern void fb_dispatch_on_default_thread(dispatch_block_t block); - -NS_SWIFT_NAME(ViewHierarchy) -@interface FBSDKViewHierarchy : NSObject - -+ (NSObject *)getParent:(NSObject *)obj; -+ (NSArray *)getChildren:(NSObject *)obj; -+ (NSArray *)getPath:(NSObject *)obj; -+ (NSMutableDictionary *)getDetailAttributesOf:(NSObject *)obj; - -+ (NSString *)getText:(NSObject *)obj; -+ (NSString *)getHint:(NSObject *)obj; -+ (NSIndexPath *)getIndexPath:(NSObject *)obj; -+ (NSUInteger)getClassBitmask:(NSObject *)obj; -+ (UITableView *)getParentTableView:(UIView *)cell; -+ (UICollectionView *)getParentCollectionView:(UIView *)cell; -+ (NSInteger)getTag:(NSObject *)obj; -+ (NSNumber *)getViewReactTag:(UIView *)view; - -+ (NSDictionary *)recursiveCaptureTree:(NSObject *)obj withObject:(NSObject *)interact; - -+ (BOOL)isUserInputView:(NSObject *)obj; - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/ViewHierarchy/FBSDKViewHierarchy.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/ViewHierarchy/FBSDKViewHierarchy.m deleted file mode 100644 index e3aa150310..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/ViewHierarchy/FBSDKViewHierarchy.m +++ /dev/null @@ -1,662 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKViewHierarchy.h" - -#import - -#import - -#import "FBSDKCodelessPathComponent.h" -#import "FBSDKCoreKit+Internal.h" -#import "FBSDKViewHierarchyMacros.h" - -#define MAX_VIEW_HIERARCHY_LEVEL 35 - -void fb_dispatch_on_main_thread(dispatch_block_t block) { - if (block != nil) { - if ([NSThread isMainThread]) { - block(); - } else { - dispatch_async(dispatch_get_main_queue(), block); - } - } -} - -void fb_dispatch_on_default_thread(dispatch_block_t block) { - if (block != nil) { - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), block); - } -} - -@implementation FBSDKViewHierarchy - -+ (NSArray*)getChildren:(NSObject*)obj -{ - if ([obj isKindOfClass:[UIControl class]]) { - return nil; - } - - NSMutableArray *children = [NSMutableArray array]; - - // children of window should be viewcontroller - if ([obj isKindOfClass:[UIWindow class]]) { - UIViewController *rootVC = ((UIWindow *)obj).rootViewController; - NSArray *subviews = ((UIWindow *)obj).subviews; - for (UIView *child in subviews) { - if (child != rootVC.view) { - UIViewController *vc = [FBSDKViewHierarchy getParentViewController:child]; - if (vc != nil && vc.view == child) { - [children addObject:vc]; - } else { - [children addObject:child]; - } - } else { - if (rootVC) { - [children addObject:rootVC]; - } - } - } - } else if ([obj isKindOfClass:[UIView class]]) { - NSArray *subviews = [((UIView *)obj).subviews copy]; - for (UIView *child in subviews) { - UIViewController *vc = [FBSDKViewHierarchy getParentViewController:child]; - if (vc && vc.view == child) { - [children addObject:vc]; - } else { - [children addObject:child]; - } - } - } else if ([obj isKindOfClass:[UINavigationController class]]) { - UIViewController *vc = ((UINavigationController*)obj).visibleViewController; - UIViewController *tc = ((UINavigationController*)obj).topViewController; - NSArray *nextChildren = [FBSDKViewHierarchy getChildren:((UIViewController*)obj).view]; - for (NSObject *child in nextChildren) { - if (tc && [self isView:child superViewOfView:tc.view]) { - [children addObject:tc]; - } else if (vc && [self isView:child superViewOfView:vc.view]) { - [children addObject:vc]; - } else { - if (child != vc.view && child != tc.view) { - [children addObject:child]; - } else { - if (vc && child == vc.view) { - [children addObject:vc]; - } else if (tc && child == tc.view) { - [children addObject:tc]; - } - } - } - } - - if (vc && ![children containsObject:vc]) { - [children addObject:vc]; - } - } else if ([obj isKindOfClass:[UITabBarController class]]) { - UIViewController *vc = ((UITabBarController *)obj).selectedViewController; - NSArray *nextChildren = [FBSDKViewHierarchy getChildren:((UIViewController*)obj).view]; - for (NSObject *child in nextChildren) { - if (vc && [self isView:child superViewOfView:vc.view]) { - [children addObject:vc]; - } else { - if (vc && child == vc.view) { - [children addObject:vc]; - } else { - [children addObject:child]; - } - } - } - - if (vc && ![children containsObject:vc]) { - [children addObject:vc]; - } - } else if ([obj isKindOfClass:[UIViewController class]]) { - UIViewController *vc = (UIViewController *)obj; - if (vc.isViewLoaded) { - NSArray *nextChildren = [FBSDKViewHierarchy getChildren:vc.view]; - if (nextChildren.count > 0) { - [children addObjectsFromArray:nextChildren]; - } - } - for (NSObject *child in vc.childViewControllers) { - [children addObject:child]; - } - UIViewController *presentedVC = vc.presentedViewController; - if (presentedVC) { - [children addObject:presentedVC]; - } - } - return children; -} - -+ (NSObject *)getParent:(NSObject *)obj -{ - if ([obj isKindOfClass:[UIView class]]) { - UIView *superview = ((UIView *)obj).superview; - UIViewController *superviewViewController = [FBSDKViewHierarchy - getParentViewController:superview]; - if (superviewViewController && superviewViewController.view == superview) { - return superviewViewController; - } - if (superview && superview != obj) { - return superview; - } - } - else if ([obj isKindOfClass:[UIViewController class]]) { - UIViewController *vc = (UIViewController *)obj; - UIViewController *parentVC = vc.parentViewController; - UIViewController *presentingVC = vc.presentingViewController; - UINavigationController *nav = vc.navigationController; - UITabBarController *tab = vc.tabBarController; - - if (nav) { - return nav; - } - - if (tab) { - return tab; - } - - if (parentVC) { - return parentVC; - } - - if (presentingVC && presentingVC.presentedViewController == vc) { - return presentingVC; - } - - // Return parent of view of UIViewController - NSObject *viewParent = [FBSDKViewHierarchy getParent:vc.view]; - if (viewParent) { - return viewParent; - } - } - return nil; -} - -+ (NSArray *)getPath:(NSObject *)obj -{ - return [FBSDKViewHierarchy getPath:obj limit:MAX_VIEW_HIERARCHY_LEVEL]; -} - -+ (NSArray *)getPath:(NSObject *)obj limit:(int)limit -{ - if (!obj || limit <= 0) { - return nil; - } - - NSMutableArray *path; - - NSObject *parent = [FBSDKViewHierarchy getParent:obj]; - if (parent) { - NSArray *parentPath = [FBSDKViewHierarchy getPath:parent limit:limit - 1]; - path = [NSMutableArray arrayWithArray:parentPath]; - } else { - path = [NSMutableArray array]; - } - - NSDictionary *componentInfo = [FBSDKViewHierarchy getAttributesOf:obj parent:parent]; - - FBSDKCodelessPathComponent *pathComponent = [[FBSDKCodelessPathComponent alloc] - initWithJSON:componentInfo]; - [path addObject:pathComponent]; - - return [NSArray arrayWithArray:path]; -} - -+ (NSDictionary *)getAttributesOf:(NSObject *)obj parent:(NSObject *)parent -{ - NSMutableDictionary *componentInfo = [NSMutableDictionary dictionary]; - componentInfo[CODELESS_MAPPING_CLASS_NAME_KEY] = NSStringFromClass([obj class]); - - if (![FBSDKViewHierarchy isUserInputView:obj]) { - NSString *text = [FBSDKViewHierarchy getText:obj]; - if (text) { - componentInfo[CODELESS_MAPPING_TEXT_KEY] = text; - } - } else { - componentInfo[CODELESS_MAPPING_TEXT_KEY] = @""; - componentInfo[CODELESS_MAPPING_IS_USER_INPUT_KEY] = @YES; - } - - NSString *hint = [FBSDKViewHierarchy getHint:obj]; - if (hint) { - componentInfo[CODELESS_MAPPING_HINT_KEY] = hint; - } - - NSIndexPath *indexPath = [FBSDKViewHierarchy getIndexPath:obj]; - if (indexPath) { - componentInfo[CODELESS_MAPPING_SECTION_KEY] = @(indexPath.section); - componentInfo[CODELESS_MAPPING_ROW_KEY] = @(indexPath.row); - } - - if (parent != nil) { - NSArray *children = [FBSDKViewHierarchy getChildren:parent]; - NSUInteger index = [children indexOfObject:obj]; - if (index != NSNotFound) { - componentInfo[CODELESS_MAPPING_INDEX_KEY] = @(index); - } - } else { - componentInfo[CODELESS_MAPPING_INDEX_KEY] = @0; - } - - componentInfo[CODELESS_VIEW_TREE_TAG_KEY] = @([FBSDKViewHierarchy getTag:obj]); - - return [componentInfo copy]; -} - -+ (NSMutableDictionary *)getDetailAttributesOf:(NSObject *)obj -{ - return [self getDetailAttributesOf:obj withHash:YES]; -} - -+ (NSMutableDictionary *)getDetailAttributesOf:(NSObject *)obj withHash:(BOOL)hash -{ - if (!obj) { - return nil; - } - - NSObject *parent = [FBSDKViewHierarchy getParent:obj]; - - NSDictionary *simpleAttributes = [FBSDKViewHierarchy getAttributesOf:obj parent:parent]; - - NSMutableDictionary *result = [NSMutableDictionary dictionaryWithDictionary:simpleAttributes]; - - NSString *className = NSStringFromClass([obj class]); - result[VIEW_HIERARCHY_CLASS_NAME_KEY] = className; - - NSUInteger classBitmask = [FBSDKViewHierarchy getClassBitmask:obj]; - result[VIEW_HIERARCHY_CLASS_TYPE_BITMASK_KEY] = [NSString stringWithFormat:@"%lu", (unsigned long)classBitmask]; - - if ([obj isKindOfClass:[UIControl class]]) { - // Get actions of UIControl - UIControl *control = (UIControl *)obj; - NSMutableSet *actions = [NSMutableSet set]; - NSSet *targets = control.allTargets; - for (NSObject *target in targets) { - NSArray *ary = [control actionsForTarget:target forControlEvent:0]; - if (ary.count > 0) { - [actions addObjectsFromArray:ary]; - } - } - if (targets.count > 0) { - result[CODELESS_VIEW_TREE_ACTIONS_KEY] = actions.allObjects; - } - } - - result[CODELESS_VIEW_TREE_DIMENSION_KEY] = [FBSDKViewHierarchy getDimensionOf:obj]; - - NSDictionary *textStyle = [FBSDKViewHierarchy getTextStyle:obj]; - if (textStyle) { - result[CODELESS_VIEW_TREE_TEXT_STYLE_KEY] = textStyle; - } - - if (hash) { - // hash text and hint - result[VIEW_HIERARCHY_TEXT_KEY] = [FBSDKUtility SHA256Hash:result[VIEW_HIERARCHY_TEXT_KEY]]; - result[VIEW_HIERARCHY_HINT_KEY] = [FBSDKUtility SHA256Hash:result[VIEW_HIERARCHY_HINT_KEY]]; - } - - return result; -} - -+ (NSIndexPath *)getIndexPath:(NSObject *)obj -{ - NSIndexPath *indexPath = nil; - - if ([obj isKindOfClass:[UITableViewCell class]]) { - UITableView *tableView = [FBSDKViewHierarchy getParentTableView:(UIView *)obj]; - indexPath = [tableView indexPathForCell:(UITableViewCell *)obj]; - } else if ([obj isKindOfClass:[UICollectionViewCell class]]) { - UICollectionView *collectionView = [FBSDKViewHierarchy getParentCollectionView:(UIView *)obj]; - indexPath = [collectionView indexPathForCell:(UICollectionViewCell *)obj]; - } - - return indexPath; -} - -+ (NSString *)getText:(NSObject *)obj -{ - NSString *text = nil; - - if ([obj isKindOfClass:[UIButton class]]) { - text = ((UIButton *)obj).currentTitle; - } else if ([obj isKindOfClass:[UITextView class]] || - [obj isKindOfClass:[UITextField class]] || - [obj isKindOfClass:[UILabel class]]) { - text = ((UILabel *)obj).text; - } else if ([obj isKindOfClass:[UIPickerView class]]) { - UIPickerView *picker = (UIPickerView *)obj; - NSInteger sections = picker.numberOfComponents; - NSMutableArray *titles = [NSMutableArray array]; - - for (NSInteger i = 0; i < sections; i++) { - NSInteger row = [picker selectedRowInComponent:i]; - NSString *title; - if ([picker.delegate - respondsToSelector:@selector(pickerView:titleForRow:forComponent:)]) { - title = [picker.delegate pickerView:picker titleForRow:row forComponent:i]; - } else if ([picker.delegate - respondsToSelector:@selector(pickerView:attributedTitleForRow:forComponent:)]) { - title = [picker.delegate - pickerView:picker - attributedTitleForRow:row forComponent:i].string; - } - [titles addObject:title ?: @""]; - } - - if (titles.count > 0) { - text = [FBSDKBasicUtility JSONStringForObject:titles - error:NULL - invalidObjectHandler:NULL]; - } - } else if ([obj isKindOfClass:[UIDatePicker class]]) { - UIDatePicker *picker = (UIDatePicker *)obj; - NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; - formatter.dateFormat = @"yyyy-MM-dd HH:mm:ssZ"; - text = [formatter stringFromDate:picker.date]; - } else if ([obj isKindOfClass:objc_lookUpClass("RCTTextView")]) { - NSTextStorage *textStorage = [FBSDKAppEventsUtility getVariable:@"_textStorage" - fromInstance:obj]; - if (textStorage) { - text = textStorage.string; - } - } else if ([obj isKindOfClass:objc_lookUpClass("RCTBaseTextInputView")]) { - NSAttributedString *attributedText = [FBSDKAppEventsUtility getVariable:@"attributedText" - fromInstance:obj]; - text = attributedText.string; - } - - return text.length > 0 ? text : nil; -} - -+ (NSDictionary *)getTextStyle:(NSObject *)obj -{ - UIFont *font = nil; - if ([obj isKindOfClass:[UIButton class]]) { - font = ((UIButton *)obj).titleLabel.font; - } else if ([obj isKindOfClass:[UILabel class]]) { - font = ((UILabel *)obj).font; - } else if ([obj isKindOfClass:[UITextField class]]) { - font = ((UITextField *)obj).font; - } else if ([obj isKindOfClass:[UITextView class]]) { - font = ((UITextView *)obj).font; - } - - if (font) { - UIFontDescriptorSymbolicTraits traits = font.fontDescriptor.symbolicTraits; - BOOL isBold = (traits & UIFontDescriptorTraitBold) != 0; - BOOL isItalic = (traits & UIFontDescriptorTraitItalic) != 0; - CGFloat fontSize = font.pointSize; - - return @{ - CODELESS_VIEW_TREE_TEXT_IS_BOLD_KEY: @(isBold), - CODELESS_VIEW_TREE_TEXT_IS_ITALIC_KEY: @(isItalic), - CODELESS_VIEW_TREE_TEXT_SIZE_KEY: @(fontSize) - }; - } - - return nil; -} - -+ (NSString *)getHint:(NSObject *)obj -{ - NSString *hint = nil; - - if ([obj isKindOfClass:[UITextField class]]) { - hint = ((UITextField *)obj).placeholder; - } else if ([obj isKindOfClass:[UINavigationController class]]) { - UIViewController *top = ((UINavigationController *)obj).topViewController; - if (top) { - hint = NSStringFromClass([top class]); - } - } - - return hint.length > 0 ? hint : nil; -} - -+ (NSUInteger)getClassBitmask:(NSObject *)obj -{ - NSUInteger bitmask = 0; - - if ([obj isKindOfClass:[UIView class]]) { - if ([obj isKindOfClass:[UIControl class]]) { - bitmask |= FBCodelessClassBitmaskUIControl; - if ([obj isKindOfClass:[UIButton class]]) { - bitmask |= FBCodelessClassBitmaskUIButton; - } else if ([obj isKindOfClass:[UISwitch class]]) { - bitmask |= FBCodelessClassBitmaskSwitch; - }else if ([obj isKindOfClass:[UIDatePicker class]]) { - bitmask |= FBCodelessClassBitmaskPicker; - } - } else if ([obj isKindOfClass:[UITableViewCell class]]) { - bitmask |= FBCodelessClassBitmaskUITableViewCell; - } else if ([obj isKindOfClass:[UICollectionViewCell class]]) { - bitmask |= FBCodelessClassBitmaskUICollectionViewCell; - } else if ([obj isKindOfClass:[UIPickerView class]]) { - bitmask |= FBCodelessClassBitmaskPicker; - } else if ([obj isKindOfClass:[UILabel class]]) { - bitmask |= FBCodelessClassBitmaskLabel; - } - - if ([FBSDKViewHierarchy isRCTButton:((UIView *)obj)]) { - bitmask |= FBCodelessClassBitmaskReactNativeButton; - } - - // Check selector of UITextInput protocol instead of checking conformsToProtocol - if ([obj respondsToSelector:@selector(textInRange:)]) { - bitmask |= FBCodelessClassBitmaskInput; - } - } else if ([obj isKindOfClass:[UIViewController class]]) { - bitmask |= FBCodelessClassBitmaskUIViewController; - } - - return bitmask; -} - -+ (BOOL)isUserInputView:(NSObject *)obj -{ - if (obj && [obj conformsToProtocol:@protocol(UITextInput)]) { - id input = (id)obj; - if ([input respondsToSelector:@selector(isSecureTextEntry)] - && input.secureTextEntry) { - return YES; - } else { - if ([input respondsToSelector:@selector(keyboardType)]) { - switch (input.keyboardType) { - case UIKeyboardTypePhonePad: - case UIKeyboardTypeEmailAddress: - return YES; - default: break; - } - } - } - } - - NSString *text = [FBSDKViewHierarchy getText:obj]; - return text && [FBSDKAppEventsUtility isSensitiveUserData:text]; -} - -+ (NSDictionary *)recursiveCaptureTree:(NSObject *)obj withObject:(NSObject *)interact -{ - if (!obj) { - return nil; - } - - NSMutableDictionary *result = [FBSDKViewHierarchy getDetailAttributesOf:obj withHash:NO]; - - NSArray *children = [FBSDKViewHierarchy getChildren:obj]; - NSMutableArray *> *childrenTrees = [NSMutableArray array]; - for (NSObject *child in children) { - NSDictionary *objTree = [self recursiveCaptureTree:child withObject:interact]; - [childrenTrees addObject:objTree]; - } - - if (childrenTrees.count > 0) { - [result setObject:[childrenTrees copy] forKey:VIEW_HIERARCHY_CHILD_VIEWS_KEY]; - } - if (obj == interact) { - [result setObject:[NSNumber numberWithBool:YES] forKey:VIEW_HIERARCHY_IS_INTERACTED_KEY]; - } - return [result copy]; -} - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wundeclared-selector" -+ (BOOL)isRCTButton:(UIView *)view -{ - if (view == nil) { - return NO; - } - - Class classRCTView = objc_lookUpClass(ReactNativeClassRCTView); - if (classRCTView && [view isKindOfClass:classRCTView] && - [view respondsToSelector:@selector(reactTagAtPoint:)] && - [view respondsToSelector:@selector(reactTag)] && - view.userInteractionEnabled) { - // We check all its subviews locations and the view is clickable if there exists one that mathces reactTagAtPoint - for (UIView *subview in view.subviews) { - if (subview && ![subview isKindOfClass:classRCTView]) { - NSNumber *reactTag = [view performSelector:@selector(reactTagAtPoint:) - withObject:[NSValue valueWithCGPoint:subview.frame.origin]]; - NSNumber *subviewReactTag = [FBSDKViewHierarchy getViewReactTag:subview]; - if (reactTag != nil && subviewReactTag != nil && [reactTag isEqualToNumber:subviewReactTag]) { - return YES; - } - } - } - } - - return NO; -} - -+ (NSNumber *)getViewReactTag:(UIView *)view -{ - if (view != nil && [view respondsToSelector:@selector(reactTag)]) { - NSNumber *reactTag = [view performSelector:@selector(reactTag)]; - if (reactTag != nil && [reactTag isKindOfClass:[NSNumber class]]) { - return reactTag; - } - } - - return nil; -} -#pragma clang diagnostic pop - -+ (BOOL)isView:(NSObject *)obj1 superViewOfView:(UIView *)obj2 -{ - if (![obj1 isKindOfClass:[UIView class]] - || ![obj2 isKindOfClass:[UIView class]]) { - return NO; - } - UIView *view1 = (UIView *)obj1; - UIView *view2 = (UIView *)obj2; - UIView *superview = view2; - while (superview) { - superview = superview.superview; - if (superview == view1) { - return YES; - } - } - - return NO; -} - -+ (UIViewController *)getParentViewController:(UIView *)view -{ - UIResponder *parentResponder = view; - - while (parentResponder) { - parentResponder = parentResponder.nextResponder; - if ([parentResponder isKindOfClass:[UIViewController class]]) { - return (UIViewController *)parentResponder; - } - } - - return nil; -} - -+ (UITableView *)getParentTableView:(UIView *)cell -{ - UIView *superview = cell.superview; - while (superview) { - if ([superview isKindOfClass:[UITableView class]]) { - return (UITableView *)superview; - } - superview = superview.superview; - } - return nil; -} - -+ (UICollectionView *)getParentCollectionView:(UIView *)cell -{ - UIView *superview = cell.superview; - while (superview) { - if ([superview isKindOfClass:[UICollectionView class]]) { - return (UICollectionView *)superview; - } - superview = superview.superview; - } - return nil; -} - -+ (NSInteger)getTag:(NSObject *)obj -{ - if ([obj isKindOfClass:[UIView class]]) { - return ((UIView *)obj).tag; - } else if ([obj isKindOfClass:[UIViewController class]]) { - return ((UIViewController *)obj).view.tag; - } - - return 0; -} - -+ (NSDictionary *)getDimensionOf:(NSObject *)obj -{ - UIView *view = nil; - - if ([obj isKindOfClass:[UIView class]]) { - view = (UIView *)obj; - } else if ([obj isKindOfClass:[UIViewController class]]) { - view = ((UIViewController *)obj).view; - } - - CGRect frame = view.frame; - CGPoint offset = CGPointZero; - - if ([view isKindOfClass:[UIScrollView class]]) - offset = ((UIScrollView *)view).contentOffset; - - return @{ - CODELESS_VIEW_TREE_TOP_KEY: @((int)frame.origin.y), - CODELESS_VIEW_TREE_LEFT_KEY: @((int)frame.origin.x), - CODELESS_VIEW_TREE_WIDTH_KEY: @((int)frame.size.width), - CODELESS_VIEW_TREE_HEIGHT_KEY: @((int)frame.size.height), - CODELESS_VIEW_TREE_OFFSET_X_KEY: @((int)offset.x), - CODELESS_VIEW_TREE_OFFSET_Y_KEY: @((int)offset.y), - CODELESS_VIEW_TREE_VISIBILITY_KEY: view.isHidden ? @4 : @0 - }; -} - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/ViewHierarchy/FBSDKViewHierarchyMacros.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/ViewHierarchy/FBSDKViewHierarchyMacros.h deleted file mode 100644 index a81f113270..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/ViewHierarchy/FBSDKViewHierarchyMacros.h +++ /dev/null @@ -1,102 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. -#ifndef FBSDKViewHierarchyMacros_h -#define FBSDKViewHierarchyMacros_h - -// keys for event binding path compoenent -#define CODELESS_MAPPING_METHOD_KEY @"method" -#define CODELESS_MAPPING_EVENT_NAME_KEY @"event_name" -#define CODELESS_MAPPING_EVENT_TYPE_KEY @"event_type" -#define CODELESS_MAPPING_APP_VERSION_KEY @"app_version" -#define CODELESS_MAPPING_PATH_KEY @"path" -#define CODELESS_MAPPING_PATH_TYPE_KEY @"path_type" -#define CODELESS_MAPPING_CLASS_NAME_KEY @"class_name" -#define CODELESS_MAPPING_MATCH_BITMASK_KEY @"match_bitmask" -#define CODELESS_MAPPING_ID_KEY @"id" -#define CODELESS_MAPPING_INDEX_KEY @"index" -#define CODELESS_MAPPING_IS_USER_INPUT_KEY @"is_user_input" -#define CODELESS_MAPPING_SECTION_KEY @"section" -#define CODELESS_MAPPING_ROW_KEY @"row" -#define CODELESS_MAPPING_TEXT_KEY @"text" -#define CODELESS_MAPPING_TAG_KEY @"tag" -#define CODELESS_MAPPING_DESC_KEY @"description" -#define CODELESS_MAPPING_HINT_KEY @"hint" -#define CODELESS_MAPPING_PARAMETERS_KEY @"parameters" -#define CODELESS_MAPPING_PARAMETER_NAME_KEY @"name" -#define CODELESS_MAPPING_PARAMETER_VALUE_KEY @"value" - -#define CODELESS_MAPPING_PARENT_CLASS_NAME @".." -#define CODELESS_MAPPING_CURRENT_CLASS_NAME @"." - -#define ReactNativeClassRCTView "RCTView" -#define ReactNativeClassRCTRootView "RCTRootView" - -#define CODELESS_INDEXING_UPLOAD_INTERVAL_IN_SECONDS 1 -#define CODELESS_INDEXING_STATUS_KEY @"is_app_indexing_enabled" -#define CODELESS_INDEXING_SESSION_ID_KEY @"device_session_id" -#define CODELESS_INDEXING_APP_VERSION_KEY @"app_version" -#define CODELESS_INDEXING_SDK_VERSION_KEY @"sdk_version" -#define CODELESS_INDEXING_PLATFORM_KEY @"platform" -#define CODELESS_INDEXING_TREE_KEY @"tree" -#define CODELESS_INDEXING_SCREENSHOT_KEY @"screenshot" -#define CODELESS_INDEXING_EXT_INFO_KEY @"extinfo" - -#define CODELESS_INDEXING_ENDPOINT @"app_indexing" -#define CODELESS_INDEXING_SESSION_ENDPOINT @"app_indexing_session" - -#define CODELESS_SETUP_ENABLED_FIELD @"auto_event_setup_enabled" -#define CODELESS_SETUP_ENABLED_KEY @"codeless_setup_enabled" -#define CODELESS_SETTING_KEY @"com.facebook.sdk:codelessSetting%@" -#define CODELESS_SETTING_TIMESTAMP_KEY @"codeless_setting_timestamp" -#define CODELESS_SETTING_CACHE_TIMEOUT (7 * 24 * 60 * 60) - -// keys for view tree -#define CODELESS_VIEW_TREE_DESC_KEY @"description" -#define CODELESS_VIEW_TREE_DIMENSION_KEY @"dimension" -#define CODELESS_VIEW_TREE_TAG_KEY @"tag" -#define CODELESS_VIEW_TREE_ACTIONS_KEY @"actions" - -#define CODELESS_VIEW_TREE_TOP_KEY @"top" -#define CODELESS_VIEW_TREE_LEFT_KEY @"left" -#define CODELESS_VIEW_TREE_WIDTH_KEY @"width" -#define CODELESS_VIEW_TREE_HEIGHT_KEY @"height" -#define CODELESS_VIEW_TREE_OFFSET_X_KEY @"scrollx" -#define CODELESS_VIEW_TREE_OFFSET_Y_KEY @"scrolly" -#define CODELESS_VIEW_TREE_VISIBILITY_KEY @"visibility" - -#define CODELESS_VIEW_TREE_TEXT_STYLE_KEY @"text_style" -#define CODELESS_VIEW_TREE_TEXT_IS_BOLD_KEY @"is_bold" -#define CODELESS_VIEW_TREE_TEXT_IS_ITALIC_KEY @"is_italic" -#define CODELESS_VIEW_TREE_TEXT_SIZE_KEY @"font_size" - -// keys for view hierarchy -#define VIEW_HIERARCHY_CHILD_VIEWS_KEY @"childviews" -#define VIEW_HIERARCHY_CLASS_NAME_KEY @"classname" -#define VIEW_HIERARCHY_CLASS_TYPE_BITMASK_KEY @"classtypebitmask" -#define VIEW_HIERARCHY_HINT_KEY @"hint" -#define VIEW_HIERARCHY_IS_INTERACTED_KEY @"is_interacted" -#define VIEW_HIERARCHY_SCREEN_NAME_KEY @"screenname" -#define VIEW_HIERARCHY_TEXT_KEY @"text" -#define VIEW_HIERARCHY_VIEW_KEY @"view" - -// keys for suggested events -#define DENSE_FEATURE_KEY @"DENSE_FEATURE" -#define SUGGEST_EVENT_KEY @"SUGGEST_EVENT" -#define SUGGESTED_EVENTS_OTHER @"other" - -#endif /* FBSDKCodelessMacros_h */ diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLink.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLink.h deleted file mode 100644 index 9d681b29d1..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLink.h +++ /dev/null @@ -1,75 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import - -#import "FBSDKAppLinkTarget.h" - -NS_ASSUME_NONNULL_BEGIN - -/** The version of the App Link protocol that this library supports */ -FOUNDATION_EXPORT NSString *const FBSDKAppLinkVersion -NS_SWIFT_NAME(AppLinkVersion); - -/** - Contains App Link metadata relevant for navigation on this device - derived from the HTML at a given URL. - */ -NS_SWIFT_NAME(AppLink) -@interface FBSDKAppLink : NSObject - -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; - -/** - Creates a FBSDKAppLink with the given list of FBSDKAppLinkTargets and target URL. - - Generally, this will only be used by implementers of the FBSDKAppLinkResolving protocol, - as these implementers will produce App Link metadata for a given URL. - - @param sourceURL the URL from which this App Link is derived - @param targets an ordered list of FBSDKAppLinkTargets for this platform derived - from App Link metadata. - @param webURL the fallback web URL, if any, for the app link. - */ -+ (instancetype)appLinkWithSourceURL:(nullable NSURL *)sourceURL - targets:(NSArray *)targets - webURL:(nullable NSURL *)webURL -NS_SWIFT_NAME(init(sourceURL:targets:webURL:)); - -/** The URL from which this FBSDKAppLink was derived */ -@property (nonatomic, strong, readonly, nullable) NSURL *sourceURL; - -/** - The ordered list of targets applicable to this platform that will be used - for navigation. - */ -@property (nonatomic, copy, readonly) NSArray *targets; - -/** The fallback web URL to use if no targets are installed on this device. */ -@property (nonatomic, strong, readonly, nullable) NSURL *webURL; - -@end - -NS_ASSUME_NONNULL_END - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLink.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLink.m deleted file mode 100644 index a1ea9d2dc6..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLink.m +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKAppLink_Internal.h" - -NSString *const FBSDKAppLinkDataParameterName = @"al_applink_data"; -NSString *const FBSDKAppLinkTargetKeyName = @"target_url"; -NSString *const FBSDKAppLinkUserAgentKeyName = @"user_agent"; -NSString *const FBSDKAppLinkExtrasKeyName = @"extras"; -NSString *const FBSDKAppLinkRefererAppLink = @"referer_app_link"; -NSString *const FBSDKAppLinkRefererAppName = @"app_name"; -NSString *const FBSDKAppLinkRefererUrl = @"url"; -NSString *const FBSDKAppLinkVersionKeyName = @"version"; -NSString *const FBSDKAppLinkVersion = @"1.0"; - -@interface FBSDKAppLink () - -@property (nonatomic, strong) NSURL *sourceURL; -@property (nonatomic, copy) NSArray *targets; -@property (nonatomic, strong) NSURL *webURL; - -@property (nonatomic, assign, getter=isBackToReferrer) BOOL backToReferrer; - -@end - -@implementation FBSDKAppLink - -+ (instancetype)appLinkWithSourceURL:(NSURL *)sourceURL - targets:(NSArray *)targets - webURL:(NSURL *)webURL - isBackToReferrer:(BOOL)isBackToReferrer { - FBSDKAppLink *link = [[self alloc] initWithIsBackToReferrer:isBackToReferrer]; - link.sourceURL = sourceURL; - link.targets = [targets copy]; - link.webURL = webURL; - return link; -} - -+ (instancetype)appLinkWithSourceURL:(NSURL *)sourceURL - targets:(NSArray *)targets - webURL:(NSURL *)webURL { - return [self appLinkWithSourceURL:sourceURL - targets:targets - webURL:webURL - isBackToReferrer:NO]; -} - -- (FBSDKAppLink *)initWithIsBackToReferrer:(BOOL)backToReferrer { - if ((self = [super init])) { - _backToReferrer = backToReferrer; - } - return self; -} - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkNavigation.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkNavigation.h deleted file mode 100644 index 4905ca7e27..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkNavigation.h +++ /dev/null @@ -1,147 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import - -#import "FBSDKAppLink.h" -#import "FBSDKAppLinkResolving.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - The result of calling navigate on a FBSDKAppLinkNavigation - */ -typedef NS_ENUM(NSInteger, FBSDKAppLinkNavigationType) { - /** Indicates that the navigation failed and no app was opened */ - FBSDKAppLinkNavigationTypeFailure, - /** Indicates that the navigation succeeded by opening the URL in the browser */ - FBSDKAppLinkNavigationTypeBrowser, - /** Indicates that the navigation succeeded by opening the URL in an app on the device */ - FBSDKAppLinkNavigationTypeApp -} NS_SWIFT_NAME(AppLinkNavigation.Type); - -/** - Describes the callback for appLinkFromURLInBackground. - @param navType the FBSDKAppLink representing the deferred App Link - @param error the error during the request, if any - - */ -typedef void (^FBSDKAppLinkNavigationBlock)(FBSDKAppLinkNavigationType navType, NSError * _Nullable error) -NS_SWIFT_NAME(AppLinkNavigationBlock); - -/** - Represents a pending request to navigate to an App Link. Most developers will - simply use navigateToURLInBackground: to open a URL, but developers can build - custom requests with additional navigation and app data attached to them by - creating FBSDKAppLinkNavigations themselves. - */ -NS_EXTENSION_UNAVAILABLE_IOS("Not available in app extension") -NS_SWIFT_NAME(AppLinkNavigation) -@interface FBSDKAppLinkNavigation : NSObject - -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; - -/** - The default resolver to be used for App Link resolution. If the developer has not set one explicitly, - a basic, built-in FBSDKWebViewAppLinkResolver will be used. - */ -@property (class, nonatomic, strong) id defaultResolver -NS_SWIFT_NAME(default); - -/** - The extras for the AppLinkNavigation. This will generally contain application-specific - data that should be passed along with the request, such as advertiser or affiliate IDs or - other such metadata relevant on this device. - */ -@property (nonatomic, copy, readonly) NSDictionary *extras; - -/** - The al_applink_data for the AppLinkNavigation. This will generally contain data common to - navigation attempts such as back-links, user agents, and other information that may be used - in routing and handling an App Link request. - */ -@property (nonatomic, copy, readonly) NSDictionary *appLinkData; - -/** The AppLink to navigate to */ -@property (nonatomic, strong, readonly) FBSDKAppLink *appLink; - -/** - Return navigation type for current instance. - No-side-effect version of navigate: - */ -@property (nonatomic, readonly) FBSDKAppLinkNavigationType navigationType; - -/** Creates an AppLinkNavigation with the given link, extras, and App Link data */ -+ (instancetype)navigationWithAppLink:(FBSDKAppLink *)appLink - extras:(NSDictionary *)extras - appLinkData:(NSDictionary *)appLinkData -NS_SWIFT_NAME(init(appLink:extras:appLinkData:)); - -/** - Creates an NSDictionary with the correct format for iOS callback URLs, - to be used as 'appLinkData' argument in the call to navigationWithAppLink:extras:appLinkData: - */ -+ (NSDictionary *> *)callbackAppLinkDataForAppWithName:(NSString *)appName - url:(NSString *)url -NS_SWIFT_NAME(callbackAppLinkData(forApp:url:)); - -/** Performs the navigation */ -- (FBSDKAppLinkNavigationType)navigate:(NSError **)error -__attribute__((swift_error(nonnull_error))); - -/** Returns a FBSDKAppLink for the given URL */ -+ (void)resolveAppLink:(NSURL *)destination handler:(FBSDKAppLinkBlock)handler; - -/** Returns a FBSDKAppLink for the given URL using the given App Link resolution strategy */ -+ (void)resolveAppLink:(NSURL *)destination - resolver:(id)resolver - handler:(FBSDKAppLinkBlock)handler; - -/** Navigates to a FBSDKAppLink and returns whether it opened in-app or in-browser */ -+ (FBSDKAppLinkNavigationType)navigateToAppLink:(FBSDKAppLink *)link error:(NSError **)error -__attribute__((swift_error(nonnull_error))); - -/** - Returns a FBSDKAppLinkNavigationType based on a FBSDKAppLink. - It's essentially a no-side-effect version of navigateToAppLink:error:, - allowing apps to determine flow based on the link type (e.g. open an - internal web view instead of going straight to the browser for regular links.) - */ -+ (FBSDKAppLinkNavigationType)navigationTypeForLink:(FBSDKAppLink *)link; - -/** Navigates to a URL (an asynchronous action) and returns a FBSDKNavigationType */ -+ (void)navigateToURL:(NSURL *)destination handler:(FBSDKAppLinkNavigationBlock)handler; - -/** - Navigates to a URL (an asynchronous action) using the given App Link resolution - strategy and returns a FBSDKNavigationType - */ -+ (void)navigateToURL:(NSURL *)destination - resolver:(id)resolver - handler:(FBSDKAppLinkNavigationBlock)handler; - -@end - -NS_ASSUME_NONNULL_END - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkNavigation.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkNavigation.m deleted file mode 100644 index 4cce02185a..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkNavigation.m +++ /dev/null @@ -1,300 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKAppLinkNavigation.h" - -#import "FBSDKAppLinkTarget.h" -#import "FBSDKAppLink_Internal.h" -#import "FBSDKMeasurementEvent_Internal.h" -#import "FBSDKSettings.h" -#import "FBSDKWebViewAppLinkResolver.h" - -FOUNDATION_EXPORT NSString *const FBSDKAppLinkDataParameterName; -FOUNDATION_EXPORT NSString *const FBSDKAppLinkTargetKeyName; -FOUNDATION_EXPORT NSString *const FBSDKAppLinkUserAgentKeyName; -FOUNDATION_EXPORT NSString *const FBSDKAppLinkExtrasKeyName; -FOUNDATION_EXPORT NSString *const FBSDKAppLinkVersionKeyName; -FOUNDATION_EXPORT NSString *const FBSDKAppLinkRefererAppLink; -FOUNDATION_EXPORT NSString *const FBSDKAppLinkRefererAppName; -FOUNDATION_EXPORT NSString *const FBSDKAppLinkRefererUrl; - -static id defaultResolver; - -@interface FBSDKAppLinkNavigation () - -@property (nonatomic, copy) NSDictionary *extras; -@property (nonatomic, copy) NSDictionary *appLinkData; -@property (nonatomic, strong) FBSDKAppLink *appLink; - -@end - -@implementation FBSDKAppLinkNavigation - -+ (instancetype)navigationWithAppLink:(FBSDKAppLink *)appLink - extras:(NSDictionary *)extras - appLinkData:(NSDictionary *)appLinkData { - FBSDKAppLinkNavigation *navigation = [[self alloc] init]; - navigation.appLink = appLink; - navigation.extras = extras; - navigation.appLinkData = appLinkData; - return navigation; -} - -+ (NSDictionary *> *)callbackAppLinkDataForAppWithName:(NSString *)appName - url:(NSString *)url { - return @{FBSDKAppLinkRefererAppLink: @{FBSDKAppLinkRefererAppName: appName, FBSDKAppLinkRefererUrl: url}}; -} - -- (NSString *)stringByEscapingQueryString:(NSString *)string { - return [string stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]; -} - -- (NSURL *)appLinkURLWithTargetURL:(NSURL *)targetUrl error:(NSError **)error { - NSMutableDictionary *appLinkData = - [NSMutableDictionary dictionaryWithDictionary:self.appLinkData ?: @{}]; - - // Add applink protocol data - if (!appLinkData[FBSDKAppLinkUserAgentKeyName]) { - appLinkData[FBSDKAppLinkUserAgentKeyName] = [NSString stringWithFormat:@"FBSDK %@", FBSDKSettings.sdkVersion]; - } - if (!appLinkData[FBSDKAppLinkVersionKeyName]) { - appLinkData[FBSDKAppLinkVersionKeyName] = FBSDKAppLinkVersion; - } - if (self.appLink.sourceURL.absoluteString) { - appLinkData[FBSDKAppLinkTargetKeyName] = self.appLink.sourceURL.absoluteString; - } - appLinkData[FBSDKAppLinkExtrasKeyName] = self.extras ?: @{}; - - // JSON-ify the applink data - NSError *jsonError = nil; - NSData *jsonBlob = [NSJSONSerialization dataWithJSONObject:appLinkData options:0 error:&jsonError]; - if (!jsonError) { - NSString *jsonString = [[NSString alloc] initWithData:jsonBlob encoding:NSUTF8StringEncoding]; - NSString *encoded = [self stringByEscapingQueryString:jsonString]; - - NSString *endUrlString = [NSString stringWithFormat:@"%@%@%@=%@", - targetUrl.absoluteString, - targetUrl.query ? @"&" : @"?", - FBSDKAppLinkDataParameterName, - encoded]; - - return [NSURL URLWithString:endUrlString]; - } else { - if (error) { - *error = jsonError; - } - - // If there was an error encoding the app link data, fail hard. - return nil; - } -} - -- (FBSDKAppLinkNavigationType)navigate:(NSError **)error { - NSURL *openedURL = nil; - NSError *encodingError = nil; - FBSDKAppLinkNavigationType retType = FBSDKAppLinkNavigationTypeFailure; - - // Find the first eligible/launchable target in the FBSDKAppLink. - for (FBSDKAppLinkTarget *target in self.appLink.targets) { - NSURL *appLinkAppURL = [self appLinkURLWithTargetURL:target.URL error:&encodingError]; - if (encodingError || !appLinkAppURL) { - if (error) { - *error = encodingError; - } - } else if ([[UIApplication sharedApplication] openURL:appLinkAppURL]) { - retType = FBSDKAppLinkNavigationTypeApp; - openedURL = appLinkAppURL; - break; - } - } - - if (!openedURL && self.appLink.webURL) { - // Fall back to opening the url in the browser if available. - NSURL *appLinkBrowserURL = [self appLinkURLWithTargetURL:self.appLink.webURL error:&encodingError]; - if (encodingError || !appLinkBrowserURL) { - // If there was an error encoding the app link data, fail hard. - if (error) { - *error = encodingError; - } - } else if ([[UIApplication sharedApplication] openURL:appLinkBrowserURL]) { - // This was a browser navigation. - retType = FBSDKAppLinkNavigationTypeBrowser; - openedURL = appLinkBrowserURL; - } - } - - [self postAppLinkNavigateEventNotificationWithTargetURL:openedURL - error:error ? *error : nil - type:retType]; - return retType; -} - -- (void)postAppLinkNavigateEventNotificationWithTargetURL:(NSURL *)outputURL error:(NSError *)error type:(FBSDKAppLinkNavigationType)type { - NSString *const EVENT_YES_VAL = @"1"; - NSString *const EVENT_NO_VAL = @"0"; - NSMutableDictionary *logData = - [[NSMutableDictionary alloc] init]; - - NSString *outputURLScheme = outputURL.scheme; - NSString *outputURLString = outputURL.absoluteString; - if (outputURLScheme) { - logData[@"outputURLScheme"] = outputURLScheme; - } - if (outputURLString) { - logData[@"outputURL"] = outputURLString; - } - - NSString *sourceURLString = self.appLink.sourceURL.absoluteString; - NSString *sourceURLHost = self.appLink.sourceURL.host; - NSString *sourceURLScheme = self.appLink.sourceURL.scheme; - if (sourceURLString) { - logData[@"sourceURL"] = sourceURLString; - } - if (sourceURLHost) { - logData[@"sourceHost"] = sourceURLHost; - } - if (sourceURLScheme) { - logData[@"sourceScheme"] = sourceURLScheme; - } - if (error.localizedDescription) { - logData[@"error"] = error.localizedDescription; - } - NSString *success = nil; //no - NSString *linkType = nil; // unknown; - switch (type) { - case FBSDKAppLinkNavigationTypeFailure: - success = EVENT_NO_VAL; - linkType = @"fail"; - break; - case FBSDKAppLinkNavigationTypeBrowser: - success = EVENT_YES_VAL; - linkType = @"web"; - break; - case FBSDKAppLinkNavigationTypeApp: - success = EVENT_YES_VAL; - linkType = @"app"; - break; - default: - break; - } - if (success) { - logData[@"success"] = success; - } - if (linkType) { - logData[@"type"] = linkType; - } - - if (self.appLink.backToReferrer) { - [FBSDKMeasurementEvent postNotificationForEventName:FBSDKAppLinkNavigateBackToReferrerEventName args:logData]; - } else { - [FBSDKMeasurementEvent postNotificationForEventName:FBSDKAppLinkNavigateOutEventName args:logData]; - } -} - -+ (void)resolveAppLink:(NSURL *)destination - resolver:(id)resolver - handler:(FBSDKAppLinkBlock)handler { - [resolver appLinkFromURL:destination handler:handler]; -} - -+ (void)resolveAppLink:(NSURL *)destination handler:(FBSDKAppLinkBlock)handler { - [self resolveAppLink:destination resolver:[self defaultResolver] handler:handler]; -} - -+ (void)navigateToURL:(NSURL *)destination handler:(FBSDKAppLinkNavigationBlock)handler { - [self navigateToURL:destination resolver:[self defaultResolver] handler:handler]; -} - -+ (void)navigateToURL:(NSURL *)destination - resolver:(id)resolver - handler:(FBSDKAppLinkNavigationBlock)handler { - - dispatch_async(dispatch_get_main_queue(), ^{ - [self resolveAppLink:destination - resolver:resolver - handler:^(FBSDKAppLink * _Nullable appLink, NSError * _Nullable error) { - if (error) { - handler(FBSDKAppLinkNavigationTypeFailure, error); - return; - } - - NSError *navigateError = nil; - FBSDKAppLinkNavigationType result = [self navigateToAppLink:appLink error:&navigateError]; - handler(result, navigateError); - }]; - }); -} - -+ (FBSDKAppLinkNavigationType)navigateToAppLink:(FBSDKAppLink *)link error:(NSError **)error { - return [[FBSDKAppLinkNavigation navigationWithAppLink:link - extras:@{} - appLinkData:@{}] navigate:error]; -} - -+ (FBSDKAppLinkNavigationType)navigationTypeForLink:(FBSDKAppLink *)link { - return [[self navigationWithAppLink:link extras:@{} appLinkData:@{}] navigationType]; -} - -- (FBSDKAppLinkNavigationType)navigationType { - FBSDKAppLinkTarget *eligibleTarget = nil; - for (FBSDKAppLinkTarget *target in self.appLink.targets) { - if ([[UIApplication sharedApplication] canOpenURL:target.URL]) { - eligibleTarget = target; - break; - } - } - - if (eligibleTarget != nil) { - NSURL *appLinkURL = [self appLinkURLWithTargetURL:eligibleTarget.URL error:nil]; - if (appLinkURL != nil) { - return FBSDKAppLinkNavigationTypeApp; - } else { - return FBSDKAppLinkNavigationTypeFailure; - } - } - - if (self.appLink.webURL != nil) { - NSURL *appLinkURL = [self appLinkURLWithTargetURL:eligibleTarget.URL error:nil]; - if (appLinkURL != nil) { - return FBSDKAppLinkNavigationTypeBrowser; - } else { - return FBSDKAppLinkNavigationTypeFailure; - } - } - - return FBSDKAppLinkNavigationTypeFailure; -} - -+ (id)defaultResolver { - if (defaultResolver) { - return defaultResolver; - } - return [FBSDKWebViewAppLinkResolver sharedInstance]; -} - -+ (void)setDefaultResolver:(id)resolver { - defaultResolver = resolver; -} - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkResolver.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkResolver.h deleted file mode 100644 index 88898b6207..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkResolver.h +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import - -#import "FBSDKAppLinkResolving.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - Describes the callback for appLinkFromURLInBackground. - @param appLinks the FBSDKAppLinks representing the deferred App Links - @param error the error during the request, if any - */ -typedef void (^FBSDKAppLinksBlock)(NSDictionary * appLinks, - NSError * _Nullable error) -NS_SWIFT_NAME(AppLinksBlock); - -/** - - Provides an implementation of the FBSDKAppLinkResolving protocol that uses the Facebook App Link - Index API to resolve App Links given a URL. It also provides an additional helper method that can resolve - multiple App Links in a single call. - - Usage of this type requires a client token. See `[FBSDKSettings setClientToken:]` - */ - -NS_SWIFT_NAME(AppLinkResolver) -@interface FBSDKAppLinkResolver : NSObject - -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; - -/** - Asynchronously resolves App Link data for a given array of URLs. - - @param urls The URLs to resolve into an App Link. - @param handler The completion block that will return an App Link for the given URL. - */ -- (void)appLinksFromURLs:(NSArray *)urls handler:(FBSDKAppLinksBlock)handler -NS_EXTENSION_UNAVAILABLE_IOS("Not available in app extension"); - -/** - Allocates and initializes a new instance of FBSDKAppLinkResolver. - */ -+ (instancetype)resolver -NS_SWIFT_NAME(init()); - -@end - -NS_ASSUME_NONNULL_END - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkResolver.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkResolver.m deleted file mode 100644 index 93167f8935..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkResolver.m +++ /dev/null @@ -1,180 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKAppLinkResolver.h" - -#import - -#import "FBSDKAccessToken.h" -#import "FBSDKAppLink.h" -#import "FBSDKAppLinkTarget.h" -#import "FBSDKGraphRequest+Internal.h" -#import "FBSDKGraphRequestConnection.h" -#import "FBSDKInternalUtility.h" -#import "FBSDKLogger.h" -#import "FBSDKSettings+Internal.h" -#import "FBSDKUtility.h" - -static NSString *const kURLKey = @"url"; -static NSString *const kIOSAppStoreIdKey = @"app_store_id"; -static NSString *const kIOSAppNameKey = @"app_name"; -static NSString *const kWebKey = @"web"; -static NSString *const kIOSKey = @"ios"; -static NSString *const kIPhoneKey = @"iphone"; -static NSString *const kIPadKey = @"ipad"; -static NSString *const kShouldFallbackKey = @"should_fallback"; -static NSString *const kAppLinksKey = @"app_links"; - -@interface FBSDKAppLinkResolver () - -@property (nonatomic, strong) NSMutableDictionary *cachedFBSDKAppLinks; -@property (nonatomic, assign) UIUserInterfaceIdiom userInterfaceIdiom; -@end - -@implementation FBSDKAppLinkResolver - -+ (void)initialize -{ - if (self == [FBSDKAppLinkResolver class]) { - } -} - -- (instancetype)initWithUserInterfaceIdiom:(UIUserInterfaceIdiom)userInterfaceIdiom -{ - if (self = [super init]) { - self.cachedFBSDKAppLinks = [NSMutableDictionary dictionary]; - self.userInterfaceIdiom = userInterfaceIdiom; - } - return self; -} - -- (void)appLinkFromURL:(NSURL *)url handler:(FBSDKAppLinkBlock)handler -{ - [self appLinksFromURLs:@[url] handler:^(NSDictionary *urls, NSError * _Nullable error) { - handler(urls[url], error); - }]; -} - -- (void)appLinksFromURLs:(NSArray *)urls handler:(FBSDKAppLinksBlock)handler -{ - if (![FBSDKSettings clientToken] && ![FBSDKAccessToken currentAccessToken]) { - [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors - logEntry:@"A user access token or clientToken is required to use FBAppLinkResolver"]; - } - NSMutableDictionary *appLinks = [NSMutableDictionary dictionary]; - NSMutableArray *toFind = [NSMutableArray array]; - NSMutableArray *toFindStrings = [NSMutableArray array]; - - @synchronized (self.cachedFBSDKAppLinks) { - for (NSURL *url in urls) { - if (self.cachedFBSDKAppLinks[url]) { - appLinks[url] = self.cachedFBSDKAppLinks[url]; - } else { - [toFind addObject:url]; -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - NSString *toFindString = [url.absoluteString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; -#pragma clang diagnostic pop - if (toFindString) { - [toFindStrings addObject:toFindString]; - } - } - } - } - if (toFind.count == 0) { - // All of the URLs have already been found. - handler(_cachedFBSDKAppLinks, nil); - } - NSMutableArray *fields = [NSMutableArray arrayWithObject:kIOSKey]; - - NSString *idiomSpecificField = nil; - - switch (self.userInterfaceIdiom) { - case UIUserInterfaceIdiomPad: - idiomSpecificField = kIPadKey; - break; - case UIUserInterfaceIdiomPhone: - idiomSpecificField = kIPhoneKey; - break; - default: - break; - } - if (idiomSpecificField) { - [fields addObject:idiomSpecificField]; - } - NSString *path = [NSString stringWithFormat:@"?fields=%@.fields(%@)&ids=%@", - kAppLinksKey, - [fields componentsJoinedByString:@","], - [toFindStrings componentsJoinedByString:@","]]; - FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:path - parameters:nil - flags:FBSDKGraphRequestFlagDoNotInvalidateTokenOnError | FBSDKGraphRequestFlagDisableErrorRecovery]; - - [request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { - if (error) { - handler(@{}, error); - return; - } - for (NSURL *url in toFind) { - id nestedObject = result[url.absoluteString][kAppLinksKey]; - NSMutableArray *rawTargets = [NSMutableArray array]; - if (idiomSpecificField) { - [rawTargets addObjectsFromArray:nestedObject[idiomSpecificField]]; - } - [rawTargets addObjectsFromArray:nestedObject[kIOSKey]]; - - NSMutableArray *targets = [NSMutableArray arrayWithCapacity:rawTargets.count]; - for (id rawTarget in rawTargets) { - [targets addObject:[FBSDKAppLinkTarget appLinkTargetWithURL:[NSURL URLWithString:rawTarget[kURLKey]] - appStoreId:rawTarget[kIOSAppStoreIdKey] - appName:rawTarget[kIOSAppNameKey]]]; - } - - id webTarget = nestedObject[kWebKey]; - NSString *webFallbackString = webTarget[kURLKey]; - NSURL *fallbackUrl = webFallbackString ? [NSURL URLWithString:webFallbackString] : url; - - NSNumber *shouldFallback = webTarget[kShouldFallbackKey]; - if (shouldFallback != nil && !shouldFallback.boolValue) { - fallbackUrl = nil; - } - - FBSDKAppLink *link = [FBSDKAppLink appLinkWithSourceURL:url - targets:targets - webURL:fallbackUrl]; - @synchronized (self.cachedFBSDKAppLinks) { - self.cachedFBSDKAppLinks[url] = link; - } - appLinks[url] = link; - } - handler(appLinks, nil); - }]; -} - -+ (instancetype)resolver -{ - return [[self alloc] initWithUserInterfaceIdiom:UI_USER_INTERFACE_IDIOM()]; -} - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkResolving.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkResolving.h deleted file mode 100644 index 623a644f72..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkResolving.h +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import - -NS_ASSUME_NONNULL_BEGIN - -@class FBSDKAppLink; - -/** - Describes the callback for appLinkFromURLInBackground. - @param appLink the FBSDKAppLink representing the deferred App Link - @param error the error during the request, if any - - */ -typedef void (^FBSDKAppLinkBlock)(FBSDKAppLink * _Nullable appLink, NSError * _Nullable error) -NS_SWIFT_NAME(AppLinkBlock); - - -/** - Implement this protocol to provide an alternate strategy for resolving - App Links that may include pre-fetching, caching, or querying for App Link - data from an index provided by a service provider. - */ -NS_SWIFT_NAME(AppLinkResolving) -@protocol FBSDKAppLinkResolving - -/** - Asynchronously resolves App Link data for a given URL. - - @param url The URL to resolve into an App Link. - @param handler The completion block that will return an App Link for the given URL. - */ -- (void)appLinkFromURL:(NSURL *)url handler:(FBSDKAppLinkBlock)handler -NS_EXTENSION_UNAVAILABLE_IOS("Not available in app extension"); - -@end - -NS_ASSUME_NONNULL_END - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkReturnToRefererController.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkReturnToRefererController.h deleted file mode 100644 index e54b047a3d..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkReturnToRefererController.h +++ /dev/null @@ -1,114 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import - -#import "FBSDKAppLinkReturnToRefererView.h" - -NS_ASSUME_NONNULL_BEGIN - -@class FBSDKAppLink; -@class FBSDKAppLinkReturnToRefererController; - -/** - Protocol that a class can implement in order to be notified when the user has navigated back - to the referer of an App Link. - */ -NS_SWIFT_NAME(AppLinkReturnToRefererControllerDelegate) -@protocol FBSDKAppLinkReturnToRefererControllerDelegate - -@optional - -/** Called when the user has tapped to navigate, but before the navigation has been performed. */ -- (void)returnToRefererController:(FBSDKAppLinkReturnToRefererController *)controller - willNavigateToAppLink:(FBSDKAppLink *)appLink -NS_SWIFT_NAME(return(to:willNavigateTo:)); - -/** Called after the navigation has been attempted, with an indication of whether the referer - app link was successfully opened. */ -- (void)returnToRefererController:(FBSDKAppLinkReturnToRefererController *)controller - didNavigateToAppLink:(FBSDKAppLink *)url - type:(FBSDKAppLinkNavigationType)type -NS_SWIFT_NAME(return(to:didNavigateTo:type:)); - -@end - -/** - A controller class that implements default behavior for a FBSDKAppLinkReturnToRefererView, including - the ability to display the view above the navigation bar for navigation-based apps. - */ -NS_EXTENSION_UNAVAILABLE_IOS("Not available in app extension") -NS_SWIFT_NAME(AppLinkReturnToRefererController) -@interface FBSDKAppLinkReturnToRefererController : NSObject - -/** - The delegate that will be notified when the user navigates back to the referer. - */ -@property (nonatomic, weak, nullable) id delegate; - -/** - The FBSDKAppLinkReturnToRefererView this controller is controlling. - */ -@property (nonatomic, strong) FBSDKAppLinkReturnToRefererView *view; - -/** - Initializes a controller suitable for controlling a FBSDKAppLinkReturnToRefererView that is to be displayed - contained within another UIView (i.e., not displayed above the navigation bar). - */ -- (instancetype)init NS_DESIGNATED_INITIALIZER; - -/** - Initializes a controller suitable for controlling a FBSDKAppLinkReturnToRefererView that is to be displayed - displayed above the navigation bar. - - @param navController The Navigation Controller for display above - */ -- (instancetype)initForDisplayAboveNavController:(UINavigationController *)navController -NS_SWIFT_NAME(init(navController:)); - -/** - Removes the view entirely from the navigation controller it is currently displayed in. - */ -- (void)removeFromNavController; - -/** - Shows the FBSDKAppLinkReturnToRefererView with the specified referer information. If nil or missing data, - the view will not be displayed. */ -- (void)showViewForRefererAppLink:(FBSDKAppLink *)refererAppLink -NS_SWIFT_NAME(showView(forReferer:)); - -/** - Shows the FBSDKAppLinkReturnToRefererView with referer information extracted from the specified URL. - If nil or missing referer App Link data, the view will not be displayed. */ -- (void)showViewForRefererURL:(NSURL *)url -NS_SWIFT_NAME(showView(forReferer:)); - -/** - Closes the view, possibly animating it. - */ -- (void)closeViewAnimated:(BOOL)animated; - -@end - -NS_ASSUME_NONNULL_END - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkReturnToRefererController.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkReturnToRefererController.m deleted file mode 100644 index 4e0cf29a60..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkReturnToRefererController.m +++ /dev/null @@ -1,244 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKAppLinkReturnToRefererController.h" - -#import "FBSDKAppLink.h" -#import "FBSDKAppLinkReturnToRefererView_Internal.h" -#import "FBSDKURL_Internal.h" - -static const CFTimeInterval kFBSDKViewAnimationDuration = 0.25f; - -@implementation FBSDKAppLinkReturnToRefererController { - UINavigationController *_navigationController; - FBSDKAppLinkReturnToRefererView *_view; -} - -#pragma mark - Object lifecycle - -- (instancetype)init { - return [super init]; -} - -- (instancetype)initForDisplayAboveNavController:(UINavigationController *)navController { - self = [self init]; - if (self) { - _navigationController = navController; - - if (_navigationController != nil) { - NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; - [nc addObserver:self - selector:@selector(statusBarFrameWillChange:) - name:UIApplicationWillChangeStatusBarFrameNotification - object:nil]; - [nc addObserver:self - selector:@selector(statusBarFrameDidChange:) - name:UIApplicationDidChangeStatusBarFrameNotification - object:nil]; - [nc addObserver:self - selector:@selector(orientationDidChange:) - name:UIDeviceOrientationDidChangeNotification - object:nil]; - } - } - return self; -} - -- (void)dealloc { - _view.delegate = nil; - [[NSNotificationCenter defaultCenter] removeObserver:self]; -} - -#pragma mark - Public API - -- (FBSDKAppLinkReturnToRefererView *)view { - if (!_view) { - self.view = [[FBSDKAppLinkReturnToRefererView alloc] initWithFrame:CGRectZero]; - if (_navigationController) { - [_navigationController.view addSubview:_view]; - } - } - return _view; -} - -- (void)setView:(FBSDKAppLinkReturnToRefererView *)view { - if (_view != view) { - _view.delegate = nil; - } - - _view = view; - _view.delegate = self; - - if (_navigationController) { - _view.includeStatusBarInSize = FBSDKIncludeStatusBarInSizeAlways; - } -} - -- (void)showViewForRefererAppLink:(FBSDKAppLink *)refererAppLink { - self.view.refererAppLink = refererAppLink; - - [_view sizeToFit]; - - if (_navigationController) { - if (!_view.closed) { - dispatch_async(dispatch_get_main_queue(), ^{ - [self moveNavigationBar]; - }); - } - } -} - -- (void)showViewForRefererURL:(NSURL *)url { - FBSDKAppLink *appLink = [FBSDKURL URLForRenderBackToReferrerBarURL:url].appLinkReferer; - [self showViewForRefererAppLink:appLink]; -} - -- (void)removeFromNavController { - if (_navigationController) { - [_view removeFromSuperview]; - _navigationController = nil; - } -} - -#pragma mark - FBSDKAppLinkReturnToRefererViewDelegate - -- (void)returnToRefererViewDidTapInsideCloseButton:(FBSDKAppLinkReturnToRefererView *)view { - [self closeViewAnimated:YES explicitlyClosed:YES]; -} - -- (void)returnToRefererViewDidTapInsideLink:(FBSDKAppLinkReturnToRefererView *)view - link:(FBSDKAppLink *)link { - [self openRefererAppLink:link]; - [self closeViewAnimated:NO explicitlyClosed:NO]; -} - -#pragma mark - Private - -- (void)statusBarFrameWillChange:(NSNotification *)notification { - NSValue *rectValue = [notification.userInfo valueForKey:UIApplicationStatusBarFrameUserInfoKey]; - CGRect newFrame; - [rectValue getValue:&newFrame]; - - if (_navigationController && !_view.closed) { - if (CGRectGetHeight(newFrame) == 40) { - UIViewAnimationOptions options = UIViewAnimationOptionBeginFromCurrentState; - [UIView animateWithDuration:kFBSDKViewAnimationDuration delay:0.0 options:options animations:^{ - self->_view.frame = CGRectMake(0.0, 0.0, CGRectGetWidth(self->_view.bounds), 0.0); - } completion:nil]; - } - } -} - -- (void)statusBarFrameDidChange:(NSNotification *)notification { - NSValue *rectValue = [notification.userInfo valueForKey:UIApplicationStatusBarFrameUserInfoKey]; - CGRect newFrame; - [rectValue getValue:&newFrame]; - - if (_navigationController && !_view.closed) { - if (CGRectGetHeight(newFrame) == 40) { - UIViewAnimationOptions options = UIViewAnimationOptionBeginFromCurrentState; - [UIView animateWithDuration:kFBSDKViewAnimationDuration delay:0.0 options:options animations:^{ - [self->_view sizeToFit]; - [self moveNavigationBar]; - } completion:nil]; - } - } -} - -- (void)orientationDidChange:(NSNotificationCenter *)notification { - if (_navigationController && !_view.closed && CGRectGetHeight(_view.bounds) > 0) { - dispatch_async(dispatch_get_main_queue(), ^{ - [self moveNavigationBar]; - }); - } -} - -- (void)moveNavigationBar { - if (_view.closed || !_view.refererAppLink) { - return; - } - - [self updateNavigationBarY:CGRectGetHeight(_view.bounds)]; -} - -- (void)updateNavigationBarY:(CGFloat)y { - UINavigationBar *navigationBar = _navigationController.navigationBar; - CGRect navigationBarFrame = navigationBar.frame; - CGFloat oldContainerViewY = CGRectGetMaxY(navigationBarFrame); - navigationBarFrame.origin.y = y; - navigationBar.frame = navigationBarFrame; - - CGFloat dy = CGRectGetMaxY(navigationBarFrame) - oldContainerViewY; - UIView *containerView = _navigationController.visibleViewController.view.superview; - containerView.frame = UIEdgeInsetsInsetRect(containerView.frame, UIEdgeInsetsMake(dy, 0.0, 0.0, 0.0)); -} - -- (void)closeViewAnimated:(BOOL)animated { - [self closeViewAnimated:animated explicitlyClosed:YES]; -} - -- (void)closeViewAnimated:(BOOL)animated explicitlyClosed:(BOOL)explicitlyClosed { - void (^closer)(void) = ^{ - if (self->_navigationController) { - [self updateNavigationBarY:self->_view.statusBarHeight]; - } - - CGRect frame = self->_view.frame; - frame.size.height = 0.0; - self->_view.frame = frame; - }; - - if (animated) { - [UIView animateWithDuration:kFBSDKViewAnimationDuration animations:^{ - closer(); - } completion:^(BOOL finished) { - if (explicitlyClosed) { - self->_view.closed = YES; - } - }]; - } else { - closer(); - if (explicitlyClosed) { - self->_view.closed = YES; - } - } -} - -- (void)openRefererAppLink:(FBSDKAppLink *)refererAppLink { - if (refererAppLink) { - id delegate = _delegate; - if ([delegate respondsToSelector:@selector(returnToRefererController:willNavigateToAppLink:)]) { - [delegate returnToRefererController:self willNavigateToAppLink:refererAppLink]; - } - - NSError *error = nil; - FBSDKAppLinkNavigationType type = [FBSDKAppLinkNavigation navigateToAppLink:refererAppLink error:&error]; - - if ([delegate respondsToSelector:@selector(returnToRefererController:didNavigateToAppLink:type:)]) { - [delegate returnToRefererController:self didNavigateToAppLink:refererAppLink type:type]; - } - } -} - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkReturnToRefererView.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkReturnToRefererView.h deleted file mode 100644 index 7293e751d1..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkReturnToRefererView.h +++ /dev/null @@ -1,99 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import - -#import "FBSDKAppLinkNavigation.h" - -NS_ASSUME_NONNULL_BEGIN - -typedef NS_ENUM(NSUInteger, FBSDKIncludeStatusBarInSize) { - FBSDKIncludeStatusBarInSizeNever, - FBSDKIncludeStatusBarInSizeAlways, -} NS_SWIFT_NAME(FBAppLinkReturnToRefererView.StatusBarSizeInclude); - -@class FBSDKAppLinkReturnToRefererView; -@class FBSDKURL; - -/** - Protocol that a class can implement in order to be notified when the user has navigated back - to the referer of an App Link. - */ -NS_SWIFT_NAME(AppLinkReturnToRefererViewDelegate) -@protocol FBSDKAppLinkReturnToRefererViewDelegate - -/** - Called when the user has tapped inside the close button. - */ -- (void)returnToRefererViewDidTapInsideCloseButton:(FBSDKAppLinkReturnToRefererView *)view -NS_SWIFT_NAME(returnToRefererViewDidTapInsideCloseButton(_:)); - -/** - Called when the user has tapped inside the App Link portion of the view. - */ -- (void)returnToRefererViewDidTapInsideLink:(FBSDKAppLinkReturnToRefererView *)view - link:(FBSDKAppLink *)link -NS_SWIFT_NAME(returnToRefererView(_:didTapInside:)); - -@end - -/** - Provides a UIView that displays a button allowing users to navigate back to the - application that launched the App Link currently being handled, if the App Link - contained referer data. The user can also close the view by clicking a close button - rather than navigating away. If the view is provided an App Link that does not contain - referer data, it will have zero size and no UI will be displayed. - */ -NS_EXTENSION_UNAVAILABLE_IOS("Not available in app extension") -NS_SWIFT_NAME(FBAppLinkReturnToRefererView) -@interface FBSDKAppLinkReturnToRefererView : UIView - -/** - The delegate that will be notified when the user navigates back to the referer. - */ -@property (nonatomic, weak, nullable) id delegate; - -/** - The color of the text label and close button. - */ -@property (nonatomic, strong) UIColor *textColor; - -@property (nonatomic, strong) FBSDKAppLink *refererAppLink; - -/** - Indicates whether to extend the size of the view to include the current status bar - size, for use in scenarios where the view might extend under the status bar on iOS 7 and - above; this property has no effect on earlier versions of iOS. - */ -@property (nonatomic, assign) FBSDKIncludeStatusBarInSize includeStatusBarInSize -NS_SWIFT_NAME(statusBarSizeInclude); - -/** - Indicates whether the user has closed the view by clicking the close button. - */ -@property (nonatomic, assign, getter=isClosed) BOOL closed; - -@end - -NS_ASSUME_NONNULL_END - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkReturnToRefererView.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkReturnToRefererView.m deleted file mode 100644 index 227300c82d..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkReturnToRefererView.m +++ /dev/null @@ -1,272 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKAppLinkReturnToRefererView.h" - -#import "FBSDKAppLink.h" -#import "FBSDKAppLinkTarget.h" - -static const CGFloat FBSDKMarginX = 8.5f; -static const CGFloat FBSDKMarginY = 8.5f; - -static NSString *const FBSDKRefererAppLink = @"referer_app_link"; -static NSString *const FBSDKRefererAppName = @"app_name"; -static NSString *const FBSDKRefererUrl = @"url"; -static const CGFloat FBSDKCloseButtonWidth = 12.0; -static const CGFloat FBSDKCloseButtonHeight = 12.0; - -@interface FBSDKAppLinkReturnToRefererView () - -@property (nonatomic, strong) UILabel *labelView; -@property (nonatomic, strong) UIButton *closeButton; -@property (nonatomic, strong) UITapGestureRecognizer *insideTapGestureRecognizer; - -@end - -@implementation FBSDKAppLinkReturnToRefererView { - BOOL _explicitlyHidden; -} - -#pragma mark - Initialization - -- (instancetype)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { - [self commonInit]; - [self sizeToFit]; - } - return self; -} - -- (instancetype)initWithCoder:(NSCoder *)aDecoder { - self = [super initWithCoder:aDecoder]; - if (self) { - [self commonInit]; - } - return self; -} - -- (void)commonInit { - // Initialization code - _includeStatusBarInSize = FBSDKIncludeStatusBarInSizeAlways; - - // iOS 7 system blue color - self.backgroundColor = [UIColor colorWithRed:0.0f green:122.0f / 255.0f blue:1.0f alpha:1.0f]; - self.textColor = [UIColor whiteColor]; - self.clipsToBounds = YES; - - [self initViews]; -} - -- (void)initViews { - if (!_labelView && !_closeButton) { - _closeButton = [UIButton buttonWithType:UIButtonTypeCustom]; - _closeButton.backgroundColor = [UIColor clearColor]; - _closeButton.userInteractionEnabled = YES; - _closeButton.clipsToBounds = YES; - _closeButton.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleTopMargin; - _closeButton.contentMode = UIViewContentModeCenter; - [_closeButton addTarget:self action:@selector(closeButtonTapped:) forControlEvents:UIControlEventTouchUpInside]; - - [self addSubview:_closeButton]; - - _labelView = [[UILabel alloc] initWithFrame:CGRectZero]; - _labelView.font = [UIFont systemFontOfSize:[UIFont smallSystemFontSize]]; - _labelView.textColor = [UIColor whiteColor]; - _labelView.backgroundColor = [UIColor clearColor]; - _labelView.textAlignment = NSTextAlignmentCenter; - _labelView.clipsToBounds = YES; - [self updateLabelText]; - [self addSubview:_labelView]; - - _insideTapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onTapInside:)]; - _labelView.userInteractionEnabled = YES; - [_labelView addGestureRecognizer:_insideTapGestureRecognizer]; - - [self updateColors]; - } -} - -#pragma mark - Layout - -- (CGSize)intrinsicContentSize { - CGSize size = self.bounds.size; - if (_closed || !self.hasRefererData) { - size.height = 0.0; - } else { - CGSize labelSize = [_labelView sizeThatFits:size]; - size = CGSizeMake(size.width, labelSize.height + 2 * FBSDKMarginY + self.statusBarHeight); - } - return size; -} - -- (void)layoutSubviews { - [super layoutSubviews]; - - CGRect bounds = self.bounds; - - _labelView.preferredMaxLayoutWidth = _labelView.bounds.size.width; - CGSize labelSize = [_labelView sizeThatFits:bounds.size]; - _labelView.frame = CGRectMake(FBSDKMarginX, - CGRectGetMaxY(bounds) - labelSize.height - 1.5f * FBSDKMarginY, - CGRectGetMaxX(bounds) - FBSDKCloseButtonWidth - 3 * FBSDKMarginX, - labelSize.height + FBSDKMarginY); - - _closeButton.frame = CGRectMake(CGRectGetMaxX(bounds) - FBSDKCloseButtonWidth - 2 * FBSDKMarginX, - _labelView.center.y - FBSDKCloseButtonHeight / 2.0f - FBSDKMarginY, - FBSDKCloseButtonWidth + 2 * FBSDKMarginX, - FBSDKCloseButtonHeight + 2 * FBSDKMarginY); -} - -- (CGSize)sizeThatFits:(CGSize)size { - if (_closed || !self.hasRefererData) { - size = CGSizeMake(size.width, 0.0); - } else { - CGSize labelSize = [_labelView sizeThatFits:size]; - size = CGSizeMake(size.width, labelSize.height + 2 * FBSDKMarginY + self.statusBarHeight); - } - return size; -} - -- (CGFloat)statusBarHeight { - UIApplication *application = [UIApplication sharedApplication]; - - BOOL include; - switch (_includeStatusBarInSize) { - case FBSDKIncludeStatusBarInSizeAlways: - include = YES; - break; - case FBSDKIncludeStatusBarInSizeNever: - include = NO; - break; - } - if (include && !application.statusBarHidden) { - BOOL landscape = UIInterfaceOrientationIsLandscape(application.statusBarOrientation); - CGRect statusBarFrame = application.statusBarFrame; - return landscape ? CGRectGetWidth(statusBarFrame) : CGRectGetHeight(statusBarFrame); - } - - return 0; -} - -#pragma mark - Public API - -- (void)setIncludeStatusBarInSize:(FBSDKIncludeStatusBarInSize)includeStatusBarInSize { - _includeStatusBarInSize = includeStatusBarInSize; - [self setNeedsLayout]; - [self invalidateIntrinsicContentSize]; -} - -- (void)setTextColor:(UIColor *)textColor { - _textColor = textColor; - [self updateColors]; -} - -- (void)setRefererAppLink:(FBSDKAppLink *)refererAppLink { - _refererAppLink = refererAppLink; - [self updateLabelText]; - [self updateHidden]; - [self invalidateIntrinsicContentSize]; -} - -- (void)setClosed:(BOOL)closed { - if (_closed != closed) { - _closed = closed; - [self updateHidden]; - [self invalidateIntrinsicContentSize]; - } -} - -- (void)setHidden:(BOOL)hidden { - _explicitlyHidden = hidden; - [self updateHidden]; -} - -#pragma mark - Private - -- (void)updateLabelText { - NSString *appName = (_refererAppLink && _refererAppLink.targets[0]) ? _refererAppLink.targets[0].appName : nil; - _labelView.text = [self localizedLabelForReferer:appName]; -} - -- (void)updateColors { - UIImage *closeButtonImage = [self drawCloseButtonImageWithColor:_textColor]; - - _labelView.textColor = _textColor; - [_closeButton setImage:closeButtonImage forState:UIControlStateNormal]; -} - -- (UIImage *)drawCloseButtonImageWithColor:(UIColor *)color { - - UIGraphicsBeginImageContextWithOptions(CGSizeMake(FBSDKCloseButtonWidth, FBSDKCloseButtonHeight), NO, 0.0f); - - CGContextRef context = UIGraphicsGetCurrentContext(); - - CGContextSetStrokeColorWithColor(context, color.CGColor); - CGContextSetFillColorWithColor(context, color.CGColor); - - CGContextSetLineWidth(context, 1.25f); - - CGFloat inset = 0.5f; - - CGContextMoveToPoint(context, inset, inset); - CGContextAddLineToPoint(context, FBSDKCloseButtonWidth - inset, FBSDKCloseButtonHeight - inset); - CGContextStrokePath(context); - - CGContextMoveToPoint(context, FBSDKCloseButtonWidth - inset, inset); - CGContextAddLineToPoint(context, inset, FBSDKCloseButtonHeight - inset); - CGContextStrokePath(context); - - UIImage *result = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - - return result; -} - -- (NSString *)localizedLabelForReferer:(NSString *)refererName { - if (!refererName) { - return nil; - } - - NSString *format = NSLocalizedString(@"Touch to return to %1$@", @"Format for the string to return to a calling app."); - return [NSString stringWithFormat:format, refererName]; -} - -- (BOOL)hasRefererData { - return _refererAppLink && _refererAppLink.targets[0]; -} - -- (void)closeButtonTapped:(id)sender { - [_delegate returnToRefererViewDidTapInsideCloseButton:self]; -} - -- (void)onTapInside:(UIGestureRecognizer *)sender { - [_delegate returnToRefererViewDidTapInsideLink:self link:_refererAppLink]; -} - -- (void)updateHidden { - super.hidden = _explicitlyHidden || _closed || !self.hasRefererData; -} - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkTarget.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkTarget.h deleted file mode 100644 index efcb2441d7..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkTarget.h +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - Represents a target defined in App Link metadata, consisting of at least - a URL, and optionally an App Store ID and name. - */ -NS_SWIFT_NAME(AppLinkTarget) -@interface FBSDKAppLinkTarget : NSObject - -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; - -/** Creates a FBSDKAppLinkTarget with the given app site and target URL. */ -+ (instancetype)appLinkTargetWithURL:(nullable NSURL *)url - appStoreId:(nullable NSString *)appStoreId - appName:(NSString *)appName -NS_SWIFT_NAME(init(url:appStoreId:appName:)); - -/** The URL prefix for this app link target */ -@property (nonatomic, strong, readonly, nullable) NSURL *URL; - -/** The app ID for the app store */ -@property (nonatomic, copy, readonly, nullable) NSString *appStoreId; - -/** The name of the app */ -@property (nonatomic, copy, readonly) NSString *appName; - -@end - -NS_ASSUME_NONNULL_END - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkTarget.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkTarget.m deleted file mode 100644 index 0a98717c1e..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkTarget.m +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKAppLinkTarget.h" - -@interface FBSDKAppLinkTarget () - -@property (nonatomic, strong) NSURL *URL; -@property (nonatomic, copy) NSString *appStoreId; -@property (nonatomic, copy) NSString *appName; - -@end - -@implementation FBSDKAppLinkTarget - -+ (instancetype)appLinkTargetWithURL:(NSURL *)url - appStoreId:(NSString *)appStoreId - appName:(NSString *)appName { - FBSDKAppLinkTarget *target = [[self alloc] init]; - target.URL = url; - target.appStoreId = appStoreId; - target.appName = appName; - return target; -} - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkUtility.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkUtility.h deleted file mode 100644 index 86c5121393..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkUtility.h +++ /dev/null @@ -1,93 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - Describes the callback for fetchDeferredAppLink. - @param url the url representing the deferred App Link - @param error the error during the request, if any - - - The url may also have a fb_click_time_utc query parameter that - represents when the click occurred that caused the deferred App Link to be created. - */ -typedef void (^FBSDKURLBlock)(NSURL *_Nullable url, NSError *_Nullable error) -NS_SWIFT_NAME(URLBlock); - - -/** - Class containing App Links related utility methods. - */ -NS_SWIFT_NAME(AppLinkUtility) -@interface FBSDKAppLinkUtility : NSObject - -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; - -/** - Call this method from the main thread to fetch deferred applink data if you use Mobile App - Engagement Ads (https://developers.facebook.com/docs/ads-for-apps/mobile-app-ads-engagement). - This may require a network round trip. If successful, the handler is invoked with the link - data (this will only return a valid URL once, and future calls will result in a nil URL - value in the callback). - - @param handler the handler to be invoked if there is deferred App Link data - - - The handler may contain an NSError instance to capture any errors. In the - common case where there simply was no app link data, the NSError instance will be nil. - - This method should only be called from a location that occurs after any launching URL has - been processed (e.g., you should call this method from your application delegate's - applicationDidBecomeActive:). - */ -+ (void)fetchDeferredAppLink:(nullable FBSDKURLBlock)handler; - -/* - Call this method to fetch promotion code from the url, if it's present. - - @param url App Link url that was passed to the app. - - @return Promotion code string. - - - Call this method to fetch App Invite Promotion Code from applink if present. - This can be used to fetch the promotion code that was associated with the invite when it - was created. This method should be called with the url from the openURL method. -*/ -+ (nullable NSString *)appInvitePromotionCodeFromURL:(NSURL *)url; - -/** - Check whether the scheme is defined in the app's URL schemes. - @param scheme the scheme of App Link URL - @return YES if the scheme is defined, otherwise NO. -*/ -+ (BOOL)isMatchURLScheme:(NSString *)scheme; - -@end - -NS_ASSUME_NONNULL_END - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkUtility.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkUtility.m deleted file mode 100644 index 5267111a0c..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkUtility.m +++ /dev/null @@ -1,125 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKAppLinkUtility.h" - -#import "FBSDKAppEventsUtility.h" -#import "FBSDKGraphRequest.h" -#import "FBSDKInternalUtility.h" -#import "FBSDKSettings.h" -#import "FBSDKURL.h" -#import "FBSDKUtility.h" - -static NSString *const FBSDKLastDeferredAppLink = @"com.facebook.sdk:lastDeferredAppLink%@"; -static NSString *const FBSDKDeferredAppLinkEvent = @"DEFERRED_APP_LINK"; - -@implementation FBSDKAppLinkUtility {} - -+ (void)fetchDeferredAppLink:(FBSDKURLBlock)handler -{ - NSAssert([NSThread isMainThread], @"FBSDKAppLink fetchDeferredAppLink: must be invoked from main thread."); - - NSString *appID = [FBSDKSettings appID]; - - // Deferred app links are only currently used for engagement ads, thus we consider the app to be an advertising one. - // If this is considered for organic, non-ads scenarios, we'll need to retrieve the FBAppEventsUtility.shouldAccessAdvertisingID - // before we make this call. - NSMutableDictionary *deferredAppLinkParameters = - [FBSDKAppEventsUtility activityParametersDictionaryForEvent:FBSDKDeferredAppLinkEvent - implicitEventsOnly:NO - shouldAccessAdvertisingID:YES]; - - FBSDKGraphRequest *deferredAppLinkRequest = [[FBSDKGraphRequest alloc] initWithGraphPath:[NSString stringWithFormat:@"%@/activities", appID, nil] - parameters:deferredAppLinkParameters - tokenString:nil - version:nil - HTTPMethod:FBSDKHTTPMethodPOST]; - - [deferredAppLinkRequest startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, - id result, - NSError *error) { - NSURL *applinkURL = nil; - if (!error) { - NSString *appLinkString = result[@"applink_url"]; - if (appLinkString) { - applinkURL = [NSURL URLWithString:appLinkString]; - - NSString *createTimeUtc = result[@"click_time"]; - if (createTimeUtc) { - // append/translate the create_time_utc so it can be used by clients - NSString *modifiedURLString = [applinkURL.absoluteString - stringByAppendingFormat:@"%@fb_click_time_utc=%@", - (applinkURL.query) ? @"&" : @"?" , - createTimeUtc]; - applinkURL = [NSURL URLWithString:modifiedURLString]; - } - } - } - - if (handler) { - dispatch_async(dispatch_get_main_queue(), ^{ - handler(applinkURL, error); - }); - } - }]; -} - -+ (NSString *)appInvitePromotionCodeFromURL:(NSURL *)url -{ - FBSDKURL *parsedUrl = [FBSDKURL URLWithURL:url]; - NSDictionary *extras = parsedUrl.appLinkExtras; - if (extras) { - NSString *deeplinkContextString = extras[@"deeplink_context"]; - - // Parse deeplinkContext and extract promo code - if (deeplinkContextString.length > 0) { - NSError *error = nil; - NSDictionary *deeplinkContextData = [FBSDKBasicUtility objectForJSONString:deeplinkContextString error:&error]; - if (!error && [deeplinkContextData isKindOfClass:[NSDictionary class]]) { - return deeplinkContextData[@"promo_code"]; - } - } - } - - return nil; - -} - -+ (BOOL)isMatchURLScheme:(NSString *)scheme -{ - if (!scheme) { - return NO; - } - for(NSDictionary *urlType in [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleURLTypes"]) - { - for(NSString *urlScheme in urlType[@"CFBundleURLSchemes"]) { - if([urlScheme caseInsensitiveCompare:scheme] == NSOrderedSame) { - return YES; - } - } - } - return NO; -} - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKWebViewAppLinkResolver.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKWebViewAppLinkResolver.h deleted file mode 100644 index 4ba20ccf02..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKWebViewAppLinkResolver.h +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import - -#import "FBSDKAppLinkResolving.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - A reference implementation for an App Link resolver that uses a hidden WKWebView - to parse the HTML containing App Link metadata. - */ -NS_SWIFT_NAME(WebViewAppLinkResolver) -@interface FBSDKWebViewAppLinkResolver : NSObject - -/** - Gets the instance of a FBSDKWebViewAppLinkResolver. - */ -@property (class, nonatomic, readonly, strong) FBSDKWebViewAppLinkResolver *sharedInstance -NS_SWIFT_NAME(shared); - -@end - -NS_ASSUME_NONNULL_END - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKWebViewAppLinkResolver.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKWebViewAppLinkResolver.m deleted file mode 100644 index c8e7211a5b..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKWebViewAppLinkResolver.m +++ /dev/null @@ -1,325 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKWebViewAppLinkResolver.h" - -#import -#import - -#import "FBSDKAppLink.h" -#import "FBSDKAppLinkTarget.h" - -/** - Describes the callback for appLinkFromURLInBackground. - @param result the results from following redirects - @param error the error during the request, if any - - */ -typedef void (^FBSDKURLFollowRedirectsBlock)(NSDictionary *result, NSError * _Nullable error) -NS_SWIFT_NAME(URLFollowRedirectsBlock); - -// Defines JavaScript to extract app link tags from HTML content -static NSString *const FBSDKWebViewAppLinkResolverTagExtractionJavaScript = @"" -"(function() {" -" var metaTags = document.getElementsByTagName('meta');" -" var results = [];" -" for (var i = 0; i < metaTags.length; i++) {" -" var property = metaTags[i].getAttribute('property');" -" if (property && property.substring(0, 'al:'.length) === 'al:') {" -" var tag = { \"property\": metaTags[i].getAttribute('property') };" -" if (metaTags[i].hasAttribute('content')) {" -" tag['content'] = metaTags[i].getAttribute('content');" -" }" -" results.push(tag);" -" }" -" }" -" return JSON.stringify(results);" -"})()"; -static NSString *const FBSDKWebViewAppLinkResolverIOSURLKey = @"url"; -static NSString *const FBSDKWebViewAppLinkResolverIOSAppStoreIdKey = @"app_store_id"; -static NSString *const FBSDKWebViewAppLinkResolverIOSAppNameKey = @"app_name"; -static NSString *const FBSDKWebViewAppLinkResolverDictionaryValueKey = @"_value"; -static NSString *const FBSDKWebViewAppLinkResolverPreferHeader = @"Prefer-Html-Meta-Tags"; -static NSString *const FBSDKWebViewAppLinkResolverMetaTagPrefix = @"al"; -static NSString *const FBSDKWebViewAppLinkResolverWebKey = @"web"; -static NSString *const FBSDKWebViewAppLinkResolverIOSKey = @"ios"; -static NSString *const FBSDKWebViewAppLinkResolverIPhoneKey = @"iphone"; -static NSString *const FBSDKWebViewAppLinkResolverIPadKey = @"ipad"; -static NSString *const FBSDKWebViewAppLinkResolverWebURLKey = @"url"; -static NSString *const FBSDKWebViewAppLinkResolverShouldFallbackKey = @"should_fallback"; - -@interface FBSDKWebViewAppLinkResolverWebViewDelegate : NSObject - -@property (nonatomic, copy) void (^didFinishLoad)(WKWebView *webView); -@property (nonatomic, copy) void (^didFailLoadWithError)(WKWebView *webView, NSError *error); -@property (nonatomic, assign) BOOL hasLoaded; - -@end - -@implementation FBSDKWebViewAppLinkResolverWebViewDelegate - -- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation -{ - if (self.didFinishLoad) { - self.didFinishLoad(webView); - } -} - -- (void)webView:(WKWebView *)webView didFailNavigation:(WKNavigation *)navigation withError:(NSError *)error -{ - if (self.didFailLoadWithError) { - self.didFailLoadWithError(webView, error); - } -} - -- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler -{ - if (self.hasLoaded) { - self.didFinishLoad(webView); - decisionHandler(WKNavigationActionPolicyCancel); - } - - self.hasLoaded = YES; - decisionHandler(WKNavigationActionPolicyAllow); -} - -@end - -@implementation FBSDKWebViewAppLinkResolver - -+ (instancetype)sharedInstance { - static id instance; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - instance = [[self alloc] init]; - }); - return instance; -} - -- (void)followRedirects:(NSURL *)url handler:(FBSDKURLFollowRedirectsBlock)handler -{ - // This task will be resolved with either the redirect NSURL - // or a dictionary with the response data to be returned. - void (^completion)(NSURLResponse *response, NSData *data, NSError *error) = ^(NSURLResponse *response, NSData *data, NSError *error) { - if (error) { - handler(nil, error); - return; - } - - if ([response isKindOfClass:[NSHTTPURLResponse class]]) { - NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response; - - // NSURLConnection usually follows redirects automatically, but the - // documentation is unclear what the default is. This helps it along. - if (httpResponse.statusCode >= 300 && httpResponse.statusCode < 400) { - NSString *redirectString = httpResponse.allHeaderFields[@"Location"]; - NSURL *redirectURL = [NSURL URLWithString:redirectString]; - [self followRedirects:redirectURL handler:handler]; - return; - } - } - - handler(@{ @"response" : response, @"data" : data }, nil); - }; - - NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; - [request setValue:FBSDKWebViewAppLinkResolverMetaTagPrefix forHTTPHeaderField:FBSDKWebViewAppLinkResolverPreferHeader]; - - NSURLSession *session = [NSURLSession sharedSession]; - [[session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { - completion(response, data, error); - }] resume]; -} - -- (void)appLinkFromURL:(NSURL *)url handler:(FBSDKAppLinkBlock)handler -{ - dispatch_async(dispatch_get_main_queue(), ^{ - [self followRedirects:url handler:^(NSDictionary *result, NSError * _Nullable error) { - - if (error) { - handler(nil, error); - return; - } - - NSData *responseData = result[@"data"]; - NSHTTPURLResponse *response = result[@"response"]; - - WKWebView *webView = [[WKWebView alloc] init]; - - FBSDKWebViewAppLinkResolverWebViewDelegate *listener = [[FBSDKWebViewAppLinkResolverWebViewDelegate alloc] init]; - __block FBSDKWebViewAppLinkResolverWebViewDelegate *retainedListener = listener; - listener.didFinishLoad = ^(WKWebView *view) { - if (retainedListener) { - [self getALDataFromLoadedPage:view handler:^(NSDictionary *ogData) { - [view removeFromSuperview]; - view.navigationDelegate = nil; - retainedListener = nil; - handler([self appLinkFromALData:ogData destination:url], nil); - }]; - } - }; - listener.didFailLoadWithError = ^(WKWebView *view, NSError *loadError) { - if (retainedListener) { - [view removeFromSuperview]; - view.navigationDelegate = nil; - retainedListener = nil; - handler(nil, loadError); - } - }; - webView.navigationDelegate = listener; - webView.hidden = YES; - if (@available(iOS 9.0, *)) { - [webView loadData:responseData - MIMEType:response.MIMEType - characterEncodingName:response.textEncodingName - baseURL:response.URL]; - } else { - NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; - [request setValue:FBSDKWebViewAppLinkResolverMetaTagPrefix forHTTPHeaderField:FBSDKWebViewAppLinkResolverPreferHeader]; - [webView loadRequest:request]; - } - - UIWindow *window = [UIApplication sharedApplication].windows.firstObject; - [window addSubview:webView]; - }]; - }); -} - -/* - Builds up a data structure filled with the app link data from the meta tags on a page. - The structure of this object is a dictionary where each key holds an array of app link - data dictionaries. Values are stored in a key called "_value". - */ -- (NSDictionary *)parseALData:(NSArray *> *)dataArray { - NSMutableDictionary *al = [NSMutableDictionary dictionary]; - for (NSDictionary *tag in dataArray) { - NSString *name = tag[@"property"]; - if (![name isKindOfClass:[NSString class]]) { - continue; - } - NSArray *nameComponents = [name componentsSeparatedByString:@":"]; - if (![nameComponents[0] isEqualToString:FBSDKWebViewAppLinkResolverMetaTagPrefix]) { - continue; - } - NSMutableDictionary *root = al; - for (NSUInteger i = 1; i < nameComponents.count; i++) { - NSMutableArray *> *children = root[nameComponents[i]]; - if (!children) { - children = [NSMutableArray array]; - root[nameComponents[i]] = children; - } - NSMutableDictionary *child = children.lastObject; - if (!child || i == nameComponents.count - 1) { - child = [NSMutableDictionary dictionary]; - [children addObject:child]; - } - root = child; - } - if (tag[@"content"]) { - root[FBSDKWebViewAppLinkResolverDictionaryValueKey] = tag[@"content"]; - } - } - return al; -} - -- (void)getALDataFromLoadedPage:(WKWebView *)webView - handler:(void (^)(NSDictionary *))handler -{ - // Run some JavaScript in the webview to fetch the meta tags. - [webView evaluateJavaScript:FBSDKWebViewAppLinkResolverTagExtractionJavaScript - completionHandler:^(id _Nullable evaluateResult, NSError * _Nullable error) { - NSString *jsonString = [evaluateResult isKindOfClass:[NSString class]] ? evaluateResult : nil; - error = nil; - NSArray *> *arr = - [NSJSONSerialization JSONObjectWithData:[jsonString dataUsingEncoding:NSUTF8StringEncoding] - options:0 - error:&error]; - handler([self parseALData:arr]); - }]; -} - -/* - Converts app link data into a FBSDKAppLink containing the targets relevant for this platform. - */ -- (FBSDKAppLink *)appLinkFromALData:(NSDictionary *)appLinkDict destination:(NSURL *)destination { - NSMutableArray *linkTargets = [NSMutableArray array]; - - NSArray *platformData = nil; - - const UIUserInterfaceIdiom idiom = UI_USER_INTERFACE_IDIOM(); - if (idiom == UIUserInterfaceIdiomPad) { - platformData = @[ appLinkDict[FBSDKWebViewAppLinkResolverIPadKey] ?: @{}, - appLinkDict[FBSDKWebViewAppLinkResolverIOSKey] ?: @{} ]; - } else if (idiom == UIUserInterfaceIdiomPhone) { - platformData = @[ appLinkDict[FBSDKWebViewAppLinkResolverIPhoneKey] ?: @{}, - appLinkDict[FBSDKWebViewAppLinkResolverIOSKey] ?: @{} ]; - } else { - // Future-proofing. Other User Interface idioms should only hit ios. - platformData = @[ appLinkDict[FBSDKWebViewAppLinkResolverIOSKey] ?: @{} ]; - } - - for (NSArray *platformObjects in platformData) { - for (NSDictionary *platformDict in platformObjects) { - // The schema requires a single url/app store id/app name, - // but we could find multiple of them. We'll make a best effort - // to interpret this data. - NSArray *> *urls = platformDict[FBSDKWebViewAppLinkResolverIOSURLKey]; - NSArray *> *appStoreIds = platformDict[FBSDKWebViewAppLinkResolverIOSAppStoreIdKey]; - NSArray *> *appNames = platformDict[FBSDKWebViewAppLinkResolverIOSAppNameKey]; - - NSUInteger maxCount = MAX(urls.count, MAX(appStoreIds.count, appNames.count)); - - for (NSUInteger i = 0; i < maxCount; i++) { - NSString *urlString = urls[i][FBSDKWebViewAppLinkResolverDictionaryValueKey]; - NSURL *url = urlString ? [NSURL URLWithString:urlString] : nil; - NSString *appStoreId = appStoreIds[i][FBSDKWebViewAppLinkResolverDictionaryValueKey]; - NSString *appName = appNames[i][FBSDKWebViewAppLinkResolverDictionaryValueKey]; - FBSDKAppLinkTarget *target = [FBSDKAppLinkTarget appLinkTargetWithURL:url - appStoreId:appStoreId - appName:appName]; - [linkTargets addObject:target]; - } - } - } - - NSDictionary *webDict = appLinkDict[FBSDKWebViewAppLinkResolverWebKey][0]; - NSString *webUrlString = webDict[FBSDKWebViewAppLinkResolverWebURLKey][0][FBSDKWebViewAppLinkResolverDictionaryValueKey]; - NSString *shouldFallbackString = webDict[FBSDKWebViewAppLinkResolverShouldFallbackKey][0][FBSDKWebViewAppLinkResolverDictionaryValueKey]; - - NSURL *webUrl = destination; - - if (shouldFallbackString && - [@[ @"no", @"false", @"0" ] containsObject:shouldFallbackString.lowercaseString]) { - webUrl = nil; - } - if (webUrl && webUrlString) { - webUrl = [NSURL URLWithString:webUrlString]; - } - - return [FBSDKAppLink appLinkWithSourceURL:destination - targets:linkTargets - webURL:webUrl]; -} - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/Internal/FBSDKMeasurementEventListener.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/Internal/FBSDKMeasurementEventListener.h deleted file mode 100644 index 1695690343..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/Internal/FBSDKMeasurementEventListener.h +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import - -NS_ASSUME_NONNULL_BEGIN - -NS_SWIFT_NAME(MeasurementEventListener) -@interface FBSDKMeasurementEventListener : NSObject - -@property (class, nonatomic, strong, readonly) FBSDKMeasurementEventListener *defaultListener -NS_SWIFT_NAME(default); - -@end - -NS_ASSUME_NONNULL_END - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/Internal/FBSDKMeasurementEventListener.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/Internal/FBSDKMeasurementEventListener.m deleted file mode 100644 index 00710d1d4a..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/AppLink/Internal/FBSDKMeasurementEventListener.m +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKMeasurementEventListener.h" - -#import "FBSDKAppEvents+Internal.h" -#import "FBSDKTimeSpentData.h" - -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 - -static NSNotificationName const FBSDKMeasurementEventNotification = @"com.facebook.facebook-objc-sdk.measurement_event"; - -#else - -static NSString *const FBSDKMeasurementEventNotification = @"com.facebook.facebook-objc-sdk.measurement_event"; - -#endif - -static NSString *const FBSDKMeasurementEventName = @"event_name"; -static NSString *const FBSDKMeasurementEventArgs = @"event_args"; -static NSString *const FBSDKMeasurementEventPrefix = @"bf_"; - -@implementation FBSDKMeasurementEventListener - -+ (instancetype)defaultListener -{ - static dispatch_once_t dispatchOnceLocker = 0; - static FBSDKMeasurementEventListener *defaultListener = nil; - dispatch_once(&dispatchOnceLocker, ^{ - defaultListener = [[self alloc] init]; - NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; - [center addObserver:defaultListener - selector:@selector(logFBAppEventForNotification:) - name:FBSDKMeasurementEventNotification - object:nil]; - }); - return defaultListener; -} - -- (void)logFBAppEventForNotification:(NSNotification *)note -{ - // when catch al_nav_in event, we set source application for FBAppEvents. - if ([note.userInfo[FBSDKMeasurementEventName] isEqualToString:@"al_nav_in"]) { - NSString *sourceApplication = note.userInfo[FBSDKMeasurementEventArgs][@"sourceApplication"]; - if (sourceApplication) { - [FBSDKTimeSpentData setSourceApplication:sourceApplication isFromAppLink:YES]; - } - } - NSDictionary *eventArgs = note.userInfo[FBSDKMeasurementEventArgs]; - NSMutableDictionary *logData = [[NSMutableDictionary alloc] init]; - for (NSString *key in eventArgs.allKeys) { - NSError *error = nil; - NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[^0-9a-zA-Z _-]" options:0 error:&error]; - NSString *safeKey = [regex stringByReplacingMatchesInString:key - options:0 - range:NSMakeRange(0, key.length) - withTemplate:@"-"]; - safeKey = [safeKey stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@" -"]]; - logData[safeKey] = eventArgs[key]; - } - [FBSDKAppEvents logInternalEvent:[FBSDKMeasurementEventPrefix stringByAppendingString:note.userInfo[FBSDKMeasurementEventName]] - parameters:logData - isImplicitlyLogged:YES]; -} - -- (void)dealloc -{ - [[NSNotificationCenter defaultCenter] removeObserver:self]; -} - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Instrument/FBSDKCrashHandler.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Instrument/FBSDKCrashHandler.h deleted file mode 100644 index 169abe398e..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Instrument/FBSDKCrashHandler.h +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -#import "FBSDKCrashObserving.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FBSDKCrashHandler : NSObject - -+ (void)disable; -+ (void)addObserver:(id)observer; -+ (void)removeObserver:(id)observer; -+ (void)clearCrashReportFiles; -+ (NSString *)getFBSDKVersion; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Instrument/FBSDKCrashHandler.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Instrument/FBSDKCrashHandler.m deleted file mode 100644 index 3bd50e693f..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Instrument/FBSDKCrashHandler.m +++ /dev/null @@ -1,347 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKCrashHandler.h" - -#import - -#import - -#import "FBSDKLibAnalyzer.h" - -#define FBSDK_MAX_CRASH_LOGS 5 -#define FBSDK_CRASH_PATH_NAME @"instrument" -#ifndef FBSDK_VERSION_STRING -#define FBSDK_VERSION_STRING @"5.15.1" -#endif - -static NSUncaughtExceptionHandler *previousExceptionHandler = NULL; -static NSString *mappingTableIdentifier = NULL; -static NSString *directoryPath; - -NSString *const kFBSDKAppVersion = @"app_version"; -NSString *const kFBSDKCallstack = @"callstack"; -NSString *const kFBSDKCrashReason = @"reason"; -NSString *const kFBSDKCrashTimestamp = @"timestamp"; -NSString *const kFBSDKDeviceModel = @"device_model"; -NSString *const kFBSDKDeviceOSVersion = @"device_os_version"; - -NSString *const kFBSDKMapingTable = @"mapping_table"; -NSString *const kFBSDKMappingTableIdentifier = @"mapping_table_identifier"; - -@implementation FBSDKCrashHandler - -static NSHashTable> *_observers; -static NSArray *> *_processedCrashLogs; -static BOOL _isTurnedOff; - -# pragma mark - Class Methods - -+ (void)initialize -{ - NSString *dirPath = [NSTemporaryDirectory() stringByAppendingPathComponent:FBSDK_CRASH_PATH_NAME]; - if (![[NSFileManager defaultManager] fileExistsAtPath:dirPath]) { - [[NSFileManager defaultManager] createDirectoryAtPath:dirPath withIntermediateDirectories:NO attributes:NULL error:NULL]; - } - directoryPath = dirPath; - NSString *identifier = [[NSUUID UUID] UUIDString]; - mappingTableIdentifier = [identifier stringByReplacingOccurrencesOfString:@"-" withString:@""]; - _observers = [[NSHashTable alloc] init]; -} - -+ (void)sendCrashLogs -{ - NSArray> *observers = [_observers copy]; - for (id observer in observers) { - if (observer && [observer respondsToSelector:@selector(didReceiveCrashLogs:)]) { - NSArray *> *filteredCrashLogs = [self filterCrashLogs:observer.prefixes]; - [observer didReceiveCrashLogs:filteredCrashLogs]; - } - } -} - -+ (NSArray *> *)filterCrashLogs:(NSArray *)prefixList -{ - NSMutableArray *> *crashLogs = [NSMutableArray array]; - for (NSDictionary *crashLog in _processedCrashLogs) { - NSArray *callstack = crashLog[kFBSDKCallstack]; - if ([self callstack:callstack containsPrefix:prefixList]) { - [crashLogs addObject:crashLog]; - } - } - return crashLogs; -} - -+ (BOOL)callstack:(NSArray *)callstack - containsPrefix:(NSArray *)prefixList -{ - NSString *callStackString = [callstack componentsJoinedByString:@""]; - for (NSString *prefix in prefixList) { - if ([callStackString containsString:prefix]) { - return YES; - } - } - return NO; -} - -+ (void)disable -{ - _isTurnedOff = YES; - [FBSDKCrashHandler uninstallExceptionsHandler]; - _observers = nil; -} - -+ (void)addObserver:(id)observer -{ - if (_isTurnedOff || ![self isSafeToGenerateMapping]) { - return; - } - static dispatch_once_t onceToken = 0; - dispatch_once(&onceToken, ^{ - [FBSDKCrashHandler installExceptionsHandler]; - _processedCrashLogs = [self getProcessedCrashLogs]; - }); - if (![_observers containsObject:observer]) { - [_observers addObject:observer]; - [self generateMethodMapping:observer]; - [self sendCrashLogs]; - } -} - -+ (void)removeObserver:(id)observer -{ - if ([_observers containsObject:observer]) { - [_observers removeObject:observer]; - if (_observers.count == 0) { - [FBSDKCrashHandler uninstallExceptionsHandler]; - } - } -} - -# pragma mark handler function - -+ (void)installExceptionsHandler -{ - NSUncaughtExceptionHandler *currentHandler = NSGetUncaughtExceptionHandler(); - - if (currentHandler != FBSDKExceptionHandler) { - previousExceptionHandler = currentHandler; - NSSetUncaughtExceptionHandler(&FBSDKExceptionHandler); - } -} - -+ (void)uninstallExceptionsHandler -{ - NSSetUncaughtExceptionHandler(previousExceptionHandler); - previousExceptionHandler = nil; -} - -static void FBSDKExceptionHandler(NSException *exception) -{ - [FBSDKCrashHandler saveException:exception]; - if (previousExceptionHandler) { - previousExceptionHandler(exception); - } -} - -#pragma mark - Storage - -+ (void)saveException:(NSException *)exception -{ - if (exception.callStackSymbols && exception.name) { - NSArray *stackSymbols = [NSArray arrayWithArray:exception.callStackSymbols]; - [self saveCrashLog:@{ - kFBSDKCallstack : stackSymbols, - kFBSDKCrashReason : exception.name, - }]; - } -} - -+ (void)saveSignal:(int)signal withCallStack:(NSArray *)callStack -{ - if (callStack) { - NSString *signalDescription = [NSString stringWithCString:strsignal(signal) encoding:NSUTF8StringEncoding] ?: [NSString stringWithFormat:@"SIGNUM(%i)", signal]; - [self saveCrashLog:@{ - kFBSDKCallstack : callStack, - kFBSDKCrashReason : signalDescription, - }]; - } -} - -+ (NSArray *> *)getProcessedCrashLogs -{ - NSArray *> *crashLogs = [self loadCrashLogs]; - if (0 == crashLogs.count) { - [self clearCrashReportFiles]; - return nil; - } - NSMutableArray *> *processedCrashLogs = [NSMutableArray array]; - - for (NSDictionary *crashLog in crashLogs) { - NSArray *callstack = crashLog[kFBSDKCallstack]; - NSData *data = [self loadLibData:crashLog]; - if (!data) { - continue; - } - NSDictionary *methodMapping = [NSJSONSerialization JSONObjectWithData:data - options:kNilOptions - error:nil]; - NSArray *symbolicatedCallstack = [FBSDKLibAnalyzer symbolicateCallstack:callstack methodMapping:methodMapping]; - NSMutableDictionary *symbolicatedCrashLog = [NSMutableDictionary dictionaryWithDictionary:crashLog]; - if (symbolicatedCallstack) { - [symbolicatedCrashLog setObject:symbolicatedCallstack forKey:kFBSDKCallstack]; - [symbolicatedCrashLog removeObjectForKey:kFBSDKMappingTableIdentifier]; - [processedCrashLogs addObject:symbolicatedCrashLog]; - } - } - return processedCrashLogs; -} - -+ (NSArray *> *)loadCrashLogs -{ - NSArray *files = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:directoryPath error:NULL]; - NSArray *fileNames = [[self getCrashLogFileNames:files] sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2){ - return [obj2 compare:obj1]; - }]; - NSMutableArray *> *crashLogArray = [NSMutableArray array]; - - for (NSUInteger i = 0; i < MIN(fileNames.count, FBSDK_MAX_CRASH_LOGS); i++) { - NSData *data = [self loadCrashLog:fileNames[i]]; - if (!data) { - continue; - } - NSDictionary* crashLog = [NSJSONSerialization JSONObjectWithData:data - options:kNilOptions - error:nil]; - if (crashLog) { - [crashLogArray addObject:crashLog]; - } - } - return [crashLogArray copy]; -} - -+ (nullable NSData *)loadCrashLog:(NSString *)fileName -{ - return [NSData dataWithContentsOfFile:[directoryPath stringByAppendingPathComponent:fileName] options:NSDataReadingMappedIfSafe error:nil]; -} - -+ (void)clearCrashReportFiles -{ - NSArray *files = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:directoryPath error:nil]; - - for (NSUInteger i = 0; i < files.count; i++) { - // remove all crash related files except for the current mapping table - if ([files[i] hasPrefix:@"crash_"] && ![files[i] containsString:mappingTableIdentifier]) { - [[NSFileManager defaultManager] removeItemAtPath:[directoryPath stringByAppendingPathComponent:files[i]] error:nil]; - } - } -} - -+ (NSArray *)getCrashLogFileNames:(NSArray *)files -{ - NSMutableArray *fileNames = [NSMutableArray array]; - - for (NSString *fileName in files) { - if ([fileName hasPrefix:@"crash_log_"] && [fileName hasSuffix:@".json"]) { - [fileNames addObject:fileName]; - } - } - - return fileNames; -} - -+ (void)saveCrashLog:(NSDictionary *)crashLog -{ - NSMutableDictionary *completeCrashLog = [NSMutableDictionary dictionaryWithDictionary:crashLog]; - NSString *currentTimestamp = [NSString stringWithFormat:@"%.0lf", [[NSDate date] timeIntervalSince1970]]; - - [completeCrashLog setObject:currentTimestamp forKey:kFBSDKCrashTimestamp]; - [completeCrashLog setObject:mappingTableIdentifier forKey:kFBSDKMappingTableIdentifier]; - - NSBundle *mainBundle = [NSBundle mainBundle]; - NSString *version = [mainBundle objectForInfoDictionaryKey:@"CFBundleShortVersionString"]; - NSString *build = [mainBundle objectForInfoDictionaryKey:@"CFBundleVersion"]; - [completeCrashLog setObject:[NSString stringWithFormat:@"%@(%@)", version, build] forKey:kFBSDKAppVersion]; - - struct utsname systemInfo; - uname(&systemInfo); - [completeCrashLog setObject:@(systemInfo.machine) forKey:kFBSDKDeviceModel]; - - [completeCrashLog setObject:[UIDevice currentDevice].systemVersion forKey:kFBSDKDeviceOSVersion]; - - NSData *data = [NSJSONSerialization dataWithJSONObject:completeCrashLog options:0 error:nil]; - - [data writeToFile:[self getPathToCrashFile:currentTimestamp] - atomically:YES]; -} - -+ (void)generateMethodMapping:(id)observer -{ - if (observer.prefixes.count == 0) { - return; - } - [[NSUserDefaults standardUserDefaults] setObject:mappingTableIdentifier forKey:kFBSDKMappingTableIdentifier]; - NSDictionary *methodMapping = [FBSDKLibAnalyzer getMethodsTable:observer.prefixes - frameworks:observer.frameworks]; - if (methodMapping.count > 0){ - NSData *data = [NSJSONSerialization dataWithJSONObject:methodMapping options:0 error:nil]; - [data writeToFile:[self getPathToLibDataFile:mappingTableIdentifier] - atomically:YES]; - } -} - -+ (nullable NSData *)loadLibData:(NSDictionary *)crashLog -{ - NSString *identifier = [crashLog objectForKey:kFBSDKMappingTableIdentifier]; - return [NSData dataWithContentsOfFile:[self getPathToLibDataFile:identifier] options:NSDataReadingMappedIfSafe error:nil]; -} - -+ (NSString *)getPathToCrashFile:(NSString *)timestamp -{ - return [directoryPath stringByAppendingPathComponent: - [NSString stringWithFormat:@"crash_log_%@.json", timestamp]]; -} - -+ (NSString *)getPathToLibDataFile:(NSString *)identifier -{ - return [directoryPath stringByAppendingPathComponent: - [NSString stringWithFormat:@"crash_lib_data_%@.json", identifier]]; - -} - -+ (BOOL)isSafeToGenerateMapping -{ -#if TARGET_OS_SIMULATOR - return YES; -#else - NSString *identifier = [[NSUserDefaults standardUserDefaults] objectForKey:kFBSDKMappingTableIdentifier]; - //first app start - if (!identifier) { - return YES; - } - - return [[NSFileManager defaultManager] fileExistsAtPath:[self getPathToLibDataFile:identifier]]; -#endif -} - -+ (NSString *)getFBSDKVersion -{ - return FBSDK_VERSION_STRING; -} - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Instrument/FBSDKCrashObserving.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Instrument/FBSDKCrashObserving.h deleted file mode 100644 index 070416cabf..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Instrument/FBSDKCrashObserving.h +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -NS_ASSUME_NONNULL_BEGIN - -@protocol FBSDKCrashObserving - -@property (nonatomic, copy) NSArray *prefixes; -@property (nonatomic, copy, nullable) NSArray *frameworks; - -@optional - -- (void)didReceiveCrashLogs:(NSArray *> *)crashLogs; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Instrument/FBSDKLibAnalyzer.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Instrument/FBSDKLibAnalyzer.h deleted file mode 100644 index e6873adef1..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Instrument/FBSDKLibAnalyzer.h +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface FBSDKLibAnalyzer : NSObject - -+ (NSDictionary *)getMethodsTable:(NSArray *)prefixes - frameworks:(NSArray * _Nullable)frameworks; -+ (nullable NSArray *)symbolicateCallstack:(NSArray *)callstack - methodMapping:(NSDictionary *)methodMapping; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Instrument/FBSDKLibAnalyzer.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Instrument/FBSDKLibAnalyzer.m deleted file mode 100644 index 1ede1d8a64..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Instrument/FBSDKLibAnalyzer.m +++ /dev/null @@ -1,227 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKLibAnalyzer.h" - -#import - -@implementation FBSDKLibAnalyzer - -static NSMutableDictionary *_methodMapping; - -+ (void)initialize -{ - _methodMapping = [NSMutableDictionary dictionary]; -} - -+ (NSDictionary *)getMethodsTable:(NSArray *)prefixes - frameworks:(NSArray *)frameworks -{ - NSArray *allClasses = [self getClassNames:prefixes frameworks:frameworks]; - for (NSString *className in allClasses) { - Class class = NSClassFromString(className); - if (class) { - [self addClass:class isClassMethod:NO]; - [self addClass:object_getClass(class) isClassMethod:YES]; - } - } - @synchronized (_methodMapping) { - return [_methodMapping copy]; - } -} - -#pragma mark - private methods - -+ (NSArray *)getClassNames:(NSArray *)prefixes - frameworks:(NSArray *)frameworks -{ - NSMutableArray *classNames = [NSMutableArray new]; - // from main bundle - [classNames addObjectsFromArray:[self getClassesFrom:[[NSBundle mainBundle] executablePath] - prefixes:prefixes]]; - // from dynamic libraries - if (frameworks.count > 0) { - unsigned int count = 0; - const char **images = objc_copyImageNames(&count); - for (int i = 0; i < count; i++) { - NSString *image = [NSString stringWithUTF8String:images[i]]; - for (NSString *framework in frameworks) { - if ([image containsString:framework]) { - [classNames addObjectsFromArray:[self getClassesFrom:image - prefixes:nil]]; - } - } - } - free(images); - } - - return [classNames copy]; -} - -+ (NSArray *)getClassesFrom:(NSString *)image - prefixes:(NSArray *)prefixes -{ - NSMutableArray *classNames = [NSMutableArray array]; - unsigned int count = 0; - const char **classes = objc_copyClassNamesForImage([image UTF8String], &count); - for (unsigned int i = 0; i < count; i++){ - NSString *className = [NSString stringWithUTF8String:classes[i]]; - if (prefixes.count > 0) { - for (NSString *prefix in prefixes) { - if ([className hasPrefix:prefix]) { - [classNames addObject:className]; - break; - } - } - } else { - [classNames addObject:className]; - } - } - free(classes); - return [classNames copy]; -} - -+ (void)addClass:(Class)class - isClassMethod:(BOOL)isClassMethod -{ - unsigned int methodsCount = 0; - Method *methods = class_copyMethodList(class, &methodsCount); - - NSString *methodType = isClassMethod ? @"+" : @"-"; - - for (unsigned int i = 0; i < methodsCount; i++) { - Method method = methods[i]; - - if (method) { - SEL selector = method_getName(method); - - IMP methodImplementation = class_getMethodImplementation(class, selector); - NSString *methodAddress = [NSString stringWithFormat:@"0x%010lx", (unsigned long)methodImplementation]; - NSString *methodName = [NSString stringWithFormat:@"%@[%@ %@]", - methodType, - NSStringFromClass(class), - NSStringFromSelector(selector)]; - - if (methodAddress && methodName) { - @synchronized (_methodMapping) { - [_methodMapping setObject:methodName forKey:methodAddress]; - } - } - } - } - free(methods); -} - -+ (NSArray *)symbolicateCallstack:(NSArray *)callstack - methodMapping:(NSDictionary *)methodMapping -{ - if (!callstack || !methodMapping) { - return nil; - } - NSArray *sortedAllAddress = [methodMapping.allKeys sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) { - return [obj1 compare:obj2]; - }]; - - BOOL containsFBSDKFunction = NO; - NSInteger nonSDKMethodCount = 0; - NSMutableArray *symbolicatedCallstack = [NSMutableArray array]; - - for (NSUInteger i = 0; i < callstack.count; i++){ - NSString *rawAddress = [self getAddress:callstack[i]]; - NSString *addressString = [NSString stringWithFormat:@"0x%@",[rawAddress substringWithRange:NSMakeRange(rawAddress.length - 10, 10)]]; - NSString *methodAddress = [self searchMethod:addressString sortedAllAddress:sortedAllAddress]; - - if (methodAddress) { - containsFBSDKFunction = YES; - nonSDKMethodCount == 0 ?: [symbolicatedCallstack addObject:[NSString stringWithFormat:@"(%ld DEV METHODS)", (long)nonSDKMethodCount]]; - nonSDKMethodCount = 0; - NSString *methodName = [methodMapping objectForKey:methodAddress]; - - // filter out cxx_destruct - if ([methodName containsString:@".cxx_destruct"]) { - return nil; - } - [symbolicatedCallstack addObject:[NSString stringWithFormat:@"%@%@", methodName, [self getOffset:addressString secondString:methodAddress]]]; - } else { - nonSDKMethodCount++; - } - } - nonSDKMethodCount == 0 ?: [symbolicatedCallstack addObject:[NSString stringWithFormat:@"(%ld DEV METHODS)", (long)nonSDKMethodCount]]; - - return containsFBSDKFunction ? symbolicatedCallstack : nil; -} - -+ (NSString *)getAddress:(NSString *)callstackEntry -{ - NSArray *components = [callstackEntry componentsSeparatedByString:@" "]; - for (NSString *component in components) { - if ([component containsString:@"0x"]) { - return component; - } - } - return nil; -} - -+ (NSString *)getOffset:(NSString *)firstString - secondString:(NSString *)secondString -{ - if (!firstString || !secondString) { - return nil; - } - unsigned long long first = 0, second = 0; - NSScanner *scanner = [NSScanner scannerWithString:firstString]; - [scanner scanHexLongLong:&first]; - - scanner = [NSScanner scannerWithString:secondString]; - [scanner scanHexLongLong:&second]; - - unsigned long long difference = first - second; - return [NSString stringWithFormat:@"+%llu", difference]; -} - -+ (NSString *)searchMethod:(NSString *)address - sortedAllAddress:(NSArray *)sortedAllAddress -{ - if (0 == sortedAllAddress.count) { - return nil; - } - NSString *lowestAddress = sortedAllAddress[0]; - NSString *highestAddress = sortedAllAddress[sortedAllAddress.count - 1]; - - if ([address compare:lowestAddress] == NSOrderedAscending || [address compare:highestAddress] == NSOrderedDescending) { - return nil; - } - - if ([address compare:lowestAddress] == NSOrderedSame) { - return lowestAddress; - } - - if ([address compare:highestAddress] == NSOrderedSame) { - return highestAddress; - } - - NSUInteger index = [sortedAllAddress indexOfObject:address - inSortedRange:NSMakeRange(0, sortedAllAddress.count - 1) - options:NSBinarySearchingInsertionIndex - usingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) { - return [obj1 compare:obj2]; - }]; - return sortedAllAddress[index - 1]; -} - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Internal/FBSDKBasicUtility.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Internal/FBSDKBasicUtility.h deleted file mode 100644 index 078d3f7335..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Internal/FBSDKBasicUtility.h +++ /dev/null @@ -1,135 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - Describes the callback for appLinkFromURLInBackground. - @param object the FBSDKAppLink representing the deferred App Link - @param stop the error during the request, if any - - */ -typedef id _Nullable (^FBSDKInvalidObjectHandler)(id object, BOOL *stop) -NS_SWIFT_NAME(InvalidObjectHandler); - -@interface FBSDKBasicUtility : NSObject - -/** - Converts an object into a JSON string. - @param object The object to convert to JSON. - @param errorRef If an error occurs, upon return contains an NSError object that describes the problem. - @param invalidObjectHandler Handles objects that are invalid, returning a replacement value or nil to ignore. - @return A JSON string or nil if the object cannot be converted to JSON. - */ -+ (nullable NSString *)JSONStringForObject:(id)object - error:(NSError *__autoreleasing *)errorRef - invalidObjectHandler:(nullable FBSDKInvalidObjectHandler)invalidObjectHandler; - -/** - Sets an object for a key in a dictionary if it is not nil. - @param dictionary The dictionary to set the value for. - @param object The value to set. - @param key The key to set the value for. - */ -+ (void)dictionary:(NSMutableDictionary *)dictionary - setObject:(nullable id)object - forKey:(nullable id)key; - -/** - Sets an object for a key in a dictionary if it is not nil. - @param dictionary The dictionary to set the value for. - @param object The value to set after serializing to JSON. - @param key The key to set the value for. - @param errorRef If an error occurs, upon return contains an NSError object that describes the problem. - @return NO if an error occurred while serializing the object, otherwise YES. - */ -+ (BOOL)dictionary:(NSMutableDictionary *)dictionary -setJSONStringForObject:(id)object - forKey:(id)key - error:(NSError *__autoreleasing *)errorRef; - -/** - Adds an object to an array if it is not nil. - @param array The array to add the object to. - @param object The object to add to the array. - */ -+ (void)array:(NSMutableArray *)array addObject:(nullable id)object; - -/** - Converts a JSON string into an object - @param string The JSON string to convert. - @param errorRef If an error occurs, upon return contains an NSError object that describes the problem. - @return An NSDictionary, NSArray, NSString or NSNumber containing the object representation, or nil if the string - cannot be converted. - */ -+ (nullable id)objectForJSONString:(NSString *)string error:(NSError *__autoreleasing *)errorRef; - -/** - Constructs a query string from a dictionary. - @param dictionary The dictionary with key/value pairs for the query string. - @param errorRef If an error occurs, upon return contains an NSError object that describes the problem. - @param invalidObjectHandler Handles objects that are invalid, returning a replacement value or nil to ignore. - @return Query string representation of the parameters. - */ -+ (NSString *)queryStringWithDictionary:(NSDictionary *)dictionary - error:(NSError *__autoreleasing *)errorRef - invalidObjectHandler:(nullable FBSDKInvalidObjectHandler)invalidObjectHandler; - -/** - Converts simple value types to the string equivalent for serializing to a request query or body. - @param value The value to be converted. - @return The value that may have been converted if able (otherwise the input param). - */ -+ (id)convertRequestValue:(id)value; - -/** - Encodes a value for an URL. - @param value The value to encode. - @return The encoded value. - */ -+ (NSString *)URLEncode:(NSString *)value; - -/** - Parses a query string into a dictionary. - @param queryString The query string value. - @return A dictionary with the key/value pairs. - */ -+ (NSDictionary *)dictionaryWithQueryString:(NSString *)queryString; - -/** - Decodes a value from an URL. - @param value The value to decode. - @return The decoded value. - */ -+ (NSString *)URLDecode:(NSString *)value; - -/** - Gzip data with default compression level if possible. - @param data The raw data. - @return nil if unable to gzip the data, otherwise gzipped data. - */ -+ (nullable NSData *)gzip:(NSData *)data; - -+ (NSString *)anonymousID; -+ (NSString *)persistenceFilePath:(NSString *)filename; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Internal/FBSDKBasicUtility.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Internal/FBSDKBasicUtility.m deleted file mode 100644 index 522b17513a..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Internal/FBSDKBasicUtility.m +++ /dev/null @@ -1,341 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKBasicUtility.h" - -#import - -#import "FBSDKTypeUtility.h" - -#define kChunkSize 1024 - -static NSString *const FBSDK_BASICUTILITY_ANONYMOUSIDFILENAME = @"com-facebook-sdk-PersistedAnonymousID.json"; -static NSString *const FBSDK_BASICUTILITY_ANONYMOUSID_KEY = @"anon_id"; - -@protocol BASIC_FBSDKError - -+ (NSError *)invalidArgumentErrorWithName:(NSString *)name value:(id)value message:(NSString *)message; - -@end - -@implementation FBSDKBasicUtility - -+ (NSString *)JSONStringForObject:(id)object - error:(NSError *__autoreleasing *)errorRef - invalidObjectHandler:(FBSDKInvalidObjectHandler)invalidObjectHandler -{ - if (invalidObjectHandler || ![NSJSONSerialization isValidJSONObject:object]) { - object = [self _convertObjectToJSONObject:object invalidObjectHandler:invalidObjectHandler stop:NULL]; - if (![NSJSONSerialization isValidJSONObject:object]) { - if (errorRef != NULL) { - Class FBSDKErrorClass = NSClassFromString(@"FBSDKError"); - if ([FBSDKErrorClass respondsToSelector:@selector(invalidArgumentErrorWithName:value:message:)]) { - *errorRef = [FBSDKErrorClass invalidArgumentErrorWithName:@"object" - value:object - message:@"Invalid object for JSON serialization."]; - } - } - return nil; - } - } - NSData *data = [NSJSONSerialization dataWithJSONObject:object options:0 error:errorRef]; - if (!data) { - return nil; - } - return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; -} - -+ (BOOL)dictionary:(NSMutableDictionary *)dictionary -setJSONStringForObject:(id)object - forKey:(id)key - error:(NSError *__autoreleasing *)errorRef -{ - if (!object || !key) { - return YES; - } - NSString *JSONString = [self JSONStringForObject:object error:errorRef invalidObjectHandler:NULL]; - if (!JSONString) { - return NO; - } - [self dictionary:dictionary setObject:JSONString forKey:key]; - return YES; -} - -+ (id)_convertObjectToJSONObject:(id)object - invalidObjectHandler:(FBSDKInvalidObjectHandler)invalidObjectHandler - stop:(BOOL *)stopRef -{ - __block BOOL stop = NO; - if ([object isKindOfClass:[NSString class]] || [object isKindOfClass:[NSNumber class]]) { - // good to go, keep the object - } else if ([object isKindOfClass:[NSURL class]]) { - object = ((NSURL *)object).absoluteString; - } else if ([object isKindOfClass:[NSDictionary class]]) { - NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init]; - [(NSDictionary *)object enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *dictionaryStop) { - [self dictionary:dictionary - setObject:[self _convertObjectToJSONObject:obj invalidObjectHandler:invalidObjectHandler stop:&stop] - forKey:[FBSDKTypeUtility stringValue:key]]; - if (stop) { - *dictionaryStop = YES; - } - }]; - object = dictionary; - } else if ([object isKindOfClass:[NSArray class]]) { - NSMutableArray *array = [[NSMutableArray alloc] init]; - for (id obj in (NSArray *)object) { - id convertedObj = [self _convertObjectToJSONObject:obj invalidObjectHandler:invalidObjectHandler stop:&stop]; - [self array:array addObject:convertedObj]; - if (stop) { - break; - } - } - object = array; - } else { - object = invalidObjectHandler(object, stopRef); - } - if (stopRef != NULL) { - *stopRef = stop; - } - return object; -} - -+ (void)dictionary:(NSMutableDictionary *)dictionary setObject:(id)object forKey:(id)key -{ - if (object && key) { - dictionary[key] = object; - } -} - -+ (void)array:(NSMutableArray *)array addObject:(id)object -{ - if (object) { - [array addObject:object]; - } -} - -+ (id)objectForJSONString:(NSString *)string error:(NSError *__autoreleasing *)errorRef -{ - NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding]; - if (!data) { - if (errorRef != NULL) { - *errorRef = nil; - } - return nil; - } - return [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:errorRef]; -} - -+ (NSString *)queryStringWithDictionary:(NSDictionary *)dictionary - error:(NSError *__autoreleasing *)errorRef - invalidObjectHandler:(FBSDKInvalidObjectHandler)invalidObjectHandler -{ - NSMutableString *queryString = [[NSMutableString alloc] init]; - __block BOOL hasParameters = NO; - if (dictionary) { - NSMutableArray *keys = [dictionary.allKeys mutableCopy]; - // remove non-string keys, as they are not valid - [keys filterUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) { - return [evaluatedObject isKindOfClass:[NSString class]]; - }]]; - // sort the keys so that the query string order is deterministic - [keys sortUsingSelector:@selector(compare:)]; - BOOL stop = NO; - for (NSString *key in keys) { - id value = [self convertRequestValue:dictionary[key]]; - if ([value isKindOfClass:[NSString class]]) { - value = [self URLEncode:value]; - } - if (invalidObjectHandler && ![value isKindOfClass:[NSString class]]) { - value = invalidObjectHandler(value, &stop); - if (stop) { - break; - } - } - if (value) { - if (hasParameters) { - [queryString appendString:@"&"]; - } - [queryString appendFormat:@"%@=%@", key, value]; - hasParameters = YES; - } - } - } - if (errorRef != NULL) { - *errorRef = nil; - } - return (queryString.length ? [queryString copy] : nil); -} - -+ (id)convertRequestValue:(id)value -{ - if ([value isKindOfClass:[NSNumber class]]) { - value = ((NSNumber *)value).stringValue; - } else if ([value isKindOfClass:[NSURL class]]) { - value = ((NSURL *)value).absoluteString; - } - return value; -} - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" -+ (NSString *)URLEncode:(NSString *)value -{ - return (__bridge_transfer NSString *)CFURLCreateStringByAddingPercentEscapes(NULL, - (CFStringRef)value, - NULL, // characters to leave unescaped - CFSTR(":!*();@/&?+$,='"), - kCFStringEncodingUTF8); -} - -#pragma clang diagnostic pop - -+ (NSDictionary *)dictionaryWithQueryString:(NSString *)queryString -{ - NSMutableDictionary *result = [[NSMutableDictionary alloc] init]; - NSArray *parts = [queryString componentsSeparatedByString:@"&"]; - - for (NSString *part in parts) { - if (part.length == 0) { - continue; - } - - NSRange index = [part rangeOfString:@"="]; - NSString *key; - NSString *value; - - if (index.location == NSNotFound) { - key = part; - value = @""; - } else { - key = [part substringToIndex:index.location]; - value = [part substringFromIndex:index.location + index.length]; - } - - key = [self URLDecode:key]; - value = [self URLDecode:value]; - if (key && value) { - result[key] = value; - } - } - return result; -} - -+ (NSString *)URLDecode:(NSString *)value -{ - value = [value stringByReplacingOccurrencesOfString:@"+" withString:@" "]; -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - value = [value stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; -#pragma clang diagnostic pop - return value; -} - -+ (NSData *)gzip:(NSData *)data -{ - const void *bytes = data.bytes; - const NSUInteger length = data.length; - - if (!bytes || !length) { - return nil; - } - -#if defined(__LP64__) && __LP64__ - if (length > UINT_MAX) { - return nil; - } -#endif - - // initialze stream - z_stream stream; - bzero(&stream, sizeof(z_stream)); - - if (deflateInit2(&stream, -1, Z_DEFLATED, 31, 8, Z_DEFAULT_STRATEGY) != Z_OK) { - return nil; - } - stream.avail_in = (uint)length; - stream.next_in = (Bytef *)bytes; - - int retCode; - NSMutableData *result = [NSMutableData dataWithCapacity:(length / 4)]; - unsigned char output[kChunkSize]; - do { - stream.avail_out = kChunkSize; - stream.next_out = output; - retCode = deflate(&stream, Z_FINISH); - if (retCode != Z_OK && retCode != Z_STREAM_END) { - deflateEnd(&stream); - return nil; - } - unsigned size = kChunkSize - stream.avail_out; - if (size > 0) { - [result appendBytes:output length:size]; - } - } while (retCode == Z_OK); - - deflateEnd(&stream); - - return result; -} - -+ (NSString *)anonymousID -{ - // Grab previously written anonymous ID and, if none have been generated, create and - // persist a new one which will remain associated with this app. - NSString *result = [[self class] retrievePersistedAnonymousID]; - if (!result) { - // Generate a new anonymous ID. Create as a UUID, but then prepend the fairly - // arbitrary 'XZ' to the front so it's easily distinguishable from IDFA's which - // will only contain hex. - result = [NSString stringWithFormat:@"XZ%@", [NSUUID UUID].UUIDString]; - - [self persistAnonymousID:result]; - } - return result; -} - -+ (NSString *)retrievePersistedAnonymousID -{ - NSString *file = [[self class] persistenceFilePath:FBSDK_BASICUTILITY_ANONYMOUSIDFILENAME]; - NSString *content = [[NSString alloc] initWithContentsOfFile:file - encoding:NSASCIIStringEncoding - error:nil]; - NSDictionary *results = [FBSDKBasicUtility objectForJSONString:content error:NULL]; - return results[FBSDK_BASICUTILITY_ANONYMOUSID_KEY]; -} - -+ (NSString *)persistenceFilePath:(NSString *)filename -{ - NSSearchPathDirectory directory = NSLibraryDirectory; - NSArray *paths = NSSearchPathForDirectoriesInDomains(directory, NSUserDomainMask, YES); - NSString *docDirectory = paths[0]; - return [docDirectory stringByAppendingPathComponent:filename]; -} - -+ (void)persistAnonymousID:(NSString *)anonymousID -{ - NSDictionary *data = @{ FBSDK_BASICUTILITY_ANONYMOUSID_KEY : anonymousID }; - NSString *content = [self JSONStringForObject:data error:NULL invalidObjectHandler:NULL]; - - [content writeToFile:[[self class] persistenceFilePath:FBSDK_BASICUTILITY_ANONYMOUSIDFILENAME] - atomically:YES - encoding:NSASCIIStringEncoding - error:nil]; -} - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Internal/FBSDKTypeUtility.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Internal/FBSDKTypeUtility.h deleted file mode 100644 index 6e36ed06d0..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Internal/FBSDKTypeUtility.h +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -NS_SWIFT_NAME(TypeUtility) -@interface FBSDKTypeUtility : NSObject - -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; - -+ (NSArray *)arrayValue:(id)object; -+ (BOOL)boolValue:(id)object; -+ (NSDictionary *)dictionaryValue:(id)object; -+ (NSInteger)integerValue:(id)object; -+ (id)objectValue:(id)object; -+ (NSString *)stringValue:(id)object; -+ (NSTimeInterval)timeIntervalValue:(id)object; -+ (NSUInteger)unsignedIntegerValue:(id)object; -+ (NSURL *)URLValue:(id)object; - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Internal/FBSDKTypeUtility.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Internal/FBSDKTypeUtility.m deleted file mode 100644 index baf61c31f2..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Internal/FBSDKTypeUtility.m +++ /dev/null @@ -1,121 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKTypeUtility.h" - -@implementation FBSDKTypeUtility - -#pragma mark - Class Methods - -+ (NSArray *)arrayValue:(id)object -{ - return (NSArray *)[self _objectValue:object ofClass:[NSArray class]]; -} - -+ (BOOL)boolValue:(id)object -{ - if ([object isKindOfClass:[NSNumber class]]) { - // @0 or @NO returns NO, otherwise YES - return ((NSNumber *)object).boolValue; - } else if ([object isKindOfClass:[NSString class]]) { - // Returns YES on encountering one of "Y", "y", "T", "t", or a digit 1-9, otherwise NO - return ((NSString *)object).boolValue; - } else { - return ([self objectValue:object] != nil); - } -} - -+ (NSDictionary *)dictionaryValue:(id)object -{ - return (NSDictionary *)[self _objectValue:object ofClass:[NSDictionary class]]; -} - -+ (NSInteger)integerValue:(id)object -{ - if ([object isKindOfClass:[NSNumber class]]) { - return ((NSNumber *)object).integerValue; - } else if ([object isKindOfClass:[NSString class]]) { - return ((NSString *)object).integerValue; - } else { - return 0; - } -} - -+ (id)objectValue:(id)object -{ - return ([object isKindOfClass:[NSNull class]] ? nil : object); -} - -+ (NSString *)stringValue:(id)object -{ - if ([object isKindOfClass:[NSString class]]) { - return (NSString *)object; - } else if ([object isKindOfClass:[NSNumber class]]) { - return ((NSNumber *)object).stringValue; - } else if ([object isKindOfClass:[NSURL class]]) { - return ((NSURL *)object).absoluteString; - } else { - return nil; - } -} - -+ (NSTimeInterval)timeIntervalValue:(id)object -{ - if ([object isKindOfClass:[NSNumber class]]) { - return ((NSNumber *)object).doubleValue; - } else if ([object isKindOfClass:[NSString class]]) { - return ((NSString *)object).doubleValue; - } else { - return 0; - } -} - -+ (NSUInteger)unsignedIntegerValue:(id)object -{ - if ([object isKindOfClass:[NSNumber class]]) { - return ((NSNumber *)object).unsignedIntegerValue; - } else { - // there is no direct support for strings containing unsigned values > NSIntegerMax - not worth writing ourselves - // right now, so just cap unsigned values at NSIntegerMax until we have a need for larger - NSInteger integerValue = [self integerValue:object]; - if (integerValue < 0) { - integerValue = 0; - } - return (NSUInteger)integerValue; - } -} - -+ (NSURL *)URLValue:(id)object -{ - if ([object isKindOfClass:[NSURL class]]) { - return (NSURL *)object; - } else if ([object isKindOfClass:[NSString class]]) { - return [NSURL URLWithString:(NSString *)object]; - } else { - return nil; - } -} - -#pragma mark - Helper Methods - -+ (id)_objectValue:(id)object ofClass:(Class)expectedClass -{ - return ([object isKindOfClass:expectedClass] ? object : nil); -} - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Internal/FBSDKURLSession.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Internal/FBSDKURLSession.h deleted file mode 100644 index 34707dc4e1..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Internal/FBSDKURLSession.h +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -#import "FBSDKURLSessionTask.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FBSDKURLSession : NSObject - -@property (atomic, strong, nullable) NSURLSession *session; -@property (nonatomic, weak, nullable) id delegate; -@property (nonatomic, retain, nullable) NSOperationQueue *delegateQueue; - -- (instancetype)initWithDelegate:(id)delegate - delegateQueue:(NSOperationQueue *)delegateQueue; - -- (void)executeURLRequest:(NSURLRequest *)request - completionHandler:(FBSDKURLSessionTaskBlock)handler; - -- (void)updateSessionWithBlock:(dispatch_block_t)block; - -- (void)invalidateAndCancel; - -- (BOOL)valid; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Internal/FBSDKURLSession.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Internal/FBSDKURLSession.m deleted file mode 100644 index cde4f151ab..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Internal/FBSDKURLSession.m +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKURLSession.h" - -#import "FBSDKBasicUtility.h" -#import "FBSDKURLSessionTask.h" - -@implementation FBSDKURLSession - -- (instancetype)initWithDelegate:(id)delegate - delegateQueue:(NSOperationQueue *)queue -{ - if ((self = [super init])) { - self.delegate = delegate; - self.delegateQueue = queue; - } - return self; -} - -- (void)executeURLRequest:(NSURLRequest *)request - completionHandler:(FBSDKURLSessionTaskBlock)handler -{ - if (!self.valid) { - [self updateSessionWithBlock:^{ - FBSDKURLSessionTask *task = [[FBSDKURLSessionTask alloc] initWithRequest:request fromSession:self.session completionHandler:handler]; - [task start]; - }]; - } else { - FBSDKURLSessionTask *task = [[FBSDKURLSessionTask alloc] initWithRequest:request fromSession:self.session completionHandler:handler]; - [task start]; - } -} - -- (void)updateSessionWithBlock:(dispatch_block_t)block -{ - if (!self.valid) { - self.session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] - delegate:_delegate - delegateQueue:_delegateQueue]; - } - block(); -} - -- (void)invalidateAndCancel -{ - [self.session invalidateAndCancel]; - self.session = nil; -} - -- (BOOL)valid -{ - return self.session != nil; -} - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Internal/FBSDKURLSessionTask.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Internal/FBSDKURLSessionTask.h deleted file mode 100644 index 252d8b46c5..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Internal/FBSDKURLSessionTask.h +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -typedef void (^FBSDKURLSessionTaskBlock)(NSData *responseData, - NSURLResponse *response, - NSError *error) -NS_SWIFT_NAME(URLSessionTaskBlock); - -NS_SWIFT_NAME(URLSessionTask) -@interface FBSDKURLSessionTask : NSObject - -@property (nonatomic, strong) NSURLSessionTask *task; -@property (atomic, readonly) NSURLSessionTaskState state; -@property (nonatomic, strong, readonly) NSDate *requestStartDate; -@property (nonatomic, copy) FBSDKURLSessionTaskBlock handler; -@property (nonatomic, assign) uint64_t requestStartTime; -@property (nonatomic, assign) NSUInteger loggerSerialNumber; - -+ (instancetype)new NS_UNAVAILABLE; - -- (instancetype)initWithRequest:(NSURLRequest *)request - fromSession:(NSURLSession *)session - completionHandler:(FBSDKURLSessionTaskBlock)handler; - -- (void)start; -- (void)cancel; - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Internal/FBSDKURLSessionTask.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Internal/FBSDKURLSessionTask.m deleted file mode 100644 index 35f404adb8..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Basics/Internal/FBSDKURLSessionTask.m +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKURLSessionTask.h" - -@implementation FBSDKURLSessionTask - -- (instancetype)init -{ - if ((self = [super init])) { - _requestStartDate = [NSDate date]; - } - return self; -} - -- (instancetype)initWithRequest:(NSURLRequest *)request - fromSession:(NSURLSession *)session - completionHandler:(FBSDKURLSessionTaskBlock)handler -{ - if ((self = [self init])) { - self.requestStartTime = (uint64_t)([self.requestStartDate timeIntervalSince1970] * 1000); - self.task = [session dataTaskWithRequest:request completionHandler:handler]; - } - return self; -} - -- (NSURLSessionTaskState)state -{ - return self.task.state; -} - -#pragma mark - Task State - -- (void)start -{ - [self.task resume]; -} - -- (void)cancel -{ - [self.task cancel]; - self.handler = nil; -} - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKAccessToken.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKAccessToken.h deleted file mode 100644 index 82a9b3daf7..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKAccessToken.h +++ /dev/null @@ -1,274 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -#import "FBSDKCopying.h" - -#ifdef BUCK -#import -#else -#import "FBSDKGraphRequestConnection.h" -#endif - -NS_ASSUME_NONNULL_BEGIN - -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 - -/** - Notification indicating that the `currentAccessToken` has changed. - - the userInfo dictionary of the notification will contain keys - `FBSDKAccessTokenChangeOldKey` and - `FBSDKAccessTokenChangeNewKey`. - */ -FOUNDATION_EXPORT NSNotificationName const FBSDKAccessTokenDidChangeNotification -NS_SWIFT_NAME(AccessTokenDidChange); - -#else - -/** - Notification indicating that the `currentAccessToken` has changed. - - the userInfo dictionary of the notification will contain keys - `FBSDKAccessTokenChangeOldKey` and - `FBSDKAccessTokenChangeNewKey`. - */ -FOUNDATION_EXPORT NSString *const FBSDKAccessTokenDidChangeNotification -NS_SWIFT_NAME(AccessTokenDidChangeNotification); -#endif - -/** - A key in the notification's userInfo that will be set - if and only if the user ID changed between the old and new tokens. - - Token refreshes can occur automatically with the SDK - which do not change the user. If you're only interested in user - changes (such as logging out), you should check for the existence - of this key. The value is a NSNumber with a boolValue. - - On a fresh start of the app where the SDK reads in the cached value - of an access token, this key will also exist since the access token - is moving from a null state (no user) to a non-null state (user). - */ -FOUNDATION_EXPORT NSString *const FBSDKAccessTokenDidChangeUserIDKey -NS_SWIFT_NAME(AccessTokenDidChangeUserIDKey); - -/* - key in notification's userInfo object for getting the old token. - - If there was no old token, the key will not be present. - */ -FOUNDATION_EXPORT NSString *const FBSDKAccessTokenChangeOldKey -NS_SWIFT_NAME(AccessTokenChangeOldKey); - -/* - key in notification's userInfo object for getting the new token. - - If there is no new token, the key will not be present. - */ -FOUNDATION_EXPORT NSString *const FBSDKAccessTokenChangeNewKey -NS_SWIFT_NAME(AccessTokenChangeNewKey); - -/* - A key in the notification's userInfo that will be set - if and only if the token has expired. - */ -FOUNDATION_EXPORT NSString *const FBSDKAccessTokenDidExpireKey -NS_SWIFT_NAME(AccessTokenDidExpireKey); - - -/** - Represents an immutable access token for using Facebook services. - */ -NS_SWIFT_NAME(AccessToken) -@interface FBSDKAccessToken : NSObject - - -/** - The "global" access token that represents the currently logged in user. - - The `currentAccessToken` is a convenient representation of the token of the - current user and is used by other SDK components (like `FBSDKLoginManager`). - */ -@property (class, nonatomic, copy, nullable) FBSDKAccessToken *currentAccessToken; - -/** - Returns YES if currentAccessToken is not nil AND currentAccessToken is not expired - - */ -@property (class, nonatomic, assign, readonly, getter=isCurrentAccessTokenActive) BOOL currentAccessTokenIsActive; - -/** - Returns the app ID. - */ -@property (nonatomic, copy, readonly) NSString *appID; - -/** - Returns the expiration date for data access - */ -@property (nonatomic, copy, readonly) NSDate *dataAccessExpirationDate; - -/** - Returns the known declined permissions. - */ -@property (nonatomic, copy, readonly) NSSet *declinedPermissions -NS_REFINED_FOR_SWIFT; - -/** - Returns the known declined permissions. - */ -@property (nonatomic, copy, readonly) NSSet *expiredPermissions -NS_REFINED_FOR_SWIFT; - -/** - Returns the expiration date. - */ -@property (nonatomic, copy, readonly) NSDate *expirationDate; - -/** - Returns the known granted permissions. - */ -@property (nonatomic, copy, readonly) NSSet *permissions -NS_REFINED_FOR_SWIFT; - -/** - Returns the date the token was last refreshed. -*/ -@property (nonatomic, copy, readonly) NSDate *refreshDate; - -/** - Returns the opaque token string. - */ -@property (nonatomic, copy, readonly) NSString *tokenString; - -/** - Returns the user ID. - */ -@property (nonatomic, copy, readonly) NSString *userID; - -/** - The graph domain where this access token is valid. - */ -@property (nonatomic, copy, readonly) NSString *graphDomain; - -/** - Returns whether the access token is expired by checking its expirationDate property - */ -@property (readonly, assign, nonatomic, getter=isExpired) BOOL expired; - -/** - Returns whether user data access is still active for the given access token - */ -@property (readonly, assign, nonatomic, getter=isDataAccessExpired) BOOL dataAccessExpired; - -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; - -/** - Initializes a new instance. - @param tokenString the opaque token string. - @param permissions the granted permissions. Note this is converted to NSSet and is only - an NSArray for the convenience of literal syntax. - @param declinedPermissions the declined permissions. Note this is converted to NSSet and is only - an NSArray for the convenience of literal syntax. - @param expiredPermissions the expired permissions. Note this is converted to NSSet and is only - an NSArray for the convenience of literal syntax. - @param appID the app ID. - @param userID the user ID. - @param expirationDate the optional expiration date (defaults to distantFuture). - @param refreshDate the optional date the token was last refreshed (defaults to today). - @param dataAccessExpirationDate the date which data access will expire for the given user - (defaults to distantFuture). - - This initializer should only be used for advanced apps that - manage tokens explicitly. Typical login flows only need to use `FBSDKLoginManager` - along with `+currentAccessToken`. - */ -- (instancetype)initWithTokenString:(NSString *)tokenString - permissions:(NSArray *)permissions - declinedPermissions:(NSArray *)declinedPermissions - expiredPermissions:(NSArray *)expiredPermissions - appID:(NSString *)appID - userID:(NSString *)userID - expirationDate:(nullable NSDate *)expirationDate - refreshDate:(nullable NSDate *)refreshDate - dataAccessExpirationDate:(nullable NSDate *)dataAccessExpirationDate -NS_DESIGNATED_INITIALIZER; - -/** - Convenience initializer. - @param tokenString the opaque token string. - @param permissions the granted permissions. Note this is converted to NSSet and is only - an NSArray for the convenience of literal syntax. - @param declinedPermissions the declined permissions. Note this is converted to NSSet and is only - an NSArray for the convenience of literal syntax. - @param expiredPermissions the expired permissions. Note this is converted to NSSet and is only - an NSArray for the convenience of literal syntax. - @param appID the app ID. - @param userID the user ID. - @param expirationDate the optional expiration date (defaults to distantFuture). - @param refreshDate the optional date the token was last refreshed (defaults to today). - @param dataAccessExpirationDate the date which data access will expire for the given user - (defaults to distantFuture). - @param graphDomain the domain this access token can be used in. - - This initializer should only be used for advanced apps that - manage tokens explicitly. Typical login flows only need to use `FBSDKLoginManager` - along with `+currentAccessToken`. - */ -- (instancetype)initWithTokenString:(NSString *)tokenString - permissions:(NSArray *)permissions - declinedPermissions:(NSArray *)declinedPermissions - expiredPermissions:(NSArray *)expiredPermissions - appID:(NSString *)appID - userID:(NSString *)userID - expirationDate:(nullable NSDate *)expirationDate - refreshDate:(nullable NSDate *)refreshDate - dataAccessExpirationDate:(nullable NSDate *)dataAccessExpirationDate - graphDomain:(nullable NSString *)graphDomain; - -/** - Convenience getter to determine if a permission has been granted - @param permission The permission to check. - */ -- (BOOL)hasGranted:(NSString *)permission -NS_SWIFT_NAME(hasGranted(permission:)); - -/** - Compares the receiver to another FBSDKAccessToken - @param token The other token - @return YES if the receiver's values are equal to the other token's values; otherwise NO - */ -- (BOOL)isEqualToAccessToken:(FBSDKAccessToken *)token; - -/** - Refresh the current access token's permission state and extend the token's expiration date, - if possible. - @param completionHandler an optional callback handler that can surface any errors related to permission refreshing. - - On a successful refresh, the currentAccessToken will be updated so you typically only need to - observe the `FBSDKAccessTokenDidChangeNotification` notification. - - If a token is already expired, it cannot be refreshed. - */ -+ (void)refreshCurrentAccessToken:(nullable FBSDKGraphRequestBlock)completionHandler; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKAccessToken.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKAccessToken.m deleted file mode 100644 index f60249c7ea..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKAccessToken.m +++ /dev/null @@ -1,277 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKAccessToken.h" - -#import "FBSDKGraphRequestPiggybackManager.h" -#import "FBSDKInternalUtility.h" -#import "FBSDKMath.h" -#import "FBSDKSettings+Internal.h" - -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 - -NSNotificationName const FBSDKAccessTokenDidChangeNotification = @"com.facebook.sdk.FBSDKAccessTokenData.FBSDKAccessTokenDidChangeNotification"; - -#else - -NSString *const FBSDKAccessTokenDidChangeNotification = @"com.facebook.sdk.FBSDKAccessTokenData.FBSDKAccessTokenDidChangeNotification"; - -#endif - -NSString *const FBSDKAccessTokenDidChangeUserIDKey = @"FBSDKAccessTokenDidChangeUserIDKey"; -NSString *const FBSDKAccessTokenChangeNewKey = @"FBSDKAccessToken"; -NSString *const FBSDKAccessTokenChangeOldKey = @"FBSDKAccessTokenOld"; -NSString *const FBSDKAccessTokenDidExpireKey = @"FBSDKAccessTokenDidExpireKey"; - -static FBSDKAccessToken *g_currentAccessToken; - -#define FBSDK_ACCESSTOKEN_TOKENSTRING_KEY @"tokenString" -#define FBSDK_ACCESSTOKEN_PERMISSIONS_KEY @"permissions" -#define FBSDK_ACCESSTOKEN_DECLINEDPERMISSIONS_KEY @"declinedPermissions" -#define FBSDK_ACCESSTOKEN_EXPIREDPERMISSIONS_KEY @"expiredPermissions" -#define FBSDK_ACCESSTOKEN_APPID_KEY @"appID" -#define FBSDK_ACCESSTOKEN_USERID_KEY @"userID" -#define FBSDK_ACCESSTOKEN_REFRESHDATE_KEY @"refreshDate" -#define FBSDK_ACCESSTOKEN_EXPIRATIONDATE_KEY @"expirationDate" -#define FBSDK_ACCESSTOKEN_DATA_EXPIRATIONDATE_KEY @"dataAccessExpirationDate" -#define FBSDK_ACCESSTOKEN_GRAPH_DOMAIN_KEY @"graphDomain" - -@implementation FBSDKAccessToken - -- (instancetype)initWithTokenString:(NSString *)tokenString - permissions:(NSArray *)permissions - declinedPermissions:(NSArray *)declinedPermissions - expiredPermissions:(NSArray *)expiredPermissions - appID:(NSString *)appID - userID:(NSString *)userID - expirationDate:(NSDate *)expirationDate - refreshDate:(NSDate *)refreshDate - dataAccessExpirationDate:(NSDate *)dataAccessExpirationDate -{ - if ((self = [super init])) { - _tokenString = [tokenString copy]; - _permissions = [NSSet setWithArray:permissions]; - _declinedPermissions = [NSSet setWithArray:declinedPermissions]; - _expiredPermissions = [NSSet setWithArray:expiredPermissions]; - _appID = [appID copy]; - _userID = [userID copy]; - _expirationDate = [expirationDate copy] ?: [NSDate distantFuture]; - _refreshDate = [refreshDate copy] ?: [NSDate date]; - _dataAccessExpirationDate = [dataAccessExpirationDate copy] ?: [NSDate distantFuture]; - } - return self; -} - -- (instancetype)initWithTokenString:(NSString *)tokenString - permissions:(NSArray *)permissions - declinedPermissions:(NSArray *)declinedPermissions - expiredPermissions:(NSArray *)expiredPermissions - appID:(NSString *)appID - userID:(NSString *)userID - expirationDate:(NSDate *)expirationDate - refreshDate:(NSDate *)refreshDate - dataAccessExpirationDate:(NSDate *)dataAccessExpirationDate - graphDomain:(NSString *)graphDomain -{ - FBSDKAccessToken *accessToken = - [self - initWithTokenString:tokenString - permissions:permissions - declinedPermissions:declinedPermissions - expiredPermissions:expiredPermissions - appID:appID - userID:userID - expirationDate:expirationDate - refreshDate:refreshDate - dataAccessExpirationDate:dataAccessExpirationDate]; - - if (accessToken != nil) { - accessToken->_graphDomain = [graphDomain copy]; - } - - return accessToken; -} - -- (BOOL)hasGranted:(NSString *)permission -{ - return [self.permissions containsObject:permission]; - -} - -- (BOOL)isDataAccessExpired -{ - return [self.dataAccessExpirationDate compare:NSDate.date] == NSOrderedAscending; -} - -- (BOOL)isExpired -{ - return [self.expirationDate compare:NSDate.date] == NSOrderedAscending; -} - -+ (FBSDKAccessToken *)currentAccessToken -{ - return g_currentAccessToken; -} - -+ (void)setCurrentAccessToken:(FBSDKAccessToken *)token -{ - if (token != g_currentAccessToken) { - NSMutableDictionary *userInfo = [NSMutableDictionary dictionary]; - [FBSDKBasicUtility dictionary:userInfo setObject:token forKey:FBSDKAccessTokenChangeNewKey]; - [FBSDKBasicUtility dictionary:userInfo setObject:g_currentAccessToken forKey:FBSDKAccessTokenChangeOldKey]; - // We set this flag also when the current Access Token was not valid, since there might be legacy code relying on it - if (![g_currentAccessToken.userID isEqualToString:token.userID] || !self.isCurrentAccessTokenActive) { - userInfo[FBSDKAccessTokenDidChangeUserIDKey] = @YES; - } - - g_currentAccessToken = token; - - // Only need to keep current session in web view for the case when token is current - // When token is abandoned cookies must to be cleaned up immediately - if (token == nil) { - [FBSDKInternalUtility deleteFacebookCookies]; - } - - [FBSDKSettings accessTokenCache].accessToken = token; - [[NSNotificationCenter defaultCenter] postNotificationName:FBSDKAccessTokenDidChangeNotification - object:[self class] - userInfo:userInfo]; - } -} - -+ (BOOL)isCurrentAccessTokenActive -{ - FBSDKAccessToken *currentAccessToken = [self currentAccessToken]; - return currentAccessToken != nil && !currentAccessToken.isExpired; -} - -+ (void)refreshCurrentAccessToken:(FBSDKGraphRequestBlock)completionHandler -{ - if ([FBSDKAccessToken currentAccessToken]) { - FBSDKGraphRequestConnection *connection = [[FBSDKGraphRequestConnection alloc] init]; - [FBSDKGraphRequestPiggybackManager addRefreshPiggyback:connection permissionHandler:completionHandler]; - [connection start]; - } else if (completionHandler) { - completionHandler(nil, nil, [FBSDKError - errorWithCode:FBSDKErrorAccessTokenRequired - message:@"No current access token to refresh"]); - } -} - -#pragma mark - Equality - -- (NSUInteger)hash -{ - NSUInteger subhashes[] = { - self.tokenString.hash, - self.permissions.hash, - self.declinedPermissions.hash, - self.expiredPermissions.hash, - self.appID.hash, - self.userID.hash, - self.refreshDate.hash, - self.expirationDate.hash, - self.dataAccessExpirationDate.hash, - self.graphDomain.hash - }; - return [FBSDKMath hashWithIntegerArray:subhashes count:sizeof(subhashes) / sizeof(subhashes[0])]; -} - -- (BOOL)isEqual:(id)object -{ - if (self == object) { - return YES; - } - if (![object isKindOfClass:[FBSDKAccessToken class]]) { - return NO; - } - return [self isEqualToAccessToken:(FBSDKAccessToken *)object]; -} - -- (BOOL)isEqualToAccessToken:(FBSDKAccessToken *)token -{ - return (token && - [FBSDKInternalUtility object:self.tokenString isEqualToObject:token.tokenString] && - [FBSDKInternalUtility object:self.permissions isEqualToObject:token.permissions] && - [FBSDKInternalUtility object:self.declinedPermissions isEqualToObject:token.declinedPermissions] && - [FBSDKInternalUtility object:self.expiredPermissions isEqualToObject:token.expiredPermissions] && - [FBSDKInternalUtility object:self.appID isEqualToObject:token.appID] && - [FBSDKInternalUtility object:self.userID isEqualToObject:token.userID] && - [FBSDKInternalUtility object:self.refreshDate isEqualToObject:token.refreshDate] && - [FBSDKInternalUtility object:self.expirationDate isEqualToObject:token.expirationDate] && - [FBSDKInternalUtility object:self.dataAccessExpirationDate isEqualToObject:token.dataAccessExpirationDate] && - [FBSDKInternalUtility object:self.graphDomain isEqualToObject:token.graphDomain]); -} - -#pragma mark - NSCopying - -- (id)copyWithZone:(NSZone *)zone -{ - // we're immutable. - return self; -} - -#pragma mark NSCoding - -+ (BOOL)supportsSecureCoding -{ - return YES; -} - -- (instancetype)initWithCoder:(NSCoder *)decoder -{ - NSString *appID = [decoder decodeObjectOfClass:[NSString class] forKey:FBSDK_ACCESSTOKEN_APPID_KEY]; - NSSet *declinedPermissions = [decoder decodeObjectOfClass:[NSSet class] forKey:FBSDK_ACCESSTOKEN_DECLINEDPERMISSIONS_KEY]; - NSSet *expiredPermissions = [decoder decodeObjectOfClass:[NSSet class] forKey:FBSDK_ACCESSTOKEN_EXPIREDPERMISSIONS_KEY]; - NSSet *permissions = [decoder decodeObjectOfClass:[NSSet class] forKey:FBSDK_ACCESSTOKEN_PERMISSIONS_KEY]; - NSString *tokenString = [decoder decodeObjectOfClass:[NSString class] forKey:FBSDK_ACCESSTOKEN_TOKENSTRING_KEY]; - NSString *userID = [decoder decodeObjectOfClass:[NSString class] forKey:FBSDK_ACCESSTOKEN_USERID_KEY]; - NSDate *refreshDate = [decoder decodeObjectOfClass:[NSDate class] forKey:FBSDK_ACCESSTOKEN_REFRESHDATE_KEY]; - NSDate *expirationDate = [decoder decodeObjectOfClass:[NSDate class] forKey:FBSDK_ACCESSTOKEN_EXPIRATIONDATE_KEY]; - NSDate *dataAccessExpirationDate = [decoder decodeObjectOfClass:[NSDate class] forKey:FBSDK_ACCESSTOKEN_DATA_EXPIRATIONDATE_KEY]; - NSString *graphDomain = [decoder decodeObjectOfClass:[NSString class] forKey:FBSDK_ACCESSTOKEN_GRAPH_DOMAIN_KEY]; - - return - [self - initWithTokenString:tokenString - permissions:permissions.allObjects - declinedPermissions:declinedPermissions.allObjects - expiredPermissions:expiredPermissions.allObjects - appID:appID - userID:userID - expirationDate:expirationDate - refreshDate:refreshDate - dataAccessExpirationDate:dataAccessExpirationDate - graphDomain:graphDomain]; -} - -- (void)encodeWithCoder:(NSCoder *)encoder -{ - [encoder encodeObject:self.appID forKey:FBSDK_ACCESSTOKEN_APPID_KEY]; - [encoder encodeObject:self.declinedPermissions forKey:FBSDK_ACCESSTOKEN_DECLINEDPERMISSIONS_KEY]; - [encoder encodeObject:self.expiredPermissions forKey:FBSDK_ACCESSTOKEN_EXPIREDPERMISSIONS_KEY]; - [encoder encodeObject:self.permissions forKey:FBSDK_ACCESSTOKEN_PERMISSIONS_KEY]; - [encoder encodeObject:self.tokenString forKey:FBSDK_ACCESSTOKEN_TOKENSTRING_KEY]; - [encoder encodeObject:self.userID forKey:FBSDK_ACCESSTOKEN_USERID_KEY]; - [encoder encodeObject:self.expirationDate forKey:FBSDK_ACCESSTOKEN_EXPIRATIONDATE_KEY]; - [encoder encodeObject:self.refreshDate forKey:FBSDK_ACCESSTOKEN_REFRESHDATE_KEY]; - [encoder encodeObject:self.dataAccessExpirationDate forKey:FBSDK_ACCESSTOKEN_DATA_EXPIRATIONDATE_KEY]; - [encoder encodeObject:self.graphDomain forKey:FBSDK_ACCESSTOKEN_GRAPH_DOMAIN_KEY]; -} - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKApplicationDelegate.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKApplicationDelegate.h deleted file mode 100644 index f09048014e..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKApplicationDelegate.h +++ /dev/null @@ -1,112 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - - The FBSDKApplicationDelegate is designed to post process the results from Facebook Login - or Facebook Dialogs (or any action that requires switching over to the native Facebook - app or Safari). - - - - The methods in this class are designed to mirror those in UIApplicationDelegate, and you - should call them in the respective methods in your AppDelegate implementation. - */ -NS_SWIFT_NAME(ApplicationDelegate) -@interface FBSDKApplicationDelegate : NSObject - -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; - -/** - Gets the singleton instance. - */ -@property (class, nonatomic, readonly, strong) FBSDKApplicationDelegate *sharedInstance -NS_SWIFT_NAME(shared); - -/** - Call this method from the [UIApplicationDelegate application:openURL:sourceApplication:annotation:] method - of the AppDelegate for your app. It should be invoked for the proper processing of responses during interaction - with the native Facebook app or Safari as part of SSO authorization flow or Facebook dialogs. - - @param application The application as passed to [UIApplicationDelegate application:openURL:sourceApplication:annotation:]. - - @param url The URL as passed to [UIApplicationDelegate application:openURL:sourceApplication:annotation:]. - - @param sourceApplication The sourceApplication as passed to [UIApplicationDelegate application:openURL:sourceApplication:annotation:]. - - @param annotation The annotation as passed to [UIApplicationDelegate application:openURL:sourceApplication:annotation:]. - - @return YES if the url was intended for the Facebook SDK, NO if not. - */ -- (BOOL)application:(UIApplication *)application - openURL:(NSURL *)url - sourceApplication:(nullable NSString *)sourceApplication - annotation:(nullable id)annotation; - -#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_9_0 -/** - Call this method from the [UIApplicationDelegate application:openURL:options:] method - of the AppDelegate for your app. It should be invoked for the proper processing of responses during interaction - with the native Facebook app or Safari as part of SSO authorization flow or Facebook dialogs. - - @param application The application as passed to [UIApplicationDelegate application:openURL:options:]. - - @param url The URL as passed to [UIApplicationDelegate application:openURL:options:]. - - @param options The options dictionary as passed to [UIApplicationDelegate application:openURL:options:]. - - @return YES if the url was intended for the Facebook SDK, NO if not. - */ -- (BOOL)application:(UIApplication *)application - openURL:(NSURL *)url - options:(NSDictionary *)options; -#endif - -/** - Call this method from the [UIApplicationDelegate application:didFinishLaunchingWithOptions:] method - of the AppDelegate for your app. It should be invoked for the proper use of the Facebook SDK. - As part of SDK initialization basic auto logging of app events will occur, this can be -controlled via 'FacebookAutoLogAppEventsEnabled' key in the project info plist file. - - @param application The application as passed to [UIApplicationDelegate application:didFinishLaunchingWithOptions:]. - - @param launchOptions The launchOptions as passed to [UIApplicationDelegate application:didFinishLaunchingWithOptions:]. - - @return YES if the url was intended for the Facebook SDK, NO if not. - */ -- (BOOL)application:(UIApplication *)application -didFinishLaunchingWithOptions:(nullable NSDictionary *)launchOptions; - -/** - Call this method to manually initialize SDK. - As we initialize SDK automatically, this should only be called when auto initialization is disabled, this can be - controlled via 'FacebookAutoInitEnabled' key in the project info plist file. - - @param launchOptions The launchOptions as passed to [UIApplicationDelegate application:didFinishLaunchingWithOptions:]. - Could be nil if you don't call this function from [UIApplicationDelegate application:didFinishLaunchingWithOptions:]. - */ -+ (void)initializeSDK:(nullable NSDictionary *)launchOptions; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKApplicationDelegate.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKApplicationDelegate.m deleted file mode 100644 index 3e00da67dc..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKApplicationDelegate.m +++ /dev/null @@ -1,428 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKApplicationDelegate.h" -#import "FBSDKApplicationDelegate+Internal.h" - -#import - -#import "FBSDKAppEvents+Internal.h" -#import "FBSDKConstants.h" -#import "FBSDKDynamicFrameworkLoader.h" -#import "FBSDKError.h" -#import "FBSDKEventDeactivationManager.h" -#import "FBSDKFeatureManager.h" -#import "FBSDKGateKeeperManager.h" -#import "FBSDKInstrumentManager.h" -#import "FBSDKInternalUtility.h" -#import "FBSDKLogger.h" -#import "FBSDKServerConfiguration.h" -#import "FBSDKServerConfigurationManager.h" -#import "FBSDKSettings+Internal.h" -#import "FBSDKTimeSpentData.h" - -#if !TARGET_OS_TV -#import "FBSDKMeasurementEventListener.h" -#import "FBSDKContainerViewController.h" -#import "FBSDKProfile+Internal.h" -#endif - -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 - -NSNotificationName const FBSDKApplicationDidBecomeActiveNotification = @"com.facebook.sdk.FBSDKApplicationDidBecomeActiveNotification"; - -#else - -NSString *const FBSDKApplicationDidBecomeActiveNotification = @"com.facebook.sdk.FBSDKApplicationDidBecomeActiveNotification"; - -#endif - -static NSString *const FBSDKAppLinkInboundEvent = @"fb_al_inbound"; -static NSString *const FBSDKKitsBitmaskKey = @"com.facebook.sdk.kits.bitmask"; -static BOOL g_isSDKInitialized = NO; -static UIApplicationState _applicationState; - -@implementation FBSDKApplicationDelegate -{ - NSHashTable> *_applicationObservers; - BOOL _isAppLaunched; -} - -#pragma mark - Class Methods - -+ (void)load -{ - if ([FBSDKSettings isAutoInitEnabled]) { - // when the app becomes active by any means, kick off the initialization. - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(initializeWithLaunchData:) - name:UIApplicationDidFinishLaunchingNotification - object:nil]; - } -} - -// Initialize SDK listeners -// Don't call this function in any place else. It should only be called when the class is loaded. -+ (void)initializeWithLaunchData:(NSNotification *)note -{ - [self initializeSDK:note.userInfo]; - // Remove the observer - [[NSNotificationCenter defaultCenter] removeObserver:self - name:UIApplicationDidFinishLaunchingNotification - object:nil]; -} - -+ (void)initializeSDK:(NSDictionary *)launchOptions -{ - if (g_isSDKInitialized) { - // Do nothing if initialized already - return; - } - - g_isSDKInitialized = YES; - - FBSDKApplicationDelegate *delegate = [self sharedInstance]; - - NSNotificationCenter *defaultCenter = [NSNotificationCenter defaultCenter]; - [defaultCenter addObserver:delegate selector:@selector(applicationDidEnterBackground:) name:UIApplicationDidEnterBackgroundNotification object:nil]; - [defaultCenter addObserver:delegate selector:@selector(applicationDidBecomeActive:) name:UIApplicationDidBecomeActiveNotification object:nil]; - - [[FBSDKAppEvents singleton] registerNotifications]; - - [delegate application:[UIApplication sharedApplication] didFinishLaunchingWithOptions:launchOptions]; - - [FBSDKFeatureManager checkFeature:FBSDKFeatureInstrument completionBlock:^(BOOL enabled) { - if (enabled) { - [FBSDKInstrumentManager enable]; - } - }]; - - [FBSDKFeatureManager checkFeature:FBSDKFeatureRestrictiveDataFiltering completionBlock:^(BOOL enabled) { - if (enabled) { - [FBSDKRestrictiveDataFilterManager enable]; - } - }]; - - [FBSDKFeatureManager checkFeature:FBSDKFeatureEventDeactivation completionBlock:^(BOOL enabled) { - if (enabled) { - [FBSDKEventDeactivationManager enable]; - } - }]; - -#if !TARGET_OS_TV - // Register Listener for App Link measurement events - [FBSDKMeasurementEventListener defaultListener]; - [delegate _logIfAutoAppLinkEnabled]; -#endif - // Set the SourceApplication for time spent data. This is not going to update the value if the app has already launched. - [FBSDKTimeSpentData setSourceApplication:launchOptions[UIApplicationLaunchOptionsSourceApplicationKey] - openURL:launchOptions[UIApplicationLaunchOptionsURLKey]]; - // Register on UIApplicationDidEnterBackgroundNotification events to reset source application data when app backgrounds. - [FBSDKTimeSpentData registerAutoResetSourceApplication]; - - [FBSDKInternalUtility validateFacebookReservedURLSchemes]; -} - -+ (FBSDKApplicationDelegate *)sharedInstance -{ - static FBSDKApplicationDelegate *_sharedInstance; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - _sharedInstance = [[self alloc] init]; - }); - return _sharedInstance; -} - -#pragma mark - Object Lifecycle - -- (instancetype)init -{ - if ((self = [super init]) != nil) { - _applicationObservers = [[NSHashTable alloc] init]; - } - return self; -} - -- (void)dealloc -{ - [[NSNotificationCenter defaultCenter] removeObserver:self]; -} - -#pragma mark - UIApplicationDelegate - -#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_9_0 -- (BOOL)application:(UIApplication *)application - openURL:(NSURL *)url - options:(NSDictionary *)options -{ - if (@available(iOS 9.0, *)) { - return [self application:application - openURL:url - sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey] - annotation:options[UIApplicationOpenURLOptionsAnnotationKey]]; - } - - return NO; -} -#endif - -- (BOOL)application:(UIApplication *)application - openURL:(NSURL *)url - sourceApplication:(NSString *)sourceApplication - annotation:(id)annotation -{ - if (sourceApplication != nil && ![sourceApplication isKindOfClass:[NSString class]]) { - @throw [NSException exceptionWithName:NSInvalidArgumentException - reason:@"Expected 'sourceApplication' to be NSString. Please verify you are passing in 'sourceApplication' from your app delegate (not the UIApplication* parameter). If your app delegate implements iOS 9's application:openURL:options:, you should pass in options[UIApplicationOpenURLOptionsSourceApplicationKey]. " - userInfo:nil]; - } - [FBSDKTimeSpentData setSourceApplication:sourceApplication openURL:url]; - - BOOL handled = NO; - NSArray> *observers = [_applicationObservers allObjects]; - for (id observer in observers) { - if ([observer respondsToSelector:@selector(application:openURL:sourceApplication:annotation:)]) { - if ([observer application:application - openURL:url - sourceApplication:sourceApplication - annotation:annotation]) { - handled = YES; - } - } - } - - if (handled) { - return YES; - } - - [self _logIfAppLinkEvent:url]; - - return NO; -} - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions -{ - if ([self isAppLaunched]) { - return NO; - } - - _isAppLaunched = YES; - FBSDKAccessToken *cachedToken = [FBSDKSettings accessTokenCache].accessToken; - [FBSDKAccessToken setCurrentAccessToken:cachedToken]; - // fetch app settings - [FBSDKServerConfigurationManager loadServerConfigurationWithCompletionBlock:NULL]; - - if (FBSDKSettings.isAutoLogAppEventsEnabled) { - [self _logSDKInitialize]; - } -#if !TARGET_OS_TV - FBSDKProfile *cachedProfile = [FBSDKProfile fetchCachedProfile]; - [FBSDKProfile setCurrentProfile:cachedProfile]; -#endif - NSArray> *observers = [_applicationObservers allObjects]; - BOOL handled = NO; - for (id observer in observers) { - if ([observer respondsToSelector:@selector(application:didFinishLaunchingWithOptions:)]) { - if ([observer application:application didFinishLaunchingWithOptions:launchOptions]) { - handled = YES; - } - } - } - - return handled; -} - -- (void)applicationDidEnterBackground:(NSNotification *)notification -{ - _applicationState = UIApplicationStateBackground; - NSArray> *observers = [_applicationObservers allObjects]; - for (id observer in observers) { - if ([observer respondsToSelector:@selector(applicationDidEnterBackground:)]) { - [observer applicationDidEnterBackground:notification.object]; - } - } -} - -- (void)applicationDidBecomeActive:(NSNotification *)notification -{ - _applicationState = UIApplicationStateActive; - // Auto log basic events in case autoLogAppEventsEnabled is set - if (FBSDKSettings.isAutoLogAppEventsEnabled) { - [FBSDKAppEvents activateApp]; - } - - NSArray> *observers = [_applicationObservers copy]; - for (id observer in observers) { - if ([observer respondsToSelector:@selector(applicationDidBecomeActive:)]) { - [observer applicationDidBecomeActive:notification.object]; - } - } -} - -#pragma mark - Internal Methods - -#pragma mark - FBSDKApplicationObserving - -- (void)addObserver:(id)observer -{ - if (![_applicationObservers containsObject:observer]) { - [_applicationObservers addObject:observer]; - } -} - -- (void)removeObserver:(id)observer -{ - if ([_applicationObservers containsObject:observer]) { - [_applicationObservers removeObject:observer]; - } -} - -+ (UIApplicationState)applicationState -{ - return _applicationState; -} - -#pragma mark - Helper Methods - -- (void)_logIfAppLinkEvent:(NSURL *)url -{ - if (!url) { - return; - } - NSDictionary *params = [FBSDKBasicUtility dictionaryWithQueryString:url.query]; - NSString *applinkDataString = params[@"al_applink_data"]; - if (!applinkDataString) { - return; - } - - NSDictionary *applinkData = [FBSDKBasicUtility objectForJSONString:applinkDataString error:NULL]; - if (!applinkData) { - return; - } - - NSString *targetURLString = applinkData[@"target_url"]; - NSURL *targetURL = [targetURLString isKindOfClass:[NSString class]] ? [NSURL URLWithString:targetURLString] : nil; - - NSMutableDictionary *logData = [[NSMutableDictionary alloc] init]; - [FBSDKBasicUtility dictionary:logData setObject:targetURL.absoluteString forKey:@"targetURL"]; - [FBSDKBasicUtility dictionary:logData setObject:targetURL.host forKey:@"targetURLHost"]; - - NSDictionary *refererData = applinkData[@"referer_data"]; - if (refererData) { - [FBSDKBasicUtility dictionary:logData setObject:refererData[@"target_url"] forKey:@"referralTargetURL"]; - [FBSDKBasicUtility dictionary:logData setObject:refererData[@"url"] forKey:@"referralURL"]; - [FBSDKBasicUtility dictionary:logData setObject:refererData[@"app_name"] forKey:@"referralAppName"]; - } - [FBSDKBasicUtility dictionary:logData setObject:url.absoluteString forKey:@"inputURL"]; - [FBSDKBasicUtility dictionary:logData setObject:url.scheme forKey:@"inputURLScheme"]; - - [FBSDKAppEvents logInternalEvent:FBSDKAppLinkInboundEvent - parameters:logData - isImplicitlyLogged:YES]; -} - -- (void)_logSDKInitialize -{ - NSDictionary *metaInfo = [NSDictionary dictionaryWithObjects:@[@"login_lib_included", - @"marketing_lib_included", - @"messenger_lib_included", - @"places_lib_included", - @"share_lib_included", - @"tv_lib_included"] - forKeys:@[@"FBSDKLoginManager", - @"FBSDKAutoLog", - @"FBSDKMessengerButton", - @"FBSDKPlacesManager", - @"FBSDKShareDialog", - @"FBSDKTVInterfaceFactory"]]; - - NSInteger bitmask = 0; - NSInteger bit = 0; - NSMutableDictionary *params = NSMutableDictionary.new; - params[@"core_lib_included"] = @1; - for (NSString *className in metaInfo.allKeys) { - NSString *keyName = [metaInfo objectForKey:className]; - if (objc_lookUpClass([className UTF8String])) { - params[keyName] = @1; - bitmask |= 1 << bit; - } - bit++; - } - - // Tracking if the consuming Application is using Swift - id delegate = [UIApplication sharedApplication].delegate; - NSString const *className = NSStringFromClass([delegate class]); - if ([className componentsSeparatedByString:@"."].count > 1) { - params[@"is_using_swift"] = @YES; - } - - void (^checkViewForSwift)(void) = ^void () - { - // Additional check to see if the consuming application perhaps was - // originally an objc project but is now using Swift - UIViewController *topMostViewController = [FBSDKInternalUtility topMostViewController]; - NSString const *vcClassName = NSStringFromClass([topMostViewController class]); - if ([vcClassName componentsSeparatedByString:@"."].count > 1) { - params[@"is_using_swift"] = @YES; - } - }; - - if ([NSThread isMainThread]) { - checkViewForSwift(); - } else { - dispatch_sync(dispatch_get_main_queue(), ^{ - checkViewForSwift(); - }); - } - - NSInteger existingBitmask = [[NSUserDefaults standardUserDefaults] integerForKey:FBSDKKitsBitmaskKey]; - if (existingBitmask != bitmask) { - [[NSUserDefaults standardUserDefaults] setInteger:bitmask forKey:FBSDKKitsBitmaskKey]; - [FBSDKAppEvents logInternalEvent:@"fb_sdk_initialize" - parameters:params - isImplicitlyLogged:NO]; - } -} - -- (void)_logIfAutoAppLinkEnabled -{ -#if !TARGET_OS_TV - NSNumber *enabled = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"FBSDKAutoAppLinkEnabled"]; - if (enabled.boolValue) { - NSMutableDictionary *params = [[NSMutableDictionary alloc] init]; - if (![FBSDKAppLinkUtility isMatchURLScheme:[NSString stringWithFormat:@"fb%@", [FBSDKSettings appID]]]) { - NSString *warning = @"You haven't set the Auto App Link URL scheme: fb"; - params[@"SchemeWarning"] = warning; - NSLog(@"%@", warning); - } - [FBSDKAppEvents logInternalEvent:@"fb_auto_applink" parameters:params isImplicitlyLogged:YES]; - } -#endif -} - -+ (BOOL)isSDKInitialized -{ - return [FBSDKSettings isAutoInitEnabled] || g_isSDKInitialized; -} - -// Wrapping this makes it mockable and enables testability -- (BOOL)isAppLaunched { - return _isAppLaunched; -} - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKButton.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKButton.h deleted file mode 100644 index bf5f0047ad..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKButton.h +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - A base class for common SDK buttons. - */ -NS_SWIFT_NAME(FBButton) -@interface FBSDKButton : UIButton - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKButton.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKButton.m deleted file mode 100644 index 10b073f60f..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKButton.m +++ /dev/null @@ -1,465 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKButton.h" -#import "FBSDKButton+Subclass.h" - -#import "FBSDKAccessToken.h" -#import "FBSDKAppEvents+Internal.h" -#import "FBSDKAppEvents.h" -#import "FBSDKApplicationDelegate+Internal.h" -#import "FBSDKLogo.h" -#import "FBSDKUIUtility.h" -#import "FBSDKViewImpressionTracker.h" - -#define HEIGHT_TO_FONT_SIZE 0.47 -#define HEIGHT_TO_MARGIN 0.27 -#define HEIGHT_TO_PADDING 0.23 -#define HEIGHT_TO_TEXT_PADDING_CORRECTION 0.08 - -@implementation FBSDKButton -{ - BOOL _skipIntrinsicContentSizing; - BOOL _isExplicitlyDisabled; -} - -#pragma mark - Object Lifecycle - -- (instancetype)initWithFrame:(CGRect)frame -{ - if ((self = [super initWithFrame:frame])) { - _skipIntrinsicContentSizing = YES; - [self configureButton]; - _skipIntrinsicContentSizing = NO; - } - return self; -} - -- (void)awakeFromNib -{ - [super awakeFromNib]; - _skipIntrinsicContentSizing = YES; - [self configureButton]; - _skipIntrinsicContentSizing = NO; -} - -- (void)dealloc -{ - [[NSNotificationCenter defaultCenter] removeObserver:self]; -} - -#pragma mark - Properties - -- (void)setEnabled:(BOOL)enabled -{ - _isExplicitlyDisabled = !enabled; - [self checkImplicitlyDisabled]; -} - -#pragma mark - Layout - -- (CGRect)imageRectForContentRect:(CGRect)contentRect -{ - if (self.hidden || CGRectIsEmpty(self.bounds)) { - return CGRectZero; - } - CGRect imageRect = UIEdgeInsetsInsetRect(contentRect, self.imageEdgeInsets); - CGFloat margin = [self _marginForHeight:[self _heightForContentRect:contentRect]]; - imageRect = CGRectInset(imageRect, margin, margin); - imageRect.size.width = CGRectGetHeight(imageRect); - return imageRect; -} - -- (CGSize)intrinsicContentSize -{ - if (_skipIntrinsicContentSizing) { - return CGSizeZero; - } - _skipIntrinsicContentSizing = YES; - CGSize size = [self sizeThatFits:CGSizeMake(CGFLOAT_MAX, CGFLOAT_MAX)]; - _skipIntrinsicContentSizing = NO; - return size; -} - -- (void)layoutSubviews -{ - // automatic impression tracking if the button conforms to FBSDKButtonImpressionTracking - if ([self conformsToProtocol:@protocol(FBSDKButtonImpressionTracking)]) { - NSString *eventName = ((id)self).impressionTrackingEventName; - NSString *identifier = ((id)self).impressionTrackingIdentifier; - NSDictionary *parameters = ((id)self).analyticsParameters; - if (eventName && identifier) { - FBSDKViewImpressionTracker *impressionTracker = [FBSDKViewImpressionTracker impressionTrackerWithEventName:eventName]; - [impressionTracker logImpressionWithIdentifier:identifier parameters:parameters]; - } - } - [super layoutSubviews]; -} - -- (CGSize)sizeThatFits:(CGSize)size -{ - if (self.hidden) { - return CGSizeZero; - } - CGSize normalSize = [self sizeThatFits:size title:[self titleForState:UIControlStateNormal]]; - CGSize selectedSize = [self sizeThatFits:size title:[self titleForState:UIControlStateSelected]]; - return CGSizeMake(MAX(normalSize.width, selectedSize.width), MAX(normalSize.height, selectedSize.height)); -} - -- (void)sizeToFit -{ - CGRect bounds = self.bounds; - bounds.size = [self sizeThatFits:CGSizeMake(CGFLOAT_MAX, CGFLOAT_MAX)]; - self.bounds = bounds; -} - -- (CGRect)titleRectForContentRect:(CGRect)contentRect -{ - if (self.hidden || CGRectIsEmpty(self.bounds)) { - return CGRectZero; - } - CGRect imageRect = [self imageRectForContentRect:contentRect]; - CGFloat height = [self _heightForContentRect:contentRect]; - CGFloat padding = [self _paddingForHeight:height]; - CGFloat titleX = CGRectGetMaxX(imageRect) + padding; - CGRect titleRect = CGRectMake(titleX, 0.0, CGRectGetWidth(contentRect) - titleX, CGRectGetHeight(contentRect)); - - UIEdgeInsets titleEdgeInsets = UIEdgeInsetsZero; - if (!self.layer.needsLayout) { - UILabel *titleLabel = self.titleLabel; - if (titleLabel.textAlignment == NSTextAlignmentCenter) { - // if the text is centered, we need to adjust the frame for the titleLabel based on the size of the text in order - // to keep the text centered in the button without adding extra blank space to the right when unnecessary - // 1. the text fits centered within the button without colliding with the image (imagePaddingWidth) - // 2. the text would run into the image, so adjust the insets to effectively left align it (textPaddingWidth) - CGSize titleSize = FBSDKTextSize(titleLabel.text, - titleLabel.font, - titleRect.size, - titleLabel.lineBreakMode); - CGFloat titlePaddingWidth = (CGRectGetWidth(titleRect) - titleSize.width) / 2; - CGFloat imagePaddingWidth = titleX / 2; - CGFloat inset = MIN(titlePaddingWidth, imagePaddingWidth); - titleEdgeInsets.left -= inset; - titleEdgeInsets.right += inset; - } - } - return UIEdgeInsetsInsetRect(titleRect, titleEdgeInsets); -} - -#pragma mark - Subclass Methods - -- (void)logTapEventWithEventName:(NSString *)eventName parameters:(NSDictionary *)parameters -{ - [FBSDKAppEvents logInternalEvent:eventName - parameters:parameters - isImplicitlyLogged:YES - accessToken:[FBSDKAccessToken currentAccessToken]]; -} - -- (void)checkImplicitlyDisabled -{ - BOOL enabled = !_isExplicitlyDisabled && !self.implicitlyDisabled; - BOOL currentEnabled = self.enabled; - super.enabled = enabled; - if (currentEnabled != enabled) { - [self invalidateIntrinsicContentSize]; - [self setNeedsLayout]; - } -} - -- (void)configureButton -{ - [self configureWithIcon:[self defaultIcon] - title:nil - backgroundColor:[self defaultBackgroundColor] - highlightedColor:[self defaultHighlightedColor]]; -} - -- (void)configureWithIcon:(FBSDKIcon *)icon - title:(NSString *)title - backgroundColor:(UIColor *)backgroundColor - highlightedColor:(UIColor *)highlightedColor -{ - [self _configureWithIcon:icon - title:title - backgroundColor:backgroundColor - highlightedColor:highlightedColor - selectedTitle:nil - selectedIcon:nil - selectedColor:nil - selectedHighlightedColor:nil]; -} - -- (void)configureWithIcon:(FBSDKIcon *)icon - title:(NSString *)title - backgroundColor:(UIColor *)backgroundColor - highlightedColor:(UIColor *)highlightedColor - selectedTitle:(NSString *)selectedTitle - selectedIcon:(FBSDKIcon *)selectedIcon - selectedColor:(UIColor *)selectedColor - selectedHighlightedColor:(UIColor *)selectedHighlightedColor -{ - [self _configureWithIcon:icon - title:title - backgroundColor:backgroundColor - highlightedColor:highlightedColor - selectedTitle:selectedTitle - selectedIcon:selectedIcon - selectedColor:selectedColor - selectedHighlightedColor:selectedHighlightedColor]; -} - -- (UIColor *)defaultBackgroundColor -{ - return [UIColor colorWithRed:24.0/255.0 green:119.0/255.0 blue:242.0/255.0 alpha:1.0]; -} - -- (UIColor *)defaultDisabledColor -{ - return [UIColor colorWithRed:189.0/255.0 green:193.0/255.0 blue:201.0/255.0 alpha:1.0]; -} - -- (UIFont *)defaultFont -{ - return [UIFont systemFontOfSize:14]; -} - -- (UIColor *)defaultHighlightedColor -{ - return [UIColor colorWithRed:21.0/255.0 green:105.0/255.0 blue:214.0/255.0 alpha:1.0]; -} - -- (FBSDKIcon *)defaultIcon -{ - return [[FBSDKLogo alloc] init]; -} - -- (UIColor *)defaultSelectedColor -{ - return [self defaultBackgroundColor]; -} - -- (UIColor *)highlightedContentColor -{ - return [UIColor colorWithRed:218.0/255.0 green:221.0/255.0 blue:226.0/255.0 alpha:1.0]; -} - -- (BOOL)isImplicitlyDisabled -{ - return NO; -} - -- (CGSize)sizeThatFits:(CGSize)size title:(NSString *)title -{ - UIFont *font = self.titleLabel.font; - CGFloat height = [self _heightForFont:font]; - - UIEdgeInsets contentEdgeInsets = self.contentEdgeInsets; - - CGSize constrainedContentSize = FBSDKEdgeInsetsInsetSize(size, contentEdgeInsets); - - CGSize titleSize = FBSDKTextSize(title, font, constrainedContentSize, self.titleLabel.lineBreakMode); - - CGFloat padding = [self _paddingForHeight:height]; - CGFloat textPaddingCorrection = [self _textPaddingCorrectionForHeight:height]; - CGSize contentSize = CGSizeMake(height + padding + titleSize.width - textPaddingCorrection, height); - return FBSDKEdgeInsetsOutsetSize(contentSize, contentEdgeInsets); -} - -#pragma mark - Helper Methods - -- (void)_applicationDidBecomeActiveNotification:(NSNotification *)notification -{ - [self checkImplicitlyDisabled]; -} - -- (UIImage *)_backgroundImageWithColor:(UIColor *)color cornerRadius:(CGFloat)cornerRadius scale:(CGFloat)scale -{ - CGFloat size = 1.0 + 2 * cornerRadius; - UIGraphicsBeginImageContextWithOptions(CGSizeMake(size, size), NO, scale); - CGContextRef context = UIGraphicsGetCurrentContext(); - CGContextSetFillColorWithColor(context, color.CGColor); - CGMutablePathRef path = CGPathCreateMutable(); - CGPathMoveToPoint(path, NULL, cornerRadius + 1.0, 0.0); - CGPathAddArcToPoint(path, NULL, size, 0.0, size, cornerRadius, cornerRadius); - CGPathAddLineToPoint(path, NULL, size, cornerRadius + 1.0); - CGPathAddArcToPoint(path, NULL, size, size, cornerRadius + 1.0, size, cornerRadius); - CGPathAddLineToPoint(path, NULL, cornerRadius, size); - CGPathAddArcToPoint(path, NULL, 0.0, size, 0.0, cornerRadius + 1.0, cornerRadius); - CGPathAddLineToPoint(path, NULL, 0.0, cornerRadius); - CGPathAddArcToPoint(path, NULL, 0.0, 0.0, cornerRadius, 0.0, cornerRadius); - CGPathCloseSubpath(path); - CGContextAddPath(context, path); - CGPathRelease(path); - CGContextFillPath(context); - UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); -#if TARGET_OS_TV - return [image resizableImageWithCapInsets:UIEdgeInsetsMake(cornerRadius, cornerRadius, cornerRadius, cornerRadius) - resizingMode:UIImageResizingModeStretch]; -#else - return [image stretchableImageWithLeftCapWidth:cornerRadius topCapHeight:cornerRadius]; -#endif -} - -- (void)_configureWithIcon:(FBSDKIcon *)icon - title:(NSString *)title - backgroundColor:(UIColor *)backgroundColor - highlightedColor:(UIColor *)highlightedColor - selectedTitle:(NSString *)selectedTitle - selectedIcon:(FBSDKIcon *)selectedIcon - selectedColor:(UIColor *)selectedColor - selectedHighlightedColor:(UIColor *)selectedHighlightedColor -{ - [self checkImplicitlyDisabled]; - - if (!icon) { - icon = [self defaultIcon]; - } - if (!selectedIcon) { - selectedIcon = [self defaultIcon]; - } - if (!backgroundColor) { - backgroundColor = [self defaultBackgroundColor]; - } - if (!highlightedColor) { - highlightedColor = [self defaultHighlightedColor]; - } - if (!selectedColor) { - selectedColor = [self defaultSelectedColor]; - } - if (!selectedHighlightedColor) { - selectedHighlightedColor = highlightedColor; - } - - self.adjustsImageWhenDisabled = NO; - self.adjustsImageWhenHighlighted = NO; - self.contentHorizontalAlignment = UIControlContentHorizontalAlignmentFill; - self.contentVerticalAlignment = UIControlContentVerticalAlignmentFill; - self.tintColor = [UIColor whiteColor]; - - BOOL forceSizeToFit = CGRectIsEmpty(self.bounds); - - CGFloat scale = [UIScreen mainScreen].scale; - UIImage *backgroundImage; - - backgroundImage = [self _backgroundImageWithColor:backgroundColor cornerRadius:3.0 scale:scale]; - [self setBackgroundImage:backgroundImage forState:UIControlStateNormal]; -#if TARGET_OS_TV - [self setBackgroundImage:backgroundImage forState:UIControlStateFocused]; -#endif - - backgroundImage = [self _backgroundImageWithColor:highlightedColor cornerRadius:3.0 scale:scale]; - [self setBackgroundImage:backgroundImage forState:UIControlStateHighlighted]; - - backgroundImage = [self _backgroundImageWithColor:[self defaultDisabledColor] cornerRadius:3.0 scale:scale]; - [self setBackgroundImage:backgroundImage forState:UIControlStateDisabled]; - - if (selectedColor) { - backgroundImage = [self _backgroundImageWithColor:selectedColor cornerRadius:3.0 scale:scale]; - [self setBackgroundImage:backgroundImage forState:UIControlStateSelected]; - } - - if (selectedHighlightedColor) { - backgroundImage = [self _backgroundImageWithColor:selectedHighlightedColor cornerRadius:3.0 scale:scale]; - [self setBackgroundImage:backgroundImage forState:UIControlStateSelected | UIControlStateHighlighted]; -#if TARGET_OS_TV - [self setBackgroundImage:backgroundImage forState:UIControlStateSelected | UIControlStateFocused]; -#endif - } - - [self setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; - [self setTitleColor:[self highlightedContentColor] forState: UIControlStateHighlighted | UIControlStateSelected]; - - [self setTitle:title forState:UIControlStateNormal]; -#if TARGET_OS_TV - [self setTitle:title forState:UIControlStateFocused]; -#endif - if (selectedTitle) { - [self setTitle:selectedTitle forState:UIControlStateSelected]; - [self setTitle:selectedTitle forState:UIControlStateSelected | UIControlStateHighlighted]; -#if TARGET_OS_TV - [self setTitle:selectedTitle forState:UIControlStateSelected | UIControlStateFocused]; -#endif - } - - UILabel *titleLabel = self.titleLabel; - titleLabel.lineBreakMode = NSLineBreakByClipping; - UIFont *font = [self defaultFont]; - titleLabel.font = font; - - CGSize imageSize = CGSizeMake(font.pointSize, font.pointSize); - UIImage *image = [icon imageWithSize:imageSize]; - image = [image resizableImageWithCapInsets:UIEdgeInsetsZero resizingMode:UIImageResizingModeStretch]; - [self setImage:image forState:UIControlStateNormal]; -#if TARGET_OS_TV - [self setImage:image forState:UIControlStateFocused]; -#endif - - if (selectedIcon) { - UIImage *selectedImage = [selectedIcon imageWithSize:imageSize]; - selectedImage = [selectedImage resizableImageWithCapInsets:UIEdgeInsetsZero - resizingMode:UIImageResizingModeStretch]; - [self setImage:selectedImage forState:UIControlStateSelected]; - [self setImage:selectedImage forState:UIControlStateSelected | UIControlStateHighlighted]; -#if TARGET_OS_TV - [self setImage:selectedImage forState:UIControlStateSelected | UIControlStateFocused]; -#endif - } - - if (forceSizeToFit) { - [self sizeToFit]; - } - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(_applicationDidBecomeActiveNotification:) - name:FBSDKApplicationDidBecomeActiveNotification - object:[FBSDKApplicationDelegate sharedInstance]]; -} - -- (CGFloat)_fontSizeForHeight:(CGFloat)height -{ - return floorf(height * HEIGHT_TO_FONT_SIZE); -} - -- (CGFloat)_heightForContentRect:(CGRect)contentRect -{ - UIEdgeInsets contentEdgeInsets = self.contentEdgeInsets; - return contentEdgeInsets.top + CGRectGetHeight(contentRect) + contentEdgeInsets.bottom; -} - -- (CGFloat)_heightForFont:(UIFont *)font -{ - return floorf(font.pointSize / (1 - 2 * HEIGHT_TO_MARGIN)); -} - -- (CGFloat)_marginForHeight:(CGFloat)height -{ - return floorf(height * HEIGHT_TO_MARGIN); -} - -- (CGFloat)_paddingForHeight:(CGFloat)height -{ - return roundf(height * HEIGHT_TO_PADDING) - [self _textPaddingCorrectionForHeight:height]; -} - -- (CGFloat)_textPaddingCorrectionForHeight:(CGFloat)height -{ - return floorf(height * HEIGHT_TO_TEXT_PADDING_CORRECTION); -} - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKConstants.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKConstants.h deleted file mode 100644 index fbed2667bf..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKConstants.h +++ /dev/null @@ -1,375 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -NS_ASSUME_NONNULL_BEGIN - -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 - -/** - The error domain for all errors from FBSDKCoreKit. - - Error codes from the SDK in the range 0-99 are reserved for this domain. - */ -FOUNDATION_EXPORT NSErrorDomain const FBSDKErrorDomain -NS_SWIFT_NAME(ErrorDomain); - -#else - -/** - The error domain for all errors from FBSDKCoreKit. - - Error codes from the SDK in the range 0-99 are reserved for this domain. - */ -FOUNDATION_EXPORT NSString *const FBSDKErrorDomain -NS_SWIFT_NAME(ErrorDomain); - -#endif - -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_11_0 - -/* - @methodgroup error userInfo keys - */ - -/** - The userInfo key for the invalid collection for errors with FBSDKErrorInvalidArgument. - - If the invalid argument is a collection, the collection can be found with this key and the individual - invalid item can be found with FBSDKErrorArgumentValueKey. - */ -FOUNDATION_EXPORT NSErrorUserInfoKey const FBSDKErrorArgumentCollectionKey -NS_SWIFT_NAME(ErrorArgumentCollectionKey); - -/** - The userInfo key for the invalid argument name for errors with FBSDKErrorInvalidArgument. - */ -FOUNDATION_EXPORT NSErrorUserInfoKey const FBSDKErrorArgumentNameKey -NS_SWIFT_NAME(ErrorArgumentNameKey); - -/** - The userInfo key for the invalid argument value for errors with FBSDKErrorInvalidArgument. - */ -FOUNDATION_EXPORT NSErrorUserInfoKey const FBSDKErrorArgumentValueKey -NS_SWIFT_NAME(ErrorArgumentValueKey); - -/** - The userInfo key for the message for developers in NSErrors that originate from the SDK. - - The developer message will not be localized and is not intended to be presented within the app. - */ -FOUNDATION_EXPORT NSErrorUserInfoKey const FBSDKErrorDeveloperMessageKey -NS_SWIFT_NAME(ErrorDeveloperMessageKey); - -/** - The userInfo key describing a localized description that can be presented to the user. - */ -FOUNDATION_EXPORT NSErrorUserInfoKey const FBSDKErrorLocalizedDescriptionKey -NS_SWIFT_NAME(ErrorLocalizedDescriptionKey); - -/** - The userInfo key describing a localized title that can be presented to the user, used with `FBSDKLocalizedErrorDescriptionKey`. - */ -FOUNDATION_EXPORT NSErrorUserInfoKey const FBSDKErrorLocalizedTitleKey -NS_SWIFT_NAME(ErrorLocalizedTitleKey); - -/* - @methodgroup FBSDKGraphRequest error userInfo keys - */ - -/** - The userInfo key describing the error category, for error recovery purposes. - - See `FBSDKGraphErrorRecoveryProcessor` and `[FBSDKGraphRequest disableErrorRecovery]`. - */ -FOUNDATION_EXPORT NSErrorUserInfoKey const FBSDKGraphRequestErrorKey -NS_SWIFT_NAME(GraphRequestErrorKey); - -/* - The userInfo key for the Graph API error code. - */ -FOUNDATION_EXPORT NSErrorUserInfoKey const FBSDKGraphRequestErrorGraphErrorCodeKey -NS_SWIFT_NAME(GraphRequestErrorGraphErrorCodeKey); - -/* - The userInfo key for the Graph API error subcode. - */ -FOUNDATION_EXPORT NSErrorUserInfoKey const FBSDKGraphRequestErrorGraphErrorSubcodeKey -NS_SWIFT_NAME(GraphRequestErrorGraphErrorSubcodeKey); - -/* - The userInfo key for the HTTP status code. - */ -FOUNDATION_EXPORT NSErrorUserInfoKey const FBSDKGraphRequestErrorHTTPStatusCodeKey -NS_SWIFT_NAME(GraphRequestErrorHTTPStatusCodeKey); - -/* - The userInfo key for the raw JSON response. - */ -FOUNDATION_EXPORT NSErrorUserInfoKey const FBSDKGraphRequestErrorParsedJSONResponseKey -NS_SWIFT_NAME(GraphRequestErrorParsedJSONResponseKey); - -#else - -/* - @methodgroup error userInfo keys - */ - -/** - The userInfo key for the invalid collection for errors with FBSDKErrorInvalidArgument. - - If the invalid argument is a collection, the collection can be found with this key and the individual - invalid item can be found with FBSDKErrorArgumentValueKey. - */ -FOUNDATION_EXPORT NSString *const FBSDKErrorArgumentCollectionKey -NS_SWIFT_NAME(ErrorArgumentCollectionKey); - -/** - The userInfo key for the invalid argument name for errors with FBSDKErrorInvalidArgument. - */ -FOUNDATION_EXPORT NSString *const FBSDKErrorArgumentNameKey -NS_SWIFT_NAME(ErrorArgumentNameKey); - -/** - The userInfo key for the invalid argument value for errors with FBSDKErrorInvalidArgument. - */ -FOUNDATION_EXPORT NSString *const FBSDKErrorArgumentValueKey -NS_SWIFT_NAME(ErrorArgumentValueKey); - -/** - The userInfo key for the message for developers in NSErrors that originate from the SDK. - - The developer message will not be localized and is not intended to be presented within the app. - */ -FOUNDATION_EXPORT NSString *const FBSDKErrorDeveloperMessageKey -NS_SWIFT_NAME(ErrorDeveloperMessageKey); - -/** - The userInfo key describing a localized description that can be presented to the user. - */ -FOUNDATION_EXPORT NSString *const FBSDKErrorLocalizedDescriptionKey -NS_SWIFT_NAME(ErrorLocalizedDescriptionKey); - -/** - The userInfo key describing a localized title that can be presented to the user, used with `FBSDKLocalizedErrorDescriptionKey`. - */ -FOUNDATION_EXPORT NSString *const FBSDKErrorLocalizedTitleKey -NS_SWIFT_NAME(ErrorLocalizedTitleKey); - -/* - @methodgroup FBSDKGraphRequest error userInfo keys - */ - -/** - The userInfo key describing the error category, for error recovery purposes. - - See `FBSDKGraphErrorRecoveryProcessor` and `[FBSDKGraphRequest disableErrorRecovery]`. - */ -FOUNDATION_EXPORT NSString *const FBSDKGraphRequestErrorKey -NS_SWIFT_NAME(GraphRequestErrorKey); - -/* - The userInfo key for the Graph API error code. - */ -FOUNDATION_EXPORT NSString *const FBSDKGraphRequestErrorGraphErrorCodeKey -NS_SWIFT_NAME(GraphRequestErrorGraphErrorCodeKey); - -/* - The userInfo key for the Graph API error subcode. - */ -FOUNDATION_EXPORT NSString *const FBSDKGraphRequestErrorGraphErrorSubcodeKey -NS_SWIFT_NAME(GraphRequestErrorGraphErrorSubcodeKey); - -/* - The userInfo key for the HTTP status code. - */ -FOUNDATION_EXPORT NSString *const FBSDKGraphRequestErrorHTTPStatusCodeKey -NS_SWIFT_NAME(GraphRequestErrorHTTPStatusCodeKey); - -/* - The userInfo key for the raw JSON response. - */ -FOUNDATION_EXPORT NSString *const FBSDKGraphRequestErrorParsedJSONResponseKey -NS_SWIFT_NAME(GraphRequestErrorParsedJSONResponseKey); - -#endif - -/* - @methodgroup Common Code Block typedefs - */ - -/** - Success Block - */ -typedef void (^FBSDKCodeBlock)(void) -NS_SWIFT_NAME(CodeBlock); - -/** - Error Block - */ -typedef void (^FBSDKErrorBlock)(NSError *_Nullable error) -NS_SWIFT_NAME(ErrorBlock); - -/** - Success Block - */ -typedef void (^FBSDKSuccessBlock)(BOOL success, NSError *_Nullable error) -NS_SWIFT_NAME(SuccessBlock); - -/* - @methodgroup Enums - */ - -#ifndef NS_ERROR_ENUM -#define NS_ERROR_ENUM(_domain, _name) \ -enum _name: NSInteger _name; \ -enum __attribute__((ns_error_domain(_domain))) _name: NSInteger -#endif - -/** - FBSDKCoreError - Error codes for FBSDKErrorDomain. - */ -typedef NS_ERROR_ENUM(FBSDKErrorDomain, FBSDKCoreError) -{ - /** - Reserved. - */ - FBSDKErrorReserved = 0, - - /** - The error code for errors from invalid encryption on incoming encryption URLs. - */ - FBSDKErrorEncryption, - - /** - The error code for errors from invalid arguments to SDK methods. - */ - FBSDKErrorInvalidArgument, - - /** - The error code for unknown errors. - */ - FBSDKErrorUnknown, - - /** - A request failed due to a network error. Use NSUnderlyingErrorKey to retrieve - the error object from the NSURLSession for more information. - */ - FBSDKErrorNetwork, - - /** - The error code for errors encountered during an App Events flush. - */ - FBSDKErrorAppEventsFlush, - - /** - An endpoint that returns a binary response was used with FBSDKGraphRequestConnection. - - Endpoints that return image/jpg, etc. should be accessed using NSURLRequest - */ - FBSDKErrorGraphRequestNonTextMimeTypeReturned, - - /** - The operation failed because the server returned an unexpected response. - - You can get this error if you are not using the most recent SDK, or you are accessing a version of the - Graph API incompatible with the current SDK. - */ - FBSDKErrorGraphRequestProtocolMismatch, - - /** - The Graph API returned an error. - - See below for useful userInfo keys (beginning with FBSDKGraphRequestError*) - */ - FBSDKErrorGraphRequestGraphAPI, - - /** - The specified dialog configuration is not available. - - This error may signify that the configuration for the dialogs has not yet been downloaded from the server - or that the dialog is unavailable. Subsequent attempts to use the dialog may succeed as the configuration is loaded. - */ - FBSDKErrorDialogUnavailable, - - /** - Indicates an operation failed because a required access token was not found. - */ - FBSDKErrorAccessTokenRequired, - - /** - Indicates an app switch (typically for a dialog) failed because the destination app is out of date. - */ - FBSDKErrorAppVersionUnsupported, - - /** - Indicates an app switch to the browser (typically for a dialog) failed. - */ - FBSDKErrorBrowserUnavailable, - - /** - Indicates that a bridge api interaction was interrupted. - */ - FBSDKErrorBridgeAPIInterruption, -} NS_SWIFT_NAME(CoreError); - -/** - FBSDKGraphRequestError - Describes the category of Facebook error. See `FBSDKGraphRequestErrorKey`. - */ -typedef NS_ENUM(NSUInteger, FBSDKGraphRequestError) -{ - /** The default error category that is not known to be recoverable. Check `FBSDKLocalizedErrorDescriptionKey` for a user facing message. */ - FBSDKGraphRequestErrorOther = 0, - /** Indicates the error is temporary (such as server throttling). While a recoveryAttempter will be provided with the error instance, the attempt is guaranteed to succeed so you can simply retry the operation if you do not want to present an alert. */ - FBSDKGraphRequestErrorTransient = 1, - /** Indicates the error can be recovered (such as requiring a login). A recoveryAttempter will be provided with the error instance that can take UI action. */ - FBSDKGraphRequestErrorRecoverable = 2 -} NS_SWIFT_NAME(GraphRequestError); - -/** - a formal protocol very similar to the informal protocol NSErrorRecoveryAttempting - */ -NS_SWIFT_UNAVAILABLE("") -@protocol FBSDKErrorRecoveryAttempting - -/** - attempt the recovery - @param error the error - @param recoveryOptionIndex the selected option index - @param delegate the delegate - @param didRecoverSelector the callback selector, see discussion. - @param contextInfo context info to pass back to callback selector, see discussion. - - - Given that an error alert has been presented document-modally to the user, and the user has chosen one of the error's recovery options, attempt recovery from the error, and send the selected message to the specified delegate. The option index is an index into the error's array of localized recovery options. The method selected by didRecoverSelector must have the same signature as: - - - (void)didPresentErrorWithRecovery:(BOOL)didRecover contextInfo:(void *)contextInfo; - - The value passed for didRecover must be YES if error recovery was completely successful, NO otherwise. - */ -- (void)attemptRecoveryFromError:(NSError *)error - optionIndex:(NSUInteger)recoveryOptionIndex - delegate:(nullable id)delegate - didRecoverSelector:(SEL)didRecoverSelector - contextInfo:(nullable void *)contextInfo; -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKConstants.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKConstants.m deleted file mode 100644 index 756a122d7c..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKConstants.m +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKConstants.h" - -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 - -NSErrorDomain const FBSDKErrorDomain = @"com.facebook.sdk.core"; - -#else - -NSString *const FBSDKErrorDomain = @"com.facebook.sdk.core"; - -#endif - - -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 - -NSErrorUserInfoKey const FBSDKErrorArgumentCollectionKey = @"com.facebook.sdk:FBSDKErrorArgumentCollectionKey"; -NSErrorUserInfoKey const FBSDKErrorArgumentNameKey = @"com.facebook.sdk:FBSDKErrorArgumentNameKey"; -NSErrorUserInfoKey const FBSDKErrorArgumentValueKey = @"com.facebook.sdk:FBSDKErrorArgumentValueKey"; -NSErrorUserInfoKey const FBSDKErrorDeveloperMessageKey = @"com.facebook.sdk:FBSDKErrorDeveloperMessageKey"; -NSErrorUserInfoKey const FBSDKErrorLocalizedDescriptionKey = @"com.facebook.sdk:FBSDKErrorLocalizedDescriptionKey"; -NSErrorUserInfoKey const FBSDKErrorLocalizedTitleKey = @"com.facebook.sdk:FBSDKErrorLocalizedErrorTitleKey"; - -NSErrorUserInfoKey const FBSDKGraphRequestErrorKey = @"com.facebook.sdk:FBSDKGraphRequestErrorKey"; -NSErrorUserInfoKey const FBSDKGraphRequestErrorCategoryKey = @"com.facebook.sdk:FBSDKGraphRequestErrorCategoryKey"; -NSErrorUserInfoKey const FBSDKGraphRequestErrorGraphErrorCodeKey = @"com.facebook.sdk:FBSDKGraphRequestErrorGraphErrorCodeKey"; -NSErrorUserInfoKey const FBSDKGraphRequestErrorGraphErrorSubcodeKey = @"com.facebook.sdk:FBSDKGraphRequestErrorGraphErrorSubcodeKey"; -NSErrorUserInfoKey const FBSDKGraphRequestErrorHTTPStatusCodeKey = @"com.facebook.sdk:FBSDKGraphRequestErrorHTTPStatusCodeKey"; -NSErrorUserInfoKey const FBSDKGraphRequestErrorParsedJSONResponseKey = @"com.facebook.sdk:FBSDKGraphRequestErrorParsedJSONResponseKey"; - -#else - -NSString *const FBSDKErrorArgumentCollectionKey = @"com.facebook.sdk:FBSDKErrorArgumentCollectionKey"; -NSString *const FBSDKErrorArgumentNameKey = @"com.facebook.sdk:FBSDKErrorArgumentNameKey"; -NSString *const FBSDKErrorArgumentValueKey = @"com.facebook.sdk:FBSDKErrorArgumentValueKey"; -NSString *const FBSDKErrorDeveloperMessageKey = @"com.facebook.sdk:FBSDKErrorDeveloperMessageKey"; -NSString *const FBSDKErrorLocalizedDescriptionKey = @"com.facebook.sdk:FBSDKErrorLocalizedDescriptionKey"; -NSString *const FBSDKErrorLocalizedTitleKey = @"com.facebook.sdk:FBSDKErrorLocalizedErrorTitleKey"; - -NSString *const FBSDKGraphRequestErrorKey = @"com.facebook.sdk:FBSDKGraphRequestErrorCategoryKey"; -NSString *const FBSDKGraphRequestErrorCategoryKey = @"com.facebook.sdk:FBSDKGraphRequestErrorCategoryKey"; -NSString *const FBSDKGraphRequestErrorGraphErrorCodeKey = @"com.facebook.sdk:FBSDKGraphRequestErrorGraphErrorCodeKey"; -NSString *const FBSDKGraphRequestErrorGraphErrorSubcodeKey = @"com.facebook.sdk:FBSDKGraphRequestErrorGraphErrorSubcodeKey"; -NSString *const FBSDKGraphRequestErrorHTTPStatusCodeKey = @"com.facebook.sdk:FBSDKGraphRequestErrorHTTPStatusCodeKey"; -NSString *const FBSDKGraphRequestErrorParsedJSONResponseKey = @"com.facebook.sdk:FBSDKGraphRequestErrorParsedJSONResponseKey"; - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKCopying.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKCopying.h deleted file mode 100644 index fc938bbd29..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKCopying.h +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - Extension protocol for NSCopying that adds the copy method, which is implemented on NSObject. - - NSObject implicitly conforms to this protocol. - */ -NS_SWIFT_NAME(Copying) -@protocol FBSDKCopying - -/** - Implemented by NSObject as a convenience to copyWithZone:. - @return A copy of the receiver. - */ -- (id)copy; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit.h deleted file mode 100644 index 216f0e1c00..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit.h +++ /dev/null @@ -1,96 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -#ifdef BUCK - -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import - -#if !TARGET_OS_TV -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#else -#import -#import -#endif - -#else - -#import "FBSDKAccessToken.h" -#import "FBSDKAppEvents.h" -#import "FBSDKApplicationDelegate.h" -#import "FBSDKButton.h" -#import "FBSDKConstants.h" -#import "FBSDKCopying.h" -#import "FBSDKGraphRequest.h" -#import "FBSDKGraphRequestConnection.h" -#import "FBSDKGraphRequestDataAttachment.h" -#import "FBSDKSettings.h" -#import "FBSDKTestUsersManager.h" -#import "FBSDKUtility.h" - -#if !TARGET_OS_TV -#import "FBSDKAppLink.h" -#import "FBSDKAppLinkNavigation.h" -#import "FBSDKAppLinkResolver.h" -#import "FBSDKAppLinkResolving.h" -#import "FBSDKAppLinkReturnToRefererController.h" -#import "FBSDKAppLinkReturnToRefererView.h" -#import "FBSDKAppLinkTarget.h" -#import "FBSDKAppLinkUtility.h" -#import "FBSDKGraphErrorRecoveryProcessor.h" -#import "FBSDKMeasurementEvent.h" -#import "FBSDKMutableCopying.h" -#import "FBSDKProfile.h" -#import "FBSDKProfilePictureView.h" -#import "FBSDKURL.h" -#import "FBSDKWebViewAppLinkResolver.h" -#else -#import "FBSDKDeviceButton.h" -#import "FBSDKDeviceViewControllerBase.h" -#endif - -#endif - -#define FBSDK_VERSION_STRING @"5.15.1" -#define FBSDK_TARGET_PLATFORM_VERSION @"v5.0" diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKDeviceButton.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKDeviceButton.h deleted file mode 100644 index d34005025b..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKDeviceButton.h +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if TARGET_OS_TV - -#import "FBSDKButton.h" - -NS_ASSUME_NONNULL_BEGIN - -/* - An internal base class for device related flows. - - This is an internal API that should not be used directly and is subject to change. - */ -NS_SWIFT_NAME(FBDeviceButton) -@interface FBSDKDeviceButton : FBSDKButton - -@end - -NS_ASSUME_NONNULL_END - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKDeviceButton.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKDeviceButton.m deleted file mode 100644 index 383dd42c95..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKDeviceButton.m +++ /dev/null @@ -1,147 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if TARGET_OS_TV - -#import "FBSDKDeviceButton.h" - -#import - -#import "FBSDKCoreKit+Internal.h" - -static const CGFloat kFBLogoSize = 54.0; -static const CGFloat kFBLogoLeftMargin = 36.0; -static const CGFloat kRightMargin = 12.0; -static const CGFloat kPreferredPaddingBetweenLogoTitle = 44.0; - -@implementation FBSDKDeviceButton - -#pragma mark - Layout - -- (void)didUpdateFocusInContext:(UIFocusUpdateContext *)context withAnimationCoordinator:(UIFocusAnimationCoordinator *)coordinator -{ - [super didUpdateFocusInContext:context withAnimationCoordinator:coordinator]; - - if (self == context.nextFocusedView) { - [coordinator addCoordinatedAnimations:^{ - self.transform = CGAffineTransformMakeScale(1.05, 1.05); - self.layer.shadowOpacity = 0.5; - } completion:NULL]; - } else if (self == context.previouslyFocusedView) { - [coordinator addCoordinatedAnimations:^{ - self.transform = CGAffineTransformMakeScale(1.0, 1.0); - self.layer.shadowOpacity = 0; - } completion:NULL]; - } -} - -- (CGRect)imageRectForContentRect:(CGRect)contentRect -{ - CGFloat centerY = CGRectGetMidY(contentRect); - CGFloat y = centerY - (kFBLogoSize / 2.0); - return CGRectMake(kFBLogoLeftMargin, y, kFBLogoSize, kFBLogoSize); -} - -- (CGRect)titleRectForContentRect:(CGRect)contentRect -{ - if (self.hidden || CGRectIsEmpty(self.bounds)) { - return CGRectZero; - } - CGRect imageRect = [self imageRectForContentRect:contentRect]; - CGFloat titleX = CGRectGetMaxX(imageRect); - CGRect rect = CGRectMake(titleX, 0, CGRectGetWidth(contentRect) - titleX - kRightMargin, CGRectGetHeight(contentRect)); - - if (!self.layer.needsLayout) { - CGSize titleSize = [FBSDKMath ceilForSize:[self.titleLabel.attributedText boundingRectWithSize:contentRect.size - options:(NSStringDrawingUsesDeviceMetrics | - NSStringDrawingUsesLineFragmentOrigin | - NSStringDrawingUsesFontLeading) - context:NULL].size]; - CGFloat titlePadding = ( CGRectGetWidth(rect) - titleSize.width ) / 2; - if (titlePadding > titleX) { - // if there's room to re-center the text, do so. - rect = CGRectMake(kRightMargin, 0, CGRectGetWidth(contentRect) - kRightMargin - kRightMargin, CGRectGetHeight(contentRect)); - } - } - - return rect; -} - -#pragma mark - FBSDKButton - -- (UIFont *)defaultFont -{ - return [UIFont systemFontOfSize:38]; -} - -- (CGSize)sizeThatFits:(CGSize)size attributedTitle:(NSAttributedString *)title -{ - CGSize titleSize = [FBSDKMath ceilForSize:[title boundingRectWithSize:size - options:(NSStringDrawingUsesDeviceMetrics | - NSStringDrawingUsesLineFragmentOrigin | - NSStringDrawingUsesFontLeading) - context:NULL].size]; - CGFloat logoAndTitleWidth = kFBLogoSize + kPreferredPaddingBetweenLogoTitle + titleSize.width + kPreferredPaddingBetweenLogoTitle; - CGFloat height = 108; - CGSize contentSize = CGSizeMake(kFBLogoLeftMargin + logoAndTitleWidth + kRightMargin, - height); - return contentSize; -} - -- (CGSize)sizeThatFits:(CGSize)size title:(NSString *)title -{ - return [self sizeThatFits:size attributedTitle:[self attributedTitleStringFromString:title]]; -} - -#pragma mark - Subclasses - -- (NSAttributedString *)attributedTitleStringFromString:(NSString *)string -{ - if (!string) { - return nil; - } - NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init]; - style.alignment = NSTextAlignmentCenter; - style.lineBreakMode = NSLineBreakByClipping; - NSMutableAttributedString *attributedString = - [[NSMutableAttributedString alloc] initWithString:string - attributes:@{ - NSParagraphStyleAttributeName: style, - NSFontAttributeName: [self defaultFont], - NSForegroundColorAttributeName: [UIColor whiteColor] - }]; - // Now find all the spaces and widen their kerning. - NSRange range = NSMakeRange(0, string.length); - while (range.location != NSNotFound) { - NSRange spaceRange = [string rangeOfString:@" " options:0 range:range]; - if (spaceRange.location == NSNotFound) { - break; - } - [attributedString addAttribute:NSKernAttributeName - value:@2.7 - range:spaceRange]; - range = NSMakeRange(spaceRange.location + 1, string.length - spaceRange.location - 1); - } - return attributedString; -} - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKDeviceViewControllerBase.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKDeviceViewControllerBase.h deleted file mode 100644 index 335fa59329..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKDeviceViewControllerBase.h +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if TARGET_OS_TV - -#import - -NS_ASSUME_NONNULL_BEGIN - -/* - An internal base class for device related flows. - - This is an internal API that should not be used directly and is subject to change. -*/ -NS_SWIFT_NAME(FBDeviceViewControllerBase) -@interface FBSDKDeviceViewControllerBase : UIViewController -@end - -NS_ASSUME_NONNULL_END - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKDeviceViewControllerBase.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKDeviceViewControllerBase.m deleted file mode 100644 index be6ed4906f..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKDeviceViewControllerBase.m +++ /dev/null @@ -1,135 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if TARGET_OS_TV - -#import "FBSDKDeviceViewControllerBase+Internal.h" - -#import "FBSDKCoreKit+Internal.h" - -#import "FBSDKSmartDeviceDialogView.h" -#import "FBSDKModalFormPresentationController.h" - -static const NSTimeInterval kAnimationDurationTimeInterval = .5; - -/* -Subclasses should generally: -- override viewDidDisappear to handle cancellations -- assign `deviceDialogView.confirmationCode` to set the code -*/ -@implementation FBSDKDeviceViewControllerBase - -- (instancetype)init -{ - if ((self = [super init])) { - self.transitioningDelegate = self; - self.modalPresentationStyle = UIModalPresentationCustom; - } - return self; -} - -- (void)loadView -{ - CGRect frame = [UIScreen mainScreen].bounds; - BOOL smartLoginEnabled = ([FBSDKServerConfigurationManager cachedServerConfiguration].smartLoginOptions & FBSDKServerConfigurationSmartLoginOptionsEnabled); - FBSDKDeviceDialogView *deviceView = - (smartLoginEnabled ? - [[FBSDKSmartDeviceDialogView alloc] initWithFrame:frame] : - [[FBSDKDeviceDialogView alloc] initWithFrame:frame] ); - deviceView.delegate = self; - self.view = deviceView; -} - -- (FBSDKDeviceDialogView *)deviceDialogView -{ - return (FBSDKDeviceDialogView *)self.view; -} - -#pragma mark - UIViewControllerAnimatedTransitioning - -// Extract this out to another class if we have other similar transitions. -- (NSTimeInterval)transitionDuration:(id)transitionContext -{ - return kAnimationDurationTimeInterval; -} - -- (void)animateTransition:(id)transitionContext -{ - if ([self isBeingPresented]) { - UIView *presentedView = [transitionContext viewForKey:UITransitionContextToViewKey]; - // animate the view to slide in from bottom - presentedView.center = CGPointMake(presentedView.center.x, presentedView.center.y + CGRectGetHeight(presentedView.bounds)); - UIView *containerView = [transitionContext containerView]; - [containerView addSubview:presentedView]; - [UIView animateWithDuration:kAnimationDurationTimeInterval - delay:0 - usingSpringWithDamping:1 - initialSpringVelocity:0 - options:UIViewAnimationOptionCurveEaseOut - animations:^{ - presentedView.center = CGPointMake(presentedView.center.x, presentedView.center.y - CGRectGetHeight(presentedView.bounds)); - } completion:^(BOOL finished) { - [transitionContext completeTransition:finished]; - }]; - } else { - UIView *presentedView = [transitionContext viewForKey:UITransitionContextFromViewKey]; - // animate the view to slide out to the bottom - [UIView animateWithDuration:kAnimationDurationTimeInterval - delay:0 - usingSpringWithDamping:1 - initialSpringVelocity:0 - options:UIViewAnimationOptionCurveEaseIn - animations:^{ - presentedView.center = CGPointMake(presentedView.center.x, presentedView.center.y + CGRectGetHeight(presentedView.bounds)); - } completion:^(BOOL finished) { - [transitionContext completeTransition:finished]; - }]; - } -} - -#pragma mark - UIViewControllerTransitioningDelegate - -- (id)animationControllerForDismissedController:(UIViewController *)dismissed -{ - return self; -} - -- (id)animationControllerForPresentedController:(UIViewController *)presented presentingController:(UIViewController *)presenting sourceController:(UIViewController *)source -{ - return self; -} - -- (UIPresentationController *)presentationControllerForPresentedViewController:(UIViewController *)presented - presentingViewController:(UIViewController *)presenting - sourceViewController:(UIViewController *)source -{ - return [[FBSDKModalFormPresentationController alloc] initWithPresentedViewController:presented - presentingViewController:presenting]; -} - -#pragma mark - FBSDKDeviceDialogViewDelegate - -- (void)deviceDialogViewDidCancel:(FBSDKDeviceDialogView *)deviceDialogView -{ - [self dismissViewControllerAnimated:YES completion:NULL]; -} -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKMeasurementEvent.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKMeasurementEvent.h deleted file mode 100644 index 7bd2da92b5..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKMeasurementEvent.h +++ /dev/null @@ -1,81 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import - -NS_ASSUME_NONNULL_BEGIN - -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 - -/** The name of the notification posted by FBSDKMeasurementEvent */ -FOUNDATION_EXPORT NSNotificationName const FBSDKMeasurementEventNotification -NS_SWIFT_NAME(MeasurementEvent); - -#else - -/** The name of the notification posted by FBSDKMeasurementEvent */ -FOUNDATION_EXPORT NSString *const FBSDKMeasurementEventNotification -NS_SWIFT_NAME(MeasurementEventNotification); - -#endif - -/** Defines keys in the userInfo object for the notification named FBSDKMeasurementEventNotificationName */ -/** The string field for the name of the event */ -FOUNDATION_EXPORT NSString *const FBSDKMeasurementEventNameKey -NS_SWIFT_NAME(MeasurementEventNameKey); -/** The dictionary field for the arguments of the event */ -FOUNDATION_EXPORT NSString *const FBSDKMeasurementEventArgsKey -NS_SWIFT_NAME(MeasurementEventArgsKey); - -/** Events raised by FBSDKMeasurementEvent for Applink */ -/** - The name of the event posted when [FBSDKURL URLWithURL:] is called successfully. This represents the successful parsing of an app link URL. - */ -FOUNDATION_EXPORT NSString *const FBSDKAppLinkParseEventName -NS_SWIFT_NAME(AppLinkParseEventName); - -/** - The name of the event posted when [FBSDKURL URLWithInboundURL:] is called successfully. - This represents parsing an inbound app link URL from a different application - */ -FOUNDATION_EXPORT NSString *const FBSDKAppLinkNavigateInEventName -NS_SWIFT_NAME(AppLinkNavigateInEventName); - -/** The event raised when the user navigates from your app to other apps */ -FOUNDATION_EXPORT NSString *const FBSDKAppLinkNavigateOutEventName -NS_SWIFT_NAME(AppLinkNavigateOutEventName); - -/** - The event raised when the user navigates out from your app and back to the referrer app. - e.g when the user leaves your app after tapping the back-to-referrer navigation bar - */ -FOUNDATION_EXPORT NSString *const FBSDKAppLinkNavigateBackToReferrerEventName -NS_SWIFT_NAME(AppLinkNavigateBackToReferrerEventName); - -NS_SWIFT_NAME(MeasurementEvent) -@interface FBSDKMeasurementEvent : NSObject - -@end - -NS_ASSUME_NONNULL_END - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKMeasurementEvent.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKMeasurementEvent.m deleted file mode 100644 index e678777dd6..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKMeasurementEvent.m +++ /dev/null @@ -1,88 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKMeasurementEvent_Internal.h" - -#import "FBSDKLogger.h" -#import "FBSDKSettings.h" - -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 - -NSNotificationName const FBSDKMeasurementEventNotification = @"com.facebook.facebook-objc-sdk.measurement_event"; - -#else - -NSString *const FBSDKMeasurementEventNotification = @"com.facebook.facebook-objc-sdk.measurement_event"; - -#endif - -NSString *const FBSDKMeasurementEventNotificationName = @"com.facebook.facebook-objc-sdk.measurement_event"; - -NSString *const FBSDKMeasurementEventNameKey = @"event_name"; -NSString *const FBSDKMeasurementEventArgsKey = @"event_args"; - -/** app Link Event raised by this FBSDKURL */ -NSString *const FBSDKAppLinkParseEventName = @"al_link_parse"; -NSString *const FBSDKAppLinkNavigateInEventName = @"al_nav_in"; - -/** AppLink events raised in this class */ -NSString *const FBSDKAppLinkNavigateOutEventName = @"al_nav_out"; -NSString *const FBSDKAppLinkNavigateBackToReferrerEventName = @"al_ref_back_out"; - -@implementation FBSDKMeasurementEvent { - NSString *_name; - NSDictionary *_args; -} - -- (void)postNotification { - if (!_name) { - [FBSDKLogger - singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors - logEntry:@"Warning: Missing event name when logging FBSDK measurement event.\nIgnoring this event in logging."]; - return; - } - NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; - NSDictionary *userInfo = @{FBSDKMeasurementEventNameKey : _name, - FBSDKMeasurementEventArgsKey : _args}; - - [center postNotificationName:FBSDKMeasurementEventNotification - object:self - userInfo:userInfo]; -} - -- (instancetype)initEventWithName:(NSString *)name - args:(NSDictionary *)args { - if ((self = [super init])) { - _name = name; - _args = args ? args : @{}; - } - return self; -} - -+ (void)postNotificationForEventName:(NSString *)name - args:(NSDictionary *)args { - [[[self alloc] initEventWithName:name args:args] postNotification]; -} - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKMutableCopying.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKMutableCopying.h deleted file mode 100644 index 7efaeeb4b1..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKMutableCopying.h +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import - -#import "FBSDKCopying.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - Extension protocol for NSMutableCopying that adds the mutableCopy method, which is implemented on NSObject. - - NSObject implicitly conforms to this protocol. - */ -NS_SWIFT_NAME(MutableCopying) -@protocol FBSDKMutableCopying - -/** - Implemented by NSObject as a convenience to mutableCopyWithZone:. - @return A mutable copy of the receiver. - */ -- (id)mutableCopy; - -@end - -NS_ASSUME_NONNULL_END - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKProfile.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKProfile.h deleted file mode 100644 index d1b1551599..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKProfile.h +++ /dev/null @@ -1,197 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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." - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKProfilePictureView.h" - -@class FBSDKProfile; - -NS_ASSUME_NONNULL_BEGIN - -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 - -/** - Notification indicating that the `currentProfile` has changed. - - the userInfo dictionary of the notification will contain keys - `FBSDKProfileChangeOldKey` and - `FBSDKProfileChangeNewKey`. - */ -FOUNDATION_EXPORT NSNotificationName const FBSDKProfileDidChangeNotification -NS_SWIFT_NAME(ProfileDidChange); - -#else - -/** - Notification indicating that the `currentProfile` has changed. - - the userInfo dictionary of the notification will contain keys - `FBSDKProfileChangeOldKey` and - `FBSDKProfileChangeNewKey`. - */ -FOUNDATION_EXPORT NSString *const FBSDKProfileDidChangeNotification -NS_SWIFT_NAME(ProfileDidChangeNotification); - -#endif - -/* key in notification's userInfo object for getting the old profile. - - If there was no old profile, the key will not be present. - */ -FOUNDATION_EXPORT NSString *const FBSDKProfileChangeOldKey -NS_SWIFT_NAME(ProfileChangeOldKey); - -/* key in notification's userInfo object for getting the new profile. - - If there is no new profile, the key will not be present. - */ -FOUNDATION_EXPORT NSString *const FBSDKProfileChangeNewKey -NS_SWIFT_NAME(ProfileChangeNewKey); - -/** - Describes the callback for loadCurrentProfileWithCompletion. - @param profile the FBSDKProfile - @param error the error during the request, if any - - */ -typedef void (^FBSDKProfileBlock)(FBSDKProfile *_Nullable profile, NSError *_Nullable error) -NS_SWIFT_NAME(ProfileBlock); - -/** - Represents an immutable Facebook profile - - This class provides a global "currentProfile" instance to more easily - add social context to your application. When the profile changes, a notification is - posted so that you can update relevant parts of your UI and is persisted to NSUserDefaults. - - Typically, you will want to call `enableUpdatesOnAccessTokenChange:YES` so that - it automatically observes changes to the `[FBSDKAccessToken currentAccessToken]`. - - You can use this class to build your own `FBSDKProfilePictureView` or in place of typical requests to "/me". - */ -NS_SWIFT_NAME(Profile) -@interface FBSDKProfile : NSObject - -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; - -/** - initializes a new instance. - @param userID the user ID - @param firstName the user's first name - @param middleName the user's middle name - @param lastName the user's last name - @param name the user's complete name - @param linkURL the link for this profile - @param refreshDate the optional date this profile was fetched. Defaults to [NSDate date]. - */ -- (instancetype)initWithUserID:(NSString *)userID - firstName:(nullable NSString *)firstName - middleName:(nullable NSString *)middleName - lastName:(nullable NSString *)lastName - name:(nullable NSString *)name - linkURL:(nullable NSURL *)linkURL - refreshDate:(nullable NSDate *)refreshDate NS_DESIGNATED_INITIALIZER; - -/** - The current profile instance and posts the appropriate notification - if the profile parameter is different than the receiver. - - This persists the profile to NSUserDefaults. - */ - -/// The current profile -@property (class, nonatomic, strong, nullable) FBSDKProfile *currentProfile -NS_SWIFT_NAME(current); - -/** - The user id - */ -@property (nonatomic, copy, readonly) NSString *userID; -/** - The user's first name - */ -@property (nonatomic, copy, readonly, nullable) NSString *firstName; -/** - The user's middle name - */ -@property (nonatomic, copy, readonly, nullable) NSString *middleName; -/** - The user's last name - */ -@property (nonatomic, copy, readonly, nullable) NSString *lastName; -/** - The user's complete name - */ -@property (nonatomic, copy, readonly, nullable) NSString *name; -/** - A URL to the user's profile. - - Consider using `FBSDKAppLinkResolver` to resolve this - to an app link to link directly to the user's profile in the Facebook app. - */ -@property (nonatomic, readonly, nullable) NSURL *linkURL; - -/** - The last time the profile data was fetched. - */ -@property (nonatomic, readonly) NSDate *refreshDate; - -/** - Indicates if `currentProfile` will automatically observe `FBSDKAccessTokenDidChangeNotification` notifications - @param enable YES is observing - - If observing, this class will issue a graph request for public profile data when the current token's userID - differs from the current profile. You can observe `FBSDKProfileDidChangeNotification` for when the profile is updated. - - Note that if `[FBSDKAccessToken currentAccessToken]` is unset, the `currentProfile` instance remains. It's also possible - for `currentProfile` to return nil until the data is fetched. - */ -+ (void)enableUpdatesOnAccessTokenChange:(BOOL)enable -NS_SWIFT_NAME(enableUpdatesOnAccessTokenChange(_:)); - -/** - Loads the current profile and passes it to the completion block. - @param completion The block to be executed once the profile is loaded - - If the profile is already loaded, this method will call the completion block synchronously, otherwise it - will begin a graph request to update `currentProfile` and then call the completion block when finished. - */ -+ (void)loadCurrentProfileWithCompletion:(nullable FBSDKProfileBlock)completion; - -/** - A convenience method for returning a complete `NSURL` for retrieving the user's profile image. - @param mode The picture mode - @param size The height and width. This will be rounded to integer precision. - */ -- (nullable NSURL *)imageURLForPictureMode:(FBSDKProfilePictureMode)mode size:(CGSize)size -NS_SWIFT_NAME(imageURL(forMode:size:)); - -/** - Returns YES if the profile is equivalent to the receiver. - @param profile the profile to compare to. - */ -- (BOOL)isEqualToProfile:(FBSDKProfile *)profile; -@end - -NS_ASSUME_NONNULL_END - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKProfile.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKProfile.m deleted file mode 100644 index b4fcd87e8c..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKProfile.m +++ /dev/null @@ -1,295 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKProfile+Internal.h" - -#import "FBSDKCoreKit+Internal.h" - -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 - -NSNotificationName const FBSDKProfileDidChangeNotification = @"com.facebook.sdk.FBSDKProfile.FBSDKProfileDidChangeNotification";; - -#else - -NSString *const FBSDKProfileDidChangeNotification = @"com.facebook.sdk.FBSDKProfile.FBSDKProfileDidChangeNotification";; - -#endif - -NSString *const FBSDKProfileChangeOldKey = @"FBSDKProfileOld"; -NSString *const FBSDKProfileChangeNewKey = @"FBSDKProfileNew"; -static NSString *const FBSDKProfileUserDefaultsKey = @"com.facebook.sdk.FBSDKProfile.currentProfile"; -static FBSDKProfile *g_currentProfile; - -#define FBSDKPROFILE_USERID_KEY @"userID" -#define FBSDKPROFILE_FIRSTNAME_KEY @"firstName" -#define FBSDKPROFILE_MIDDLENAME_KEY @"middleName" -#define FBSDKPROFILE_LASTNAME_KEY @"lastName" -#define FBSDKPROFILE_NAME_KEY @"name" -#define FBSDKPROFILE_LINKURL_KEY @"linkURL" -#define FBSDKPROFILE_REFRESHDATE_KEY @"refreshDate" - -// Once a day -#define FBSDKPROFILE_STALE_IN_SECONDS (60 * 60 * 24) - -@implementation FBSDKProfile - -- (instancetype)initWithUserID:(NSString *)userID - firstName:(NSString *)firstName - middleName:(NSString *)middleName - lastName:(NSString *)lastName - name:(NSString *)name - linkURL:(NSURL *)linkURL - refreshDate:(NSDate *)refreshDate -{ - if ((self = [super init])) { - _userID = [userID copy]; - _firstName = [firstName copy]; - _middleName = [middleName copy]; - _lastName = [lastName copy]; - _name = [name copy]; - _linkURL = [linkURL copy]; - _refreshDate = [refreshDate copy] ?: [NSDate date]; - } - return self; -} - -+ (FBSDKProfile *)currentProfile -{ - return g_currentProfile; -} - -+ (void)setCurrentProfile:(FBSDKProfile *)profile -{ - if (profile != g_currentProfile && ![profile isEqualToProfile:g_currentProfile]) { - [[self class] cacheProfile:profile]; - NSMutableDictionary *userInfo = [NSMutableDictionary dictionary]; - - [FBSDKBasicUtility dictionary:userInfo setObject:profile forKey:FBSDKProfileChangeNewKey]; - [FBSDKBasicUtility dictionary:userInfo setObject:g_currentProfile forKey:FBSDKProfileChangeOldKey]; - g_currentProfile = profile; - [[NSNotificationCenter defaultCenter] postNotificationName:FBSDKProfileDidChangeNotification - object:[self class] - userInfo:userInfo]; - } -} - -- (NSURL *)imageURLForPictureMode:(FBSDKProfilePictureMode)mode size:(CGSize)size -{ - NSString *type; - switch (mode) { - case FBSDKProfilePictureModeNormal: type = @"normal"; break; - case FBSDKProfilePictureModeSquare: type = @"square"; break; - } - - NSString *path = [NSString stringWithFormat:@"%@/picture?type=%@&width=%d&height=%d", - _userID, - type, - (int) roundf(size.width), - (int) roundf(size.height)]; - - return [FBSDKInternalUtility facebookURLWithHostPrefix:@"graph" - path:path - queryParameters:@{} - error:NULL]; -} - -+ (void)enableUpdatesOnAccessTokenChange:(BOOL)enable -{ - if (enable) { - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(observeChangeAccessTokenChange:) - name:FBSDKAccessTokenDidChangeNotification - object:nil]; - } else { - [[NSNotificationCenter defaultCenter] removeObserver:self]; - } -} - -+ (void)loadCurrentProfileWithCompletion:(FBSDKProfileBlock)completion -{ - [self loadProfileWithToken:[FBSDKAccessToken currentAccessToken] completion:completion]; -} - -#pragma mark - NSCopying - -- (instancetype)copyWithZone:(NSZone *)zone -{ - //immutable - return self; -} - -#pragma mark - Equality - -- (NSUInteger)hash -{ - NSUInteger subhashes[] = { - self.userID.hash, - self.firstName.hash, - self.middleName.hash, - self.lastName.hash, - self.name.hash, - self.linkURL.hash, - self.refreshDate.hash - }; - return [FBSDKMath hashWithIntegerArray:subhashes count:sizeof(subhashes) / sizeof(subhashes[0])]; -} - -- (BOOL)isEqual:(id)object -{ - if (self == object) { - return YES; - } - if (![object isKindOfClass:[FBSDKProfile class]]){ - return NO; - } - return [self isEqualToProfile:object]; -} - -- (BOOL)isEqualToProfile:(FBSDKProfile *)profile -{ - return ([_userID isEqualToString:profile.userID] && - [_firstName isEqualToString:profile.firstName] && - [_middleName isEqualToString:profile.middleName] && - [_lastName isEqualToString:profile.lastName] && - [_name isEqualToString:profile.name] && - [_linkURL isEqual:profile.linkURL] && - [_refreshDate isEqualToDate:profile.refreshDate]); -} -#pragma mark NSCoding - -+ (BOOL)supportsSecureCoding -{ - return YES; -} - -- (instancetype)initWithCoder:(NSCoder *)decoder -{ - NSString *userID = [decoder decodeObjectOfClass:[NSString class] forKey:FBSDKPROFILE_USERID_KEY]; - NSString *firstName = [decoder decodeObjectOfClass:[NSString class] forKey:FBSDKPROFILE_FIRSTNAME_KEY]; - NSString *middleName = [decoder decodeObjectOfClass:[NSString class] forKey:FBSDKPROFILE_MIDDLENAME_KEY]; - NSString *lastName = [decoder decodeObjectOfClass:[NSString class] forKey:FBSDKPROFILE_LASTNAME_KEY]; - NSString *name = [decoder decodeObjectOfClass:[NSString class] forKey:FBSDKPROFILE_NAME_KEY]; - NSURL *linkURL = [decoder decodeObjectOfClass:[NSURL class] forKey:FBSDKPROFILE_LINKURL_KEY]; - NSDate *refreshDate = [decoder decodeObjectOfClass:[NSURL class] forKey:FBSDKPROFILE_REFRESHDATE_KEY]; - return [self initWithUserID:userID - firstName:firstName - middleName:middleName - lastName:lastName - name:name - linkURL:linkURL - refreshDate:refreshDate]; -} - -- (void)encodeWithCoder:(NSCoder *)encoder -{ - [encoder encodeObject:self.userID forKey:FBSDKPROFILE_USERID_KEY]; - [encoder encodeObject:self.firstName forKey:FBSDKPROFILE_FIRSTNAME_KEY]; - [encoder encodeObject:self.middleName forKey:FBSDKPROFILE_MIDDLENAME_KEY]; - [encoder encodeObject:self.lastName forKey:FBSDKPROFILE_LASTNAME_KEY]; - [encoder encodeObject:self.name forKey:FBSDKPROFILE_NAME_KEY]; - [encoder encodeObject:self.linkURL forKey:FBSDKPROFILE_LINKURL_KEY]; - [encoder encodeObject:self.refreshDate forKey:FBSDKPROFILE_REFRESHDATE_KEY]; -} - -#pragma mark - Private - -+ (void)loadProfileWithToken:(FBSDKAccessToken *)token completion:(FBSDKProfileBlock)completion -{ - static FBSDKGraphRequestConnection *executingRequestConnection = nil; - - BOOL isStale = [[NSDate date] timeIntervalSinceDate:g_currentProfile.refreshDate] > FBSDKPROFILE_STALE_IN_SECONDS; - if (token && - (isStale || ![g_currentProfile.userID isEqualToString:token.userID])) { - FBSDKProfile *expectedCurrentProfile = g_currentProfile; - - NSString *graphPath = @"me?fields=id,first_name,middle_name,last_name,name,link"; - [executingRequestConnection cancel]; - FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:graphPath - parameters:nil - flags:FBSDKGraphRequestFlagDoNotInvalidateTokenOnError | FBSDKGraphRequestFlagDisableErrorRecovery]; - executingRequestConnection = [request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { - if (expectedCurrentProfile != g_currentProfile) { - // current profile has already changed since request was started. Let's not overwrite. - if (completion != NULL) { - completion(nil, nil); - } - return; - } - FBSDKProfile *profile = nil; - if (!error) { - profile = [[FBSDKProfile alloc] initWithUserID:result[@"id"] - firstName:result[@"first_name"] - middleName:result[@"middle_name"] - lastName:result[@"last_name"] - name:result[@"name"] - linkURL:[NSURL URLWithString:result[@"link"]] - refreshDate:[NSDate date]]; - } - [[self class] setCurrentProfile:profile]; - if (completion != NULL) { - completion(profile, error); - } - }]; - } else if (completion != NULL) { - completion(g_currentProfile, nil); - } -} - -+ (void)observeChangeAccessTokenChange:(NSNotification *)notification -{ - FBSDKAccessToken *token = notification.userInfo[FBSDKAccessTokenChangeNewKey]; - [self loadProfileWithToken:token completion:NULL]; -} - -@end - -@implementation FBSDKProfile(Internal) - -+ (void)cacheProfile:(FBSDKProfile *)profile -{ - NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; - if (profile) { - NSData *data = [NSKeyedArchiver archivedDataWithRootObject:profile]; - [userDefaults setObject:data forKey:FBSDKProfileUserDefaultsKey]; - } else { - [userDefaults removeObjectForKey:FBSDKProfileUserDefaultsKey]; - } - [userDefaults synchronize]; -} - -+ (FBSDKProfile *)fetchCachedProfile -{ - NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; - NSData *data = [userDefaults objectForKey:FBSDKProfileUserDefaultsKey]; - if (data != nil) { - @try { - return [NSKeyedUnarchiver unarchiveObjectWithData:data]; - } @catch (NSException *exception) { - return nil; - } - } - return nil; -} - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKProfilePictureView.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKProfilePictureView.h deleted file mode 100644 index c5a1672b0e..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKProfilePictureView.h +++ /dev/null @@ -1,89 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import - -@class FBSDKProfile; - -NS_ASSUME_NONNULL_BEGIN - -/** - FBSDKProfilePictureMode enum - Defines the aspect ratio mode for the source image of the profile picture. - */ -typedef NS_ENUM(NSUInteger, FBSDKProfilePictureMode) -{ - /** - A square cropped version of the image will be included in the view. - */ - FBSDKProfilePictureModeSquare, - /** - The original picture's aspect ratio will be used for the source image in the view. - */ - FBSDKProfilePictureModeNormal, -} NS_SWIFT_NAME(Profile.PictureMode); - -/** - A view to display a profile picture. - */ -NS_SWIFT_NAME(FBProfilePictureView) -@interface FBSDKProfilePictureView : UIView - -/** - Create a new instance of `FBSDKProfilePictureView`. - - - Parameter frame: Frame rectangle for the view. - - Parameter profile: Optional profile to display a picture for. - */ -- (instancetype)initWithFrame:(CGRect)frame - profile:(FBSDKProfile * _Nullable)profile; - -/** - Create a new instance of `FBSDKProfilePictureView`. - - - Parameter profile: Optional profile to display a picture for. - */ -- (instancetype)initWithProfile:(FBSDKProfile * _Nullable)profile; - -/** - The mode for the receiver to determine the aspect ratio of the source image. - */ -@property (nonatomic, assign) FBSDKProfilePictureMode pictureMode; - -/** - The profile ID to show the picture for. - */ -@property (nonatomic, copy) NSString *profileID; - -/** - Explicitly marks the receiver as needing to update the image. - - This method is called whenever any properties that affect the source image are modified, but this can also - be used to trigger a manual update of the image if it needs to be re-downloaded. - */ -- (void)setNeedsImageUpdate; - -@end - -NS_ASSUME_NONNULL_END - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKProfilePictureView.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKProfilePictureView.m deleted file mode 100644 index c77339daee..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKProfilePictureView.m +++ /dev/null @@ -1,388 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKProfilePictureView.h" - -#import "FBSDKAccessToken.h" -#import "FBSDKInternalUtility.h" -#import "FBSDKMaleSilhouetteIcon.h" -#import "FBSDKMath.h" -#import "FBSDKUtility.h" - -@interface FBSDKProfilePictureViewState : NSObject - -- (instancetype)initWithProfileID:(NSString *)profileID - size:(CGSize)size - scale:(CGFloat)scale - pictureMode:(FBSDKProfilePictureMode)pictureMode - imageShouldFit:(BOOL)imageShouldFit; - -@property (nonatomic, assign, readonly) BOOL imageShouldFit; -@property (nonatomic, assign, readonly) FBSDKProfilePictureMode pictureMode; -@property (nonatomic, copy, readonly) NSString *profileID; -@property (nonatomic, assign, readonly) CGFloat scale; -@property (nonatomic, assign, readonly) CGSize size; - -- (BOOL)isEqualToState:(FBSDKProfilePictureViewState *)other; -- (BOOL)isValidForState:(FBSDKProfilePictureViewState *)other; - -@end - -@implementation FBSDKProfilePictureViewState - -- (instancetype)initWithProfileID:(NSString *)profileID - size:(CGSize)size - scale:(CGFloat)scale - pictureMode:(FBSDKProfilePictureMode)pictureMode - imageShouldFit:(BOOL)imageShouldFit -{ - if ((self = [super init])) { - _profileID = [profileID copy]; - _size = size; - _scale = scale; - _pictureMode = pictureMode; - _imageShouldFit = imageShouldFit; - } - return self; -} - -- (NSUInteger)hash -{ - NSUInteger subhashes[] = { - (NSUInteger)_imageShouldFit, - (NSUInteger)_size.width, - (NSUInteger)_size.height, - (NSUInteger)_scale, - (NSUInteger)_pictureMode, - _profileID.hash, - }; - return [FBSDKMath hashWithIntegerArray:subhashes count:sizeof(subhashes) / sizeof(subhashes[0])]; -} - -- (BOOL)isEqual:(id)object -{ - if (![object isKindOfClass:[FBSDKProfilePictureViewState class]]) { - return NO; - } - FBSDKProfilePictureViewState *other = (FBSDKProfilePictureViewState *)object; - return [self isEqualToState:other]; -} - -- (BOOL)isEqualToState:(FBSDKProfilePictureViewState *)other -{ - return ([self isValidForState:other] && - CGSizeEqualToSize(_size, other->_size) && - (_scale == other->_scale)); -} - -- (BOOL)isValidForState:(FBSDKProfilePictureViewState *)other -{ - return (other != nil && - (_imageShouldFit == other->_imageShouldFit) && - (_pictureMode == other->_pictureMode) && - [FBSDKInternalUtility object:_profileID isEqualToObject:other->_profileID]); -} - -@end - -@implementation FBSDKProfilePictureView -{ - BOOL _hasProfileImage; - UIImageView *_imageView; - FBSDKProfilePictureViewState *_lastState; - BOOL _needsImageUpdate; - BOOL _placeholderImageIsValid; -} - -#pragma mark - Object Lifecycle - -- (instancetype)initWithFrame:(CGRect)frame -{ - if ((self = [super initWithFrame:frame])) { - [self _configureProfilePictureView]; - } - return self; -} - -- (instancetype)initWithCoder:(NSCoder *)decoder -{ - if ((self = [super initWithCoder:decoder])) { - [self _configureProfilePictureView]; - } - return self; -} - -- (instancetype)initWithFrame:(CGRect)frame - profile:(FBSDKProfile *)profile -{ - if ((self = [super initWithFrame:frame])) { - _profileID = [profile.userID copy]; - - [self setNeedsImageUpdate]; - } - return self; -} - -- (instancetype)initWithProfile:(FBSDKProfile *)profile -{ - return [self initWithFrame:CGRectZero profile:profile]; -} - -- (void)dealloc -{ - [[NSNotificationCenter defaultCenter] removeObserver:self]; -} - -#pragma mark - Properties - -- (void)setBounds:(CGRect)bounds -{ - dispatch_async(dispatch_get_main_queue(), ^{ - CGRect currentBounds = self.bounds; - if (!CGRectEqualToRect(currentBounds, bounds)) { - super.bounds = bounds; - if (!CGSizeEqualToSize(currentBounds.size, bounds.size)) { - self->_placeholderImageIsValid = NO; - [self setNeedsImageUpdate]; - } - } - }); -} - -- (UIViewContentMode)contentMode -{ - return _imageView.contentMode; -} - -- (void)setContentMode:(UIViewContentMode)contentMode -{ - if (_imageView.contentMode != contentMode) { - _imageView.contentMode = contentMode; - super.contentMode = contentMode; - [self setNeedsImageUpdate]; - } -} - -- (void)setMode:(FBSDKProfilePictureMode)pictureMode -{ - if (_pictureMode != pictureMode) { - _pictureMode = pictureMode; - [self setNeedsImageUpdate]; - } -} - -- (void)setProfileID:(NSString *)profileID -{ - if (![FBSDKInternalUtility object:_profileID isEqualToObject:profileID]) { - _profileID = [profileID copy]; - _placeholderImageIsValid = NO; - [self setNeedsImageUpdate]; - } -} - -#pragma mark - Public Methods - -- (void)setNeedsImageUpdate -{ - dispatch_async(dispatch_get_main_queue(), ^{ - if (!self->_imageView || CGRectIsEmpty(self.bounds)) { - // we can't do anything with an empty view, so just bail out until we have a size - return; - } - - // ensure that we have an image. do this here so we can draw the placeholder image synchronously if we don't have one - if (!self->_placeholderImageIsValid && !self->_hasProfileImage) { - [self _setPlaceholderImage]; - } - - // debounce calls to needsImage against the main runloop - if (self->_needsImageUpdate) { - return; - } - self->_needsImageUpdate = YES; - [self _needsImageUpdate]; - }); -} - -#pragma mark - Helper Methods - -- (void)_accessTokenDidChangeNotification:(NSNotification *)notification -{ - if (![_profileID isEqualToString:@"me"] || !notification.userInfo[FBSDKAccessTokenDidChangeUserIDKey]) { - return; - } - _lastState = nil; - [self setNeedsImageUpdate]; -} - -- (void)_configureProfilePictureView -{ - _imageView = [[UIImageView alloc] initWithFrame:self.bounds]; - _imageView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight); - [self addSubview:_imageView]; - - _profileID = @"me"; - self.backgroundColor = [UIColor whiteColor]; - self.contentMode = UIViewContentModeScaleAspectFit; - self.userInteractionEnabled = NO; - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(_accessTokenDidChangeNotification:) - name:FBSDKAccessTokenDidChangeNotification - object:nil]; - - [self setNeedsImageUpdate]; -} - -- (BOOL)_imageShouldFit -{ - switch (self.contentMode) { - case UIViewContentModeBottom: - case UIViewContentModeBottomLeft: - case UIViewContentModeBottomRight: - case UIViewContentModeCenter: - case UIViewContentModeLeft: - case UIViewContentModeRedraw: - case UIViewContentModeRight: - case UIViewContentModeScaleAspectFit: - case UIViewContentModeTop: - case UIViewContentModeTopLeft: - case UIViewContentModeTopRight: - return YES; - case UIViewContentModeScaleAspectFill: - case UIViewContentModeScaleToFill: - return NO; - } -} - -- (CGSize)_imageSize:(BOOL)imageShouldFit scale:(CGFloat)scale -{ - // get the image size based on the contentMode and pictureMode - CGSize size = self.bounds.size; - switch (_pictureMode) { - case FBSDKProfilePictureModeSquare:{ - CGFloat imageSize; - if (imageShouldFit) { - imageSize = MIN(size.width, size.height); - } else { - imageSize = MAX(size.width, size.height); - } - size = CGSizeMake(imageSize, imageSize); - break; - } - case FBSDKProfilePictureModeNormal: - // use the bounds size - break; - } - - // adjust for the screen scale - size = CGSizeMake(size.width * scale, size.height * scale); - - return size; -} - -- (void)_needsImageUpdate -{ - _needsImageUpdate = NO; - - if (!_profileID) { - if (!_placeholderImageIsValid) { - [self _setPlaceholderImage]; - } - return; - } - - // if the current image is no longer representative of the current state, clear the current value out; otherwise, - // leave the current value until the new resolution image is downloaded - BOOL imageShouldFit = [self _imageShouldFit]; - UIScreen *screen = self.window.screen ?: [UIScreen mainScreen]; - CGFloat scale = screen.scale; - CGSize imageSize = [self _imageSize:imageShouldFit scale:scale]; - FBSDKProfilePictureViewState *state = [[FBSDKProfilePictureViewState alloc] initWithProfileID:_profileID - size:imageSize - scale:scale - pictureMode:_pictureMode - imageShouldFit:imageShouldFit]; - if (![_lastState isValidForState:state]) { - [self _setPlaceholderImage]; - } - _lastState = state; - - FBSDKAccessToken *accessToken = [FBSDKAccessToken currentAccessToken]; - if ([state.profileID isEqualToString:@"me"] && !accessToken) { - return; - } - - NSString *path = [[NSString alloc] initWithFormat:@"/%@/picture", [FBSDKUtility URLEncode:state.profileID]]; - CGSize size = state.size; - NSMutableDictionary *parameters = [[NSMutableDictionary alloc] init]; - parameters[@"width"] = @(size.width); - parameters[@"height"] = @(size.height); - [FBSDKBasicUtility dictionary:parameters setObject:accessToken.tokenString forKey:@"access_token"]; - NSURL *imageURL = [FBSDKInternalUtility facebookURLWithHostPrefix:@"graph" path:path queryParameters:parameters error:NULL]; - - __weak FBSDKProfilePictureView *weakSelf = self; - - NSURLRequest *request = [[NSURLRequest alloc] initWithURL:imageURL]; - NSURLSession *session = [NSURLSession sharedSession]; - [[session - dataTaskWithRequest:request - completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { - if (!error && data.length) { - [weakSelf _updateImageWithData:data state:state]; - } - }] resume]; -} - -- (void)_setPlaceholderImage -{ - UIColor *fillColor = [UIColor colorWithRed:157.0/255.0 green:177.0/255.0 blue:204.0/255.0 alpha:1.0]; - _placeholderImageIsValid = YES; - _hasProfileImage = NO; - - dispatch_async(dispatch_get_main_queue(), ^{ - self->_imageView.image = [[[FBSDKMaleSilhouetteIcon alloc] initWithColor:fillColor] imageWithSize:self->_imageView.bounds.size]; - }); -} - -- (void)_updateImageWithData:(NSData *)data state:(FBSDKProfilePictureViewState *)state -{ - // make sure we haven't updated the state since we began fetching the image - if (![state isValidForState:_lastState]) { - return; - } - - UIImage *image = [[UIImage alloc] initWithData:data scale:state.scale]; - if (image) { - _hasProfileImage = YES; - dispatch_async(dispatch_get_main_queue(), ^{ - self->_imageView.image = image; - }); - } else { - _hasProfileImage = NO; - _placeholderImageIsValid = NO; - [self setNeedsImageUpdate]; - } -} - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKSettings.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKSettings.h deleted file mode 100644 index a6f14644da..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKSettings.h +++ /dev/null @@ -1,213 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -NS_ASSUME_NONNULL_BEGIN - -/* - * Constants defining logging behavior. Use with <[FBSDKSettings setLoggingBehavior]>. - */ - -/// typedef for FBSDKAppEventName -typedef NSString *const FBSDKLoggingBehavior NS_TYPED_EXTENSIBLE_ENUM NS_SWIFT_NAME(LoggingBehavior); - -/** Include access token in logging. */ -FOUNDATION_EXPORT FBSDKLoggingBehavior FBSDKLoggingBehaviorAccessTokens; - -/** Log performance characteristics */ -FOUNDATION_EXPORT FBSDKLoggingBehavior FBSDKLoggingBehaviorPerformanceCharacteristics; - -/** Log FBSDKAppEvents interactions */ -FOUNDATION_EXPORT FBSDKLoggingBehavior FBSDKLoggingBehaviorAppEvents; - -/** Log Informational occurrences */ -FOUNDATION_EXPORT FBSDKLoggingBehavior FBSDKLoggingBehaviorInformational; - -/** Log cache errors. */ -FOUNDATION_EXPORT FBSDKLoggingBehavior FBSDKLoggingBehaviorCacheErrors; - -/** Log errors from SDK UI controls */ -FOUNDATION_EXPORT FBSDKLoggingBehavior FBSDKLoggingBehaviorUIControlErrors; - -/** Log debug warnings from API response, i.e. when friends fields requested, but user_friends permission isn't granted. */ -FOUNDATION_EXPORT FBSDKLoggingBehavior FBSDKLoggingBehaviorGraphAPIDebugWarning; - -/** Log warnings from API response, i.e. when requested feature will be deprecated in next version of API. - Info is the lowest level of severity, using it will result in logging all previously mentioned levels. - */ -FOUNDATION_EXPORT FBSDKLoggingBehavior FBSDKLoggingBehaviorGraphAPIDebugInfo; - -/** Log errors from SDK network requests */ -FOUNDATION_EXPORT FBSDKLoggingBehavior FBSDKLoggingBehaviorNetworkRequests; - -/** Log errors likely to be preventable by the developer. This is in the default set of enabled logging behaviors. */ -FOUNDATION_EXPORT FBSDKLoggingBehavior FBSDKLoggingBehaviorDeveloperErrors; - -NS_SWIFT_NAME(Settings) -@interface FBSDKSettings : NSObject - -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; - -/** - Retrieve the current iOS SDK version. - */ -@property (class, nonatomic, copy, readonly) NSString *sdkVersion; - -/** - Retrieve the current default Graph API version. - */ -@property (class, nonatomic, copy, readonly) NSString *defaultGraphAPIVersion; - -/** - The quality of JPEG images sent to Facebook from the SDK, - expressed as a value from 0.0 to 1.0. - - If not explicitly set, the default is 0.9. - - @see [UIImageJPEGRepresentation](https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIKitFunctionReference/#//apple_ref/c/func/UIImageJPEGRepresentation) */ -@property (class, nonatomic, assign) CGFloat JPEGCompressionQuality -NS_SWIFT_NAME(jpegCompressionQuality); - -/** - Controls sdk auto initailization. - If not explicitly set, the default is true - */ -@property (class, nonatomic, assign, getter=isAutoInitEnabled) BOOL autoInitEnabled; - -/** - Controls sdk crash report - If not explicitly set, the default is true - */ -@property (class, nonatomic, assign, getter=isInstrumentEnabled) BOOL instrumentEnabled -__attribute((deprecated("This attribute is no longer used, use autoLogAppEventsEnabled instead."))); - -/** - Controls the auto logging of basic app events, such as activateApp and deactivateApp. - If not explicitly set, the default is true - */ -@property (class, nonatomic, assign, getter=isAutoLogAppEventsEnabled) BOOL autoLogAppEventsEnabled; - -/** - Controls the fb_codeless_debug logging event - If not explicitly set, the default is true - */ -@property (class, nonatomic, assign, getter=isCodelessDebugLogEnabled) BOOL codelessDebugLogEnabled; - -/** - Controls the fb_codeless_debug logging event - If not explicitly set, the default is true - */ -@property (class, nonatomic, assign, getter=isAdvertiserIDCollectionEnabled) BOOL advertiserIDCollectionEnabled; - -/** - Whether data such as that generated through FBSDKAppEvents and sent to Facebook - should be restricted from being used for other than analytics and conversions. - Defaults to NO. This value is stored on the device and persists across app launches. - */ -@property (class, nonatomic, assign, getter=shouldLimitEventAndDataUsage) BOOL limitEventAndDataUsage; - -/** - A convenient way to toggle error recovery for all FBSDKGraphRequest instances created after this is set. - */ -@property (class, nonatomic, assign, getter=isGraphErrorRecoveryEnabled) BOOL graphErrorRecoveryEnabled; - -/** - The Facebook App ID used by the SDK. - - If not explicitly set, the default will be read from the application's plist (FacebookAppID). - */ -@property (class, nonatomic, copy, nullable) NSString *appID; - -/** - The default url scheme suffix used for sessions. - - If not explicitly set, the default will be read from the application's plist (FacebookUrlSchemeSuffix). - */ -@property (class, nonatomic, copy, nullable) NSString *appURLSchemeSuffix; - -/** - The Client Token that has been set via [FBSDKSettings setClientToken]. - This is needed for certain API calls when made anonymously, without a user-based access token. - - The Facebook App's "client token", which, for a given appid can be found in the Security - section of the Advanced tab of the Facebook App settings found at - - If not explicitly set, the default will be read from the application's plist (FacebookClientToken). - */ -@property (class, nonatomic, copy, nullable) NSString *clientToken; - -/** - The Facebook Display Name used by the SDK. - - This should match the Display Name that has been set for the app with the corresponding Facebook App ID, - in the Facebook App Dashboard. - - If not explicitly set, the default will be read from the application's plist (FacebookDisplayName). - */ -@property (class, nonatomic, copy, nullable) NSString *displayName; - -/** - The Facebook domain part. This can be used to change the Facebook domain - (e.g. @"beta") so that requests will be sent to `graph.beta.facebook.com` - - If not explicitly set, the default will be read from the application's plist (FacebookDomainPart). - */ -@property (class, nonatomic, copy, nullable) NSString *facebookDomainPart; - -/** - The current Facebook SDK logging behavior. This should consist of strings - defined as constants with FBSDKLoggingBehavior*. - - This should consist a set of strings indicating what information should be logged - defined as constants with FBSDKLoggingBehavior*. Set to an empty set in order to disable all logging. - - You can also define this via an array in your app plist with key "FacebookLoggingBehavior" or add and remove individual values via enableLoggingBehavior: or disableLogginBehavior: - - The default is a set consisting of FBSDKLoggingBehaviorDeveloperErrors - */ -@property (class, nonatomic, copy) NSSet *loggingBehaviors -NS_REFINED_FOR_SWIFT; - -/** - Overrides the default Graph API version to use with `FBSDKGraphRequests`. This overrides `FBSDK_TARGET_PLATFORM_VERSION`. - - The string should be of the form `@"v2.7"`. - - Defaults to `FBSDK_TARGET_PLATFORM_VERSION`. -*/ -@property (class, nonatomic, copy, null_resettable) NSString *graphAPIVersion; - -/** - Enable a particular Facebook SDK logging behavior. - - @param loggingBehavior The LoggingBehavior to enable. This should be a string defined as a constant with FBSDKLoggingBehavior*. - */ -+ (void)enableLoggingBehavior:(FBSDKLoggingBehavior)loggingBehavior; - -/** - Disable a particular Facebook SDK logging behavior. - - @param loggingBehavior The LoggingBehavior to disable. This should be a string defined as a constant with FBSDKLoggingBehavior*. - */ -+ (void)disableLoggingBehavior:(FBSDKLoggingBehavior)loggingBehavior; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKSettings.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKSettings.m deleted file mode 100644 index 03af6f1bcf..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKSettings.m +++ /dev/null @@ -1,384 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKSettings+Internal.h" - -#import "FBSDKAccessTokenCache.h" -#import "FBSDKAccessTokenExpirer.h" -#import "FBSDKAppEvents+Internal.h" -#import "FBSDKCoreKit.h" - -#define FBSDKSETTINGS_PLIST_CONFIGURATION_SETTING_IMPL(TYPE, PLIST_KEY, GETTER, SETTER, DEFAULT_VALUE, ENABLE_CACHE) \ -static TYPE *g_##PLIST_KEY = nil; \ -+ (TYPE *)GETTER \ -{ \ - if (!g_##PLIST_KEY && ENABLE_CACHE) { \ - g_##PLIST_KEY = [[[NSUserDefaults standardUserDefaults] objectForKey:@#PLIST_KEY] copy]; \ - } \ - if (!g_##PLIST_KEY) { \ - g_##PLIST_KEY = [[[NSBundle mainBundle] objectForInfoDictionaryKey:@#PLIST_KEY] copy] ?: DEFAULT_VALUE; \ - } \ - return g_##PLIST_KEY; \ -} \ -+ (void)SETTER:(TYPE *)value { \ - g_##PLIST_KEY = [value copy]; \ - if (ENABLE_CACHE) { \ - if (value) { \ - [[NSUserDefaults standardUserDefaults] setObject:value forKey:@#PLIST_KEY]; \ - } else { \ - [[NSUserDefaults standardUserDefaults] removeObjectForKey:@#PLIST_KEY]; \ - } \ - } \ - [FBSDKSettings _logIfSDKSettingsChanged]; \ -} - -FBSDKLoggingBehavior FBSDKLoggingBehaviorAccessTokens = @"include_access_tokens"; -FBSDKLoggingBehavior FBSDKLoggingBehaviorPerformanceCharacteristics = @"perf_characteristics"; -FBSDKLoggingBehavior FBSDKLoggingBehaviorAppEvents = @"app_events"; -FBSDKLoggingBehavior FBSDKLoggingBehaviorInformational = @"informational"; -FBSDKLoggingBehavior FBSDKLoggingBehaviorCacheErrors = @"cache_errors"; -FBSDKLoggingBehavior FBSDKLoggingBehaviorUIControlErrors = @"ui_control_errors"; -FBSDKLoggingBehavior FBSDKLoggingBehaviorDeveloperErrors = @"developer_errors"; -FBSDKLoggingBehavior FBSDKLoggingBehaviorGraphAPIDebugWarning = @"graph_api_debug_warning"; -FBSDKLoggingBehavior FBSDKLoggingBehaviorGraphAPIDebugInfo = @"graph_api_debug_info"; -FBSDKLoggingBehavior FBSDKLoggingBehaviorNetworkRequests = @"network_requests"; - -static NSObject *g_tokenCache; -static NSMutableSet *g_loggingBehaviors; -static NSString *const FBSDKSettingsLimitEventAndDataUsage = @"com.facebook.sdk:FBSDKSettingsLimitEventAndDataUsage"; -static NSString *const FBSDKSettingsBitmask = @"com.facebook.sdk:FBSDKSettingsBitmask"; -static BOOL g_disableErrorRecovery; -static NSString *g_userAgentSuffix; -static NSString *g_defaultGraphAPIVersion; -static FBSDKAccessTokenExpirer *g_accessTokenExpirer; - -// -// Warning messages for App Event Flags -// - -static NSString *const autoLogAppEventsEnabledNotSetWarning = - @": Please set a value for FacebookAutoLogAppEventsEnabled. Set the flag to TRUE if you want " - "to collect app install, app launch and in-app purchase events automatically. To request user consent " - "before collecting data, set the flag value to FALSE, then change to TRUE once user consent is received. " - "Learn more: https://developers.facebook.com/docs/app-events/getting-started-app-events-ios#disable-auto-events."; -static NSString *const advertiserIDCollectionEnabledNotSetWarning = - @": You haven't set a value for FacebookAdvertiserIDCollectionEnabled. Set the flag to TRUE if " - "you want to collect Advertiser ID for better advertising and analytics results. To request user consent " - "before collecting data, set the flag value to FALSE, then change to TRUE once user consent is received. " - "Learn more: https://developers.facebook.com/docs/app-events/getting-started-app-events-ios#disable-auto-events."; -static NSString *const advertiserIDCollectionEnabledFalseWarning = - @": The value for FacebookAdvertiserIDCollectionEnabled is currently set to FALSE so you're sending app " - "events without collecting Advertiser ID. This can affect the quality of your advertising and analytics results."; - -@implementation FBSDKSettings - -+ (void)initialize -{ - if (self == [FBSDKSettings class]) { - g_tokenCache = [[FBSDKAccessTokenCache alloc] init]; - g_accessTokenExpirer = [[FBSDKAccessTokenExpirer alloc] init]; - - [FBSDKSettings _logWarnings]; - [FBSDKSettings _logIfSDKSettingsChanged]; - } -} - -#pragma mark - Plist Configuration Settings - -FBSDKSETTINGS_PLIST_CONFIGURATION_SETTING_IMPL(NSString, FacebookAppID, appID, setAppID, nil, NO); -FBSDKSETTINGS_PLIST_CONFIGURATION_SETTING_IMPL(NSString, FacebookUrlSchemeSuffix, appURLSchemeSuffix, setAppURLSchemeSuffix, nil, NO); -FBSDKSETTINGS_PLIST_CONFIGURATION_SETTING_IMPL(NSString, FacebookClientToken, clientToken, setClientToken, nil, NO); -FBSDKSETTINGS_PLIST_CONFIGURATION_SETTING_IMPL(NSString, FacebookDisplayName, displayName, setDisplayName, nil, NO); -FBSDKSETTINGS_PLIST_CONFIGURATION_SETTING_IMPL(NSString, FacebookDomainPart, facebookDomainPart, setFacebookDomainPart, nil, NO); -FBSDKSETTINGS_PLIST_CONFIGURATION_SETTING_IMPL(NSNumber, FacebookJpegCompressionQuality, _JPEGCompressionQualityNumber, _setJPEGCompressionQualityNumber, @0.9, NO); -FBSDKSETTINGS_PLIST_CONFIGURATION_SETTING_IMPL(NSNumber, FacebookAutoInitEnabled, _autoInitEnabled, _setAutoInitEnabled, @1, YES); -FBSDKSETTINGS_PLIST_CONFIGURATION_SETTING_IMPL(NSNumber, FacebookInstrumentEnabled, _instrumentEnabled, _setInstrumentEnabled, @1, YES); -FBSDKSETTINGS_PLIST_CONFIGURATION_SETTING_IMPL(NSNumber, FacebookAutoLogAppEventsEnabled, _autoLogAppEventsEnabled, _setAutoLogAppEventsEnabled, @1, YES); -FBSDKSETTINGS_PLIST_CONFIGURATION_SETTING_IMPL(NSNumber, FacebookAdvertiserIDCollectionEnabled, _advertiserIDCollectionEnabled, _setAdvertiserIDCollectionEnabled, @1, YES); -FBSDKSETTINGS_PLIST_CONFIGURATION_SETTING_IMPL(NSNumber, FacebookCodelessDebugLogEnabled, _codelessDebugLogEnabled, - _setCodelessDebugLogEnabled, @0, YES); - -+ (BOOL)isGraphErrorRecoveryEnabled -{ - return !g_disableErrorRecovery; -} - -+ (void)setGraphErrorRecoveryEnabled:(BOOL)graphErrorRecoveryEnabled -{ - g_disableErrorRecovery = !graphErrorRecoveryEnabled; -} - -+ (CGFloat)JPEGCompressionQuality -{ - return [self _JPEGCompressionQualityNumber].floatValue; -} - -+ (void)setJPEGCompressionQuality:(CGFloat)JPEGCompressionQuality -{ - [self _setJPEGCompressionQualityNumber:@(JPEGCompressionQuality)]; -} - -+ (BOOL)isAutoInitEnabled -{ - return [self _autoInitEnabled].boolValue; -} - -+ (void)setAutoInitEnabled:(BOOL)autoInitEnabled -{ - [self _setAutoInitEnabled:@(autoInitEnabled)]; - if (autoInitEnabled) { - [FBSDKApplicationDelegate initializeSDK:nil]; - } -} - -+ (BOOL)isInstrumentEnabled -{ - return [self _instrumentEnabled].boolValue; -} - -+ (void)setInstrumentEnabled:(BOOL)instrumentEnabled -{ - [self _setInstrumentEnabled:@(instrumentEnabled)]; -} - -+ (BOOL)isCodelessDebugLogEnabled -{ - return [self _codelessDebugLogEnabled].boolValue; -} - -+ (void)setCodelessDebugLogEnabled:(BOOL)codelessDebugLogEnabled -{ - [self _setCodelessDebugLogEnabled:@(codelessDebugLogEnabled)]; -} - -+ (BOOL)isAutoLogAppEventsEnabled -{ - return [self _autoLogAppEventsEnabled].boolValue; -} - -+ (void)setAutoLogAppEventsEnabled:(BOOL)autoLogAppEventsEnabled -{ - [self _setAutoLogAppEventsEnabled:@(autoLogAppEventsEnabled)]; -} - -+ (BOOL)isAdvertiserIDCollectionEnabled -{ - return [self _advertiserIDCollectionEnabled].boolValue; -} - -+ (void)setAdvertiserIDCollectionEnabled:(BOOL)advertiserIDCollectionEnabled -{ - [self _setAdvertiserIDCollectionEnabled:@(advertiserIDCollectionEnabled)]; -} - -+ (BOOL)shouldLimitEventAndDataUsage -{ - NSNumber *storedValue = [[NSUserDefaults standardUserDefaults] objectForKey:FBSDKSettingsLimitEventAndDataUsage]; - if (storedValue == nil) { - return NO; - } - return storedValue.boolValue; -} - -+ (void)setLimitEventAndDataUsage:(BOOL)limitEventAndDataUsage -{ - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - [defaults setObject:@(limitEventAndDataUsage) forKey:FBSDKSettingsLimitEventAndDataUsage]; - [defaults synchronize]; -} - -+ (NSSet *)loggingBehaviors -{ - if (!g_loggingBehaviors) { - NSArray *bundleLoggingBehaviors = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"FacebookLoggingBehavior"]; - if (bundleLoggingBehaviors) { - g_loggingBehaviors = [[NSMutableSet alloc] initWithArray:bundleLoggingBehaviors]; - } else { - // Establish set of default enabled logging behaviors. You can completely disable logging by - // specifying an empty array for FacebookLoggingBehavior in your Info.plist. - g_loggingBehaviors = [[NSMutableSet alloc] initWithObjects:FBSDKLoggingBehaviorDeveloperErrors, nil]; - } - } - return [g_loggingBehaviors copy]; -} - -+ (void)setLoggingBehaviors:(NSSet *)loggingBehaviors -{ - if (![g_loggingBehaviors isEqualToSet:loggingBehaviors]) { - g_loggingBehaviors = [loggingBehaviors mutableCopy]; - - [self updateGraphAPIDebugBehavior]; - } -} - -+ (void)enableLoggingBehavior:(FBSDKLoggingBehavior)loggingBehavior -{ - if (!g_loggingBehaviors) { - [self loggingBehaviors]; - } - [g_loggingBehaviors addObject:loggingBehavior]; - [self updateGraphAPIDebugBehavior]; -} - -+ (void)disableLoggingBehavior:(FBSDKLoggingBehavior)loggingBehavior -{ - if (!g_loggingBehaviors) { - [self loggingBehaviors]; - } - [g_loggingBehaviors removeObject:loggingBehavior]; - [self updateGraphAPIDebugBehavior]; -} - -#pragma mark - Readonly Configuration Settings - -+ (NSString *)sdkVersion -{ - return FBSDK_VERSION_STRING; -} - -#pragma mark - Internal - -+ (NSObject *)accessTokenCache -{ - return g_tokenCache; -} - -+ (void)setAccessTokenCache:(NSObject *)cache -{ - if (g_tokenCache != cache) { - g_tokenCache = cache; - } -} - -+ (NSString *)userAgentSuffix -{ - return g_userAgentSuffix; -} - -+ (void)setUserAgentSuffix:(NSString *)suffix -{ - if (![g_userAgentSuffix isEqualToString:suffix]) { - g_userAgentSuffix = suffix; - } -} - -+ (void)setGraphAPIVersion:(NSString *)version -{ - if (![g_defaultGraphAPIVersion isEqualToString:version]) - { - g_defaultGraphAPIVersion = version; - } -} - -+ (NSString *)defaultGraphAPIVersion -{ - return FBSDK_TARGET_PLATFORM_VERSION; -} - -+ (NSString *)graphAPIVersion -{ - return g_defaultGraphAPIVersion ?: self.defaultGraphAPIVersion; -} - -+ (NSNumber *)appEventSettingsForPlistKey:(NSString *)plistKey - defaultValue:(NSNumber *)defaultValue -{ - return [[[NSBundle mainBundle] objectForInfoDictionaryKey:plistKey] copy] ?: defaultValue; -} - -+ (NSNumber *)appEventSettingsForUserDefaultsKey:(NSString *)userDefaultsKey - defaultValue:(NSNumber *)defaultValue -{ - NSData *data = [[NSUserDefaults standardUserDefaults] objectForKey:userDefaultsKey]; - if ([data isKindOfClass:[NSNumber class]]) { - return (NSNumber *)data; - } - return defaultValue; -} - -+ (void)_logWarnings -{ - NSBundle *mainBundle = [NSBundle mainBundle]; - // Log warnings for App Event Flags - if (![mainBundle objectForInfoDictionaryKey:@"FacebookAutoLogAppEventsEnabled"]) { - NSLog(autoLogAppEventsEnabledNotSetWarning); - } - if (![mainBundle objectForInfoDictionaryKey:@"FacebookAdvertiserIDCollectionEnabled"]) { - NSLog(advertiserIDCollectionEnabledNotSetWarning); - } - if (![FBSDKSettings isAdvertiserIDCollectionEnabled]) { - NSLog(advertiserIDCollectionEnabledFalseWarning); - } -} - -+ (void)_logIfSDKSettingsChanged -{ - NSInteger bitmask = 0; - NSInteger bit = 0; - bitmask |= ([FBSDKSettings isAutoInitEnabled] ? 1 : 0) << bit++; - bitmask |= ([FBSDKSettings isAutoLogAppEventsEnabled] ? 1 : 0) << bit++; - bitmask |= ([FBSDKSettings isAdvertiserIDCollectionEnabled] ? 1 : 0) << bit++; - - NSInteger previousBitmask = [[NSUserDefaults standardUserDefaults] integerForKey:FBSDKSettingsBitmask]; - if (previousBitmask != bitmask) { - [[NSUserDefaults standardUserDefaults] setInteger:bitmask forKey:FBSDKSettingsBitmask]; - - NSArray *keys = @[@"FacebookAutoInitEnabled", - @"FacebookAutoLogAppEventsEnabled", - @"FacebookAdvertiserIDCollectionEnabled"]; - NSArray *defaultValues = @[@YES, @YES, @YES]; - NSInteger initialBitmask = 0; - NSInteger usageBitmask = 0; - for (int i = 0; i < keys.count; i++) { - NSNumber *plistValue = [[NSBundle mainBundle] objectForInfoDictionaryKey:keys[i]]; - BOOL initialValue = [(plistValue ?: defaultValues[i]) boolValue]; - initialBitmask |= (initialValue ? 1 : 0) << i; - usageBitmask |= (plistValue != nil ? 1 : 0) << i; - } - [FBSDKAppEvents logInternalEvent:@"fb_sdk_settings_changed" - parameters:@{@"usage": @(usageBitmask), - @"initial": @(initialBitmask), - @"previous":@(previousBitmask), - @"current": @(bitmask)} - isImplicitlyLogged:YES]; - } -} - -#pragma mark - Internal - Graph API Debug - -+ (void)updateGraphAPIDebugBehavior -{ - // Enable Warnings everytime Info is enabled - if ([g_loggingBehaviors containsObject:FBSDKLoggingBehaviorGraphAPIDebugInfo] - && ![g_loggingBehaviors containsObject:FBSDKLoggingBehaviorGraphAPIDebugWarning]) { - [g_loggingBehaviors addObject:FBSDKLoggingBehaviorGraphAPIDebugWarning]; - } -} - -+ (NSString *)graphAPIDebugParamValue -{ - if ([[self loggingBehaviors] containsObject:FBSDKLoggingBehaviorGraphAPIDebugInfo]) { - return @"info"; - } else if ([[self loggingBehaviors] containsObject:FBSDKLoggingBehaviorGraphAPIDebugWarning]) { - return @"warning"; - } - - return nil; -} - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKTestUsersManager.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKTestUsersManager.h deleted file mode 100644 index 8b5ed3ea3d..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKTestUsersManager.h +++ /dev/null @@ -1,110 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -#import "FBSDKConstants.h" - -NS_ASSUME_NONNULL_BEGIN - -@class FBSDKAccessToken; - -/** - Callback block for returning an array of FBSDKAccessToken instances (and possibly `NSNull` instances); or an error. - */ -typedef void (^FBSDKAccessTokensBlock)(NSArray *tokens, NSError *_Nullable error) -NS_SWIFT_NAME(AccessTokensBlock); - - -/** - Provides methods for managing test accounts for testing Facebook integration. - - - Facebook allows developers to create test accounts for testing their applications' - Facebook integration (see https://developers.facebook.com/docs/test_users/). This class - simplifies use of these accounts for writing tests. It is not designed for use in - production application code. - - This class will make Graph API calls on behalf of your app to manage test accounts and requires - an app id and app secret. You will typically use this class to write unit or integration tests. - Make sure you NEVER include your app secret in your production app. - */ -NS_SWIFT_NAME(TestUsersManager) -@interface FBSDKTestUsersManager : NSObject - -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; - -/** - construct or return the shared instance - @param appID the Facebook app id - @param appSecret the Facebook app secret - */ -+ (instancetype)sharedInstanceForAppID:(NSString *)appID appSecret:(NSString *)appSecret -NS_SWIFT_NAME(shared(forAppID:appSecret:)); - -/** - retrieve FBSDKAccessToken instances for test accounts with the specific permissions. - @param arraysOfPermissions an array of permissions sets, such as @[ [NSSet setWithObject:@"email"], [NSSet setWithObject:@"user_birthday"]] - if you needed two test accounts with email and birthday permissions, respectively. You can pass in empty nested sets - if you need two arbitrary test accounts. - @param createIfNotFound if YES, new test accounts are created if no test accounts existed that fit the permissions - requirement - @param handler the callback to invoke which will return an array of `FBAccessTokenData` instances or an `NSError`. - If param `createIfNotFound` is NO, the array may contain `[NSNull null]` instances. - - - If you are requesting test accounts with differing number of permissions, try to order - `arrayOfPermissionsArrays` so that the most number of permissions come first to minimize creation of new - test accounts. - */ -- (void)requestTestAccountTokensWithArraysOfPermissions:(NSArray *> *)arraysOfPermissions - createIfNotFound:(BOOL)createIfNotFound - completionHandler:(nullable FBSDKAccessTokensBlock)handler -NS_SWIFT_NAME(requestTestAccountTokens(withPermissions:createIfNotFound:completionHandler:)); - -/** - add a test account with the specified permissions - @param permissions the set of permissions, e.g., [NSSet setWithObjects:@"email", @"user_friends"] - @param handler the callback handler - */ -- (void)addTestAccountWithPermissions:(NSSet *)permissions - completionHandler:(nullable FBSDKAccessTokensBlock)handler; - -/** - remove a test account for the given user id - @param userId the user id - @param handler the callback handler - */ -- (void)removeTestAccount:(NSString *)userId - completionHandler:(nullable FBSDKErrorBlock)handler; - -/** - Make two test users friends with each other. - @param first the token of the first user - @param second the token of the second user - @param callback the callback handler - */ -- (void)makeFriendsWithFirst:(FBSDKAccessToken *)first - second:(FBSDKAccessToken *)second - callback:(nullable FBSDKErrorBlock)callback -NS_SWIFT_NAME(makeFriends(first:second:callback:)); - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKTestUsersManager.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKTestUsersManager.m deleted file mode 100644 index 32a15ed1b7..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKTestUsersManager.m +++ /dev/null @@ -1,330 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKTestUsersManager.h" - -#import "FBSDKCoreKit+Internal.h" - -static NSString *const kFBGraphAPITestUsersPathFormat = @"%@/accounts/test-users"; -static NSString *const kAccountsDictionaryTokenKey = @"access_token"; -static NSString *const kAccountsDictionaryPermissionsKey = @"permissions"; -static NSMutableDictionary *gInstancesDictionary; - -@interface FBSDKTestUsersManager() -- (instancetype)initWithAppID:(NSString *)appID appSecret:(NSString *)appSecret NS_DESIGNATED_INITIALIZER; -@end - -@implementation FBSDKTestUsersManager -{ - NSString *_appID; - NSString *_appSecret; - // dictionary with format like: - // { user_id : { kAccountsDictionaryTokenKey : "token", - // kAccountsDictionaryPermissionsKey : [ permissions ] } - NSMutableDictionary *_accounts; -} - -- (instancetype)initWithAppID:(NSString *)appID appSecret:(NSString *)appSecret { - if ((self = [super init])) { - _appID = [appID copy]; - _appSecret = [appSecret copy]; - _accounts = [NSMutableDictionary dictionary]; - } - return self; -} - -+ (instancetype)sharedInstanceForAppID:(NSString *)appID appSecret:(NSString *)appSecret { - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - gInstancesDictionary = [NSMutableDictionary dictionary]; - }); - - NSString *instanceKey = [NSString stringWithFormat:@"%@|%@", appID, appSecret]; - if (!gInstancesDictionary[instanceKey]) { - gInstancesDictionary[instanceKey] = [[FBSDKTestUsersManager alloc] initWithAppID:appID appSecret:appSecret]; - } - return gInstancesDictionary[instanceKey]; -} - -- (void)requestTestAccountTokensWithArraysOfPermissions:(NSArray *> *)arraysOfPermissions - createIfNotFound:(BOOL)createIfNotFound - completionHandler:(FBSDKAccessTokensBlock)handler { - arraysOfPermissions = arraysOfPermissions ?: @[[NSSet set]]; - - // wrap work in a block so that we can chain it to after a fetch of existing accounts if we need to. - void (^helper)(NSError *) = ^(NSError *error){ - if (error) { - if (handler) { - handler(@[], error); - } - return; - } - NSMutableArray *tokenDatum = [NSMutableArray arrayWithCapacity:arraysOfPermissions.count]; - NSMutableSet *collectedUserIds = [NSMutableSet setWithCapacity:arraysOfPermissions.count]; - __block BOOL canInvokeHandler = YES; - __weak id weakSelf = self; - [arraysOfPermissions enumerateObjectsUsingBlock:^(NSSet *desiredPermissions, NSUInteger idx, BOOL *stop) { - NSArray* userIdAndTokenPair = [self userIdAndTokenOfExistingAccountWithPermissions:desiredPermissions skip:collectedUserIds]; - if (!userIdAndTokenPair) { - if (createIfNotFound) { - [self addTestAccountWithPermissions:desiredPermissions - completionHandler:^(NSArray *tokens, NSError *addError) { - if (addError) { - if (handler) { - handler(@[], addError); - } - } else { - [weakSelf requestTestAccountTokensWithArraysOfPermissions:arraysOfPermissions - createIfNotFound:createIfNotFound - completionHandler:handler]; - } - }]; - // stop the enumeration (ane flag so that callback to addTestAccount* will resolve our handler now). - canInvokeHandler = NO; - *stop = YES; - return; - } else { - [tokenDatum addObject:[NSNull null]]; - } - } else { - NSString *userId = userIdAndTokenPair[0]; - NSString *tokenString = userIdAndTokenPair[1]; - [collectedUserIds addObject:userId]; - [tokenDatum addObject:[self tokenDataForTokenString:tokenString - permissions:desiredPermissions - userId:userId]]; - } - }]; - - if (canInvokeHandler && handler) { - handler(tokenDatum, nil); - } - }; - if (_accounts.count == 0) { - [self fetchExistingTestAccountsWithAfterCursor:nil handler:helper]; - } else { - helper(NULL); - } -} - -- (void)addTestAccountWithPermissions:(NSSet *)permissions - completionHandler:(FBSDKAccessTokensBlock)handler { - NSDictionary *params = @{ - @"installed" : @"true", - @"permissions" : [permissions.allObjects componentsJoinedByString:@","], - @"access_token" : self.appAccessToken - }; - FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:[NSString stringWithFormat:kFBGraphAPITestUsersPathFormat, _appID] - parameters:params - tokenString:[self appAccessToken] - version:nil - HTTPMethod:FBSDKHTTPMethodPOST]; - [request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { - if (error) { - if (handler) { - handler(@[], error); - } - } else { - NSMutableDictionary *accountData = [NSMutableDictionary dictionaryWithCapacity:2]; - accountData[kAccountsDictionaryPermissionsKey] = [NSSet setWithSet:permissions]; - accountData[kAccountsDictionaryTokenKey] = result[@"access_token"]; - self->_accounts[result[@"id"]] = accountData; - - if (handler) { - FBSDKAccessToken *token = [self tokenDataForTokenString:accountData[kAccountsDictionaryTokenKey] - permissions:permissions - userId:result[@"id"]]; - handler(@[token], nil); - } - } - }]; -} - -- (void)makeFriendsWithFirst:(FBSDKAccessToken *)first second:(FBSDKAccessToken *)second callback:(FBSDKErrorBlock)callback -{ - __block int expectedCount = 2; - void (^complete)(NSError *) = ^(NSError *error) { - // ignore if they're already friends or pending request - if ([error.userInfo[FBSDKGraphRequestErrorGraphErrorCodeKey] integerValue] == 522 || - [error.userInfo[FBSDKGraphRequestErrorGraphErrorCodeKey] integerValue] == 520) { - error = nil; - } - if (--expectedCount == 0 || error) { - callback(error); - } - }; - FBSDKGraphRequest *one = [[FBSDKGraphRequest alloc] initWithGraphPath:[NSString stringWithFormat:@"%@/friends/%@", first.userID, second.userID] - parameters:@{} - tokenString:first.tokenString - version:nil - HTTPMethod:FBSDKHTTPMethodPOST]; - FBSDKGraphRequest *two = [[FBSDKGraphRequest alloc] initWithGraphPath:[NSString stringWithFormat:@"%@/friends/%@", second.userID, first.userID] - parameters:@{} - tokenString:second.tokenString - version:nil - HTTPMethod:FBSDKHTTPMethodPOST]; - FBSDKGraphRequestConnection *conn = [[FBSDKGraphRequestConnection alloc] init]; - [conn addRequest:one - batchEntryName:@"first" - completionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { - complete(error); - }]; - [conn addRequest:two - batchParameters:@{ @"depends_on" : @"first"} - completionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { - complete(error); - }]; - [conn start]; -} - -- (void)removeTestAccount:(NSString *)userId completionHandler:(FBSDKErrorBlock)handler { - FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:userId - parameters:@{} - tokenString:self.appAccessToken - version:nil - HTTPMethod:@"DELETE"]; - [request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { - if (handler) { - handler(error); - } - }]; - [_accounts removeObjectForKey:userId]; -} - -#pragma mark - private methods -- (FBSDKAccessToken *)tokenDataForTokenString:(NSString *)tokenString permissions:(NSSet *)permissions userId:(NSString *)userId{ - return [[FBSDKAccessToken alloc] initWithTokenString:tokenString - permissions:permissions.allObjects - declinedPermissions:@[] - expiredPermissions:@[] - appID:_appID - userID:userId - expirationDate:nil - refreshDate:nil - dataAccessExpirationDate:nil - graphDomain:nil]; -} - -- (NSArray *)userIdAndTokenOfExistingAccountWithPermissions:(NSSet *)permissions skip:(NSSet *)setToSkip { - __block NSString *userId = nil; - __block NSString *token = nil; - - [_accounts enumerateKeysAndObjectsUsingBlock:^(NSString *key, NSDictionary *accountData, BOOL *stop) { - if ([setToSkip containsObject:key]) { - return; - } - NSSet *accountPermissions = accountData[kAccountsDictionaryPermissionsKey]; - if ([permissions isSubsetOfSet:accountPermissions]) { - token = accountData[kAccountsDictionaryTokenKey]; - userId = key; - *stop = YES; - } - }]; - if (userId && token) { - return @[userId, token]; - } else { - return nil; - } -} - -- (NSString *)appAccessToken { - return [NSString stringWithFormat:@"%@|%@", _appID, _appSecret]; -} - -- (void)fetchExistingTestAccountsWithAfterCursor:(NSString *)after handler:(FBSDKErrorBlock)handler { - FBSDKGraphRequestConnection *connection = [[FBSDKGraphRequestConnection alloc] init]; - FBSDKGraphRequest *requestForAccountIds = [[FBSDKGraphRequest alloc] initWithGraphPath:[NSString stringWithFormat:kFBGraphAPITestUsersPathFormat, _appID] - parameters:@{@"limit" : @"50", - @"after" : after ?: @"", - @"fields": @"" - } - tokenString:self.appAccessToken - version:nil - HTTPMethod:FBSDKHTTPMethodGET]; - __block NSString *afterCursor = nil; - __block NSInteger expectedTestAccounts = 0; - FBSDKGraphRequestConnection *permissionConnection = [[FBSDKGraphRequestConnection alloc] init]; - [connection addRequest:requestForAccountIds completionHandler:^(FBSDKGraphRequestConnection *innerConnection, id result, NSError *error) { - if (error) { - if (handler) { - handler(error); - } - // on errors, clear out accounts since it may be in a bad state - [self->_accounts removeAllObjects]; - return; - } else { - for (NSDictionary *account in result[@"data"]) { - NSString *userId = account[@"id"]; - NSString *token = account[@"access_token"]; - if (userId && token) { - self->_accounts[userId] = [NSMutableDictionary dictionaryWithCapacity:2]; - self->_accounts[userId][kAccountsDictionaryTokenKey] = token; - expectedTestAccounts++; - [permissionConnection addRequest:[[FBSDKGraphRequest alloc] initWithGraphPath:[NSString stringWithFormat:@"%@?fields=permissions", userId] - parameters:@{} - tokenString:self.appAccessToken - version:nil - HTTPMethod:FBSDKHTTPMethodGET] - completionHandler:^(FBSDKGraphRequestConnection *innerConnection2, id innerResult, NSError *innerError) { - if (self->_accounts.count == 0) { - // indicates an earlier error that was already passed to handler, so just short circuit. - return; - } - if (innerError) { - if (handler) { - handler(innerError); - } - [self->_accounts removeAllObjects]; - return; - } else { - NSMutableSet *grantedPermissions = [NSMutableSet set]; - NSArray *resultPermissionsDictionaries = innerResult[@"permissions"][@"data"]; - [resultPermissionsDictionaries enumerateObjectsUsingBlock:^(NSDictionary *obj, NSUInteger idx, BOOL *stop) { - if ([obj[@"status"] isEqualToString:@"granted"]) { - [grantedPermissions addObject:obj[@"permission"]]; - } - }]; - self->_accounts[userId][kAccountsDictionaryPermissionsKey] = grantedPermissions; - } - expectedTestAccounts--; - if (!expectedTestAccounts) { - if (afterCursor) { - [self fetchExistingTestAccountsWithAfterCursor:afterCursor handler:handler]; - } else if (handler) { - handler(nil); - } - } - } - ]; - } - } - afterCursor = result[@"paging"][@"cursors"][@"after"]; - } - - if (expectedTestAccounts) { - // finished fetching ids and tokens, now kick off the request for all the permissions - [permissionConnection start]; - } else { - if (handler) { - handler(nil); - } - } - }]; - [connection start]; -} -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKURL.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKURL.h deleted file mode 100644 index 969d8e0cc4..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKURL.h +++ /dev/null @@ -1,104 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import - -NS_ASSUME_NONNULL_BEGIN - -@class FBSDKAppLink; - -/** - Provides a set of utilities for working with NSURLs, such as parsing of query parameters - and handling for App Link requests. - */ -NS_SWIFT_NAME(AppLinkURL) -@interface FBSDKURL : NSObject - -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; - -/** - Creates a link target from a raw URL. - On success, this posts the FBSDKAppLinkParseEventName measurement event. If you are constructing the FBSDKURL within your application delegate's - application:openURL:sourceApplication:annotation:, you should instead use URLWithInboundURL:sourceApplication: - to support better FBSDKMeasurementEvent notifications - @param url The instance of `NSURL` to create FBSDKURL from. - */ -+ (instancetype)URLWithURL:(NSURL *)url -NS_SWIFT_NAME(init(url:)); - -/** - Creates a link target from a raw URL received from an external application. This is typically called from the app delegate's - application:openURL:sourceApplication:annotation: and will post the FBSDKAppLinkNavigateInEventName measurement event. - @param url The instance of `NSURL` to create FBSDKURL from. - @param sourceApplication the bundle ID of the app that is requesting your app to open the URL. The same sourceApplication in application:openURL:sourceApplication:annotation: - */ -+ (instancetype)URLWithInboundURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication -NS_SWIFT_NAME(init(inboundURL:sourceApplication:)); - -/** - Gets the target URL. If the link is an App Link, this is the target of the App Link. - Otherwise, it is the url that created the target. - */ -@property (nonatomic, strong, readonly) NSURL *targetURL; - -/** - Gets the query parameters for the target, parsed into an NSDictionary. - */ -@property (nonatomic, strong, readonly) NSDictionary *targetQueryParameters; - -/** - If this link target is an App Link, this is the data found in al_applink_data. - Otherwise, it is nil. - */ -@property (nonatomic, strong, readonly, nullable) NSDictionary *appLinkData; - -/** - If this link target is an App Link, this is the data found in extras. - */ -@property (nonatomic, strong, readonly, nullable) NSDictionary *appLinkExtras; - -/** - The App Link indicating how to navigate back to the referer app, if any. - */ -@property (nonatomic, strong, readonly, nullable) FBSDKAppLink *appLinkReferer; - -/** - The URL that was used to create this FBSDKURL. - */ -@property (nonatomic, strong, readonly) NSURL *inputURL; - -/** - The query parameters of the inputURL, parsed into an NSDictionary. - */ -@property (nonatomic, strong, readonly) NSDictionary *inputQueryParameters; - -/** - The flag indicating whether the URL comes from auto app link -*/ -@property (nonatomic, readonly, getter=isAutoAppLink) BOOL isAutoAppLink; - -@end - -NS_ASSUME_NONNULL_END - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKURL.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKURL.m deleted file mode 100644 index 958f4f7fda..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKURL.m +++ /dev/null @@ -1,165 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKURL_Internal.h" - -#import "FBSDKAppLinkTarget.h" -#import "FBSDKAppLink_Internal.h" -#import "FBSDKCoreKit+Internal.h" -#import "FBSDKMeasurementEvent_Internal.h" -#import "FBSDKSettings.h" - -NSString *const AutoAppLinkFlagKey = @"is_auto_applink"; - -@implementation FBSDKURL - -- (instancetype)initWithURL:(NSURL *)url forOpenInboundURL:(BOOL)forOpenURLEvent sourceApplication:(NSString *)sourceApplication forRenderBackToReferrerBar:(BOOL)forRenderBackToReferrerBar { - self = [super init]; - if (!self) return nil; - - _inputURL = url; - _targetURL = url; - - // Parse the query string parameters for the base URL - NSDictionary *baseQuery = [FBSDKURL queryParametersForURL:url]; - _inputQueryParameters = baseQuery; - _targetQueryParameters = baseQuery; - - // Check for applink_data - NSString *appLinkDataString = baseQuery[FBSDKAppLinkDataParameterName]; - if (appLinkDataString) { - // Try to parse the JSON - NSError *error = nil; - NSDictionary *applinkData = - [NSJSONSerialization JSONObjectWithData:[appLinkDataString dataUsingEncoding:NSUTF8StringEncoding] - options:0 - error:&error]; - if (!error && [applinkData isKindOfClass:[NSDictionary class]]) { - // If the version is not specified, assume it is 1. - NSString *version = applinkData[FBSDKAppLinkVersionKeyName] ?: @"1.0"; - NSString *target = applinkData[FBSDKAppLinkTargetKeyName]; - if ([version isKindOfClass:[NSString class]] && - [version isEqual:FBSDKAppLinkVersion]) { - // There's applink data! The target should actually be the applink target. - _appLinkData = applinkData; - id applinkExtras = applinkData[FBSDKAppLinkExtrasKeyName]; - if (applinkExtras && [applinkExtras isKindOfClass:[NSDictionary class]]) { - _appLinkExtras = applinkExtras; - } - _targetURL = ([target isKindOfClass:[NSString class]] ? [NSURL URLWithString:target] : url); - _targetQueryParameters = [FBSDKURL queryParametersForURL:_targetURL]; - - NSDictionary *refererAppLink = _appLinkData[FBSDKAppLinkRefererAppLink]; - NSString *refererURLString = refererAppLink[FBSDKAppLinkRefererUrl]; - NSString *refererAppName = refererAppLink[FBSDKAppLinkRefererAppName]; - - if (refererURLString && refererAppName) { - FBSDKAppLinkTarget *appLinkTarget = [FBSDKAppLinkTarget appLinkTargetWithURL:[NSURL URLWithString:refererURLString] - appStoreId:nil - appName:refererAppName]; - _appLinkReferer = [FBSDKAppLink appLinkWithSourceURL:[NSURL URLWithString:refererURLString] - targets:@[ appLinkTarget ] - webURL:nil - isBackToReferrer:YES]; - } - - // Raise Measurement Event - NSString *const EVENT_YES_VAL = @"1"; - NSString *const EVENT_NO_VAL = @"0"; - NSMutableDictionary *logData = [[NSMutableDictionary alloc] init]; - logData[@"version"] = version; - if (refererURLString) { - logData[@"refererURL"] = refererURLString; - } - if (refererAppName) { - logData[@"refererAppName"] = refererAppName; - } - if (sourceApplication) { - logData[@"sourceApplication"] = sourceApplication; - } - if (_targetURL.absoluteString) { - logData[@"targetURL"] = _targetURL.absoluteString; - } - if (_inputURL.absoluteString) { - logData[@"inputURL"] = _inputURL.absoluteString; - } - if (_inputURL.scheme) { - logData[@"inputURLScheme"] = _inputURL.scheme; - } - logData[@"forRenderBackToReferrerBar"] = forRenderBackToReferrerBar ? EVENT_YES_VAL : EVENT_NO_VAL; - logData[@"forOpenUrl"] = forOpenURLEvent ? EVENT_YES_VAL : EVENT_NO_VAL; - [FBSDKMeasurementEvent postNotificationForEventName:FBSDKAppLinkParseEventName args:logData]; - if (forOpenURLEvent) { - [FBSDKMeasurementEvent postNotificationForEventName:FBSDKAppLinkNavigateInEventName args:logData]; - } - } - } - } - - return self; -} - -- (BOOL)isAutoAppLink { - NSString *host = self.targetURL.host; - NSString *scheme = self.targetURL.scheme; - NSString *expectedHost = @"applinks"; - NSString *expectedScheme = [NSString stringWithFormat:@"fb%@", FBSDKSettings.appID]; - BOOL autoFlag = [self.appLinkData[AutoAppLinkFlagKey] boolValue]; - return autoFlag && [expectedHost isEqual:host] && [expectedScheme isEqual:scheme]; -} - -+ (instancetype)URLWithURL:(NSURL *)url { - return [[FBSDKURL alloc] initWithURL:url forOpenInboundURL:NO sourceApplication:nil forRenderBackToReferrerBar:NO]; -} - -+ (instancetype)URLWithInboundURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication { - return [[FBSDKURL alloc] initWithURL:url forOpenInboundURL:YES sourceApplication:sourceApplication forRenderBackToReferrerBar:NO]; -} - -+ (instancetype)URLForRenderBackToReferrerBarURL:(NSURL *)url { - return [[FBSDKURL alloc] initWithURL:url forOpenInboundURL:NO sourceApplication:nil forRenderBackToReferrerBar:YES]; -} - -+ (NSDictionary *)queryParametersForURL:(NSURL *)url { - NSMutableDictionary *parameters = [NSMutableDictionary dictionary]; - NSString *query = url.query; - if ([query isEqualToString:@""]) { - return @{}; - } - NSArray *queryComponents = [query componentsSeparatedByString:@"&"]; - for (NSString *component in queryComponents) { - NSRange equalsLocation = [component rangeOfString:@"="]; - if (equalsLocation.location == NSNotFound) { - // There's no equals, so associate the key with NSNull - parameters[[FBSDKBasicUtility URLDecode:component]] = [NSNull null]; - } else { - NSString *key = [FBSDKBasicUtility URLDecode:[component substringToIndex:equalsLocation.location]]; - NSString *value = [FBSDKBasicUtility URLDecode:[component substringFromIndex:equalsLocation.location + 1]]; - parameters[key] = value; - } - } - return [NSDictionary dictionaryWithDictionary:parameters]; -} - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKUtility.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKUtility.h deleted file mode 100644 index 13c4a5dd90..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKUtility.h +++ /dev/null @@ -1,91 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - Class to contain common utility methods. - */ -NS_SWIFT_NAME(Utility) -@interface FBSDKUtility : NSObject - -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; - -/** - Parses a query string into a dictionary. - @param queryString The query string value. - @return A dictionary with the key/value pairs. - */ -+ (NSDictionary *)dictionaryWithQueryString:(NSString *)queryString -NS_SWIFT_NAME(dictionary(withQuery:)); - -/** - Constructs a query string from a dictionary. - @param dictionary The dictionary with key/value pairs for the query string. - @param errorRef If an error occurs, upon return contains an NSError object that describes the problem. - @return Query string representation of the parameters. - */ -+ (NSString *)queryStringWithDictionary:(NSDictionary *)dictionary - error:(NSError **)errorRef -NS_SWIFT_NAME(query(from:)) -__attribute__((swift_error(nonnull_error))); - -/** - Decodes a value from an URL. - @param value The value to decode. - @return The decoded value. - */ -+ (NSString *)URLDecode:(NSString *)value -NS_SWIFT_NAME(decode(urlString:)); - -/** - Encodes a value for an URL. - @param value The value to encode. - @return The encoded value. - */ -+ (NSString *)URLEncode:(NSString *)value -NS_SWIFT_NAME(encode(urlString:)); - -/** - Creates a timer using Grand Central Dispatch. - @param interval The interval to fire the timer, in seconds. - @param block The code block to execute when timer is fired. - @return The dispatch handle. - */ -+ (dispatch_source_t)startGCDTimerWithInterval:(double)interval block:(dispatch_block_t)block; - -/** - Stop a timer that was started by startGCDTimerWithInterval. - @param timer The dispatch handle received from startGCDTimerWithInterval. - */ -+ (void)stopGCDTimer:(dispatch_source_t)timer; - -/** - Get SHA256 hased string of NSString/NSData - - @param input The data that needs to be hashed, it could be NSString or NSData. - */ -+ (nullable NSString *)SHA256Hash:(nullable NSObject *)input -NS_SWIFT_NAME(sha256Hash(_:)); - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKUtility.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKUtility.m deleted file mode 100644 index 8a32c665e0..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/FBSDKUtility.m +++ /dev/null @@ -1,97 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKUtility.h" - -#import - -#import "FBSDKInternalUtility.h" - -@implementation FBSDKUtility - -+ (NSDictionary *)dictionaryWithQueryString:(NSString *)queryString -{ - return [FBSDKBasicUtility dictionaryWithQueryString:queryString]; -} - -+ (NSString *)queryStringWithDictionary:(NSDictionary *)dictionary error:(NSError **)errorRef -{ - return [FBSDKBasicUtility queryStringWithDictionary:dictionary error:errorRef invalidObjectHandler:NULL]; -} - -+ (NSString *)URLDecode:(NSString *)value -{ - return [FBSDKBasicUtility URLDecode:value]; -} - -+ (NSString *)URLEncode:(NSString *)value -{ - return [FBSDKBasicUtility URLEncode:value]; -} - -+ (dispatch_source_t)startGCDTimerWithInterval:(double)interval block:(dispatch_block_t)block -{ - dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, // source type - 0, // handle - 0, // mask - dispatch_get_main_queue()); // queue - - dispatch_source_set_timer(timer, // dispatch source - dispatch_time(DISPATCH_TIME_NOW, interval * NSEC_PER_SEC), // start - interval * NSEC_PER_SEC, // interval - 0 * NSEC_PER_SEC); // leeway - - dispatch_source_set_event_handler(timer, block); - - dispatch_resume(timer); - - return timer; -} - -+ (void)stopGCDTimer:(dispatch_source_t)timer -{ - if (timer) { - dispatch_source_cancel(timer); - } -} - -+ (NSString *)SHA256Hash:(NSObject *)input -{ - NSData *data = nil; - - if ([input isKindOfClass:[NSData class]]) { - data = (NSData *)input; - } else if ([input isKindOfClass:[NSString class]]) { - data = [(NSString *)input dataUsingEncoding:NSUTF8StringEncoding]; - } - - if (!data) { - return nil; - } - - uint8_t digest[CC_SHA256_DIGEST_LENGTH]; - CC_SHA256(data.bytes, (CC_LONG)data.length, digest); - NSMutableString *hashed = [NSMutableString stringWithCapacity:CC_SHA256_DIGEST_LENGTH * 2]; - for (int i = 0; i < CC_SHA256_DIGEST_LENGTH; i++) { - [hashed appendFormat:@"%02x", digest[i]]; - } - - return [hashed copy]; -} - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphErrorRecoveryProcessor.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphErrorRecoveryProcessor.h deleted file mode 100644 index e57c797c4c..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphErrorRecoveryProcessor.h +++ /dev/null @@ -1,124 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import - -#ifdef BUCK -#import -#else -#import "FBSDKConstants.h" -#endif - -NS_ASSUME_NONNULL_BEGIN - -@class FBSDKGraphErrorRecoveryProcessor; -@class FBSDKGraphRequest; - -/** - Defines a delegate for `FBSDKGraphErrorRecoveryProcessor`. - */ -NS_SWIFT_NAME(GraphErrorRecoveryProcessorDelegate) -@protocol FBSDKGraphErrorRecoveryProcessorDelegate - -/** - Indicates the error recovery has been attempted. - @param processor the processor instance. - @param didRecover YES if the recovery was successful. - @param error the error that that was attempted to be recovered from. - */ -- (void)processorDidAttemptRecovery:(FBSDKGraphErrorRecoveryProcessor *)processor - didRecover:(BOOL)didRecover - error:(nullable NSError *)error; - -@optional -/** - Indicates the processor is about to process the error. - @param processor the processor instance. - @param error the error is about to be processed. - - return NO if the processor should not process the error. For example, - if you want to prevent alerts of localized messages but otherwise perform retries and recoveries, - you could return NO for errors where userInfo[FBSDKGraphRequestErrorKey] equal to FBSDKGraphRequestErrorOther - */ -- (BOOL)processorWillProcessError:(FBSDKGraphErrorRecoveryProcessor *)processor - error:(nullable NSError *)error; - -@end - -NS_ASSUME_NONNULL_END - -NS_ASSUME_NONNULL_BEGIN - -/** - Defines a type that can process Facebook NSErrors with best practices. - - Facebook NSErrors can contain FBSDKErrorRecoveryAttempting instances to recover from errors, or - localized messages to present to the user. This class will process the instances as follows: - - 1. If the error is temporary as indicated by FBSDKGraphRequestErrorKey, assume the recovery succeeded and - notify the delegate. - 2. If a FBSDKErrorRecoveryAttempting instance is available, display an alert (dispatched to main thread) - with the recovery options and call the instance's [ attemptRecoveryFromError:optionIndex:...]. - 3. If a FBSDKErrorRecoveryAttempting is not available, check the userInfo for FBSDKLocalizedErrorDescriptionKey - and present that in an alert (dispatched to main thread). - - By default, FBSDKGraphRequests use this type to process errors and retry the request upon a successful - recovery. - - Note that Facebook recovery attempters can present UI or even cause app switches (such as to login). Any such - work is dispatched to the main thread (therefore your request handlers may then run on the main thread). - - Login recovery requires FBSDKLoginKit. Login will prompt the user - for all permissions last granted. If any are declined on the new request, the recovery is not successful but - the `[FBSDKAccessToken currentAccessToken]` might still have been updated. - . - */ -NS_SWIFT_UNAVAILABLE("") -@interface FBSDKGraphErrorRecoveryProcessor : NSObject - -/** - Gets the delegate. Note this is a strong reference, and is nil'ed out after recovery is complete. - */ -@property (nonatomic, strong, readonly, nullable) iddelegate; - -/** - Attempts to process the error, return YES if the error can be processed. - @param error the error to process. - @param request the related request that may be reissued. - @param delegate the delegate that will be retained until recovery is complete. - */ -- (BOOL)processError:(NSError *)error - request:(FBSDKGraphRequest *)request - delegate:(nullable id)delegate; - -/** - The callback for FBSDKErrorRecoveryAttempting - @param didRecover if the recovery succeeded - @param contextInfo unused - */ -- (void)didPresentErrorWithRecovery:(BOOL)didRecover contextInfo:(nullable void *)contextInfo; - -@end - -NS_ASSUME_NONNULL_END - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphErrorRecoveryProcessor.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphErrorRecoveryProcessor.m deleted file mode 100644 index cd15ffb731..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphErrorRecoveryProcessor.m +++ /dev/null @@ -1,153 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKGraphErrorRecoveryProcessor.h" - -#import "FBSDKCoreKit+Internal.h" -#import "FBSDKErrorRecoveryAttempter.h" - -@interface FBSDKGraphErrorRecoveryProcessor() -{ - FBSDKErrorRecoveryAttempter *_recoveryAttempter; - NSError *_error; -} - -@property (nonatomic, strong, nullable) iddelegate; - -@end - -@implementation FBSDKGraphErrorRecoveryProcessor - -- (BOOL)processError:(NSError *)error request:(FBSDKGraphRequest *)request delegate:(id)delegate -{ - self.delegate = delegate; - if ([self.delegate respondsToSelector:@selector(processorWillProcessError:error:)]) { - if (![self.delegate processorWillProcessError:self error:error]) { - return NO; - } - } - - FBSDKGraphRequestError errorCategory = [error.userInfo[FBSDKGraphRequestErrorKey] unsignedIntegerValue]; - switch (errorCategory) { - case FBSDKGraphRequestErrorTransient : - [self.delegate processorDidAttemptRecovery:self didRecover:YES error:nil]; - self.delegate = nil; - return YES; - case FBSDKGraphRequestErrorRecoverable : - if ([request.tokenString isEqualToString:[FBSDKAccessToken currentAccessToken].tokenString]) { - _recoveryAttempter = error.recoveryAttempter; - - // Set up a block to do the typical recovery work so that we can chain it for ios auth special cases. - // the block returns YES if recovery UI is started (meaning we wait for the alertviewdelegate to resume control flow). - BOOL (^standardRecoveryWork)(void) = ^BOOL{ - NSArray *recoveryOptionsTitles = error.userInfo[NSLocalizedRecoveryOptionsErrorKey]; - if (recoveryOptionsTitles.count > 0 && self->_recoveryAttempter) { - NSString *recoverySuggestion = error.userInfo[NSLocalizedRecoverySuggestionErrorKey]; - self->_error = error; - dispatch_async(dispatch_get_main_queue(), ^{ - [self displayAlertWithRecoverySuggestion:recoverySuggestion recoveryOptionsTitles:recoveryOptionsTitles]; - }); - return YES; - } - return NO; - }; - - return standardRecoveryWork(); - } - return NO; - case FBSDKGraphRequestErrorOther : - if ([request.tokenString isEqualToString:[FBSDKAccessToken currentAccessToken].tokenString]) { - NSString *message = error.userInfo[FBSDKErrorLocalizedDescriptionKey]; - NSString *title = error.userInfo[FBSDKErrorLocalizedTitleKey]; - if (message) { - dispatch_async(dispatch_get_main_queue(), ^{ - NSString *localizedOK = - NSLocalizedStringWithDefaultValue(@"ErrorRecovery.Alert.OK", @"FacebookSDK", [FBSDKInternalUtility bundleForStrings], - @"OK", - @"The title of the label to dismiss the alert when presenting user facing error messages"); - [self displayAlertWithTitle:title message:message cancelButtonTitle:localizedOK]; - }); - } - } - return NO; - } - return NO; -} - -#pragma mark - UIAlertController support - -- (void)displayAlertWithRecoverySuggestion:(NSString *)recoverySuggestion recoveryOptionsTitles:(NSArray *)recoveryOptionsTitles -{ - UIAlertController *alertController = [UIAlertController alertControllerWithTitle:nil - message:recoverySuggestion - preferredStyle:UIAlertControllerStyleAlert]; - for (NSUInteger i = 0; i < recoveryOptionsTitles.count; i++) { - NSString *title = recoveryOptionsTitles[i]; - UIAlertAction *option = [UIAlertAction actionWithTitle:title - style:UIAlertActionStyleDefault - handler:^(UIAlertAction * _Nonnull action) { - [self->_recoveryAttempter attemptRecoveryFromError:self->_error - optionIndex:i - delegate:self - didRecoverSelector:@selector(didPresentErrorWithRecovery:contextInfo:) - contextInfo:nil]; - }]; - [alertController addAction:option]; - } - UIViewController *topMostViewController = [FBSDKInternalUtility topMostViewController]; - [topMostViewController presentViewController:alertController - animated:YES - completion:nil]; -} - -- (void)displayAlertWithTitle:(NSString *)title message:(NSString *)message cancelButtonTitle:(NSString *)localizedOK -{ - UIAlertController *alertController = [UIAlertController alertControllerWithTitle:nil - message:message - preferredStyle:UIAlertControllerStyleAlert]; - UIAlertAction *OKAction = [UIAlertAction actionWithTitle:localizedOK - style:UIAlertActionStyleCancel - handler:^(UIAlertAction * _Nonnull action) { - [self->_recoveryAttempter attemptRecoveryFromError:self->_error - optionIndex:0 - delegate:self - didRecoverSelector:@selector(didPresentErrorWithRecovery:contextInfo:) - contextInfo:nil]; - }]; - [alertController addAction:OKAction]; - UIViewController *topMostViewController = [FBSDKInternalUtility topMostViewController]; - [topMostViewController presentViewController:alertController - animated:YES - completion:nil]; -} - -#pragma mark - FBSDKErrorRecoveryAttempting "delegate" - -- (void)didPresentErrorWithRecovery:(BOOL)didRecover contextInfo:(void *)contextInfo -{ - [self.delegate processorDidAttemptRecovery:self didRecover:didRecover error:_error]; - self.delegate = nil; -} - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphRequest.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphRequest.h deleted file mode 100644 index 28f8581149..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphRequest.h +++ /dev/null @@ -1,158 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -#import "FBSDKGraphRequestConnection.h" - -NS_ASSUME_NONNULL_BEGIN - -@class FBSDKAccessToken; - -/// typedef for FBSDKHTTPMethod -typedef NSString *const FBSDKHTTPMethod NS_TYPED_EXTENSIBLE_ENUM NS_SWIFT_NAME(HTTPMethod); - -/// GET Request -FOUNDATION_EXPORT FBSDKHTTPMethod FBSDKHTTPMethodGET NS_SWIFT_NAME(get); - -/// POST Request -FOUNDATION_EXPORT FBSDKHTTPMethod FBSDKHTTPMethodPOST NS_SWIFT_NAME(post); - -/// DELETE Request -FOUNDATION_EXPORT FBSDKHTTPMethod FBSDKHTTPMethodDELETE NS_SWIFT_NAME(delete); - -/** - Represents a request to the Facebook Graph API. - - - `FBSDKGraphRequest` encapsulates the components of a request (the - Graph API path, the parameters, error recovery behavior) and should be - used in conjunction with `FBSDKGraphRequestConnection` to issue the request. - - Nearly all Graph APIs require an access token. Unless specified, the - `[FBSDKAccessToken currentAccessToken]` is used. Therefore, most requests - will require login first (see `FBSDKLoginManager` in FBSDKLoginKit.framework). - - A `- start` method is provided for convenience for single requests. - - By default, FBSDKGraphRequest will attempt to recover any errors returned from - Facebook. You can disable this via `disableErrorRecovery:`. - - @see FBSDKGraphErrorRecoveryProcessor - */ -NS_SWIFT_NAME(GraphRequest) -@interface FBSDKGraphRequest : NSObject - -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; - -/** - Initializes a new instance that use use `[FBSDKAccessToken currentAccessToken]`. - @param graphPath the graph path (e.g., @"me"). - */ -- (instancetype)initWithGraphPath:(NSString *)graphPath; - -/** - Initializes a new instance that use use `[FBSDKAccessToken currentAccessToken]`. - @param graphPath the graph path (e.g., @"me"). - @param method the HTTP method. Empty String defaults to @"GET". - */ -- (instancetype)initWithGraphPath:(NSString *)graphPath - HTTPMethod:(FBSDKHTTPMethod)method; - -/** - Initializes a new instance that use use `[FBSDKAccessToken currentAccessToken]`. - @param graphPath the graph path (e.g., @"me"). - @param parameters the optional parameters dictionary. - */ -- (instancetype)initWithGraphPath:(NSString *)graphPath - parameters:(NSDictionary *)parameters; - -/** - Initializes a new instance that use use `[FBSDKAccessToken currentAccessToken]`. - @param graphPath the graph path (e.g., @"me"). - @param parameters the optional parameters dictionary. - @param method the HTTP method. Empty String defaults to @"GET". - */ -- (instancetype)initWithGraphPath:(NSString *)graphPath - parameters:(NSDictionary *)parameters - HTTPMethod:(FBSDKHTTPMethod)method; - -/** - Initializes a new instance. - @param graphPath the graph path (e.g., @"me"). - @param parameters the optional parameters dictionary. - @param tokenString the token string to use. Specifying nil will cause no token to be used. - @param version the optional Graph API version (e.g., @"v2.0"). nil defaults to `[FBSDKSettings graphAPIVersion]`. - @param method the HTTP method. Empty String defaults to @"GET". - */ -- (instancetype)initWithGraphPath:(NSString *)graphPath - parameters:(NSDictionary *)parameters - tokenString:(nullable NSString *)tokenString - version:(nullable NSString *)version - HTTPMethod:(FBSDKHTTPMethod)method -NS_DESIGNATED_INITIALIZER; - -/** - The request parameters. - */ -@property (nonatomic, copy) NSDictionary *parameters; - -/** - The access token string used by the request. - */ -@property (nonatomic, copy, readonly, nullable) NSString *tokenString; - -/** - The Graph API endpoint to use for the request, for example "me". - */ -@property (nonatomic, copy, readonly) NSString *graphPath; - -/** - The HTTPMethod to use for the request, for example "GET" or "POST". - */ -@property (nonatomic, copy, readonly) FBSDKHTTPMethod HTTPMethod; - -/** - The Graph API version to use (e.g., "v2.0") - */ -@property (nonatomic, copy, readonly) NSString *version; - -/** - If set, disables the automatic error recovery mechanism. - @param disable whether to disable the automatic error recovery mechanism - - By default, non-batched FBSDKGraphRequest instances will automatically try to recover - from errors by constructing a `FBSDKGraphErrorRecoveryProcessor` instance that - re-issues the request on successful recoveries. The re-issued request will call the same - handler as the receiver but may occur with a different `FBSDKGraphRequestConnection` instance. - - This will override [FBSDKSettings setGraphErrorRecoveryDisabled:]. - */ -- (void)setGraphErrorRecoveryDisabled:(BOOL)disable -NS_SWIFT_NAME(setGraphErrorRecovery(disabled:)); - -/** - Starts a connection to the Graph API. - @param handler The handler block to call when the request completes. - */ -- (FBSDKGraphRequestConnection *)startWithCompletionHandler:(nullable FBSDKGraphRequestBlock)handler; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphRequest.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphRequest.m deleted file mode 100644 index 569357ca42..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphRequest.m +++ /dev/null @@ -1,225 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKGraphRequest+Internal.h" - -#import - -#import "FBSDKAccessToken.h" -#import "FBSDKCoreKit.h" -#import "FBSDKGraphRequestConnection.h" -#import "FBSDKGraphRequestDataAttachment.h" -#import "FBSDKInternalUtility.h" -#import "FBSDKLogger.h" -#import "FBSDKSettings+Internal.h" - -// constants -FBSDKHTTPMethod FBSDKHTTPMethodGET = @"GET"; -FBSDKHTTPMethod FBSDKHTTPMethodPOST = @"POST"; -FBSDKHTTPMethod FBSDKHTTPMethodDELETE = @"DELETE"; - -@interface FBSDKGraphRequest() -@property (nonatomic, assign) FBSDKGraphRequestFlags flags; -@property (nonatomic, copy, readwrite) FBSDKHTTPMethod HTTPMethod; -@end - -@implementation FBSDKGraphRequest - -@synthesize HTTPMethod; - -- (instancetype)initWithGraphPath:(NSString *)graphPath { - return [self initWithGraphPath:graphPath parameters:@{}]; -} - -- (instancetype)initWithGraphPath:(NSString *)graphPath - HTTPMethod:(FBSDKHTTPMethod)method { - return [self initWithGraphPath:graphPath parameters:@{} HTTPMethod:method]; -} - -- (instancetype)initWithGraphPath:(NSString *)graphPath - parameters:(NSDictionary *)parameters { - return [self initWithGraphPath:graphPath - parameters:parameters - flags:FBSDKGraphRequestFlagNone]; -} - -- (instancetype)initWithGraphPath:(NSString *)graphPath - parameters:(NSDictionary *)parameters - HTTPMethod:(FBSDKHTTPMethod)method { - return [self initWithGraphPath:graphPath - parameters:parameters - tokenString:[FBSDKAccessToken currentAccessToken].tokenString - version:nil - HTTPMethod:method]; -} - -- (instancetype)initWithGraphPath:(NSString *)graphPath - parameters:(NSDictionary *)parameters - flags:(FBSDKGraphRequestFlags)flags { - return [self initWithGraphPath:graphPath - parameters:parameters - tokenString:[FBSDKAccessToken currentAccessToken].tokenString - HTTPMethod:FBSDKHTTPMethodGET - flags:flags]; -} - -- (instancetype)initWithGraphPath:(NSString *)graphPath - parameters:(NSDictionary *)parameters - tokenString:(NSString *)tokenString - HTTPMethod:(FBSDKHTTPMethod)method - flags:(FBSDKGraphRequestFlags)flags { - if ((self = [self initWithGraphPath:graphPath - parameters:parameters - tokenString:tokenString - version:[FBSDKSettings graphAPIVersion] - HTTPMethod:method])) { - self.flags |= flags; - } - return self; -} - -- (instancetype)initWithGraphPath:(NSString *)graphPath - parameters:(NSDictionary *)parameters - tokenString:(NSString *)tokenString - version:(NSString *)version - HTTPMethod:(FBSDKHTTPMethod)method { - if ((self = [super init])) { - _tokenString = tokenString ? [tokenString copy] : nil; - _version = version ? [version copy] : [FBSDKSettings graphAPIVersion]; - _graphPath = [graphPath copy]; - self.HTTPMethod = method.length > 0 ? [method copy] : FBSDKHTTPMethodGET; - _parameters = parameters ?: @{}; - if (!FBSDKSettings.isGraphErrorRecoveryEnabled) { - _flags = FBSDKGraphRequestFlagDisableErrorRecovery; - } - } - return self; -} - -- (BOOL)isGraphErrorRecoveryDisabled -{ - return (self.flags & FBSDKGraphRequestFlagDisableErrorRecovery); -} - -- (void)setGraphErrorRecoveryDisabled:(BOOL)disable -{ - if (disable) { - self.flags |= FBSDKGraphRequestFlagDisableErrorRecovery; - } else { - self.flags &= ~FBSDKGraphRequestFlagDisableErrorRecovery; - } -} - -- (BOOL)hasAttachments -{ - __block BOOL hasAttachments = NO; - [self.parameters enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { - if ([FBSDKGraphRequest isAttachment:obj]) { - hasAttachments = YES; - *stop = YES; - } - }]; - return hasAttachments; -} - -+ (BOOL)isAttachment:(id)item -{ - return ([item isKindOfClass:[UIImage class]] || - [item isKindOfClass:[NSData class]] || - [item isKindOfClass:[FBSDKGraphRequestDataAttachment class]]); -} - - -+ (NSString *)serializeURL:(NSString *)baseUrl - params:(NSDictionary *)params { - return [self serializeURL:baseUrl params:params httpMethod:FBSDKHTTPMethodGET]; -} - -+ (NSString *)serializeURL:(NSString *)baseUrl - params:(NSDictionary *)params - httpMethod:(NSString *)httpMethod { - return [self serializeURL:baseUrl params:params httpMethod:httpMethod forBatch:NO]; -} - -+ (NSString *)serializeURL:(NSString *)baseUrl - params:(NSDictionary *)params - httpMethod:(NSString *)httpMethod - forBatch:(BOOL)forBatch { - params = [self preprocessParams: params]; - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - NSURL *parsedURL = [NSURL URLWithString:[baseUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; -#pragma clang pop - - if ([httpMethod isEqualToString:FBSDKHTTPMethodPOST] && !forBatch) { - return baseUrl; - } - - NSString *queryPrefix = parsedURL.query ? @"&" : @"?"; - - NSString *query = [FBSDKBasicUtility queryStringWithDictionary:params error:NULL invalidObjectHandler:^id(id object, BOOL *stop) { - if ([self isAttachment:object]) { - if ([httpMethod isEqualToString:FBSDKHTTPMethodGET]) { - [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors logEntry:@"can not use GET to upload a file"]; - } - return nil; - } - return object; - }]; - return [NSString stringWithFormat:@"%@%@%@", baseUrl, queryPrefix, query]; -} - -+ (NSDictionary *)preprocessParams:(NSDictionary *)params -{ - NSString *debugValue = [FBSDKSettings graphAPIDebugParamValue]; - if (debugValue) { - NSMutableDictionary *mutableParams = [NSMutableDictionary dictionaryWithDictionary:params]; - mutableParams[@"debug"] = debugValue; - return mutableParams; - } - - return params; -} - -- (FBSDKGraphRequestConnection *)startWithCompletionHandler:(FBSDKGraphRequestBlock)handler -{ - FBSDKGraphRequestConnection *connection = [[FBSDKGraphRequestConnection alloc] init]; - [connection addRequest:self completionHandler:handler]; - [connection start]; - return connection; -} - -#pragma mark - Debugging helpers - -- (NSString *)description -{ - NSMutableString *result = [NSMutableString stringWithFormat:@"<%@: %p", - NSStringFromClass([self class]), - self]; - if (self.graphPath) { - [result appendFormat:@", graphPath: %@", self.graphPath]; - } - if (self.HTTPMethod) { - [result appendFormat:@", HTTPMethod: %@", self.HTTPMethod]; - } - [result appendFormat:@", parameters: %@>", self.parameters.description]; - return result; -} - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphRequestConnection.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphRequestConnection.h deleted file mode 100644 index bdab4dc722..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphRequestConnection.h +++ /dev/null @@ -1,310 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - The key in the result dictionary for requests to old versions of the Graph API - whose response is not a JSON object. - - - When a request returns a non-JSON response (such as a "true" literal), that response - will be wrapped into a dictionary using this const as the key. This only applies for very few Graph API - prior to v2.1. - */ -FOUNDATION_EXPORT NSString *const FBSDKNonJSONResponseProperty -NS_SWIFT_NAME(NonJSONResponseProperty); - -@class FBSDKGraphRequest; -@class FBSDKGraphRequestConnection; - -/** - FBSDKGraphRequestBlock - - A block that is passed to addRequest to register for a callback with the results of that - request once the connection completes. - - Pass a block of this type when calling addRequest. This will be called once - the request completes. The call occurs on the UI thread. - - @param connection The `FBSDKGraphRequestConnection` that sent the request. - - @param result The result of the request. This is a translation of - JSON data to `NSDictionary` and `NSArray` objects. This - is nil if there was an error. - - @param error The `NSError` representing any error that occurred. - - */ -typedef void (^FBSDKGraphRequestBlock)(FBSDKGraphRequestConnection *_Nullable connection, - id _Nullable result, - NSError *_Nullable error) -NS_SWIFT_NAME(GraphRequestBlock); - -/** - @protocol - - The `FBSDKGraphRequestConnectionDelegate` protocol defines the methods used to receive network - activity progress information from a . - */ -NS_SWIFT_NAME(GraphRequestConnectionDelegate) -@protocol FBSDKGraphRequestConnectionDelegate - -@optional - -/** - @method - - Tells the delegate the request connection will begin loading - - - - If the is created using one of the convenience factory methods prefixed with - start, the object returned from the convenience method has already begun loading and this method - will not be called when the delegate is set. - - @param connection The request connection that is starting a network request - */ -- (void)requestConnectionWillBeginLoading:(FBSDKGraphRequestConnection *)connection; - -/** - @method - - Tells the delegate the request connection finished loading - - - - If the request connection completes without a network error occurring then this method is called. - Invocation of this method does not indicate success of every made, only that the - request connection has no further activity. Use the error argument passed to the FBSDKGraphRequestBlock - block to determine success or failure of each . - - This method is invoked after the completion handler for each . - - @param connection The request connection that successfully completed a network request - */ -- (void)requestConnectionDidFinishLoading:(FBSDKGraphRequestConnection *)connection; - -/** - @method - - Tells the delegate the request connection failed with an error - - - - If the request connection fails with a network error then this method is called. The `error` - argument specifies why the network connection failed. The `NSError` object passed to the - FBSDKGraphRequestBlock block may contain additional information. - - @param connection The request connection that successfully completed a network request - @param error The `NSError` representing the network error that occurred, if any. May be nil - in some circumstances. Consult the `NSError` for the for reliable - failure information. - */ -- (void)requestConnection:(FBSDKGraphRequestConnection *)connection - didFailWithError:(NSError *)error; - -/** - @method - - Tells the delegate how much data has been sent and is planned to send to the remote host - - - - The byte count arguments refer to the aggregated objects, not a particular . - - Like `NSURLSession`, the values may change in unexpected ways if data needs to be resent. - - @param connection The request connection transmitting data to a remote host - @param bytesWritten The number of bytes sent in the last transmission - @param totalBytesWritten The total number of bytes sent to the remote host - @param totalBytesExpectedToWrite The total number of bytes expected to send to the remote host - */ -- (void)requestConnection:(FBSDKGraphRequestConnection *)connection - didSendBodyData:(NSInteger)bytesWritten - totalBytesWritten:(NSInteger)totalBytesWritten -totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite; - -@end - -/** - - The `FBSDKGraphRequestConnection` represents a single connection to Facebook to service a request. - - - - The request settings are encapsulated in a reusable object. The - `FBSDKGraphRequestConnection` object encapsulates the concerns of a single communication - e.g. starting a connection, canceling a connection, or batching requests. - - */ -NS_SWIFT_NAME(GraphRequestConnection) -@interface FBSDKGraphRequestConnection : NSObject - -/** - The default timeout on all FBSDKGraphRequestConnection instances. Defaults to 60 seconds. - */ -@property (class, nonatomic, assign) NSTimeInterval defaultConnectionTimeout; - -/** - The delegate object that receives updates. - */ -@property (nonatomic, weak, nullable) id delegate; - -/** - Gets or sets the timeout interval to wait for a response before giving up. - */ -@property (nonatomic, assign) NSTimeInterval timeout; - -/** - The raw response that was returned from the server. (readonly) - - - - This property can be used to inspect HTTP headers that were returned from - the server. - - The property is nil until the request completes. If there was a response - then this property will be non-nil during the FBSDKGraphRequestBlock callback. - */ -@property (nonatomic, retain, readonly, nullable) NSHTTPURLResponse *urlResponse; - -/** - Determines the operation queue that is used to call methods on the connection's delegate. - - By default, a connection is scheduled on the current thread in the default mode when it is created. - You cannot reschedule a connection after it has started. - */ -@property (nonatomic, retain) NSOperationQueue *delegateQueue; - -/** - @methodgroup Class methods - */ - -/** - @methodgroup Adding requests - */ - -/** - @method - - This method adds an object to this connection. - - @param request A request to be included in the round-trip when start is called. - @param handler A handler to call back when the round-trip completes or times out. - - The completion handler is retained until the block is called upon the - completion or cancellation of the connection. - */ -- (void)addRequest:(FBSDKGraphRequest *)request - completionHandler:(FBSDKGraphRequestBlock)handler; - -/** - @method - - This method adds an object to this connection. - - @param request A request to be included in the round-trip when start is called. - - @param handler A handler to call back when the round-trip completes or times out. - The handler will be invoked on the main thread. - - @param name A name for this request. This can be used to feed - the results of one request to the input of another in the same - `FBSDKGraphRequestConnection` as described in - [Graph API Batch Requests]( https://developers.facebook.com/docs/reference/api/batch/ ). - - The completion handler is retained until the block is called upon the - completion or cancellation of the connection. This request can be named - to allow for using the request's response in a subsequent request. - */ -- (void)addRequest:(FBSDKGraphRequest *)request - batchEntryName:(NSString *)name - completionHandler:(FBSDKGraphRequestBlock)handler; - -/** - @method - - This method adds an object to this connection. - - @param request A request to be included in the round-trip when start is called. - - @param handler A handler to call back when the round-trip completes or times out. - - @param batchParameters The dictionary of parameters to include for this request - as described in [Graph API Batch Requests]( https://developers.facebook.com/docs/reference/api/batch/ ). - Examples include "depends_on", "name", or "omit_response_on_success". - - The completion handler is retained until the block is called upon the - completion or cancellation of the connection. This request can be named - to allow for using the request's response in a subsequent request. - */ -- (void)addRequest:(FBSDKGraphRequest *)request - batchParameters:(nullable NSDictionary *)batchParameters - completionHandler:(FBSDKGraphRequestBlock)handler; - -/** - @methodgroup Instance methods - */ - -/** - @method - - Signals that a connection should be logically terminated as the - application is no longer interested in a response. - - Synchronously calls any handlers indicating the request was cancelled. Cancel - does not guarantee that the request-related processing will cease. It - does promise that all handlers will complete before the cancel returns. A call to - cancel prior to a start implies a cancellation of all requests associated - with the connection. - */ -- (void)cancel; - -/** - @method - - This method starts a connection with the server and is capable of handling all of the - requests that were added to the connection. - - - By default, a connection is scheduled on the current thread in the default mode when it is created. - See `setDelegateQueue:` for other options. - - This method cannot be called twice for an `FBSDKGraphRequestConnection` instance. - */ -- (void)start; - -/** - @method - - Overrides the default version for a batch request - - The SDK automatically prepends a version part, such as "v2.0" to API paths in order to simplify API versioning - for applications. If you want to override the version part while using batch requests on the connection, call - this method to set the version for the batch request. - - @param version This is a string in the form @"v2.0" which will be used for the version part of an API path - */ -- (void)overrideGraphAPIVersion:(NSString *)version; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphRequestConnection.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphRequestConnection.m deleted file mode 100644 index ffb1116182..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphRequestConnection.m +++ /dev/null @@ -1,1169 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKGraphRequestConnection+Internal.h" - -#import "FBSDKAppEvents+Internal.h" -#import "FBSDKConstants.h" -#import "FBSDKCoreKit+Internal.h" -#import "FBSDKError.h" -#import "FBSDKErrorConfiguration.h" -#import "FBSDKGraphRequest+Internal.h" -#import "FBSDKGraphRequestBody.h" -#import "FBSDKGraphRequestDataAttachment.h" -#import "FBSDKGraphRequestMetadata.h" -#import "FBSDKGraphRequestPiggybackManager.h" -#import "FBSDKInternalUtility.h" -#import "FBSDKLogger.h" -#import "FBSDKSettings+Internal.h" -#import "FBSDKURLSessionTask.h" - -NSString *const FBSDKNonJSONResponseProperty = @"FACEBOOK_NON_JSON_RESULT"; - -// URL construction constants -static NSString *const kGraphURLPrefix = @"graph."; -static NSString *const kGraphVideoURLPrefix = @"graph-video."; - -static NSString *const kBatchKey = @"batch"; -static NSString *const kBatchMethodKey = @"method"; -static NSString *const kBatchRelativeURLKey = @"relative_url"; -static NSString *const kBatchAttachmentKey = @"attached_files"; -static NSString *const kBatchFileNamePrefix = @"file"; -static NSString *const kBatchEntryName = @"name"; - -static NSString *const kAccessTokenKey = @"access_token"; -#if TARGET_OS_TV -static NSString *const kSDK = @"tvos"; -static NSString *const kUserAgentBase = @"FBtvOSSDK"; -#else -static NSString *const kSDK = @"ios"; -static NSString *const kUserAgentBase = @"FBiOSSDK"; -#endif -static NSString *const kBatchRestMethodBaseURL = @"method/"; - -static NSTimeInterval g_defaultTimeout = 60.0; - -static FBSDKErrorConfiguration *g_errorConfiguration; - -#if !TARGET_OS_TV -static FBSDKAccessToken *_CreateExpiredAccessToken(FBSDKAccessToken *accessToken) -{ - if (accessToken == nil) { - return nil; - } - if (accessToken.isExpired) { - return accessToken; - } - NSDate *expirationDate = [NSDate dateWithTimeIntervalSinceNow:-1]; - return [[FBSDKAccessToken alloc] initWithTokenString:accessToken.tokenString - permissions:accessToken.permissions.allObjects - declinedPermissions:accessToken.declinedPermissions.allObjects - expiredPermissions:accessToken.expiredPermissions.allObjects - appID:accessToken.appID - userID:accessToken.userID - expirationDate:expirationDate - refreshDate:expirationDate - dataAccessExpirationDate:expirationDate - graphDomain:accessToken.graphDomain]; -} -#endif - -// ---------------------------------------------------------------------------- -// FBSDKGraphRequestConnectionState - -typedef NS_ENUM(NSUInteger, FBSDKGraphRequestConnectionState) -{ - kStateCreated, - kStateSerialized, - kStateStarted, - kStateCompleted, - kStateCancelled, -}; - -// ---------------------------------------------------------------------------- -// Private properties and methods - -@interface FBSDKGraphRequestConnection () < -NSURLSessionDataDelegate -#if !TARGET_OS_TV -, FBSDKGraphErrorRecoveryProcessorDelegate -#endif -> - -@property (nonatomic, retain) NSMutableArray *requests; -@property (nonatomic, assign) FBSDKGraphRequestConnectionState state; -@property (nonatomic, strong) FBSDKLogger *logger; -@property (nonatomic, assign) uint64_t requestStartTime; - -@end - -// ---------------------------------------------------------------------------- -// FBSDKGraphRequestConnection - -@implementation FBSDKGraphRequestConnection -{ - NSString *_overrideVersionPart; - NSUInteger _expectingResults; - NSOperationQueue *_delegateQueue; - FBSDKURLSession *_session; -#if !TARGET_OS_TV - FBSDKGraphRequestMetadata *_recoveringRequestMetadata; - FBSDKGraphErrorRecoveryProcessor *_errorRecoveryProcessor; -#endif -} - -- (instancetype)init -{ - if ((self = [super init])) { - _requests = [[NSMutableArray alloc] init]; - _timeout = g_defaultTimeout; - _state = kStateCreated; - _logger = [[FBSDKLogger alloc] initWithLoggingBehavior:FBSDKLoggingBehaviorNetworkRequests]; - _session = [[FBSDKURLSession alloc] initWithDelegate:self delegateQueue:_delegateQueue]; - } - return self; -} - -- (void)dealloc -{ - [self.session invalidateAndCancel]; -} - -#pragma mark - Public - -+ (void)setDefaultConnectionTimeout:(NSTimeInterval)defaultTimeout -{ - if (defaultTimeout >= 0) { - g_defaultTimeout = defaultTimeout; - } -} - -+ (NSTimeInterval)defaultConnectionTimeout { - return g_defaultTimeout; -} - -- (void)addRequest:(FBSDKGraphRequest *)request - completionHandler:(FBSDKGraphRequestBlock)handler -{ - [self addRequest:request batchEntryName:@"" completionHandler:handler]; -} - -- (void)addRequest:(FBSDKGraphRequest *)request - batchEntryName:(NSString *)name - completionHandler:(FBSDKGraphRequestBlock)handler -{ - NSDictionary *batchParams = name.length > 0 ? @{kBatchEntryName : name } : nil; - [self addRequest:request batchParameters:batchParams completionHandler:handler]; -} - -- (void)addRequest:(FBSDKGraphRequest *)request - batchParameters:(NSDictionary *)batchParameters - completionHandler:(FBSDKGraphRequestBlock)handler -{ - if (self.state != kStateCreated) { - @throw [NSException exceptionWithName:NSInternalInconsistencyException - reason:@"Cannot add requests once started or if a URLRequest is set" - userInfo:nil]; - } - FBSDKGraphRequestMetadata *metadata = [[FBSDKGraphRequestMetadata alloc] initWithRequest:request - completionHandler:handler - batchParameters:batchParameters]; - - [self.requests addObject:metadata]; -} - -- (void)cancel -{ - self.state = kStateCancelled; - [self.session invalidateAndCancel]; -} - -- (void)overrideGraphAPIVersion:(NSString *)version -{ - if (![_overrideVersionPart isEqualToString:version]) { - _overrideVersionPart = [version copy]; - } -} - -- (void)start -{ - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - g_errorConfiguration = [[FBSDKErrorConfiguration alloc] initWithDictionary:nil]; - }); - - if (![FBSDKApplicationDelegate isSDKInitialized]) { - NSString *msg = @"FBSDKGraphRequestConnection cannot be started before Facebook SDK initialized."; - [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors - formatString:@"%@", msg]; - self.state = kStateCancelled; - [self completeFBSDKURLSessionWithResponse:nil - data:nil - networkError:[FBSDKError unknownErrorWithMessage:msg]]; - - return; - } - - //optimistically check for updated server configuration; - g_errorConfiguration = [FBSDKServerConfigurationManager cachedServerConfiguration].errorConfiguration ?: g_errorConfiguration; - - if (self.state != kStateCreated && self.state != kStateSerialized) { - [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors - formatString:@"FBSDKGraphRequestConnection cannot be started again."]; - return; - } - [FBSDKGraphRequestPiggybackManager addPiggybackRequests:self]; - NSMutableURLRequest *request = [self requestWithBatch:self.requests timeout:_timeout]; - - self.state = kStateStarted; - - [self logRequest:request bodyLength:0 bodyLogger:nil attachmentLogger:nil]; - _requestStartTime = [FBSDKInternalUtility currentTimeInMilliseconds]; - - FBSDKURLSessionTaskBlock completionHanlder = ^(NSData *responseDataV1, NSURLResponse *responseV1, NSError *errorV1) { - FBSDKURLSessionTaskBlock handler = ^(NSData *responseDataV2, - NSURLResponse *responseV2, - NSError *errorV2) { - [self completeFBSDKURLSessionWithResponse:responseV2 - data:responseDataV2 - networkError:errorV2]; - }; - - if(errorV1) { - [self taskDidCompleteWithError:errorV1 handler:handler]; - } else { - [self taskDidCompleteWithResponse:responseV1 data:responseDataV1 requestStartTime:self.requestStartTime handler:handler]; - } - }; - [self.session executeURLRequest:request completionHandler:completionHanlder]; - - id delegate = self.delegate; - if ([delegate respondsToSelector:@selector(requestConnectionWillBeginLoading:)]) { - if (_delegateQueue) { - [_delegateQueue addOperationWithBlock:^{ - [delegate requestConnectionWillBeginLoading:self]; - }]; - } else { - [delegate requestConnectionWillBeginLoading:self]; - } - } -} - -- (NSOperationQueue *)delegateQueue -{ - return _delegateQueue; -} - -- (void)setDelegateQueue:(NSOperationQueue *)queue -{ - _session.delegateQueue = queue; - _delegateQueue = queue; -} - -- (FBSDKURLSession *)session -{ - return _session; -} - -#pragma mark - Private methods (request generation) - -// -// Adds request data to a batch in a format expected by the JsonWriter. -// Binary attachments are referenced by name in JSON and added to the -// attachments dictionary. -// -- (void)addRequest:(FBSDKGraphRequestMetadata *)metadata - toBatch:(NSMutableArray *)batch - attachments:(NSMutableDictionary *)attachments - batchToken:(NSString *)batchToken -{ - NSMutableDictionary *requestElement = [[NSMutableDictionary alloc] init]; - - if (metadata.batchParameters) { - [requestElement addEntriesFromDictionary:metadata.batchParameters]; - } - - if (batchToken) { - NSMutableDictionary *params = [NSMutableDictionary - dictionaryWithDictionary:metadata.request.parameters]; - params[kAccessTokenKey] = batchToken; - metadata.request.parameters = params; - [self registerTokenToOmitFromLog:batchToken]; - } - - NSString *urlString = [self urlStringForSingleRequest:metadata.request forBatch:YES]; - requestElement[kBatchRelativeURLKey] = urlString; - requestElement[kBatchMethodKey] = metadata.request.HTTPMethod; - - NSMutableArray *attachmentNames = [NSMutableArray array]; - - [metadata.request.parameters enumerateKeysAndObjectsUsingBlock:^(id key, id value, BOOL *stop) { - if ([FBSDKGraphRequest isAttachment:value]) { - NSString *name = [NSString stringWithFormat:@"%@%lu", - kBatchFileNamePrefix, - (unsigned long)attachments.count]; - [attachmentNames addObject:name]; - attachments[name] = value; - } - }]; - - if (attachmentNames.count) { - requestElement[kBatchAttachmentKey] = [attachmentNames componentsJoinedByString:@","]; - } - - [batch addObject:requestElement]; -} - -- (void)appendAttachments:(NSDictionary *)attachments - toBody:(FBSDKGraphRequestBody *)body - addFormData:(BOOL)addFormData - logger:(FBSDKLogger *)logger -{ - [attachments enumerateKeysAndObjectsUsingBlock:^(id key, id value, BOOL *stop) { - value = [FBSDKBasicUtility convertRequestValue:value]; - if ([value isKindOfClass:[NSString class]]) { - if (addFormData) { - [body appendWithKey:key formValue:(NSString *)value logger:logger]; - } - } else if ([value isKindOfClass:[UIImage class]]) { - [body appendWithKey:key imageValue:(UIImage *)value logger:logger]; - } else if ([value isKindOfClass:[NSData class]]) { - [body appendWithKey:key dataValue:(NSData *)value logger:logger]; - } else if ([value isKindOfClass:[FBSDKGraphRequestDataAttachment class]]) { - [body appendWithKey:key dataAttachmentValue:(FBSDKGraphRequestDataAttachment *)value logger:logger]; - } else { - [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors formatString:@"Unsupported FBSDKGraphRequest attachment:%@, skipping.", value]; - } - }]; -} - -// -// Serializes all requests in the batch to JSON and appends the result to -// body. Also names all attachments that need to go as separate blocks in -// the body of the request. -// -// All the requests are serialized into JSON, with any binary attachments -// named and referenced by name in the JSON. -// -- (void)appendJSONRequests:(NSArray *)requests - toBody:(FBSDKGraphRequestBody *)body - andNameAttachments:(NSMutableDictionary *)attachments - logger:(FBSDKLogger *)logger -{ - NSMutableArray *batch = [[NSMutableArray alloc] init]; - NSString *batchToken = nil; - for (FBSDKGraphRequestMetadata *metadata in requests) { - NSString *individualToken = [self accessTokenWithRequest:metadata.request]; - BOOL isClientToken = [FBSDKSettings clientToken] && [individualToken hasSuffix:[FBSDKSettings clientToken]]; - if (!batchToken && - !isClientToken) { - batchToken = individualToken; - } - [self addRequest:metadata - toBatch:batch - attachments:attachments - batchToken:[batchToken isEqualToString:individualToken] ? nil : individualToken]; - } - - NSString *jsonBatch = [FBSDKBasicUtility JSONStringForObject:batch error:NULL invalidObjectHandler:NULL]; - - [body appendWithKey:kBatchKey formValue:jsonBatch logger:logger]; - if (batchToken) { - [body appendWithKey:kAccessTokenKey formValue:batchToken logger:logger]; - } -} - -- (BOOL)_shouldWarnOnMissingFieldsParam:(FBSDKGraphRequest *)request -{ - NSString *minVersion = @"2.4"; - NSString *version = request.version; - if (!version) { - return YES; - } - if ([version hasPrefix:@"v"]) { - version = [version substringFromIndex:1]; - } - - NSComparisonResult result = [version compare:minVersion options:NSNumericSearch]; - - // if current version is the same as minVersion, or if the current version is > minVersion - return (result == NSOrderedSame) || (result == NSOrderedDescending); -} - -// Validate that all GET requests after v2.4 have a "fields" param -- (void)_validateFieldsParamForGetRequests:(NSArray *)requests -{ - for (FBSDKGraphRequestMetadata *metadata in requests) { - FBSDKGraphRequest *request = metadata.request; - if ([request.HTTPMethod.uppercaseString isEqualToString:@"GET"] && - [self _shouldWarnOnMissingFieldsParam:request] && - !request.parameters[@"fields"] && - [request.graphPath rangeOfString:@"fields="].location == NSNotFound) { - [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors - formatString:@"starting with Graph API v2.4, GET requests for /%@ should contain an explicit \"fields\" parameter", request.graphPath]; - } - } -} - -// -// Generates a NSURLRequest based on the contents of self.requests, and sets -// options on the request. Chooses between URL-based request for a single -// request and JSON-based request for batches. -// -- (NSMutableURLRequest *)requestWithBatch:(NSArray *)requests - timeout:(NSTimeInterval)timeout -{ - FBSDKGraphRequestBody *body = [[FBSDKGraphRequestBody alloc] init]; - FBSDKLogger *bodyLogger = [[FBSDKLogger alloc] initWithLoggingBehavior:_logger.loggingBehavior]; - FBSDKLogger *attachmentLogger = [[FBSDKLogger alloc] initWithLoggingBehavior:_logger.loggingBehavior]; - - NSMutableURLRequest *request; - - if (requests.count == 0) { - [[NSException exceptionWithName:NSInvalidArgumentException - reason:@"FBSDKGraphRequestConnection: Must have at least one request or urlRequest not specified." - userInfo:nil] - raise]; - - } - - [self _validateFieldsParamForGetRequests:requests]; - - if (requests.count == 1) { - FBSDKGraphRequestMetadata *metadata = requests[0]; - NSURL *url = [NSURL URLWithString:[self urlStringForSingleRequest:metadata.request forBatch:NO]]; - request = [NSMutableURLRequest requestWithURL:url - cachePolicy:NSURLRequestUseProtocolCachePolicy - timeoutInterval:timeout]; - - // HTTP methods are case-sensitive; be helpful in case someone provided a mixed case one. - NSString *httpMethod = metadata.request.HTTPMethod.uppercaseString; - request.HTTPMethod = httpMethod; - [self appendAttachments:metadata.request.parameters - toBody:body - addFormData:[httpMethod isEqualToString:@"POST"] - logger:attachmentLogger]; - } else { - // Find the session with an app ID and use that as the batch_app_id. If we can't - // find one, try to load it from the plist. As a last resort, pass 0. - NSString *batchAppID = [FBSDKSettings appID]; - if (!batchAppID || batchAppID.length == 0) { - // The Graph API batch method requires either an access token or batch_app_id. - // If we can't determine an App ID to use for the batch, we can't issue it. - [[NSException exceptionWithName:NSInternalInconsistencyException - reason:@"FBSDKGraphRequestConnection: [FBSDKSettings appID] must be specified for batch requests" - userInfo:nil] - raise]; - } - - [body appendWithKey:@"batch_app_id" formValue:batchAppID logger:bodyLogger]; - - NSMutableDictionary *attachments = [[NSMutableDictionary alloc] init]; - - [self appendJSONRequests:requests - toBody:body - andNameAttachments:attachments - logger:bodyLogger]; - - [self appendAttachments:attachments - toBody:body - addFormData:NO - logger:attachmentLogger]; - - NSURL *url = [FBSDKInternalUtility - facebookURLWithHostPrefix:kGraphURLPrefix - path:@"" - queryParameters:@{} - defaultVersion:_overrideVersionPart - error:NULL]; - - request = [NSMutableURLRequest requestWithURL:url - cachePolicy:NSURLRequestUseProtocolCachePolicy - timeoutInterval:timeout]; - request.HTTPMethod = @"POST"; - } - - NSData *compressedData; - if ([request.HTTPMethod isEqualToString:@"POST"] && (compressedData = [body compressedData])) { - request.HTTPBody = compressedData; - [request setValue:@"gzip" forHTTPHeaderField:@"Content-Encoding"]; - } else { - request.HTTPBody = body.data; - } - [request setValue:[FBSDKGraphRequestConnection userAgent] forHTTPHeaderField:@"User-Agent"]; - [request setValue:[body mimeContentType] forHTTPHeaderField:@"Content-Type"]; - [request setHTTPShouldHandleCookies:NO]; - - [self logRequest:request bodyLength:(request.HTTPBody.length / 1024) bodyLogger:bodyLogger attachmentLogger:attachmentLogger]; - - return request; -} - -// -// Generates a URL for a batch containing only a single request, -// and names all attachments that need to go in the body of the -// request. -// -// The URL contains all parameters that are not body attachments, -// including the session key if present. -// -// Attachments are named and referenced by name in the URL. -// -- (NSString *)urlStringForSingleRequest:(FBSDKGraphRequest *)request forBatch:(BOOL)forBatch -{ - NSMutableDictionary *params = [NSMutableDictionary dictionaryWithDictionary:request.parameters]; - params[@"format"] = @"json"; - params[@"sdk"] = kSDK; - params[@"include_headers"] = @"false"; - - request.parameters = params; - - NSString *baseURL; - if (forBatch) { - baseURL = request.graphPath; - } else { - NSString *token = [self accessTokenWithRequest:request]; - if (token) { - [params setValue:token forKey:kAccessTokenKey]; - request.parameters = params; - [self registerTokenToOmitFromLog:token]; - } - - NSString *prefix = kGraphURLPrefix; - // We special case a graph post to /videos and send it to graph-video.facebook.com - // We only do this for non batch post requests - NSString *graphPath = request.graphPath.lowercaseString; - if ([request.HTTPMethod.uppercaseString isEqualToString:@"POST"] && - [graphPath hasSuffix:@"/videos"]) { - graphPath = [graphPath stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"/"]]; - NSArray *components = [graphPath componentsSeparatedByString:@"/"]; - if (components.count == 2) { - prefix = kGraphVideoURLPrefix; - } - } - - baseURL = [FBSDKInternalUtility - facebookURLWithHostPrefix:prefix - path:request.graphPath - queryParameters:@{} - defaultVersion:request.version - error:NULL].absoluteString; - } - - NSString *url = [FBSDKGraphRequest serializeURL:baseURL - params:request.parameters - httpMethod:request.HTTPMethod - forBatch:forBatch]; - return url; -} - -#pragma mark - Private methods (response parsing) - -- (void)completeFBSDKURLSessionWithResponse:(NSURLResponse *)response - data:(NSData *)data - networkError:(NSError *)error -{ - if (self.state != kStateCancelled) { - NSAssert(self.state == kStateStarted, - @"Unexpected state %lu in completeWithResponse", - (unsigned long)self.state); - self.state = kStateCompleted; - } - - NSArray *results = nil; - _urlResponse = (NSHTTPURLResponse *)response; - if (response) { - NSAssert([response isKindOfClass:[NSHTTPURLResponse class]], - @"Expected NSHTTPURLResponse, got %@", - response); - - NSInteger statusCode = _urlResponse.statusCode; - - if (!error && [response.MIMEType hasPrefix:@"image"]) { - error = [FBSDKError errorWithCode:FBSDKErrorGraphRequestNonTextMimeTypeReturned - message:@"Response is a non-text MIME type; endpoints that return images and other " - @"binary data should be fetched using NSURLRequest and NSURLSession"]; - } else { - results = [self parseJSONResponse:data - error:&error - statusCode:statusCode]; - } - } else if (!error) { - error = [FBSDKError errorWithCode:FBSDKErrorUnknown - message:@"Missing NSURLResponse"]; - } - - if (!error) { - if (self.requests.count != results.count) { - error = [FBSDKError errorWithCode:FBSDKErrorGraphRequestProtocolMismatch - message:@"Unexpected number of results returned from server."]; - } else { - [_logger appendFormat:@"Response <#%lu>\nDuration: %llu msec\nSize: %lu kB\nResponse Body:\n%@\n\n", - (unsigned long)_logger.loggerSerialNumber, - [FBSDKInternalUtility currentTimeInMilliseconds] - _requestStartTime, - (unsigned long)data.length, - results]; - } - } - - if (error) { - [_logger appendFormat:@"Response <#%lu> :\n%@\n%@\n", - (unsigned long)_logger.loggerSerialNumber, - error.localizedDescription, - error.userInfo]; - } - [_logger emitToNSLog]; - - [self completeWithResults:results networkError:error]; - - [self.session invalidateAndCancel]; -} - -// -// If there is one request, the JSON is the response. -// If there are multiple requests, the JSON has an array of dictionaries whose -// body property is the response. -// [{ "code":200, -// "body":"JSON-response-as-a-string" }, -// { "code":200, -// "body":"JSON-response-as-a-string" }] -// -// In both cases, this function returns an NSArray containing the results. -// The NSArray looks just like the multiple request case except the body -// value is converted from a string to parsed JSON. -// -- (NSArray *)parseJSONResponse:(NSData *)data - error:(NSError **)error - statusCode:(NSInteger)statusCode -{ - // Graph API can return "true" or "false", which is not valid JSON. - // Translate that before asking JSON parser to look at it. - NSString *responseUTF8 = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; - NSMutableArray *results = [[NSMutableArray alloc] init];; - id response = [self parseJSONOrOtherwise:responseUTF8 error:error]; - - if (responseUTF8 == nil) { - NSString *base64Data = data.length != 0 ? [data base64EncodedStringWithOptions:0] : @""; - if (base64Data != nil) { - [FBSDKAppEvents logInternalEvent:@"fb_response_invalid_utf8" - isImplicitlyLogged:YES]; - } - } - - NSDictionary *responseError = nil; - if (!response) { - if ((error != NULL) && (*error == nil)) { - *error = [self errorWithCode:FBSDKErrorUnknown - statusCode:statusCode - parsedJSONResponse:nil - innerError:nil - message:@"The server returned an unexpected response."]; - } - } else if (self.requests.count == 1) { - // response is the entry, so put it in a dictionary under "body" and add - // that to array of responses. - [results addObject:@{ - @"code":@(statusCode), - @"body":response - }]; - } else if ([response isKindOfClass:[NSArray class]]) { - // response is the array of responses, but the body element of each needs - // to be decoded from JSON. - for (id item in response) { - // Don't let errors parsing one response stop us from parsing another. - NSError *batchResultError = nil; - if (![item isKindOfClass:[NSDictionary class]]) { - [results addObject:item]; - } else { - NSMutableDictionary *result = [((NSDictionary *)item) mutableCopy]; - if (result[@"body"]) { - result[@"body"] = [self parseJSONOrOtherwise:result[@"body"] error:&batchResultError]; - } - [results addObject:result]; - } - if (batchResultError) { - // We'll report back the last error we saw. - *error = batchResultError; - } - } - } else if ([response isKindOfClass:[NSDictionary class]] && - (responseError = [FBSDKTypeUtility dictionaryValue:response[@"error"]]) != nil && - [responseError[@"type"] isEqualToString:@"OAuthException"]) { - // if there was one request then return the only result. if there were multiple requests - // but only one error then the server rejected the batch access token - NSDictionary *result = @{ - @"code":@(statusCode), - @"body":response - }; - - for (NSUInteger resultIndex = 0, resultCount = self.requests.count; resultIndex < resultCount; ++resultIndex) { - [results addObject:result]; - } - } else if (error != NULL) { - *error = [self errorWithCode:FBSDKErrorGraphRequestProtocolMismatch - statusCode:statusCode - parsedJSONResponse:results - innerError:nil - message:nil]; - } - - return results; -} - -- (id)parseJSONOrOtherwise:(NSString *)utf8 - error:(NSError **)error -{ - id parsed = nil; - if (!(*error) && [utf8 isKindOfClass:[NSString class]]) { - parsed = [FBSDKBasicUtility objectForJSONString:utf8 error:error]; - // if we fail parse we attempt a re-parse of a modified input to support results in the form "foo=bar", "true", etc. - // which is shouldn't be necessary since Graph API v2.1. - if (*error) { - // we round-trip our hand-wired response through the parser in order to remain - // consistent with the rest of the output of this function (note, if perf turns out - // to be a problem -- unlikely -- we can return the following dictionary outright) - NSDictionary *original = @{ FBSDKNonJSONResponseProperty : utf8 }; - NSString *jsonrep = [FBSDKBasicUtility JSONStringForObject:original error:NULL invalidObjectHandler:NULL]; - NSError *reparseError = nil; - parsed = [FBSDKBasicUtility objectForJSONString:jsonrep error:&reparseError]; - if (!reparseError) { - *error = nil; - } - } - } - return parsed; -} - -- (void)completeWithResults:(NSArray *)results - networkError:(NSError *)networkError -{ - NSUInteger count = self.requests.count; - _expectingResults = count; - NSUInteger disabledRecoveryCount = 0; - for (FBSDKGraphRequestMetadata *metadata in self.requests) { - if (metadata.request.graphErrorRecoveryDisabled) { - disabledRecoveryCount++; - } - } -#if !TARGET_OS_TV - BOOL isSingleRequestToRecover = (count - disabledRecoveryCount == 1); -#endif - - [self.requests enumerateObjectsUsingBlock:^(FBSDKGraphRequestMetadata *metadata, NSUInteger i, BOOL *stop) { - id result = networkError ? nil : results[i]; - NSError *resultError = networkError ?: [self errorFromResult:result request:metadata.request]; - - id body = nil; - if (!resultError && [result isKindOfClass:[NSDictionary class]]) { - NSDictionary *resultDictionary = [FBSDKTypeUtility dictionaryValue:result]; - body = [FBSDKTypeUtility dictionaryValue:resultDictionary[@"body"]]; - } - -#if !TARGET_OS_TV - if (resultError && !metadata.request.graphErrorRecoveryDisabled && isSingleRequestToRecover) { - self->_recoveringRequestMetadata = metadata; - self->_errorRecoveryProcessor = [[FBSDKGraphErrorRecoveryProcessor alloc] init]; - if ([self->_errorRecoveryProcessor processError:resultError request:metadata.request delegate:self]) { - return; - } - } -#endif - - [self processResultBody:body error:resultError metadata:metadata canNotifyDelegate:networkError == nil]; - }]; - - if (networkError) { - if ([_delegate respondsToSelector:@selector(requestConnection:didFailWithError:)]) { - [_delegate requestConnection:self didFailWithError:networkError]; - } - } -} - -- (void)processResultBody:(NSDictionary *)body error:(NSError *)error metadata:(FBSDKGraphRequestMetadata *)metadata canNotifyDelegate:(BOOL)canNotifyDelegate -{ - void (^finishAndInvokeCompletionHandler)(void) = ^{ - NSDictionary *graphDebugDict = body[@"__debug__"]; - if ([graphDebugDict isKindOfClass:[NSDictionary class]]) { - [self processResultDebugDictionary: graphDebugDict]; - } - [metadata invokeCompletionHandlerForConnection:self withResults:body error:error]; - - if (--self->_expectingResults == 0) { - if (canNotifyDelegate && [self->_delegate respondsToSelector:@selector(requestConnectionDidFinishLoading:)]) { - [self->_delegate requestConnectionDidFinishLoading:self]; - } - } - }; - -#if !TARGET_OS_TV - void (^clearToken)(NSInteger) = ^(NSInteger errorSubcode){ - if (metadata.request.flags & FBSDKGraphRequestFlagDoNotInvalidateTokenOnError) { - return; - } - if (errorSubcode == 493) { - [FBSDKAccessToken setCurrentAccessToken:_CreateExpiredAccessToken([FBSDKAccessToken currentAccessToken])]; - } else { - [FBSDKAccessToken setCurrentAccessToken:nil]; - } - - }; - - NSString *metadataTokenString = metadata.request.tokenString; - NSString *currentTokenString = [FBSDKAccessToken currentAccessToken].tokenString; - - if ([metadataTokenString isEqualToString:currentTokenString]) { - NSInteger errorCode = [error.userInfo[FBSDKGraphRequestErrorGraphErrorCodeKey] integerValue]; - NSInteger errorSubcode = [error.userInfo[FBSDKGraphRequestErrorGraphErrorSubcodeKey] integerValue]; - if (errorCode == 190 || errorCode == 102) { - clearToken(errorSubcode); - } - } -#endif - // this is already on the queue since we are currently in the NSURLSession callback. - finishAndInvokeCompletionHandler(); -} - -- (void)processResultDebugDictionary:(NSDictionary *)dict -{ - NSArray *messages = [FBSDKTypeUtility arrayValue:dict[@"messages"]]; - if (!messages.count) { - return; - } - - [messages enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - NSDictionary *messageDict = [FBSDKTypeUtility dictionaryValue:obj]; - NSString *message = [FBSDKTypeUtility stringValue:messageDict[@"message"]]; - NSString *type = [FBSDKTypeUtility stringValue:messageDict[@"type"]]; - NSString *link = [FBSDKTypeUtility stringValue:messageDict[@"link"]]; - if (!message || !type) { - return; - } - - NSString *loggingBehavior = FBSDKLoggingBehaviorGraphAPIDebugInfo; - if ([type isEqualToString:@"warning"]) { - loggingBehavior = FBSDKLoggingBehaviorGraphAPIDebugWarning; - } - if (link) { - message = [message stringByAppendingFormat:@" Link: %@", link]; - } - - [FBSDKLogger singleShotLogEntry:loggingBehavior logEntry:message]; - }]; - -} - -- (NSError *)errorFromResult:(id)result request:(FBSDKGraphRequest *)request -{ - if ([result isKindOfClass:[NSDictionary class]]) { - NSDictionary *errorDictionary = [FBSDKTypeUtility dictionaryValue:result[@"body"]][@"error"]; - - if ([errorDictionary isKindOfClass:[NSDictionary class]]) { - NSMutableDictionary *userInfo = [NSMutableDictionary dictionary]; - [FBSDKBasicUtility dictionary:userInfo setObject:errorDictionary[@"code"] forKey:FBSDKGraphRequestErrorGraphErrorCodeKey]; - [FBSDKBasicUtility dictionary:userInfo setObject:errorDictionary[@"error_subcode"] forKey:FBSDKGraphRequestErrorGraphErrorSubcodeKey]; - //"message" is preferred over error_msg or error_reason. - [FBSDKBasicUtility dictionary:userInfo setObject:errorDictionary[@"error_msg"] forKey:FBSDKErrorDeveloperMessageKey]; - [FBSDKBasicUtility dictionary:userInfo setObject:errorDictionary[@"error_reason"] forKey:FBSDKErrorDeveloperMessageKey]; - [FBSDKBasicUtility dictionary:userInfo setObject:errorDictionary[@"message"] forKey:FBSDKErrorDeveloperMessageKey]; - [FBSDKBasicUtility dictionary:userInfo setObject:errorDictionary[@"error_user_title"] forKey:FBSDKErrorLocalizedTitleKey]; - [FBSDKBasicUtility dictionary:userInfo setObject:errorDictionary[@"error_user_msg"] forKey:FBSDKErrorLocalizedDescriptionKey]; - [FBSDKBasicUtility dictionary:userInfo setObject:errorDictionary[@"error_user_msg"] forKey:NSLocalizedDescriptionKey]; - [FBSDKBasicUtility dictionary:userInfo setObject:result[@"code"] forKey:FBSDKGraphRequestErrorHTTPStatusCodeKey]; - [FBSDKBasicUtility dictionary:userInfo setObject:result forKey:FBSDKGraphRequestErrorParsedJSONResponseKey]; - - FBSDKErrorRecoveryConfiguration *recoveryConfiguration = [g_errorConfiguration - recoveryConfigurationForCode:[userInfo[FBSDKGraphRequestErrorGraphErrorCodeKey] stringValue] - subcode:[userInfo[FBSDKGraphRequestErrorGraphErrorSubcodeKey] stringValue] - request:request]; - if ([errorDictionary[@"is_transient"] boolValue]) { - userInfo[FBSDKGraphRequestErrorKey] = @(FBSDKGraphRequestErrorTransient); - } else { - [FBSDKBasicUtility dictionary:userInfo setObject:@(recoveryConfiguration.errorCategory) forKey:FBSDKGraphRequestErrorKey]; - } - [FBSDKBasicUtility dictionary:userInfo setObject:recoveryConfiguration.localizedRecoveryDescription forKey:NSLocalizedRecoverySuggestionErrorKey]; - [FBSDKBasicUtility dictionary:userInfo setObject:recoveryConfiguration.localizedRecoveryOptionDescriptions forKey:NSLocalizedRecoveryOptionsErrorKey]; - FBSDKErrorRecoveryAttempter *attempter = [FBSDKErrorRecoveryAttempter recoveryAttempterFromConfiguration:recoveryConfiguration]; - [FBSDKBasicUtility dictionary:userInfo setObject:attempter forKey:NSRecoveryAttempterErrorKey]; - - return [FBSDKError errorWithCode:FBSDKErrorGraphRequestGraphAPI - userInfo:userInfo - message:nil - underlyingError:nil]; - } - } - - return nil; -} - -- (NSError *)errorWithCode:(FBSDKCoreError)code - statusCode:(NSInteger)statusCode - parsedJSONResponse:(id)response - innerError:(NSError *)innerError - message:(NSString *)message { - NSMutableDictionary *userInfo = [[NSMutableDictionary alloc] init]; - userInfo[FBSDKGraphRequestErrorHTTPStatusCodeKey] = @(statusCode); - - if (response) { - userInfo[FBSDKGraphRequestErrorParsedJSONResponseKey] = response; - } - - if (innerError) { - userInfo[FBSDKGraphRequestErrorParsedJSONResponseKey] = innerError; - } - - if (message) { - userInfo[FBSDKErrorDeveloperMessageKey] = message; - } - - NSError *error = [[NSError alloc] - initWithDomain:FBSDKErrorDomain - code:code - userInfo:userInfo]; - - return error; -} - -#pragma mark - Private methods (logging and completion) - -- (void)logAndInvokeHandler:(FBSDKURLSessionTaskBlock)handler - error:(NSError *)error -{ - if (error) { - NSString *logEntry = [NSString - stringWithFormat:@"FBSDKURLSessionTask <#%lu>:\n Error: '%@'\n%@\n", - (unsigned long)[FBSDKLogger generateSerialNumber], - error.localizedDescription, - error.userInfo]; - - [self logMessage:logEntry]; - } - - [self invokeHandler:handler error:error response:nil responseData:nil]; -} - -- (void)logAndInvokeHandler:(FBSDKURLSessionTaskBlock)handler - response:(NSURLResponse *)response - responseData:(NSData *)responseData - requestStartTime:(uint64_t)requestStartTime -{ - // Basic logging just prints out the URL. FBSDKGraphRequest logging provides more details. - NSString *mimeType = response.MIMEType; - NSMutableString *mutableLogEntry = [NSMutableString stringWithFormat:@"FBSDKGraphRequestConnection <#%lu>:\n Duration: %llu msec\nResponse Size: %lu kB\n MIME type: %@\n", - (unsigned long)[FBSDKLogger generateSerialNumber], - [FBSDKInternalUtility currentTimeInMilliseconds] - requestStartTime, - (unsigned long)responseData.length / 1024, - mimeType]; - - if ([mimeType isEqualToString:@"text/javascript"]) { - NSString *responseUTF8 = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; - [mutableLogEntry appendFormat:@" Response:\n%@\n\n", responseUTF8]; - } - - [self logMessage:mutableLogEntry]; - - [self invokeHandler:handler error:nil response:response responseData:responseData]; -} - -- (void)invokeHandler:(FBSDKURLSessionTaskBlock)handler - error:(NSError *)error - response:(NSURLResponse *)response - responseData:(NSData *)responseData -{ - if (handler != nil) { - dispatch_async(dispatch_get_main_queue(), ^{ - handler(responseData, response, error); - }); - } -} - -- (void)logMessage:(NSString *)message -{ - [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorNetworkRequests formatString:@"%@", message]; -} - -- (void)taskDidCompleteWithResponse:(NSURLResponse *)response - data:(NSData *)data - requestStartTime:(uint64_t)requestStartTime - handler:(FBSDKURLSessionTaskBlock)handler -{ - @try { - [self logAndInvokeHandler:handler - response:response - responseData:data - requestStartTime:requestStartTime]; - } @finally {} -} - -- (void)taskDidCompleteWithError:(NSError *)error - handler:(FBSDKURLSessionTaskBlock)handler -{ - @try { - if ([error.domain isEqualToString:NSURLErrorDomain] && error.code == kCFURLErrorSecureConnectionFailed) { - NSOperatingSystemVersion iOS9Version = { .majorVersion = 9, .minorVersion = 0, .patchVersion = 0 }; - if ([FBSDKInternalUtility isOSRunTimeVersionAtLeast:iOS9Version]) { - [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors - logEntry:@"WARNING: FBSDK secure network request failed. Please verify you have configured your " - "app for Application Transport Security compatibility described at https://developers.facebook.com/docs/ios/ios9"]; - } - } - [self logAndInvokeHandler:handler error:error]; - } @finally {} -} - -#pragma mark - Private methods (miscellaneous) - -- (void)logRequest:(NSMutableURLRequest *)request - bodyLength:(NSUInteger)bodyLength - bodyLogger:(FBSDKLogger *)bodyLogger - attachmentLogger:(FBSDKLogger *)attachmentLogger -{ - if (_logger.isActive) { - [_logger appendFormat:@"Request <#%lu>:\n", (unsigned long)_logger.loggerSerialNumber]; - [_logger appendKey:@"URL" value:request.URL.absoluteString]; - [_logger appendKey:@"Method" value:request.HTTPMethod]; - [_logger appendKey:@"UserAgent" value:[request valueForHTTPHeaderField:@"User-Agent"]]; - [_logger appendKey:@"MIME" value:[request valueForHTTPHeaderField:@"Content-Type"]]; - - if (bodyLength != 0) { - [_logger appendKey:@"Body Size" value:[NSString stringWithFormat:@"%lu kB", (unsigned long)bodyLength / 1024]]; - } - - if (bodyLogger != nil) { - [_logger appendKey:@"Body (w/o attachments)" value:bodyLogger.contents]; - } - - if (attachmentLogger != nil) { - [_logger appendKey:@"Attachments" value:attachmentLogger.contents]; - } - - [_logger appendString:@"\n"]; - - [_logger emitToNSLog]; - } -} - -- (NSString *)accessTokenWithRequest:(FBSDKGraphRequest *)request -{ - NSString *token = request.tokenString ?: request.parameters[kAccessTokenKey]; - if (!token && !(request.flags & FBSDKGraphRequestFlagSkipClientToken) && [FBSDKSettings clientToken].length > 0) { - return [NSString stringWithFormat:@"%@|%@", [FBSDKSettings appID], [FBSDKSettings clientToken]]; - } - return token; -} - -- (void)registerTokenToOmitFromLog:(NSString *)token -{ - if (![FBSDKSettings.loggingBehaviors containsObject:FBSDKLoggingBehaviorAccessTokens]) { - [FBSDKLogger registerStringToReplace:token replaceWith:@"ACCESS_TOKEN_REMOVED"]; - } -} - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Warc-performSelector-leaks" -+ (NSString *)userAgent -{ - static NSString *agent = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - agent = [NSString stringWithFormat:@"%@.%@", kUserAgentBase, FBSDK_VERSION_STRING]; - }); - NSString *agentWithSuffix = nil; - if ([FBSDKSettings userAgentSuffix]) { - agentWithSuffix = [NSString stringWithFormat:@"%@/%@", agent, [FBSDKSettings userAgentSuffix]]; - } - if (@available(iOS 13.0, *)) { - NSProcessInfo *processInfo = [NSProcessInfo processInfo]; - SEL selector = NSSelectorFromString(@"isMacCatalystApp"); - if (selector && [processInfo respondsToSelector:selector] && [processInfo performSelector:selector]) { - return [NSString stringWithFormat:@"%@/%@", agentWithSuffix ?: agent, @"macOS"]; - } - } - - return agentWithSuffix ?: agent; -} -#pragma clang diagnostic pop - -#pragma mark - NSURLSessionDataDelegate - -- (void)URLSession:(NSURLSession *)session - task:(NSURLSessionTask *)task - didSendBodyData:(int64_t)bytesSent - totalBytesSent:(int64_t)totalBytesSent -totalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend -{ - id delegate = self.delegate; - - if ([delegate respondsToSelector:@selector(requestConnection:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite:)]) { - [delegate requestConnection:self - didSendBodyData:(NSUInteger)bytesSent - totalBytesWritten:(NSUInteger)totalBytesSent - totalBytesExpectedToWrite:(NSUInteger)totalBytesExpectedToSend]; - } -} - -#pragma mark - FBSDKGraphErrorRecoveryProcessorDelegate - -#if !TARGET_OS_TV -- (void)processorDidAttemptRecovery:(FBSDKGraphErrorRecoveryProcessor *)processor didRecover:(BOOL)didRecover error:(NSError *)error -{ - if (didRecover) { - FBSDKGraphRequest *originalRequest = _recoveringRequestMetadata.request; - FBSDKGraphRequest *retryRequest = [[FBSDKGraphRequest alloc] initWithGraphPath:originalRequest.graphPath - parameters:originalRequest.parameters - tokenString:[FBSDKAccessToken currentAccessToken].tokenString - version:originalRequest.version - HTTPMethod:originalRequest.HTTPMethod]; - // prevent further attempts at recovery (i.e., additional retries). - [retryRequest setGraphErrorRecoveryDisabled:YES]; - FBSDKGraphRequestMetadata *retryMetadata = [[FBSDKGraphRequestMetadata alloc] initWithRequest:retryRequest completionHandler:_recoveringRequestMetadata.completionHandler batchParameters:_recoveringRequestMetadata.batchParameters]; - [retryRequest startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *retriedError) { - [self processResultBody:result error:retriedError metadata:retryMetadata canNotifyDelegate:YES]; - self->_errorRecoveryProcessor = nil; - self->_recoveringRequestMetadata = nil; - }]; - } else { - [self processResultBody:nil error:error metadata:_recoveringRequestMetadata canNotifyDelegate:YES]; - _errorRecoveryProcessor = nil; - _recoveringRequestMetadata = nil; - } -} -#endif - -#pragma mark - Debugging helpers - -- (NSString *)description -{ - NSMutableString *result = [NSMutableString stringWithFormat:@"<%@: %p, %lu request(s): (\n", - NSStringFromClass([self class]), - self, - (unsigned long)self.requests.count]; - BOOL comma = NO; - for (FBSDKGraphRequestMetadata *metadata in self.requests) { - FBSDKGraphRequest *request = metadata.request; - if (comma) { - [result appendString:@",\n"]; - } - [result appendString:request.description]; - comma = YES; - } - [result appendString:@"\n)>"]; - return result; - -} - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphRequestDataAttachment.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphRequestDataAttachment.h deleted file mode 100644 index ea07c7827e..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphRequestDataAttachment.h +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - A container class for data attachments so that additional metadata can be provided about the attachment. - */ -NS_SWIFT_NAME(GraphRequestDataAttachment) -@interface FBSDKGraphRequestDataAttachment : NSObject - -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; - -/** - Initializes the receiver with the attachment data and metadata. - @param data The attachment data (retained, not copied) - @param filename The filename for the attachment - @param contentType The content type for the attachment - */ -- (instancetype)initWithData:(NSData *)data - filename:(NSString *)filename - contentType:(NSString *)contentType -NS_DESIGNATED_INITIALIZER; - -/** - The content type for the attachment. - */ -@property (nonatomic, copy, readonly) NSString *contentType; - -/** - The attachment data. - */ -@property (nonatomic, strong, readonly) NSData *data; - -/** - The filename for the attachment. - */ -@property (nonatomic, copy, readonly) NSString *filename; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphRequestDataAttachment.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphRequestDataAttachment.m deleted file mode 100644 index 9a6161109f..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphRequestDataAttachment.m +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKGraphRequestDataAttachment.h" - -@implementation FBSDKGraphRequestDataAttachment - -- (instancetype)initWithData:(NSData *)data filename:(NSString *)filename contentType:(NSString *)contentType -{ - if ((self = [super init])) { - _data = data; - _filename = [filename copy]; - _contentType = [contentType copy]; - } - return self; -} - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Base64/FBSDKBase64.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Base64/FBSDKBase64.h deleted file mode 100644 index ccc976e3fa..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Base64/FBSDKBase64.h +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -NS_SWIFT_NAME(Base64) -@interface FBSDKBase64 : NSObject - -/** - Decodes a base-64 encoded string. - @param string The base-64 encoded string. - @return NSData containing the decoded bytes. - */ -+ (NSData *)decodeAsData:(NSString *)string; - -/** - Decodes a base-64 encoded string into a string. - @param string The base-64 encoded string. - @return NSString with the decoded UTF-8 value. - */ -+ (NSString *)decodeAsString:(NSString *)string; - -/** - Encodes data into a string. - @param data The data to be encoded. - @return The base-64 encoded string. - */ -+ (NSString *)encodeData:(NSData *)data; - -/** - Encodes string into a base-64 representation. - @param string The string to be encoded. - @return The base-64 encoded string. - */ -+ (NSString *)encodeString:(NSString *)string; - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Base64/FBSDKBase64.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Base64/FBSDKBase64.m deleted file mode 100644 index dd81d5a3a1..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Base64/FBSDKBase64.m +++ /dev/null @@ -1,99 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKBase64.h" - -@implementation FBSDKBase64 - -static FBSDKBase64 *_decoder; -static FBSDKBase64 *_encoder; - -#pragma mark - Class Methods - -+ (void)initialize -{ - if (self == [FBSDKBase64 class]) { - _decoder = [[FBSDKBase64 alloc] init]; - _encoder = [[FBSDKBase64 alloc] init]; - } -} - -+ (NSData *)decodeAsData:(NSString *)string -{ - return [_decoder decodeAsData:string]; -} - -+ (NSString *)decodeAsString:(NSString *)string -{ - return [_decoder decodeAsString:string]; -} - -+ (NSString *)encodeData:(NSData *)data -{ - return [_encoder encodeData:data]; -} - -+ (NSString *)encodeString:(NSString *)string -{ - return [_encoder encodeString:string]; -} - -#pragma mark - Object Lifecycle - -#pragma mark - Implementation Methods - -- (NSData *)decodeAsData:(NSString *)string -{ - if (!string) { - return nil; - } - // This padding will be appended before stripping unknown characters, so if there are unknown characters of count % 4 - // it will not be able to decode. Since we assume valid base64 data, we will take this as is. - int needPadding = string.length % 4; - if (needPadding > 0) { - needPadding = 4 - needPadding; - string = [string stringByPaddingToLength:string.length+needPadding withString:@"=" startingAtIndex:0]; - } - - return [[NSData alloc] initWithBase64EncodedString:string options:NSDataBase64DecodingIgnoreUnknownCharacters]; -} - -- (NSString *)decodeAsString:(NSString *)string -{ - NSData *data = [self decodeAsData:string]; - if (!data) { - return nil; - } - return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; -} - -- (NSString *)encodeData:(NSData *)data -{ - if (!data) { - return nil; - } - - return [data base64EncodedStringWithOptions:0]; -} - -- (NSString *)encodeString:(NSString *)string -{ - return [self encodeData:[string dataUsingEncoding:NSUTF8StringEncoding]]; -} - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPI.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPI.h deleted file mode 100644 index 6a461dcd08..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPI.h +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import - -#if SWIFT_PACKAGE -#import "FBSDKCoreKit.h" -#else -#import -#endif - -#import "FBSDKBridgeAPIProtocol.h" -#import "FBSDKBridgeAPIProtocolType.h" -#import "FBSDKBridgeAPIRequest.h" -#import "FBSDKBridgeAPIResponse.h" -#import "FBSDKURLOpening.h" - -NS_ASSUME_NONNULL_BEGIN - -typedef void (^FBSDKBridgeAPIResponseBlock)(FBSDKBridgeAPIResponse *response) -NS_SWIFT_NAME(BridgeAPIResponseBlock); - -@interface FBSDKBridgeAPI : NSObject - -- (void)openBridgeAPIRequest:(FBSDKBridgeAPIRequest *)request - useSafariViewController:(BOOL)useSafariViewController - fromViewController:(nullable UIViewController *)fromViewController - completionBlock:(FBSDKBridgeAPIResponseBlock)completionBlock; - -- (void)openURLWithSafariViewController:(NSURL *)url - sender:(nullable id)sender - fromViewController:(UIViewController *)fromViewController - handler:(FBSDKSuccessBlock)handler; - -- (void)openURL:(NSURL *)url - sender:(nullable id)sender - handler:(FBSDKSuccessBlock)handler; - -@property (class, nonatomic, readonly, strong) FBSDKBridgeAPI *sharedInstance -NS_SWIFT_NAME(shared); -@property (nonatomic, readonly, getter=isActive) BOOL active; - - -@end - -NS_ASSUME_NONNULL_END - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPI.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPI.m deleted file mode 100644 index 77949a309b..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPI.m +++ /dev/null @@ -1,458 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKBridgeAPI.h" - -#import "FBSDKCoreKit+Internal.h" - -typedef void (^FBSDKAuthenticationCompletionHandler)(NSURL *_Nullable callbackURL, NSError *_Nullable error); - -@protocol FBSDKAuthenticationSession - -- (instancetype)initWithURL:(NSURL *)URL callbackURLScheme:(nullable NSString *)callbackURLScheme completionHandler:(FBSDKAuthenticationCompletionHandler)completionHandler; -- (BOOL)start; -- (void)cancel; -@optional -- (void)setPresentationContextProvider:(id)presentationContextProvider; - -@end - -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000 -#import -@interface FBSDKBridgeAPI() -#else -@interface FBSDKBridgeAPI() -#endif - -@end - -@implementation FBSDKBridgeAPI { - FBSDKBridgeAPIRequest *_pendingRequest; - FBSDKBridgeAPIResponseBlock _pendingRequestCompletionBlock; - id _pendingURLOpen; - id _authenticationSession NS_AVAILABLE_IOS(11_0); - FBSDKAuthenticationCompletionHandler _authenticationSessionCompletionHandler NS_AVAILABLE_IOS(11_0); - - BOOL _expectingBackground; - BOOL _isRequestingSFAuthenticationSession; - UIViewController *_safariViewController; - BOOL _isDismissingSafariViewController; - BOOL _isAppLaunched; -} - -+ (void)load -{ - [[FBSDKApplicationDelegate sharedInstance] addObserver:[FBSDKBridgeAPI sharedInstance]]; -} - -+ (FBSDKBridgeAPI *)sharedInstance -{ - static FBSDKBridgeAPI *_sharedInstance; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - _sharedInstance = [[self alloc] init]; - }); - return _sharedInstance; -} - -- (void)applicationDidBecomeActive:(UIApplication *)application -{ - // _expectingBackground can be YES if the caller started doing work (like login) - // within the app delegate's lifecycle like openURL, in which case there - // might have been a "didBecomeActive" event pending that we want to ignore. - BOOL notExpectingBackground = !_expectingBackground && !_safariViewController && !_isDismissingSafariViewController && !_isRequestingSFAuthenticationSession; - if (notExpectingBackground) { - _active = YES; - - [_pendingURLOpen applicationDidBecomeActive:application]; - [self _cancelBridgeRequest]; - - [[NSNotificationCenter defaultCenter] postNotificationName:FBSDKApplicationDidBecomeActiveNotification object:self]; - } -} - -- (void)applicationDidEnterBackground:(UIApplication *)application -{ - _isRequestingSFAuthenticationSession = NO; - _active = NO; - _expectingBackground = NO; -} - -- (BOOL)application:(UIApplication *)application - openURL:(NSURL *)url - sourceApplication:(NSString *)sourceApplication - annotation:(id)annotation -{ - id pendingURLOpen = _pendingURLOpen; - BOOL canOpenURL = [pendingURLOpen canOpenURL:url - forApplication:application - sourceApplication:sourceApplication - annotation:annotation]; - - void (^completePendingOpenURLBlock)(void) = ^{ - self->_pendingURLOpen = nil; - [pendingURLOpen application:application - openURL:url - sourceApplication:sourceApplication - annotation:annotation]; - self->_isDismissingSafariViewController = NO; - }; - // if they completed a SFVC flow, dismiss it. - if (_safariViewController) { - _isDismissingSafariViewController = YES; - [_safariViewController.presentingViewController dismissViewControllerAnimated:YES - completion:completePendingOpenURLBlock]; - _safariViewController = nil; - } else { - if (@available(iOS 11.0, *)) { - if (_authenticationSession != nil) { - [_authenticationSession cancel]; - _authenticationSession = nil; - - // This check is needed in case another sdk / message / ad etc... tries to open the app - // during the login flow. - // This dismisses the authentication browser without triggering any login callbacks. - // Hence we need to explicitly call the authentication session's completion handler. - if (!canOpenURL) { - NSString *errorMessage = [[NSString alloc] - initWithFormat:@"Login attempt cancelled by alternate call to openURL from: %@", - url]; - NSError *loginError = [[NSError alloc] - initWithDomain:FBSDKErrorDomain - code:FBSDKErrorBridgeAPIInterruption - userInfo:@{FBSDKErrorLocalizedDescriptionKey: errorMessage}]; - _authenticationSessionCompletionHandler(url, loginError); - _authenticationSessionCompletionHandler = nil; - } - } - } - completePendingOpenURLBlock(); - } - - if (canOpenURL) { - return YES; - } - - if ([self _handleBridgeAPIResponseURL:url sourceApplication:sourceApplication]) { - return YES; - } - - return NO; -} - -- (BOOL)application:(UIApplication *)application -didFinishLaunchingWithOptions:(NSDictionary *)launchOptions -{ - NSURL *launchedURL = launchOptions[UIApplicationLaunchOptionsURLKey]; - NSString *sourceApplication = launchOptions[UIApplicationLaunchOptionsSourceApplicationKey]; - - if (launchedURL && - sourceApplication) { - Class loginManagerClass = NSClassFromString(@"FBSDKLoginManager"); - if (loginManagerClass) { - id annotation = launchOptions[UIApplicationLaunchOptionsAnnotationKey]; - id loginManager = [[loginManagerClass alloc] init]; - return [loginManager application:application - openURL:launchedURL - sourceApplication:sourceApplication - annotation:annotation]; - } - } - - return NO; -} - -#pragma mark - Internal Methods - -- (void)openURL:(NSURL *)url sender:(id)sender handler:(FBSDKSuccessBlock)handler -{ - _expectingBackground = YES; - _pendingURLOpen = sender; - dispatch_async(dispatch_get_main_queue(), ^{ - // Dispatch openURL calls to prevent hangs if we're inside the current app delegate's openURL flow already - NSOperatingSystemVersion iOS10Version = { .majorVersion = 10, .minorVersion = 0, .patchVersion = 0 }; - if ([FBSDKInternalUtility isOSRunTimeVersionAtLeast:iOS10Version]) { - if (@available(iOS 10.0, *)) { - [[UIApplication sharedApplication] openURL:url options:@{} completionHandler:^(BOOL success) { - handler(success, nil); - }]; - } - } else { - BOOL opened = [[UIApplication sharedApplication] openURL:url]; - - if ([url.scheme hasPrefix:@"http"] && !opened) { - NSOperatingSystemVersion iOS8Version = { .majorVersion = 8, .minorVersion = 0, .patchVersion = 0 }; - if (![FBSDKInternalUtility isOSRunTimeVersionAtLeast:iOS8Version]) { - // Safari openURL calls can wrongly return NO on iOS 7 so manually overwrite that case to YES. - // Otherwise we would rather trust in the actual result of openURL - opened = YES; - } - } - if (handler) { - handler(opened, nil); - } - } - }); -} - -- (void)openBridgeAPIRequest:(FBSDKBridgeAPIRequest *)request - useSafariViewController:(BOOL)useSafariViewController - fromViewController:(UIViewController *)fromViewController - completionBlock:(FBSDKBridgeAPIResponseBlock)completionBlock -{ - if (!request) { - return; - } - NSError *error; - NSURL *requestURL = [request requestURL:&error]; - if (!requestURL) { - FBSDKBridgeAPIResponse *response = [FBSDKBridgeAPIResponse bridgeAPIResponseWithRequest:request error:error]; - completionBlock(response); - return; - } - _pendingRequest = request; - _pendingRequestCompletionBlock = [completionBlock copy]; - void (^handler)(BOOL, NSError *) = ^(BOOL openedURL, NSError *anError) { - if (!openedURL) { - self->_pendingRequest = nil; - self->_pendingRequestCompletionBlock = nil; - NSError *openedURLError; - if ([request.scheme hasPrefix:@"http"]) { - openedURLError = [FBSDKError errorWithCode:FBSDKErrorBrowserUnavailable - message:@"the app switch failed because the browser is unavailable"]; - } else { - openedURLError = [FBSDKError errorWithCode:FBSDKErrorAppVersionUnsupported - message:@"the app switch failed because the destination app is out of date"]; - } - FBSDKBridgeAPIResponse *response = [FBSDKBridgeAPIResponse bridgeAPIResponseWithRequest:request - error:openedURLError]; - completionBlock(response); - return; - } - }; - if (useSafariViewController) { - [self openURLWithSafariViewController:requestURL sender:nil fromViewController:fromViewController handler:handler]; - } else { - [self openURL:requestURL sender:nil handler:handler]; - } -} - -- (void)openURLWithSafariViewController:(NSURL *)url - sender:(id)sender - fromViewController:(UIViewController *)fromViewController - handler:(FBSDKSuccessBlock)handler -{ - if (![url.scheme hasPrefix:@"http"]) { - [self openURL:url sender:sender handler:handler]; - return; - } - - _expectingBackground = NO; - _pendingURLOpen = sender; - - if (@available(iOS 11.0, *)) { - if ([sender isAuthenticationURL:url]) { - [self _setSessionCompletionHandlerFromHandler:handler]; - [self _openURLWithAuthenticationSession:url]; - return; - } - } - - // trying to dynamically load SFSafariViewController class - // so for the cases when it is available we can send users through Safari View Controller flow - // in cases it is not available regular flow will be selected - Class SFSafariViewControllerClass = fbsdkdfl_SFSafariViewControllerClass(); - - if (SFSafariViewControllerClass) { - UIViewController *parent = fromViewController ?: [FBSDKInternalUtility topMostViewController]; - if (parent == nil) { - [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors - formatString:@"There are no valid ViewController to present SafariViewController with", nil]; - return; - } - - NSURLComponents *components = [NSURLComponents componentsWithURL:url resolvingAgainstBaseURL:NO]; - NSURLQueryItem *sfvcQueryItem = [[NSURLQueryItem alloc] initWithName:@"sfvc" value:@"1"]; - components.queryItems = [components.queryItems arrayByAddingObject:sfvcQueryItem]; - url = components.URL; - FBSDKContainerViewController *container = [[FBSDKContainerViewController alloc] init]; - container.delegate = self; - if (parent.transitionCoordinator != nil) { - // Wait until the transition is finished before presenting SafariVC to avoid a blank screen. - [parent.transitionCoordinator animateAlongsideTransition:NULL completion:^(id context) { - // Note SFVC init must occur inside block to avoid blank screen. - self->_safariViewController = [[SFSafariViewControllerClass alloc] initWithURL:url]; - // Disable dismissing with edge pan gesture - self->_safariViewController.modalPresentationStyle = UIModalPresentationOverFullScreen; - [self->_safariViewController performSelector:@selector(setDelegate:) withObject:self]; - [container displayChildController:self->_safariViewController]; - [parent presentViewController:container animated:YES completion:nil]; - }]; - } else { - _safariViewController = [[SFSafariViewControllerClass alloc] initWithURL:url]; - // Disable dismissing with edge pan gesture - _safariViewController.modalPresentationStyle = UIModalPresentationOverFullScreen; - [_safariViewController performSelector:@selector(setDelegate:) withObject:self]; - [container displayChildController:_safariViewController]; - [parent presentViewController:container animated:YES completion:nil]; - } - - // Assuming Safari View Controller always opens - if (handler) { - handler(YES, nil); - } - } else { - [self openURL:url sender:sender handler:handler]; - } -} - -- (void)_openURLWithAuthenticationSession:(NSURL *)url -{ - Class AuthenticationSessionClass = fbsdkdfl_ASWebAuthenticationSessionClass(); - - if (!AuthenticationSessionClass) { - AuthenticationSessionClass = fbsdkdfl_SFAuthenticationSessionClass(); - } - - if (AuthenticationSessionClass != nil) { - if (_authenticationSession != nil) { - [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors - formatString:@"There is already a request for authenticated session. Cancelling active SFAuthenticationSession before starting the new one.", nil]; - [_authenticationSession cancel]; - } - _authenticationSession = [[AuthenticationSessionClass alloc] initWithURL:url - callbackURLScheme:[FBSDKInternalUtility appURLScheme] - completionHandler:_authenticationSessionCompletionHandler]; - if (@available(iOS 13.0, *)) { - if ([_authenticationSession respondsToSelector:@selector(setPresentationContextProvider:)]) { - [_authenticationSession setPresentationContextProvider:self]; - } - } - _isRequestingSFAuthenticationSession = YES; - [_authenticationSession start]; - } -} - -- (void)_setSessionCompletionHandlerFromHandler:(void(^)(BOOL, NSError *))handler -{ - __weak FBSDKBridgeAPI *weakSelf = self; - _authenticationSessionCompletionHandler = ^ (NSURL *aURL, NSError *error) { - FBSDKBridgeAPI *strongSelf = weakSelf; - strongSelf->_isRequestingSFAuthenticationSession = NO; - handler(error == nil, error); - if (error == nil) { - [strongSelf application:[UIApplication sharedApplication] openURL:aURL sourceApplication:@"com.apple" annotation:nil]; - } - strongSelf->_authenticationSession = nil; - strongSelf->_authenticationSessionCompletionHandler = nil; - }; -} - -#pragma mark -- SFSafariViewControllerDelegate - -// This means the user tapped "Done" which we should treat as a cancellation. -- (void)safariViewControllerDidFinish:(UIViewController *)safariViewController -{ - if (_pendingURLOpen) { - id pendingURLOpen = _pendingURLOpen; - - _pendingURLOpen = nil; - - [pendingURLOpen application:nil - openURL:nil - sourceApplication:nil - annotation:nil]; - } - [self _cancelBridgeRequest]; - _safariViewController = nil; -} - -#pragma mark -- FBSDKContainerViewControllerDelegate - -- (void)viewControllerDidDisappear:(FBSDKContainerViewController *)viewController animated:(BOOL)animated -{ - if (_safariViewController) { - [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors - logEntry:@"**ERROR**:\n The SFSafariViewController's parent view controller was dismissed.\n" - "This can happen if you are triggering login from a UIAlertController. Instead, make sure your top most view " - "controller will not be prematurely dismissed."]; - [self safariViewControllerDidFinish:_safariViewController]; - } -} - -#pragma mark - Helper Methods - -- (BOOL)_handleBridgeAPIResponseURL:(NSURL *)responseURL sourceApplication:(NSString *)sourceApplication -{ - FBSDKBridgeAPIRequest *request = _pendingRequest; - FBSDKBridgeAPIResponseBlock completionBlock = _pendingRequestCompletionBlock; - _pendingRequest = nil; - _pendingRequestCompletionBlock = NULL; - if (![responseURL.scheme isEqualToString:[FBSDKInternalUtility appURLScheme]]) { - return NO; - } - if (![responseURL.host isEqualToString:@"bridge"]) { - return NO; - } - if (!request) { - return NO; - } - if (!completionBlock) { - return YES; - } - NSError *error; - FBSDKBridgeAPIResponse *response = [FBSDKBridgeAPIResponse bridgeAPIResponseWithRequest:request - responseURL:responseURL - sourceApplication:sourceApplication - error:&error]; - if (response) { - completionBlock(response); - return YES; - } else if (error) { - completionBlock([FBSDKBridgeAPIResponse bridgeAPIResponseWithRequest:request error:error]); - return YES; - } else { - return NO; - } -} - -- (void)_cancelBridgeRequest -{ - if (_pendingRequest && _pendingRequestCompletionBlock) { - _pendingRequestCompletionBlock([FBSDKBridgeAPIResponse bridgeAPIResponseCancelledWithRequest:_pendingRequest]); - } - _pendingRequest = nil; - _pendingRequestCompletionBlock = NULL; -} - -#pragma mark - ASWebAuthenticationPresentationContextProviding -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000 -- (ASPresentationAnchor)presentationAnchorForWebAuthenticationSession:(ASWebAuthenticationSession *)session API_AVAILABLE(ios(13.0)){ -#else -- (UIWindow *)presentationAnchorForWebAuthenticationSession:(id)session API_AVAILABLE(ios(11.0)) { -#endif - return UIApplication.sharedApplication.keyWindow; -} - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIProtocol.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIProtocol.h deleted file mode 100644 index a109f68266..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIProtocol.h +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import - -#import "FBSDKBridgeAPIProtocolType.h" - -@class FBSDKBridgeAPIRequest; - -FOUNDATION_EXPORT NSString *const FBSDKBridgeAPIAppIDKey; -FOUNDATION_EXPORT NSString *const FBSDKBridgeAPISchemeSuffixKey; -FOUNDATION_EXPORT NSString *const FBSDKBridgeAPIVersionKey; - -NS_SWIFT_NAME(BridgeAPIProtocol) -@protocol FBSDKBridgeAPIProtocol - -- (NSURL *)requestURLWithActionID:(NSString *)actionID - scheme:(NSString *)scheme - methodName:(NSString *)methodName - methodVersion:(NSString *)methodVersion - parameters:(NSDictionary *)parameters - error:(NSError *__autoreleasing *)errorRef; -- (NSDictionary *)responseParametersForActionID:(NSString *)actionID - queryParameters:(NSDictionary *)queryParameters - cancelled:(BOOL *)cancelledRef - error:(NSError *__autoreleasing *)errorRef; - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIProtocolType.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIProtocolType.h deleted file mode 100644 index 00f2bc589a..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIProtocolType.h +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import - -typedef NS_ENUM(NSUInteger, FBSDKBridgeAPIProtocolType) -{ - FBSDKBridgeAPIProtocolTypeNative, - FBSDKBridgeAPIProtocolTypeWeb, -} NS_SWIFT_NAME(BridgeAPIProtocol.Type); - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIRequest+Private.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIRequest+Private.h deleted file mode 100644 index 74c7809af1..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIRequest+Private.h +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKBridgeAPIProtocol.h" -#import "FBSDKBridgeAPIRequest.h" - -@interface FBSDKBridgeAPIRequest () - -- (instancetype)initWithProtocol:(id)protocol - protocolType:(FBSDKBridgeAPIProtocolType)protocolType - scheme:(NSString *)scheme - methodName:(NSString *)methodName - methodVersion:(NSString *)methodVersion - parameters:(NSDictionary *)parameters - userInfo:(NSDictionary *)userInfo -NS_DESIGNATED_INITIALIZER; - -@property (nonatomic, strong, readonly) id protocol; - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIRequest.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIRequest.h deleted file mode 100644 index bbc25d6455..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIRequest.h +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import - -#if SWIFT_PACKAGE -#import "FBSDKCopying.h" -#else -#import -#endif - -#import "FBSDKBridgeAPIProtocolType.h" - -NS_SWIFT_NAME(BridgeAPIRequest) -@interface FBSDKBridgeAPIRequest : NSObject - -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; -+ (instancetype)bridgeAPIRequestWithProtocolType:(FBSDKBridgeAPIProtocolType)protocolType - scheme:(NSString *)scheme - methodName:(NSString *)methodName - methodVersion:(NSString *)methodVersion - parameters:(NSDictionary *)parameters - userInfo:(NSDictionary *)userInfo; - -@property (nonatomic, copy, readonly) NSString *actionID; -@property (nonatomic, copy, readonly) NSString *methodName; -@property (nonatomic, copy, readonly) NSString *methodVersion; -@property (nonatomic, copy, readonly) NSDictionary *parameters; -@property (nonatomic, assign, readonly) FBSDKBridgeAPIProtocolType protocolType; -@property (nonatomic, copy, readonly) NSString *scheme; -@property (nonatomic, copy, readonly) NSDictionary *userInfo; - -- (NSURL *)requestURL:(NSError *__autoreleasing *)errorRef; - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIRequest.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIRequest.m deleted file mode 100644 index fb8f2ca94a..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIRequest.m +++ /dev/null @@ -1,157 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKBridgeAPIRequest.h" -#import "FBSDKBridgeAPIRequest+Private.h" - -#import "FBSDKBridgeAPIProtocolNativeV1.h" -#import "FBSDKBridgeAPIProtocolWebV1.h" -#import "FBSDKBridgeAPIProtocolWebV2.h" -#import "FBSDKInternalUtility.h" -#import "FBSDKSettings.h" - -NSString *const FBSDKBridgeAPIAppIDKey = @"app_id"; -NSString *const FBSDKBridgeAPISchemeSuffixKey = @"scheme_suffix"; -NSString *const FBSDKBridgeAPIVersionKey = @"version"; - -@implementation FBSDKBridgeAPIRequest - -#pragma mark - Class Methods - -+ (instancetype)bridgeAPIRequestWithProtocolType:(FBSDKBridgeAPIProtocolType)protocolType - scheme:(NSString *)scheme - methodName:(NSString *)methodName - methodVersion:(NSString *)methodVersion - parameters:(NSDictionary *)parameters - userInfo:(NSDictionary *)userInfo -{ - return [[self alloc] initWithProtocol:[self _protocolForType:protocolType scheme:scheme] - protocolType:protocolType - scheme:scheme - methodName:methodName - methodVersion:methodVersion - parameters:parameters - userInfo:userInfo]; -} - -+ (NSDictionary *)protocolMap -{ - static NSDictionary *_protocolMap; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - _protocolMap = @{ - @(FBSDKBridgeAPIProtocolTypeNative): @{ - FBSDK_CANOPENURL_FACEBOOK:[[FBSDKBridgeAPIProtocolNativeV1 alloc] initWithAppScheme:@"fbapi20130214"], - FBSDK_CANOPENURL_MESSENGER:[[FBSDKBridgeAPIProtocolNativeV1 alloc] initWithAppScheme:@"fb-messenger-share-api"], - FBSDK_CANOPENURL_MSQRD_PLAYER:[[FBSDKBridgeAPIProtocolNativeV1 alloc] initWithAppScheme:@"msqrdplayer-api20170208"] - }, - @(FBSDKBridgeAPIProtocolTypeWeb): @{ - @"https": [[FBSDKBridgeAPIProtocolWebV1 alloc] init], - @"web": [[FBSDKBridgeAPIProtocolWebV2 alloc] init] - }, - }; - }); - return _protocolMap; -} - -#pragma mark - Object Lifecycle - -- (instancetype)initWithProtocol:(id)protocol - protocolType:(FBSDKBridgeAPIProtocolType)protocolType - scheme:(NSString *)scheme - methodName:(NSString *)methodName - methodVersion:(NSString *)methodVersion - parameters:(NSDictionary *)parameters - userInfo:(NSDictionary *)userInfo -{ - if (!protocol) { - return nil; - } - if ((self = [super init])) { - _protocol = protocol; - _protocolType = protocolType; - _scheme = [scheme copy]; - _methodName = [methodName copy]; - _methodVersion = [methodVersion copy]; - _parameters = [parameters copy]; - _userInfo = [userInfo copy]; - - _actionID = [NSUUID UUID].UUIDString; - } - return self; -} - -#pragma mark - Public Methods - -- (NSURL *)requestURL:(NSError *__autoreleasing *)errorRef -{ - NSURL *requestURL = [_protocol requestURLWithActionID:self.actionID - scheme:self.scheme - methodName:self.methodName - methodVersion:self.methodVersion - parameters:self.parameters - error:errorRef]; - if (!requestURL) { - return nil; - } - - [FBSDKInternalUtility validateURLSchemes]; - - NSDictionary *requestQueryParameters = [FBSDKBasicUtility dictionaryWithQueryString:requestURL.query]; - NSMutableDictionary *queryParameters = [[NSMutableDictionary alloc] initWithDictionary:requestQueryParameters]; - [FBSDKBasicUtility dictionary:queryParameters setObject:[FBSDKSettings appID] forKey:FBSDKBridgeAPIAppIDKey]; - [FBSDKBasicUtility dictionary:queryParameters - setObject:[FBSDKSettings appURLSchemeSuffix] - forKey:FBSDKBridgeAPISchemeSuffixKey]; - requestURL = [FBSDKInternalUtility URLWithScheme:requestURL.scheme - host:requestURL.host - path:requestURL.path - queryParameters:queryParameters - error:errorRef]; - return requestURL; -} - -#pragma mark - NSCopying - -- (id)copyWithZone:(NSZone *)zone -{ - return self; -} - -+ (id)_protocolForType:(FBSDKBridgeAPIProtocolType)type scheme:(NSString *)scheme -{ - id protocol = [self protocolMap][@(type)][scheme]; - if (type == FBSDKBridgeAPIProtocolTypeWeb) { - return protocol; - } - NSURLComponents *components = [[NSURLComponents alloc] init]; - components.scheme = scheme; - components.path = @"/"; - if ([[UIApplication sharedApplication] canOpenURL:components.URL]) { - return protocol; - } - return nil; -} - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIResponse.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIResponse.h deleted file mode 100644 index 8cbe0cd409..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIResponse.h +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import - -#if SWIFT_PACKAGE -#import "FBSDKCopying.h" -#else -#import -#endif - -#import "FBSDKBridgeAPIRequest.h" - -NS_SWIFT_NAME(BridgeAPIResponse) -@interface FBSDKBridgeAPIResponse : NSObject - -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; - -+ (instancetype)bridgeAPIResponseWithRequest:(FBSDKBridgeAPIRequest *)request error:(NSError *)error; -+ (instancetype)bridgeAPIResponseWithRequest:(FBSDKBridgeAPIRequest *)request - responseURL:(NSURL *)responseURL - sourceApplication:(NSString *)sourceApplication - error:(NSError *__autoreleasing *)errorRef; -+ (instancetype)bridgeAPIResponseCancelledWithRequest:(FBSDKBridgeAPIRequest *)request; - -@property (nonatomic, assign, readonly, getter=isCancelled) BOOL cancelled; -@property (nonatomic, copy, readonly) NSError *error; -@property (nonatomic, copy, readonly) FBSDKBridgeAPIRequest *request; -@property (nonatomic, copy, readonly) NSDictionary *responseParameters; - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIResponse.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIResponse.m deleted file mode 100644 index e630cdd714..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIResponse.m +++ /dev/null @@ -1,131 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKBridgeAPIResponse.h" - -#import "FBSDKBridgeAPIProtocol.h" -#import "FBSDKBridgeAPIProtocolType.h" -#import "FBSDKBridgeAPIRequest+Private.h" -#import "FBSDKInternalUtility.h" -#import "FBSDKTypeUtility.h" - -@interface FBSDKBridgeAPIResponse () -- (instancetype)initWithRequest:(FBSDKBridgeAPIRequest *)request - responseParameters:(NSDictionary *)responseParameters - cancelled:(BOOL)cancelled - error:(NSError *)error -NS_DESIGNATED_INITIALIZER; -@end - -@implementation FBSDKBridgeAPIResponse - -#pragma mark - Class Methods - -+ (instancetype)bridgeAPIResponseWithRequest:(FBSDKBridgeAPIRequest *)request error:(NSError *)error -{ - return [[self alloc] initWithRequest:request - responseParameters:nil - cancelled:NO - error:error]; -} - -+ (instancetype)bridgeAPIResponseWithRequest:(FBSDKBridgeAPIRequest *)request - responseURL:(NSURL *)responseURL - sourceApplication:(NSString *)sourceApplication - error:(NSError *__autoreleasing *)errorRef -{ - FBSDKBridgeAPIProtocolType protocolType = request.protocolType; - switch (protocolType) { - case FBSDKBridgeAPIProtocolTypeNative:{ - if (@available(iOS 13, *)) { - break; - } else { - if (![FBSDKInternalUtility isFacebookBundleIdentifier:sourceApplication]) { - return nil; - } - break; - } - } - case FBSDKBridgeAPIProtocolTypeWeb:{ - if (![FBSDKInternalUtility isSafariBundleIdentifier:sourceApplication]) { - return nil; - } - break; - } - } - NSDictionary *const queryParameters = [FBSDKBasicUtility dictionaryWithQueryString:responseURL.query]; - if (!queryParameters) { - return nil; - } - id protocol = request.protocol; - BOOL cancelled; - NSError *error; - NSDictionary *responseParameters = [protocol responseParametersForActionID:request.actionID - queryParameters:queryParameters - cancelled:&cancelled - error:&error]; - if (errorRef != NULL) { - *errorRef = error; - } - if (!responseParameters) { - return nil; - } - return [[self alloc] initWithRequest:request - responseParameters:responseParameters - cancelled:cancelled - error:error]; -} - -+ (instancetype)bridgeAPIResponseCancelledWithRequest:(FBSDKBridgeAPIRequest *)request -{ - return [[self alloc] initWithRequest:request - responseParameters:nil - cancelled:YES - error:nil]; -} - -#pragma mark - Object Lifecycle - -- (instancetype)initWithRequest:(FBSDKBridgeAPIRequest *)request - responseParameters:(NSDictionary *)responseParameters - cancelled:(BOOL)cancelled - error:(NSError *)error -{ - if ((self = [super init])) { - _request = [request copy]; - _responseParameters = [responseParameters copy]; - _cancelled = cancelled; - _error = [error copy]; - } - return self; -} - -#pragma mark - NSCopying - -- (id)copyWithZone:(NSZone *)zone -{ - return self; -} - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKURLOpening.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKURLOpening.h deleted file mode 100644 index ec52281ec4..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKURLOpening.h +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -NS_SWIFT_NAME(URLOpening) -@protocol FBSDKURLOpening - -// Implementations should make sure they can handle nil parameters -// which is possible in SafariViewController. -// see canOpenURL below. -- (BOOL)application:(UIApplication *)application - openURL:(NSURL *)url - sourceApplication:(NSString *)sourceApplication - annotation:(id)annotation; - -// create a different handler to return YES/NO if the receiver can process the above openURL:. -// This is separated so that we can process the openURL: in callbacks, while still returning -// the result of canOpenURL synchronously in FBSDKApplicationDelegate -- (BOOL)canOpenURL:(NSURL *)url - forApplication:(UIApplication *)application - sourceApplication:(NSString *)sourceApplication - annotation:(id)annotation; - -- (void)applicationDidBecomeActive:(UIApplication *)application; - -- (BOOL)isAuthenticationURL:(NSURL *)url; - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolNativeV1.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolNativeV1.h deleted file mode 100644 index 48da81df54..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolNativeV1.h +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import - -#import "FBSDKBridgeAPIProtocol.h" - -typedef struct -{ - __unsafe_unretained NSString *bridgeArgs; - __unsafe_unretained NSString *methodArgs; - __unsafe_unretained NSString *methodVersion; -} FBSDKBridgeAPIProtocolNativeV1OutputKeysStruct; -FOUNDATION_EXPORT const FBSDKBridgeAPIProtocolNativeV1OutputKeysStruct FBSDKBridgeAPIProtocolNativeV1OutputKeys; - -typedef struct -{ - __unsafe_unretained NSString *actionID; - __unsafe_unretained NSString *appIcon; - __unsafe_unretained NSString *appName; - __unsafe_unretained NSString *sdkVersion; -} FBSDKBridgeAPIProtocolNativeV1BridgeParameterOutputKeysStruct; -FOUNDATION_EXPORT const FBSDKBridgeAPIProtocolNativeV1BridgeParameterOutputKeysStruct FBSDKBridgeAPIProtocolNativeV1BridgeParameterOutputKeys; - -typedef struct -{ - __unsafe_unretained NSString *bridgeArgs; - __unsafe_unretained NSString *methodResults; -} FBSDKBridgeAPIProtocolNativeV1InputKeysStruct; -FOUNDATION_EXPORT const FBSDKBridgeAPIProtocolNativeV1InputKeysStruct FBSDKBridgeAPIProtocolNativeV1InputKeys; - -typedef struct -{ - __unsafe_unretained NSString *actionID; - __unsafe_unretained NSString *error; -} FBSDKBridgeAPIProtocolNativeV1BridgeParameterInputKeysStruct; -FOUNDATION_EXPORT const FBSDKBridgeAPIProtocolNativeV1BridgeParameterInputKeysStruct FBSDKBridgeAPIProtocolNativeV1BridgeParameterInputKeys; - -NS_SWIFT_NAME(BridgeAPIProtocolNativeV1) -@interface FBSDKBridgeAPIProtocolNativeV1 : NSObject - -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; - -- (instancetype)initWithAppScheme:(NSString *)appScheme; -- (instancetype)initWithAppScheme:(NSString *)appScheme - pasteboard:(UIPasteboard *)pasteboard - dataLengthThreshold:(NSUInteger)dataLengthThreshold - includeAppIcon:(BOOL)includeAppIcon -NS_DESIGNATED_INITIALIZER; - -@property (nonatomic, copy, readonly) NSString *appScheme; -@property (nonatomic, assign, readonly) NSUInteger dataLengthThreshold; -@property (nonatomic, assign, readonly, getter=shouldIncludeAppIcon) BOOL includeAppIcon; -@property (nonatomic, strong, readonly) UIPasteboard *pasteboard; - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolNativeV1.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolNativeV1.m deleted file mode 100644 index 0bdce35336..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolNativeV1.m +++ /dev/null @@ -1,341 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKBridgeAPIProtocolNativeV1.h" - -#import - -#import "FBSDKApplicationDelegate+Internal.h" -#import "FBSDKBase64.h" -#import "FBSDKBridgeAPIRequest.h" -#import "FBSDKConstants.h" -#import "FBSDKError.h" -#import "FBSDKInternalUtility.h" -#import "FBSDKSettings.h" -#import "FBSDKTypeUtility.h" - -#define FBSDKBridgeAPIProtocolNativeV1BridgeMaxBase64DataLengthThreshold (1024 * 16) - -const FBSDKBridgeAPIProtocolNativeV1OutputKeysStruct FBSDKBridgeAPIProtocolNativeV1OutputKeys = -{ - .bridgeArgs = @"bridge_args", - .methodArgs = @"method_args", - .methodVersion = @"version", -}; - -const FBSDKBridgeAPIProtocolNativeV1BridgeParameterOutputKeysStruct FBSDKBridgeAPIProtocolNativeV1BridgeParameterOutputKeys = -{ - .actionID = @"action_id", - .appIcon = @"app_icon", - .appName = @"app_name", - .sdkVersion = @"sdk_version", -}; - -const FBSDKBridgeAPIProtocolNativeV1InputKeysStruct FBSDKBridgeAPIProtocolNativeV1InputKeys = -{ - .bridgeArgs = @"bridge_args", - .methodResults = @"method_results", -}; - -const FBSDKBridgeAPIProtocolNativeV1BridgeParameterInputKeysStruct FBSDKBridgeAPIProtocolNativeV1BridgeParameterInputKeys = -{ - .actionID = @"action_id", - .error = @"error", -}; - -static const struct -{ - __unsafe_unretained NSString *isBase64; - __unsafe_unretained NSString *isPasteboard; - __unsafe_unretained NSString *tag; - __unsafe_unretained NSString *value; -} FBSDKBridgeAPIProtocolNativeV1DataKeys = -{ - .isBase64 = @"isBase64", - .isPasteboard = @"isPasteboard", - .tag = @"tag", - .value = @"fbAppBridgeType_jsonReadyValue", -}; - -static NSString *const FBSDKBridgeAPIProtocolNativeV1DataPasteboardKey = @"com.facebook.Facebook.FBAppBridgeType"; - -static const struct -{ - __unsafe_unretained NSString *data; - __unsafe_unretained NSString *image; -} FBSDKBridgeAPIProtocolNativeV1DataTypeTags = -{ - .data = @"data", - // we serialize jpegs but use png for backward compatibility - it is any image format that UIImage can handle - .image = @"png", -}; - -static const struct -{ - __unsafe_unretained NSString *code; - __unsafe_unretained NSString *domain; - __unsafe_unretained NSString *userInfo; -} FBSDKBridgeAPIProtocolNativeV1ErrorKeys = -{ - .code = @"code", - .domain = @"domain", - .userInfo = @"user_info", -}; - -@implementation FBSDKBridgeAPIProtocolNativeV1 - -#pragma mark - Object Lifecycle - -- (instancetype)initWithAppScheme:(NSString *)appScheme -{ - return [self initWithAppScheme:appScheme - pasteboard:[UIPasteboard generalPasteboard] - dataLengthThreshold:FBSDKBridgeAPIProtocolNativeV1BridgeMaxBase64DataLengthThreshold - includeAppIcon:YES]; -} - -- (instancetype)initWithAppScheme:(NSString *)appScheme - pasteboard:(UIPasteboard *)pasteboard - dataLengthThreshold:(NSUInteger)dataLengthThreshold - includeAppIcon:(BOOL)includeAppIcon -{ - if ((self = [super init])) { - _appScheme = [appScheme copy]; - _pasteboard = pasteboard; - _dataLengthThreshold = dataLengthThreshold; - _includeAppIcon = includeAppIcon; - } - return self; -} - -#pragma mark - FBSDKBridgeAPIProtocol - -- (NSURL *)requestURLWithActionID:(NSString *)actionID - scheme:(NSString *)scheme - methodName:(NSString *)methodName - methodVersion:(NSString *)methodVersion - parameters:(NSDictionary *)parameters - error:(NSError *__autoreleasing *)errorRef -{ - NSString *const host = @"dialog"; - NSString *const path = [@"/" stringByAppendingString:methodName]; - - NSMutableDictionary *const queryParameters = [[NSMutableDictionary alloc] init]; - [FBSDKBasicUtility dictionary:queryParameters setObject:methodVersion - forKey:FBSDKBridgeAPIProtocolNativeV1OutputKeys.methodVersion]; - - if (parameters.count) { - NSString *const parametersString = [self _JSONStringForObject:parameters enablePasteboard:YES error:errorRef]; - if (!parametersString) { - return nil; - } - NSString *const escapedParametersString = [parametersString stringByReplacingOccurrencesOfString:@"&" - withString:@"%26" - options:NSCaseInsensitiveSearch - range:NSMakeRange(0, - parametersString.length)]; - [FBSDKBasicUtility dictionary:queryParameters - setObject:escapedParametersString - forKey:FBSDKBridgeAPIProtocolNativeV1OutputKeys.methodArgs]; - } - - NSDictionary *const bridgeParameters = [self _bridgeParametersWithActionID:actionID error:errorRef]; - if (!bridgeParameters) { - return nil; - } - NSString *const bridgeParametersString = [self _JSONStringForObject:bridgeParameters enablePasteboard:NO error:errorRef]; - if (!bridgeParametersString) { - return nil; - } - [FBSDKBasicUtility dictionary:queryParameters - setObject:bridgeParametersString - forKey:FBSDKBridgeAPIProtocolNativeV1OutputKeys.bridgeArgs]; - - - return [FBSDKInternalUtility URLWithScheme:self.appScheme - host:host - path:path - queryParameters:queryParameters - error:errorRef]; -} - -- (NSDictionary *)responseParametersForActionID:(NSString *)actionID - queryParameters:(NSDictionary *)queryParameters - cancelled:(BOOL *)cancelledRef - error:(NSError *__autoreleasing *)errorRef -{ - if (cancelledRef != NULL) { - *cancelledRef = NO; - } - if (errorRef != NULL) { - *errorRef = nil; - } - NSError *error; - NSString *bridgeParametersJSON = queryParameters[FBSDKBridgeAPIProtocolNativeV1InputKeys.bridgeArgs]; - NSDictionary *bridgeParameters = [FBSDKBasicUtility objectForJSONString:bridgeParametersJSON error:&error]; - bridgeParameters = [FBSDKTypeUtility dictionaryValue:bridgeParameters]; - if (!bridgeParameters) { - if (error && (errorRef != NULL)) { - *errorRef = [FBSDKError invalidArgumentErrorWithName:FBSDKBridgeAPIProtocolNativeV1InputKeys.bridgeArgs - value:bridgeParametersJSON - message:@"Invalid bridge_args." - underlyingError:error]; - } - return nil; - } - NSString *responseActionID = bridgeParameters[FBSDKBridgeAPIProtocolNativeV1BridgeParameterInputKeys.actionID]; - responseActionID = [FBSDKTypeUtility stringValue:responseActionID]; - if (![responseActionID isEqualToString:actionID]) { - return nil; - } - NSDictionary *errorDictionary = bridgeParameters[FBSDKBridgeAPIProtocolNativeV1BridgeParameterInputKeys.error]; - errorDictionary = [FBSDKTypeUtility dictionaryValue:errorDictionary]; - if (errorDictionary) { - error = [self _errorWithDictionary:errorDictionary]; - if (errorRef != NULL) { - *errorRef = error; - } - return nil; - } - NSString *resultParametersJSON = queryParameters[FBSDKBridgeAPIProtocolNativeV1InputKeys.methodResults]; - NSDictionary *resultParameters = [FBSDKBasicUtility objectForJSONString:resultParametersJSON error:&error]; - if (!resultParameters) { - if (errorRef != NULL) { - *errorRef = [FBSDKError invalidArgumentErrorWithName:FBSDKBridgeAPIProtocolNativeV1InputKeys.methodResults - value:resultParametersJSON - message:@"Invalid method_results." - underlyingError:error]; - } - return nil; - } - if (cancelledRef != NULL) { - NSString *completionGesture = [FBSDKTypeUtility stringValue:resultParameters[@"completionGesture"]]; - *cancelledRef = [completionGesture isEqualToString:@"cancel"]; - } - return resultParameters; -} - -#pragma mark - Helper Methods - -- (UIImage *)_appIcon -{ - if (!_includeAppIcon) { - return nil; - } - NSArray *files = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleIcons"] - [@"CFBundlePrimaryIcon"] - [@"CFBundleIconFiles"]; - if (!files.count) { - return nil; - } - return [UIImage imageNamed:files[0]]; -} - -- (NSDictionary *)_bridgeParametersWithActionID:(NSString *)actionID error:(NSError *__autoreleasing *)errorRef -{ - NSMutableDictionary *bridgeParameters = [[NSMutableDictionary alloc] init]; - [FBSDKBasicUtility dictionary:bridgeParameters setObject:actionID - forKey:FBSDKBridgeAPIProtocolNativeV1BridgeParameterOutputKeys.actionID]; - [FBSDKBasicUtility dictionary:bridgeParameters setObject:[self _appIcon] - forKey:FBSDKBridgeAPIProtocolNativeV1BridgeParameterOutputKeys.appIcon]; - [FBSDKBasicUtility dictionary:bridgeParameters setObject:[FBSDKSettings displayName] - forKey:FBSDKBridgeAPIProtocolNativeV1BridgeParameterOutputKeys.appName]; - [FBSDKBasicUtility dictionary:bridgeParameters setObject:[FBSDKSettings sdkVersion] - forKey:FBSDKBridgeAPIProtocolNativeV1BridgeParameterOutputKeys.sdkVersion]; - return bridgeParameters; -} - -- (NSError *)_errorWithDictionary:(NSDictionary *)dictionary -{ - if (!dictionary) { - return nil; - } - NSString *domain = [FBSDKTypeUtility stringValue:dictionary[FBSDKBridgeAPIProtocolNativeV1ErrorKeys.domain]] ?: - FBSDKErrorDomain; - NSInteger code = [FBSDKTypeUtility integerValue:dictionary[FBSDKBridgeAPIProtocolNativeV1ErrorKeys.code]] ?: - FBSDKErrorUnknown; - NSDictionary *userInfo = [FBSDKTypeUtility dictionaryValue:dictionary[FBSDKBridgeAPIProtocolNativeV1ErrorKeys.userInfo]]; - return [NSError errorWithDomain:domain code:code userInfo:userInfo]; -} - -- (NSString *)_JSONStringForObject:(id)object enablePasteboard:(BOOL)enablePasteboard error:(NSError **)errorRef -{ - __block BOOL didAddToPasteboard = NO; - return [FBSDKBasicUtility JSONStringForObject:object error:errorRef invalidObjectHandler:^id(id invalidObject, BOOL *stop) { - NSString *dataTag = FBSDKBridgeAPIProtocolNativeV1DataTypeTags.data; - if ([invalidObject isKindOfClass:[UIImage class]]) { - UIImage *image = (UIImage *)invalidObject; - // due to backward compatibility, we must send UIImage as NSData even though UIPasteboard can handle UIImage - invalidObject = UIImageJPEGRepresentation(image, [FBSDKSettings JPEGCompressionQuality]); - dataTag = FBSDKBridgeAPIProtocolNativeV1DataTypeTags.image; - } - if ([invalidObject isKindOfClass:[NSData class]]) { - NSData *data = (NSData *)invalidObject; - NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init]; - if (didAddToPasteboard || !enablePasteboard || !self->_pasteboard || (data.length < self->_dataLengthThreshold)) { - dictionary[FBSDKBridgeAPIProtocolNativeV1DataKeys.isBase64] = @YES; - dictionary[FBSDKBridgeAPIProtocolNativeV1DataKeys.tag] = dataTag; - [FBSDKBasicUtility dictionary:dictionary - setObject:[FBSDKBase64 encodeData:data] - forKey:FBSDKBridgeAPIProtocolNativeV1DataKeys.value]; - } else { - dictionary[FBSDKBridgeAPIProtocolNativeV1DataKeys.isPasteboard] = @YES; - dictionary[FBSDKBridgeAPIProtocolNativeV1DataKeys.tag] = dataTag; - dictionary[FBSDKBridgeAPIProtocolNativeV1DataKeys.value] = self->_pasteboard.name; - [self->_pasteboard setData:data forPasteboardType:FBSDKBridgeAPIProtocolNativeV1DataPasteboardKey]; - // this version of the protocol only supports a single item on the pasteboard, so if when we add an item, make - // sure we don't add another item - didAddToPasteboard = YES; - // if we are adding this to the general pasteboard, then we want to remove it when we are done with the share. - // the Facebook app will not clear the value with this version of the protocol, so we should do it when the app - // becomes active again - NSString *pasteboardName = self->_pasteboard.name; - if ([pasteboardName isEqualToString:UIPasteboardNameGeneral] || - [pasteboardName isEqualToString:UIPasteboardNameFind]) { - [[self class] clearData:data fromPasteboardOnApplicationDidBecomeActive:self->_pasteboard]; - } - } - return dictionary; - } else if ([invalidObject isKindOfClass:[NSURL class]]) { - return ((NSURL *)invalidObject).absoluteString; - } - return invalidObject; - }]; -} - -+ (void)clearData:(NSData *)data fromPasteboardOnApplicationDidBecomeActive:(UIPasteboard *)pasteboard -{ - void(^notificationBlock)(NSNotification *) = ^(NSNotification *note){ - NSData *pasteboardData = [pasteboard dataForPasteboardType:FBSDKBridgeAPIProtocolNativeV1DataPasteboardKey]; - if ([data isEqualToData:pasteboardData]) { - [pasteboard setData:[NSData data] forPasteboardType:FBSDKBridgeAPIProtocolNativeV1DataPasteboardKey]; - } - }; - [[NSNotificationCenter defaultCenter] addObserverForName:FBSDKApplicationDidBecomeActiveNotification - object:[FBSDKApplicationDelegate sharedInstance] - queue:nil - usingBlock:notificationBlock]; -} - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolWebV1.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolWebV1.h deleted file mode 100644 index 5127fc806f..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolWebV1.h +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import - -#import "FBSDKBridgeAPIProtocol.h" - -NS_SWIFT_NAME(BridgeAPIProtocolWebV1) -@interface FBSDKBridgeAPIProtocolWebV1 : NSObject - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolWebV1.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolWebV1.m deleted file mode 100644 index 7258808b65..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolWebV1.m +++ /dev/null @@ -1,121 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKBridgeAPIProtocolWebV1.h" - -#import - -#import "FBSDKBase64.h" -#import "FBSDKBridgeAPIRequest.h" -#import "FBSDKError.h" -#import "FBSDKInternalUtility.h" -#import "FBSDKSettings.h" -#import "FBSDKTypeUtility.h" - -#define FBSDK_BRIDGE_API_PROTOCOL_WEB_V1_ACTION_ID_KEY @"action_id" -#define FBSDK_BRIDGE_API_PROTOCOL_WEB_V1_BRIDGE_ARGS_KEY @"bridge_args" - -@implementation FBSDKBridgeAPIProtocolWebV1 - -#pragma mark - FBSDKBridgeAPIProtocol - -- (NSURL *)requestURLWithActionID:(NSString *)actionID - scheme:(NSString *)scheme - methodName:(NSString *)methodName - methodVersion:(NSString *)methodVersion - parameters:(NSDictionary *)parameters - error:(NSError *__autoreleasing *)errorRef -{ - NSMutableDictionary *queryParameters = [[NSMutableDictionary alloc] initWithDictionary:parameters]; - queryParameters[@"display"] = @"touch"; - NSString *bridgeArgs = [FBSDKBasicUtility JSONStringForObject:@{ FBSDK_BRIDGE_API_PROTOCOL_WEB_V1_ACTION_ID_KEY: actionID } - error:NULL - invalidObjectHandler:NULL]; - NSDictionary *redirectQueryParameters = @{ FBSDK_BRIDGE_API_PROTOCOL_WEB_V1_BRIDGE_ARGS_KEY: bridgeArgs }; - NSURL *redirectURL = [FBSDKInternalUtility appURLWithHost:@"bridge" - path:methodName - queryParameters:redirectQueryParameters - error:NULL]; - [FBSDKBasicUtility dictionary:queryParameters setObject:redirectURL forKey:@"redirect_uri"]; - [queryParameters addEntriesFromDictionary:parameters]; - return [FBSDKInternalUtility facebookURLWithHostPrefix:@"m" - path:[@"/dialog/" stringByAppendingString:methodName] - queryParameters:queryParameters - error:NULL]; -} - -- (NSDictionary *)responseParametersForActionID:(NSString *)actionID - queryParameters:(NSDictionary *)queryParameters - cancelled:(BOOL *)cancelledRef - error:(NSError *__autoreleasing *)errorRef -{ - if (errorRef != NULL) { - *errorRef = nil; - } - NSInteger errorCode = [FBSDKTypeUtility integerValue:queryParameters[@"error_code"]]; - switch (errorCode) { - case 0:{ - // good to go, handle the other codes and bail - break; - } - case 4201:{ - return @{ - @"completionGesture": @"cancel", - }; - break; - } - default:{ - if (errorRef != NULL) { - *errorRef = [FBSDKError errorWithCode:errorCode - message:[FBSDKTypeUtility stringValue:queryParameters[@"error_message"]]]; - } - return nil; - break; - } - } - - NSError *error; - NSString *bridgeParametersJSON = [FBSDKTypeUtility stringValue:queryParameters[FBSDK_BRIDGE_API_PROTOCOL_WEB_V1_BRIDGE_ARGS_KEY]]; - NSDictionary *bridgeParameters = [FBSDKBasicUtility objectForJSONString:bridgeParametersJSON error:&error]; - if (!bridgeParameters) { - if (error && (errorRef != NULL)) { - *errorRef = [FBSDKError invalidArgumentErrorWithName:FBSDK_BRIDGE_API_PROTOCOL_WEB_V1_BRIDGE_ARGS_KEY - value:bridgeParametersJSON - message:nil - underlyingError:error]; - } - return nil; - } - NSString *responseActionID = bridgeParameters[FBSDK_BRIDGE_API_PROTOCOL_WEB_V1_ACTION_ID_KEY]; - responseActionID = [FBSDKTypeUtility stringValue:responseActionID]; - if (![responseActionID isEqualToString:actionID]) { - return nil; - } - NSMutableDictionary *resultParameters = [queryParameters mutableCopy]; - [resultParameters removeObjectForKey:FBSDK_BRIDGE_API_PROTOCOL_WEB_V1_BRIDGE_ARGS_KEY]; - resultParameters[@"didComplete"] = @YES; - return resultParameters; -} - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolWebV2.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolWebV2.h deleted file mode 100644 index 19e7a58dd4..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolWebV2.h +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import - -#import "FBSDKBridgeAPIProtocol.h" - -NS_SWIFT_NAME(BridgeAPIProtocolWebV2) -@interface FBSDKBridgeAPIProtocolWebV2 : NSObject - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolWebV2.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolWebV2.m deleted file mode 100644 index 9f36ec59e9..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolWebV2.m +++ /dev/null @@ -1,135 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKBridgeAPIProtocolWebV2.h" - -#import "FBSDKBridgeAPIProtocolNativeV1.h" -#import "FBSDKDialogConfiguration.h" -#import "FBSDKError.h" -#import "FBSDKInternalUtility.h" -#import "FBSDKServerConfiguration.h" -#import "FBSDKServerConfigurationManager.h" - -@implementation FBSDKBridgeAPIProtocolWebV2 -{ - FBSDKBridgeAPIProtocolNativeV1 *_nativeProtocol; -} - -#pragma mark - Object Lifecycle - -- (instancetype)init -{ - if ((self = [super init])) { - _nativeProtocol = [[FBSDKBridgeAPIProtocolNativeV1 alloc] initWithAppScheme:nil - pasteboard:nil - dataLengthThreshold:0 - includeAppIcon:NO]; - } - return self; -} - -#pragma mark - FBSDKBridgeAPIProtocol - -- (NSURL *)_redirectURLWithActionID:(NSString *)actionID methodName:(NSString *)methodName error:(NSError **)errorRef -{ - NSDictionary *queryParameters = nil; - if (actionID) { - NSDictionary *bridgeArgs = @{ FBSDKBridgeAPIProtocolNativeV1BridgeParameterInputKeys.actionID: actionID }; - NSString *bridgeArgsString = [FBSDKBasicUtility JSONStringForObject:bridgeArgs - error:NULL - invalidObjectHandler:NULL]; - queryParameters = @{ FBSDKBridgeAPIProtocolNativeV1InputKeys.bridgeArgs: bridgeArgsString }; - } - return [FBSDKInternalUtility appURLWithHost:@"bridge" path:methodName queryParameters:queryParameters error:errorRef]; -} - -- (NSURL *)_requestURLForDialogConfiguration:(FBSDKDialogConfiguration *)dialogConfiguration error:(NSError **)errorRef -{ - NSURL *requestURL = dialogConfiguration.URL; - if (!requestURL.scheme) { - requestURL = [FBSDKInternalUtility facebookURLWithHostPrefix:@"m" - path:requestURL.path - queryParameters:@{} - defaultVersion:@"" - error:errorRef]; - } - return requestURL; -} - -- (NSURL *)requestURLWithActionID:(NSString *)actionID - scheme:(NSString *)scheme - methodName:(NSString *)methodName - methodVersion:(NSString *)methodVersion - parameters:(NSDictionary *)parameters - error:(NSError *__autoreleasing *)errorRef -{ - FBSDKServerConfiguration *serverConfiguration = [FBSDKServerConfigurationManager cachedServerConfiguration]; - FBSDKDialogConfiguration *dialogConfiguration = [serverConfiguration dialogConfigurationForDialogName:methodName]; - if (!dialogConfiguration) { - if (errorRef != NULL) { - *errorRef = [FBSDKError errorWithCode:FBSDKErrorDialogUnavailable message:nil]; - } - return nil; - } - - NSURL *requestURL = [_nativeProtocol requestURLWithActionID:actionID - scheme:scheme - methodName:methodName - methodVersion:methodVersion - parameters:parameters error:errorRef]; - if (!requestURL) { - return nil; - } - - NSMutableDictionary *queryParameters = [[FBSDKBasicUtility dictionaryWithQueryString:requestURL.query] mutableCopy]; - queryParameters[@"ios_bundle_id"] = [NSBundle mainBundle].bundleIdentifier; - NSURL *redirectURL = [self _redirectURLWithActionID:nil methodName:methodName error:errorRef]; - if (!redirectURL) { - return nil; - } - queryParameters[@"redirect_url"] = redirectURL; - - requestURL = [self _requestURLForDialogConfiguration:dialogConfiguration error:errorRef]; - if (!requestURL) { - return nil; - } - return [FBSDKInternalUtility URLWithScheme:requestURL.scheme - host:requestURL.host - path:requestURL.path - queryParameters:queryParameters - error:errorRef]; -} - -- (NSDictionary *)responseParametersForActionID:(NSString *)actionID - queryParameters:(NSDictionary *)queryParameters - cancelled:(BOOL *)cancelledRef - error:(NSError *__autoreleasing *)errorRef -{ - return [_nativeProtocol responseParametersForActionID:actionID - queryParameters:queryParameters - cancelled:cancelledRef - error:errorRef]; -} - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Cryptography/FBSDKCrypto.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Cryptography/FBSDKCrypto.h deleted file mode 100644 index 226bb9b447..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Cryptography/FBSDKCrypto.h +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -NS_SWIFT_NAME(Crypto) -@interface FBSDKCrypto : NSObject - -/** - Generate numOfBytes random data. - - This calls the system-provided function SecRandomCopyBytes, based on /dev/random. - */ -+ (NSData *)randomBytes:(NSUInteger)numOfBytes; - -/** - * Generate numOfBytes random data, base64-encoded. - * This calls the system-provided function SecRandomCopyBytes, based on /dev/random. - */ -+ (NSString *)randomString:(NSUInteger)numOfBytes; - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Cryptography/FBSDKCrypto.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Cryptography/FBSDKCrypto.m deleted file mode 100644 index f9365b8ce2..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Cryptography/FBSDKCrypto.m +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKCrypto.h" - -#import "FBSDKBase64.h" -#import "FBSDKDynamicFrameworkLoader.h" - -static inline void FBSDKCryptoBlankData(NSData *data) -{ - if (!data) { - return; - } - bzero((void *) [data bytes], [data length]); -} - -@implementation FBSDKCrypto - -+ (NSData *)randomBytes:(NSUInteger)numOfBytes -{ - uint8_t *buffer = malloc(numOfBytes); - int result = fbsdkdfl_SecRandomCopyBytes([FBSDKDynamicFrameworkLoader loadkSecRandomDefault], numOfBytes, buffer); - if (result != 0) { - free(buffer); - return nil; - } - return [NSData dataWithBytesNoCopy:buffer length:numOfBytes]; -} - -+ (NSString *)randomString:(NSUInteger)numOfBytes -{ - NSData *randomStringData = [FBSDKCrypto randomBytes:numOfBytes]; - NSString *randomString = [FBSDKBase64 encodeData:randomStringData]; - FBSDKCryptoBlankData(randomStringData); - return randomString; -} - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Device/FBSDKDeviceButton+Internal.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Device/FBSDKDeviceButton+Internal.h deleted file mode 100644 index d9c41d450f..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Device/FBSDKDeviceButton+Internal.h +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if TARGET_OS_TV - -#import - -#if SWIFT_PACKAGE -#import "FBSDKDeviceButton.h" -#else -#import -#endif - -@interface FBSDKDeviceButton () - -- (NSAttributedString *)attributedTitleStringFromString:(NSString *)string; -- (CGSize)sizeThatFits:(CGSize)size title:(NSString *)title; -- (CGSize)sizeThatFits:(CGSize)size attributedTitle:(NSAttributedString *)title; - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Device/FBSDKDeviceDialogView.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Device/FBSDKDeviceDialogView.h deleted file mode 100644 index a8199c8669..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Device/FBSDKDeviceDialogView.h +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if TARGET_OS_TV - -#import - -NS_SWIFT_NAME(DeviceDialogViewDelegate) -@protocol FBSDKDeviceDialogViewDelegate; - -// internal class, APIs are subject to change. -NS_SWIFT_NAME(FBDeviceDialogView) -@interface FBSDKDeviceDialogView : UIView - -@property (nonatomic, weak) id delegate; -@property (nonatomic, copy) NSString *confirmationCode; - -// override point for subclasses. -- (void)buildView; - -@end - -NS_SWIFT_NAME(DeviceDialogViewDelegate) -@protocol FBSDKDeviceDialogViewDelegate - -- (void)deviceDialogViewDidCancel:(FBSDKDeviceDialogView *)deviceDialogView; - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Device/FBSDKDeviceDialogView.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Device/FBSDKDeviceDialogView.m deleted file mode 100644 index 6cdce274ec..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Device/FBSDKDeviceDialogView.m +++ /dev/null @@ -1,227 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if TARGET_OS_TV - -#import "FBSDKDeviceDialogView.h" - -#import "FBSDKCoreKit+Internal.h" -#import "FBSDKDeviceUtilities.h" - -@implementation FBSDKDeviceDialogView -{ - UIActivityIndicatorView *_spinner; - UILabel *_confirmationCodeLabel; - UIImageView *_qrImageView; -} - -- (instancetype)initWithFrame:(CGRect)frame -{ - if ((self = [super initWithFrame:frame])) { - [self buildView]; - [self setNeedsUpdateConstraints]; - } - return self; -} - -#pragma mark - Properties - -- (void)setConfirmationCode:(NSString *)confirmationCode -{ - if (![_confirmationCode isEqualToString:confirmationCode]) { - if (confirmationCode == nil) { - _confirmationCodeLabel.text = @""; - _confirmationCodeLabel.hidden = YES; - _qrImageView.hidden = YES; - [_spinner startAnimating]; - } else { - [_spinner stopAnimating]; - _confirmationCodeLabel.text = confirmationCode; - _confirmationCodeLabel.hidden = NO; - _qrImageView.hidden = NO; - [_qrImageView setImage:[FBSDKDeviceUtilities buildQRCodeWithAuthorizationCode:confirmationCode]]; - } - } -} - -#pragma mark - Helpers - -- (void)buildView -{ - // This is a "static" view with just a cancel button so add all the constraints here - // rather than properly override `updateConstraints`. - const CGFloat kWidth = 1080; - const CGFloat kHeight = 820; - const CGFloat kVerticalSpaceBetweenHeaderViewAndInstructionLabel = 102; - const CGFloat kVerticalSpaceBetweenCancelButtonAndButtomAnchor = 117; - const CGFloat kDialogHeaderViewHeight = 309; - const CGFloat kLogoSize = 44; - const CGFloat kLogoMargin = 30; - const CGFloat kInstructionTextHorizontalMargin = 151; - const CGFloat kConfirmationCodeFontSize = 108; - const CGFloat kFontColorValue = 119.0/255.0; - const CGFloat kInstructionFontSize = 36; - const CGFloat kQRCodeMargin = 50; - const CGFloat kQRCodeSize = 200; - - // build the container view. - UIView *dialogView = [[UIView alloc] init]; - dialogView.layer.cornerRadius = 3; - dialogView.translatesAutoresizingMaskIntoConstraints = NO; - dialogView.clipsToBounds = YES; - dialogView.backgroundColor = [UIColor whiteColor]; - [self addSubview:dialogView]; - [NSLayoutConstraint constraintWithItem:dialogView attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0].active = YES;; - [NSLayoutConstraint constraintWithItem:dialogView attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeCenterY multiplier:1.0 constant:0].active = YES; - [dialogView.widthAnchor constraintEqualToConstant:kWidth].active = YES; - [dialogView.heightAnchor constraintEqualToConstant:kHeight].active = YES; - - // build the header container view (which will contain the logo and code). - UIView *dialogHeaderView = [[UIView alloc] init]; - dialogHeaderView.translatesAutoresizingMaskIntoConstraints = NO; - dialogHeaderView.backgroundColor = [UIColor colorWithRed:226.0/255.0 green:231.0/255.0 blue:235.0/255.0 alpha:0.85]; - [dialogView addSubview:dialogHeaderView]; - [dialogHeaderView.leadingAnchor constraintEqualToAnchor:dialogView.leadingAnchor].active = YES; - [dialogHeaderView.trailingAnchor constraintEqualToAnchor:dialogView.trailingAnchor].active = YES; - [dialogHeaderView.heightAnchor constraintEqualToConstant:kDialogHeaderViewHeight].active = YES; - [dialogHeaderView.topAnchor constraintEqualToAnchor:dialogView.topAnchor].active = YES; - - // build the logo. - CGSize imageSize = CGSizeMake(kLogoSize, kLogoSize); - FBSDKLogo *logoHelper =[[FBSDKLogo alloc] initWithColor:[UIColor colorWithRed:66.0/255.0 green:103.0/255.0 blue:178.0/255.0 alpha:1]]; - UIImage *image = [logoHelper imageWithSize:imageSize]; - image = [image resizableImageWithCapInsets:UIEdgeInsetsZero resizingMode:UIImageResizingModeStretch]; - UIImageView *imageView = [[UIImageView alloc] initWithImage:image]; - imageView.translatesAutoresizingMaskIntoConstraints = NO; - [dialogHeaderView addSubview:imageView]; - [imageView.widthAnchor constraintEqualToConstant:kLogoSize].active = YES; - [imageView.heightAnchor constraintEqualToConstant:kLogoSize].active = YES; - [imageView.topAnchor constraintEqualToAnchor:dialogHeaderView.topAnchor constant:kLogoMargin].active = YES; - [imageView.leadingAnchor constraintEqualToAnchor:dialogHeaderView.leadingAnchor constant:kLogoMargin].active = YES; - - // build the activity spinner - _spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; - _spinner.translatesAutoresizingMaskIntoConstraints = NO; - [dialogHeaderView addSubview:_spinner]; - [NSLayoutConstraint constraintWithItem:_spinner attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:dialogHeaderView attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0].active = YES; - [NSLayoutConstraint constraintWithItem:_spinner attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:dialogHeaderView attribute:NSLayoutAttributeCenterY multiplier:1.0 constant:0].active = YES; - [_spinner.widthAnchor constraintEqualToConstant:kConfirmationCodeFontSize].active = YES; - [_spinner.heightAnchor constraintEqualToConstant:kConfirmationCodeFontSize].active = YES; - [_spinner startAnimating]; - - // build the confirmation code (which replaces the spinner when the code is available). - _confirmationCodeLabel = [[UILabel alloc] init]; - _confirmationCodeLabel.translatesAutoresizingMaskIntoConstraints = NO; - _confirmationCodeLabel.textColor = logoHelper.color; - _confirmationCodeLabel.font = [UIFont systemFontOfSize:kConfirmationCodeFontSize weight:UIFontWeightLight]; - _confirmationCodeLabel.textAlignment = NSTextAlignmentCenter; - [_confirmationCodeLabel sizeToFit]; - [dialogHeaderView addSubview:_confirmationCodeLabel]; - [NSLayoutConstraint constraintWithItem:_confirmationCodeLabel attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:dialogHeaderView attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0].active = YES; - [NSLayoutConstraint constraintWithItem:_confirmationCodeLabel attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:dialogHeaderView attribute:NSLayoutAttributeCenterY multiplier:1.0 constant:0].active = YES; - _confirmationCodeLabel.hidden = YES; - - // Build the QR code view - _qrImageView = [[UIImageView alloc] initWithImage:[FBSDKDeviceUtilities buildQRCodeWithAuthorizationCode:NULL]]; - _qrImageView.translatesAutoresizingMaskIntoConstraints = NO; - [dialogView addSubview:_qrImageView]; - - [_qrImageView.topAnchor constraintEqualToAnchor:dialogHeaderView.bottomAnchor - constant:kQRCodeMargin].active = YES; - [_qrImageView.bottomAnchor constraintEqualToAnchor:_qrImageView.topAnchor - constant:kQRCodeSize].active = YES; - [_qrImageView.leadingAnchor constraintEqualToAnchor:dialogView.leadingAnchor - constant:kQRCodeMargin].active = YES; - [_qrImageView.trailingAnchor constraintEqualToAnchor:_qrImageView.leadingAnchor - constant:kQRCodeSize].active = YES; - - // build the instructions UILabel - UILabel *instructionLabel = [[UILabel alloc] init]; - instructionLabel.translatesAutoresizingMaskIntoConstraints = NO; - NSString *localizedFormatString = NSLocalizedStringWithDefaultValue(@"DeviceLogin.LogInPrompt", - @"FacebookSDK", - [FBSDKInternalUtility bundleForStrings], - @"Visit %@ and enter your code.", - @"The format string for device login instructions"); - NSString *const deviceLoginURLString = @"facebook.com/device"; - NSString *instructionString = [NSString localizedStringWithFormat:localizedFormatString, deviceLoginURLString]; - NSMutableParagraphStyle *instructionLabelParagraphStyle = [[NSMutableParagraphStyle alloc] init]; - instructionLabelParagraphStyle.lineHeightMultiple = 1.1; - NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:instructionString - attributes:@{ NSParagraphStyleAttributeName : instructionLabelParagraphStyle }]; - NSRange range = [instructionString rangeOfString:deviceLoginURLString]; - [attributedString addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:kInstructionFontSize weight:UIFontWeightMedium] range:range]; - instructionLabel.font = [UIFont systemFontOfSize:kInstructionFontSize weight:UIFontWeightLight]; - instructionLabel.attributedText = attributedString; - instructionLabel.numberOfLines = 0; - instructionLabel.textAlignment = NSTextAlignmentCenter; - [instructionLabel sizeToFit]; - instructionLabel.textColor = [UIColor colorWithWhite:kFontColorValue alpha:1.0]; - [dialogView addSubview:instructionLabel]; - [instructionLabel.topAnchor constraintEqualToAnchor:dialogHeaderView.bottomAnchor - constant:kVerticalSpaceBetweenHeaderViewAndInstructionLabel].active = YES; - [instructionLabel.leadingAnchor constraintEqualToAnchor:_qrImageView.trailingAnchor - constant:kQRCodeMargin].active = YES; - [dialogView.trailingAnchor constraintEqualToAnchor:instructionLabel.trailingAnchor - constant:kInstructionTextHorizontalMargin].active = YES; - - // build the container view for the cancel button. - UIView *buttonContainerView = [[UIView alloc] init]; - buttonContainerView.translatesAutoresizingMaskIntoConstraints = NO; - [dialogView addSubview:buttonContainerView]; - [NSLayoutConstraint constraintWithItem:buttonContainerView attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:dialogView attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0].active = YES; - - [buttonContainerView.heightAnchor constraintEqualToConstant:100].active = YES; - [buttonContainerView.leadingAnchor constraintEqualToAnchor:dialogView.leadingAnchor - constant:400].active = YES; - [dialogView.trailingAnchor constraintEqualToAnchor:buttonContainerView.trailingAnchor - constant:400].active = YES; - [dialogView.bottomAnchor constraintEqualToAnchor:buttonContainerView.bottomAnchor - constant:kVerticalSpaceBetweenCancelButtonAndButtomAnchor].active = YES; - - // build the cancel button. - UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem]; - button.layer.cornerRadius = 4.0; - button.translatesAutoresizingMaskIntoConstraints = NO; - [button setTitle:NSLocalizedStringWithDefaultValue(@"LoginButton.CancelLogout", - @"FacebookSDK", - [FBSDKInternalUtility bundleForStrings], - @"Cancel", - @"The label for the FBSDKLoginButton action sheet to cancel logging out") - forState:UIControlStateNormal]; - button.titleLabel.font = instructionLabel.font; - [buttonContainerView addSubview:button]; - [button.leadingAnchor constraintEqualToAnchor:buttonContainerView.leadingAnchor].active = YES; - [button.trailingAnchor constraintEqualToAnchor:buttonContainerView.trailingAnchor].active = YES; - [button.topAnchor constraintEqualToAnchor:buttonContainerView.topAnchor].active = YES; - [button.bottomAnchor constraintEqualToAnchor:buttonContainerView.bottomAnchor].active = YES; - [button setTitleColor:[UIColor colorWithWhite:kFontColorValue alpha:1] forState:UIControlStateNormal]; - - [button addTarget:self action:@selector(_cancelButtonTap:) forControlEvents:UIControlEventPrimaryActionTriggered]; -} - -- (void)_cancelButtonTap:(id)sender -{ - [self.delegate deviceDialogViewDidCancel:self]; -} - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Device/FBSDKDeviceUtilities.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Device/FBSDKDeviceUtilities.h deleted file mode 100644 index 90b626bf4b..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Device/FBSDKDeviceUtilities.h +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if TARGET_OS_TV - -#import - -NS_SWIFT_NAME(DeviceUtilities) -@interface FBSDKDeviceUtilities : NSObject - -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; - -+ (UIImage *)buildQRCodeWithAuthorizationCode:(NSString *)authorizationCode; - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Device/FBSDKDeviceUtilities.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Device/FBSDKDeviceUtilities.m deleted file mode 100644 index bbe0a1c1c3..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Device/FBSDKDeviceUtilities.m +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if TARGET_OS_TV - -#import "FBSDKDeviceUtilities.h" - -@implementation FBSDKDeviceUtilities - -+ (UIImage *)buildQRCodeWithAuthorizationCode:(NSString *)authorizationCode -{ - NSString *authorizationUri = @"https://facebook.com/device"; - if ([authorizationUri length] > 0) { - authorizationUri = [NSString stringWithFormat:@"https://facebook.com/device?user_code=%@&qr=1", authorizationCode]; - } - NSData *qrCodeData = [authorizationUri dataUsingEncoding:NSISOLatin1StringEncoding]; - - CIFilter *qrCodeFilter = [CIFilter filterWithName:@"CIQRCodeGenerator"]; - [qrCodeFilter setValue:qrCodeData forKey:@"inputMessage"]; - [qrCodeFilter setValue:@"M" forKey:@"inputCorrectionLevel"]; - - CIImage *qrCodeImage = qrCodeFilter.outputImage; - CGRect qrImageSize = CGRectIntegral(qrCodeImage.extent); - CGSize qrOutputSize = CGSizeMake(200, 200); - - CIImage *resizedImage = - [qrCodeImage imageByApplyingTransform: CGAffineTransformMakeScale(qrOutputSize.width / CGRectGetWidth(qrImageSize), - qrOutputSize.height / CGRectGetHeight(qrImageSize))]; - - return [UIImage imageWithCIImage:resizedImage]; -} - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Device/FBSDKDeviceViewControllerBase+Internal.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Device/FBSDKDeviceViewControllerBase+Internal.h deleted file mode 100644 index 020b4e9d13..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Device/FBSDKDeviceViewControllerBase+Internal.h +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if TARGET_OS_TV - -#if SWIFT_PACKAGE -#import "FBSDKDeviceViewControllerBase.h" -#else -#import -#endif - -#import "FBSDKCoreKit+Internal.h" -#import "FBSDKDeviceDialogView.h" - -@class FBSDKDeviceDialogView; - -NS_ASSUME_NONNULL_BEGIN - -/* - An internal base class for device related flows. - - This is an internal API that should not be used directly and is subject to change. -*/ -@interface FBSDKDeviceViewControllerBase()< -UIViewControllerAnimatedTransitioning, -UIViewControllerTransitioningDelegate, -FBSDKDeviceDialogViewDelegate -> - -@property (nonatomic, strong, readonly) FBSDKDeviceDialogView *deviceDialogView; - -@end - -NS_ASSUME_NONNULL_END - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Device/FBSDKModalFormPresentationController.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Device/FBSDKModalFormPresentationController.h deleted file mode 100644 index 0dcf0a1bc0..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Device/FBSDKModalFormPresentationController.h +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if TARGET_OS_TV - -#import - -NS_ASSUME_NONNULL_BEGIN - -// Custom UIPresentationController that is similar to -// UIModalPresentationFormSheet style (which is not available -// on tvOS). -NS_SWIFT_NAME(FBModalFormPresentationController) -@interface FBSDKModalFormPresentationController : UIPresentationController - -@end - -NS_ASSUME_NONNULL_END - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Device/FBSDKModalFormPresentationController.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Device/FBSDKModalFormPresentationController.m deleted file mode 100644 index e49e69a5fd..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Device/FBSDKModalFormPresentationController.m +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if TARGET_OS_TV - -#import "FBSDKModalFormPresentationController.h" - -@implementation FBSDKModalFormPresentationController { - UIView *_dimmedView; -} - -- (UIView *)dimmedView -{ - if (!_dimmedView) { - _dimmedView = [[UIView alloc] initWithFrame:self.containerView.bounds]; - _dimmedView.backgroundColor = [UIColor colorWithWhite:0 alpha:.6]; - } - return _dimmedView; -} - -#pragma mark - UIPresentationController overrides - -- (void)presentationTransitionWillBegin -{ - [self.containerView addSubview:[self dimmedView]]; - [self.containerView addSubview:[self presentedView]]; - [self.presentingViewController.transitionCoordinator - animateAlongsideTransition:^(id _Nonnull context) { - [self dimmedView].alpha = 1.0; - } completion:NULL]; -} - -- (void)presentationTransitionDidEnd:(BOOL)completed -{ - if (!completed) { - [[self dimmedView] removeFromSuperview]; - } -} - -- (void)dismissalTransitionWillBegin -{ - [self.presentingViewController.transitionCoordinator - animateAlongsideTransition:^(id _Nonnull context) { - [self dimmedView].alpha = 0; - } completion:NULL]; -} - -- (void)dismissalTransitionDidEnd:(BOOL)completed -{ - if (completed) { - [[self dimmedView] removeFromSuperview]; - } -} - -// technically not necessary for tvOS yet since there's no resizing. -- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id)coordinator -{ - [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]; - [coordinator animateAlongsideTransition:^(id _Nonnull context) { - [self dimmedView].frame = self.containerView.bounds; - } completion:NULL]; -} - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Device/FBSDKSmartDeviceDialogView.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Device/FBSDKSmartDeviceDialogView.h deleted file mode 100644 index eb9576bd36..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Device/FBSDKSmartDeviceDialogView.h +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if TARGET_OS_TV - -#import - -#import "FBSDKDeviceDialogView.h" - -NS_SWIFT_NAME(FBSmartDeviceDialogView) -@interface FBSDKSmartDeviceDialogView : FBSDKDeviceDialogView - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Device/FBSDKSmartDeviceDialogView.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Device/FBSDKSmartDeviceDialogView.m deleted file mode 100644 index 430801257b..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Device/FBSDKSmartDeviceDialogView.m +++ /dev/null @@ -1,276 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if TARGET_OS_TV - -#import "FBSDKSmartDeviceDialogView.h" - -#import "FBSDKCoreKit+Internal.h" -#import "FBSDKDeviceUtilities.h" - -@implementation FBSDKSmartDeviceDialogView -{ - UIActivityIndicatorView *_spinner; - UILabel *_confirmationCodeLabel; - UIImageView *_qrImageView; -} - -- (instancetype)initWithFrame:(CGRect)frame -{ - if ((self = [super initWithFrame:frame])) { - [self _buildView]; - } - return self; -} - -#pragma mark - Overrides - -- (void)setConfirmationCode:(NSString *)confirmationCode -{ - if (![self.confirmationCode isEqualToString:confirmationCode]) { - if (confirmationCode == nil) { - _confirmationCodeLabel.text = @""; - _confirmationCodeLabel.hidden = YES; - _qrImageView.hidden = YES; - [_spinner startAnimating]; - } else { - [_spinner stopAnimating]; - _confirmationCodeLabel.text = confirmationCode; - _confirmationCodeLabel.hidden = NO; - _qrImageView.hidden = NO; - [_qrImageView setImage:[FBSDKDeviceUtilities buildQRCodeWithAuthorizationCode:confirmationCode]]; - } - } -} - -- (void)buildView -{ - //intentionally blank. -} - -#pragma mark - Helpers - -- (void)_buildView -{ - // This is a "static" view with just a cancel button so add all the constraints here - // rather than properly override `updateConstraints`. - const CGFloat kWidth = 1080; - const CGFloat kVerticalSpaceBetweenHeaderViewAndInstructionLabel = 50; - const CGFloat kDialogHeaderViewHeight = 250; - const CGFloat kLogoSize = 44; - const CGFloat kLogoMargin = 30; - const CGFloat kInstructionTextHorizontalMargin = 100; - const CGFloat kConfirmationCodeFontSize = 108; - const CGFloat kFontColorValue = 119.0/255.0; - const CGFloat kInstructionFontSize = 32; - const CGFloat kVerticalMarginOrLabel = 40; - const CGFloat kQRCodeSize = 200; - const CGFloat kQRCodeMargin = (kWidth - kQRCodeSize) / 2; - - // build the container view. - UIView *dialogView = [[UIView alloc] init]; - dialogView.layer.cornerRadius = 3; - dialogView.translatesAutoresizingMaskIntoConstraints = NO; - dialogView.clipsToBounds = YES; - dialogView.backgroundColor = [UIColor whiteColor]; - [self addSubview:dialogView]; - [NSLayoutConstraint constraintWithItem:dialogView attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0].active = YES;; - [NSLayoutConstraint constraintWithItem:dialogView attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeCenterY multiplier:1.0 constant:0].active = YES; - [dialogView.widthAnchor constraintEqualToConstant:kWidth].active = YES; - - // build the header container view (which will contain the logo and code). - UIView *dialogHeaderView = [[UIView alloc] init]; - dialogHeaderView.translatesAutoresizingMaskIntoConstraints = NO; - dialogHeaderView.backgroundColor = [UIColor colorWithRed:226.0/255.0 green:231.0/255.0 blue:235.0/255.0 alpha:0.85]; - [dialogView addSubview:dialogHeaderView]; - [dialogHeaderView.leadingAnchor constraintEqualToAnchor:dialogView.leadingAnchor].active = YES; - [dialogHeaderView.trailingAnchor constraintEqualToAnchor:dialogView.trailingAnchor].active = YES; - [dialogHeaderView.heightAnchor constraintEqualToConstant:kDialogHeaderViewHeight].active = YES; - [dialogHeaderView.topAnchor constraintEqualToAnchor:dialogView.topAnchor].active = YES; - - // build the logo. - CGSize imageSize = CGSizeMake(kLogoSize, kLogoSize); - FBSDKLogo *logoHelper =[[FBSDKLogo alloc] initWithColor:[UIColor colorWithRed:66.0/255.0 green:103.0/255.0 blue:178.0/255.0 alpha:1]]; - UIImage *image = [logoHelper imageWithSize:imageSize]; - image = [image resizableImageWithCapInsets:UIEdgeInsetsZero resizingMode:UIImageResizingModeStretch]; - UIImageView *imageView = [[UIImageView alloc] initWithImage:image]; - imageView.translatesAutoresizingMaskIntoConstraints = NO; - [dialogHeaderView addSubview:imageView]; - [imageView.widthAnchor constraintEqualToConstant:kLogoSize].active = YES; - [imageView.heightAnchor constraintEqualToConstant:kLogoSize].active = YES; - [imageView.topAnchor constraintEqualToAnchor:dialogHeaderView.topAnchor constant:kLogoMargin].active = YES; - [imageView.leadingAnchor constraintEqualToAnchor:dialogHeaderView.leadingAnchor constant:kLogoMargin].active = YES; - - // build the activity spinner - _spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; - _spinner.translatesAutoresizingMaskIntoConstraints = NO; - [dialogHeaderView addSubview:_spinner]; - [NSLayoutConstraint constraintWithItem:_spinner attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:dialogHeaderView attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0].active = YES; - [NSLayoutConstraint constraintWithItem:_spinner attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:dialogHeaderView attribute:NSLayoutAttributeCenterY multiplier:1.0 constant:0].active = YES; - [_spinner.widthAnchor constraintEqualToConstant:kConfirmationCodeFontSize].active = YES; - [_spinner.heightAnchor constraintEqualToConstant:kConfirmationCodeFontSize].active = YES; - [_spinner startAnimating]; - - // build the confirmation code (which replaces the spinner when the code is available). - _confirmationCodeLabel = [[UILabel alloc] init]; - _confirmationCodeLabel.translatesAutoresizingMaskIntoConstraints = NO; - _confirmationCodeLabel.textColor = logoHelper.color; - _confirmationCodeLabel.font = [UIFont systemFontOfSize:kConfirmationCodeFontSize weight:UIFontWeightLight]; - _confirmationCodeLabel.textAlignment = NSTextAlignmentCenter; - [_confirmationCodeLabel sizeToFit]; - [dialogHeaderView addSubview:_confirmationCodeLabel]; - [NSLayoutConstraint constraintWithItem:_confirmationCodeLabel attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:dialogHeaderView attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0].active = YES; - [NSLayoutConstraint constraintWithItem:_confirmationCodeLabel attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:dialogHeaderView attribute:NSLayoutAttributeCenterY multiplier:1.0 constant:0].active = YES; - _confirmationCodeLabel.hidden = YES; - - // build the smartlogin instructions - UILabel *smartInstructionLabel = [[UILabel alloc] init]; - smartInstructionLabel.translatesAutoresizingMaskIntoConstraints = NO; - NSString *smartInstructionString = NSLocalizedStringWithDefaultValue(@"DeviceLogin.SmartLogInPrompt", - @"FacebookSDK", - [FBSDKInternalUtility bundleForStrings], - @"To connect your account, open the Facebook app on your mobile device and check for notifications.", - @"Instructions telling the user to open their Facebook app on a mobile device and check for a login notification."); - - NSMutableParagraphStyle *instructionLabelParagraphStyle = [[NSMutableParagraphStyle alloc] init]; - instructionLabelParagraphStyle.lineHeightMultiple = 1.3; - NSMutableAttributedString *attributedSmartString = [[NSMutableAttributedString alloc] initWithString:smartInstructionString - attributes:@{ NSParagraphStyleAttributeName : instructionLabelParagraphStyle }]; - - UIFont *instructionFont = [UIFont systemFontOfSize:kInstructionFontSize weight:UIFontWeightLight]; - smartInstructionLabel.font = instructionFont; - smartInstructionLabel.attributedText = attributedSmartString; - smartInstructionLabel.numberOfLines = 0; - smartInstructionLabel.textAlignment = NSTextAlignmentCenter; - [smartInstructionLabel sizeToFit]; - - smartInstructionLabel.textColor = [UIColor colorWithWhite:kFontColorValue alpha:1.0]; - [dialogView addSubview:smartInstructionLabel]; - [smartInstructionLabel.topAnchor constraintEqualToAnchor:dialogHeaderView.bottomAnchor - constant:kVerticalSpaceBetweenHeaderViewAndInstructionLabel].active = YES; - [smartInstructionLabel.leadingAnchor constraintEqualToAnchor:dialogView.leadingAnchor constant:kInstructionTextHorizontalMargin].active = YES; - [dialogView.trailingAnchor constraintEqualToAnchor:smartInstructionLabel.trailingAnchor constant:kInstructionTextHorizontalMargin].active = YES; - - // build 'or' label - UILabel *orInstructionLabel = [[UILabel alloc] init]; - orInstructionLabel.translatesAutoresizingMaskIntoConstraints = NO; - orInstructionLabel.font = [UIFont systemFontOfSize:kInstructionFontSize weight:UIFontWeightBold]; - orInstructionLabel.text = NSLocalizedStringWithDefaultValue(@"DeviceLogin.SmartLogInOrLabel", - @"FacebookSDK", - [FBSDKInternalUtility bundleForStrings], - @"-- OR --", - @"The 'or' string for smart login instructions");; - orInstructionLabel.numberOfLines = 0; - orInstructionLabel.textAlignment = NSTextAlignmentCenter; - [orInstructionLabel sizeToFit]; - orInstructionLabel.textColor = [UIColor colorWithWhite:kFontColorValue alpha:1.0]; - [dialogView addSubview:orInstructionLabel]; - [orInstructionLabel.topAnchor constraintEqualToAnchor:smartInstructionLabel.bottomAnchor constant:kVerticalMarginOrLabel].active = YES; - - [orInstructionLabel.leadingAnchor constraintEqualToAnchor:dialogView.leadingAnchor constant:kInstructionTextHorizontalMargin].active = YES; - [dialogView.trailingAnchor constraintEqualToAnchor:orInstructionLabel.trailingAnchor constant:kInstructionTextHorizontalMargin].active = YES; - - // Build the QR code view - _qrImageView = [[UIImageView alloc] initWithImage:[FBSDKDeviceUtilities buildQRCodeWithAuthorizationCode:NULL]]; - _qrImageView.translatesAutoresizingMaskIntoConstraints = NO; - [dialogView addSubview:_qrImageView]; - - [_qrImageView.topAnchor constraintEqualToAnchor:orInstructionLabel.bottomAnchor - constant:kVerticalMarginOrLabel].active = YES; - [_qrImageView.bottomAnchor constraintEqualToAnchor:_qrImageView.topAnchor - constant:kQRCodeSize].active = YES; - [_qrImageView.leadingAnchor constraintEqualToAnchor:dialogView.leadingAnchor - constant:kQRCodeMargin].active = YES; - [dialogView.trailingAnchor constraintEqualToAnchor:_qrImageView.trailingAnchor - constant:kQRCodeMargin].active = YES; - - // build the instructions UILabel - UILabel *instructionLabel = [[UILabel alloc] init]; - instructionLabel.translatesAutoresizingMaskIntoConstraints = NO; - NSString *localizedFormatString = NSLocalizedStringWithDefaultValue(@"DeviceLogin.LogInPrompt", - @"FacebookSDK", - [FBSDKInternalUtility bundleForStrings], - @"Visit %@ and enter the code shown above.", - @"The format string for device login instructions"); - - NSString *const deviceLoginURLString = @"facebook.com/device"; - NSString *instructionString = [NSString localizedStringWithFormat:localizedFormatString, deviceLoginURLString]; - NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:instructionString - attributes:@{ NSParagraphStyleAttributeName : instructionLabelParagraphStyle }]; - NSRange range = [instructionString rangeOfString:deviceLoginURLString]; - [attributedString addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:kInstructionFontSize weight:UIFontWeightMedium] range:range]; - instructionLabel.font = instructionFont; - instructionLabel.attributedText = attributedString; - instructionLabel.numberOfLines = 0; - instructionLabel.textAlignment = NSTextAlignmentCenter; - [instructionLabel sizeToFit]; - instructionLabel.textColor = [UIColor colorWithWhite:kFontColorValue alpha:1.0]; - [dialogView addSubview:instructionLabel]; - [instructionLabel.topAnchor constraintEqualToAnchor:_qrImageView.bottomAnchor - constant:kVerticalMarginOrLabel].active = YES; - [instructionLabel.leadingAnchor constraintEqualToAnchor:dialogView.leadingAnchor - constant:kInstructionTextHorizontalMargin].active = YES; - [dialogView.trailingAnchor constraintEqualToAnchor:instructionLabel.trailingAnchor - constant:kInstructionTextHorizontalMargin].active = YES; - - // build the container view for the cancel button. - UIView *buttonContainerView = [[UIView alloc] init]; - buttonContainerView.translatesAutoresizingMaskIntoConstraints = NO; - [dialogView addSubview:buttonContainerView]; - [NSLayoutConstraint constraintWithItem:buttonContainerView attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:dialogView attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0].active = YES; - [buttonContainerView.heightAnchor constraintEqualToConstant:60].active = YES; - [buttonContainerView.leadingAnchor constraintEqualToAnchor:dialogView.leadingAnchor - constant:400].active = YES; - [dialogView.trailingAnchor constraintEqualToAnchor:buttonContainerView.trailingAnchor - constant:400].active = YES; - [buttonContainerView.topAnchor constraintEqualToAnchor:instructionLabel.bottomAnchor - constant:kVerticalMarginOrLabel].active = YES; - [dialogView.bottomAnchor constraintEqualToAnchor:buttonContainerView.bottomAnchor - constant:kVerticalMarginOrLabel].active = YES; - - // build the cancel button. - UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem]; - button.layer.cornerRadius = 4.0; - button.translatesAutoresizingMaskIntoConstraints = NO; - [button setTitle:NSLocalizedStringWithDefaultValue(@"LoginButton.CancelLogout", - @"FacebookSDK", - [FBSDKInternalUtility bundleForStrings], - @"Cancel", - @"The label for the FBSDKLoginButton action sheet to cancel logging out") - forState:UIControlStateNormal]; - button.titleLabel.font = instructionLabel.font; - [buttonContainerView addSubview:button]; - [button.leadingAnchor constraintEqualToAnchor:buttonContainerView.leadingAnchor].active = YES; - [button.trailingAnchor constraintEqualToAnchor:buttonContainerView.trailingAnchor].active = YES; - [button.topAnchor constraintEqualToAnchor:buttonContainerView.topAnchor].active = YES; - [button.bottomAnchor constraintEqualToAnchor:buttonContainerView.bottomAnchor].active = YES; - [button setTitleColor:[UIColor colorWithWhite:kFontColorValue alpha:1] forState:UIControlStateNormal]; - - [button addTarget:self action:@selector(_cancelButtonTap:) forControlEvents:UIControlEventPrimaryActionTriggered]; -} - -- (void)_cancelButtonTap:(id)sender -{ - [self.delegate deviceDialogViewDidCancel:self]; -} - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ErrorRecovery/FBSDKErrorRecoveryAttempter.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ErrorRecovery/FBSDKErrorRecoveryAttempter.h deleted file mode 100644 index af47bbc00d..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ErrorRecovery/FBSDKErrorRecoveryAttempter.h +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -#if SWIFT_PACKAGE -#import "FBSDKConstants.h" -#else -#import -#endif - -@class FBSDKErrorRecoveryConfiguration; - -NS_SWIFT_NAME(ErrorRecoveryAttempter) -@interface FBSDKErrorRecoveryAttempter : NSObject - -// can return nil if configuration is not supported. -+ (instancetype)recoveryAttempterFromConfiguration:(FBSDKErrorRecoveryConfiguration *)configuration; - -@end - -@interface FBSDKErrorRecoveryAttempter (Protected) -- (void)completeRecovery:(BOOL)didRecover delegate:(id)delegate didRecoverSelector:(SEL)didRecoverSelector contextInfo:(void *)contextInfo; -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ErrorRecovery/FBSDKErrorRecoveryAttempter.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ErrorRecovery/FBSDKErrorRecoveryAttempter.m deleted file mode 100644 index 07aa418dbc..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ErrorRecovery/FBSDKErrorRecoveryAttempter.m +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKErrorRecoveryAttempter.h" - -#import "_FBSDKTemporaryErrorRecoveryAttempter.h" -#import "FBSDKErrorRecoveryConfiguration.h" - -@implementation FBSDKErrorRecoveryAttempter - -+ (instancetype)recoveryAttempterFromConfiguration:(FBSDKErrorRecoveryConfiguration *)configuration -{ - if (configuration.errorCategory == FBSDKGraphRequestErrorTransient) { - return [[_FBSDKTemporaryErrorRecoveryAttempter alloc] init]; - } else if (configuration.errorCategory == FBSDKGraphRequestErrorOther) { - return nil; - } - if ([configuration.recoveryActionName isEqualToString:@"login"]) { - Class loginRecoveryAttmpterClass = NSClassFromString(@"_FBSDKLoginRecoveryAttempter"); - if (loginRecoveryAttmpterClass) { - return [[loginRecoveryAttmpterClass alloc] init]; - } - } - return nil; -} - -- (void)attemptRecoveryFromError:(NSError *)error optionIndex:(NSUInteger)recoveryOptionIndex delegate:(id)delegate didRecoverSelector:(SEL)didRecoverSelector contextInfo:(void *)contextInfo -{ - // should be implemented by subclasses. -} -@end - -@implementation FBSDKErrorRecoveryAttempter(Protected) - -- (void)completeRecovery:(BOOL)didRecover delegate:(id)delegate didRecoverSelector:(SEL)didRecoverSelector contextInfo:(void *)contextInfo -{ - void (*callback)(id, SEL, BOOL, void *) = (void *)[delegate methodForSelector:didRecoverSelector]; - (*callback)(delegate, didRecoverSelector, didRecover, contextInfo); -} - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ErrorRecovery/_FBSDKTemporaryErrorRecoveryAttempter.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ErrorRecovery/_FBSDKTemporaryErrorRecoveryAttempter.h deleted file mode 100644 index 21ad040d1d..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ErrorRecovery/_FBSDKTemporaryErrorRecoveryAttempter.h +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKErrorRecoveryAttempter.h" - -@interface _FBSDKTemporaryErrorRecoveryAttempter : FBSDKErrorRecoveryAttempter - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ErrorRecovery/_FBSDKTemporaryErrorRecoveryAttempter.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ErrorRecovery/_FBSDKTemporaryErrorRecoveryAttempter.m deleted file mode 100644 index bb555aa7f8..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ErrorRecovery/_FBSDKTemporaryErrorRecoveryAttempter.m +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "_FBSDKTemporaryErrorRecoveryAttempter.h" - -@implementation _FBSDKTemporaryErrorRecoveryAttempter - -- (void)attemptRecoveryFromError:(NSError *)error optionIndex:(NSUInteger)recoveryOptionIndex delegate:(id)delegate didRecoverSelector:(SEL)didRecoverSelector contextInfo:(void *)contextInfo -{ - [super completeRecovery:YES delegate:delegate didRecoverSelector:didRecoverSelector contextInfo:contextInfo]; -} - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKAppLinkReturnToRefererView_Internal.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKAppLinkReturnToRefererView_Internal.h deleted file mode 100644 index 6c5d3283e5..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKAppLinkReturnToRefererView_Internal.h +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKAppLinkReturnToRefererView.h" - -@interface FBSDKAppLinkReturnToRefererView (Internal) - -- (CGFloat)statusBarHeight; - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKAppLink_Internal.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKAppLink_Internal.h deleted file mode 100644 index 78cfe3c301..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKAppLink_Internal.h +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKAppLink.h" - -FOUNDATION_EXPORT NSString *const FBSDKAppLinkDataParameterName; -FOUNDATION_EXPORT NSString *const FBSDKAppLinkTargetKeyName; -FOUNDATION_EXPORT NSString *const FBSDKAppLinkUserAgentKeyName; -FOUNDATION_EXPORT NSString *const FBSDKAppLinkExtrasKeyName; -FOUNDATION_EXPORT NSString *const FBSDKAppLinkVersionKeyName; -FOUNDATION_EXPORT NSString *const FBSDKAppLinkRefererAppLink; -FOUNDATION_EXPORT NSString *const FBSDKAppLinkRefererAppName; -FOUNDATION_EXPORT NSString *const FBSDKAppLinkRefererUrl; - -@interface FBSDKAppLink (Internal) - -+ (instancetype)appLinkWithSourceURL:(NSURL *)sourceURL - targets:(NSArray *)targets - webURL:(NSURL *)webURL - isBackToReferrer:(BOOL)isBackToReferrer; - -/** return if this AppLink is to go back to referrer. */ -@property (nonatomic, assign, readonly, getter=isBackToReferrer) BOOL backToReferrer; - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKApplicationDelegate+Internal.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKApplicationDelegate+Internal.h deleted file mode 100644 index d194a2d058..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKApplicationDelegate+Internal.h +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -#if SWIFT_PACKAGE -#import "FBSDKApplicationDelegate.h" -#else -#import -#endif - -#import "FBSDKCoreKit+Internal.h" - -NS_ASSUME_NONNULL_BEGIN - -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 - -FOUNDATION_EXPORT NSNotificationName const FBSDKApplicationDidBecomeActiveNotification; - -#else - -FOUNDATION_EXPORT NSString *const FBSDKApplicationDidBecomeActiveNotification; - -#endif - -@interface FBSDKApplicationDelegate () - -- (void)addObserver:(id)observer; -- (void)removeObserver:(id)observer; -+ (BOOL)isSDKInitialized; -+ (UIApplicationState)applicationState; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKApplicationObserving.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKApplicationObserving.h deleted file mode 100644 index 9eba4ce116..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKApplicationObserving.h +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -NS_ASSUME_NONNULL_BEGIN - -@protocol FBSDKApplicationObserving - -@optional -- (void)applicationDidBecomeActive:(nullable UIApplication *)application; -- (void)applicationDidEnterBackground:(nullable UIApplication *)application; -- (BOOL)application:(UIApplication *)application -didFinishLaunchingWithOptions:(nullable NSDictionary *)launchOptions; - -- (BOOL)application:(UIApplication *)application - openURL:(NSURL *)url - sourceApplication:(nullable NSString *)sourceApplication - annotation:(nullable id)annotation; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKAudioResourceLoader.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKAudioResourceLoader.h deleted file mode 100644 index a9875042d3..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKAudioResourceLoader.h +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface FBSDKAudioResourceLoader : NSObject - -+ (instancetype)sharedLoader; - -- (BOOL)loadSound:(NSError *__autoreleasing *)errorRef; -- (void)playSound; - -@end - -@interface FBSDKAudioResourceLoader (Subclass) - -@property (class, nonatomic, copy, nullable, readonly) NSString *name; -@property (class, nonatomic, copy, nullable, readonly) NSData *data; -@property (class, nonatomic, assign, readonly) NSUInteger version; - -@end - -NS_ASSUME_NONNULL_END - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKAudioResourceLoader.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKAudioResourceLoader.m deleted file mode 100644 index 2d1cafe28d..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKAudioResourceLoader.m +++ /dev/null @@ -1,157 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKAudioResourceLoader.h" - -#import "FBSDKDynamicFrameworkLoader.h" -#import "FBSDKLogger.h" -#import "FBSDKSettings.h" - -@implementation FBSDKAudioResourceLoader -{ - NSFileManager *_fileManager; - NSURL *_fileURL; - SystemSoundID _systemSoundID; -} - -#pragma mark - Class Methods - -+ (instancetype)sharedLoader -{ - static NSMutableDictionary *_loaderCache = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - _loaderCache = [[NSMutableDictionary alloc] init]; - }); - - NSString *name = [self name]; - FBSDKAudioResourceLoader *loader; - @synchronized(_loaderCache) { - loader = _loaderCache[name]; - if (!loader) { - loader = [[self alloc] init]; - NSError *error = nil; - if ([loader loadSound:&error]) { - _loaderCache[name] = loader; - } else { - [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors - formatString:@"%@ error: %@", self, error]; - } - } - } - - return loader; -} - -#pragma mark - Object Lifecycle - -- (instancetype)init -{ - if ((self = [super init])) { - _fileManager = [[NSFileManager alloc] init]; - } - return self; -} - -- (void)dealloc -{ - fbsdkdfl_AudioServicesDisposeSystemSoundID(_systemSoundID); -} - -#pragma mark - Public API - -- (BOOL)loadSound:(NSError **)errorRef -{ - NSURL *fileURL = [self _fileURL:errorRef]; - - if (![_fileManager fileExistsAtPath:fileURL.path]) { - NSData *data = [[self class] data]; - if (![data writeToURL:fileURL options:NSDataWritingAtomic error:errorRef]) { - return NO; - } - } - - OSStatus status = fbsdkdfl_AudioServicesCreateSystemSoundID((__bridge CFURLRef)fileURL, &_systemSoundID); - return (status == kAudioServicesNoError); -} - -- (void)playSound -{ - if ((_systemSoundID == 0) && ![self loadSound:NULL]) { - return; - } - fbsdkdfl_AudioServicesPlaySystemSound(_systemSoundID); -} - -#pragma mark - Helper Methods - -- (NSURL *)_fileURL:(NSError **)errorRef -{ - if (_fileURL) { - return _fileURL; - } - - NSURL *baseURL = [_fileManager URLForDirectory:NSCachesDirectory - inDomain:NSUserDomainMask - appropriateForURL:nil - create:YES - error:errorRef]; - if (!baseURL) { - return nil; - } - - NSURL *directoryURL = [baseURL URLByAppendingPathComponent:@"fb_audio" isDirectory:YES]; - NSURL *versionURL = [directoryURL URLByAppendingPathComponent:[NSString stringWithFormat:@"%lu", (unsigned long)[[self class] version]] - isDirectory:YES]; - if (![_fileManager createDirectoryAtURL:versionURL withIntermediateDirectories:YES attributes:nil error:errorRef]) { - return nil; - } - - _fileURL = [[versionURL URLByAppendingPathComponent:[[self class] name]] copy]; - - return _fileURL; -} - -@end - -@implementation FBSDKAudioResourceLoader (Subclass) - -#pragma mark - Subclass Methods - -+ (NSString *)name -{ - return nil; -} - -+ (NSUInteger)version -{ - return 0; -} - -+ (NSData *)data -{ - return nil; -} - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKContainerViewController.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKContainerViewController.h deleted file mode 100644 index 17fa527a1e..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKContainerViewController.h +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import - -NS_ASSUME_NONNULL_BEGIN - -@class FBSDKContainerViewController; - -NS_SWIFT_NAME(ContainerViewControllerDelegate) -@protocol FBSDKContainerViewControllerDelegate - -- (void)viewControllerDidDisappear:(FBSDKContainerViewController *)viewController animated:(BOOL)animated; - -@end - -NS_SWIFT_NAME(FBContainerViewController) -@interface FBSDKContainerViewController : UIViewController - -@property (nonatomic, weak, nullable) id delegate; - -- (void)displayChildController:(UIViewController *)childController; - -@end - -NS_ASSUME_NONNULL_END - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKContainerViewController.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKContainerViewController.m deleted file mode 100644 index b5a62eb062..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKContainerViewController.m +++ /dev/null @@ -1,84 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKContainerViewController.h" - -@implementation FBSDKContainerViewController - -- (void)viewDidDisappear:(BOOL)animated -{ - [super viewDidDisappear:animated]; - if ([self.delegate respondsToSelector:@selector(viewControllerDidDisappear:animated:)]) { - [self.delegate viewControllerDidDisappear:self animated:animated]; - } -} - -- (void)displayChildController:(UIViewController *)childController -{ - [self addChildViewController:childController]; - UIView *view = self.view; - UIView *childView = childController.view; - childView.translatesAutoresizingMaskIntoConstraints = NO; - childView.frame = view.frame; - [view addSubview:childView]; - - [view addConstraints: - @[ - [NSLayoutConstraint constraintWithItem:childView - attribute:NSLayoutAttributeTop - relatedBy:NSLayoutRelationEqual - toItem:view - attribute:NSLayoutAttributeTop - multiplier:1.0 - constant:0.0], - - [NSLayoutConstraint constraintWithItem:childView - attribute:NSLayoutAttributeBottom - relatedBy:NSLayoutRelationEqual - toItem:view - attribute:NSLayoutAttributeBottom - multiplier:1.0 - constant:0.0], - - [NSLayoutConstraint constraintWithItem:childView - attribute:NSLayoutAttributeLeading - relatedBy:NSLayoutRelationEqual - toItem:view - attribute:NSLayoutAttributeLeading - multiplier:1.0 - constant:0.0], - - [NSLayoutConstraint constraintWithItem:childView - attribute:NSLayoutAttributeTrailing - relatedBy:NSLayoutRelationEqual - toItem:view - attribute:NSLayoutAttributeTrailing - multiplier:1.0 - constant:0.0], - ]]; - - [childController didMoveToParentViewController:self]; -} - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKCoreKit+Internal.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKCoreKit+Internal.h deleted file mode 100644 index cd5a902c71..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKCoreKit+Internal.h +++ /dev/null @@ -1,171 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -#if SWIFT_PACKAGE -#import "FBSDKCoreKit.h" -#else -#import -#endif - -#if defined FBSDKCOCOAPODS || defined BUCK - -#if !TARGET_OS_TV -#import "FBSDKViewHierarchy.h" -#import "FBSDKViewHierarchyMacros.h" -#import "FBSDKCodelessIndexer.h" -#import "FBSDKMetadataIndexer.h" -#import "FBSDKSuggestedEventsIndexer.h" -#import "FBSDKCrypto.h" -#import "FBSDKAudioResourceLoader.h" -#import "FBSDKContainerViewController.h" -#import "FBSDKBridgeAPI.h" -#import "FBSDKMonotonicTime.h" -#import "FBSDKTriStateBOOL.h" -#import "FBSDKCloseIcon.h" -#import "FBSDKColor.h" -#import "FBSDKMaleSilhouetteIcon.h" -#import "FBSDKUIUtility.h" -#import "FBSDKViewImpressionTracker.h" -#import "FBSDKWebDialog.h" -#else -#import "FBSDKDeviceButton+Internal.h" -#import "FBSDKDeviceDialogView.h" -#import "FBSDKSmartDeviceDialogView.h" -#import "FBSDKDeviceViewControllerBase+Internal.h" -#import "FBSDKModalFormPresentationController.h" -#endif - -#import "FBSDKAppEvents+Internal.h" -#import "FBSDKAppEventsState.h" -#import "FBSDKAppEventsStateManager.h" -#import "FBSDKAppEventsUtility.h" -#import "FBSDKRestrictiveDataFilterManager.h" -#import "FBSDKTimeSpentData.h" -#import "FBSDKUserDataStore.h" -#import "FBSDKBase64.h" -#import "FBSDKErrorRecoveryAttempter.h" -#import "FBSDKDynamicFrameworkLoader.h" -#import "FBSDKApplicationObserving.h" -#import "FBSDKApplicationDelegate+Internal.h" -#import "FBSDKDeviceRequestsHelper.h" -#import "FBSDKError.h" -#import "FBSDKImageDownloader.h" -#import "FBSDKInternalUtility.h" -#import "FBSDKLogger.h" -#import "FBSDKMath.h" -#import "FBSDKSettings+Internal.h" -#import "FBSDKSwizzler.h" -#import "FBSDKTypeUtility.h" -#import "FBSDKBasicUtility.h" -#import "FBSDKURLSession.h" -#import "FBSDKURLSessionTask.h" -#import "FBSDKCrashHandler.h" -#import "FBSDKLibAnalyzer.h" -#import "FBSDKCrashObserving.h" -#import "FBSDKGraphRequest+Internal.h" -#import "FBSDKGraphRequestConnection+Internal.h" -#import "FBSDKGraphRequestMetadata.h" -#import "FBSDKDialogConfiguration.h" -#import "FBSDKServerConfiguration+Internal.h" -#import "FBSDKServerConfiguration.h" -#import "FBSDKServerConfigurationManager+Internal.h" -#import "FBSDKServerConfigurationManager.h" -#import "FBSDKGateKeeperManager.h" -#import "FBSDKAccessTokenCache.h" -#import "FBSDKAccessTokenCaching.h" -#import "FBSDKKeychainStore.h" -#import "FBSDKKeychainStoreViaBundleID.h" -#import "FBSDKButton+Subclass.h" -#import "FBSDKIcon.h" -#import "FBSDKLogo.h" - -#else - -#if !TARGET_OS_TV -#import "../AppEvents/Internal/ViewHierarchy/FBSDKViewHierarchy.h" -#import "../AppEvents/Internal/ViewHierarchy/FBSDKViewHierarchyMacros.h" -#import "../AppEvents/Internal/Codeless/FBSDKCodelessIndexer.h" -#import "../AppEvents/Internal/AAM/FBSDKMetadataIndexer.h" -#import "../AppEvents/Internal/SuggestedEvents/FBSDKSuggestedEventsIndexer.h" -#import "Cryptography/FBSDKCrypto.h" -#import "FBSDKAudioResourceLoader.h" -#import "FBSDKContainerViewController.h" -#import "BridgeAPI/FBSDKBridgeAPI.h" -#import "FBSDKMonotonicTime.h" -#import "FBSDKTriStateBOOL.h" -#import "UI/FBSDKCloseIcon.h" -#import "UI/FBSDKColor.h" -#import "UI/FBSDKMaleSilhouetteIcon.h" -#import "UI/FBSDKUIUtility.h" -#import "UI/FBSDKViewImpressionTracker.h" -#import "WebDialog/FBSDKWebDialog.h" -#else -#import "Device/FBSDKDeviceButton+Internal.h" -#import "Device/FBSDKDeviceDialogView.h" -#import "Device/FBSDKSmartDeviceDialogView.h" -#import "Device/FBSDKDeviceViewControllerBase+Internal.h" -#import "Device/FBSDKModalFormPresentationController.h" -#endif - -#import "../AppEvents/Internal/FBSDKAppEvents+Internal.h" -#import "../AppEvents/Internal/FBSDKAppEventsState.h" -#import "../AppEvents/Internal/FBSDKAppEventsStateManager.h" -#import "../AppEvents/Internal/FBSDKAppEventsUtility.h" -#import "../AppEvents/Internal/RestrictiveDataFilter/FBSDKRestrictiveDataFilterManager.h" -#import "../AppEvents/Internal/FBSDKTimeSpentData.h" -#import "../AppEvents/Internal/FBSDKUserDataStore.h" -#import "Base64/FBSDKBase64.h" -#import "ErrorRecovery/FBSDKErrorRecoveryAttempter.h" -#import "FBSDKDynamicFrameworkLoader.h" -#import "FBSDKApplicationObserving.h" -#import "FBSDKApplicationDelegate+Internal.h" -#import "FBSDKDeviceRequestsHelper.h" -#import "FBSDKError.h" -#import "FBSDKImageDownloader.h" -#import "FBSDKInternalUtility.h" -#import "FBSDKLogger.h" -#import "FBSDKMath.h" -#import "FBSDKSettings+Internal.h" -#import "FBSDKSwizzler.h" -#import "../Basics/Internal/FBSDKTypeUtility.h" -#import "../Basics/Internal/FBSDKBasicUtility.h" -#import "../Basics/Internal/FBSDKURLSession.h" -#import "../Basics/Internal/FBSDKURLSessionTask.h" -#import "../Basics/Instrument/FBSDKCrashHandler.h" -#import "../Basics/Instrument/FBSDKLibAnalyzer.h" -#import "../Basics/Instrument/FBSDKCrashObserving.h" -#import "Network/FBSDKGraphRequest+Internal.h" -#import "Network/FBSDKGraphRequestConnection+Internal.h" -#import "Network/FBSDKGraphRequestMetadata.h" -#import "ServerConfiguration/FBSDKDialogConfiguration.h" -#import "ServerConfiguration/FBSDKServerConfiguration+Internal.h" -#import "ServerConfiguration/FBSDKServerConfiguration.h" -#import "ServerConfiguration/FBSDKServerConfigurationManager+Internal.h" -#import "ServerConfiguration/FBSDKServerConfigurationManager.h" -#import "ServerConfiguration/FBSDKGateKeeperManager.h" -#import "TokenCaching/FBSDKAccessTokenCache.h" -#import "TokenCaching/FBSDKAccessTokenCaching.h" -#import "TokenCaching/FBSDKKeychainStore.h" -#import "TokenCaching/FBSDKKeychainStoreViaBundleID.h" -#import "UI/FBSDKButton+Subclass.h" -#import "UI/FBSDKIcon.h" -#import "UI/FBSDKLogo.h" - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKDeviceRequestsHelper.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKDeviceRequestsHelper.h deleted file mode 100644 index 04f821f20a..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKDeviceRequestsHelper.h +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -NS_ASSUME_NONNULL_BEGIN - -#define FBSDK_DEVICE_INFO_PARAM @"device_info" - -/* - @class - - Helper class for device requests mDNS broadcasts. Note this is only intended for - internal consumption. - */ -NS_SWIFT_NAME(DeviceRequestsHelper) -@interface FBSDKDeviceRequestsHelper : NSObject - -/** - Get device info to include with the GraphRequest - */ -@property (class, nonatomic, copy, readonly) NSString *getDeviceInfo; - -/** - Start the mDNS advertisement service for a device request - @param loginCode The login code associated with the action for the device request. - @return True if the service broadcast was successfully started. - */ -+ (BOOL)startAdvertisementService:(NSString *)loginCode withDelegate:(id)delegate; - -/** - Check if a service delegate is registered with particular advertisement service - @param delegate The delegate to check if registered. - @param service The advertisement service to check for. - @return True if the service is the one the delegate registered with. - */ -+ (BOOL)isDelegate:(id)delegate forAdvertisementService:(NSNetService *)service; - -/** - Stop the mDNS advertisement service for a device request - @param delegate The delegate registered with the service. - */ -+ (void)cleanUpAdvertisementService:(id)delegate; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKDeviceRequestsHelper.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKDeviceRequestsHelper.m deleted file mode 100644 index c2f5d538ae..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKDeviceRequestsHelper.m +++ /dev/null @@ -1,122 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKDeviceRequestsHelper.h" - -#import - -#import - -#import "FBSDKCoreKit+Internal.h" - -#define FBSDK_DEVICE_INFO_DEVICE @"device" -#define FBSDK_DEVICE_INFO_MODEL @"model" -#define FBSDK_HEADER @"fbsdk" -#if !TARGET_OS_TV -#define FBSDK_FLAVOR @"ios" -#else -#define FBSDK_FLAVOR @"tvos" -#endif -#define FBSDK_SERVICE_TYPE @"_fb._tcp." - -static NSMapTable *g_mdnsAdvertisementServices; - -@implementation FBSDKDeviceRequestsHelper - -#pragma mark - Class Methods - -+ (void)initialize { - // We use weak to strong in order to retain the advertisement services - // without having to pass them back to the delegate that started them - // Note that in case the delegate is destroyed before it had a chance to - // stop the service, the service will continue broadcasting until the map - // resizes itself and releases the service, causing it to stop - g_mdnsAdvertisementServices = [NSMapTable weakToStrongObjectsMapTable]; -} - -+ (NSString *)getDeviceInfo -{ - struct utsname systemInfo; - uname(&systemInfo); - NSDictionary *deviceInfo = @{ - FBSDK_DEVICE_INFO_DEVICE: @(systemInfo.machine), - FBSDK_DEVICE_INFO_MODEL: [UIDevice currentDevice].model, - }; - NSError *err; - NSData *jsonDeviceInfo = [NSJSONSerialization dataWithJSONObject:deviceInfo - options:0 - error:&err]; - - return [[NSString alloc] initWithData:jsonDeviceInfo encoding:NSUTF8StringEncoding]; -} - -+ (BOOL)startAdvertisementService:(NSString *)loginCode withDelegate:(id)delegate -{ - static NSString *sdkVersion = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - // Dots in the version will mess up the bonjour DNS record parsing - sdkVersion = [[FBSDKSettings sdkVersion] stringByReplacingOccurrencesOfString:@"." withString:@"|"]; - if (sdkVersion.length > 10 || - ![[NSCharacterSet decimalDigitCharacterSet] characterIsMember:[sdkVersion characterAtIndex:0]]) { - sdkVersion = @"dev"; - } - }); - NSString *serviceName = [NSString stringWithFormat:@"%@_%@_%@", - FBSDK_HEADER, - [NSString stringWithFormat:@"%@-%@", - FBSDK_FLAVOR, - sdkVersion - ], - loginCode - ]; - if (serviceName.length > 60) { - [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors logEntry:@"serviceName exceeded 60 characters"]; - } - NSNetService *mdnsAdvertisementService = [[NSNetService alloc] - initWithDomain:@"local." - type:FBSDK_SERVICE_TYPE - name:serviceName - port:0]; - mdnsAdvertisementService.delegate = delegate; - [mdnsAdvertisementService publishWithOptions:NSNetServiceNoAutoRename | NSNetServiceListenForConnections]; - [FBSDKAppEvents logInternalEvent:FBSDKAppEventNameFBSDKSmartLoginService - isImplicitlyLogged:YES]; - [g_mdnsAdvertisementServices setObject:mdnsAdvertisementService forKey:delegate]; - - return YES; -} - -+ (BOOL)isDelegate:(id)delegate forAdvertisementService:(NSNetService *)service -{ - NSNetService *mdnsAdvertisementService = [g_mdnsAdvertisementServices objectForKey:delegate]; - return (mdnsAdvertisementService == service); -} - -+ (void)cleanUpAdvertisementService:(id)delegate -{ - NSNetService *mdnsAdvertisementService = [g_mdnsAdvertisementServices objectForKey:delegate]; - if (mdnsAdvertisementService != nil) { - // We are not interested in the stop publish event - mdnsAdvertisementService.delegate = nil; - [mdnsAdvertisementService stop]; - [g_mdnsAdvertisementServices removeObjectForKey:delegate]; - } -} - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKDynamicFrameworkLoader.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKDynamicFrameworkLoader.h deleted file mode 100644 index 35d002c16e..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKDynamicFrameworkLoader.h +++ /dev/null @@ -1,244 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -#pragma mark - Security APIs - -// These are local wrappers around the corresponding methods in Security/SecRandom.h -FOUNDATION_EXPORT int fbsdkdfl_SecRandomCopyBytes(SecRandomRef rnd, size_t count, uint8_t *bytes); - -// These are local wrappers around Keychain API -FOUNDATION_EXPORT OSStatus fbsdkdfl_SecItemUpdate(CFDictionaryRef query, CFDictionaryRef attributesToUpdate); -FOUNDATION_EXPORT OSStatus fbsdkdfl_SecItemAdd(CFDictionaryRef attributes, CFTypeRef _Nullable * _Nullable result); -FOUNDATION_EXPORT OSStatus fbsdkdfl_SecItemCopyMatching(CFDictionaryRef query, CFTypeRef _Nullable * _Nullable result); -FOUNDATION_EXPORT OSStatus fbsdkdfl_SecItemDelete(CFDictionaryRef query); - -#pragma mark - Social Constants - -FOUNDATION_EXPORT NSString *fbsdkdfl_SLServiceTypeFacebook(void); -FOUNDATION_EXPORT NSString *fbsdkdfl_SLServiceTypeTwitter(void); - -#pragma mark - Social Classes - -FOUNDATION_EXPORT Class fbsdkdfl_SLComposeViewControllerClass(void); - -#pragma mark - MessageUI Classes - -FOUNDATION_EXPORT Class fbsdkdfl_MFMailComposeViewControllerClass(void); -FOUNDATION_EXPORT Class fbsdkdfl_MFMessageComposeViewControllerClass(void); - -#pragma mark - QuartzCore Classes - -FOUNDATION_EXPORT Class fbsdkdfl_CATransactionClass(void); - -#pragma mark - QuartzCore APIs - -// These are local wrappers around the corresponding transform methods from QuartzCore.framework/CATransform3D.h -FOUNDATION_EXPORT CATransform3D fbsdkdfl_CATransform3DMakeScale (CGFloat sx, CGFloat sy, CGFloat sz); -FOUNDATION_EXPORT CATransform3D fbsdkdfl_CATransform3DMakeTranslation (CGFloat tx, CGFloat ty, CGFloat tz); -FOUNDATION_EXPORT CATransform3D fbsdkdfl_CATransform3DConcat (CATransform3D a, CATransform3D b); - -FOUNDATION_EXPORT const CATransform3D fbsdkdfl_CATransform3DIdentity; - -#pragma mark - AudioToolbox APIs - -// These are local wrappers around the corresponding methods in AudioToolbox/AudioToolbox.h -FOUNDATION_EXPORT OSStatus fbsdkdfl_AudioServicesCreateSystemSoundID(CFURLRef inFileURL, SystemSoundID *outSystemSoundID); -FOUNDATION_EXPORT OSStatus fbsdkdfl_AudioServicesDisposeSystemSoundID(SystemSoundID inSystemSoundID); -FOUNDATION_EXPORT void fbsdkdfl_AudioServicesPlaySystemSound(SystemSoundID inSystemSoundID); - -#pragma mark - AdSupport Classes - -FOUNDATION_EXPORT Class fbsdkdfl_ASIdentifierManagerClass(void); - -#pragma mark - SafariServices Classes - -FOUNDATION_EXPORT Class fbsdkdfl_SFSafariViewControllerClass(void); -FOUNDATION_EXPORT Class fbsdkdfl_SFAuthenticationSessionClass(void); - -#pragma mark - AuthenticationServices Classes - -FOUNDATION_EXPORT Class fbsdkdfl_ASWebAuthenticationSessionClass(void); - -#pragma mark - Accounts Constants - -FOUNDATION_EXPORT NSString *fbsdkdfl_ACFacebookAppIdKey(void); -FOUNDATION_EXPORT NSString *fbsdkdfl_ACFacebookAudienceEveryone(void); -FOUNDATION_EXPORT NSString *fbsdkdfl_ACFacebookAudienceFriends(void); -FOUNDATION_EXPORT NSString *fbsdkdfl_ACFacebookAudienceKey(void); -FOUNDATION_EXPORT NSString *fbsdkdfl_ACFacebookAudienceOnlyMe(void); -FOUNDATION_EXPORT NSString *fbsdkdfl_ACFacebookPermissionsKey(void); - -#pragma mark - Accounts Classes - -FOUNDATION_EXPORT Class fbsdkdfl_ACAccountStoreClass(void); - -#pragma mark - StoreKit classes - -FOUNDATION_EXPORT Class fbsdkdfl_SKPaymentQueueClass(void); -FOUNDATION_EXPORT Class fbsdkdfl_SKProductsRequestClass(void); - -#pragma mark - AssetsLibrary Classes - -FOUNDATION_EXPORT Class fbsdkdfl_ALAssetsLibraryClass(void); - -#pragma mark - CoreTelephony Classes - -FOUNDATION_EXPORT Class fbsdkdfl_CTTelephonyNetworkInfoClass(void); - -#pragma mark - CoreImage - -FOUNDATION_EXPORT Class fbsdkdfl_CIImageClass(void); -FOUNDATION_EXPORT Class fbsdkdfl_CIFilterClass(void); -FOUNDATION_EXPORT NSString *fbsdkdfl_kCIInputImageKey(void); -FOUNDATION_EXPORT NSString *fbsdkdfl_kCIInputRadiusKey(void); -FOUNDATION_EXPORT NSString *fbsdkdfl_kCIOutputImageKey(void); - -#pragma mark - Photos.framework - -FOUNDATION_EXPORT Class fbsdkdfl_PHPhotoLibrary(void); -FOUNDATION_EXPORT Class fbsdkdfl_PHAssetChangeRequest(void); - -#pragma mark - MobileCoreServices - -FOUNDATION_EXPORT CFStringRef fbsdkdfl_UTTypeCopyPreferredTagWithClass(CFStringRef inUTI, - CFStringRef inTagClass); -FOUNDATION_EXPORT CFStringRef fbsdkdfl_kUTTagClassMIMEType(void); -FOUNDATION_EXPORT CFStringRef fbsdkdfl_kUTTypeJPEG(void); -FOUNDATION_EXPORT CFStringRef fbsdkdfl_kUTTypePNG(void); - -#pragma mark - WebKit Classes - -FOUNDATION_EXPORT Class fbsdkdfl_WKWebViewClass(void); -FOUNDATION_EXPORT Class fbsdkdfl_WKUserScriptClass(void); - -/** - - This class provides a way to load constants and methods from Apple Frameworks in a dynamic - fashion. It allows the SDK to be just dragged into a project without having to specify additional - frameworks to link against. It is an internal class and not to be used by 3rd party developers. - - As new types are needed, they should be added and strongly typed. - */ -NS_SWIFT_NAME(DynamicFrameworkLoader) -@interface FBSDKDynamicFrameworkLoader : NSObject - -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; - -#pragma mark - Security Constants - -/** - Load the kSecRandomDefault value from the Security Framework - - @return The kSecRandomDefault value or nil. - */ -+ (SecRandomRef)loadkSecRandomDefault; - -/** - Load the kSecAttrAccessible value from the Security Framework - - @return The kSecAttrAccessible value or nil. - */ -+ (CFTypeRef)loadkSecAttrAccessible; - -/** - Load the kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly value from the Security Framework - - @return The kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly value or nil. - */ -+ (CFTypeRef)loadkSecAttrAccessibleAfterFirstUnlockThisDeviceOnly; - -/** - Load the kSecAttrAccount value from the Security Framework - - @return The kSecAttrAccount value or nil. - */ -+ (CFTypeRef)loadkSecAttrAccount; - -/** - Load the kSecAttrService value from the Security Framework - - @return The kSecAttrService value or nil. - */ -+ (CFTypeRef)loadkSecAttrService; - -/** - Load the kSecAttrGeneric value from the Security Framework - - @return The kSecAttrGeneric value or nil. - */ -+ (CFTypeRef)loadkSecAttrGeneric; - -/** - Load the kSecValueData value from the Security Framework - - @return The kSecValueData value or nil. - */ -+ (CFTypeRef)loadkSecValueData; - -/** - Load the kSecClassGenericPassword value from the Security Framework - - @return The kSecClassGenericPassword value or nil. - */ -+ (CFTypeRef)loadkSecClassGenericPassword; - -/** - Load the kSecAttrAccessGroup value from the Security Framework - - @return The kSecAttrAccessGroup value or nil. - */ -+ (CFTypeRef)loadkSecAttrAccessGroup; - -/** - Load the kSecMatchLimitOne value from the Security Framework - - @return The kSecMatchLimitOne value or nil. - */ -+ (CFTypeRef)loadkSecMatchLimitOne; - -/** - Load the kSecMatchLimit value from the Security Framework - - @return The kSecMatchLimit value or nil. - */ -+ (CFTypeRef)loadkSecMatchLimit; - -/** - Load the kSecReturnData value from the Security Framework - - @return The kSecReturnData value or nil. - */ -+ (CFTypeRef)loadkSecReturnData; - -/** - Load the kSecClass value from the Security Framework - - @return The kSecClass value or nil. - */ -+ (CFTypeRef)loadkSecClass; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKError.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKError.h deleted file mode 100644 index 6a01e44f1b..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKError.h +++ /dev/null @@ -1,98 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -NS_ASSUME_NONNULL_BEGIN - -NS_SWIFT_NAME(SDKError) -@interface FBSDKError : NSObject - -+ (NSError *)errorWithCode:(NSInteger)code message:(nullable NSString *)message; - -+ (NSError *)errorWithDomain:(NSErrorDomain)domain code:(NSInteger)code message:(nullable NSString *)message; - -+ (NSError *)errorWithCode:(NSInteger)code - message:(nullable NSString *)message - underlyingError:(nullable NSError *)underlyingError; - -+ (NSError *)errorWithDomain:(NSErrorDomain)domain - code:(NSInteger)code - message:(nullable NSString *)message - underlyingError:(nullable NSError *)underlyingError; - -+ (NSError *)errorWithCode:(NSInteger)code - userInfo:(nullable NSDictionary *)userInfo - message:(nullable NSString *)message - underlyingError:(nullable NSError *)underlyingError; - -+ (NSError *)errorWithDomain:(NSErrorDomain)domain - code:(NSInteger)code - userInfo:(nullable NSDictionary *)userInfo - message:(nullable NSString *)message - underlyingError:(nullable NSError *)underlyingError; - -+ (NSError *)invalidArgumentErrorWithName:(NSString *)name - value:(nullable id)value - message:(nullable NSString *)message; - -+ (NSError *)invalidArgumentErrorWithDomain:(NSErrorDomain)domain - name:(NSString *)name - value:(nullable id)value - message:(nullable NSString *)message; - -+ (NSError *)invalidArgumentErrorWithName:(NSString *)name - value:(nullable id)value - message:(nullable NSString *)message - underlyingError:(nullable NSError *)underlyingError; - -+ (NSError *)invalidArgumentErrorWithDomain:(NSErrorDomain)domain - name:(NSString *)name - value:(nullable id)value - message:(nullable NSString *)message - underlyingError:(nullable NSError *)underlyingError; - -+ (NSError *)invalidCollectionErrorWithName:(NSString *)name - collection:(id)collection - item:(id)item - message:(nullable NSString *)message; - -+ (NSError *)invalidCollectionErrorWithName:(NSString *)name - collection:(id)collection - item:(id)item - message:(nullable NSString *)message - underlyingError:(nullable NSError *)underlyingError; - -+ (NSError *)requiredArgumentErrorWithName:(NSString *)name message:(nullable NSString *)message; - -+ (NSError *)requiredArgumentErrorWithDomain:(NSErrorDomain)domain - name:(NSString *)name - message:(nullable NSString *)message; - -+ (NSError *)requiredArgumentErrorWithName:(NSString *)name - message:(nullable NSString *)message - underlyingError:(nullable NSError *)underlyingError; - -+ (NSError *)unknownErrorWithMessage:(NSString *)message; - -+ (BOOL)isNetworkError:(NSError *)error; -+ (void)enableErrorReport; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKError.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKError.m deleted file mode 100644 index 10bbafea3e..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKError.m +++ /dev/null @@ -1,212 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKError.h" - -#import "FBSDKConstants.h" -#import "FBSDKErrorReport.h" -#import "FBSDKFeatureManager.h" -#import "FBSDKInternalUtility.h" -#import "FBSDKSettings.h" - -@implementation FBSDKError - -static BOOL isErrorReportEnabled = NO; - -#pragma mark - Class Methods - -+ (NSError *)errorWithCode:(NSInteger)code message:(NSString *)message -{ - return [self errorWithCode:code message:message underlyingError:nil]; -} - -+ (NSError *)errorWithDomain:(NSErrorDomain)domain code:(NSInteger)code message:(NSString *)message -{ - return [self errorWithDomain:domain code:code message:message underlyingError:nil]; -} - -+ (NSError *)errorWithCode:(NSInteger)code message:(NSString *)message underlyingError:(NSError *)underlyingError -{ - return [self errorWithCode:code userInfo:@{} message:message underlyingError:underlyingError]; -} - -+ (NSError *)errorWithDomain:(NSErrorDomain)domain - code:(NSInteger)code - message:(NSString *)message - underlyingError:(NSError *)underlyingError -{ - return [self errorWithDomain:domain code:code userInfo:@{} message:message underlyingError:underlyingError]; -} - -+ (NSError *)errorWithCode:(NSInteger)code - userInfo:(NSDictionary *)userInfo - message:(NSString *)message - underlyingError:(NSError *)underlyingError -{ - return [self errorWithDomain:FBSDKErrorDomain - code:code - userInfo:userInfo - message:message - underlyingError:underlyingError]; -} - -+ (NSError *)errorWithDomain:(NSErrorDomain)domain - code:(NSInteger)code - userInfo:(NSDictionary *)userInfo - message:(NSString *)message - underlyingError:(NSError *)underlyingError -{ - NSMutableDictionary *fullUserInfo = [[NSMutableDictionary alloc] initWithDictionary:userInfo]; - [FBSDKBasicUtility dictionary:fullUserInfo setObject:message forKey:FBSDKErrorDeveloperMessageKey]; - [FBSDKBasicUtility dictionary:fullUserInfo setObject:underlyingError forKey:NSUnderlyingErrorKey]; - userInfo = fullUserInfo.count ? [fullUserInfo copy] : nil; - if (isErrorReportEnabled) { - [FBSDKErrorReport saveError:code errorDomain:domain message:message]; - } - - return [[NSError alloc] initWithDomain:domain code:code userInfo:userInfo]; -} - -+ (NSError *)invalidArgumentErrorWithName:(NSString *)name value:(id)value message:(NSString *)message -{ - return [self invalidArgumentErrorWithName:name value:value message:message underlyingError:nil]; -} - -+ (NSError *)invalidArgumentErrorWithDomain:(NSErrorDomain)domain - name:(NSString *)name - value:(id)value - message:(NSString *)message -{ - return [self invalidArgumentErrorWithDomain:domain name:name value:value message:message underlyingError:nil]; -} - -+ (NSError *)invalidArgumentErrorWithName:(NSString *)name - value:(id)value - message:(NSString *)message - underlyingError:(NSError *)underlyingError -{ - return [self invalidArgumentErrorWithDomain:FBSDKErrorDomain - name:name - value:value - message:message - underlyingError:underlyingError]; -} -+ (NSError *)invalidArgumentErrorWithDomain:(NSErrorDomain)domain - name:(NSString *)name - value:(id)value - message:(NSString *)message - underlyingError:(NSError *)underlyingError -{ - if (!message) { - message = [[NSString alloc] initWithFormat:@"Invalid value for %@: %@", name, value]; - } - NSMutableDictionary *userInfo = [[NSMutableDictionary alloc] init]; - [FBSDKBasicUtility dictionary:userInfo setObject:name forKey:FBSDKErrorArgumentNameKey]; - [FBSDKBasicUtility dictionary:userInfo setObject:value forKey:FBSDKErrorArgumentValueKey]; - return [self errorWithDomain:domain - code:FBSDKErrorInvalidArgument - userInfo:userInfo - message:message - underlyingError:underlyingError]; -} - -+ (NSError *)invalidCollectionErrorWithName:(NSString *)name - collection:(id)collection - item:(id)item - message:(NSString *)message -{ - return [self invalidCollectionErrorWithName:name collection:collection item:item message:message underlyingError:nil]; -} - -+ (NSError *)invalidCollectionErrorWithName:(NSString *)name - collection:(id)collection - item:(id)item - message:(NSString *)message - underlyingError:(NSError *)underlyingError -{ - if (!message) { - message = - [[NSString alloc] initWithFormat:@"Invalid item (%@) found in collection for %@: %@", item, name, collection]; - } - NSMutableDictionary *userInfo = [[NSMutableDictionary alloc] init]; - [FBSDKBasicUtility dictionary:userInfo setObject:name forKey:FBSDKErrorArgumentNameKey]; - [FBSDKBasicUtility dictionary:userInfo setObject:item forKey:FBSDKErrorArgumentValueKey]; - [FBSDKBasicUtility dictionary:userInfo setObject:collection forKey:FBSDKErrorArgumentCollectionKey]; - return [self errorWithCode:FBSDKErrorInvalidArgument - userInfo:userInfo - message:message - underlyingError:underlyingError]; -} - -+ (NSError *)requiredArgumentErrorWithName:(NSString *)name message:(NSString *)message -{ - return [self requiredArgumentErrorWithName:name message:message underlyingError:nil]; -} - -+ (NSError *)requiredArgumentErrorWithDomain:(NSErrorDomain)domain name:(NSString *)name message:(NSString *)message -{ - if (!message) { - message = [[NSString alloc] initWithFormat:@"Value for %@ is required.", name]; - } - return [self invalidArgumentErrorWithDomain:domain name:name value:nil message:message underlyingError:nil]; -} - -+ (NSError *)requiredArgumentErrorWithName:(NSString *)name - message:(NSString *)message - underlyingError:(NSError *)underlyingError -{ - if (!message) { - message = [[NSString alloc] initWithFormat:@"Value for %@ is required.", name]; - } - return [self invalidArgumentErrorWithName:name value:nil message:message underlyingError:underlyingError]; -} - -+ (NSError *)unknownErrorWithMessage:(NSString *)message -{ - return [self errorWithCode:FBSDKErrorUnknown userInfo:@{} message:message underlyingError:nil]; -} - -+ (BOOL)isNetworkError:(NSError *)error -{ - NSError *innerError = error.userInfo[NSUnderlyingErrorKey]; - if (innerError && [self isNetworkError:innerError]) { - return YES; - } - - switch (error.code) { - case NSURLErrorTimedOut: - case NSURLErrorCannotFindHost: - case NSURLErrorCannotConnectToHost: - case NSURLErrorNetworkConnectionLost: - case NSURLErrorDNSLookupFailed: - case NSURLErrorNotConnectedToInternet: - case NSURLErrorInternationalRoamingOff: - case NSURLErrorCallIsActive: - case NSURLErrorDataNotAllowed: - return YES; - default: - return NO; - } -} - -+ (void)enableErrorReport -{ - isErrorReportEnabled = YES; -} - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKFeatureManager.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKFeatureManager.h deleted file mode 100644 index 4ca6f68c0b..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKFeatureManager.h +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - FBSDKFeature enum - Defines features in SDK - - Sample: - FBSDKFeatureAppEvents = 0x00010000, - ^ ^ ^ ^ - | | | | - kit | | | - feature | | - sub-feature | - sub-sub-feature - 1st byte: kit - 2nd byte: feature - 3rd byte: sub-feature - 4th byte: sub-sub-feature - */ -typedef NS_ENUM(NSUInteger, FBSDKFeature) -{ - // Features in CoreKit - /** Essential of CoreKit */ - FBSDKFeatureCore = 0x00000000, - /** App Events */ - FBSDKFeatureAppEvents = 0x00010000, - FBSDKFeatureCodelessEvents = 0x00010100, - FBSDKFeatureRestrictiveDataFiltering = 0x00010200, - FBSDKFeatureAAM = 0x00010300, - FBSDKFeaturePrivacyProtection = 0x00010400, - FBSDKFeatureSuggestedEvents = 0x00010401, - FBSDKFeaturePIIFiltering = 0x00010402, - FBSDKFeatureEventDeactivation = 0x00010500, - /** Instrument */ - FBSDKFeatureInstrument = 0x00020000, - FBSDKFeatureCrashReport = 0x00020100, - FBSDKFeatureCrashShield = 0x00020101, - FBSDKFeatureErrorReport = 0x00020200, - - - // Features in LoginKit - /** Essential of LoginKit */ - FBSDKFeatureLogin = 0x01000000, - - // Features in ShareKit - /** Essential of ShareKit */ - FBDSDKFeatureShare = 0x02000000, - - // Features in PlacesKit - /** Essential of PlacesKit */ - FBSDKFeaturePlaces = 0x03000000, - -} NS_SWIFT_NAME(SDKFeature); - -typedef void (^FBSDKFeatureManagerBlock)(BOOL enabled); - -@interface FBSDKFeatureManager : NSObject - -+ (void)checkFeature:(FBSDKFeature)feature - completionBlock:(FBSDKFeatureManagerBlock)completionBlock; -+ (void)disableFeature:(NSString *)featureName; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKFeatureManager.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKFeatureManager.m deleted file mode 100644 index b3cf57c86f..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKFeatureManager.m +++ /dev/null @@ -1,130 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKFeatureManager.h" - -#import "ServerConfiguration/FBSDKGateKeeperManager.h" - -#import "FBSDKSettings.h" - -static NSString *const FBSDKFeatureManagerPrefix = @"com.facebook.sdk:FBSDKFeatureManager.FBSDKFeature"; - -@implementation FBSDKFeatureManager - -+ (void)checkFeature:(FBSDKFeature)feature - completionBlock:(FBSDKFeatureManagerBlock)completionBlock -{ - // check locally first - NSString *version = [[NSUserDefaults standardUserDefaults] valueForKey:[FBSDKFeatureManagerPrefix stringByAppendingString:[self featureName:feature]]]; - if (version && [version isEqualToString:[FBSDKSettings sdkVersion]]) { - return; - } - // check gk - [FBSDKGateKeeperManager loadGateKeepers:^(NSError * _Nullable error) { - if (completionBlock) { - completionBlock([FBSDKFeatureManager isEnabled:feature]); - } - }]; -} - -+ (BOOL)isEnabled:(FBSDKFeature)feature -{ - if (FBSDKFeatureCore == feature) { - return YES; - } - - FBSDKFeature parentFeature = [self getParentFeature:feature]; - if (parentFeature == feature) { - return [self checkGK:feature]; - } else { - return [FBSDKFeatureManager isEnabled:parentFeature] && [self checkGK:feature]; - } -} - -+ (void)disableFeature:(NSString *)featureName -{ - [[NSUserDefaults standardUserDefaults] setObject:[FBSDKSettings sdkVersion] forKey:[FBSDKFeatureManagerPrefix stringByAppendingString:featureName]]; -} - -+ (FBSDKFeature)getParentFeature:(FBSDKFeature)feature -{ - if ((feature & 0xFF) > 0) { - return feature & 0xFFFFFF00; - } else if ((feature & 0xFF00) > 0) { - return feature & 0xFFFF0000; - } else if ((feature & 0xFF0000) > 0) { - return feature & 0xFF000000; - } else return 0; -} - -+ (BOOL)checkGK:(FBSDKFeature)feature -{ - NSString *key = [NSString stringWithFormat:@"FBSDKFeature%@", [self featureName:feature]]; - BOOL defaultValue = [self defaultStatus:feature]; - - return [FBSDKGateKeeperManager boolForKey:key - defaultValue:defaultValue]; -} - -+ (NSString *)featureName:(FBSDKFeature)feature -{ - NSString *featureName; - switch (feature) { - case FBSDKFeatureCore: featureName = @"CoreKit"; break; - case FBSDKFeatureAppEvents: featureName = @"AppEvents"; break; - case FBSDKFeatureCodelessEvents: featureName = @"CodelessEvents"; break; - case FBSDKFeatureRestrictiveDataFiltering: featureName = @"RestrictiveDataFiltering"; break; - case FBSDKFeatureAAM: featureName = @"AAM"; break; - case FBSDKFeaturePrivacyProtection: featureName = @"PrivacyProtection"; break; - case FBSDKFeatureSuggestedEvents: featureName = @"SuggestedEvents"; break; - case FBSDKFeaturePIIFiltering: featureName = @"PIIFiltering"; break; - case FBSDKFeatureEventDeactivation: featureName = @"EventDeactivation"; break; - case FBSDKFeatureInstrument: featureName = @"Instrument"; break; - case FBSDKFeatureCrashReport: featureName = @"CrashReport"; break; - case FBSDKFeatureCrashShield: featureName = @"CrashShield"; break; - case FBSDKFeatureErrorReport: featureName = @"ErrorReport"; break; - - case FBSDKFeatureLogin: featureName = @"LoginKit"; break; - - case FBDSDKFeatureShare: featureName = @"ShareKit"; break; - - case FBSDKFeaturePlaces: featureName = @"PlacesKit"; break; - } - - return featureName; -} - -+ (BOOL)defaultStatus:(FBSDKFeature)feature -{ - switch (feature) { - case FBSDKFeatureRestrictiveDataFiltering: - case FBSDKFeatureEventDeactivation: - case FBSDKFeatureInstrument: - case FBSDKFeatureCrashReport: - case FBSDKFeatureCrashShield: - case FBSDKFeatureErrorReport: - case FBSDKFeatureAAM: - case FBSDKFeaturePrivacyProtection: - case FBSDKFeatureSuggestedEvents: - case FBSDKFeaturePIIFiltering: - return NO; - default: return YES; - } -} - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKImageDownloader.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKImageDownloader.h deleted file mode 100644 index 6e4ed1d09b..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKImageDownloader.h +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - Describes the callback for downloadImageWithURL:ttl:completion:. - @param image the optional image returned - */ -typedef void (^FBSDKImageDownloadBlock)(UIImage *_Nullable image) -NS_SWIFT_NAME(ImageDownloadBlock); - -/* - simple class to manage image downloads - - this class is not smart enough to dedupe identical requests in flight. - */ -NS_SWIFT_NAME(ImageDownloader) -@interface FBSDKImageDownloader : NSObject - -@property (class, nonatomic, strong, readonly) FBSDKImageDownloader *sharedInstance; - -/* - download an image or retrieve it from cache - @param url the url to download - @param ttl the amount of time (in seconds) that using a cached version is acceptable. - @param completion the callback with the image - for simplicity nil is returned rather than surfacing an error. - */ -- (void)downloadImageWithURL:(NSURL *)url - ttl:(NSTimeInterval)ttl - completion:(nullable FBSDKImageDownloadBlock)completion; - -- (void)removeAll; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKImageDownloader.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKImageDownloader.m deleted file mode 100644 index 9b8f428439..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKImageDownloader.m +++ /dev/null @@ -1,101 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKImageDownloader.h" - -static NSString *const kImageDirectory = @"fbsdkimages"; -static NSString *const kCachedResponseUserInfoKeyTimestamp = @"timestamp"; - -@implementation FBSDKImageDownloader { - NSURLCache *_urlCache; -} - -+ (FBSDKImageDownloader *)sharedInstance -{ - static FBSDKImageDownloader *instance; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - instance = [[FBSDKImageDownloader alloc] init]; - }); - return instance; -} - -- (instancetype)init -{ - if ((self = [super init])) { -#if TARGET_OS_MACCATALYST - _urlCache = [[NSURLCache alloc] initWithMemoryCapacity:1024*1024*8 - diskCapacity:1024*1024*100 - directoryURL:[NSURL URLWithString:kImageDirectory]]; -#else - _urlCache = [[NSURLCache alloc] initWithMemoryCapacity:1024*1024*8 - diskCapacity:1024*1024*100 - diskPath:kImageDirectory]; -#endif - } - return self; -} - -- (void)removeAll -{ - [_urlCache removeAllCachedResponses]; -} - -- (void)downloadImageWithURL:(NSURL *)url - ttl:(NSTimeInterval)ttl - completion:(FBSDKImageDownloadBlock)completion -{ - NSURLRequest *request = [NSURLRequest requestWithURL:url]; - NSCachedURLResponse *cachedResponse = [_urlCache cachedResponseForRequest:request]; - NSDate *modificationDate = cachedResponse.userInfo[kCachedResponseUserInfoKeyTimestamp]; - BOOL isExpired = ([[modificationDate dateByAddingTimeInterval:ttl] compare:[NSDate date]] == NSOrderedAscending); - - void (^completionWrapper)(NSCachedURLResponse *) = ^(NSCachedURLResponse *responseData){ - if (completion != NULL) { - UIImage *image = [UIImage imageWithData:responseData.data]; - completion(image); - } - }; - - if (cachedResponse == nil || isExpired) { - NSURLSession *session = [NSURLSession sharedSession]; - NSURLSessionDataTask *task = [session dataTaskWithRequest:request - completionHandler: - ^(NSData *data, NSURLResponse *response, NSError *error) { - if ([response isKindOfClass:[NSHTTPURLResponse class]] && - ((NSHTTPURLResponse *)response).statusCode == 200 && - error == nil && - data != nil) { - NSCachedURLResponse *responseToCache = - [[NSCachedURLResponse alloc] initWithResponse:response - data:data - userInfo:@{ kCachedResponseUserInfoKeyTimestamp : [NSDate date] } - storagePolicy:NSURLCacheStorageAllowed]; - [self->_urlCache storeCachedResponse:responseToCache forRequest:request]; - completionWrapper(responseToCache); - } else if (completion != NULL) { - completion(nil); - } - }]; - [task resume]; - } else { - completionWrapper(cachedResponse); - } -} - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKInternalUtility.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKInternalUtility.h deleted file mode 100644 index c84f6c1d5d..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKInternalUtility.h +++ /dev/null @@ -1,316 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -#import "FBSDKCoreKit+Internal.h" - -NS_ASSUME_NONNULL_BEGIN - -#define FBSDK_CANOPENURL_FACEBOOK @"fbauth2" -#define FBSDK_CANOPENURL_FBAPI @"fbapi" -#define FBSDK_CANOPENURL_MESSENGER @"fb-messenger-share-api" -#define FBSDK_CANOPENURL_MSQRD_PLAYER @"msqrdplayer" -#define FBSDK_CANOPENURL_SHARE_EXTENSION @"fbshareextension" - -typedef NS_ENUM(int32_t, FBSDKUIKitVersion) -{ - FBSDKUIKitVersion_6_0 = 0x0944, - FBSDKUIKitVersion_6_1 = 0x094C, - FBSDKUIKitVersion_7_0 = 0x0B57, - FBSDKUIKitVersion_7_1 = 0x0B77, - FBSDKUIKitVersion_8_0 = 0x0CF6, -} NS_SWIFT_NAME(FBUIKit.Version); - -/** - Describes the callback for appLinkFromURLInBackground. - @param object the FBSDKAppLink representing the deferred App Link - @param stop the error during the request, if any - - */ -typedef id _Nullable (^FBSDKInvalidObjectHandler)(id object, BOOL *stop) -NS_SWIFT_NAME(InvalidObjectHandler); - - - -NS_SWIFT_NAME(InternalUtility) -@interface FBSDKInternalUtility : NSObject - -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; - -/** - Constructs the scheme for apps that come to the current app through the bridge. - */ -@property (class, nonatomic, copy, readonly) NSString *appURLScheme; - -/** - Returns bundle for returning localized strings - - We assume a convention of a bundle named FBSDKStrings.bundle, otherwise we - return the main bundle. - */ -@property (class, nonatomic, strong, readonly) NSBundle *bundleForStrings; - -/** - Gets the milliseconds since the Unix Epoch. - - Changes in the system clock will affect this value. - @return The number of milliseconds since the Unix Epoch. - */ -@property (class, nonatomic, assign, readonly) uint64_t currentTimeInMilliseconds; - -/** - The version of the operating system on which the process is executing. - */ -@property (class, nonatomic, assign, readonly) NSOperatingSystemVersion operatingSystemVersion; - -/** - Tests whether the orientation should be manually adjusted for views outside of the root view controller. - - With the legacy layout the developer must worry about device orientation when working with views outside of - the window's root view controller and apply the correct rotation transform and/or swap a view's width and height - values. If the application was linked with UIKit on iOS 7 or earlier or the application is running on iOS 7 or earlier - then we need to use the legacy layout code. Otherwise if the application was linked with UIKit on iOS 8 or later and - the application is running on iOS 8 or later, UIKit handles all of the rotation complexity and the origin is always in - the top-left and no rotation transform is necessary. - @return YES if if the orientation must be manually adjusted, otherwise NO. - */ -@property (class, nonatomic, assign, readonly) BOOL shouldManuallyAdjustOrientation; - -/* - Checks if the app is Unity. - */ -@property (class, nonatomic, assign, readonly) BOOL isUnity; - -/** - Constructs an URL for the current app. - @param host The host for the URL. - @param path The path for the URL. - @param queryParameters The query parameters for the URL. This will be converted into a query string. - @param errorRef If an error occurs, upon return contains an NSError object that describes the problem. - @return The app URL. - */ -+ (NSURL *)appURLWithHost:(NSString *)host - path:(NSString *)path - queryParameters:(NSDictionary *)queryParameters - error:(NSError *__autoreleasing *)errorRef; - -/** - Parses an FB url's query params (and potentially fragment) into a dictionary. - @param url The FB url. - @return A dictionary with the key/value pairs. - */ -+ (NSDictionary *)dictionaryFromFBURL:(NSURL *)url; - -/** - Constructs a Facebook URL. - @param hostPrefix The prefix for the host, such as 'm', 'graph', etc. - @param path The path for the URL. This may or may not include a version. - @param queryParameters The query parameters for the URL. This will be converted into a query string. - @param errorRef If an error occurs, upon return contains an NSError object that describes the problem. - @return The Facebook URL. - */ -+ (NSURL *)facebookURLWithHostPrefix:(NSString *)hostPrefix - path:(NSString *)path - queryParameters:(NSDictionary *)queryParameters - error:(NSError *__autoreleasing *)errorRef; - -/** - Constructs a Facebook URL. - @param hostPrefix The prefix for the host, such as 'm', 'graph', etc. - @param path The path for the URL. This may or may not include a version. - @param queryParameters The query parameters for the URL. This will be converted into a query string. - @param defaultVersion A version to add to the URL if none is found in the path. - @param errorRef If an error occurs, upon return contains an NSError object that describes the problem. - @return The Facebook URL. - */ -+ (NSURL *)facebookURLWithHostPrefix:(NSString *)hostPrefix - path:(NSString *)path - queryParameters:(NSDictionary *)queryParameters - defaultVersion:(NSString *)defaultVersion - error:(NSError *__autoreleasing *)errorRef; - -/** - Tests whether the supplied URL is a valid URL for opening in the browser. - @param URL The URL to test. - @return YES if the URL refers to an http or https resource, otherwise NO. - */ -+ (BOOL)isBrowserURL:(NSURL *)URL; - -/** - Tests whether the supplied bundle identifier references a Facebook app. - @param bundleIdentifier The bundle identifier to test. - @return YES if the bundle identifier refers to a Facebook app, otherwise NO. - */ -+ (BOOL)isFacebookBundleIdentifier:(NSString *)bundleIdentifier; - -/** - Tests whether the operating system is at least the specified version. - @param version The version to test against. - @return YES if the operating system is greater than or equal to the specified version, otherwise NO. - */ -+ (BOOL)isOSRunTimeVersionAtLeast:(NSOperatingSystemVersion)version; - -/** - Tests whether the supplied bundle identifier references the Safari app. - @param bundleIdentifier The bundle identifier to test. - @return YES if the bundle identifier refers to the Safari app, otherwise NO. - */ -+ (BOOL)isSafariBundleIdentifier:(NSString *)bundleIdentifier; - -/** - Tests whether the UIKit version that the current app was linked to is at least the specified version. - @param version The version to test against. - @return YES if the linked UIKit version is greater than or equal to the specified version, otherwise NO. - */ -+ (BOOL)isUIKitLinkTimeVersionAtLeast:(FBSDKUIKitVersion)version; - -/** - Tests whether the UIKit version in the runtime is at least the specified version. - @param version The version to test against. - @return YES if the runtime UIKit version is greater than or equal to the specified version, otherwise NO. - */ -+ (BOOL)isUIKitRunTimeVersionAtLeast:(FBSDKUIKitVersion)version; - -/** - Checks equality between 2 objects. - - Checks for pointer equality, nils, isEqual:. - @param object The first object to compare. - @param other The second object to compare. - @return YES if the objects are equal, otherwise NO. - */ -+ (BOOL)object:(id)object isEqualToObject:(id)other; - -/** - Constructs an NSURL. - @param scheme The scheme for the URL. - @param host The host for the URL. - @param path The path for the URL. - @param queryParameters The query parameters for the URL. This will be converted into a query string. - @param errorRef If an error occurs, upon return contains an NSError object that describes the problem. - @return The URL. - */ -+ (nullable NSURL *)URLWithScheme:(NSString *)scheme - host:(NSString *)host - path:(NSString *)path - queryParameters:(NSDictionary *)queryParameters - error:(NSError *__autoreleasing *)errorRef; - -/** - * Deletes all the cookies in the NSHTTPCookieStorage for Facebook web dialogs - */ -+ (void)deleteFacebookCookies; - -/** - Extracts permissions from a response fetched from me/permissions - @param responseObject the response - @param grantedPermissions the set to add granted permissions to - @param declinedPermissions the set to add declined permissions to. - */ -+ (void)extractPermissionsFromResponse:(NSDictionary *)responseObject - grantedPermissions:(NSMutableSet *)grantedPermissions - declinedPermissions:(NSMutableSet *)declinedPermissions - expiredPermissions:(NSMutableSet *)expiredPermissions; - -/** - Registers a transient object so that it will not be deallocated until unregistered - @param object The transient object - */ -+ (void)registerTransientObject:(id)object; - -/** - Unregisters a transient object that was previously registered with registerTransientObject: - @param object The transient object - */ -+ (void)unregisterTransientObject:(__weak id)object; - -/** - validates that the app ID is non-nil, throws an NSException if nil. - */ -+ (void)validateAppID; - -/** - Validates that the client access token is non-nil, otherwise - throws an NSException otherwise. - Returns the composed client access token. - */ -+ (NSString *)validateRequiredClientAccessToken; - -/** - validates that the right URL schemes are registered, throws an NSException if not. - */ -+ (void)validateURLSchemes; - -/** - validates that Facebook reserved URL schemes are not registered, throws an NSException if they are. - */ -+ (void)validateFacebookReservedURLSchemes; - -/** - Attempts to find the first UIViewController in the view's responder chain. Returns nil if not found. - */ -+ (nullable UIViewController *)viewControllerForView:(UIView *)view; - -/** - returns true if the url scheme is registered in the CFBundleURLTypes - */ -+ (BOOL)isRegisteredURLScheme:(NSString *)urlScheme; - -/** - returns the current key window - */ -+ (nullable UIWindow *)findWindow; - -/** - returns currently displayed top view controller. - */ -+ (nullable UIViewController *)topMostViewController; - -/** - Converts NSData to a hexadecimal UTF8 String. - */ -+ (nullable NSString *)hexadecimalStringFromData:(NSData *)data; - -/* - Checks if the permission is a publish permission. - */ -+ (BOOL)isPublishPermission:(NSString *)permission; - -#pragma mark - FB Apps Installed - -@property (class, nonatomic, assign, readonly) BOOL isFacebookAppInstalled; -@property (class, nonatomic, assign, readonly) BOOL isMessengerAppInstalled; -@property (class, nonatomic, assign, readonly) BOOL isMSQRDPlayerAppInstalled; - -+ (void)checkRegisteredCanOpenURLScheme:(NSString *)urlScheme; -+ (BOOL)isRegisteredCanOpenURLScheme:(NSString *)urlScheme; - -#define FBSDKConditionalLog(condition, loggingBehavior, desc, ...) \ -{ \ - if (!(condition)) { \ - NSString *msg = [NSString stringWithFormat:(desc), ##__VA_ARGS__]; \ - [FBSDKLogger singleShotLogEntry:loggingBehavior logEntry:msg]; \ - } \ -} - -#define FB_BASE_URL @"facebook.com" - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKInternalUtility.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKInternalUtility.m deleted file mode 100644 index 2b2c45e7a8..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKInternalUtility.m +++ /dev/null @@ -1,635 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKInternalUtility.h" - -#import - -#import - -#import "FBSDKCoreKit+Internal.h" -#import "FBSDKError.h" -#import "FBSDKSettings+Internal.h" -#import "FBSDKSettings.h" - -typedef NS_ENUM(NSUInteger, FBSDKInternalUtilityVersionMask) -{ - FBSDKInternalUtilityMajorVersionMask = 0xFFFF0000, - //FBSDKInternalUtilityMinorVersionMask = 0x0000FF00, // unused - //FBSDKInternalUtilityPatchVersionMask = 0x000000FF, // unused -}; - -typedef NS_ENUM(NSUInteger, FBSDKInternalUtilityVersionShift) -{ - FBSDKInternalUtilityMajorVersionShift = 16, - //FBSDKInternalUtilityMinorVersionShift = 8, // unused - //FBSDKInternalUtilityPatchVersionShift = 0, // unused -}; - -@implementation FBSDKInternalUtility - -#pragma mark - Class Methods - -+ (NSString *)appURLScheme -{ - NSString *appID = ([FBSDKSettings appID] ?: @""); - NSString *suffix = ([FBSDKSettings appURLSchemeSuffix] ?: @""); - return [[NSString alloc] initWithFormat: @"fb%@%@", appID, suffix]; -} - -+ (NSURL *)appURLWithHost:(NSString *)host - path:(NSString *)path - queryParameters:(NSDictionary *)queryParameters - error:(NSError *__autoreleasing *)errorRef -{ - return [self URLWithScheme:[self appURLScheme] - host:host - path:path - queryParameters:queryParameters - error:errorRef]; -} - -+ (NSDictionary *)dictionaryFromFBURL:(NSURL *)url -{ - // version 3.2.3 of the Facebook app encodes the parameters in the query but - // version 3.3 and above encode the parameters in the fragment; - // merge them together with fragment taking priority. - NSMutableDictionary *params = [NSMutableDictionary dictionary]; - [params addEntriesFromDictionary:[FBSDKBasicUtility dictionaryWithQueryString:url.query]]; - - // Only get the params from the fragment if it has authorize as the host - if ([url.host isEqualToString:@"authorize"]) { - [params addEntriesFromDictionary:[FBSDKBasicUtility dictionaryWithQueryString:url.fragment]]; - } - return params; -} - -+ (NSBundle *)bundleForStrings -{ - static NSBundle *bundle; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - NSString *stringsBundlePath = [[NSBundle bundleForClass:[FBSDKApplicationDelegate class]] - pathForResource:@"FacebookSDKStrings" - ofType:@"bundle"]; - bundle = [NSBundle bundleWithPath:stringsBundlePath] ?: [NSBundle mainBundle]; - }); - return bundle; -} - -+ (uint64_t)currentTimeInMilliseconds -{ - struct timeval time; - gettimeofday(&time, NULL); - return ((uint64_t)time.tv_sec * 1000) + (time.tv_usec / 1000); -} - -+ (void)extractPermissionsFromResponse:(NSDictionary *)responseObject - grantedPermissions:(NSMutableSet *)grantedPermissions - declinedPermissions:(NSMutableSet *)declinedPermissions - expiredPermissions:(NSMutableSet *)expiredPermissions -{ - NSArray *resultData = responseObject[@"data"]; - if (resultData.count > 0) { - for (NSDictionary *permissionsDictionary in resultData) { - NSString *permissionName = permissionsDictionary[@"permission"]; - NSString *status = permissionsDictionary[@"status"]; - - if ([status isEqualToString:@"granted"]) { - [grantedPermissions addObject:permissionName]; - } else if ([status isEqualToString:@"declined"]) { - [declinedPermissions addObject:permissionName]; - } else if ([status isEqualToString:@"expired"]) { - [expiredPermissions addObject:permissionName]; - } - } - } -} - -+ (NSURL *)facebookURLWithHostPrefix:(NSString *)hostPrefix - path:(NSString *)path - queryParameters:(NSDictionary *)queryParameters - error:(NSError *__autoreleasing *)errorRef -{ - return [self facebookURLWithHostPrefix:hostPrefix - path:path - queryParameters:queryParameters - defaultVersion:@"" - error:errorRef]; -} - -+ (NSURL *)facebookURLWithHostPrefix:(NSString *)hostPrefix - path:(NSString *)path - queryParameters:(NSDictionary *)queryParameters - defaultVersion:(NSString *)defaultVersion - error:(NSError *__autoreleasing *)errorRef -{ - if (hostPrefix.length && ![hostPrefix hasSuffix:@"."]) { - hostPrefix = [hostPrefix stringByAppendingString:@"."]; - } - - NSString *host = - [[FBSDKAccessToken currentAccessToken].graphDomain isEqualToString:@"gaming"] - ? @"fb.gg" - : @"facebook.com"; - - NSString *domainPart = [FBSDKSettings facebookDomainPart]; - if (domainPart.length) { - host = [[NSString alloc] initWithFormat:@"%@.%@", domainPart, host]; - } - host = [NSString stringWithFormat:@"%@%@", hostPrefix ?: @"", host ?: @""]; - - NSString *version = (defaultVersion.length > 0) ? defaultVersion : [FBSDKSettings graphAPIVersion]; - if (version.length) { - version = [@"/" stringByAppendingString:version]; - } - - if (path.length) { - NSScanner *versionScanner = [[NSScanner alloc] initWithString:path]; - if ([versionScanner scanString:@"/v" intoString:NULL] && - [versionScanner scanInteger:NULL] && - [versionScanner scanString:@"." intoString:NULL] && - [versionScanner scanInteger:NULL]) { - [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors - logEntry:[NSString stringWithFormat:@"Invalid Graph API version:%@, assuming %@ instead", - version, - [FBSDKSettings graphAPIVersion]]]; - version = nil; - } - if (![path hasPrefix:@"/"]) { - path = [@"/" stringByAppendingString:path]; - } - } - path = [[NSString alloc] initWithFormat:@"%@%@", version ?: @"", path ?: @""]; - - return [self URLWithScheme:@"https" - host:host - path:path - queryParameters:queryParameters - error:errorRef]; -} - -+ (BOOL)isBrowserURL:(NSURL *)URL -{ - NSString *scheme = URL.scheme.lowercaseString; - return ([scheme isEqualToString:@"http"] || [scheme isEqualToString:@"https"]); -} - -+ (BOOL)isFacebookBundleIdentifier:(NSString *)bundleIdentifier -{ - return ([bundleIdentifier hasPrefix:@"com.facebook."] || - [bundleIdentifier hasPrefix:@".com.facebook."]); -} - -+ (BOOL)isOSRunTimeVersionAtLeast:(NSOperatingSystemVersion)version -{ - return ([self _compareOperatingSystemVersion:[self operatingSystemVersion] toVersion:version] != NSOrderedAscending); -} - -+ (BOOL)isSafariBundleIdentifier:(NSString *)bundleIdentifier -{ - return ([bundleIdentifier isEqualToString:@"com.apple.mobilesafari"] || - [bundleIdentifier isEqualToString:@"com.apple.SafariViewService"]); -} - -+ (BOOL)isUIKitLinkTimeVersionAtLeast:(FBSDKUIKitVersion)version -{ - static int32_t linkTimeMajorVersion; - static dispatch_once_t getVersionOnce; - dispatch_once(&getVersionOnce, ^{ - int32_t linkTimeVersion = NSVersionOfLinkTimeLibrary("UIKit"); - linkTimeMajorVersion = [self getMajorVersionFromFullLibraryVersion:linkTimeVersion]; - }); - return (version <= linkTimeMajorVersion); -} - -+ (BOOL)isUIKitRunTimeVersionAtLeast:(FBSDKUIKitVersion)version -{ - static int32_t runTimeMajorVersion; - static dispatch_once_t getVersionOnce; - dispatch_once(&getVersionOnce, ^{ - int32_t runTimeVersion = NSVersionOfRunTimeLibrary("UIKit"); - runTimeMajorVersion = [self getMajorVersionFromFullLibraryVersion:runTimeVersion]; - }); - return (version <= runTimeMajorVersion); -} - -+ (int32_t)getMajorVersionFromFullLibraryVersion:(int32_t)version -{ - // Negative values returned by NSVersionOfRunTimeLibrary/NSVersionOfLinkTimeLibrary - // are still valid version numbers, as long as it's not -1. - // After bitshift by 16, the negatives become valid positive major version number. - // We ran into this first time with iOS 12. - if (version != -1) { - return ((version & FBSDKInternalUtilityMajorVersionMask) >> FBSDKInternalUtilityMajorVersionShift); - } else { - return 0; - } -} - -+ (BOOL)object:(id)object isEqualToObject:(id)other -{ - if (object == other) { - return YES; - } - if (!object || !other) { - return NO; - } - return [object isEqual:other]; -} - -+ (NSOperatingSystemVersion)operatingSystemVersion -{ - static NSOperatingSystemVersion operatingSystemVersion = { - .majorVersion = 0, - .minorVersion = 0, - .patchVersion = 0, - }; - static dispatch_once_t getVersionOnce; - dispatch_once(&getVersionOnce, ^{ - if ([NSProcessInfo instancesRespondToSelector:@selector(operatingSystemVersion)]) { - operatingSystemVersion = [NSProcessInfo processInfo].operatingSystemVersion; - } else { - NSArray *components = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."]; - switch (components.count) { - default: - case 3: - operatingSystemVersion.patchVersion = [components[2] integerValue]; - // fall through - case 2: - operatingSystemVersion.minorVersion = [components[1] integerValue]; - // fall through - case 1: - operatingSystemVersion.majorVersion = [components[0] integerValue]; - break; - case 0: - operatingSystemVersion.majorVersion = ([self isUIKitLinkTimeVersionAtLeast:FBSDKUIKitVersion_7_0] ? 7 : 6); - break; - } - } - }); - return operatingSystemVersion; -} - -+ (BOOL)shouldManuallyAdjustOrientation -{ - return (![self isUIKitLinkTimeVersionAtLeast:FBSDKUIKitVersion_8_0] || - ![self isUIKitRunTimeVersionAtLeast:FBSDKUIKitVersion_8_0]); -} - -+ (NSURL *)URLWithScheme:(NSString *)scheme - host:(NSString *)host - path:(NSString *)path - queryParameters:(NSDictionary *)queryParameters - error:(NSError *__autoreleasing *)errorRef -{ - if (![path hasPrefix:@"/"]) { - path = [@"/" stringByAppendingString:path ?: @""]; - } - - NSString *queryString = nil; - if (queryParameters.count) { - NSError *queryStringError; - queryString = [@"?" stringByAppendingString:[FBSDKBasicUtility queryStringWithDictionary:queryParameters - error:&queryStringError - invalidObjectHandler:NULL]]; - if (!queryString) { - if (errorRef != NULL) { - *errorRef = [FBSDKError invalidArgumentErrorWithName:@"queryParameters" - value:queryParameters - message:nil - underlyingError:queryStringError]; - } - return nil; - } - } - - NSURL *const URL = [NSURL URLWithString:[NSString stringWithFormat: - @"%@://%@%@%@", - scheme ?: @"", - host ?: @"", - path ?: @"", - queryString ?: @""]]; - if (errorRef != NULL) { - if (URL) { - *errorRef = nil; - } else { - *errorRef = [FBSDKError unknownErrorWithMessage:@"Unknown error building URL."]; - } - } - return URL; -} - -+ (void)deleteFacebookCookies -{ - NSHTTPCookieStorage *cookies = [NSHTTPCookieStorage sharedHTTPCookieStorage]; - NSArray *facebookCookies = [cookies cookiesForURL:[self facebookURLWithHostPrefix:@"m." - path:@"/dialog/" - queryParameters:@{} - error:NULL]]; - - for (NSHTTPCookie *cookie in facebookCookies) { - [cookies deleteCookie:cookie]; - } -} - -static NSMapTable *_transientObjects; - -+ (void)registerTransientObject:(id)object -{ - NSAssert([NSThread isMainThread], @"Must be called from the main thread!"); - if (!_transientObjects) { - _transientObjects = [[NSMapTable alloc] init]; - } - NSUInteger count = ((NSNumber *)[_transientObjects objectForKey:object]).unsignedIntegerValue; - [_transientObjects setObject:@(count + 1) forKey:object]; -} - -+ (void)unregisterTransientObject:(__weak id)object -{ - if (!object) { - return; - } - NSAssert([NSThread isMainThread], @"Must be called from the main thread!"); - NSUInteger count = ((NSNumber *)[_transientObjects objectForKey:object]).unsignedIntegerValue; - if (count == 1) { - [_transientObjects removeObjectForKey:object]; - } else if (count != 0) { - [_transientObjects setObject:@(count - 1) forKey:object]; - } else { - [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors - formatString:@"unregisterTransientObject:%@ count is 0. This may indicate a bug in the FBSDK. Please" - " file a report to developers.facebook.com/bugs if you encounter any problems. Thanks!", [object class]]; - } -} - -+ (UIViewController *)viewControllerForView:(UIView *)view -{ - UIResponder *responder = view.nextResponder; - while (responder) { - if ([responder isKindOfClass:[UIViewController class]]) { - return (UIViewController *)responder; - } - responder = responder.nextResponder; - } - return nil; -} - -#pragma mark - FB Apps Installed - -+ (BOOL)isFacebookAppInstalled -{ - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - [FBSDKInternalUtility checkRegisteredCanOpenURLScheme:FBSDK_CANOPENURL_FACEBOOK]; - }); - return [self _canOpenURLScheme:FBSDK_CANOPENURL_FACEBOOK]; -} - -+ (BOOL)isMessengerAppInstalled -{ - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - [FBSDKInternalUtility checkRegisteredCanOpenURLScheme:FBSDK_CANOPENURL_MESSENGER]; - }); - return [self _canOpenURLScheme:FBSDK_CANOPENURL_MESSENGER]; -} - -+ (BOOL)isMSQRDPlayerAppInstalled -{ - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - [FBSDKInternalUtility checkRegisteredCanOpenURLScheme:FBSDK_CANOPENURL_MSQRD_PLAYER]; - }); - return [self _canOpenURLScheme:FBSDK_CANOPENURL_MSQRD_PLAYER]; -} - -#pragma mark - Helper Methods - -+ (NSComparisonResult)_compareOperatingSystemVersion:(NSOperatingSystemVersion)version1 - toVersion:(NSOperatingSystemVersion)version2 -{ - if (version1.majorVersion < version2.majorVersion) { - return NSOrderedAscending; - } else if (version1.majorVersion > version2.majorVersion) { - return NSOrderedDescending; - } else if (version1.minorVersion < version2.minorVersion) { - return NSOrderedAscending; - } else if (version1.minorVersion > version2.minorVersion) { - return NSOrderedDescending; - } else if (version1.patchVersion < version2.patchVersion) { - return NSOrderedAscending; - } else if (version1.patchVersion > version2.patchVersion) { - return NSOrderedDescending; - } else { - return NSOrderedSame; - } -} - -+ (BOOL)_canOpenURLScheme:(NSString *)scheme -{ - NSURLComponents *components = [[NSURLComponents alloc] init]; - components.scheme = scheme; - components.path = @"/"; - return [[UIApplication sharedApplication] canOpenURL:components.URL]; -} - -+ (void)validateAppID -{ - if (![FBSDKSettings appID]) { - NSString *reason = @"App ID not found. Add a string value with your app ID for the key " - @"FacebookAppID to the Info.plist or call [FBSDKSettings setAppID:]."; - @throw [NSException exceptionWithName:@"InvalidOperationException" reason:reason userInfo:nil]; - } -} - -+ (NSString *)validateRequiredClientAccessToken { - if (![FBSDKSettings clientToken]) { - NSString *reason = @"ClientToken is required to be set for this operation. " - @"Set the FacebookClientToken in the Info.plist or call [FBSDKSettings setClientToken:]. " - @"You can find your client token in your App Settings -> Advanced."; - @throw [NSException exceptionWithName:@"InvalidOperationException" reason:reason userInfo:nil]; - } - return [NSString stringWithFormat:@"%@|%@", [FBSDKSettings appID], [FBSDKSettings clientToken]]; -} - -+ (void)validateURLSchemes -{ - [self validateAppID]; - NSString *defaultUrlScheme = [NSString stringWithFormat:@"fb%@%@", [FBSDKSettings appID], [FBSDKSettings appURLSchemeSuffix] ?: @""]; - if (![self isRegisteredURLScheme:defaultUrlScheme]) { - NSString *reason = [NSString stringWithFormat:@"%@ is not registered as a URL scheme. Please add it in your Info.plist", defaultUrlScheme]; - @throw [NSException exceptionWithName:@"InvalidOperationException" reason:reason userInfo:nil]; - } -} - -+ (void)validateFacebookReservedURLSchemes -{ - for (NSString * fbUrlScheme in @[FBSDK_CANOPENURL_FACEBOOK, FBSDK_CANOPENURL_MESSENGER, FBSDK_CANOPENURL_FBAPI, FBSDK_CANOPENURL_SHARE_EXTENSION]) { - if ([self isRegisteredURLScheme:fbUrlScheme]) { - NSString *reason = [NSString stringWithFormat:@"%@ is registered as a URL scheme. Please move the entry from CFBundleURLSchemes in your Info.plist to LSApplicationQueriesSchemes. If you are trying to resolve \"canOpenURL: failed\" warnings, those only indicate that the Facebook app is not installed on your device or simulator and can be ignored.", fbUrlScheme]; - @throw [NSException exceptionWithName:@"InvalidOperationException" reason:reason userInfo:nil]; - } - } -} - -+ (UIWindow *)findWindow -{ - UIWindow *window = [UIApplication sharedApplication].keyWindow; - if (window == nil || window.windowLevel != UIWindowLevelNormal) { - for (window in [UIApplication sharedApplication].windows) { - if (window.windowLevel == UIWindowLevelNormal) { - break; - } - } - } - - // Find active key window from UIScene - if (@available(iOS 13.0, tvOS 13, *)) { - NSSet *scenes = [[UIApplication sharedApplication] valueForKey:@"connectedScenes"]; - for (id scene in scenes) { - if (window) { - break; - } - - id activationState = [scene valueForKeyPath:@"activationState"]; - BOOL isActive = activationState != nil && [activationState integerValue] == 0; - if (isActive) { - Class WindowScene = NSClassFromString(@"UIWindowScene"); - if ([scene isKindOfClass:WindowScene]) { - NSArray *windows = [scene valueForKeyPath:@"windows"]; - for (UIWindow *w in windows) { - if (w.isKeyWindow) { - window = w; - break; - } - } - } - } - } - } - - if (window == nil) { - [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors - formatString:@"Unable to find a valid UIWindow", nil]; - } - return window; -} - -+ (UIViewController *)topMostViewController -{ - UIWindow *keyWindow = [self findWindow]; - // SDK expects a key window at this point, if it is not, make it one - if (keyWindow != nil && !keyWindow.isKeyWindow) { - [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors - formatString:@"Unable to obtain a key window, marking %@ as keyWindow", keyWindow.description]; - [keyWindow makeKeyWindow]; - } - - UIViewController *topController = keyWindow.rootViewController; - while (topController.presentedViewController) { - topController = topController.presentedViewController; - } - return topController; -} - -+ (NSString *)hexadecimalStringFromData:(NSData *)data -{ - NSUInteger dataLength = data.length; - if (dataLength == 0) { - return nil; - } - - const unsigned char *dataBuffer = data.bytes; - NSMutableString *hexString = [NSMutableString stringWithCapacity:(dataLength * 2)]; - for (int i = 0; i < dataLength; ++i) { - [hexString appendFormat:@"%02x", dataBuffer[i]]; - } - return [hexString copy]; -} - -+ (BOOL)isRegisteredURLScheme:(NSString *)urlScheme { - static dispatch_once_t fetchBundleOnce; - static NSArray *urlTypes = nil; - - dispatch_once(&fetchBundleOnce, ^{ - urlTypes = [[NSBundle mainBundle].infoDictionary valueForKey:@"CFBundleURLTypes"]; - }); - for (NSDictionary *urlType in urlTypes) { - NSArray *urlSchemes = [urlType valueForKey:@"CFBundleURLSchemes"]; - if ([urlSchemes containsObject:urlScheme]) { - return YES; - } - } - return NO; -} - -+ (void)checkRegisteredCanOpenURLScheme:(NSString *)urlScheme -{ - static dispatch_once_t initCheckedSchemesOnce; - static NSMutableSet *checkedSchemes = nil; - - dispatch_once(&initCheckedSchemesOnce, ^{ - checkedSchemes = [NSMutableSet set]; - }); - - @synchronized(self) { - if ([checkedSchemes containsObject:urlScheme]) { - return; - } else { - [checkedSchemes addObject:urlScheme]; - } - } - - if (![self isRegisteredCanOpenURLScheme:urlScheme]){ - NSString *reason = [NSString stringWithFormat:@"%@ is missing from your Info.plist under LSApplicationQueriesSchemes and is required for iOS 9.0", urlScheme]; - [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors logEntry:reason]; - } -} - -+ (BOOL)isRegisteredCanOpenURLScheme:(NSString *)urlScheme -{ - static dispatch_once_t fetchBundleOnce; - static NSArray *schemes = nil; - - dispatch_once(&fetchBundleOnce, ^{ - schemes = [[NSBundle mainBundle].infoDictionary valueForKey:@"LSApplicationQueriesSchemes"]; - }); - - return [schemes containsObject:urlScheme]; -} - -+ (BOOL)isPublishPermission:(NSString *)permission -{ - return [permission hasPrefix:@"publish"] || - [permission hasPrefix:@"manage"] || - [permission isEqualToString:@"ads_management"] || - [permission isEqualToString:@"create_event"] || - [permission isEqualToString:@"rsvp_event"]; -} - -+ (BOOL)isUnity -{ - NSString *userAgentSuffix = [FBSDKSettings userAgentSuffix]; - if (userAgentSuffix != nil && [userAgentSuffix rangeOfString:@"Unity"].location != NSNotFound) { - return YES; - } - return NO; -} - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKLogger.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKLogger.h deleted file mode 100644 index 04f5fc8bd4..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKLogger.h +++ /dev/null @@ -1,91 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - - Simple logging utility for conditionally logging strings and then emitting them - via NSLog(). - - @unsorted - */ -NS_SWIFT_NAME(Logger) -@interface FBSDKLogger : NSObject - -// Access current accumulated contents of the logger. -@property (copy, nonatomic) NSString *contents; - -// Each FBSDKLogger gets a unique serial number to allow the client to log these numbers and, for instance, correlation of Request/Response -@property (nonatomic, readonly) NSUInteger loggerSerialNumber; - -// The logging behavior of this logger. See the FB_LOG_BEHAVIOR* constants in FBSession.h -@property (copy, nonatomic, readonly) NSString *loggingBehavior; - -// Is the current logger instance active, based on its loggingBehavior? -@property (nonatomic, readonly, getter=isActive) BOOL active; - -// -// Instance methods -// - -// Create with specified logging behavior -- (instancetype)initWithLoggingBehavior:(NSString *)loggingBehavior; - -// Append string, or key/value pair -- (void)appendString:(NSString *)string; -- (void)appendFormat:(NSString *)formatString, ... NS_FORMAT_FUNCTION(1,2); -- (void)appendKey:(NSString *)key value:(NSString *)value; - -// Emit log, clearing out the logger contents. -- (void)emitToNSLog; - -// -// Class methods -// - -// -// Return a globally unique serial number to be used for correlating multiple output from the same logger. -// -+ (NSUInteger)generateSerialNumber; - -// Simple helper to write a single log entry, based upon whether the behavior matches a specified on. -+ (void)singleShotLogEntry:(NSString *)loggingBehavior - logEntry:(NSString *)logEntry; - -+ (void)singleShotLogEntry:(NSString *)loggingBehavior - formatString:(NSString *)formatString, ... NS_FORMAT_FUNCTION(2,3); - -+ (void)singleShotLogEntry:(NSString *)loggingBehavior - timestampTag:(NSObject *)timestampTag - formatString:(NSString *)formatString, ... NS_FORMAT_FUNCTION(3,4); - -// Register a timestamp label with the "current" time, to then be retrieved by singleShotLogEntry -// to include a duration. -+ (void)registerCurrentTime:(NSString *)loggingBehavior - withTag:(NSObject *)timestampTag; - -// When logging strings, replace all instances of 'replace' with instances of 'replaceWith'. -+ (void)registerStringToReplace:(NSString *)replace - replaceWith:(NSString *)replaceWith; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKLogger.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKLogger.m deleted file mode 100644 index d5169b1c52..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKLogger.m +++ /dev/null @@ -1,218 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKLogger.h" - -#import "FBSDKInternalUtility.h" -#import "FBSDKSettings+Internal.h" - -static NSUInteger g_serialNumberCounter = 1111; -static NSMutableDictionary *g_stringsToReplace = nil; -static NSMutableDictionary *g_startTimesWithTags = nil; - -@interface FBSDKLogger () - -@property (nonatomic, strong, readonly) NSMutableString *internalContents; - -@end - -@implementation FBSDKLogger - -// Lifetime - -- (instancetype)initWithLoggingBehavior:(NSString *)loggingBehavior -{ - if ((self = [super init])) { - _active = [FBSDKSettings.loggingBehaviors containsObject:loggingBehavior]; - _loggingBehavior = loggingBehavior; - if (_active) { - _internalContents = [[NSMutableString alloc] init]; - _loggerSerialNumber = [FBSDKLogger generateSerialNumber]; - } - } - - return self; -} - -// Public properties - -- (NSString *)contents -{ - return _internalContents; -} - -- (void)setContents:(NSString *)contents -{ - if (_active) { - _internalContents = [NSMutableString stringWithString:contents]; - } -} - -// Public instance methods - -- (void)appendString:(NSString *)string -{ - if (_active) { - [_internalContents appendString:string]; - } -} - -- (void)appendFormat:(NSString *)formatString, ... -{ - if (_active) { - va_list vaArguments; - va_start(vaArguments, formatString); - NSString *logString = [[NSString alloc] initWithFormat:formatString arguments:vaArguments]; - va_end(vaArguments); - - [self appendString:logString]; - } -} - - -- (void)appendKey:(NSString *)key value:(NSString *)value -{ - if (_active && value.length) { - [_internalContents appendFormat:@" %@:\t%@\n", key, value]; - } -} - -- (void)emitToNSLog -{ - if (_active) { - - for (NSString *key in [g_stringsToReplace keyEnumerator]) { - [_internalContents replaceOccurrencesOfString:key - withString:g_stringsToReplace[key] - options:NSLiteralSearch - range:NSMakeRange(0, _internalContents.length)]; - } - - // Xcode 4.4 hangs on extremely long NSLog output (http://openradar.appspot.com/11972490). Truncate if needed. - const int MAX_LOG_STRING_LENGTH = 10000; - NSString *logString = _internalContents; - if (_internalContents.length > MAX_LOG_STRING_LENGTH) { - logString = [NSString stringWithFormat:@"TRUNCATED: %@", [_internalContents substringToIndex:MAX_LOG_STRING_LENGTH]]; - } - NSLog(@"FBSDKLog: %@", logString); - - [_internalContents setString:@""]; - } -} - -// Public static methods - -+ (NSUInteger)generateSerialNumber -{ - return g_serialNumberCounter++; -} - -+ (void)singleShotLogEntry:(NSString *)loggingBehavior - logEntry:(NSString *)logEntry { - if ([FBSDKSettings.loggingBehaviors containsObject:loggingBehavior]) { - FBSDKLogger *logger = [[FBSDKLogger alloc] initWithLoggingBehavior:loggingBehavior]; - [logger appendString:logEntry]; - [logger emitToNSLog]; - } -} - -+ (void)singleShotLogEntry:(NSString *)loggingBehavior - formatString:(NSString *)formatString, ... { - - if ([FBSDKSettings.loggingBehaviors containsObject:loggingBehavior]) { - va_list vaArguments; - va_start(vaArguments, formatString); - NSString *logString = [[NSString alloc] initWithFormat:formatString arguments:vaArguments]; - va_end(vaArguments); - - [self singleShotLogEntry:loggingBehavior logEntry:logString]; - } -} - - -+ (void)singleShotLogEntry:(NSString *)loggingBehavior - timestampTag:(NSObject *)timestampTag - formatString:(NSString *)formatString, ... { - - if ([FBSDKSettings.loggingBehaviors containsObject:loggingBehavior]) { - va_list vaArguments; - va_start(vaArguments, formatString); - NSString *logString = [[NSString alloc] initWithFormat:formatString arguments:vaArguments]; - va_end(vaArguments); - - // Start time of this "timestampTag" is stashed in the dictionary. - // Treat the incoming object tag simply as an address, since it's only used to identify during lifetime. If - // we send in as an object, the dictionary will try to copy it. - NSNumber *tagAsNumber = @((unsigned long)(__bridge void *)timestampTag); - NSNumber *startTimeNumber = g_startTimesWithTags[tagAsNumber]; - - // Only log if there's been an associated start time. - if (startTimeNumber != nil) { - uint64_t elapsed = [FBSDKInternalUtility currentTimeInMilliseconds] - startTimeNumber.unsignedLongLongValue; - [g_startTimesWithTags removeObjectForKey:tagAsNumber]; // served its purpose, remove - - // Log string is appended with "%d msec", with nothing intervening. This gives the most control to the caller. - logString = [NSString stringWithFormat:@"%@%llu msec", logString, elapsed]; - - [self singleShotLogEntry:loggingBehavior logEntry:logString]; - } - } -} - -+ (void)registerCurrentTime:(NSString *)loggingBehavior - withTag:(NSObject *)timestampTag { - - if ([FBSDKSettings.loggingBehaviors containsObject:loggingBehavior]) { - - if (!g_startTimesWithTags) { - g_startTimesWithTags = [[NSMutableDictionary alloc] init]; - } - - if (g_startTimesWithTags.count >= 1000) { - [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors logEntry: - @"Unexpectedly large number of outstanding perf logging start times, something is likely wrong."]; - } - - uint64_t currTime = [FBSDKInternalUtility currentTimeInMilliseconds]; - - // Treat the incoming object tag simply as an address, since it's only used to identify during lifetime. If - // we send in as an object, the dictionary will try to copy it. - unsigned long tagAsNumber = (unsigned long)(__bridge void *)timestampTag; - g_startTimesWithTags[@(tagAsNumber)] = @(currTime); - } -} - - -+ (void)registerStringToReplace:(NSString *)replace - replaceWith:(NSString *)replaceWith { - - // Strings sent in here never get cleaned up, but that's OK, don't ever expect too many. - - if (FBSDKSettings.loggingBehaviors.count > 0) { // otherwise there's no logging. - - if (!g_stringsToReplace) { - g_stringsToReplace = [[NSMutableDictionary alloc] init]; - } - - [g_stringsToReplace setValue:replaceWith forKey:replace]; - } -} - - - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMath.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMath.h deleted file mode 100644 index e4eb673f60..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMath.h +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -NS_SWIFT_NAME(Math) -@interface FBSDKMath : NSObject - -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; - -+ (CGPoint)ceilForPoint:(CGPoint)value; -+ (CGSize)ceilForSize:(CGSize)value; -+ (CGPoint)floorForPoint:(CGPoint)value; -+ (CGSize)floorForSize:(CGSize)value; -+ (NSUInteger)hashWithCGFloat:(CGFloat)value; -+ (NSUInteger)hashWithCString:(const char *)value; -+ (NSUInteger)hashWithDouble:(double)value; -+ (NSUInteger)hashWithFloat:(float)value; -+ (NSUInteger)hashWithInteger:(NSUInteger)value; -+ (NSUInteger)hashWithInteger:(NSUInteger)value1 andInteger:(NSUInteger)value2; -+ (NSUInteger)hashWithIntegerArray:(NSUInteger *)values count:(NSUInteger)count; -+ (NSUInteger)hashWithLong:(unsigned long long)value; -+ (NSUInteger)hashWithPointer:(const void *)value; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMath.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMath.m deleted file mode 100644 index 302e80b170..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMath.m +++ /dev/null @@ -1,149 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -// -// Based on Thomas Wang 32/64 bit mix hash -// http://www.concentric.net/~Ttwang/tech/inthash.htm -// - -#import "FBSDKMath.h" - -#import - -@implementation FBSDKMath - -#pragma mark - Class Methods - -+ (CGPoint)ceilForPoint:(CGPoint)value -{ - return CGPointMake(ceilf(value.x), ceilf(value.x)); -} - -+ (CGSize)ceilForSize:(CGSize)value -{ - return CGSizeMake(ceilf(value.width), ceilf(value.height)); -} - -+ (CGPoint)floorForPoint:(CGPoint)value -{ - return CGPointMake(floorf(value.x), floorf(value.y)); -} - -+ (CGSize)floorForSize:(CGSize)value -{ - return CGSizeMake(floorf(value.width), floorf(value.height)); -} - -+ (NSUInteger)hashWithCGFloat:(CGFloat)value -{ -#if CGFLOAT_IS_DOUBLE - return [self hashWithDouble:value]; -#else - return [self hashWithFloat:value]; -#endif -} - -+ (NSUInteger)hashWithCString:(const char *)value -{ - // FNV-1a hash. - NSUInteger hash = sizeof(NSUInteger) == 4 ? 2166136261U : 14695981039346656037U; - while (*value) { - hash ^= *value++; - hash *= sizeof(NSUInteger) == 4 ? 16777619 : 1099511628211; - } - return hash; -} - -+ (NSUInteger)hashWithDouble:(double)value -{ - assert(sizeof(double) == sizeof(uint64_t)); // Size of double must be 8 bytes - union { - double key; - uint64_t bits; - } u; - u.key = value; - return [self hashWithLong:u.bits]; -} - -+ (NSUInteger)hashWithFloat:(float)value -{ - assert(sizeof(float) == sizeof(uint32_t)); // Size of float must be 4 bytes - union { - float key; - uint32_t bits; - } u; - u.key = value; - return [self hashWithInteger:u.bits]; -} - -+ (NSUInteger)hashWithInteger:(NSUInteger)value -{ - return [self hashWithPointer:(void *)value]; -} - -+ (NSUInteger)hashWithInteger:(NSUInteger)value1 andInteger:(NSUInteger)value2 -{ - return [self hashWithLong:(((unsigned long long)value1) << 32 | value2)]; -} - -+ (NSUInteger)hashWithIntegerArray:(NSUInteger *)values count:(NSUInteger)count -{ - if (count == 0) { - return 0; - } - NSUInteger hash = values[0]; - for (NSUInteger i = 1; i < count; ++i) { - hash = [self hashWithInteger:hash andInteger:values[i]]; - } - return hash; -} - -+ (NSUInteger)hashWithLong:(unsigned long long)value -{ - value = (~value) + (value << 18); // key = (key << 18) - key - 1; - value ^= (value >> 31); - value *= 21; // key = (key + (key << 2)) + (key << 4); - value ^= (value >> 11); - value += (value << 6); - value ^= (value >> 22); - return (NSUInteger)value; -} - -+ (NSUInteger)hashWithPointer:(const void *)value -{ - NSUInteger hash = (NSUInteger)value; -#if !TARGET_RT_64_BIT - hash = ~hash + (hash << 15); // key = (key << 15) - key - 1; - hash ^= (hash >> 12); - hash += (hash << 2); - hash ^= (hash >> 4); - hash *= 2057; // key = (key + (key << 3)) + (key << 11); - hash ^= (hash >> 16); -#else - hash += ~hash + (hash << 21); // key = (key << 21) - key - 1; - hash ^= (hash >> 24); - hash = (hash + (hash << 3)) + (hash << 8); - hash ^= (hash >> 14); - hash = (hash + (hash << 2)) + (hash << 4); // key * 21 - hash ^= (hash >> 28); - hash += (hash << 31); -#endif - return hash; -} - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMeasurementEvent_Internal.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMeasurementEvent_Internal.h deleted file mode 100644 index f90322ad2b..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMeasurementEvent_Internal.h +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKMeasurementEvent.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - Provides methods for posting notifications from App Links - */ -@interface FBSDKMeasurementEvent (Internal) - -+ (void)postNotificationForEventName:(NSString *)name - args:(NSDictionary *)args; - -@end - -NS_ASSUME_NONNULL_END - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMonotonicTime.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMonotonicTime.h deleted file mode 100644 index 6717c91035..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMonotonicTime.h +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#include - -typedef double FBSDKMonotonicTimeSeconds; -typedef uint64_t FBSDKMonotonicTimeMilliseconds; -typedef uint64_t FBSDKMonotonicTimeNanoseconds; -typedef uint64_t FBSDKMachAbsoluteTimeUnits; - -/** - * return current monotonic time in Milliseconds - * Millisecond precision, uint64_t value. - * Avoids float/double math operations, thus more efficient than FBSDKMonotonicTimeGetCurrentSeconds. - * Should be preferred over FBSDKMonotonicTimeGetCurrentSeconds in case millisecond - * precision is required. - * IMPORTANT: this timer doesn't run while the device is sleeping. - */ -FBSDKMonotonicTimeMilliseconds FBSDKMonotonicTimeGetCurrentMilliseconds(void); - -/** - * return current monotonic time in Seconds - * Nanosecond precision, double value. - * Should be preferred over FBSDKMonotonicTimeGetCurrentMilliseconds in case - * nanosecond precision is required. - * IMPORTANT: this timer doesn't run while the device is sleeping. - */ -FBSDKMonotonicTimeSeconds FBSDKMonotonicTimeGetCurrentSeconds(void); - -/** - * return current monotonic time in NanoSeconds - * Nanosecond precision, uint64_t value. - * Useful when nanosecond precision is required but you want to avoid float/double math operations. - * IMPORTANT: this timer doesn't run while the device is sleeping. - */ -FBSDKMonotonicTimeNanoseconds FBSDKMonotonicTimeGetCurrentNanoseconds(void); - -/** - * return number of MachTimeUnits for given number of seconds - * this is useful when you want to use the really fast mach_absolute_time() function - * to calculate deltas between two points and then check it against a (precomputed) threshold. - * Nanosecond precision, uint64_t value. - */ -FBSDKMachAbsoluteTimeUnits FBSDKMonotonicTimeConvertSecondsToMachUnits(FBSDKMonotonicTimeSeconds seconds); - -/** - * return the number of seconds for a given amount of MachTimeUnits - * this is useful when you want to use the really fast mach_absolute_time() function, take - * deltas between time points, and when you're out of the timing critical section, use - * this function to compute how many seconds the delta works out to be. - */ -FBSDKMonotonicTimeSeconds FBSDKMonotonicTimeConvertMachUnitsToSeconds(FBSDKMachAbsoluteTimeUnits machUnits); - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMonotonicTime.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMonotonicTime.m deleted file mode 100644 index 362834c199..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMonotonicTime.m +++ /dev/null @@ -1,93 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKMonotonicTime.h" - -#include -#include -#include - -#include - -/** - * PLEASE NOTE: FBSDKSDKMonotonicTimeTests work fine, but are disabled - * because they take several seconds. Please re-enable them to test - * any changes you're making here! - */ -static uint64_t _get_time_nanoseconds(void) -{ - static struct mach_timebase_info tb_info = {0}; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - int ret = mach_timebase_info(&tb_info); - assert(0 == ret); - }); - - return (mach_absolute_time() * tb_info.numer) / tb_info.denom; -} - -FBSDKMonotonicTimeSeconds FBSDKMonotonicTimeGetCurrentSeconds(void) -{ - const uint64_t nowNanoSeconds = _get_time_nanoseconds(); - return (FBSDKMonotonicTimeSeconds)nowNanoSeconds / (FBSDKMonotonicTimeSeconds)1000000000.0; -} - -FBSDKMonotonicTimeMilliseconds FBSDKMonotonicTimeGetCurrentMilliseconds(void) -{ - const uint64_t nowNanoSeconds = _get_time_nanoseconds(); - return nowNanoSeconds / 1000000; -} - -FBSDKMonotonicTimeNanoseconds FBSDKMonotonicTimeGetCurrentNanoseconds(void) -{ - return _get_time_nanoseconds(); -} - -FBSDKMachAbsoluteTimeUnits FBSDKMonotonicTimeConvertSecondsToMachUnits(FBSDKMonotonicTimeSeconds seconds) -{ - static double ratio = 0; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - struct mach_timebase_info tb_info = {0}; - int ret = mach_timebase_info(&tb_info); - assert(0 == ret); - ratio = ((double) tb_info.denom / (double)tb_info.numer) * 1000000000.0; - }); - - return seconds * ratio; -} - -FBSDKMonotonicTimeSeconds FBSDKMonotonicTimeConvertMachUnitsToSeconds(FBSDKMachAbsoluteTimeUnits machUnits) -{ - static double ratio = 0; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - struct mach_timebase_info tb_info = {0}; - int ret = mach_timebase_info(&tb_info); - assert(0 == ret); - ratio = ((double) tb_info.numer / (double)tb_info.denom) / 1000000000.0; - }); - - return ratio * (double)machUnits; -} - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKProfile+Internal.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKProfile+Internal.h deleted file mode 100644 index 12b07a9a2a..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKProfile+Internal.h +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKProfile.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FBSDKProfile(Internal) - -+ (void)cacheProfile:(nullable FBSDKProfile *)profile; -+ (nullable FBSDKProfile *)fetchCachedProfile; - -@end - -NS_ASSUME_NONNULL_END - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSettings+Internal.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSettings+Internal.h deleted file mode 100644 index 9e28c27e13..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSettings+Internal.h +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#if SWIFT_PACKAGE -#import "FBSDKSettings.h" -#else -#import -#endif - -@protocol FBSDKAccessTokenCaching; - -@interface FBSDKSettings(Internal) - -+ (NSObject *)accessTokenCache; - -+ (void)setAccessTokenCache:(NSObject *)accessTokenCache; - -@property (class, nonatomic, copy, readonly) NSString *graphAPIDebugParamValue; - -// used by Unity. -@property (class, nonatomic, copy) NSString *userAgentSuffix; - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSwizzler.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSwizzler.h deleted file mode 100644 index 9e7b57dfc6..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSwizzler.h +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -// Cast to turn things that are not ids into NSMapTable keys -#define MAPTABLE_ID(x) (__bridge id)((void *)x) - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wstrict-prototypes" - -typedef void (^swizzleBlock)(); - -#pragma clang diagnostic pop - -// Rename to avoid duplicate symbol errors -NS_SWIFT_NAME(Swizzler) -@interface FBSDKSwizzler : NSObject - -+ (void)swizzleSelector:(SEL)aSelector onClass:(Class)aClass withBlock:(swizzleBlock)block named:(NSString *)aName; -+ (void)unswizzleSelector:(SEL)aSelector onClass:(Class)aClass named:(NSString *)aName; -+ (void)printSwizzles; - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSwizzler.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSwizzler.m deleted file mode 100644 index 45686c9f1e..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSwizzler.m +++ /dev/null @@ -1,324 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKSwizzler.h" - -#import - -#define MIN_ARGS 2 -#define MAX_ARGS 5 - -@interface FBSDKSwizzle : NSObject - -@property (nonatomic, assign) Class class; -@property (nonatomic, assign) SEL selector; -@property (nonatomic, assign) IMP originalMethod; -@property (nonatomic, assign) uint numArgs; -@property (nonatomic, copy) NSMapTable *blocks; - -- (instancetype)initWithBlock:(swizzleBlock)aBlock - named:(NSString *)aName - forClass:(Class)aClass - selector:(SEL)aSelector - originalMethod:(IMP)aMethod - withNumArgs:(uint)numArgs; - -@end - -static NSMapTable *swizzles; - -static FBSDKSwizzle* fb_findSwizzle(id self, SEL _cmd){ - Method aMethod = class_getInstanceMethod([self class], _cmd); - FBSDKSwizzle *swizzle = (FBSDKSwizzle *)[swizzles objectForKey:MAPTABLE_ID(aMethod)]; - Class this_class = [self class]; - while (!swizzle && class_getSuperclass(this_class)){ - this_class = class_getSuperclass(this_class); - aMethod = class_getInstanceMethod(this_class, _cmd); - swizzle = (FBSDKSwizzle *)[swizzles objectForKey:MAPTABLE_ID(aMethod)]; - } - return swizzle; -} - -static void fb_swizzledMethod_2(id self, SEL _cmd) -{ - FBSDKSwizzle *swizzle = fb_findSwizzle(self, _cmd); - if (swizzle) { - ((void(*)(id, SEL))swizzle.originalMethod)(self, _cmd); - - NSEnumerator *blocks = [swizzle.blocks objectEnumerator]; - swizzleBlock block; - while ((block = [blocks nextObject])) { - block(self, _cmd); - } - } -} - -static void fb_swizzledMethod_3(id self, SEL _cmd, id arg) -{ - FBSDKSwizzle *swizzle = fb_findSwizzle(self, _cmd); - if (swizzle) { - ((void(*)(id, SEL, id))swizzle.originalMethod)(self, _cmd, arg); - - NSEnumerator *blocks = [swizzle.blocks objectEnumerator]; - swizzleBlock block; - while ((block = [blocks nextObject])) { - block(self, _cmd, arg); - } - } -} - -static void fb_swizzledMethod_4(id self, SEL _cmd, id arg, id arg2) -{ - FBSDKSwizzle *swizzle = fb_findSwizzle(self, _cmd); - if (swizzle) { - ((void(*)(id, SEL, id, id))swizzle.originalMethod)(self, _cmd, arg, arg2); - - NSEnumerator *blocks = [swizzle.blocks objectEnumerator]; - swizzleBlock block; - while ((block = [blocks nextObject])) { - block(self, _cmd, arg, arg2); - } - } -} - -static void fb_swizzledMethod_5(id self, SEL _cmd, id arg, id arg2, id arg3) -{ - FBSDKSwizzle *swizzle = fb_findSwizzle(self, _cmd); - if (swizzle) { - ((void(*)(id, SEL, id, id, id))swizzle.originalMethod)(self, _cmd, arg, arg2, arg3); - - NSEnumerator *blocks = [swizzle.blocks objectEnumerator]; - swizzleBlock block; - while ((block = [blocks nextObject])) { - block(self, _cmd, arg, arg2, arg3); - } - } -} - -static void fb_swizzleMethod_4_io(id self, SEL _cmd, NSInteger arg, id arg2) -{ - FBSDKSwizzle *swizzle = fb_findSwizzle(self, _cmd); - if (swizzle) { - ((void(*)(id, SEL, NSInteger, id))swizzle.originalMethod)(self, _cmd, arg, arg2); - - NSEnumerator *blocks = [swizzle.blocks objectEnumerator]; - swizzleBlock block; - while ((block = [blocks nextObject])) { - block(self, _cmd, arg, arg2); - } - } -} - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wstrict-prototypes" - -static void (*fb_swizzledMethods[MAX_ARGS - MIN_ARGS + 1])() = {fb_swizzledMethod_2, fb_swizzledMethod_3, fb_swizzledMethod_4, fb_swizzledMethod_5}; - -#pragma clang diagnostic pop - -@implementation FBSDKSwizzler - -+ (void)initialize -{ - swizzles = [NSMapTable mapTableWithKeyOptions:(NSPointerFunctionsOpaqueMemory | - NSPointerFunctionsOpaquePersonality) - valueOptions:(NSPointerFunctionsStrongMemory | - NSPointerFunctionsObjectPointerPersonality)]; - [FBSDKSwizzler resolveConflict]; -} - -+ (void)resolveConflict -{ - Class swizzler = objc_lookUpClass("MPSwizzler"); - if (swizzler) { - Method method = class_getClassMethod(swizzler, @selector(swizzleSelector:onClass:withBlock:named:)); - Method newMethod = class_getClassMethod(self, @selector(swizzleSelector:onClass:withBlock:named:)); - method_setImplementation(method, method_getImplementation(newMethod)); - } -} - -+ (void)printSwizzles -{ - NSEnumerator *en = [swizzles objectEnumerator]; - FBSDKSwizzle *swizzle; - while ((swizzle = (FBSDKSwizzle *)[en nextObject])) { - NSLog(@"%@", swizzle); - } -} - -+ (FBSDKSwizzle *)swizzleForMethod:(Method)aMethod -{ - return (FBSDKSwizzle *)[swizzles objectForKey:MAPTABLE_ID(aMethod)]; -} - -+ (void)removeSwizzleForMethod:(Method)aMethod -{ - [swizzles removeObjectForKey:MAPTABLE_ID(aMethod)]; -} - -+ (void)setSwizzle:(FBSDKSwizzle *)swizzle forMethod:(Method)aMethod -{ - [swizzles setObject:swizzle forKey:MAPTABLE_ID(aMethod)]; -} - -+ (BOOL)isLocallyDefinedMethod:(Method)aMethod onClass:(Class)aClass -{ - uint count; - BOOL isLocal = NO; - Method *methods = class_copyMethodList(aClass, &count); - for (NSUInteger i = 0; i < count; i++) { - if (aMethod == methods[i]) { - isLocal = YES; - break; - } - } - free(methods); - return isLocal; -} - -+ (void)swizzleSelector:(SEL)aSelector onClass:(Class)aClass withBlock:(swizzleBlock)aBlock named:(NSString *)aName -{ - Method aMethod = class_getInstanceMethod(aClass, aSelector); - if (aMethod) { - uint numArgs = method_getNumberOfArguments(aMethod); - if (numArgs >= MIN_ARGS && numArgs <= MAX_ARGS) { - - BOOL isLocal = [FBSDKSwizzler isLocallyDefinedMethod:aMethod onClass:aClass]; - IMP swizzledMethod = (IMP)fb_swizzledMethods[numArgs - 2]; - // Check whether the first parameter is integer - if (4 == numArgs) { - char *type = method_copyArgumentType(aMethod, 2); - NSString *firstType = [NSString stringWithCString:type encoding:NSUTF8StringEncoding]; - NSString *integerTypes = @"islq"; - if ([integerTypes containsString:firstType.lowercaseString]) { - swizzledMethod = (IMP)fb_swizzleMethod_4_io; - } - free(type); - } - - FBSDKSwizzle *swizzle = [FBSDKSwizzler swizzleForMethod:aMethod]; - - if (isLocal) { - if (!swizzle) { - IMP originalMethod = method_getImplementation(aMethod); - - // Replace the local implementation of this method with the swizzled one - method_setImplementation(aMethod,swizzledMethod); - - // Create and add the swizzle - swizzle = [[FBSDKSwizzle alloc] initWithBlock:aBlock named:aName forClass:aClass selector:aSelector originalMethod:originalMethod withNumArgs:numArgs]; - [FBSDKSwizzler setSwizzle:swizzle forMethod:aMethod]; - - } else { - [swizzle.blocks setObject:aBlock forKey:aName]; - } - } else { - IMP originalMethod = swizzle ? swizzle.originalMethod : method_getImplementation(aMethod); - - // Add the swizzle as a new local method on the class. - if (!class_addMethod(aClass, aSelector, swizzledMethod, method_getTypeEncoding(aMethod))) { - return; - } - // Now re-get the Method, it should be the one we just added. - Method newMethod = class_getInstanceMethod(aClass, aSelector); - if (aMethod == newMethod) { - return; - } - - FBSDKSwizzle *newSwizzle = [[FBSDKSwizzle alloc] initWithBlock:aBlock named:aName forClass:aClass selector:aSelector originalMethod:originalMethod withNumArgs:numArgs]; - [FBSDKSwizzler setSwizzle:newSwizzle forMethod:newMethod]; - } - } - } -} - -+ (void)unswizzleSelector:(SEL)aSelector onClass:(Class)aClass -{ - Method aMethod = class_getInstanceMethod(aClass, aSelector); - FBSDKSwizzle *swizzle = [FBSDKSwizzler swizzleForMethod:aMethod]; - if (swizzle) { - method_setImplementation(aMethod, swizzle.originalMethod); - [FBSDKSwizzler removeSwizzleForMethod:aMethod]; - } -} - -/* - Remove the named swizzle from the given class/selector. If aName is nil, remove all - swizzles for this class/selector -*/ -+ (void)unswizzleSelector:(SEL)aSelector onClass:(Class)aClass named:(NSString *)aName -{ - Method aMethod = class_getInstanceMethod(aClass, aSelector); - FBSDKSwizzle *swizzle = [FBSDKSwizzler swizzleForMethod:aMethod]; - if (swizzle) { - if (aName) { - [swizzle.blocks removeObjectForKey:aName]; - } - if (!aName || swizzle.blocks.count == 0) { - method_setImplementation(aMethod, swizzle.originalMethod); - [FBSDKSwizzler removeSwizzleForMethod:aMethod]; - } - } -} - -@end - - -@implementation FBSDKSwizzle - -- (instancetype)init -{ - if ((self = [super init])) { - self.blocks = [NSMapTable mapTableWithKeyOptions:(NSPointerFunctionsStrongMemory - | NSPointerFunctionsObjectPersonality) - valueOptions:(NSPointerFunctionsStrongMemory - | NSPointerFunctionsObjectPointerPersonality)]; - } - return self; -} - -- (instancetype)initWithBlock:(swizzleBlock)aBlock - named:(NSString *)aName - forClass:(Class)aClass - selector:(SEL)aSelector - originalMethod:(IMP)aMethod - withNumArgs:(uint)numArgs -{ - if ((self = [self init])) { - self.class = aClass; - self.selector = aSelector; - self.numArgs = numArgs; - self.originalMethod = aMethod; - [_blocks setObject:aBlock forKey:aName]; - } - return self; -} - -- (NSString *)description -{ - NSString *descriptors = @""; - NSString *key; - NSEnumerator *keys = [_blocks keyEnumerator]; - while ((key = [keys nextObject])) { - descriptors = [descriptors stringByAppendingFormat:@"\t%@ : %@\n", key, [_blocks objectForKey:key]]; - } - return [NSString stringWithFormat:@"Swizzle on %@::%@ [\n%@]", NSStringFromClass(self.class), - NSStringFromSelector(self.selector), descriptors]; -} - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKTriStateBOOL.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKTriStateBOOL.h deleted file mode 100644 index d5c1dbe12c..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKTriStateBOOL.h +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import - -typedef NS_ENUM(NSInteger, FBSDKTriStateBOOL) -{ - FBSDKTriStateBOOLValueUnknown = -1, - FBSDKTriStateBOOLValueNO = 0, - FBSDKTriStateBOOLValueYES = 1, -} NS_SWIFT_NAME(TriStateBool.Value); - -FOUNDATION_EXPORT FBSDKTriStateBOOL FBSDKTriStateBOOLFromBOOL(BOOL value); -FOUNDATION_EXPORT FBSDKTriStateBOOL FBSDKTriStateBOOLFromNSNumber(NSNumber *value); -FOUNDATION_EXPORT BOOL BOOLFromFBSDKTriStateBOOL(FBSDKTriStateBOOL value, BOOL defaultValue); - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKTriStateBOOL.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKTriStateBOOL.m deleted file mode 100644 index 727752a8d8..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKTriStateBOOL.m +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKTriStateBOOL.h" - -FBSDKTriStateBOOL FBSDKTriStateBOOLFromBOOL(BOOL value) -{ - return value ? FBSDKTriStateBOOLValueYES : FBSDKTriStateBOOLValueNO; -} - -FBSDKTriStateBOOL FBSDKTriStateBOOLFromNSNumber(NSNumber *value) -{ - return ([value isKindOfClass:[NSNumber class]] ? - FBSDKTriStateBOOLFromBOOL(value.boolValue) : - FBSDKTriStateBOOLValueUnknown); -} - -BOOL BOOLFromFBSDKTriStateBOOL(FBSDKTriStateBOOL value, BOOL defaultValue) -{ - switch (value) { - case FBSDKTriStateBOOLValueYES: - return YES; - case FBSDKTriStateBOOLValueNO: - return NO; - case FBSDKTriStateBOOLValueUnknown: - return defaultValue; - } -} - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKURL_Internal.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKURL_Internal.h deleted file mode 100644 index e5da05163c..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKURL_Internal.h +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKURL.h" - -@interface FBSDKURL (Internal) -+ (FBSDKURL *)URLForRenderBackToReferrerBarURL:(NSURL *)url; -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Instrument/CrashReport/FBSDKCrashObserver.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Instrument/CrashReport/FBSDKCrashObserver.h deleted file mode 100644 index f7ea35bced..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Instrument/CrashReport/FBSDKCrashObserver.h +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -#import "FBSDKCrashObserving.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FBSDKCrashObserver : NSObject - -+ (void)enable; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Instrument/CrashReport/FBSDKCrashObserver.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Instrument/CrashReport/FBSDKCrashObserver.m deleted file mode 100644 index f571196fa6..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Instrument/CrashReport/FBSDKCrashObserver.m +++ /dev/null @@ -1,87 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKCrashObserver.h" - -#import "FBSDKCrashHandler.h" -#import "FBSDKCrashShield.h" -#import "FBSDKFeatureManager.h" -#import "FBSDKGraphRequest.h" -#import "FBSDKGraphRequestConnection.h" -#import "FBSDKLibAnalyzer.h" -#import "FBSDKSettings.h" - -@implementation FBSDKCrashObserver - -@synthesize prefixes, frameworks; - -- (instancetype)init -{ - if ((self = [super init])) { - prefixes = @[@"FBSDK", @"_FBSDK"]; - frameworks = @[@"FBSDKCoreKit", - @"FBSDKLoginKit", - @"FBSDKShareKit", - @"FBSDKPlacesKit", - @"FBSDKTVOSKit"]; - } - return self; -} - -+ (void)enable -{ - [FBSDKCrashHandler addObserver:[FBSDKCrashObserver sharedInstance]]; -} - -+ (FBSDKCrashObserver *)sharedInstance -{ - static FBSDKCrashObserver *_sharedInstance; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - _sharedInstance = [[self alloc] init]; - }); - return _sharedInstance; -} - -- (void)didReceiveCrashLogs:(NSArray *> *)processedCrashLogs -{ - if (0 == processedCrashLogs.count) { - [FBSDKCrashHandler clearCrashReportFiles]; - return; - } - NSData *jsonData = [NSJSONSerialization dataWithJSONObject:processedCrashLogs options:0 error:nil]; - if (jsonData) { - NSString *crashReports = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; - FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:[NSString stringWithFormat:@"%@/instruments", [FBSDKSettings appID]] - parameters:@{@"crash_reports" : crashReports ?: @""} - HTTPMethod:FBSDKHTTPMethodPOST]; - - [request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { - if (!error && [result isKindOfClass:[NSDictionary class]] && result[@"success"]) { - [FBSDKCrashHandler clearCrashReportFiles]; - } - }]; - } - [FBSDKFeatureManager checkFeature:FBSDKFeatureCrashShield completionBlock:^(BOOL enabled) { - if (enabled) { - [FBSDKCrashShield analyze:processedCrashLogs]; - } - }]; -} - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Instrument/CrashReport/FBSDKCrashShield.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Instrument/CrashReport/FBSDKCrashShield.h deleted file mode 100644 index 987b3ce035..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Instrument/CrashReport/FBSDKCrashShield.h +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface FBSDKCrashShield : NSObject - -+ (void)analyze:(NSArray *> *)crashLogs; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Instrument/CrashReport/FBSDKCrashShield.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Instrument/CrashReport/FBSDKCrashShield.m deleted file mode 100644 index 309a7c4dd7..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Instrument/CrashReport/FBSDKCrashShield.m +++ /dev/null @@ -1,128 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKCrashShield.h" - -#import "FBSDKFeatureManager.h" -#import "FBSDKGraphRequest.h" -#import "FBSDKGraphRequestConnection.h" -#import "FBSDKSettings.h" - -@implementation FBSDKCrashShield - -static NSDictionary *> *_featureMapping; - -+ (void)initialize -{ - if (self == [FBSDKCrashShield class]) { - _featureMapping = - @{ - @"AAM" : @[ - @"FBSDKMetadataIndexer", - ], - @"CodelessEvents" : @[ - @"FBSDKCodelessIndexer", - @"FBSDKEventBinding", - @"FBSDKEventBindingManager", - @"FBSDKViewHierarchy", - @"FBSDKCodelessPathComponent", - @"FBSDKCodelessParameterComponent", - ], - @"RestrictiveDataFiltering" : @[ - @"FBSDKRestrictiveDataFilterManager", - ], - @"ErrorReport" : @[ - @"FBSDKErrorReport", - ], - @"PrivacyProtection" : @[ - @"FBSDKModelManager", - ], - @"SuggestedEvents" : @[ - @"FBSDKSuggestedEventsIndexer", - @"FBSDKFeatureExtractor", - @"FBSDKEventInferencer", - ], - @"PIIFiltering" : @[ - @"FBSDKAddressFilterManager", - @"FBSDKAddressInferencer", - ], - @"EventDeactivation" : @[ - @"FBSDKEventDeactivationManager", - ], - }; - } -} - -+ (void)analyze:(NSArray *> *)crashLogs -{ - NSMutableSet *disabledFeatues = [NSMutableSet set]; - for (NSDictionary *crashLog in crashLogs) { - NSArray *callstack = crashLog[@"callstack"]; - NSString *featureName = [self getFeature:callstack]; - if (featureName) { - [FBSDKFeatureManager disableFeature:featureName]; - [disabledFeatues addObject:featureName]; - continue; - } - } - if (disabledFeatues.count > 0) { - NSDictionary *disabledFeatureLog = @{@"feature_names":[disabledFeatues allObjects], - @"timestamp":[NSString stringWithFormat:@"%.0lf", [[NSDate date] timeIntervalSince1970]], - }; - NSData *jsonData = [NSJSONSerialization dataWithJSONObject:disabledFeatureLog options:0 error:nil]; - if (jsonData) { - NSString *disabledFeatureReport = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; - if (disabledFeatureReport) { - FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:[NSString stringWithFormat:@"%@/instruments", [FBSDKSettings appID]] - parameters:@{@"crash_shield":disabledFeatureReport} - HTTPMethod:FBSDKHTTPMethodPOST]; - - [request startWithCompletionHandler:nil]; - } - } - } -} - -+ (nullable NSString *)getFeature:(NSArray *)callstack -{ - NSArray *featureNames = _featureMapping.allKeys; - for (NSString *entry in callstack) { - NSString *className = [self getClassName:entry]; - for (NSString *featureName in featureNames) { - NSArray *classArray = [_featureMapping objectForKey:featureName]; - if (className && [classArray containsObject:className]) { - return featureName; - } - } - } - return nil; -} - -+ (nullable NSString *)getClassName:(NSString *)entry -{ - NSArray *items = [entry componentsSeparatedByString:@" "]; - NSString *className = nil; - // parse class name only from an entry in format "-[className functionName]+offset" - // or "+[className functionName]+offset" - if (items.count > 0 && ([items[0] hasPrefix:@"+["] || [items[0] hasPrefix:@"-["])) { - className = [items[0] substringFromIndex:2]; - } - return className; -} - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Instrument/ErrorReport/FBSDKErrorReport.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Instrument/ErrorReport/FBSDKErrorReport.h deleted file mode 100644 index 16d1c6604e..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Instrument/ErrorReport/FBSDKErrorReport.h +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import -#import "FBSDKError.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FBSDKErrorReport : NSObject - -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; - -+ (void)enable; -+ (void)saveError:(NSInteger)errorCode - errorDomain:(NSErrorDomain)errorDomain - message:(nullable NSString *)message; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Instrument/ErrorReport/FBSDKErrorReport.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Instrument/ErrorReport/FBSDKErrorReport.m deleted file mode 100644 index 64739019cb..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Instrument/ErrorReport/FBSDKErrorReport.m +++ /dev/null @@ -1,137 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKErrorReport.h" - -#import "FBSDKGraphRequest.h" -#import "FBSDKGraphRequestConnection.h" -#import "FBSDKLogger.h" -#import "FBSDKSettings.h" - -#define FBSDK_MAX_ERROR_REPORT_LOGS 1000 - -@implementation FBSDKErrorReport - -static NSString *ErrorReportStorageDirName = @"instrument/"; -static NSString *directoryPath; - -NSString *const kFBSDKErrorCode = @"error_code"; -NSString *const kFBSDKErrorDomain = @"domain"; -NSString *const kFBSDKErrorTimestamp = @"timestamp"; - -# pragma mark - Class Methods - -+ (void)initialize -{ - NSString *dirPath = [NSTemporaryDirectory() stringByAppendingPathComponent:ErrorReportStorageDirName]; - if (![[NSFileManager defaultManager] fileExistsAtPath:dirPath]) { - if (![[NSFileManager defaultManager] createDirectoryAtPath:dirPath withIntermediateDirectories:NO attributes:NULL error:NULL]) { - [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorInformational formatString:@"Failed to create library at %@", dirPath]; - } - } - directoryPath = dirPath; -} - -+ (void)enable -{ - [self uploadError]; - [FBSDKError enableErrorReport]; -} - -+ (void)uploadError -{ - NSArray *> *errorReports = [self loadErrorReports]; - if ([errorReports count] == 0) { - return [self clearErrorInfo]; - } - NSData *jsonData = [NSJSONSerialization dataWithJSONObject:errorReports options:0 error:nil]; - if (!jsonData){ - return; - } - NSString *errorData = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; - FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:[NSString stringWithFormat:@"%@/instruments", [FBSDKSettings appID]] - parameters:@{@"error_reports" : errorData ?: @""} - HTTPMethod:FBSDKHTTPMethodPOST]; - - [request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { - if (!error && [result isKindOfClass:[NSDictionary class]] && result[@"success"]) { - [self clearErrorInfo]; - } - }]; -} - -+ (void)saveError:(NSInteger)errorCode - errorDomain:(NSErrorDomain)errorDomain - message:(nullable NSString *)message -{ - NSString *timestamp = [NSString stringWithFormat:@"%.0lf", [[NSDate date] timeIntervalSince1970]]; - [self saveErrorInfoToDisk: @{ - kFBSDKErrorCode:@(errorCode), - kFBSDKErrorDomain:errorDomain, - kFBSDKErrorTimestamp:timestamp, - }]; -} - -+ (NSArray *> *)loadErrorReports -{ - NSMutableArray *> *errorReportArr = [NSMutableArray array]; - NSArray *fileNames = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:directoryPath error:NULL]; - NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(id _Nullable evaluatedObject, NSDictionary * _Nullable bindings) { - NSString *str = (NSString *)evaluatedObject; - return [str hasPrefix:@"error_report_"] && [str hasSuffix:@".plist"]; - }]; - fileNames = [fileNames filteredArrayUsingPredicate:predicate]; - fileNames = [fileNames sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2){ - return [obj2 compare:obj1]; - }]; - if (fileNames.count > 0){ - fileNames = [fileNames subarrayWithRange:NSMakeRange(0, MIN(fileNames.count, FBSDK_MAX_ERROR_REPORT_LOGS))]; - for (NSUInteger i = 0; i < fileNames.count; i++) { - NSDictionary *errorReport = [NSDictionary dictionaryWithContentsOfFile:[directoryPath stringByAppendingPathComponent:fileNames[i]]]; - if (errorReport) { - [errorReportArr addObject:errorReport]; - } - } - } - return [errorReportArr copy]; -} - -+ (void)clearErrorInfo -{ - NSArray *files = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:directoryPath error:nil]; - for (NSUInteger i = 0; i < files.count; i++) { - if ([files[i] hasPrefix:@"error_report"]) { - [[NSFileManager defaultManager] removeItemAtPath:[directoryPath stringByAppendingPathComponent:files[i]] error:nil]; - } - } -} - -#pragma mark - disk operations - -+ (void)saveErrorInfoToDisk:(NSDictionary *)errorInfo -{ - [errorInfo writeToFile:[self pathToErrorInfoFile] - atomically:YES]; -} - -+ (NSString *)pathToErrorInfoFile -{ - NSString *timestamp = [NSString stringWithFormat:@"%.0lf", [[NSDate date] timeIntervalSince1970]]; - return [directoryPath stringByAppendingPathComponent:[NSString stringWithFormat:@"error_report_%@.plist",timestamp]]; -} -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Instrument/FBSDKInstrumentManager.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Instrument/FBSDKInstrumentManager.h deleted file mode 100644 index 86415e09f9..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Instrument/FBSDKInstrumentManager.h +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface FBSDKInstrumentManager : NSObject - -+ (void)enable; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Instrument/FBSDKInstrumentManager.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Instrument/FBSDKInstrumentManager.m deleted file mode 100644 index 091658dd4c..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Instrument/FBSDKInstrumentManager.m +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKInstrumentManager.h" - -#import "FBSDKCrashObserver.h" -#import "FBSDKErrorReport.h" -#import "FBSDKFeatureManager.h" -#import "FBSDKSettings.h" - -@implementation FBSDKInstrumentManager - -+ (void)enable -{ - if (![FBSDKSettings isAutoLogAppEventsEnabled]) { - return; - } - - [FBSDKFeatureManager checkFeature:FBSDKFeatureCrashReport completionBlock:^(BOOL enabled) { - if (enabled) { - [FBSDKCrashObserver enable]; - } - }]; - [FBSDKFeatureManager checkFeature:FBSDKFeatureErrorReport completionBlock:^(BOOL enabled) { - if (enabled) { - [FBSDKErrorReport enable]; - } - }]; -} - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequest+Internal.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequest+Internal.h deleted file mode 100644 index 11aff98515..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequest+Internal.h +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -#if SWIFT_PACKAGE -#import "FBSDKGraphRequest.h" -#else -#import -#endif - -typedef NS_OPTIONS(NSUInteger, FBSDKGraphRequestFlags) -{ - FBSDKGraphRequestFlagNone = 0, - // indicates this request should not use a client token as its token parameter - FBSDKGraphRequestFlagSkipClientToken = 1 << 1, - // indicates this request should not close the session if its response is an oauth error - FBSDKGraphRequestFlagDoNotInvalidateTokenOnError = 1 << 2, - // indicates this request should not perform error recovery - FBSDKGraphRequestFlagDisableErrorRecovery = 1 << 3, -}; -@interface FBSDKGraphRequest (Internal) - -- (instancetype)initWithGraphPath:(NSString *)graphPath - parameters:(NSDictionary *)parameters - flags:(FBSDKGraphRequestFlags)flags; -- (instancetype)initWithGraphPath:(NSString *)graphPath - parameters:(NSDictionary *)parameters - tokenString:(NSString *)tokenString - HTTPMethod:(NSString *)HTTPMethod - flags:(FBSDKGraphRequestFlags)flags; -// Generally, requests automatically issued by the SDK -// should not invalidate the token and should disableErrorRecovery -// so that we don't cause a sudden change in token state or trigger recovery -// out of context of any user action. -@property (nonatomic, assign) FBSDKGraphRequestFlags flags; -@property (nonatomic, readonly, getter=isGraphErrorRecoveryDisabled) BOOL graphErrorRecoveryDisabled; -@property (nonatomic, readonly) BOOL hasAttachments; - -+ (BOOL)isAttachment:(id)item; -+ (NSString *)serializeURL:(NSString *)baseUrl - params:(NSDictionary *)params - httpMethod:(NSString *)httpMethod - forBatch:(BOOL)forBatch; - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestBody.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestBody.h deleted file mode 100644 index 37bf777e45..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestBody.h +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import -#import - -@class FBSDKGraphRequestDataAttachment; -@class FBSDKLogger; - -NS_SWIFT_NAME(GraphRequestBody) -@interface FBSDKGraphRequestBody : NSObject - -@property (nonatomic, retain, readonly) NSData *data; - -- (void)appendWithKey:(NSString *)key - formValue:(NSString *)value - logger:(FBSDKLogger *)logger; - -- (void)appendWithKey:(NSString *)key - imageValue:(UIImage *)image - logger:(FBSDKLogger *)logger; - -- (void)appendWithKey:(NSString *)key - dataValue:(NSData *)data - logger:(FBSDKLogger *)logger; - -- (void)appendWithKey:(NSString *)key - dataAttachmentValue:(FBSDKGraphRequestDataAttachment *)dataAttachment - logger:(FBSDKLogger *)logger; - -- (NSString *)mimeContentType; - -- (NSData *)compressedData; - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestBody.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestBody.m deleted file mode 100644 index e35b9fa014..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestBody.m +++ /dev/null @@ -1,166 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKGraphRequestBody.h" - -#import "FBSDKConstants.h" -#import "FBSDKCrypto.h" -#import "FBSDKGraphRequestDataAttachment.h" -#import "FBSDKInternalUtility.h" -#import "FBSDKLogger.h" -#import "FBSDKSettings.h" - -#define kNewline @"\r\n" - -@implementation FBSDKGraphRequestBody -{ - NSMutableData *_data; - NSMutableDictionary *_json; - NSString *_stringBoundary; -} - -- (instancetype)init -{ - if ((self = [super init])) { - _stringBoundary = [FBSDKCrypto randomString:32]; - _data = [[NSMutableData alloc] init]; - _json = [NSMutableDictionary dictionary]; - } - - return self; -} - -- (NSString *)mimeContentType -{ - if (_json) { - return @"application/json"; - } else { - return [NSString stringWithFormat:@"multipart/form-data; boundary=%@", _stringBoundary]; - } -} - -- (void)appendUTF8:(NSString *)utf8 -{ - if (!_data.length) { - NSString *headerUTF8 = [NSString stringWithFormat:@"--%@%@", _stringBoundary, kNewline]; - NSData *headerData = [headerUTF8 dataUsingEncoding:NSUTF8StringEncoding]; - [_data appendData:headerData]; - } - NSData *data = [utf8 dataUsingEncoding:NSUTF8StringEncoding]; - [_data appendData:data]; -} - -- (void)appendWithKey:(NSString *)key - formValue:(NSString *)value - logger:(FBSDKLogger *)logger -{ - [self _appendWithKey:key filename:nil contentType:nil contentBlock:^{ - [self appendUTF8:value]; - }]; - if (key && value) { - _json[key] = value; - } - [logger appendFormat:@"\n %@:\t%@", key, (NSString *)value]; -} - -- (void)appendWithKey:(NSString *)key - imageValue:(UIImage *)image - logger:(FBSDKLogger *)logger -{ - NSData *data = UIImageJPEGRepresentation(image, [FBSDKSettings JPEGCompressionQuality]); - [self _appendWithKey:key filename:key contentType:@"image/jpeg" contentBlock:^{ - [self->_data appendData:data]; - }]; - _json = nil; - [logger appendFormat:@"\n %@:\t", key, (unsigned long)(data.length / 1024)]; -} - -- (void)appendWithKey:(NSString *)key - dataValue:(NSData *)data - logger:(FBSDKLogger *)logger -{ - [self _appendWithKey:key filename:key contentType:@"content/unknown" contentBlock:^{ - [self->_data appendData:data]; - }]; - _json = nil; - [logger appendFormat:@"\n %@:\t", key, (unsigned long)(data.length / 1024)]; -} - -- (void)appendWithKey:(NSString *)key - dataAttachmentValue:(FBSDKGraphRequestDataAttachment *)dataAttachment - logger:(FBSDKLogger *)logger -{ - NSString *filename = dataAttachment.filename ?: key; - NSString *contentType = dataAttachment.contentType ?: @"content/unknown"; - NSData *data = dataAttachment.data; - [self _appendWithKey:key filename:filename contentType:contentType contentBlock:^{ - [self->_data appendData:data]; - }]; - _json = nil; - [logger appendFormat:@"\n %@:\t", key, (unsigned long)(data.length / 1024)]; -} - -- (NSData *)data -{ - if (_json) { - NSData *jsonData; - if (_json.allKeys.count > 0) { - jsonData = [NSJSONSerialization dataWithJSONObject:_json options:0 error:nil]; - } else { - jsonData = [NSData data]; - } - - return jsonData; - } - return [_data copy]; -} - -- (void)_appendWithKey:(NSString *)key - filename:(NSString *)filename - contentType:(NSString *)contentType - contentBlock:(FBSDKCodeBlock)contentBlock -{ - NSMutableArray *disposition = [[NSMutableArray alloc] init]; - [disposition addObject:@"Content-Disposition: form-data"]; - if (key) { - [disposition addObject:[[NSString alloc] initWithFormat:@"name=\"%@\"", key]]; - } - if (filename) { - [disposition addObject:[[NSString alloc] initWithFormat:@"filename=\"%@\"", filename]]; - } - [self appendUTF8:[[NSString alloc] initWithFormat:@"%@%@", [disposition componentsJoinedByString:@"; "], kNewline]]; - if (contentType) { - [self appendUTF8:[[NSString alloc] initWithFormat:@"Content-Type: %@%@", contentType, kNewline]]; - } - [self appendUTF8:kNewline]; - if (contentBlock != NULL) { - contentBlock(); - } - [self appendUTF8:[[NSString alloc] initWithFormat:@"%@--%@%@", kNewline, _stringBoundary, kNewline]]; -} - -- (NSData *)compressedData -{ - if (!self.data.length || ![[self mimeContentType] isEqualToString:@"application/json"]) { - return nil; - } - - return [FBSDKBasicUtility gzip:self.data]; -} - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestConnection+Internal.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestConnection+Internal.h deleted file mode 100644 index 56d32239f8..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestConnection+Internal.h +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -@class FBSDKURLSession; - -#if SWIFT_PACKAGE -#import "FBSDKGraphRequestConnection.h" -#else -#import -#endif - -@interface FBSDKGraphRequestConnection(Internal) - -@property (nonatomic, readonly) NSMutableArray *requests; -@property (nonatomic, strong) FBSDKURLSession *session; - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestMetadata.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestMetadata.h deleted file mode 100644 index 32b8040b74..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestMetadata.h +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -#if SWIFT_PACKAGE -#import "FBSDKGraphRequestConnection.h" -#else -#import -#endif - -// Internal only class to facilitate FBSDKGraphRequest processing, specifically -// associating FBSDKGraphRequest and FBSDKGraphRequestBlock instances and necessary -// data for retry processing. -NS_SWIFT_NAME(GraphRequestMetadata) -@interface FBSDKGraphRequestMetadata : NSObject - -@property (nonatomic, retain) FBSDKGraphRequest *request; -@property (nonatomic, copy) FBSDKGraphRequestBlock completionHandler; -@property (nonatomic, copy) NSDictionary *batchParameters; - -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; - -- (instancetype)initWithRequest:(FBSDKGraphRequest *)request - completionHandler:(FBSDKGraphRequestBlock)handler - batchParameters:(NSDictionary *)batchParameters -NS_DESIGNATED_INITIALIZER; - -- (void)invokeCompletionHandlerForConnection:(FBSDKGraphRequestConnection *)connection - withResults:(id)results - error:(NSError *)error; -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestMetadata.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestMetadata.m deleted file mode 100644 index 2f09f8cd23..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestMetadata.m +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKGraphRequestMetadata.h" - -#import "FBSDKGraphRequest.h" - -@implementation FBSDKGraphRequestMetadata - -- (instancetype)initWithRequest:(FBSDKGraphRequest *)request - completionHandler:(FBSDKGraphRequestBlock)handler - batchParameters:(NSDictionary *)batchParameters { - - if ((self = [super init])) { - _request = request; - _batchParameters = [batchParameters copy]; - _completionHandler = [handler copy]; - } - return self; -} - -- (void)invokeCompletionHandlerForConnection:(FBSDKGraphRequestConnection *)connection - withResults:(id)results - error:(NSError *)error { - if (self.completionHandler) { - self.completionHandler(connection, results, error); - } -} - -- (NSString *)description -{ - return [NSString stringWithFormat:@"<%@: %p, batchParameters: %@, completionHandler: %@, request: %@>", - NSStringFromClass([self class]), - self, - self.batchParameters, - self.completionHandler, - self.request.description]; -} - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestPiggybackManager.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestPiggybackManager.h deleted file mode 100644 index 6e56cee5d3..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestPiggybackManager.h +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKCoreKit+Internal.h" - -NS_SWIFT_NAME(GraphRequestPiggybackManager) -@interface FBSDKGraphRequestPiggybackManager : NSObject - -+ (void)addPiggybackRequests:(FBSDKGraphRequestConnection *)connection; - -+ (void)addRefreshPiggyback:(FBSDKGraphRequestConnection *)connection permissionHandler:(FBSDKGraphRequestBlock)permissionHandler; - -+ (void)addRefreshPiggybackIfStale:(FBSDKGraphRequestConnection *)connection; - -+ (void)addServerConfigurationPiggyback:(FBSDKGraphRequestConnection *)connection; -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestPiggybackManager.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestPiggybackManager.m deleted file mode 100644 index 8794fa4c3f..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestPiggybackManager.m +++ /dev/null @@ -1,156 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKGraphRequestPiggybackManager.h" - -#import "FBSDKCoreKit+Internal.h" - -static int const FBSDKTokenRefreshThresholdSeconds = 24 * 60 * 60; // day -static int const FBSDKTokenRefreshRetrySeconds = 60 * 60; // hour - -@implementation FBSDKGraphRequestPiggybackManager - -+ (void)addPiggybackRequests:(FBSDKGraphRequestConnection *)connection -{ - if ([FBSDKSettings appID].length > 0) { - BOOL safeForPiggyback = YES; - for (FBSDKGraphRequestMetadata *metadata in connection.requests) { - if (![metadata.request.version isEqualToString:[FBSDKSettings graphAPIVersion]] || - metadata.request.hasAttachments) { - safeForPiggyback = NO; - break; - } - } - if (safeForPiggyback) { - [[self class] addRefreshPiggybackIfStale:connection]; - [[self class] addServerConfigurationPiggyback:connection]; - } - } -} - -+ (void)addRefreshPiggyback:(FBSDKGraphRequestConnection *)connection permissionHandler:(FBSDKGraphRequestBlock)permissionHandler -{ - FBSDKAccessToken *expectedToken = [FBSDKAccessToken currentAccessToken]; - __block NSMutableSet *permissions = nil; - __block NSMutableSet *declinedPermissions = nil; - __block NSMutableSet *expiredPermissions = nil; - __block NSString *tokenString = nil; - __block NSNumber *expirationDateNumber = nil; - __block NSNumber *dataAccessExpirationDateNumber = nil; - __block int expectingCallbacksCount = 2; - void (^expectingCallbackComplete)(void) = ^{ - if (--expectingCallbacksCount == 0) { - FBSDKAccessToken *currentToken = [FBSDKAccessToken currentAccessToken]; - NSDate *expirationDate = currentToken.expirationDate; - if (expirationDateNumber != nil) { - expirationDate = (expirationDateNumber.doubleValue > 0 ? - [NSDate dateWithTimeIntervalSince1970:expirationDateNumber.doubleValue] : - [NSDate distantFuture]); - } - NSDate *dataExpirationDate = currentToken.dataAccessExpirationDate; - if (dataAccessExpirationDateNumber != nil) { - dataExpirationDate = (dataAccessExpirationDateNumber.doubleValue > 0 ? - [NSDate dateWithTimeIntervalSince1970:dataAccessExpirationDateNumber.doubleValue] : - [NSDate distantFuture]); - } - FBSDKAccessToken *refreshedToken = [[FBSDKAccessToken alloc] initWithTokenString:tokenString ?: currentToken.tokenString - permissions:(permissions ?: currentToken.permissions).allObjects - declinedPermissions:(declinedPermissions ?: currentToken.declinedPermissions).allObjects - expiredPermissions:(expiredPermissions ?: currentToken.expiredPermissions).allObjects - appID:currentToken.appID - userID:currentToken.userID - expirationDate:expirationDate - refreshDate:[NSDate date] - dataAccessExpirationDate:dataExpirationDate - graphDomain:currentToken.graphDomain]; - if (expectedToken == currentToken) { - [FBSDKAccessToken setCurrentAccessToken:refreshedToken]; - } - } - }; - FBSDKGraphRequest *extendRequest = [[FBSDKGraphRequest alloc] initWithGraphPath:@"oauth/access_token" - parameters:@{@"grant_type" : @"fb_extend_sso_token", - @"fields": @"" - } - flags:FBSDKGraphRequestFlagDisableErrorRecovery]; - - [connection addRequest:extendRequest completionHandler:^(FBSDKGraphRequestConnection *innerConnection, id result, NSError *error) { - tokenString = result[@"access_token"]; - expirationDateNumber = result[@"expires_at"]; - dataAccessExpirationDateNumber = result[@"data_access_expiration_time"]; - expectingCallbackComplete(); - }]; - FBSDKGraphRequest *permissionsRequest = [[FBSDKGraphRequest alloc] initWithGraphPath:@"me/permissions" - parameters:@{@"fields": @""} - flags:FBSDKGraphRequestFlagDisableErrorRecovery]; - - [connection addRequest:permissionsRequest completionHandler:^(FBSDKGraphRequestConnection *innerConnection, id result, NSError *error) { - if (!error) { - permissions = [NSMutableSet set]; - declinedPermissions = [NSMutableSet set]; - expiredPermissions = [NSMutableSet set]; - - [FBSDKInternalUtility extractPermissionsFromResponse:result - grantedPermissions:permissions - declinedPermissions:declinedPermissions - expiredPermissions:expiredPermissions]; - } - expectingCallbackComplete(); - if (permissionHandler) { - permissionHandler(innerConnection, result, error); - } - }]; -} - -+ (void)addRefreshPiggybackIfStale:(FBSDKGraphRequestConnection *)connection -{ - // don't piggy back more than once an hour as a cheap way of - // retrying in cases of errors and preventing duplicate refreshes. - // obviously this is not foolproof but is simple and sufficient. - static NSDate *lastRefreshTry; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - lastRefreshTry = [NSDate distantPast]; - }); - - NSDate *now = [NSDate date]; - NSDate *tokenRefreshDate = [FBSDKAccessToken currentAccessToken].refreshDate; - if (tokenRefreshDate && - [now timeIntervalSinceDate:lastRefreshTry] > FBSDKTokenRefreshRetrySeconds && - [now timeIntervalSinceDate:tokenRefreshDate] > FBSDKTokenRefreshThresholdSeconds) { - [self addRefreshPiggyback:connection permissionHandler:NULL]; - lastRefreshTry = [NSDate date]; - } -} - -+ (void)addServerConfigurationPiggyback:(FBSDKGraphRequestConnection *)connection -{ - if (![FBSDKServerConfigurationManager cachedServerConfiguration].isDefaults - && [[NSDate date] timeIntervalSinceDate:[FBSDKServerConfigurationManager cachedServerConfiguration].timestamp] - < FBSDK_SERVER_CONFIGURATION_MANAGER_CACHE_TIMEOUT) { - return; - } - NSString *appID = [FBSDKSettings appID]; - FBSDKGraphRequest *serverConfigurationRequest = [FBSDKServerConfigurationManager requestToLoadServerConfiguration:appID]; - [connection addRequest:serverConfigurationRequest - completionHandler:^(FBSDKGraphRequestConnection *conn, id result, NSError *error) { - [FBSDKServerConfigurationManager processLoadRequestResponse:result error:error appID:appID]; - }]; -} - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKDialogConfiguration.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKDialogConfiguration.h deleted file mode 100644 index 37ad8861a5..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKDialogConfiguration.h +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -#if SWIFT_PACKAGE -#import "FBSDKCopying.h" -#else -#import -#endif - -NS_SWIFT_NAME(DialogConfiguration) -@interface FBSDKDialogConfiguration : NSObject - -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; - -- (instancetype)initWithName:(NSString *)name - URL:(NSURL *)URL - appVersions:(NSArray *)appVersions -NS_DESIGNATED_INITIALIZER; - -@property (nonatomic, copy, readonly) NSArray *appVersions; -@property (nonatomic, copy, readonly) NSString *name; -@property (nonatomic, copy, readonly) NSURL *URL; - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKDialogConfiguration.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKDialogConfiguration.m deleted file mode 100644 index 9010fb99eb..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKDialogConfiguration.m +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKDialogConfiguration.h" - -#define FBSDK_DIALOG_CONFIGURATION_APP_VERSIONS_KEY @"appVersions" -#define FBSDK_DIALOG_CONFIGURATION_NAME_KEY @"name" -#define FBSDK_DIALOG_CONFIGURATION_URL_KEY @"url" - -@implementation FBSDKDialogConfiguration - -#pragma mark - Object Lifecycle - -- (instancetype)initWithName:(NSString *)name URL:(NSURL *)URL appVersions:(NSArray *)appVersions -{ - if ((self = [super init])) { - _name = [name copy]; - _URL = [URL copy]; - _appVersions = [appVersions copy]; - } - return self; -} - -#pragma mark NSCoding - -+ (BOOL)supportsSecureCoding -{ - return YES; -} - -- (id)initWithCoder:(NSCoder *)decoder -{ - NSString *name = [decoder decodeObjectOfClass:[NSString class] forKey:FBSDK_DIALOG_CONFIGURATION_NAME_KEY]; - NSURL *URL = [decoder decodeObjectOfClass:[NSURL class] forKey:FBSDK_DIALOG_CONFIGURATION_URL_KEY]; - NSSet *appVersionsClasses = [NSSet setWithObjects:[NSArray class], [NSNumber class], nil]; - NSArray *appVersions = [decoder decodeObjectOfClasses:appVersionsClasses - forKey:FBSDK_DIALOG_CONFIGURATION_APP_VERSIONS_KEY]; - return [self initWithName:name URL:URL appVersions:appVersions]; -} - -- (void)encodeWithCoder:(NSCoder *)encoder -{ - [encoder encodeObject:_appVersions forKey:FBSDK_DIALOG_CONFIGURATION_APP_VERSIONS_KEY]; - [encoder encodeObject:_name forKey:FBSDK_DIALOG_CONFIGURATION_NAME_KEY]; - [encoder encodeObject:_URL forKey:FBSDK_DIALOG_CONFIGURATION_URL_KEY]; -} - -#pragma mark - NSCopying - -- (id)copyWithZone:(NSZone *)zone -{ - return self; -} - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorConfiguration.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorConfiguration.h deleted file mode 100644 index af3524c370..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorConfiguration.h +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKErrorRecoveryConfiguration.h" - -@class FBSDKGraphRequest; - -// maps codes and subcodes pairs to FBSDKErrorRecoveryConfiguration instances. -NS_SWIFT_NAME(ErrorConfiguration) -@interface FBSDKErrorConfiguration : NSObject - -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; - -// initialize from optional dictionary of existing configurations. If not supplied a fallback will be created. -- (instancetype)initWithDictionary:(NSDictionary *)dictionary NS_DESIGNATED_INITIALIZER; - -// parses the array (supplied from app settings endpoint) -- (void)parseArray:(NSArray *)array; - -// NSString "code" instances support "*" wildcard semantics (nil is treated as "*" also) -// 'request' is optional, typically for identifying special graph request semantics (e.g., no recovery for client token) -- (FBSDKErrorRecoveryConfiguration *)recoveryConfigurationForCode:(NSString *)code subcode:(NSString *)subcode request:(FBSDKGraphRequest *)request; - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorConfiguration.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorConfiguration.m deleted file mode 100644 index cb94dd809d..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorConfiguration.m +++ /dev/null @@ -1,172 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKErrorConfiguration.h" - -#import "FBSDKCoreKit+Internal.h" - -#import "FBSDKErrorRecoveryConfiguration.h" - -static NSString *const kErrorCategoryOther = @"other"; -static NSString *const kErrorCategoryTransient = @"transient"; -static NSString *const kErrorCategoryLogin = @"login"; - -#define FBSDKERRORCONFIGURATION_DICTIONARY_KEY @"configurationDictionary" - -@implementation FBSDKErrorConfiguration -{ - NSMutableDictionary *_configurationDictionary; -} - -- (instancetype)initWithDictionary:(NSDictionary *)dictionary -{ - if ((self = [super init])) { - if (dictionary) { - _configurationDictionary = [NSMutableDictionary dictionaryWithDictionary:dictionary]; - } else { - _configurationDictionary = [NSMutableDictionary dictionary]; - NSString *localizedOK = - NSLocalizedStringWithDefaultValue(@"ErrorRecovery.OK", @"FacebookSDK", [FBSDKInternalUtility bundleForStrings], - @"OK", - @"The title of the label to start attempting error recovery"); - NSString *localizedCancel = - NSLocalizedStringWithDefaultValue(@"ErrorRecovery.Cancel", @"FacebookSDK", [FBSDKInternalUtility bundleForStrings], - @"Cancel", - @"The title of the label to decline attempting error recovery"); - NSString *localizedTransientSuggestion = - NSLocalizedStringWithDefaultValue(@"ErrorRecovery.Transient.Suggestion", @"FacebookSDK", [FBSDKInternalUtility bundleForStrings], - @"The server is temporarily busy, please try again.", - @"The fallback message to display to retry transient errors"); - NSString *localizedLoginRecoverableSuggestion = - NSLocalizedStringWithDefaultValue(@"ErrorRecovery.Login.Suggestion", @"FacebookSDK", [FBSDKInternalUtility bundleForStrings], - @"Please log into this app again to reconnect your Facebook account.", - @"The fallback message to display to recover invalidated tokens"); - NSArray *fallbackArray = @[ - @{ @"name" : @"login", - @"items" : @[ @{ @"code" : @102 }, - @{ @"code" : @190 } ], - @"recovery_message" : localizedLoginRecoverableSuggestion, - @"recovery_options" : @[ localizedOK, localizedCancel] - }, - @{ @"name" : @"transient", - @"items" : @[ @{ @"code" : @1 }, - @{ @"code" : @2 }, - @{ @"code" : @4 }, - @{ @"code" : @9 }, - @{ @"code" : @17 }, - @{ @"code" : @341 } ], - @"recovery_message" : localizedTransientSuggestion, - @"recovery_options" : @[ localizedOK] - }, - ]; - [self parseArray:fallbackArray]; - } - } - return self; -} - -- (FBSDKErrorRecoveryConfiguration *)recoveryConfigurationForCode:(NSString *)code subcode:(NSString *)subcode request:(FBSDKGraphRequest *)request -{ - code = code ?: @"*"; - subcode = subcode ?: @"*"; - FBSDKErrorRecoveryConfiguration *configuration = (_configurationDictionary[code][subcode] ?: - _configurationDictionary[code][@"*"] ?: - _configurationDictionary[@"*"][subcode] ?: - _configurationDictionary[@"*"][@"*"]); - if (configuration.errorCategory == FBSDKGraphRequestErrorRecoverable && - [FBSDKSettings clientToken] && - [request.parameters[@"access_token"] hasSuffix:[FBSDKSettings clientToken]]) { - // do not attempt to recovery client tokens. - return nil; - } - return configuration; -} - -- (void)parseArray:(NSArray *)array -{ - for (NSDictionary *dictionary in array) { - [dictionary enumerateKeysAndObjectsUsingBlock:^(NSString *key, id obj, BOOL *stop) { - FBSDKGraphRequestError category; - NSString *action = dictionary[@"name"]; - if ([action isEqualToString:kErrorCategoryOther]) { - category = FBSDKGraphRequestErrorOther; - } else if ([action isEqualToString:kErrorCategoryTransient]) { - category = FBSDKGraphRequestErrorTransient; - } else { - category = FBSDKGraphRequestErrorRecoverable; - } - NSString *suggestion = dictionary[@"recovery_message"]; - NSArray *options = dictionary[@"recovery_options"]; - for (NSDictionary *codeSubcodesDictionary in dictionary[@"items"]) { - NSString *code = [codeSubcodesDictionary[@"code"] stringValue]; - - NSMutableDictionary *currentSubcodes = self->_configurationDictionary[code]; - if (!currentSubcodes) { - currentSubcodes = [NSMutableDictionary dictionary]; - self->_configurationDictionary[code] = currentSubcodes; - } - - NSArray *subcodes = codeSubcodesDictionary[@"subcodes"]; - if (subcodes.count > 0) { - for (NSNumber *subcodeNumber in subcodes) { - currentSubcodes[subcodeNumber.stringValue] = [[FBSDKErrorRecoveryConfiguration alloc] - initWithRecoveryDescription:suggestion - optionDescriptions:options - category:category - recoveryActionName:action]; - } - } else { - currentSubcodes[@"*"] = [[FBSDKErrorRecoveryConfiguration alloc] - initWithRecoveryDescription:suggestion - optionDescriptions:options - category:category - recoveryActionName:action]; - } - } - }]; - } -} - -#pragma mark - NSSecureCoding - -+ (BOOL)supportsSecureCoding -{ - return YES; -} - -- (id)initWithCoder:(NSCoder *)decoder -{ - NSSet *classes = [[NSSet alloc] initWithObjects:[NSDictionary class], [FBSDKErrorRecoveryConfiguration class], nil]; - NSDictionary *configurationDictionary = [decoder decodeObjectOfClasses:classes - forKey:FBSDKERRORCONFIGURATION_DICTIONARY_KEY]; - return [self initWithDictionary:configurationDictionary]; -} - -- (void)encodeWithCoder:(NSCoder *)encoder -{ - [encoder encodeObject:_configurationDictionary forKey:FBSDKERRORCONFIGURATION_DICTIONARY_KEY]; -} - -#pragma mark - NSCopying - -- (id)copyWithZone:(NSZone *)zone -{ - return self; -} - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorRecoveryConfiguration.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorRecoveryConfiguration.h deleted file mode 100644 index 6cb8e43055..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorRecoveryConfiguration.h +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -#if SWIFT_PACKAGE -#import "FBSDKConstants.h" -#else -#import -#endif - -//immutable -NS_SWIFT_NAME(ErrorRecoveryConfiguration) -@interface FBSDKErrorRecoveryConfiguration : NSObject - -@property (nonatomic, readonly) NSString *localizedRecoveryDescription; -@property (nonatomic, readonly) NSArray *localizedRecoveryOptionDescriptions; -@property (nonatomic, readonly) FBSDKGraphRequestError errorCategory; -@property (nonatomic, readonly) NSString *recoveryActionName; - -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; - -- (instancetype)initWithRecoveryDescription:(NSString *)description - optionDescriptions:(NSArray *)optionDescriptions - category:(FBSDKGraphRequestError)category - recoveryActionName:(NSString *)recoveryActionName NS_DESIGNATED_INITIALIZER; -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorRecoveryConfiguration.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorRecoveryConfiguration.m deleted file mode 100644 index 97eb061033..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorRecoveryConfiguration.m +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKErrorRecoveryConfiguration.h" - -#define FBSDK_ERROR_RECOVERY_CONFIGURATION_DESCRIPTION_KEY @"description" -#define FBSDK_ERROR_RECOVERY_CONFIGURATION_OPTIONS_KEY @"options" -#define FBSDK_ERROR_RECOVERY_CONFIGURATION_CATEGORY_KEY @"category" -#define FBSDK_ERROR_RECOVERY_CONFIGURATION_ACTION_KEY @"action" - -@implementation FBSDKErrorRecoveryConfiguration - -- (instancetype)initWithRecoveryDescription:(NSString *)description - optionDescriptions:(NSArray *)optionDescriptions - category:(FBSDKGraphRequestError)category - recoveryActionName:(NSString *)recoveryActionName { - if ((self = [super init])) { - _localizedRecoveryDescription = [description copy]; - _localizedRecoveryOptionDescriptions = [optionDescriptions copy]; - _errorCategory = category; - _recoveryActionName = [recoveryActionName copy]; - } - return self; -} - -#pragma mark - NSSecureCoding - -+ (BOOL)supportsSecureCoding -{ - return YES; -} - -- (id)initWithCoder:(NSCoder *)decoder -{ - NSString *description = [decoder decodeObjectOfClass:[NSString class] forKey:FBSDK_ERROR_RECOVERY_CONFIGURATION_DESCRIPTION_KEY]; - NSArray *options = [decoder decodeObjectOfClass:[NSArray class] forKey:FBSDK_ERROR_RECOVERY_CONFIGURATION_OPTIONS_KEY]; - NSNumber *category = [decoder decodeObjectOfClass:[NSNumber class] forKey:FBSDK_ERROR_RECOVERY_CONFIGURATION_CATEGORY_KEY]; - NSString *action = [decoder decodeObjectOfClass:[NSString class] forKey:FBSDK_ERROR_RECOVERY_CONFIGURATION_ACTION_KEY]; - - return [self initWithRecoveryDescription:description - optionDescriptions:options - category:category.unsignedIntegerValue - recoveryActionName:action]; -} - -- (void)encodeWithCoder:(NSCoder *)encoder -{ - [encoder encodeObject:_localizedRecoveryDescription forKey:FBSDK_ERROR_RECOVERY_CONFIGURATION_DESCRIPTION_KEY]; - [encoder encodeObject:_localizedRecoveryOptionDescriptions forKey:FBSDK_ERROR_RECOVERY_CONFIGURATION_OPTIONS_KEY]; - [encoder encodeObject:@(_errorCategory) forKey:FBSDK_ERROR_RECOVERY_CONFIGURATION_CATEGORY_KEY]; - [encoder encodeObject:_recoveryActionName forKey:FBSDK_ERROR_RECOVERY_CONFIGURATION_ACTION_KEY]; -} - -#pragma mark - NSCopying - -- (id)copyWithZone:(NSZone *)zone -{ - //immutable - return self; -} - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKGateKeeperManager.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKGateKeeperManager.h deleted file mode 100644 index fa8a5b6593..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKGateKeeperManager.h +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -#define FBSDK_GATEKEEPER_MANAGER_CACHE_TIMEOUT (60 * 60) - -NS_ASSUME_NONNULL_BEGIN - -/// typedef for FBSDKAppEventUserDataType -typedef NSString *const FBSDKGateKeeperKey NS_TYPED_EXTENSIBLE_ENUM NS_SWIFT_NAME(GateKeeperManager.GateKeeperKey); -typedef void (^FBSDKGKManagerBlock)(NSError * _Nullable error) -NS_SWIFT_NAME(GKManagerBlock); - -@interface FBSDKGateKeeperManager : NSObject -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; - -/** - Returns the locally cached configuration. - */ -+ (BOOL)boolForKey:(NSString *)key defaultValue:(BOOL)defaultValue; - -/** - Load the gate keeper configurations from server - */ -+ (void)loadGateKeepers:(nullable FBSDKGKManagerBlock)completionBlock; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKGateKeeperManager.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKGateKeeperManager.m deleted file mode 100644 index dede1ae6bd..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKGateKeeperManager.m +++ /dev/null @@ -1,200 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - - -#import "FBSDKGateKeeperManager.h" - -#import - -#import - -#import "FBSDKAppEventsUtility.h" -#import "FBSDKGraphRequest+Internal.h" -#import "FBSDKGraphRequest.h" -#import "FBSDKInternalUtility.h" -#import "FBSDKSettings.h" -#import "FBSDKTypeUtility.h" - -#define FBSDK_GATEKEEPERS_USER_DEFAULTS_KEY @"com.facebook.sdk:GateKeepers%@" - -#define FBSDK_GATEKEEPER_APP_GATEKEEPER_EDGE @"mobile_sdk_gk" -#define FBSDK_GATEKEEPER_APP_GATEKEEPER_FIELDS @"gatekeepers" - -@implementation FBSDKGateKeeperManager - -static NSDictionary *_gateKeepers; -static NSMutableArray *_completionBlocks; -static const NSTimeInterval kTimeout = 4.0; -static NSDate *_timestamp; -static BOOL _loadingGateKeepers; -static BOOL _requeryFinishedForAppStart; - -#pragma mark - Public Class Methods -+ (void)initialize -{ - if (self == [FBSDKGateKeeperManager class]) { - _completionBlocks = [NSMutableArray array]; - } -} - -+ (BOOL)boolForKey:(NSString *)key defaultValue:(BOOL)defaultValue -{ - [self loadGateKeepers:nil]; - - return _gateKeepers[key] ? [_gateKeepers[key] boolValue] : defaultValue; -} - -+ (void)loadGateKeepers:(FBSDKGKManagerBlock)completionBlock -{ - @synchronized(self) { - NSString *appID = [FBSDKSettings appID]; - if (!appID) { - _gateKeepers = nil; - if (completionBlock != NULL) { - completionBlock(nil); - } - return; - } - - if (!_gateKeepers) { - // load the defaults - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - NSString *defaultKey = [NSString stringWithFormat:FBSDK_GATEKEEPERS_USER_DEFAULTS_KEY, - appID]; - NSData *data = [defaults objectForKey:defaultKey]; - if ([data isKindOfClass:[NSData class]]) { - NSDictionary *gatekeeper = [NSKeyedUnarchiver unarchiveObjectWithData:data]; - if (gatekeeper != nil && [gatekeeper isKindOfClass:[NSDictionary class]]) { - _gateKeepers = gatekeeper; - } - } - } - - // Query the server when the requery is not finished for app start or the timestamp is not valid - if ([self _gateKeeperIsValid]) { - if (completionBlock) { - completionBlock(nil); - } - } else { - [FBSDKBasicUtility array:_completionBlocks addObject:completionBlock]; - if (!_loadingGateKeepers) { - _loadingGateKeepers = YES; - FBSDKGraphRequest *request = [[self class] requestToLoadGateKeepers]; - - // start request with specified timeout instead of the default 180s - FBSDKGraphRequestConnection *requestConnection = [[FBSDKGraphRequestConnection alloc] init]; - requestConnection.timeout = kTimeout; - [requestConnection addRequest:request completionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { - _requeryFinishedForAppStart = YES; - [self processLoadRequestResponse:result error:error]; - }]; - [requestConnection start]; - } - } - } -} - -#pragma mark - Internal Class Methods - -+ (FBSDKGraphRequest *)requestToLoadGateKeepers -{ - NSString *sdkVersion = [FBSDKSettings sdkVersion]; - - NSDictionary *parameters = @{ @"platform": @"ios" , - @"sdk_version": sdkVersion, - @"fields": FBSDK_GATEKEEPER_APP_GATEKEEPER_FIELDS}; - - FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:[NSString stringWithFormat:@"%@/%@", - [FBSDKSettings appID], FBSDK_GATEKEEPER_APP_GATEKEEPER_EDGE] - parameters:parameters - tokenString:nil - HTTPMethod:nil - flags:FBSDKGraphRequestFlagSkipClientToken | FBSDKGraphRequestFlagDisableErrorRecovery]; - return request; -} - -#pragma mark - Helper Class Methods - -+ (void)processLoadRequestResponse:(id)result error:(NSError *)error -{ - @synchronized(self) { - _loadingGateKeepers = NO; - - if (!error) { - // Update the timestamp only when there is no error - _timestamp = [NSDate date]; - - NSMutableDictionary *gateKeeper = [_gateKeepers mutableCopy]; - if (!gateKeeper) { - gateKeeper = [[NSMutableDictionary alloc] init]; - } - NSDictionary *resultDictionary = [FBSDKTypeUtility dictionaryValue:result]; - NSDictionary *fetchedData = [FBSDKTypeUtility dictionaryValue:[resultDictionary[@"data"] firstObject]]; - NSArray *gateKeeperList = fetchedData != nil ? [FBSDKTypeUtility arrayValue:fetchedData[FBSDK_GATEKEEPER_APP_GATEKEEPER_FIELDS]] : nil; - - if (gateKeeperList != nil) { - // updates gate keeper with fetched data - for (id gateKeeperEntry in gateKeeperList) { - NSDictionary *entry = [FBSDKTypeUtility dictionaryValue:gateKeeperEntry]; - NSString *key = [FBSDKTypeUtility stringValue:entry[@"key"]]; - id value = entry[@"value"]; - if (entry != nil && key != nil && value != nil) { - gateKeeper[key] = value; - } - } - _gateKeepers = [gateKeeper copy]; - } - - // update the cached copy in user defaults - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - NSString *defaultKey = [NSString stringWithFormat:FBSDK_GATEKEEPERS_USER_DEFAULTS_KEY, - [FBSDKSettings appID]]; - NSData *data = [NSKeyedArchiver archivedDataWithRootObject:gateKeeper]; - [defaults setObject:data forKey:defaultKey]; - } - - [self _didProcessGKFromNetwork:error]; - } -} - -+ (void)_didProcessGKFromNetwork:(NSError *)error -{ - NSArray *completionBlocks = [NSArray arrayWithArray:_completionBlocks]; - [_completionBlocks removeAllObjects]; - for (FBSDKGKManagerBlock completionBlock in completionBlocks) { - completionBlock(error); - } -} - -+ (BOOL)_gateKeeperTimestampIsValid:(NSDate *)timestamp -{ - if (timestamp == nil) { - return NO; - } - return ([[NSDate date] timeIntervalSinceDate:timestamp] < FBSDK_GATEKEEPER_MANAGER_CACHE_TIMEOUT); -} - -+ (BOOL)_gateKeeperIsValid -{ - if (_requeryFinishedForAppStart && (_timestamp && [self _gateKeeperTimestampIsValid:_timestamp])) { - return YES; - } - return NO; -} - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfiguration+Internal.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfiguration+Internal.h deleted file mode 100644 index 2e71d7be38..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfiguration+Internal.h +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -FOUNDATION_EXPORT NSString *const FBSDKDialogConfigurationNameDefault; -FOUNDATION_EXPORT NSString *const FBSDKDialogConfigurationNameSharing; - -FOUNDATION_EXPORT NSString *const FBSDKDialogConfigurationFeatureUseNativeFlow; -FOUNDATION_EXPORT NSString *const FBSDKDialogConfigurationFeatureUseSafariViewController; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfiguration.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfiguration.h deleted file mode 100644 index 73a5abd2bc..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfiguration.h +++ /dev/null @@ -1,112 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -#if SWIFT_PACKAGE -#import "FBSDKCopying.h" -#else -#import -#endif - -#import "FBSDKDialogConfiguration.h" -#import "FBSDKErrorConfiguration.h" - -// login kit -FOUNDATION_EXPORT NSString *const FBSDKDialogConfigurationNameLogin; - -// share kit -FOUNDATION_EXPORT NSString *const FBSDKDialogConfigurationNameAppInvite; -FOUNDATION_EXPORT NSString *const FBSDKDialogConfigurationNameGameRequest; -FOUNDATION_EXPORT NSString *const FBSDKDialogConfigurationNameGroup; -FOUNDATION_EXPORT NSString *const FBSDKDialogConfigurationNameLike; -FOUNDATION_EXPORT NSString *const FBSDKDialogConfigurationNameMessage; -FOUNDATION_EXPORT NSString *const FBSDKDialogConfigurationNameShare; - -FOUNDATION_EXPORT const NSInteger FBSDKServerConfigurationVersion; - -typedef NS_OPTIONS(NSUInteger, FBSDKServerConfigurationSmartLoginOptions) -{ - FBSDKServerConfigurationSmartLoginOptionsUnknown = 0, - FBSDKServerConfigurationSmartLoginOptionsEnabled = 1 << 0, - FBSDKServerConfigurationSmartLoginOptionsRequireConfirmation = 1 << 1, -}; - -NS_SWIFT_NAME(ServerConfiguration) -@interface FBSDKServerConfiguration : NSObject - -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; - -- (instancetype)initWithAppID:(NSString *)appID - appName:(NSString *)appName - loginTooltipEnabled:(BOOL)loginTooltipEnabled - loginTooltipText:(NSString *)loginTooltipText - defaultShareMode:(NSString *)defaultShareMode - advertisingIDEnabled:(BOOL)advertisingIDEnabled - implicitLoggingEnabled:(BOOL)implicitLoggingEnabled -implicitPurchaseLoggingEnabled:(BOOL)implicitPurchaseLoggingEnabled - codelessEventsEnabled:(BOOL)codelessEventsEnabled - uninstallTrackingEnabled:(BOOL)uninstallTrackingEnabled - dialogConfigurations:(NSDictionary *)dialogConfigurations - dialogFlows:(NSDictionary *)dialogFlows - timestamp:(NSDate *)timestamp - errorConfiguration:(FBSDKErrorConfiguration *)errorConfiguration - sessionTimeoutInterval:(NSTimeInterval) sessionTimeoutInterval - defaults:(BOOL)defaults - loggingToken:(NSString *)loggingToken - smartLoginOptions:(FBSDKServerConfigurationSmartLoginOptions)smartLoginOptions - smartLoginBookmarkIconURL:(NSURL *)smartLoginBookmarkIconURL - smartLoginMenuIconURL:(NSURL *)smartLoginMenuIconURL - updateMessage:(NSString *)updateMessage - eventBindings:(NSArray *)eventBindings - restrictiveParams:(NSDictionary *)restrictiveParams - AAMRules:(NSDictionary *)AAMRules - suggestedEventsSetting:(NSDictionary *)suggestedEventsSetting -NS_DESIGNATED_INITIALIZER; - -@property (nonatomic, assign, readonly, getter=isAdvertisingIDEnabled) BOOL advertisingIDEnabled; -@property (nonatomic, copy, readonly) NSString *appID; -@property (nonatomic, copy, readonly) NSString *appName; -@property (nonatomic, assign, readonly, getter=isDefaults) BOOL defaults; -@property (nonatomic, copy, readonly) NSString *defaultShareMode; -@property (nonatomic, strong, readonly) FBSDKErrorConfiguration *errorConfiguration; -@property (nonatomic, assign, readonly, getter=isImplicitLoggingSupported) BOOL implicitLoggingEnabled; -@property (nonatomic, assign, readonly, getter=isImplicitPurchaseLoggingSupported) BOOL implicitPurchaseLoggingEnabled; -@property (nonatomic, assign, readonly, getter=isCodelessEventsEnabled) BOOL codelessEventsEnabled; -@property (nonatomic, assign, readonly, getter=isLoginTooltipEnabled) BOOL loginTooltipEnabled; -@property (nonatomic, assign, readonly, getter=isUninstallTrackingEnabled) BOOL uninstallTrackingEnabled; -@property (nonatomic, copy, readonly) NSString *loginTooltipText; -@property (nonatomic, copy, readonly) NSDate *timestamp; -@property (nonatomic, assign) NSTimeInterval sessionTimoutInterval; -@property (nonatomic, copy, readonly) NSString *loggingToken; -@property (nonatomic, assign, readonly) FBSDKServerConfigurationSmartLoginOptions smartLoginOptions; -@property (nonatomic, copy, readonly) NSURL *smartLoginBookmarkIconURL; -@property (nonatomic, copy, readonly) NSURL *smartLoginMenuIconURL; -@property (nonatomic, copy, readonly) NSString *updateMessage; -@property (nonatomic, copy, readonly) NSArray *eventBindings; -@property (nonatomic, copy, readonly) NSDictionary *restrictiveParams; -@property (nonatomic, copy, readonly) NSDictionary *AAMRules; -@property (nonatomic, copy, readonly) NSDictionary *suggestedEventsSetting; -@property (nonatomic, readonly) NSInteger version; - -- (FBSDKDialogConfiguration *)dialogConfigurationForDialogName:(NSString *)dialogName; -- (BOOL)useNativeDialogForDialogName:(NSString *)dialogName; -- (BOOL)useSafariViewControllerForDialogName:(NSString *)dialogName; - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfiguration.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfiguration.m deleted file mode 100644 index 0130d4ebfc..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfiguration.m +++ /dev/null @@ -1,288 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKServerConfiguration.h" -#import "FBSDKServerConfiguration+Internal.h" - -#import "FBSDKInternalUtility.h" - -#define FBSDK_SERVER_CONFIGURATION_ADVERTISING_ID_ENABLED_KEY @"advertisingIDEnabled" -#define FBSDK_SERVER_CONFIGURATION_APP_ID_KEY @"appID" -#define FBSDK_SERVER_CONFIGURATION_APP_NAME_KEY @"appName" -#define FBSDK_SERVER_CONFIGURATION_DIALOG_CONFIGS_KEY @"dialogConfigs" -#define FBSDK_SERVER_CONFIGURATION_DIALOG_FLOWS_KEY @"dialogFlows" -#define FBSDK_SERVER_CONFIGURATION_ERROR_CONFIGS_KEY @"errorConfigs" -#define FBSDK_SERVER_CONFIGURATION_IMPLICIT_LOGGING_ENABLED_KEY @"implicitLoggingEnabled" -#define FBSDK_SERVER_CONFIGURATION_DEFAULT_SHARE_MODE_KEY @"defaultShareMode" -#define FBSDK_SERVER_CONFIGURATION_IMPLICIT_PURCHASE_LOGGING_ENABLED_KEY @"implicitPurchaseLoggingEnabled" -#define FBSDK_SERVER_CONFIGURATION_CODELESS_EVENTS_ENABLED_KEY @"codelessEventsEnabled" -#define FBSDK_SERVER_CONFIGURATION_LOGIN_TOOLTIP_ENABLED_KEY @"loginTooltipEnabled" -#define FBSDK_SERVER_CONFIGURATION_LOGIN_TOOLTIP_TEXT_KEY @"loginTooltipText" -#define FBSDK_SERVER_CONFIGURATION_TIMESTAMP_KEY @"timestamp" -#define FBSDK_SERVER_CONFIGURATION_SESSION_TIMEOUT_INTERVAL @"sessionTimeoutInterval" -#define FBSDK_SERVER_CONFIGURATION_LOGGING_TOKEN @"loggingToken" -#define FBSDK_SERVER_CONFIGURATION_SMART_LOGIN_OPTIONS_KEY @"smartLoginEnabled" -#define FBSDK_SERVER_CONFIGURATION_SMART_LOGIN_BOOKMARK_ICON_URL_KEY @"smarstLoginBookmarkIconURL" -#define FBSDK_SERVER_CONFIGURATION_SMART_LOGIN_MENU_ICON_URL_KEY @"smarstLoginBookmarkMenuURL" -#define FBSDK_SERVER_CONFIGURATION_UPDATE_MESSAGE_KEY @"SDKUpdateMessage" -#define FBSDK_SERVER_CONFIGURATION_EVENT_BINDINGS @"eventBindings" -#define FBSDK_SERVER_CONFIGURATION_RESTRICTIVE_PARAMS @"restrictiveParams" -#define FBSDK_SERVER_CONFIGURATION_AAM_RULES @"AAMRules" -#define FBSDK_SERVER_CONFIGURATION_SUGGESTED_EVENTS_SETTING @"suggestedEventsSetting" -#define FBSDK_SERVER_CONFIGURATION_VERSION_KEY @"version" -#define FBSDK_SERVER_CONFIGURATION_TRACK_UNINSTALL_ENABLED_KEY @"trackAppUninstallEnabled" - -#pragma mark - Dialog Names - -NSString *const FBSDKDialogConfigurationNameDefault = @"default"; - -NSString *const FBSDKDialogConfigurationNameLogin = @"login"; - -NSString *const FBSDKDialogConfigurationNameSharing = @"sharing"; - -NSString *const FBSDKDialogConfigurationNameAppInvite = @"app_invite"; -NSString *const FBSDKDialogConfigurationNameGameRequest = @"game_request"; -NSString *const FBSDKDialogConfigurationNameGroup = @"group"; -NSString *const FBSDKDialogConfigurationNameLike = @"like"; -NSString *const FBSDKDialogConfigurationNameMessage = @"message"; -NSString *const FBSDKDialogConfigurationNameShare = @"share"; - -NSString *const FBSDKDialogConfigurationFeatureUseNativeFlow = @"use_native_flow"; -NSString *const FBSDKDialogConfigurationFeatureUseSafariViewController = @"use_safari_vc"; - -// Increase this value when adding new fields and previous cached configurations should be -// treated as stale. -const NSInteger FBSDKServerConfigurationVersion = 2; - -@implementation FBSDKServerConfiguration -{ - NSDictionary *_dialogConfigurations; - NSDictionary *_dialogFlows; - NSInteger _version; -} - -#pragma mark - Object Lifecycle - -- (instancetype)initWithAppID:(NSString *)appID - appName:(NSString *)appName - loginTooltipEnabled:(BOOL)loginTooltipEnabled - loginTooltipText:(NSString *)loginTooltipText - defaultShareMode:(NSString*)defaultShareMode - advertisingIDEnabled:(BOOL)advertisingIDEnabled - implicitLoggingEnabled:(BOOL)implicitLoggingEnabled -implicitPurchaseLoggingEnabled:(BOOL)implicitPurchaseLoggingEnabled - codelessEventsEnabled:(BOOL)codelessEventsEnabled - uninstallTrackingEnabled:(BOOL)uninstallTrackingEnabled - dialogConfigurations:(NSDictionary *)dialogConfigurations - dialogFlows:(NSDictionary *)dialogFlows - timestamp:(NSDate *)timestamp - errorConfiguration:(FBSDKErrorConfiguration *)errorConfiguration - sessionTimeoutInterval:(NSTimeInterval) sessionTimeoutInterval - defaults:(BOOL)defaults - loggingToken:(NSString *)loggingToken - smartLoginOptions:(FBSDKServerConfigurationSmartLoginOptions)smartLoginOptions - smartLoginBookmarkIconURL:(NSURL *)smartLoginBookmarkIconURL - smartLoginMenuIconURL:(NSURL *)smartLoginMenuIconURL - updateMessage:(NSString *)updateMessage - eventBindings:(NSArray *)eventBindings - restrictiveParams:(NSDictionary *)restrictiveParams - AAMRules:(NSDictionary *)AAMRules - suggestedEventsSetting:(NSDictionary *)suggestedEventsSetting -{ - if ((self = [super init])) { - _appID = [appID copy]; - _appName = [appName copy]; - _loginTooltipEnabled = loginTooltipEnabled; - _loginTooltipText = [loginTooltipText copy]; - _defaultShareMode = defaultShareMode; - _advertisingIDEnabled = advertisingIDEnabled; - _implicitLoggingEnabled = implicitLoggingEnabled; - _implicitPurchaseLoggingEnabled = implicitPurchaseLoggingEnabled; - _codelessEventsEnabled = codelessEventsEnabled; - _uninstallTrackingEnabled = uninstallTrackingEnabled; - _dialogConfigurations = [dialogConfigurations copy]; - _dialogFlows = [dialogFlows copy]; - _timestamp = [timestamp copy]; - _errorConfiguration = [errorConfiguration copy]; - _sessionTimoutInterval = sessionTimeoutInterval; - _defaults = defaults; - _loggingToken = loggingToken; - _smartLoginOptions = smartLoginOptions; - _smartLoginMenuIconURL = [smartLoginMenuIconURL copy]; - _smartLoginBookmarkIconURL = [smartLoginBookmarkIconURL copy]; - _updateMessage = [updateMessage copy]; - _eventBindings = eventBindings; - _restrictiveParams = restrictiveParams; - _AAMRules = AAMRules; - _suggestedEventsSetting = suggestedEventsSetting; - _version = FBSDKServerConfigurationVersion; - } - return self; -} - -#pragma mark - Public Methods - -- (FBSDKDialogConfiguration *)dialogConfigurationForDialogName:(NSString *)dialogName -{ - return _dialogConfigurations[dialogName]; -} - -- (BOOL)useNativeDialogForDialogName:(NSString *)dialogName -{ - return [self _useFeatureWithKey:FBSDKDialogConfigurationFeatureUseNativeFlow dialogName:dialogName]; -} - -- (BOOL)useSafariViewControllerForDialogName:(NSString *)dialogName -{ - return [self _useFeatureWithKey:FBSDKDialogConfigurationFeatureUseSafariViewController dialogName:dialogName]; -} - -#pragma mark - Helper Methods - -- (BOOL)_useFeatureWithKey:(NSString *)key dialogName:(NSString *)dialogName -{ - if ([dialogName isEqualToString:FBSDKDialogConfigurationNameLogin]) { - return ((NSNumber *)(_dialogFlows[dialogName][key] ?: - _dialogFlows[FBSDKDialogConfigurationNameDefault][key])).boolValue; - } else { - return ((NSNumber *)(_dialogFlows[dialogName][key] ?: - _dialogFlows[FBSDKDialogConfigurationNameSharing][key] ?: - _dialogFlows[FBSDKDialogConfigurationNameDefault][key])).boolValue; - } -} - -#pragma mark - NSCoding - -+ (BOOL)supportsSecureCoding -{ - return YES; -} - -- (id)initWithCoder:(NSCoder *)decoder -{ - NSString *appID = [decoder decodeObjectOfClass:[NSString class] forKey:FBSDK_SERVER_CONFIGURATION_APP_ID_KEY]; - NSString *appName = [decoder decodeObjectOfClass:[NSString class] forKey:FBSDK_SERVER_CONFIGURATION_APP_NAME_KEY]; - BOOL loginTooltipEnabled = [decoder decodeBoolForKey:FBSDK_SERVER_CONFIGURATION_LOGIN_TOOLTIP_ENABLED_KEY]; - NSString *loginTooltipText = [decoder decodeObjectOfClass:[NSString class] - forKey:FBSDK_SERVER_CONFIGURATION_LOGIN_TOOLTIP_TEXT_KEY]; - NSString *defaultShareMode = [decoder decodeObjectOfClass:[NSString class] - forKey:FBSDK_SERVER_CONFIGURATION_DEFAULT_SHARE_MODE_KEY]; - BOOL advertisingIDEnabled = [decoder decodeBoolForKey:FBSDK_SERVER_CONFIGURATION_ADVERTISING_ID_ENABLED_KEY]; - BOOL implicitLoggingEnabled = [decoder decodeBoolForKey:FBSDK_SERVER_CONFIGURATION_IMPLICIT_LOGGING_ENABLED_KEY]; - BOOL implicitPurchaseLoggingEnabled = - [decoder decodeBoolForKey:FBSDK_SERVER_CONFIGURATION_IMPLICIT_PURCHASE_LOGGING_ENABLED_KEY]; - BOOL codelessEventsEnabled = - [decoder decodeBoolForKey:FBSDK_SERVER_CONFIGURATION_CODELESS_EVENTS_ENABLED_KEY]; - BOOL uninstallTrackingEnabled = - [decoder decodeBoolForKey:FBSDK_SERVER_CONFIGURATION_TRACK_UNINSTALL_ENABLED_KEY]; - FBSDKServerConfigurationSmartLoginOptions smartLoginOptions = [decoder decodeIntegerForKey:FBSDK_SERVER_CONFIGURATION_SMART_LOGIN_OPTIONS_KEY]; - NSDate *timestamp = [decoder decodeObjectOfClass:[NSDate class] forKey:FBSDK_SERVER_CONFIGURATION_TIMESTAMP_KEY]; - NSSet *dialogConfigurationsClasses = [[NSSet alloc] initWithObjects: - [NSDictionary class], - [FBSDKDialogConfiguration class], - nil]; - NSDictionary *dialogConfigurations = [decoder decodeObjectOfClasses:dialogConfigurationsClasses - forKey:FBSDK_SERVER_CONFIGURATION_DIALOG_CONFIGS_KEY]; - NSSet *dialogFlowsClasses = [[NSSet alloc] initWithObjects: - [NSDictionary class], - [NSString class], - [NSNumber class], - nil]; - NSDictionary *dialogFlows = [decoder decodeObjectOfClasses:dialogFlowsClasses - forKey:FBSDK_SERVER_CONFIGURATION_DIALOG_FLOWS_KEY]; - FBSDKErrorConfiguration *errorConfiguration = [decoder decodeObjectOfClass:[FBSDKErrorConfiguration class] forKey:FBSDK_SERVER_CONFIGURATION_ERROR_CONFIGS_KEY]; - NSTimeInterval sessionTimeoutInterval = [decoder decodeDoubleForKey:FBSDK_SERVER_CONFIGURATION_SESSION_TIMEOUT_INTERVAL]; - NSString *loggingToken = [decoder decodeObjectOfClass:[NSString class] forKey:FBSDK_SERVER_CONFIGURATION_LOGGING_TOKEN]; - NSURL *smartLoginBookmarkIconURL = [decoder decodeObjectOfClass:[NSURL class] forKey:FBSDK_SERVER_CONFIGURATION_SMART_LOGIN_BOOKMARK_ICON_URL_KEY]; - NSURL *smartLoginMenuIconURL = [decoder decodeObjectOfClass:[NSURL class] forKey:FBSDK_SERVER_CONFIGURATION_SMART_LOGIN_MENU_ICON_URL_KEY]; - NSString *updateMessage = [decoder decodeObjectOfClass:[NSString class] forKey:FBSDK_SERVER_CONFIGURATION_UPDATE_MESSAGE_KEY]; - NSArray *eventBindings = [decoder decodeObjectOfClass:[NSArray class] forKey:FBSDK_SERVER_CONFIGURATION_EVENT_BINDINGS]; - NSDictionary *restrictiveParams = [decoder decodeObjectOfClass:[NSDictionary class] forKey:FBSDK_SERVER_CONFIGURATION_RESTRICTIVE_PARAMS]; - NSDictionary *AAMRules = [decoder decodeObjectOfClass:[NSDictionary class] forKey:FBSDK_SERVER_CONFIGURATION_AAM_RULES]; - NSDictionary *suggestedEventsSetting = [decoder decodeObjectOfClass:[NSDictionary class] forKey:FBSDK_SERVER_CONFIGURATION_SUGGESTED_EVENTS_SETTING]; - NSInteger version = [decoder decodeIntegerForKey:FBSDK_SERVER_CONFIGURATION_VERSION_KEY]; - FBSDKServerConfiguration *configuration = [self initWithAppID:appID - appName:appName - loginTooltipEnabled:loginTooltipEnabled - loginTooltipText:loginTooltipText - defaultShareMode:defaultShareMode - advertisingIDEnabled:advertisingIDEnabled - implicitLoggingEnabled:implicitLoggingEnabled - implicitPurchaseLoggingEnabled:implicitPurchaseLoggingEnabled - codelessEventsEnabled:codelessEventsEnabled - uninstallTrackingEnabled:uninstallTrackingEnabled - dialogConfigurations:dialogConfigurations - dialogFlows:dialogFlows - timestamp:timestamp - errorConfiguration:errorConfiguration - sessionTimeoutInterval:sessionTimeoutInterval - defaults:NO - loggingToken:loggingToken - smartLoginOptions:smartLoginOptions - smartLoginBookmarkIconURL:smartLoginBookmarkIconURL - smartLoginMenuIconURL:smartLoginMenuIconURL - updateMessage:updateMessage - eventBindings:eventBindings - restrictiveParams:restrictiveParams - AAMRules:AAMRules - suggestedEventsSetting:suggestedEventsSetting - ]; - configuration->_version = version; - return configuration; -} - -- (void)encodeWithCoder:(NSCoder *)encoder -{ - [encoder encodeBool:_advertisingIDEnabled forKey:FBSDK_SERVER_CONFIGURATION_ADVERTISING_ID_ENABLED_KEY]; - [encoder encodeObject:_appID forKey:FBSDK_SERVER_CONFIGURATION_APP_ID_KEY]; - [encoder encodeObject:_appName forKey:FBSDK_SERVER_CONFIGURATION_APP_NAME_KEY]; - [encoder encodeObject:_defaultShareMode forKey:FBSDK_SERVER_CONFIGURATION_DEFAULT_SHARE_MODE_KEY]; - [encoder encodeObject:_dialogConfigurations forKey:FBSDK_SERVER_CONFIGURATION_DIALOG_CONFIGS_KEY]; - [encoder encodeObject:_dialogFlows forKey:FBSDK_SERVER_CONFIGURATION_DIALOG_FLOWS_KEY]; - [encoder encodeObject:_errorConfiguration forKey:FBSDK_SERVER_CONFIGURATION_ERROR_CONFIGS_KEY]; - [encoder encodeBool:_implicitLoggingEnabled forKey:FBSDK_SERVER_CONFIGURATION_IMPLICIT_LOGGING_ENABLED_KEY]; - [encoder encodeBool:_implicitPurchaseLoggingEnabled - forKey:FBSDK_SERVER_CONFIGURATION_IMPLICIT_PURCHASE_LOGGING_ENABLED_KEY]; - [encoder encodeBool:_codelessEventsEnabled - forKey:FBSDK_SERVER_CONFIGURATION_CODELESS_EVENTS_ENABLED_KEY]; - [encoder encodeBool:_loginTooltipEnabled forKey:FBSDK_SERVER_CONFIGURATION_LOGIN_TOOLTIP_ENABLED_KEY]; - [encoder encodeBool:_uninstallTrackingEnabled - forKey:FBSDK_SERVER_CONFIGURATION_TRACK_UNINSTALL_ENABLED_KEY]; - [encoder encodeObject:_loginTooltipText forKey:FBSDK_SERVER_CONFIGURATION_LOGIN_TOOLTIP_TEXT_KEY]; - [encoder encodeObject:_timestamp forKey:FBSDK_SERVER_CONFIGURATION_TIMESTAMP_KEY]; - [encoder encodeDouble:_sessionTimoutInterval forKey:FBSDK_SERVER_CONFIGURATION_SESSION_TIMEOUT_INTERVAL]; - [encoder encodeObject:_loggingToken forKey:FBSDK_SERVER_CONFIGURATION_LOGGING_TOKEN]; - [encoder encodeInteger:_smartLoginOptions forKey:FBSDK_SERVER_CONFIGURATION_SMART_LOGIN_OPTIONS_KEY]; - [encoder encodeObject:_smartLoginBookmarkIconURL forKey:FBSDK_SERVER_CONFIGURATION_SMART_LOGIN_BOOKMARK_ICON_URL_KEY]; - [encoder encodeObject:_smartLoginMenuIconURL forKey:FBSDK_SERVER_CONFIGURATION_SMART_LOGIN_MENU_ICON_URL_KEY]; - [encoder encodeObject:_updateMessage forKey:FBSDK_SERVER_CONFIGURATION_UPDATE_MESSAGE_KEY]; - [encoder encodeObject:_eventBindings forKey:FBSDK_SERVER_CONFIGURATION_EVENT_BINDINGS]; - [encoder encodeObject:_restrictiveParams forKey:FBSDK_SERVER_CONFIGURATION_RESTRICTIVE_PARAMS]; - [encoder encodeObject:_AAMRules forKey:FBSDK_SERVER_CONFIGURATION_AAM_RULES]; - [encoder encodeObject:_suggestedEventsSetting forKey:FBSDK_SERVER_CONFIGURATION_SUGGESTED_EVENTS_SETTING]; - [encoder encodeInteger:_version forKey:FBSDK_SERVER_CONFIGURATION_VERSION_KEY]; -} - -#pragma mark - NSCopying - -- (id)copyWithZone:(NSZone *)zone -{ - return self; -} - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfigurationManager+Internal.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfigurationManager+Internal.h deleted file mode 100644 index b84b02353e..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfigurationManager+Internal.h +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -#import "FBSDKServerConfigurationManager.h" - -@class FBSDKGraphRequest; - -@interface FBSDKServerConfigurationManager () - -+ (void)processLoadRequestResponse:(id)result error:(NSError *)error appID:(NSString *)appID; - -+ (FBSDKGraphRequest *)requestToLoadServerConfiguration:(NSString *)appID; - -+ (void)clearCache; - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfigurationManager.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfigurationManager.h deleted file mode 100644 index 78557e5cfc..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfigurationManager.h +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -#import "FBSDKServerConfiguration.h" - -#define FBSDK_SERVER_CONFIGURATION_MANAGER_CACHE_TIMEOUT (60 * 60) -typedef void (^FBSDKServerConfigurationBlock)(FBSDKServerConfiguration *serverConfiguration, NSError *error) -NS_SWIFT_NAME(ServerConfigurationBlock); - -NS_SWIFT_NAME(ServerConfigurationManager) -@interface FBSDKServerConfigurationManager : NSObject - -/** - Returns the locally cached configuration. - - The result will be valid for the appID from FBSDKSettings, but may be expired. A network request will be - initiated to update the configuration if a valid and unexpired configuration is not available. - */ -+ (FBSDKServerConfiguration *)cachedServerConfiguration; - -/** - Executes the completionBlock with a valid and current configuration when it is available. - - This method will use a cached configuration if it is valid and not expired. - */ -+ (void)loadServerConfigurationWithCompletionBlock:(FBSDKServerConfigurationBlock)completionBlock; - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfigurationManager.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfigurationManager.m deleted file mode 100644 index efc4b5e788..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfigurationManager.m +++ /dev/null @@ -1,470 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKServerConfigurationManager+Internal.h" - -#import - -#import "FBSDKAppEventsUtility.h" -#import "FBSDKEventDeactivationManager.h" -#import "FBSDKGateKeeperManager.h" -#import "FBSDKGraphRequest+Internal.h" -#import "FBSDKGraphRequest.h" -#import "FBSDKImageDownloader.h" -#import "FBSDKInternalUtility.h" -#import "FBSDKLogger.h" -#import "FBSDKRestrictiveDataFilterManager.h" -#import "FBSDKServerConfiguration+Internal.h" -#import "FBSDKServerConfiguration.h" -#import "FBSDKSettings.h" -#import "FBSDKTypeUtility.h" - -// one minute -#define DEFAULT_SESSION_TIMEOUT_INTERVAL 60 - -#define FBSDK_SERVER_CONFIGURATION_USER_DEFAULTS_KEY @"com.facebook.sdk:serverConfiguration%@" - -#define FBSDK_SERVER_CONFIGURATION_APP_EVENTS_FEATURES_FIELD @"app_events_feature_bitmask" -#define FBSDK_SERVER_CONFIGURATION_APP_NAME_FIELD @"name" -#define FBSDK_SERVER_CONFIGURATION_DEFAULT_SHARE_MODE_FIELD @"default_share_mode" -#define FBSDK_SERVER_CONFIGURATION_DIALOG_CONFIGS_FIELD @"ios_dialog_configs" -#define FBSDK_SERVER_CONFIGURATION_DIALOG_FLOWS_FIELD @"ios_sdk_dialog_flows" -#define FBSDK_SERVER_CONFIGURATION_ERROR_CONFIGURATION_FIELD @"ios_sdk_error_categories" -#define FBSDK_SERVER_CONFIGURATION_IMPLICIT_LOGGING_ENABLED_FIELD @"supports_implicit_sdk_logging" -#define FBSDK_SERVER_CONFIGURATION_LOGIN_TOOLTIP_ENABLED_FIELD @"gdpv4_nux_enabled" -#define FBSDK_SERVER_CONFIGURATION_LOGIN_TOOLTIP_TEXT_FIELD @"gdpv4_nux_content" -#define FBSDK_SERVER_CONFIGURATION_SESSION_TIMEOUT_FIELD @"app_events_session_timeout" -#define FBSDK_SERVER_CONFIGURATION_LOGGIN_TOKEN_FIELD @"logging_token" -#define FBSDK_SERVER_CONFIGURATION_SMART_LOGIN_OPTIONS_FIELD @"seamless_login" -#define FBSDK_SERVER_CONFIGURATION_SMART_LOGIN_BOOKMARK_ICON_URL_FIELD @"smart_login_bookmark_icon_url" -#define FBSDK_SERVER_CONFIGURATION_SMART_LOGIN_MENU_ICON_URL_FIELD @"smart_login_menu_icon_url" -#define FBSDK_SERVER_CONFIGURATION_UPDATE_MESSAGE_FIELD @"sdk_update_message" -#define FBSDK_SERVER_CONFIGURATION_EVENT_BINDINGS_FIELD @"auto_event_mapping_ios" -#define FBSDK_SERVER_CONFIGURATION_RESTRICTIVE_PARAMS_FIELD @"restrictive_data_filter_params" -#define FBSDK_SERVER_CONFIGURATION_AAM_RULES_FIELD @"aam_rules" -#define FBSDK_SERVER_CONFIGURATION_SUGGESTED_EVENTS_SETTING_FIELD @"suggested_events_setting" - -@implementation FBSDKServerConfigurationManager - -static NSMutableArray *_completionBlocks; -static BOOL _loadingServerConfiguration; -static FBSDKServerConfiguration *_serverConfiguration; -static NSError *_serverConfigurationError; -static NSDate *_serverConfigurationErrorTimestamp; -static const NSTimeInterval kTimeout = 4.0; -static BOOL _printedUpdateMessage; -static BOOL _requeryFinishedForAppStart; - -typedef NS_OPTIONS(NSUInteger, FBSDKServerConfigurationManagerAppEventsFeatures) -{ - FBSDKServerConfigurationManagerAppEventsFeaturesNone = 0, - FBSDKServerConfigurationManagerAppEventsFeaturesAdvertisingIDEnabled = 1 << 0, - FBSDKServerConfigurationManagerAppEventsFeaturesImplicitPurchaseLoggingEnabled = 1 << 1, - FBSDKServerConfigurationManagerAppEventsFeaturesCodelessEventsTriggerEnabled = 1 << 5, - FBSDKServerConfigurationManagerAppEventsFeaturesUninstallTrackingEnabled = 1 << 7, -}; - -#pragma mark - Public Class Methods - -+ (void)initialize -{ - if (self == [FBSDKServerConfigurationManager class]) { - _completionBlocks = [[NSMutableArray alloc] init]; - } -} - -+ (void)clearCache -{ - _serverConfiguration = nil; - _serverConfigurationError = nil; - _serverConfigurationErrorTimestamp = nil; - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - NSString *defaultsKey = [NSString stringWithFormat:FBSDK_SERVER_CONFIGURATION_USER_DEFAULTS_KEY, [FBSDKSettings appID]]; - [defaults removeObjectForKey:defaultsKey]; - [defaults synchronize]; -} - -+ (FBSDKServerConfiguration *)cachedServerConfiguration -{ - NSString *appID = [FBSDKSettings appID]; - @synchronized(self) { - // load the server configuration if we don't have it already - [self loadServerConfigurationWithCompletionBlock:nil]; - - // use whatever configuration we have or the default - return _serverConfiguration ?: [self _defaultServerConfigurationForAppID:appID]; - } -} - -+ (void)loadServerConfigurationWithCompletionBlock:(FBSDKServerConfigurationBlock)completionBlock -{ - void (^loadBlock)(void) = nil; - NSString *appID = [FBSDKSettings appID]; - @synchronized(self) { - // validate the cached configuration has the correct appID - if (_serverConfiguration && ![_serverConfiguration.appID isEqualToString:appID]) { - _serverConfiguration = nil; - _serverConfigurationError = nil; - _serverConfigurationErrorTimestamp = nil; - } - - // load the configuration from NSUserDefaults - if (!_serverConfiguration) { - // load the defaults - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - NSString *defaultsKey = [NSString stringWithFormat:FBSDK_SERVER_CONFIGURATION_USER_DEFAULTS_KEY, appID]; - NSData *data = [defaults objectForKey:defaultsKey]; - if ([data isKindOfClass:[NSData class]]) { - // decode the configuration - FBSDKServerConfiguration *serverConfiguration = [NSKeyedUnarchiver unarchiveObjectWithData:data]; - if ([serverConfiguration isKindOfClass:[FBSDKServerConfiguration class]]) { - // ensure that the configuration points to the current appID - if ([serverConfiguration.appID isEqualToString:appID]) { - _serverConfiguration = serverConfiguration; - } - } - } - } - - if (_requeryFinishedForAppStart && - ((_serverConfiguration && [self _serverConfigurationTimestampIsValid:_serverConfiguration.timestamp] && _serverConfiguration.version >= FBSDKServerConfigurationVersion))) { - // we have a valid server configuration, use that - loadBlock = [self _wrapperBlockForLoadBlock:completionBlock]; - } else { - // hold onto the completion block - [FBSDKBasicUtility array:_completionBlocks addObject:[completionBlock copy]]; - - // check if we are already loading - if (!_loadingServerConfiguration) { - // load the configuration from the network - _loadingServerConfiguration = YES; - FBSDKGraphRequest *request = [[self class] requestToLoadServerConfiguration:appID]; - - // start request with specified timeout instead of the default 180s - FBSDKGraphRequestConnection *requestConnection = [[FBSDKGraphRequestConnection alloc] init]; - requestConnection.timeout = kTimeout; - [requestConnection addRequest:request completionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { - _requeryFinishedForAppStart = YES; - [self processLoadRequestResponse:result error:error appID:appID]; - }]; - [requestConnection start]; - } - } - } - - if (loadBlock) { - loadBlock(); - } - - // Fetch app gatekeepers - [FBSDKGateKeeperManager loadGateKeepers:nil]; -} - -#pragma mark - Internal Class Methods - -+ (void)processLoadRequestResponse:(id)result error:(NSError *)error appID:(NSString *)appID -{ - if (error) { - [self _didProcessConfigurationFromNetwork:nil appID:appID error:error]; - return; - } - - NSDictionary *resultDictionary = [FBSDKTypeUtility dictionaryValue:result]; - NSUInteger appEventsFeatures = [FBSDKTypeUtility unsignedIntegerValue:resultDictionary[FBSDK_SERVER_CONFIGURATION_APP_EVENTS_FEATURES_FIELD]]; - BOOL advertisingIDEnabled = (appEventsFeatures & FBSDKServerConfigurationManagerAppEventsFeaturesAdvertisingIDEnabled) != 0; - BOOL implicitPurchaseLoggingEnabled = (appEventsFeatures & FBSDKServerConfigurationManagerAppEventsFeaturesImplicitPurchaseLoggingEnabled) != 0; - BOOL codelessEventsEnabled = (appEventsFeatures & FBSDKServerConfigurationManagerAppEventsFeaturesCodelessEventsTriggerEnabled) != 0; - BOOL uninstallTrackingEnabled = (appEventsFeatures & FBSDKServerConfigurationManagerAppEventsFeaturesUninstallTrackingEnabled) != 0; - NSString *appName = [FBSDKTypeUtility stringValue:resultDictionary[FBSDK_SERVER_CONFIGURATION_APP_NAME_FIELD]]; - BOOL loginTooltipEnabled = [FBSDKTypeUtility boolValue:resultDictionary[FBSDK_SERVER_CONFIGURATION_LOGIN_TOOLTIP_ENABLED_FIELD]]; - NSString *loginTooltipText = [FBSDKTypeUtility stringValue:resultDictionary[FBSDK_SERVER_CONFIGURATION_LOGIN_TOOLTIP_TEXT_FIELD]]; - NSString *defaultShareMode = [FBSDKTypeUtility stringValue:resultDictionary[FBSDK_SERVER_CONFIGURATION_DEFAULT_SHARE_MODE_FIELD]]; - BOOL implicitLoggingEnabled = [FBSDKTypeUtility boolValue:resultDictionary[FBSDK_SERVER_CONFIGURATION_IMPLICIT_LOGGING_ENABLED_FIELD]]; - NSDictionary *dialogConfigurations = [FBSDKTypeUtility dictionaryValue:resultDictionary[FBSDK_SERVER_CONFIGURATION_DIALOG_CONFIGS_FIELD]]; - dialogConfigurations = [self _parseDialogConfigurations:dialogConfigurations]; - NSDictionary *dialogFlows = [FBSDKTypeUtility dictionaryValue:resultDictionary[FBSDK_SERVER_CONFIGURATION_DIALOG_FLOWS_FIELD]]; - FBSDKErrorConfiguration *errorConfiguration = [[FBSDKErrorConfiguration alloc] initWithDictionary:nil]; - [errorConfiguration parseArray:resultDictionary[FBSDK_SERVER_CONFIGURATION_ERROR_CONFIGURATION_FIELD]]; - NSTimeInterval sessionTimeoutInterval = [FBSDKTypeUtility timeIntervalValue:resultDictionary[FBSDK_SERVER_CONFIGURATION_SESSION_TIMEOUT_FIELD]] ?: DEFAULT_SESSION_TIMEOUT_INTERVAL; - NSString *loggingToken = [FBSDKTypeUtility stringValue:resultDictionary[FBSDK_SERVER_CONFIGURATION_LOGGIN_TOKEN_FIELD]]; - FBSDKServerConfigurationSmartLoginOptions smartLoginOptions = [FBSDKTypeUtility integerValue:resultDictionary[FBSDK_SERVER_CONFIGURATION_SMART_LOGIN_OPTIONS_FIELD]]; - NSURL *smartLoginBookmarkIconURL = [FBSDKTypeUtility URLValue:resultDictionary[FBSDK_SERVER_CONFIGURATION_SMART_LOGIN_BOOKMARK_ICON_URL_FIELD]]; - NSURL *smartLoginMenuIconURL = [FBSDKTypeUtility URLValue:resultDictionary[FBSDK_SERVER_CONFIGURATION_SMART_LOGIN_MENU_ICON_URL_FIELD]]; - NSString *updateMessage = [FBSDKTypeUtility stringValue:resultDictionary[FBSDK_SERVER_CONFIGURATION_UPDATE_MESSAGE_FIELD]]; - NSArray *eventBindings = [FBSDKTypeUtility arrayValue:resultDictionary[FBSDK_SERVER_CONFIGURATION_EVENT_BINDINGS_FIELD]]; - NSDictionary *restrictiveParams = [FBSDKBasicUtility objectForJSONString:resultDictionary[FBSDK_SERVER_CONFIGURATION_RESTRICTIVE_PARAMS_FIELD] error:nil]; - NSDictionary *AAMRules = [FBSDKBasicUtility objectForJSONString:resultDictionary[FBSDK_SERVER_CONFIGURATION_AAM_RULES_FIELD] error:nil]; - NSDictionary *suggestedEventsSetting = [FBSDKBasicUtility objectForJSONString:resultDictionary[FBSDK_SERVER_CONFIGURATION_SUGGESTED_EVENTS_SETTING_FIELD] error:nil]; - FBSDKServerConfiguration *serverConfiguration = [[FBSDKServerConfiguration alloc] initWithAppID:appID - appName:appName - loginTooltipEnabled:loginTooltipEnabled - loginTooltipText:loginTooltipText - defaultShareMode:defaultShareMode - advertisingIDEnabled:advertisingIDEnabled - implicitLoggingEnabled:implicitLoggingEnabled - implicitPurchaseLoggingEnabled:implicitPurchaseLoggingEnabled - codelessEventsEnabled:codelessEventsEnabled - uninstallTrackingEnabled:uninstallTrackingEnabled - dialogConfigurations:dialogConfigurations - dialogFlows:dialogFlows - timestamp:[NSDate date] - errorConfiguration:errorConfiguration - sessionTimeoutInterval:sessionTimeoutInterval - defaults:NO - loggingToken:loggingToken - smartLoginOptions:smartLoginOptions - smartLoginBookmarkIconURL:smartLoginBookmarkIconURL - smartLoginMenuIconURL:smartLoginMenuIconURL - updateMessage:updateMessage - eventBindings:eventBindings - restrictiveParams:restrictiveParams - AAMRules:AAMRules - suggestedEventsSetting:suggestedEventsSetting - ]; - if (restrictiveParams) { - [FBSDKRestrictiveDataFilterManager updateFilters:restrictiveParams]; - [FBSDKEventDeactivationManager updateDeactivatedEvents:restrictiveParams]; - } -#if TARGET_OS_TV - // don't download icons more than once a day. - static const NSTimeInterval kSmartLoginIconsTTL = 60 * 60 * 24; - - BOOL smartLoginEnabled = (smartLoginOptions & FBSDKServerConfigurationSmartLoginOptionsEnabled); - // for TVs go ahead and prime the images - if (smartLoginEnabled && - smartLoginMenuIconURL && - smartLoginBookmarkIconURL) { - [[FBSDKImageDownloader sharedInstance] downloadImageWithURL:serverConfiguration.smartLoginBookmarkIconURL - ttl:kSmartLoginIconsTTL - completion:nil]; - [[FBSDKImageDownloader sharedInstance] downloadImageWithURL:serverConfiguration.smartLoginMenuIconURL - ttl:kSmartLoginIconsTTL - completion:nil]; - } -#endif - [self _didProcessConfigurationFromNetwork:serverConfiguration appID:appID error:nil]; -} - -+ (FBSDKGraphRequest *)requestToLoadServerConfiguration:(NSString *)appID -{ - NSOperatingSystemVersion operatingSystemVersion = [FBSDKInternalUtility operatingSystemVersion]; - NSString *dialogFlowsField = [NSString stringWithFormat:@"%@.os_version(%ti.%ti.%ti)", - FBSDK_SERVER_CONFIGURATION_DIALOG_FLOWS_FIELD, - operatingSystemVersion.majorVersion, - operatingSystemVersion.minorVersion, - operatingSystemVersion.patchVersion]; - NSArray *fields = @[FBSDK_SERVER_CONFIGURATION_APP_EVENTS_FEATURES_FIELD, - FBSDK_SERVER_CONFIGURATION_APP_NAME_FIELD, - FBSDK_SERVER_CONFIGURATION_DEFAULT_SHARE_MODE_FIELD, - FBSDK_SERVER_CONFIGURATION_DIALOG_CONFIGS_FIELD, - dialogFlowsField, - FBSDK_SERVER_CONFIGURATION_ERROR_CONFIGURATION_FIELD, - FBSDK_SERVER_CONFIGURATION_IMPLICIT_LOGGING_ENABLED_FIELD, - FBSDK_SERVER_CONFIGURATION_LOGIN_TOOLTIP_ENABLED_FIELD, - FBSDK_SERVER_CONFIGURATION_LOGIN_TOOLTIP_TEXT_FIELD, - FBSDK_SERVER_CONFIGURATION_SESSION_TIMEOUT_FIELD, - FBSDK_SERVER_CONFIGURATION_LOGGIN_TOKEN_FIELD, - FBSDK_SERVER_CONFIGURATION_RESTRICTIVE_PARAMS_FIELD, - FBSDK_SERVER_CONFIGURATION_AAM_RULES_FIELD, - FBSDK_SERVER_CONFIGURATION_SUGGESTED_EVENTS_SETTING_FIELD -#if !TARGET_OS_TV - ,FBSDK_SERVER_CONFIGURATION_EVENT_BINDINGS_FIELD -#endif -#ifdef DEBUG - ,FBSDK_SERVER_CONFIGURATION_UPDATE_MESSAGE_FIELD -#endif -#if TARGET_OS_TV - ,FBSDK_SERVER_CONFIGURATION_SMART_LOGIN_OPTIONS_FIELD, - FBSDK_SERVER_CONFIGURATION_SMART_LOGIN_BOOKMARK_ICON_URL_FIELD, - FBSDK_SERVER_CONFIGURATION_SMART_LOGIN_MENU_ICON_URL_FIELD -#endif - ]; - NSDictionary *parameters = @{ @"fields": [fields componentsJoinedByString:@","]}; - - FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:appID - parameters:parameters - tokenString:nil - HTTPMethod:nil - flags:FBSDKGraphRequestFlagSkipClientToken | FBSDKGraphRequestFlagDisableErrorRecovery]; - return request; -} - -#pragma mark - Helper Class Methods - -+ (FBSDKServerConfiguration *)_defaultServerConfigurationForAppID:(NSString *)appID -{ - // Use a default configuration while we do not have a configuration back from the server. This allows us to set - // the default values for any of the dialog sets or anything else in a centralized location while we are waiting for - // the server to respond. - static FBSDKServerConfiguration *_defaultServerConfiguration = nil; - if (![_defaultServerConfiguration.appID isEqualToString:appID]) { - // Bypass the native dialog flow for iOS 9+, as it produces a series of additional confirmation dialogs that lead to - // extra friction that is not desirable. - NSOperatingSystemVersion iOS9Version = { .majorVersion = 9, .minorVersion = 0, .patchVersion = 0 }; - BOOL useNativeFlow = ![FBSDKInternalUtility isOSRunTimeVersionAtLeast:iOS9Version]; - // Also enable SFSafariViewController by default. - NSDictionary *dialogFlows = @{ - FBSDKDialogConfigurationNameDefault: @{ - FBSDKDialogConfigurationFeatureUseNativeFlow: @(useNativeFlow), - FBSDKDialogConfigurationFeatureUseSafariViewController: @YES, - }, - FBSDKDialogConfigurationNameMessage: @{ - FBSDKDialogConfigurationFeatureUseNativeFlow: @YES, - }, - }; - _defaultServerConfiguration = [[FBSDKServerConfiguration alloc] initWithAppID:appID - appName:nil - loginTooltipEnabled:NO - loginTooltipText:nil - defaultShareMode:nil - advertisingIDEnabled:NO - implicitLoggingEnabled:NO - implicitPurchaseLoggingEnabled:NO - codelessEventsEnabled:NO - uninstallTrackingEnabled:NO - dialogConfigurations:nil - dialogFlows:dialogFlows - timestamp:nil - errorConfiguration:nil - sessionTimeoutInterval:DEFAULT_SESSION_TIMEOUT_INTERVAL - defaults:YES - loggingToken:nil - smartLoginOptions:FBSDKServerConfigurationSmartLoginOptionsUnknown - smartLoginBookmarkIconURL:nil - smartLoginMenuIconURL:nil - updateMessage:nil - eventBindings:nil - restrictiveParams:nil - AAMRules:nil - suggestedEventsSetting:nil - ]; - } - return _defaultServerConfiguration; -} - -+ (void)_didProcessConfigurationFromNetwork:(FBSDKServerConfiguration *)serverConfiguration - appID:(NSString *)appID - error:(NSError *)error -{ - NSMutableArray *completionBlocks = [[NSMutableArray alloc] init]; - @synchronized(self) { - if (error) { - // Only set the error if we don't have previously fetched app settings. - // (i.e., if we have app settings and a new call gets an error, we'll - // ignore the error and surface the last successfully fetched settings). - if (_serverConfiguration && [_serverConfiguration.appID isEqualToString:appID]) { - // We have older app settings but the refresh received an error. - // Log and ignore the error. - [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorInformational - formatString:@"loadServerConfigurationWithCompletionBlock failed with %@", error]; - } else { - _serverConfiguration = nil; - } - _serverConfigurationError = error; - _serverConfigurationErrorTimestamp = [NSDate date]; - } else { - _serverConfiguration = serverConfiguration; - _serverConfigurationError = nil; - _serverConfigurationErrorTimestamp = nil; - -#ifdef DEBUG - NSString *updateMessage = _serverConfiguration.updateMessage; - if (updateMessage && updateMessage.length > 0 && !_printedUpdateMessage) { - _printedUpdateMessage = YES; - [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorInformational logEntry:updateMessage]; - } -#endif - - if (!_printedUpdateMessage) { - _printedUpdateMessage = _printedUpdateMessage; - } - } - - // update the cached copy in NSUserDefaults - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - NSString *defaultsKey = [NSString stringWithFormat:FBSDK_SERVER_CONFIGURATION_USER_DEFAULTS_KEY, appID]; - if (serverConfiguration) { - NSData *data = [NSKeyedArchiver archivedDataWithRootObject:serverConfiguration]; - [defaults setObject:data forKey:defaultsKey]; - } - - // wrap the completion blocks - for (FBSDKServerConfigurationBlock completionBlock in _completionBlocks) { - [completionBlocks addObject:[self _wrapperBlockForLoadBlock:completionBlock]]; - } - [_completionBlocks removeAllObjects]; - _loadingServerConfiguration = NO; - } - - // release the lock before calling out of this class - for (void (^completionBlock)(void) in completionBlocks) { - completionBlock(); - } -} - -+ (NSDictionary *)_parseDialogConfigurations:(NSDictionary *)dictionary -{ - NSMutableDictionary *dialogConfigurations = [[NSMutableDictionary alloc] init]; - NSArray *dialogConfigurationsArray = [FBSDKTypeUtility arrayValue:dictionary[@"data"]]; - for (id dialogConfiguration in dialogConfigurationsArray) { - NSDictionary *dialogConfigurationDictionary = [FBSDKTypeUtility dictionaryValue:dialogConfiguration]; - if (dialogConfigurationDictionary) { - NSString *name = [FBSDKTypeUtility stringValue:dialogConfigurationDictionary[@"name"]]; - if (name.length) { - NSURL *URL = [FBSDKTypeUtility URLValue:dialogConfigurationDictionary[@"url"]]; - NSArray *appVersions = [FBSDKTypeUtility arrayValue:dialogConfigurationDictionary[@"versions"]]; - dialogConfigurations[name] = [[FBSDKDialogConfiguration alloc] initWithName:name - URL:URL - appVersions:appVersions]; - } - } - } - return dialogConfigurations; -} - -+ (BOOL)_serverConfigurationTimestampIsValid:(NSDate *)timestamp -{ - return ([[NSDate date] timeIntervalSinceDate:timestamp] < FBSDK_SERVER_CONFIGURATION_MANAGER_CACHE_TIMEOUT); -} - -+ (FBSDKCodeBlock)_wrapperBlockForLoadBlock:(FBSDKServerConfigurationBlock)loadBlock -{ - if (!loadBlock) { - return nil; - } - - // create local vars to capture the current values from the ivars to allow this wrapper to be called outside of a lock - FBSDKServerConfiguration *serverConfiguration; - NSError *serverConfigurationError; - @synchronized(self) { - serverConfiguration = _serverConfiguration; - serverConfigurationError = _serverConfigurationError; - } - return ^{ - loadBlock(serverConfiguration, serverConfigurationError); - }; -} - -#pragma mark - Object Lifecycle - -- (instancetype)init -{ - return nil; -} - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCache.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCache.h deleted file mode 100644 index 2176928b4e..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCache.h +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -#if SWIFT_PACKAGE -#import "FBSDKAccessToken.h" -#else -#import -#endif - -#import "FBSDKAccessTokenCaching.h" - -NS_SWIFT_NAME(AccessTokenCache) -@interface FBSDKAccessTokenCache : NSObject - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCache.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCache.m deleted file mode 100644 index 8d1ca02843..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCache.m +++ /dev/null @@ -1,99 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKAccessTokenCache.h" - -#import "FBSDKDynamicFrameworkLoader.h" -#import "FBSDKInternalUtility.h" -#import "FBSDKKeychainStore.h" - -static NSString *const kFBSDKAccessTokenUserDefaultsKey = @"com.facebook.sdk.v4.FBSDKAccessTokenInformationKey"; -static NSString *const kFBSDKAccessTokenKeychainKey = @"com.facebook.sdk.v4.FBSDKAccessTokenInformationKeychainKey"; -static NSString *const kFBSDKAccessTokenUUIDKey = @"tokenUUID"; -static NSString *const kFBSDKAccessTokenEncodedKey = @"tokenEncoded"; - -@implementation FBSDKAccessTokenCache -{ - FBSDKKeychainStore *_keychainStore; -} - -- (instancetype)init -{ - if ((self = [super init])) { - NSString *keyChainServiceIdentifier = [NSString stringWithFormat:@"com.facebook.sdk.tokencache.%@", [NSBundle mainBundle].bundleIdentifier]; - _keychainStore = [[FBSDKKeychainStore alloc] initWithService:keyChainServiceIdentifier accessGroup:nil]; - } - return self; -} - -- (FBSDKAccessToken *)accessToken -{ - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - NSString *uuid = [defaults objectForKey:kFBSDKAccessTokenUserDefaultsKey]; - - NSDictionary *dict = [_keychainStore dictionaryForKey:kFBSDKAccessTokenKeychainKey]; - if ([dict[kFBSDKAccessTokenUUIDKey] isKindOfClass:[NSString class]]) { - // there is a bug while running on simulator that the uuid stored in dict can be NSData, - // do a type check to make sure it is NSString - if ([dict[kFBSDKAccessTokenUUIDKey] isEqualToString:uuid]) { - id tokenData = dict[kFBSDKAccessTokenEncodedKey]; - if ([tokenData isKindOfClass:[NSData class]]) { - return [NSKeyedUnarchiver unarchiveObjectWithData:tokenData]; - } - } - } - // if the uuid doesn't match (including if there is no uuid in defaults which means uninstalled case) - // clear the keychain and return nil. - [self clearCache]; - return nil; -} - -- (void)setAccessToken:(FBSDKAccessToken *)token -{ - if (!token) { - [self clearCache]; - return; - } - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - NSString *uuid = [defaults objectForKey:kFBSDKAccessTokenUserDefaultsKey]; - if (!uuid) { - uuid = [NSUUID UUID].UUIDString; - [defaults setObject:uuid forKey:kFBSDKAccessTokenUserDefaultsKey]; - [defaults synchronize]; - } - NSData *tokenData = [NSKeyedArchiver archivedDataWithRootObject:token]; - NSDictionary *dict = @{ - kFBSDKAccessTokenUUIDKey : uuid, - kFBSDKAccessTokenEncodedKey : tokenData - }; - - [_keychainStore setDictionary:dict - forKey:kFBSDKAccessTokenKeychainKey - accessibility:[FBSDKDynamicFrameworkLoader loadkSecAttrAccessibleAfterFirstUnlockThisDeviceOnly]]; -} - -- (void)clearCache -{ - [_keychainStore setDictionary:nil - forKey:kFBSDKAccessTokenKeychainKey - accessibility:NULL]; - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - [defaults removeObjectForKey:kFBSDKAccessTokenUserDefaultsKey]; - [defaults synchronize]; -} -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCaching.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCaching.h deleted file mode 100644 index e5595db760..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCaching.h +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -@class FBSDKAccessToken; - -NS_SWIFT_NAME(AccessTokenCaching) -@protocol FBSDKAccessTokenCaching - -@property (nonatomic, copy) FBSDKAccessToken *accessToken; - -- (void)clearCache; - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenExpirer.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenExpirer.h deleted file mode 100644 index 5b9636d915..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenExpirer.h +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -NS_SWIFT_NAME(AccessTokenExpirer) -@interface FBSDKAccessTokenExpirer : NSObject - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenExpirer.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenExpirer.m deleted file mode 100644 index 05cda6191f..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenExpirer.m +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKAccessTokenExpirer.h" - -#import "FBSDKAccessToken.h" -#import "FBSDKApplicationDelegate+Internal.h" -#import "FBSDKInternalUtility.h" - -@implementation FBSDKAccessTokenExpirer -{ - NSTimer *_timer; -} - -- (instancetype)init -{ - if (self = [super init]) { - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_checkAccessTokenExpirationDate) name:FBSDKAccessTokenDidChangeNotification object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_checkAccessTokenExpirationDate) name:FBSDKApplicationDidBecomeActiveNotification object:nil]; - [self _checkAccessTokenExpirationDate]; - } - return self; -} - -- (void)dealloc -{ - [_timer invalidate]; - _timer = nil; - [[NSNotificationCenter defaultCenter] removeObserver:self]; -} - -- (void)_checkAccessTokenExpirationDate -{ - [_timer invalidate]; - _timer = nil; - FBSDKAccessToken *accessToken = FBSDKAccessToken.currentAccessToken; - if (accessToken == nil || accessToken.isExpired) { - return; - } - _timer = [NSTimer scheduledTimerWithTimeInterval:accessToken.expirationDate.timeIntervalSinceNow target:self selector:@selector(_timerDidFire) userInfo:nil repeats:NO]; -} - -- (void)_timerDidFire -{ - FBSDKAccessToken *accessToken = FBSDKAccessToken.currentAccessToken; - NSMutableDictionary *userInfo = [NSMutableDictionary dictionary]; - [FBSDKBasicUtility dictionary:userInfo setObject:accessToken forKey:FBSDKAccessTokenChangeNewKey]; - [FBSDKBasicUtility dictionary:userInfo setObject:accessToken forKey:FBSDKAccessTokenChangeOldKey]; - userInfo[FBSDKAccessTokenDidExpireKey] = @YES; - - [[NSNotificationCenter defaultCenter] postNotificationName:FBSDKAccessTokenDidChangeNotification - object:[FBSDKAccessToken class] - userInfo:userInfo]; -} - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStore.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStore.h deleted file mode 100644 index 15fc40b7e3..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStore.h +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -NS_SWIFT_NAME(KeychainStore) -@interface FBSDKKeychainStore : NSObject - -@property (nonatomic, readonly, copy) NSString *service; -@property (nonatomic, readonly, copy) NSString *accessGroup; - -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; -- (instancetype)initWithService:(NSString *)service accessGroup:(NSString *)accessGroup NS_DESIGNATED_INITIALIZER; - -- (BOOL)setDictionary:(NSDictionary *)value forKey:(NSString *)key accessibility:(CFTypeRef)accessibility; -- (NSDictionary *)dictionaryForKey:(NSString *)key; - -- (BOOL)setString:(NSString *)value forKey:(NSString *)key accessibility:(CFTypeRef)accessibility; -- (NSString *)stringForKey:(NSString *)key; - -- (BOOL)setData:(NSData *)value forKey:(NSString *)key accessibility:(CFTypeRef)accessibility; -- (NSData *)dataForKey:(NSString *)key; - -// hook for subclasses to override keychain query construction. -- (NSMutableDictionary *)queryForKey:(NSString *)key; - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStore.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStore.m deleted file mode 100644 index 78bc9d6598..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStore.m +++ /dev/null @@ -1,166 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKKeychainStore.h" - -#import "FBSDKDynamicFrameworkLoader.h" -#import "FBSDKLogger.h" -#import "FBSDKSettings.h" - -@implementation FBSDKKeychainStore - -- (instancetype)initWithService:(NSString *)service accessGroup:(NSString *)accessGroup -{ - if ((self = [super init])) { - _service = service ? [service copy] : [NSBundle mainBundle].bundleIdentifier; - _accessGroup = [accessGroup copy]; - NSAssert(_service, @"Keychain must be initialized with service"); - } - - return self; -} - -- (BOOL)setDictionary:(NSDictionary *)value forKey:(NSString *)key accessibility:(CFTypeRef)accessibility -{ - NSData *data = value == nil ? nil : [NSKeyedArchiver archivedDataWithRootObject:value]; - return [self setData:data forKey:key accessibility:accessibility]; -} - -- (NSDictionary *)dictionaryForKey:(NSString *)key -{ - NSData *data = [self dataForKey:key]; - if (!data) { - return nil; - } - - NSDictionary *dict = [NSKeyedUnarchiver unarchiveObjectWithData:data]; - if (![dict isKindOfClass:[NSDictionary class]]) { - return nil; - } - - return dict; -} - -- (BOOL)setString:(NSString *)value forKey:(NSString *)key accessibility:(CFTypeRef)accessibility -{ - NSData *data = [value dataUsingEncoding:NSUTF8StringEncoding]; - return [self setData:data forKey:key accessibility:accessibility]; -} - -- (NSString *)stringForKey:(NSString *)key -{ - NSData *data = [self dataForKey:key]; - if (!data) { - return nil; - } - - return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; -} - -- (BOOL)setData:(NSData *)value forKey:(NSString *)key accessibility:(CFTypeRef)accessibility -{ - if (!key) { - return NO; - } - -#if TARGET_OS_SIMULATOR - [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorInformational - logEntry:@"Falling back to storing access token in NSUserDefaults because of simulator bug"]; - [[NSUserDefaults standardUserDefaults] setObject:value forKey:key]; - - return [[NSUserDefaults standardUserDefaults] synchronize]; -#else - NSMutableDictionary *query = [self queryForKey:key]; - - OSStatus status; - if (value) { - NSMutableDictionary *attributesToUpdate = [NSMutableDictionary dictionary]; - [attributesToUpdate setObject:value forKey:[FBSDKDynamicFrameworkLoader loadkSecValueData]]; - - status = fbsdkdfl_SecItemUpdate((__bridge CFDictionaryRef)query, (__bridge CFDictionaryRef)attributesToUpdate); - if (status == errSecItemNotFound) { -#if !TARGET_OS_TV - if (@available(macOS 10.9, iOS 8, *)) { - if (accessibility) { - [query setObject:(__bridge id)(accessibility) forKey:[FBSDKDynamicFrameworkLoader loadkSecAttrAccessible]]; - } - } -#endif - [query setObject:value forKey:[FBSDKDynamicFrameworkLoader loadkSecValueData]]; - - status = fbsdkdfl_SecItemAdd((__bridge CFDictionaryRef)query, NULL); - } - } else { - status = fbsdkdfl_SecItemDelete((__bridge CFDictionaryRef)query); - if (status == errSecItemNotFound) { - status = errSecSuccess; - } - } - - return (status == errSecSuccess); -#endif -} - -- (NSData *)dataForKey:(NSString *)key -{ - if (!key) { - return nil; - } - -#if TARGET_OS_SIMULATOR - [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorInformational - logEntry:@"Falling back to loading access token from NSUserDefaults because of simulator bug"]; - return [[NSUserDefaults standardUserDefaults] dataForKey:key]; -#else - NSMutableDictionary *query = [self queryForKey:key]; - [query setObject:(id)kCFBooleanTrue forKey:[FBSDKDynamicFrameworkLoader loadkSecReturnData]]; - [query setObject:[FBSDKDynamicFrameworkLoader loadkSecMatchLimitOne] forKey:[FBSDKDynamicFrameworkLoader loadkSecMatchLimit]]; - - CFTypeRef data = nil; - OSStatus status = fbsdkdfl_SecItemCopyMatching((__bridge CFDictionaryRef)query, &data); - if (status != errSecSuccess) { - return nil; - } - - if (!data || CFGetTypeID(data) != CFDataGetTypeID()) { - return nil; - } - - NSData *ret = [NSData dataWithData:(__bridge NSData *)(data)]; - CFRelease(data); - - return ret; -#endif -} - -- (NSMutableDictionary *)queryForKey:(NSString *)key -{ - NSMutableDictionary *query = [NSMutableDictionary dictionary]; - [query setObject:[FBSDKDynamicFrameworkLoader loadkSecClassGenericPassword] forKey:[FBSDKDynamicFrameworkLoader loadkSecClass]]; - [query setObject:_service forKey:[FBSDKDynamicFrameworkLoader loadkSecAttrService]]; - [query setObject:key forKey:[FBSDKDynamicFrameworkLoader loadkSecAttrAccount]]; -#if !TARGET_IPHONE_SIMULATOR - if (_accessGroup) { - [query setObject:_accessGroup forKey:[FBSDKDynamicFrameworkLoader loadkSecAttrAccessGroup]]; - } -#endif - - return query; -} - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStoreViaBundleID.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStoreViaBundleID.h deleted file mode 100644 index 85ae2d0796..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStoreViaBundleID.h +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKKeychainStore.h" - -// This is the keychainstore defined in 3.17 that incorrectly used the bundle id as the service id -// and should NOT be used outside of this cache. -NS_SWIFT_NAME(KeychainStoreViaBundleID) -@interface FBSDKKeychainStoreViaBundleID : FBSDKKeychainStore - -// since this subclass represents the old keychainstore behavior, -// the designated initializer is just the `init`. -- (instancetype)init NS_DESIGNATED_INITIALIZER; - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStoreViaBundleID.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStoreViaBundleID.m deleted file mode 100644 index 6fdc12b340..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStoreViaBundleID.m +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKKeychainStoreViaBundleID.h" - -#import "FBSDKDynamicFrameworkLoader.h" -#import "FBSDKInternalUtility.h" - -@implementation FBSDKKeychainStoreViaBundleID - -- (instancetype)init -{ - return [super initWithService:[NSBundle mainBundle].bundleIdentifier accessGroup:nil]; -} - -- (instancetype)initWithService:(NSString *)service accessGroup:(NSString *)accessGroup -{ - return [self init]; -} - -- (NSMutableDictionary*)queryForKey:(NSString *)key -{ - NSMutableDictionary *query = [NSMutableDictionary dictionary]; - query[(__bridge id)[FBSDKDynamicFrameworkLoader loadkSecClass]] = (__bridge id)([FBSDKDynamicFrameworkLoader loadkSecClassGenericPassword]); - query[(__bridge id)[FBSDKDynamicFrameworkLoader loadkSecAttrService]] = self.service; - query[(__bridge id)[FBSDKDynamicFrameworkLoader loadkSecAttrGeneric]] = key; - -#if !TARGET_IPHONE_SIMULATOR - [FBSDKBasicUtility dictionary:query setObject:self.accessGroup forKey:[FBSDKDynamicFrameworkLoader loadkSecAttrAccessGroup]]; -#endif - - return query; -} - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKButton+Subclass.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKButton+Subclass.h deleted file mode 100644 index 6bb7db4112..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKButton+Subclass.h +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -#if SWIFT_PACKAGE -#import "FBSDKButton.h" -#else -#import -#endif - -#import "FBSDKIcon.h" - -NS_SWIFT_NAME(FBButtonImpressionTracking) -@protocol FBSDKButtonImpressionTracking - -@property (nonatomic, readonly, copy) NSDictionary *analyticsParameters; -@property (nonatomic, readonly, copy) NSString *impressionTrackingEventName; -@property (nonatomic, readonly, copy) NSString *impressionTrackingIdentifier; - -@end - -@interface FBSDKButton () - -@property (nonatomic, readonly, getter=isImplicitlyDisabled) BOOL implicitlyDisabled; - -- (void)logTapEventWithEventName:(NSString *)eventName - parameters:(NSDictionary *)parameters; -- (void)checkImplicitlyDisabled; -- (void)configureButton; -- (void)configureWithIcon:(FBSDKIcon *)icon - title:(NSString *)title - backgroundColor:(UIColor *)backgroundColor - highlightedColor:(UIColor *)highlightedColor; -- (void)configureWithIcon:(FBSDKIcon *)icon - title:(NSString *)title - backgroundColor:(UIColor *)backgroundColor - highlightedColor:(UIColor *)highlightedColor - selectedTitle:(NSString *)selectedTitle - selectedIcon:(FBSDKIcon *)selectedIcon - selectedColor:(UIColor *)selectedColor - selectedHighlightedColor:(UIColor *)selectedHighlightedColor; -- (UIColor *)defaultBackgroundColor; -- (UIColor *)defaultDisabledColor; -- (UIFont *)defaultFont; -- (UIColor *)defaultHighlightedColor; -- (FBSDKIcon *)defaultIcon; -- (UIColor *)defaultSelectedColor; -- (CGSize)sizeThatFits:(CGSize)size title:(NSString *)title; - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKCloseIcon.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKCloseIcon.h deleted file mode 100644 index 79ab329fe4..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKCloseIcon.h +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import - -NS_SWIFT_NAME(FBCloseIcon) -@interface FBSDKCloseIcon : NSObject - -- (UIImage *)imageWithSize:(CGSize)size; - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKCloseIcon.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKCloseIcon.m deleted file mode 100644 index 244efcaad8..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKCloseIcon.m +++ /dev/null @@ -1,93 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKCloseIcon.h" - -@implementation FBSDKCloseIcon - -#pragma mark - Public API - -- (UIImage *)imageWithSize:(CGSize)size -{ - CGFloat scale = [UIScreen mainScreen].scale; - UIGraphicsBeginImageContextWithOptions(size, NO, scale); - CGContextRef context = UIGraphicsGetCurrentContext(); - - CGFloat iconSize = MIN(size.width, size.height); - - CGRect rect = CGRectMake((size.width - iconSize) / 2, (size.height - iconSize) / 2, iconSize, iconSize); - CGFloat step = iconSize / 12; - - // shadow - rect = CGRectIntegral(CGRectInset(rect, step, step)); - NSArray *colors = @[ - (__bridge id)[UIColor colorWithWhite:0.0 alpha:0.7].CGColor, - (__bridge id)[UIColor colorWithWhite:0.0 alpha:0.3].CGColor, - (__bridge id)[UIColor colorWithWhite:0.0 alpha:0.1].CGColor, - (__bridge id)[UIColor colorWithWhite:0.0 alpha:0.0].CGColor, - ]; - CGFloat locations[4] = { - 0.70, - 0.80, - 0.90, - 1.0, - }; - CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray(); - CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, (__bridge CFArrayRef)colors, locations); - CGColorSpaceRelease(colorSpace); - CGPoint center = CGPointMake(CGRectGetMidX(rect) - step / 6, CGRectGetMidY(rect) + step / 4); - CGContextDrawRadialGradient(context, gradient, center, 0.0, center, (CGRectGetWidth(rect) - step / 2) / 2, 0); - CGGradientRelease(gradient); - - // outer circle - rect = CGRectIntegral(CGRectInset(rect, step, step)); - [[UIColor whiteColor] setFill]; - CGContextFillEllipseInRect(context, rect); - - // inner circle - rect = CGRectIntegral(CGRectInset(rect, step, step)); - [[UIColor blackColor] setFill]; - CGContextFillEllipseInRect(context, rect); - - // cross - rect = CGRectIntegral(CGRectInset(rect, step, step)); - CGFloat lineWidth = step * 5 / 4; - rect.origin.y = CGRectGetMidY(rect) - lineWidth / 2; - rect.size.height = lineWidth; - [[UIColor whiteColor] setFill]; - CGContextTranslateCTM(context, size.width / 2, size.height / 2); - CGContextRotateCTM(context, M_PI_4); - CGContextTranslateCTM(context, -size.width / 2, -size.height / 2); - CGContextFillRect(context, rect); - CGContextTranslateCTM(context, size.width / 2, size.height / 2); - CGContextRotateCTM(context, M_PI_2); - CGContextTranslateCTM(context, -size.width / 2, -size.height / 2); - CGContextFillRect(context, rect); - - UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - return image; -} - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKColor.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKColor.h deleted file mode 100644 index f18c98db8f..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKColor.h +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import - -UIColor *FBSDKUIColorWithRGBA(uint8_t r, uint8_t g, uint8_t b, CGFloat a); -UIColor *FBSDKUIColorWithRGB(uint8_t r, uint8_t g, uint8_t b); - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKColor.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKColor.m deleted file mode 100644 index 2d27478f41..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKColor.m +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKColor.h" - -static const CGFloat kFBRGBMax = 255.0; - -UIColor *FBSDKUIColorWithRGBA(uint8_t r, uint8_t g, uint8_t b, CGFloat a) -{ - return [UIColor colorWithRed:(r / kFBRGBMax) green:(g / kFBRGBMax) blue:(b / kFBRGBMax) alpha:a]; -} - -UIColor *FBSDKUIColorWithRGB(uint8_t r, uint8_t g, uint8_t b) -{ - return FBSDKUIColorWithRGBA(r, g, b, 1.0); -} - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKIcon.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKIcon.h deleted file mode 100644 index ca78c86442..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKIcon.h +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -NS_SWIFT_NAME(Icon) -@interface FBSDKIcon : NSObject - -- (instancetype)initWithColor:(UIColor *)color NS_DESIGNATED_INITIALIZER; - -@property (nonatomic, strong, readonly) UIColor *color; - -- (UIImage *)imageWithSize:(CGSize)size; - -- (CGPathRef)pathWithSize:(CGSize)size; - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKIcon.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKIcon.m deleted file mode 100644 index b46a8d6c1b..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKIcon.m +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKIcon.h" - -@implementation FBSDKIcon - -#pragma mark - Object Lifecycle - -- (instancetype)initWithColor:(UIColor *)color -{ - if ((self = [super init])) { - _color = [color copy]; - } - return self; -} - -- (instancetype)init -{ - return [self initWithColor:[UIColor whiteColor]]; -} - -#pragma mark - Public API - -- (UIImage *)imageWithSize:(CGSize)size -{ - if ((size.width == 0) || (size.height == 0)) { - return nil; - } - CGFloat scale = [UIScreen mainScreen].scale; - UIGraphicsBeginImageContextWithOptions(size, NO, scale); - CGContextRef context = UIGraphicsGetCurrentContext(); - CGPathRef path = [self pathWithSize:size]; - CGContextAddPath(context, path); - CGContextSetFillColorWithColor(context, self.color.CGColor); - CGContextFillPath(context); - UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - return image; -} - -- (CGPathRef)pathWithSize:(CGSize)size -{ - return NULL; -} - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKLogo.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKLogo.h deleted file mode 100644 index b7432a690e..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKLogo.h +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -#import "FBSDKIcon.h" - -NS_SWIFT_NAME(FBLogo) -@interface FBSDKLogo : FBSDKIcon - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKLogo.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKLogo.m deleted file mode 100644 index f13364f061..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKLogo.m +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKLogo.h" - -@implementation FBSDKLogo - -- (CGPathRef)pathWithSize:(CGSize)size -{ - CGFloat originalCanvasWidth = 1366; - CGFloat originalCanvasHeight = 1366; - - CGAffineTransform transformValue = CGAffineTransformMakeScale(size.width / originalCanvasWidth, size.height / originalCanvasHeight); - - UIBezierPath* path = [UIBezierPath bezierPath]; - [path moveToPoint: CGPointMake(1365.33, 682.67)]; - [path addCurveToPoint: CGPointMake(682.67, -0) - controlPoint1: CGPointMake(1365.33, 305.64) - controlPoint2: CGPointMake(1059.69, -0)]; - [path addCurveToPoint: CGPointMake(0, 682.67) - controlPoint1: CGPointMake(305.64, -0) - controlPoint2: CGPointMake(0, 305.64)]; - [path addCurveToPoint: CGPointMake(576, 1357.04) - controlPoint1: CGPointMake(0, 1023.41) - controlPoint2: CGPointMake(249.64, 1305.83)]; - [path addLineToPoint: CGPointMake(576, 880)]; - [path addLineToPoint: CGPointMake(402.67, 880)]; - [path addLineToPoint: CGPointMake(402.67, 682.67)]; - [path addLineToPoint: CGPointMake(576, 682.67)]; - [path addLineToPoint: CGPointMake(576, 532.27)]; - [path addCurveToPoint: CGPointMake(833.85, 266.67) - controlPoint1: CGPointMake(576, 361.17) - controlPoint2: CGPointMake(677.92, 266.67)]; - [path addCurveToPoint: CGPointMake(986.67, 280) - controlPoint1: CGPointMake(908.54, 266.67) - controlPoint2: CGPointMake(986.67, 280)]; - [path addLineToPoint: CGPointMake(986.67, 448)]; - [path addLineToPoint: CGPointMake(900.58, 448)]; - [path addCurveToPoint: CGPointMake(789.33, 554.61) - controlPoint1: CGPointMake(815.78, 448) - controlPoint2: CGPointMake(789.33, 500.62)]; - [path addLineToPoint: CGPointMake(789.33, 682.67)]; - [path addLineToPoint: CGPointMake(978.67, 682.67)]; - [path addLineToPoint: CGPointMake(948.4, 880)]; - [path addLineToPoint: CGPointMake(789.33, 880)]; - [path addLineToPoint: CGPointMake(789.33, 1357.04)]; - [path addCurveToPoint: CGPointMake(1365.33, 682.67) - controlPoint1: CGPointMake(1115.69, 1305.83) - controlPoint2: CGPointMake(1365.33, 1023.41)]; - [path closePath]; - [path applyTransform:transformValue]; - - return [path CGPath]; -} - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKMaleSilhouetteIcon.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKMaleSilhouetteIcon.h deleted file mode 100644 index cad25b6bde..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKMaleSilhouetteIcon.h +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import - -#import "FBSDKIcon.h" - -NS_SWIFT_NAME(FBMaleSilhouetteIcon) -@interface FBSDKMaleSilhouetteIcon : FBSDKIcon - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKMaleSilhouetteIcon.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKMaleSilhouetteIcon.m deleted file mode 100644 index bdd5912524..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKMaleSilhouetteIcon.m +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKMaleSilhouetteIcon.h" - -@implementation FBSDKMaleSilhouetteIcon - -- (CGPathRef)pathWithSize:(CGSize)size -{ - CGAffineTransform transformValue = CGAffineTransformMakeScale(size.width / 158.783, size.height / 158.783); - CGAffineTransform *transform = &transformValue; - CGMutablePathRef path = CGPathCreateMutable(); - CGPathMoveToPoint(path, transform, 158.783, 158.783); - CGPathAddCurveToPoint(path, transform, 156.39, 131.441, 144.912, 136.964, 105.607, 117.32); - CGPathAddCurveToPoint(path, transform, 103.811, 113.941, 103.348, 108.8965, 103.013, 107.4781); - CGPathAddLineToPoint(path, transform, 100.434, 106.7803); - CGPathAddCurveToPoint(path, transform, 97.2363, 82.7701, 100.67, 101.5845, 106.006, 75.2188); - CGPathAddCurveToPoint(path, transform, 107.949, 76.2959, 108.268, 70.7417, 108.971, 66.5743); - CGPathAddCurveToPoint(path, transform, 109.673, 62.4068, 110.864, 58.9082, 107.139, 58.9082); - CGPathAddCurveToPoint(path, transform, 107.94, 42.7652, 110.299, 31.3848, 101.335, 23.3072); - CGPathAddCurveToPoint(path, transform, 92.3808, 15.23781, 87.874, 15.52349, 95.0483, 9.6036128); - CGPathAddCurveToPoint(path, transform, 91.2319, 8.892613, 70.2036, 12.01861, 57.4487, 23.3072); - CGPathAddCurveToPoint(path, transform, 48.4121, 31.3042, 50.8437, 42.7652, 51.6445, 58.9082); - CGPathAddCurveToPoint(path, transform, 47.9194, 58.9082, 49.1108, 62.4068, 49.813, 66.5743); - CGPathAddCurveToPoint(path, transform, 50.5156, 70.7417, 50.8349, 76.2959, 52.7778, 75.2188); - CGPathAddCurveToPoint(path, transform, 58.1138, 110.1135, 61.5478, 82.7701, 58.3501, 106.7803); - CGPathAddLineToPoint(path, transform, 55.7705, 107.4781); - CGPathAddCurveToPoint(path, transform, 55.4355, 108.8965, 54.9722, 113.941, 53.1767, 117.32); - CGPathAddCurveToPoint(path, transform, 13.8711, 136.964, 2.3945, 131.441, 0.0, 158.783); - CGPathAddLineToPoint(path, transform, 158.783, 158.783); - CGPathRef result = CGPathCreateCopy(path); - CGPathRelease(path); - return CFAutorelease(result); -} - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKUIUtility.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKUIUtility.h deleted file mode 100644 index dfa023356c..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKUIUtility.h +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -/** - Insets a CGSize with the insets in a UIEdgeInsets. - */ -static inline CGSize FBSDKEdgeInsetsInsetSize(CGSize size, UIEdgeInsets insets) -{ - CGRect rect = CGRectZero; - rect.size = size; - return UIEdgeInsetsInsetRect(rect, insets).size; -} - -/** - Outsets a CGSize with the insets in a UIEdgeInsets. - */ -static inline CGSize FBSDKEdgeInsetsOutsetSize(CGSize size, UIEdgeInsets insets) -{ - return CGSizeMake(insets.left + size.width + insets.right, - insets.top + size.height + insets.bottom); -} - -/** - Limits a CGFloat value, using the scale to limit to pixels (instead of points). - - - The limitFunction is frequention floorf, ceilf or roundf. If the scale is 2.0, - you may get back values of *.5 to correspond to pixels. - */ -typedef float (*FBSDKLimitFunctionType)(float); -static inline CGFloat FBSDKPointsForScreenPixels(FBSDKLimitFunctionType limitFunction, - CGFloat screenScale, - CGFloat pointValue) -{ - return limitFunction(pointValue * screenScale) / screenScale; -} - -static inline CGSize FBSDKTextSize(NSString *text, - UIFont *font, - CGSize constrainedSize, - NSLineBreakMode lineBreakMode) -{ - if (!text) { - return CGSizeZero; - } - - NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; - paragraphStyle.lineBreakMode = lineBreakMode; - NSDictionary *attributes = @{ - NSFontAttributeName: font, - NSParagraphStyleAttributeName: paragraphStyle, - }; - NSAttributedString *attributedString = [[NSAttributedString alloc] initWithString:text attributes:attributes]; - CGSize size = [attributedString boundingRectWithSize:constrainedSize - options:(NSStringDrawingUsesDeviceMetrics | - NSStringDrawingUsesLineFragmentOrigin | - NSStringDrawingUsesFontLeading) - context:NULL].size; - return CGSizeMake(ceilf(size.width), ceilf(size.height)); -} diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKViewImpressionTracker.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKViewImpressionTracker.h deleted file mode 100644 index d69ee86af0..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKViewImpressionTracker.h +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -NS_SWIFT_NAME(ViewImpressionTracker) -@interface FBSDKViewImpressionTracker : NSObject - -+ (instancetype)impressionTrackerWithEventName:(NSString *)eventName; - -@property (nonatomic, copy, readonly) NSString *eventName; - -- (void)logImpressionWithIdentifier:(NSString *)identifier parameters:(NSDictionary *)parameters; - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKViewImpressionTracker.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKViewImpressionTracker.m deleted file mode 100644 index f20f584443..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKViewImpressionTracker.m +++ /dev/null @@ -1,97 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKViewImpressionTracker.h" - -#import "FBSDKAccessToken.h" -#import "FBSDKAppEvents+Internal.h" - -@implementation FBSDKViewImpressionTracker -{ - NSMutableSet *_trackedImpressions; -} - -#pragma mark - Class Methods - -+ (instancetype)impressionTrackerWithEventName:(NSString *)eventName -{ - static NSMutableDictionary *_impressionTrackers = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - _impressionTrackers = [[NSMutableDictionary alloc] init]; - }); - // Maintains a single instance of an impression tracker for each event name - FBSDKViewImpressionTracker *impressionTracker = _impressionTrackers[eventName]; - if (!impressionTracker) { - impressionTracker = [[self alloc] initWithEventName:eventName]; - _impressionTrackers[eventName] = impressionTracker; - } - return impressionTracker; -} - -#pragma mark - Object Lifecycle - -- (instancetype)initWithEventName:(NSString *)eventName -{ - if ((self = [super init])) { - _eventName = [eventName copy]; - _trackedImpressions = [[NSMutableSet alloc] init]; - - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(_applicationDidEnterBackgroundNotification:) - name:UIApplicationDidEnterBackgroundNotification - object:[UIApplication sharedApplication]]; - } - return self; -} - -- (void)dealloc -{ - [[NSNotificationCenter defaultCenter] removeObserver:self]; -} - -#pragma mark - Public API - -- (void)logImpressionWithIdentifier:(NSString *)identifier parameters:(NSDictionary *)parameters -{ - NSMutableDictionary *keys = [NSMutableDictionary dictionary]; - keys[@"__view_impression_identifier__"] = identifier; - [keys addEntriesFromDictionary:parameters]; - NSDictionary *impressionKey = [keys copy]; - // Ensure that each impression is only tracked once - if ([_trackedImpressions containsObject:impressionKey]) { - return; - } - [_trackedImpressions addObject:impressionKey]; - - [FBSDKAppEvents logInternalEvent:self.eventName - parameters:parameters - isImplicitlyLogged:YES - accessToken:[FBSDKAccessToken currentAccessToken]]; -} - -#pragma mark - Helper Methods - -- (void)_applicationDidEnterBackgroundNotification:(NSNotification *)notification -{ - // reset all tracked impressions when the app backgrounds so we will start tracking them again the next time they - // are triggered. - [_trackedImpressions removeAllObjects]; -} - -@end diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialog.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialog.h deleted file mode 100644 index 10daa67f7b..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialog.h +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import - -NS_SWIFT_NAME(WebDialogDelegate) -@protocol FBSDKWebDialogDelegate; - -NS_SWIFT_NAME(WebDialog) -@interface FBSDKWebDialog : NSObject - -+ (instancetype)showWithName:(NSString *)name - parameters:(NSDictionary *)parameters - delegate:(id)delegate; - -@property (nonatomic, assign, getter=shouldDeferVisibility) BOOL deferVisibility; -@property (nonatomic, weak) id delegate; -@property (nonatomic, copy) NSString *name; -@property (nonatomic, copy) NSDictionary *parameters; - -- (BOOL)show; - -@end - -NS_SWIFT_NAME(WebDialogDelegate) -@protocol FBSDKWebDialogDelegate - -- (void)webDialog:(FBSDKWebDialog *)webDialog didCompleteWithResults:(NSDictionary *)results; -- (void)webDialog:(FBSDKWebDialog *)webDialog didFailWithError:(NSError *)error; -- (void)webDialogDidCancel:(FBSDKWebDialog *)webDialog; - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialog.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialog.m deleted file mode 100644 index 66935ab5c7..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialog.m +++ /dev/null @@ -1,350 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKWebDialog.h" - -#import "FBSDKAccessToken.h" -#import "FBSDKDynamicFrameworkLoader.h" -#import "FBSDKInternalUtility.h" -#import "FBSDKLogger.h" -#import "FBSDKSettings.h" -#import "FBSDKTypeUtility.h" -#import "FBSDKWebDialogView.h" - -#define FBSDK_WEB_DIALOG_SHOW_ANIMATION_DURATION 0.2 -#define FBSDK_WEB_DIALOG_DISMISS_ANIMATION_DURATION 0.3 - -typedef void (^FBSDKBoolBlock)(BOOL finished); - -static FBSDKWebDialog *g_currentDialog = nil; - -@interface FBSDKWebDialog () -@end - -@implementation FBSDKWebDialog -{ - UIView *_backgroundView; - FBSDKWebDialogView *_dialogView; -} - -#pragma mark - Class Methods - -+ (instancetype)showWithName:(NSString *)name - parameters:(NSDictionary *)parameters - delegate:(id)delegate -{ - FBSDKWebDialog *dialog = [[self alloc] init]; - dialog.name = name; - dialog.parameters = parameters; - dialog.delegate = delegate; - [dialog show]; - return dialog; -} - -#pragma mark - Object Lifecycle - -- (void)dealloc -{ - [[NSNotificationCenter defaultCenter] removeObserver:self]; - _dialogView.delegate = nil; - [_dialogView removeFromSuperview]; - [_backgroundView removeFromSuperview]; -} - -#pragma mark - Public Methods - -- (BOOL)show -{ - if (g_currentDialog == self) { - return NO; - } - [g_currentDialog _dismissAnimated:YES]; - - NSError *error; - NSURL *URL = [self _generateURL:&error]; - if (!URL) { - [self _failWithError:error]; - return NO; - } - - g_currentDialog = self; - - UIWindow *window = [FBSDKInternalUtility findWindow]; - if (!window) { - [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors - formatString:@"There are no valid ViewController to present FBSDKWebDialog", nil]; - [self _failWithError:nil]; - return NO; - } - - CGRect frame = [self _applicationFrameForOrientation]; - _dialogView = [[FBSDKWebDialogView alloc] initWithFrame:frame]; - - _dialogView.delegate = self; - [_dialogView loadURL:URL]; - - if (!_deferVisibility) { - [self _showWebView]; - } - - return YES; -} - -#pragma mark - FBSDKWebDialogViewDelegate - -- (void)webDialogView:(FBSDKWebDialogView *)webDialogView didCompleteWithResults:(NSDictionary *)results -{ - [self _completeWithResults:results]; -} - -- (void)webDialogView:(FBSDKWebDialogView *)webDialogView didFailWithError:(NSError *)error -{ - [self _failWithError:error]; -} - -- (void)webDialogViewDidCancel:(FBSDKWebDialogView *)webDialogView -{ - [self _cancel]; -} - -- (void)webDialogViewDidFinishLoad:(FBSDKWebDialogView *)webDialogView -{ - if (_deferVisibility) { - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.05 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - if (self->_dialogView) { - [self _showWebView]; - } - }); - } -} - -#pragma mark - Notifications - -- (void)_addObservers -{ - NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; - [nc addObserver:self - selector:@selector(_deviceOrientationDidChangeNotification:) - name:UIDeviceOrientationDidChangeNotification - object:nil]; -} - -- (void)_deviceOrientationDidChangeNotification:(NSNotification *)notification -{ - BOOL animated = [FBSDKTypeUtility boolValue:notification.userInfo[@"UIDeviceOrientationRotateAnimatedUserInfoKey"]]; - Class CATransactionClass = fbsdkdfl_CATransactionClass(); - CFTimeInterval animationDuration = (animated ? [CATransactionClass animationDuration] : 0.0); - [self _updateViewsWithScale:1.0 alpha:1.0 animationDuration:animationDuration completion:^(BOOL finished) { - if (finished) { - [self->_dialogView setNeedsDisplay]; - } - }]; -} - -- (void)_removeObservers -{ - NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; - [nc removeObserver:self name:UIDeviceOrientationDidChangeNotification object:nil]; -} - -#pragma mark - Helper Methods - -- (void)_cancel -{ - FBSDKWebDialog *dialog = self; - [self _dismissAnimated:YES]; // may cause the receiver to be released - [_delegate webDialogDidCancel:dialog]; -} - -- (void)_completeWithResults:(NSDictionary *)results -{ - FBSDKWebDialog *dialog = self; - [self _dismissAnimated:YES]; // may cause the receiver to be released - [_delegate webDialog:dialog didCompleteWithResults:results]; -} - -- (void)_dismissAnimated:(BOOL)animated -{ - [self _removeObservers]; - UIView *backgroundView = _backgroundView; - _backgroundView = nil; - FBSDKWebDialogView *dialogView = _dialogView; - _dialogView.delegate = nil; - _dialogView = nil; - void(^didDismiss)(BOOL) = ^(BOOL finished){ - [backgroundView removeFromSuperview]; - [dialogView removeFromSuperview]; - }; - if (animated) { - [UIView animateWithDuration:FBSDK_WEB_DIALOG_DISMISS_ANIMATION_DURATION animations:^{ - dialogView.alpha = 0.0; - backgroundView.alpha = 0.0; - } completion:didDismiss]; - } else { - didDismiss(YES); - } - if (g_currentDialog == self) { - g_currentDialog = nil; - } -} - -- (void)_failWithError:(NSError *)error -{ - // defer so that the consumer is guaranteed to have an opportunity to set the delegate before we fail - dispatch_async(dispatch_get_main_queue(), ^{ - [self _dismissAnimated:YES]; - [self->_delegate webDialog:self didFailWithError:error]; - }); -} - -- (NSURL *)_generateURL:(NSError **)errorRef -{ - NSMutableDictionary *parameters = [[NSMutableDictionary alloc] init]; - parameters[@"display"] = @"touch"; - parameters[@"sdk"] = [NSString stringWithFormat:@"ios-%@", [FBSDKSettings sdkVersion]]; - parameters[@"redirect_uri"] = @"fbconnect://success"; - [FBSDKBasicUtility dictionary:parameters setObject:[FBSDKSettings appID] forKey:@"app_id"]; - [FBSDKBasicUtility dictionary:parameters - setObject:[FBSDKAccessToken currentAccessToken].tokenString - forKey:@"access_token"]; - [parameters addEntriesFromDictionary:self.parameters]; - return [FBSDKInternalUtility facebookURLWithHostPrefix:@"m" - path:[@"/dialog/" stringByAppendingString:self.name] - queryParameters:parameters - error:errorRef]; -} - -- (BOOL)_showWebView -{ - UIWindow *window = [FBSDKInternalUtility findWindow]; - if (!window) { - [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors - formatString:@"There are no valid ViewController to present FBSDKWebDialog", nil]; - [self _failWithError:nil]; - return NO; - } - - [self _addObservers]; - - _backgroundView = [[UIView alloc] initWithFrame:window.bounds]; - _backgroundView.alpha = 0.0; - _backgroundView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight); - _backgroundView.backgroundColor = [UIColor colorWithWhite:0.3 alpha:0.8]; - [window addSubview:_backgroundView]; - [window addSubview:_dialogView]; - - [_dialogView becomeFirstResponder]; // dismisses the keyboard if it there was another first responder with it - [self _updateViewsWithScale:0.001 alpha:0.0 animationDuration:0.0 completion:NULL]; - [self _updateViewsWithScale:1.1 alpha:1.0 animationDuration:FBSDK_WEB_DIALOG_SHOW_ANIMATION_DURATION completion:^(BOOL finished1) { - [self _updateViewsWithScale:0.9 alpha:1.0 animationDuration:FBSDK_WEB_DIALOG_SHOW_ANIMATION_DURATION completion:^(BOOL finished2) { - [self _updateViewsWithScale:1.0 alpha:1.0 animationDuration:FBSDK_WEB_DIALOG_SHOW_ANIMATION_DURATION completion:NULL]; - }]; - }]; - return YES; -} - -- (CGAffineTransform)_transformForOrientation -{ - // iOS 8 simply adjusts the application frame to adapt to the current orientation and deprecated the concept of - // interface orientations - if ([FBSDKInternalUtility shouldManuallyAdjustOrientation]) { - switch ([UIApplication sharedApplication].statusBarOrientation) { - case UIInterfaceOrientationLandscapeLeft: - return CGAffineTransformMakeRotation(M_PI * 1.5); - case UIInterfaceOrientationLandscapeRight: - return CGAffineTransformMakeRotation(M_PI/2); - case UIInterfaceOrientationPortraitUpsideDown: - return CGAffineTransformMakeRotation(-M_PI); - case UIInterfaceOrientationPortrait: - case UIInterfaceOrientationUnknown: - // don't adjust the orientation - break; - } - } - return CGAffineTransformIdentity; -} - -- (CGRect)_applicationFrameForOrientation -{ - CGRect applicationFrame = _dialogView.window.screen.bounds; - - UIEdgeInsets insets = UIEdgeInsetsZero; -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_11_0 - if (@available(iOS 11.0, *)) { - insets = _dialogView.window.safeAreaInsets; - } -#endif - - if (insets.top == 0.0) { - insets.top = [[UIApplication sharedApplication] statusBarFrame].size.height; - } - applicationFrame.origin.x += insets.left; - applicationFrame.origin.y += insets.top; - applicationFrame.size.width -= insets.left + insets.right; - applicationFrame.size.height -= insets.top + insets.bottom; - - if ([FBSDKInternalUtility shouldManuallyAdjustOrientation]) { - switch ([UIApplication sharedApplication].statusBarOrientation) { - case UIInterfaceOrientationLandscapeLeft: - case UIInterfaceOrientationLandscapeRight: - return CGRectMake(0, 0, CGRectGetHeight(applicationFrame), CGRectGetWidth(applicationFrame)); - case UIInterfaceOrientationPortraitUpsideDown: - case UIInterfaceOrientationPortrait: - case UIInterfaceOrientationUnknown: - return applicationFrame; - } - } else { - return applicationFrame; - } -} - -- (void)_updateViewsWithScale:(CGFloat)scale - alpha:(CGFloat)alpha - animationDuration:(CFTimeInterval)animationDuration - completion:(FBSDKBoolBlock)completion -{ - CGAffineTransform transform; - CGRect applicationFrame = [self _applicationFrameForOrientation]; - if (scale == 1.0) { - transform = _dialogView.transform; - _dialogView.transform = CGAffineTransformIdentity; - _dialogView.frame = applicationFrame; - _dialogView.transform = transform; - } - transform = CGAffineTransformScale([self _transformForOrientation], scale, scale); - void(^updateBlock)(void) = ^{ - self->_dialogView.transform = transform; - self->_dialogView.center = CGPointMake(CGRectGetMidX(applicationFrame), - CGRectGetMidY(applicationFrame)); - self->_dialogView.alpha = alpha; - self->_backgroundView.alpha = alpha; - }; - if (animationDuration == 0.0) { - updateBlock(); - } else { - [UIView animateWithDuration:animationDuration animations:updateBlock completion:completion]; - } -} - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialogView.h b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialogView.h deleted file mode 100644 index e24704e9f4..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialogView.h +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import - -@protocol FBSDKWebDialogViewDelegate; - -NS_SWIFT_NAME(FBWebDialogView) -@interface FBSDKWebDialogView : UIView - -@property (nonatomic, weak) id delegate; - -- (void)loadURL:(NSURL *)URL; -- (void)stopLoading; - -@end - -NS_SWIFT_NAME(WebDialogViewDelegate) -@protocol FBSDKWebDialogViewDelegate - -- (void)webDialogView:(FBSDKWebDialogView *)webDialogView didCompleteWithResults:(NSDictionary *)results; -- (void)webDialogView:(FBSDKWebDialogView *)webDialogView didFailWithError:(NSError *)error; -- (void)webDialogViewDidCancel:(FBSDKWebDialogView *)webDialogView; -- (void)webDialogViewDidFinishLoad:(FBSDKWebDialogView *)webDialogView; - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialogView.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialogView.m deleted file mode 100644 index 46f380b3fd..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialogView.m +++ /dev/null @@ -1,201 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKWebDialogView.h" - -#import - -#import "FBSDKCloseIcon.h" -#import "FBSDKError.h" -#import "FBSDKInternalUtility.h" -#import "FBSDKTypeUtility.h" - -#define FBSDK_WEB_DIALOG_VIEW_BORDER_WIDTH 10.0 - -@interface FBSDKWebDialogView () -@end - -@implementation FBSDKWebDialogView -{ - UIButton *_closeButton; - UIActivityIndicatorView *_loadingView; - WKWebView *_webView; -} - -#pragma mark - Object Lifecycle - -- (instancetype)initWithFrame:(CGRect)frame -{ - if ((self = [super initWithFrame:frame])) { - self.backgroundColor = [UIColor clearColor]; - self.opaque = NO; - - _webView = [[WKWebView alloc] initWithFrame:CGRectZero]; - _webView.navigationDelegate = self; - [self addSubview:_webView]; - - _closeButton = [UIButton buttonWithType:UIButtonTypeCustom]; - UIImage *closeImage = [[[FBSDKCloseIcon alloc] init] imageWithSize:CGSizeMake(29.0, 29.0)]; - [_closeButton setImage:closeImage forState:UIControlStateNormal]; - [_closeButton setTitleColor:[UIColor colorWithRed:167.0/255.0 - green:184.0/255.0 - blue:216.0/255.0 - alpha:1.0] forState:UIControlStateNormal]; - [_closeButton setTitleColor:[UIColor whiteColor] forState:UIControlStateHighlighted]; - _closeButton.showsTouchWhenHighlighted = YES; - [_closeButton sizeToFit]; - [self addSubview:_closeButton]; - [_closeButton addTarget:self action:@selector(_close:) forControlEvents:UIControlEventTouchUpInside]; - - _loadingView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; - _loadingView.color = [UIColor grayColor]; - [_webView addSubview:_loadingView]; - } - return self; -} - -- (void)dealloc -{ - _webView.navigationDelegate = nil; -} - -#pragma mark - Public Methods - -- (void)loadURL:(NSURL *)URL -{ - [_loadingView startAnimating]; - [_webView loadRequest:[NSURLRequest requestWithURL:URL]]; -} - -- (void)stopLoading -{ - [_webView stopLoading]; -} - -#pragma mark - Layout - -- (void)drawRect:(CGRect)rect -{ - CGContextRef context = UIGraphicsGetCurrentContext(); - CGContextSaveGState(context); - [self.backgroundColor setFill]; - CGContextFillRect(context, self.bounds); - [[UIColor blackColor] setStroke]; - CGContextSetLineWidth(context, 1.0 / self.layer.contentsScale); - CGContextStrokeRect(context, _webView.frame); - CGContextRestoreGState(context); - [super drawRect:rect]; -} - -- (void)layoutSubviews -{ - [super layoutSubviews]; - - CGRect bounds = self.bounds; - if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { - CGFloat horizontalInset = CGRectGetWidth(bounds) * 0.2; - CGFloat verticalInset = CGRectGetHeight(bounds) * 0.2; - UIEdgeInsets iPadInsets = UIEdgeInsetsMake(verticalInset, horizontalInset, verticalInset, horizontalInset); - bounds = UIEdgeInsetsInsetRect(bounds, iPadInsets); - } - UIEdgeInsets webViewInsets = UIEdgeInsetsMake(FBSDK_WEB_DIALOG_VIEW_BORDER_WIDTH, - FBSDK_WEB_DIALOG_VIEW_BORDER_WIDTH, - FBSDK_WEB_DIALOG_VIEW_BORDER_WIDTH, - FBSDK_WEB_DIALOG_VIEW_BORDER_WIDTH); - _webView.frame = CGRectIntegral(UIEdgeInsetsInsetRect(bounds, webViewInsets)); - - CGRect webViewBounds = _webView.bounds; - _loadingView.center = CGPointMake(CGRectGetMidX(webViewBounds), CGRectGetMidY(webViewBounds)); - - if (CGRectGetHeight(webViewBounds) == 0.0) { - _closeButton.alpha = 0.0; - } else { - _closeButton.alpha = 1.0; - CGRect closeButtonFrame = _closeButton.bounds; - closeButtonFrame.origin = bounds.origin; - _closeButton.frame = CGRectIntegral(closeButtonFrame); - } -} - -#pragma mark - Actions - -- (void)_close:(id)sender -{ - [_delegate webDialogViewDidCancel:self]; -} - -#pragma mark - WKNavigationDelegate - -- (void)webView:(WKWebView *)webView didFailNavigation:(WKNavigation *)navigation withError:(NSError *)error -{ - [_loadingView stopAnimating]; - - // 102 == WebKitErrorFrameLoadInterruptedByPolicyChange - // NSURLErrorCancelled == "Operation could not be completed", note NSURLErrorCancelled occurs when the user clicks - // away before the page has completely loaded, if we find cases where we want this to result in dialog failure - // (usually this just means quick-user), then we should add something more robust here to account for differences in - // application needs - if (!(([error.domain isEqualToString:NSURLErrorDomain] && error.code == NSURLErrorCancelled) || - ([error.domain isEqualToString:@"WebKitErrorDomain"] && error.code == 102))) { - [_delegate webDialogView:self didFailWithError:error]; - } -} - -- (void)webView:(WKWebView *)webView -decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction -decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler -{ - NSURL *URL = navigationAction.request.URL; - - if ([URL.scheme isEqualToString:@"fbconnect"]) { - NSMutableDictionary *parameters = [[FBSDKBasicUtility dictionaryWithQueryString:URL.query] mutableCopy]; - [parameters addEntriesFromDictionary:[FBSDKBasicUtility dictionaryWithQueryString:URL.fragment]]; - if ([URL.resourceSpecifier hasPrefix:@"//cancel"]) { - NSInteger errorCode = [FBSDKTypeUtility integerValue:parameters[@"error_code"]]; - if (errorCode) { - NSString *errorMessage = [FBSDKTypeUtility stringValue:parameters[@"error_msg"]]; - NSError *error = [FBSDKError errorWithCode:errorCode message:errorMessage]; - [_delegate webDialogView:self didFailWithError:error]; - } else { - [_delegate webDialogViewDidCancel:self]; - } - } else { - [_delegate webDialogView:self didCompleteWithResults:parameters]; - } - decisionHandler(WKNavigationActionPolicyCancel); - } else if (navigationAction.navigationType == WKNavigationTypeLinkActivated) { - [[UIApplication sharedApplication] openURL:URL]; - decisionHandler(WKNavigationActionPolicyCancel); - } else { - decisionHandler(WKNavigationActionPolicyAllow); - } -} - -- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation -{ - [_loadingView stopAnimating]; - [_delegate webDialogViewDidFinishLoad:self]; -} - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal_NoARC/FBSDKDynamicFrameworkLoader.m b/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal_NoARC/FBSDKDynamicFrameworkLoader.m deleted file mode 100644 index 291cc83622..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal_NoARC/FBSDKDynamicFrameworkLoader.m +++ /dev/null @@ -1,589 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKDynamicFrameworkLoader.h" - -#import - -#import -#import -#import - -#import "FBSDKLogger.h" -#import "FBSDKSettings.h" - -static NSString *const g_frameworkPathTemplate = @"/System/Library/Frameworks/%@.framework/%@"; - -#pragma mark - Library and Symbol Loading - -struct FBSDKDFLLoadSymbolContext -{ - void *(*library)(void); // function to retrieve the library handle (it's a function instead of void * so it can be staticlly bound) - const char *name; // name of the symbol to retrieve - void **address; // [out] address of the symbol in the process address space -}; - -// Retrieves the handle for a library for framework. The paths for each are constructed -// differently so the loading function passed to dispatch_once() calls this. -static void *fbsdkdfl_load_library_once(const char *path) -{ - void *handle = dlopen(path, RTLD_LAZY); - if (handle) { - [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorInformational formatString:@"Dynamically loaded library at %s", path]; - } else { - [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorInformational formatString:@"Failed to load library at %s", path]; - } - return handle; -} - -// Constructs the path for a system framework with the given name and returns the handle for dlsym -static void *fbsdkdfl_load_framework_once(NSString *framework) -{ - NSString *path = [NSString stringWithFormat:g_frameworkPathTemplate, framework, framework]; - return fbsdkdfl_load_library_once(path.fileSystemRepresentation); -} - -// Implements the callback for dispatch_once() that loads the handle for specified framework name -#define _fbsdkdfl_load_framework_once_impl_(FRAMEWORK) \ - static void fbsdkdfl_load_##FRAMEWORK##_once(void *context) { \ - *(void **)context = fbsdkdfl_load_framework_once(@#FRAMEWORK); \ - } - -// Implements the framework/library retrieval function for the given name. -// It calls the loading function once and caches the handle in a local static variable -#define _fbsdkdfl_handle_get_impl_(LIBRARY) \ - static void *fbsdkdfl_handle_get_##LIBRARY(void) { \ - static void *LIBRARY##_handle; \ - static dispatch_once_t LIBRARY##_once; \ - dispatch_once_f(&LIBRARY##_once, &LIBRARY##_handle, &fbsdkdfl_load_##LIBRARY##_once); \ - return LIBRARY##_handle;\ - } - -// Callback from dispatch_once() to load a specific symbol -static void fbsdkdfl_load_symbol_once(void *context) -{ - struct FBSDKDFLLoadSymbolContext *ctx = context; - *ctx->address = dlsym(ctx->library(), ctx->name); -} - -// The boilerplate code for loading a symbol from a given library once and caching it in a static local -#define _fbsdkdfl_symbol_get(LIBRARY, PREFIX, SYMBOL, TYPE, VARIABLE_NAME) \ - static TYPE VARIABLE_NAME; \ - static dispatch_once_t SYMBOL##_once; \ - static struct FBSDKDFLLoadSymbolContext ctx = { .library = &fbsdkdfl_handle_get_##LIBRARY, .name = PREFIX #SYMBOL, .address = (void *)&VARIABLE_NAME }; \ - dispatch_once_f(&SYMBOL##_once, &ctx, &fbsdkdfl_load_symbol_once) - -#define _fbsdkdfl_symbol_get_c(LIBRARY, SYMBOL) _fbsdkdfl_symbol_get(LIBRARY, "OBJC_CLASS_$_", SYMBOL, Class, c) // convenience symbol retrieval macro for getting an Objective-C class symbol and storing it in the local static c -#define _fbsdkdfl_symbol_get_f(LIBRARY, SYMBOL) _fbsdkdfl_symbol_get(LIBRARY, "", SYMBOL, SYMBOL##_type, f) // convenience symbol retrieval macro for getting a function pointer and storing it in the local static f -#define _fbsdkdfl_symbol_get_k(LIBRARY, SYMBOL, TYPE) _fbsdkdfl_symbol_get(LIBRARY, "", SYMBOL, TYPE, k) // convenience symbol retrieval macro for getting a pointer to a named variable and storing it in the local static k - -// convenience macro for verifying a pointer to a named variable was successfully loaded and returns the value -#define _fbsdkdfl_return_k(FRAMEWORK, SYMBOL) \ - NSCAssert(k != NULL, @"Failed to load constant %@ in the %@ framework", @#SYMBOL, @#FRAMEWORK); \ - return *k - -// convenience macro for getting a pointer to a named NSString, verifying it loaded correctly, and returning it -#define _fbsdkdfl_get_and_return_NSString(LIBRARY, SYMBOL) \ - _fbsdkdfl_symbol_get_k(LIBRARY, SYMBOL, NSString **); \ - NSCAssert([*k isKindOfClass:[NSString class]], @"Loaded symbol %@ is not of type NSString *", @#SYMBOL); \ - _fbsdkdfl_return_k(LIBRARY, SYMBOL) - -#pragma mark - Security Framework - -_fbsdkdfl_load_framework_once_impl_(Security) -_fbsdkdfl_handle_get_impl_(Security) - -#pragma mark - Security Constants - -@implementation FBSDKDynamicFrameworkLoader - -#define _fbsdkdfl_Security_get_k(SYMBOL) _fbsdkdfl_symbol_get_k(Security, SYMBOL, CFTypeRef *) - -#define _fbsdkdfl_Security_get_and_return_k(SYMBOL) \ - _fbsdkdfl_Security_get_k(SYMBOL); \ - _fbsdkdfl_return_k(Security, SYMBOL) - -+ (SecRandomRef)loadkSecRandomDefault -{ - _fbsdkdfl_symbol_get_k(Security, kSecRandomDefault, SecRandomRef *); - _fbsdkdfl_return_k(Security, kSecRandomDefault); -} - -+ (CFTypeRef)loadkSecAttrAccessible -{ - _fbsdkdfl_Security_get_and_return_k(kSecAttrAccessible); -} - -+ (CFTypeRef)loadkSecAttrAccessibleAfterFirstUnlockThisDeviceOnly -{ - _fbsdkdfl_Security_get_and_return_k(kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly); -} - -+ (CFTypeRef)loadkSecAttrAccount -{ - _fbsdkdfl_Security_get_and_return_k(kSecAttrAccount); -} - -+ (CFTypeRef)loadkSecAttrService -{ - _fbsdkdfl_Security_get_and_return_k(kSecAttrService); -} - -+ (CFTypeRef)loadkSecAttrGeneric -{ - _fbsdkdfl_Security_get_and_return_k(kSecAttrGeneric); -} - -+ (CFTypeRef)loadkSecValueData -{ - _fbsdkdfl_Security_get_and_return_k(kSecValueData); -} - -+ (CFTypeRef)loadkSecClassGenericPassword -{ - _fbsdkdfl_Security_get_and_return_k(kSecClassGenericPassword); -} - -+ (CFTypeRef)loadkSecAttrAccessGroup -{ - _fbsdkdfl_Security_get_and_return_k(kSecAttrAccessGroup); -} - -+ (CFTypeRef)loadkSecMatchLimitOne -{ - _fbsdkdfl_Security_get_and_return_k(kSecMatchLimitOne); -} - -+ (CFTypeRef)loadkSecMatchLimit -{ - _fbsdkdfl_Security_get_and_return_k(kSecMatchLimit); -} - -+ (CFTypeRef)loadkSecReturnData -{ - _fbsdkdfl_Security_get_and_return_k(kSecReturnData); -} - -+ (CFTypeRef)loadkSecClass -{ - _fbsdkdfl_Security_get_and_return_k(kSecClass); -} - -@end - -#pragma mark - Security APIs - -#define _fbsdkdfl_Security_get_f(SYMBOL) _fbsdkdfl_symbol_get_f(Security, SYMBOL) - -typedef int (*SecRandomCopyBytes_type)(SecRandomRef, size_t, uint8_t *); -typedef OSStatus (*SecItemUpdate_type)(CFDictionaryRef, CFDictionaryRef); -typedef OSStatus (*SecItemAdd_type)(CFDictionaryRef, CFTypeRef); -typedef OSStatus (*SecItemCopyMatching_type)(CFDictionaryRef, CFTypeRef); -typedef OSStatus (*SecItemDelete_type)(CFDictionaryRef); - -int fbsdkdfl_SecRandomCopyBytes(SecRandomRef rnd, size_t count, uint8_t *bytes) -{ - _fbsdkdfl_Security_get_f(SecRandomCopyBytes); - return f(rnd, count, bytes); -} - -OSStatus fbsdkdfl_SecItemUpdate(CFDictionaryRef query, CFDictionaryRef attributesToUpdate) -{ - _fbsdkdfl_Security_get_f(SecItemUpdate); - return f(query, attributesToUpdate); -} - -OSStatus fbsdkdfl_SecItemAdd(CFDictionaryRef attributes, CFTypeRef *result) -{ - _fbsdkdfl_Security_get_f(SecItemAdd); - return f(attributes, result); -} - -OSStatus fbsdkdfl_SecItemCopyMatching(CFDictionaryRef query, CFTypeRef *result) -{ - _fbsdkdfl_Security_get_f(SecItemCopyMatching); - return f(query, result); -} - -OSStatus fbsdkdfl_SecItemDelete(CFDictionaryRef query) -{ - _fbsdkdfl_Security_get_f(SecItemDelete); - return f(query); -} - -#pragma mark - Social Constants - -_fbsdkdfl_load_framework_once_impl_(Social) -_fbsdkdfl_handle_get_impl_(Social) - -#define _fbsdkdfl_Social_get_and_return_constant(SYMBOL) _fbsdkdfl_get_and_return_NSString(Social, SYMBOL) - -NSString *fbsdkdfl_SLServiceTypeFacebook(void) -{ - __weak _fbsdkdfl_Social_get_and_return_constant(SLServiceTypeFacebook); -} - -NSString *fbsdkdfl_SLServiceTypeTwitter(void) -{ - __weak _fbsdkdfl_Social_get_and_return_constant(SLServiceTypeTwitter); -} - -#pragma mark - Social Classes - -#define _fbsdkdfl_Social_get_c(SYMBOL) _fbsdkdfl_symbol_get_c(Social, SYMBOL) - -Class fbsdkdfl_SLComposeViewControllerClass(void) -{ - _fbsdkdfl_Social_get_c(SLComposeViewController); - return c; -} - -#pragma mark - MessageUI Classes - -_fbsdkdfl_load_framework_once_impl_(MessageUI) -_fbsdkdfl_handle_get_impl_(MessageUI) - -#define _fbsdkdfl_MessageUI_get_c(SYMBOL) _fbsdkdfl_symbol_get_c(MessageUI, SYMBOL) - -Class fbsdkdfl_MFMailComposeViewControllerClass(void) -{ - _fbsdkdfl_MessageUI_get_c(MFMailComposeViewController); - return c; -} - -Class fbsdkdfl_MFMessageComposeViewControllerClass(void) -{ - _fbsdkdfl_MessageUI_get_c(MFMessageComposeViewController); - return c; -} - -#pragma mark - QuartzCore Classes - -_fbsdkdfl_load_framework_once_impl_(QuartzCore) -_fbsdkdfl_handle_get_impl_(QuartzCore) - -#define _fbsdkdfl_QuartzCore_get_c(SYMBOL) _fbsdkdfl_symbol_get_c(QuartzCore, SYMBOL); - -Class fbsdkdfl_CATransactionClass(void) -{ - _fbsdkdfl_QuartzCore_get_c(CATransaction); - return c; -} - -#pragma mark - QuartzCore APIs - -#define _fbsdkdfl_QuartzCore_get_f(SYMBOL) _fbsdkdfl_symbol_get_f(QuartzCore, SYMBOL) - -typedef CATransform3D (*CATransform3DMakeScale_type)(CGFloat, CGFloat, CGFloat); -typedef CATransform3D (*CATransform3DMakeTranslation_type)(CGFloat, CGFloat, CGFloat); -typedef CATransform3D (*CATransform3DConcat_type)(CATransform3D, CATransform3D); - -const CATransform3D fbsdkdfl_CATransform3DIdentity = {1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1}; - -CATransform3D fbsdkdfl_CATransform3DMakeScale(CGFloat sx, CGFloat sy, CGFloat sz) -{ - _fbsdkdfl_QuartzCore_get_f(CATransform3DMakeScale); - return f(sx, sy, sz); -} - -CATransform3D fbsdkdfl_CATransform3DMakeTranslation(CGFloat tx, CGFloat ty, CGFloat tz) -{ - _fbsdkdfl_QuartzCore_get_f(CATransform3DMakeTranslation); - return f(tx, ty, tz); -} - -CATransform3D fbsdkdfl_CATransform3DConcat(CATransform3D a, CATransform3D b) -{ - _fbsdkdfl_QuartzCore_get_f(CATransform3DConcat); - return f(a, b); -} - -#pragma mark - AudioToolbox APIs - -_fbsdkdfl_load_framework_once_impl_(AudioToolbox) -_fbsdkdfl_handle_get_impl_(AudioToolbox) - -#define _fbsdkdfl_AudioToolbox_get_f(SYMBOL) _fbsdkdfl_symbol_get_f(AudioToolbox, SYMBOL) - -typedef OSStatus (*AudioServicesCreateSystemSoundID_type)(CFURLRef, SystemSoundID *); -typedef OSStatus (*AudioServicesDisposeSystemSoundID_type)(SystemSoundID); -typedef void (*AudioServicesPlaySystemSound_type)(SystemSoundID); - -OSStatus fbsdkdfl_AudioServicesCreateSystemSoundID(CFURLRef inFileURL, SystemSoundID *outSystemSoundID) -{ - _fbsdkdfl_AudioToolbox_get_f(AudioServicesCreateSystemSoundID); - return f(inFileURL, outSystemSoundID); -} - -OSStatus fbsdkdfl_AudioServicesDisposeSystemSoundID(SystemSoundID inSystemSoundID) -{ - _fbsdkdfl_AudioToolbox_get_f(AudioServicesDisposeSystemSoundID); - return f(inSystemSoundID); -} - -void fbsdkdfl_AudioServicesPlaySystemSound(SystemSoundID inSystemSoundID) -{ - _fbsdkdfl_AudioToolbox_get_f(AudioServicesPlaySystemSound); - return f(inSystemSoundID); -} - -#pragma mark - Ad Support Classes - -_fbsdkdfl_load_framework_once_impl_(AdSupport) -_fbsdkdfl_handle_get_impl_(AdSupport) - -#define _fbsdkdfl_AdSupport_get_c(SYMBOL) _fbsdkdfl_symbol_get_c(AdSupport, SYMBOL); - -Class fbsdkdfl_ASIdentifierManagerClass(void) -{ - _fbsdkdfl_AdSupport_get_c(ASIdentifierManager); - return c; -} - -#pragma mark - Safari Services -_fbsdkdfl_load_framework_once_impl_(SafariServices) -_fbsdkdfl_handle_get_impl_(SafariServices) - -#define _fbsdkdfl_SafariServices_get_c(SYMBOL) _fbsdkdfl_symbol_get_c(SafariServices, SYMBOL); - -Class fbsdkdfl_SFSafariViewControllerClass(void) -{ - _fbsdkdfl_SafariServices_get_c(SFSafariViewController); - return c; -} - -Class fbsdkdfl_SFAuthenticationSessionClass(void) -{ - _fbsdkdfl_SafariServices_get_c(SFAuthenticationSession); - return c; -} - -#pragma mark - Authentication Services -_fbsdkdfl_load_framework_once_impl_(AuthenticationServices) -_fbsdkdfl_handle_get_impl_(AuthenticationServices) - -#define _fbsdkdfl_AuthenticationServices_get_c(SYMBOL) _fbsdkdfl_symbol_get_c(AuthenticationServices, SYMBOL); - -Class fbsdkdfl_ASWebAuthenticationSessionClass(void) -{ - _fbsdkdfl_AuthenticationServices_get_c(ASWebAuthenticationSession); - return c; -} - -#pragma mark - Accounts Constants - -_fbsdkdfl_load_framework_once_impl_(Accounts) -_fbsdkdfl_handle_get_impl_(Accounts) - -#define _fbsdkdfl_Accounts_get_and_return_NSString(SYMBOL) __weak _fbsdkdfl_get_and_return_NSString(Accounts, SYMBOL) - -NSString *fbsdkdfl_ACFacebookAppIdKey(void) -{ - _fbsdkdfl_Accounts_get_and_return_NSString(ACFacebookAppIdKey); -} - -NSString *fbsdkdfl_ACFacebookAudienceEveryone(void) -{ - _fbsdkdfl_Accounts_get_and_return_NSString(ACFacebookAudienceEveryone); -} - -NSString *fbsdkdfl_ACFacebookAudienceFriends(void) -{ - _fbsdkdfl_Accounts_get_and_return_NSString(ACFacebookAudienceFriends); -} - -NSString *fbsdkdfl_ACFacebookAudienceKey(void) -{ - _fbsdkdfl_Accounts_get_and_return_NSString(ACFacebookAudienceKey); -} - -NSString *fbsdkdfl_ACFacebookAudienceOnlyMe(void) -{ - _fbsdkdfl_Accounts_get_and_return_NSString(ACFacebookAudienceOnlyMe); -} - -NSString *fbsdkdfl_ACFacebookPermissionsKey(void) -{ - _fbsdkdfl_Accounts_get_and_return_NSString(ACFacebookPermissionsKey); -} - -#pragma mark - Accounts Classes - -#define _fbsdkdfl_Accounts_get_c(SYMBOL) _fbsdkdfl_symbol_get_c(Accounts, SYMBOL); - -Class fbsdkdfl_ACAccountStoreClass(void) -{ - _fbsdkdfl_Accounts_get_c(ACAccountStore); - return c; -} - -#pragma mark - StoreKit Classes - -_fbsdkdfl_load_framework_once_impl_(StoreKit) -_fbsdkdfl_handle_get_impl_(StoreKit) - -#define _fbsdkdfl_StoreKit_get_c(SYMBOL) _fbsdkdfl_symbol_get_c(StoreKit, SYMBOL); - -Class fbsdkdfl_SKPaymentQueueClass(void) -{ - _fbsdkdfl_StoreKit_get_c(SKPaymentQueue); - return c; -} - -Class fbsdkdfl_SKProductsRequestClass(void) -{ - _fbsdkdfl_StoreKit_get_c(SKProductsRequest); - return c; -} - -#pragma mark - AssetsLibrary Classes - -_fbsdkdfl_load_framework_once_impl_(AssetsLibrary) -_fbsdkdfl_handle_get_impl_(AssetsLibrary) - -#define _fbsdkdfl_AssetsLibrary_get_c(SYMBOL) _fbsdkdfl_symbol_get_c(AssetsLibrary, SYMBOL); - -Class fbsdkdfl_ALAssetsLibraryClass(void) -{ - _fbsdkdfl_AssetsLibrary_get_c(ALAssetsLibrary); - return c; -} - -#pragma mark - CoreTelephony Classes - -_fbsdkdfl_load_framework_once_impl_(CoreTelephony) -_fbsdkdfl_handle_get_impl_(CoreTelephony) - -#define _fbsdkdfl_CoreTelephonyLibrary_get_c(SYMBOL) _fbsdkdfl_symbol_get_c(CoreTelephony, SYMBOL); - -Class fbsdkdfl_CTTelephonyNetworkInfoClass(void) -{ - _fbsdkdfl_CoreTelephonyLibrary_get_c(CTTelephonyNetworkInfo); - return c; -} - -#pragma mark - CoreImage - -_fbsdkdfl_load_framework_once_impl_(CoreImage) -_fbsdkdfl_handle_get_impl_(CoreImage) - -#define _fbsdkdfl_CoreImage_get_c(SYMBOL) _fbsdkdfl_symbol_get_c(CoreImage, SYMBOL); -#define _fbsdkdfl_CoreImage_get_and_return_NSString(SYMBOL) _fbsdkdfl_get_and_return_NSString(CoreImage, SYMBOL) - - -Class fbsdkdfl_CIImageClass(void) -{ - _fbsdkdfl_CoreImage_get_c(CIImage); - return c; -} - -Class fbsdkdfl_CIFilterClass(void) -{ - _fbsdkdfl_CoreImage_get_c(CIFilter); - return c; -} - -NSString *fbsdkdfl_kCIInputImageKey(void) -{ - __weak _fbsdkdfl_CoreImage_get_and_return_NSString(kCIInputImageKey); -} - -NSString *fbsdkdfl_kCIInputRadiusKey(void) -{ - __weak _fbsdkdfl_CoreImage_get_and_return_NSString(kCIInputRadiusKey); -} - -NSString *fbsdkdfl_kCIOutputImageKey(void) -{ - __weak _fbsdkdfl_CoreImage_get_and_return_NSString(kCIOutputImageKey); -} - -#pragma mark - Photos.framework - -_fbsdkdfl_load_framework_once_impl_(Photos) -_fbsdkdfl_handle_get_impl_(Photos) - -#define _fbsdkdfl_Photos_get_c(SYMBOL) _fbsdkdfl_symbol_get_c(Photos, SYMBOL); -#define _fbsdkdfl_Photos_get_and_return_NSString(SYMBOL) _fbsdkdfl_get_and_return_NSString(Photos, SYMBOL) - -Class fbsdkdfl_PHPhotoLibrary(void) -{ - _fbsdkdfl_Photos_get_c(PHPhotoLibrary); - return c; -} - -Class fbsdkdfl_PHAssetChangeRequest(void) -{ - _fbsdkdfl_Photos_get_c(PHAssetChangeRequest); - return c; -} - -#pragma mark - MobileCoreServices - -_fbsdkdfl_load_framework_once_impl_(MobileCoreServices) -_fbsdkdfl_handle_get_impl_(MobileCoreServices) - -#define _fbsdkdfl_MobileCoreServices_get_k(SYMBOL) _fbsdkdfl_symbol_get_k(MobileCoreServices, SYMBOL, CFStringRef *) - -#define _fbsdkdfl_MobileCoreServices_get_and_return_k(SYMBOL) \ -_fbsdkdfl_MobileCoreServices_get_k(SYMBOL); \ -_fbsdkdfl_return_k(MobileCoreServices, SYMBOL) - -#define _fbsdkdfl_MobileCoreServices_get_f(SYMBOL) _fbsdkdfl_symbol_get_f(MobileCoreServices, SYMBOL) - -typedef CFStringRef (*UTTypeCopyPreferredTagWithClass_type)(CFStringRef inUTI, CFStringRef inTagClass); - -CFStringRef fbsdkdfl_UTTypeCopyPreferredTagWithClass(CFStringRef inUTI, - CFStringRef inTagClass) -{ - _fbsdkdfl_MobileCoreServices_get_f(UTTypeCopyPreferredTagWithClass); - return f(inUTI, inTagClass); -} - -CFStringRef fbsdkdfl_kUTTagClassMIMEType(void) -{ - _fbsdkdfl_MobileCoreServices_get_and_return_k(kUTTagClassMIMEType); -} - -CFStringRef fbsdkdfl_kUTTypeJPEG(void) -{ - _fbsdkdfl_MobileCoreServices_get_and_return_k(kUTTypeJPEG); -} - -CFStringRef fbsdkdfl_kUTTypePNG(void) -{ - _fbsdkdfl_MobileCoreServices_get_and_return_k(kUTTypePNG); -} - -#pragma mark - WebKit Classes -_fbsdkdfl_load_framework_once_impl_(WebKit) -_fbsdkdfl_handle_get_impl_(WebKit) - -#define _fbsdkdfl_WebKit_get_c(SYMBOL) _fbsdkdfl_symbol_get_c(WebKit, SYMBOL); - -Class fbsdkdfl_WKWebViewClass(void) -{ - _fbsdkdfl_WebKit_get_c(WKWebView); - return c; -} - -Class fbsdkdfl_WKUserScriptClass(void) -{ - _fbsdkdfl_WebKit_get_c(WKUserScript); - return c; -} diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/af.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/af.lproj/FacebookSDK.strings deleted file mode 100644 index e6bf3afa11..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/af.lproj/FacebookSDK.strings +++ /dev/null @@ -1,92 +0,0 @@ -/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ -"DeviceLogin.LogInPrompt" = "Besoek %@ en voer die kode in wat hierbo vertoon word."; - -/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ -"DeviceLogin.SmartLogInPrompt" = "Om jou rekening te verbind, maak die Facebook-toepassing op jou mobiele toestel oop en kontroleer vir kennisgewings."; - -/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ -"DeviceLogin.SmartLogInOrLabel" = "- OF -"; - -/* The title of the label to dismiss the alert when presenting user facing error messages */ -"ErrorRecovery.Alert.OK" = "Goed"; - -/* The title of the label to decline attempting error recovery */ -"ErrorRecovery.Cancel" = "Kanselleer"; - -/* The fallback message to display to recover invalidated tokens */ -"ErrorRecovery.Login.Suggestion" = "Meld asseblief weer by hierdie toepassing aan om jou Facebook-rekening te herkoppel. "; - -/* The title of the label to start attempting error recovery */ -"ErrorRecovery.OK" = "Goed"; - -/* The fallback message to display to retry transient errors */ -"ErrorRecovery.Transient.Suggestion" = "Die bediener is tydelik besig, probeer asseblief weer."; - -/* The label for the FBSDKLikeButton when the object is not currently liked. */ -"LikeButton.Like" = "Hou van"; - -/* The label for the FBSDKLikeButton when the object is currently liked. */ -"LikeButton.Liked" = "Hou van"; - -/* The label for the FBSDKLoginButton action sheet to cancel logging out */ -"LoginButton.CancelLogout" = "Kanselleer"; - -/* The label for the FBSDKLoginButton action sheet to confirm logging out */ -"LoginButton.ConfirmLogOut" = "Meld af"; - -/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ -"LoginButton.LoggedIn" = "Met Facebook aangemeld"; - -/* The format string for the FBSDKLoginButton label when the user is logged in */ -"LoginButton.LoggedInAs" = "As %@ aangemeld"; - -/* The short label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogIn" = "Meld aan"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInContinue" = "Gaan voort met Facebook"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInLong" = "Meld met Facebook aan"; - -/* The label for the FBSDKLoginButton when the user is currently logged in */ -"LoginButton.LogOut" = "Meld af"; - -/* The user facing error message when the app slider has been disabled and login fails. */ -"LoginError.SystemAccount.Disabled" = "Toegang is nie na die Facebook-rekening verleen nie. Verifieer toestelinstellings."; - -/* The user facing error message when the Accounts framework encounters a network error. */ -"LoginError.SystemAccount.Network" = "Kan nie aan Facebook koppel nie. Gaan jou netwerkverbinding na en probeer weer."; - -/* The user facing error message when the device Facebook account password is incorrect and login fails. */ -"LoginError.SystemAccount.PasswordChange" = "Jou Facebook-wagwoord het verander. Om jou wagwoord te bevestig, maak Instellings > Facebook oop en tik jou naam."; - -/* The user facing error message when the device Facebook account is unavailable and login fails. */ -"LoginError.SystemAccount.Unavailable" = "Die Facebook-rekening is nie op die toestel opgestel nie."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ -"LoginError.SystemAccount.UnconfirmedUser" = "Jou rekening is nie bevestig nie. Meld asseblief by www.facebook.com aan en volg die gegewe instruksies."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ -"LoginError.SystemAccount.UserCheckpointed" = "Jy kan nie op die oomblik by toepassings aanmeld nie. Meld asseblief by www.facebook.com aan en volg die gegewe instruksies."; - -/* The message of the FBSDKLoginTooltipView */ -"LoginTooltip.Message" = "Jy is in beheer – kies watter inligting jy met toepassings wil deel."; - -/* Title of the web dialog that prompts the user to log in to Facebook. */ -"LoginWeb.LogInTitle" = "Meld aan"; - -/* The label for FBSDKSendButton */ -"SendButton.Send" = "Stuur"; - -/* The label for FBSDKShareButton */ -"ShareButton.Share" = "Deel"; - -/* Prompts a person if this is their current account */ -"SmartLogin.NotYou" = "Nie jy nie?"; - -/* Text on a button that a person presses to confirm that they are finished with the login experience */ -"SmartLogin.ConfirmationTitle" = "Bevestig aantekening"; - -/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ -"SmartLogin.Continue" = "Gaan voort as %@"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/ar.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/ar.lproj/FacebookSDK.strings deleted file mode 100644 index 0911c786b6..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/ar.lproj/FacebookSDK.strings +++ /dev/null @@ -1,92 +0,0 @@ -/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ -"DeviceLogin.LogInPrompt" = "تفضل بزيارة %@ وإدخال الرمز الموضح أدناه."; - -/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ -"DeviceLogin.SmartLogInPrompt" = "لربط حسابك، افتح تطبيق فيسبوك على جهازك المحمول ثم تفقد الإشعارات."; - -/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ -"DeviceLogin.SmartLogInOrLabel" = "- أو -"; - -/* The title of the label to dismiss the alert when presenting user facing error messages */ -"ErrorRecovery.Alert.OK" = "موافق"; - -/* The title of the label to decline attempting error recovery */ -"ErrorRecovery.Cancel" = "إلغاء"; - -/* The fallback message to display to recover invalidated tokens */ -"ErrorRecovery.Login.Suggestion" = "يرجى تسجيل الدخول إلى هذا التطبيق مرة أخرى لإعادة الاتصال بحساب فيسبوك."; - -/* The title of the label to start attempting error recovery */ -"ErrorRecovery.OK" = "موافق"; - -/* The fallback message to display to retry transient errors */ -"ErrorRecovery.Transient.Suggestion" = "الخادم مشغول مؤقتًا، يرجى إعادة المحاولة."; - -/* The label for the FBSDKLikeButton when the object is not currently liked. */ -"LikeButton.Like" = "إعجاب"; - -/* The label for the FBSDKLikeButton when the object is currently liked. */ -"LikeButton.Liked" = "أعجبني"; - -/* The label for the FBSDKLoginButton action sheet to cancel logging out */ -"LoginButton.CancelLogout" = "إلغاء"; - -/* The label for the FBSDKLoginButton action sheet to confirm logging out */ -"LoginButton.ConfirmLogOut" = "تسجيل الخروج"; - -/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ -"LoginButton.LoggedIn" = "تم تسجيل الدخول بحساب فيسبوك"; - -/* The format string for the FBSDKLoginButton label when the user is logged in */ -"LoginButton.LoggedInAs" = "تم تسجيل الدخول باسم %@"; - -/* The short label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogIn" = "تسجيل الدخول"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInContinue" = "متابعة بحساب فيسبوك"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInLong" = "تسجيل الدخول بحساب فيسبوك"; - -/* The label for the FBSDKLoginButton when the user is currently logged in */ -"LoginButton.LogOut" = "تسجيل الخروج"; - -/* The user facing error message when the app slider has been disabled and login fails. */ -"LoginError.SystemAccount.Disabled" = "لم يتم منح إذن الوصول لحساب فيسبوك. تحقق من إعدادات الجهاز."; - -/* The user facing error message when the Accounts framework encounters a network error. */ -"LoginError.SystemAccount.Network" = "تعذر الاتصال بفيسبوك. يُرجى التحقق من الاتصال بالإنترنت وإعادة المحاولة."; - -/* The user facing error message when the device Facebook account password is incorrect and login fails. */ -"LoginError.SystemAccount.PasswordChange" = "تم تغيير كلمة سر فيسبوك الخاصة بك. لتأكيد كلمة السر، افتح الإعدادات > فيسبوك ثم اضغط على اسمك."; - -/* The user facing error message when the device Facebook account is unavailable and login fails. */ -"LoginError.SystemAccount.Unavailable" = "لم تتم تهيئة حساب فيسبوك على الجهاز."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ -"LoginError.SystemAccount.UnconfirmedUser" = "لم يتم تأكيد حسابك. يُرجى تسجيل الدخول إلى www.facebook.com واتباع التعليمات الموضحة."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ -"LoginError.SystemAccount.UserCheckpointed" = "لا يمكنك تسجيل الدخول إلى التطبيقات حاليًا. يُرجى تسجيل الدخول إلى www.facebook.com واتباع التعليمات الموضحة."; - -/* The message of the FBSDKLoginTooltipView */ -"LoginTooltip.Message" = "أنت المتحكم - اختر المعلومات التي تريد مشاركتها مع التطبيقات."; - -/* Title of the web dialog that prompts the user to log in to Facebook. */ -"LoginWeb.LogInTitle" = "تسجيل الدخول"; - -/* The label for FBSDKSendButton */ -"SendButton.Send" = "إرسال"; - -/* The label for FBSDKShareButton */ -"ShareButton.Share" = "مشاركة"; - -/* Prompts a person if this is their current account */ -"SmartLogin.NotYou" = "لست أنت؟"; - -/* Text on a button that a person presses to confirm that they are finished with the login experience */ -"SmartLogin.ConfirmationTitle" = "تأكيد تسجيل الدخول"; - -/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ -"SmartLogin.Continue" = "متابعة باسم %@"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/bn.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/bn.lproj/FacebookSDK.strings deleted file mode 100644 index 6570752307..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/bn.lproj/FacebookSDK.strings +++ /dev/null @@ -1,92 +0,0 @@ -/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ -"DeviceLogin.LogInPrompt" = "%@ -এ যান এবং উপরে যে কোডটি দেখানো হয়েছে সেটি লিখুন।"; - -/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ -"DeviceLogin.SmartLogInPrompt" = "আপনার অ্যাকাউন্টে সংযোগ করতে, আপনার মোবাইল ডিভাইসে Facebook অ্যাপটি খুলুন এবং বিজ্ঞপ্তি চেক করুন।"; - -/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ -"DeviceLogin.SmartLogInOrLabel" = "- অথবা -"; - -/* The title of the label to dismiss the alert when presenting user facing error messages */ -"ErrorRecovery.Alert.OK" = "ঠিক আছে"; - -/* The title of the label to decline attempting error recovery */ -"ErrorRecovery.Cancel" = "বাতিল করুন"; - -/* The fallback message to display to recover invalidated tokens */ -"ErrorRecovery.Login.Suggestion" = "আপনার Facebook অ্যাকাউন্টটিতে পুনরায় সংযোগ করার জন্য অনুগ্রহ করে এই অ্যাপটিতে লগ ইন করুন৷"; - -/* The title of the label to start attempting error recovery */ -"ErrorRecovery.OK" = "ঠিক আছে"; - -/* The fallback message to display to retry transient errors */ -"ErrorRecovery.Transient.Suggestion" = "এই সার্ভারটি সাময়িকভাবে ব্যস্ত আছে, অনুগ্রহ করে পুনরায় চেষ্টা করুন৷"; - -/* The label for the FBSDKLikeButton when the object is not currently liked. */ -"LikeButton.Like" = "পছন্দ করুন"; - -/* The label for the FBSDKLikeButton when the object is currently liked. */ -"LikeButton.Liked" = "পছন্দ করা হয়েছে"; - -/* The label for the FBSDKLoginButton action sheet to cancel logging out */ -"LoginButton.CancelLogout" = "বাতিল করুন"; - -/* The label for the FBSDKLoginButton action sheet to confirm logging out */ -"LoginButton.ConfirmLogOut" = "লগ আউট করুন"; - -/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ -"LoginButton.LoggedIn" = "Facebook ব্যবহার করে লগ ইন করা হয়েছে"; - -/* The format string for the FBSDKLoginButton label when the user is logged in */ -"LoginButton.LoggedInAs" = "%@ হিসাবে লগ ইন করা হয়েছে"; - -/* The short label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogIn" = "লগ ইন করুন"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInContinue" = "Facebook এর সাথে চালিয়ে যান"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInLong" = "Facebook -এর সাথে লগ ইন করুন"; - -/* The label for the FBSDKLoginButton when the user is currently logged in */ -"LoginButton.LogOut" = "লগ আউট করুন"; - -/* The user facing error message when the app slider has been disabled and login fails. */ -"LoginError.SystemAccount.Disabled" = "Facebook অ্যাকাউন্টটিতে অ্যাক্সেস করার অনুমতি নেই৷ ডিভাইস সেটিংস যাচাই করুন৷"; - -/* The user facing error message when the Accounts framework encounters a network error. */ -"LoginError.SystemAccount.Network" = "Facebook-এ সংযোগ করা যাচ্ছে না৷ আপনার নেটওয়ার্ক সংযোগটি পরীক্ষা করুন এবং পুনরায় চেষ্টা করুন৷"; - -/* The user facing error message when the device Facebook account password is incorrect and login fails. */ -"LoginError.SystemAccount.PasswordChange" = "আপনার Facebook পাসওয়ার্ডটি পরিবর্তিত হয়েছে৷ আপনার পাসওয়ার্ডটি নিশ্চিত করতে, সেটিংস > Facebook খুলুন এবং আপনার নামটি ট্যাপ করুন৷"; - -/* The user facing error message when the device Facebook account is unavailable and login fails. */ -"LoginError.SystemAccount.Unavailable" = "Facebook অ্যাকাউন্টটি এই ডিভাইসে কনফিগার করা যাযনি৷"; - -/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ -"LoginError.SystemAccount.UnconfirmedUser" = "আপনার অ্যাকাউন্টটি নিশ্চিত করা যায়নি৷ অনুগ্রহ করে www.facebook.com-এ লগ ইন করুন এবং উল্লিখিত নির্দেশাবলী অনুসরণ করুন৷"; - -/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ -"LoginError.SystemAccount.UserCheckpointed" = "এই সময়ে আপনি অ্যাপসে লগ ইন করতে পারবেন না৷ অনুগ্রহ করে www.facebook.com-এ লগ ইন করুন এবং উল্লিখিত নির্দেশাবলী অনুসরণ করুন৷"; - -/* The message of the FBSDKLoginTooltipView */ -"LoginTooltip.Message" = "আপনি নিয়ন্ত্রণে আছেন - অ্যাপ্সের সাথে আপনি যে তথ্য শেয়ার করতে চান তা বাছুন৷"; - -/* Title of the web dialog that prompts the user to log in to Facebook. */ -"LoginWeb.LogInTitle" = "লগ ইন করুন"; - -/* The label for FBSDKSendButton */ -"SendButton.Send" = "পাঠান"; - -/* The label for FBSDKShareButton */ -"ShareButton.Share" = "ভাগ করুন"; - -/* Prompts a person if this is their current account */ -"SmartLogin.NotYou" = "আপনি নন?"; - -/* Text on a button that a person presses to confirm that they are finished with the login experience */ -"SmartLogin.ConfirmationTitle" = "লগ ইন নিশ্চিত করুন"; - -/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ -"SmartLogin.Continue" = "%@ হিসেবে চালিয়ে যান"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/cs.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/cs.lproj/FacebookSDK.strings deleted file mode 100644 index 1de061a656..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/cs.lproj/FacebookSDK.strings +++ /dev/null @@ -1,92 +0,0 @@ -/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ -"DeviceLogin.LogInPrompt" = "Navštivte %@ a zadejte nahoře uvedený kód."; - -/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ -"DeviceLogin.SmartLogInPrompt" = "Účet si můžete připojit tak, že si na mobilním zařízení spustíte aplikaci Facebook a podíváte se do upozornění."; - -/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ -"DeviceLogin.SmartLogInOrLabel" = "- NEBO -"; - -/* The title of the label to dismiss the alert when presenting user facing error messages */ -"ErrorRecovery.Alert.OK" = "OK"; - -/* The title of the label to decline attempting error recovery */ -"ErrorRecovery.Cancel" = "Zrušit"; - -/* The fallback message to display to recover invalidated tokens */ -"ErrorRecovery.Login.Suggestion" = "Pokud se chcete ke svému Facebook účtu znovu připojit, přihlaste se k této aplikaci ještě jednou."; - -/* The title of the label to start attempting error recovery */ -"ErrorRecovery.OK" = "OK"; - -/* The fallback message to display to retry transient errors */ -"ErrorRecovery.Transient.Suggestion" = "Server je dočasně zaneprázdněný, zkuste to znovu."; - -/* The label for the FBSDKLikeButton when the object is not currently liked. */ -"LikeButton.Like" = "To se mi líbí"; - -/* The label for the FBSDKLikeButton when the object is currently liked. */ -"LikeButton.Liked" = "Už se mi to líbí"; - -/* The label for the FBSDKLoginButton action sheet to cancel logging out */ -"LoginButton.CancelLogout" = "Zrušit"; - -/* The label for the FBSDKLoginButton action sheet to confirm logging out */ -"LoginButton.ConfirmLogOut" = "Odhlásit"; - -/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ -"LoginButton.LoggedIn" = "Přihlášen(a) přes Facebook"; - -/* The format string for the FBSDKLoginButton label when the user is logged in */ -"LoginButton.LoggedInAs" = "Přihlášen(a) jako %@"; - -/* The short label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogIn" = "Přihlásit"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInContinue" = "Pokračovat přes Facebook"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInLong" = "Přihlásit se přes Facebook"; - -/* The label for the FBSDKLoginButton when the user is currently logged in */ -"LoginButton.LogOut" = "Odhlásit"; - -/* The user facing error message when the app slider has been disabled and login fails. */ -"LoginError.SystemAccount.Disabled" = "Facebook účtu nebylo oprávnění uděleno. Ověřte nastavení zařízení."; - -/* The user facing error message when the Accounts framework encounters a network error. */ -"LoginError.SystemAccount.Network" = "K Facebooku se nedá připojit. Zkontrolujte připojení k síti a zkuste to znovu."; - -/* The user facing error message when the device Facebook account password is incorrect and login fails. */ -"LoginError.SystemAccount.PasswordChange" = "Vaše heslo na Facebook je změněné. Pokud chcete heslo potvrdit, přejděte do Nastavení > Facebook a klepněte na své jméno."; - -/* The user facing error message when the device Facebook account is unavailable and login fails. */ -"LoginError.SystemAccount.Unavailable" = "V tomto zařízení není Facebook účet konfigurovaný."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ -"LoginError.SystemAccount.UnconfirmedUser" = "Váš účet není potvrzený. Přihlaste se na www. facebook.com a postupujte podle uvedených pokynů."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ -"LoginError.SystemAccount.UserCheckpointed" = "Do aplikací se v této chvíli přihlásit nemůžete. Přihlaste se na www. facebook.com a postupujte podle uvedených pokynů."; - -/* The message of the FBSDKLoginTooltipView */ -"LoginTooltip.Message" = "Je jen na vás, které informace chcete s aplikacemi sdílet."; - -/* Title of the web dialog that prompts the user to log in to Facebook. */ -"LoginWeb.LogInTitle" = "Přihlásit"; - -/* The label for FBSDKSendButton */ -"SendButton.Send" = "Odeslat"; - -/* The label for FBSDKShareButton */ -"ShareButton.Share" = "Sdílet"; - -/* Prompts a person if this is their current account */ -"SmartLogin.NotYou" = "Nejste to vy?"; - -/* Text on a button that a person presses to confirm that they are finished with the login experience */ -"SmartLogin.ConfirmationTitle" = "Potvrdit přihlášení"; - -/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ -"SmartLogin.Continue" = "Pokračovat jako %@"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/da.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/da.lproj/FacebookSDK.strings deleted file mode 100644 index 9a49bb5122..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/da.lproj/FacebookSDK.strings +++ /dev/null @@ -1,92 +0,0 @@ -/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ -"DeviceLogin.LogInPrompt" = "Gå til %@, og indtast den kode, der er angivet ovenfor."; - -/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ -"DeviceLogin.SmartLogInPrompt" = "Du kan tilknytte din konto ved at åbne Facebook-appen på din mobilenhed og tjekke notifikationerne."; - -/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ -"DeviceLogin.SmartLogInOrLabel" = "- ELLER -"; - -/* The title of the label to dismiss the alert when presenting user facing error messages */ -"ErrorRecovery.Alert.OK" = "OK"; - -/* The title of the label to decline attempting error recovery */ -"ErrorRecovery.Cancel" = "Annuller"; - -/* The fallback message to display to recover invalidated tokens */ -"ErrorRecovery.Login.Suggestion" = "Log på denne app igen for at genoprette forbindelsen til din Facebook-konto."; - -/* The title of the label to start attempting error recovery */ -"ErrorRecovery.OK" = "OK"; - -/* The fallback message to display to retry transient errors */ -"ErrorRecovery.Transient.Suggestion" = "Serveren er optaget i øjeblikket. Prøv igen."; - -/* The label for the FBSDKLikeButton when the object is not currently liked. */ -"LikeButton.Like" = "Synes godt om"; - -/* The label for the FBSDKLikeButton when the object is currently liked. */ -"LikeButton.Liked" = "Synes godt om"; - -/* The label for the FBSDKLoginButton action sheet to cancel logging out */ -"LoginButton.CancelLogout" = "Annuller"; - -/* The label for the FBSDKLoginButton action sheet to confirm logging out */ -"LoginButton.ConfirmLogOut" = "Log af"; - -/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ -"LoginButton.LoggedIn" = "Logget på med Facebook"; - -/* The format string for the FBSDKLoginButton label when the user is logged in */ -"LoginButton.LoggedInAs" = "Logget på som %@"; - -/* The short label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogIn" = "Log på"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInContinue" = "Fortsæt med Facebook"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInLong" = "Log på med Facebook"; - -/* The label for the FBSDKLoginButton when the user is currently logged in */ -"LoginButton.LogOut" = "Log af"; - -/* The user facing error message when the app slider has been disabled and login fails. */ -"LoginError.SystemAccount.Disabled" = "Der er ikke blevet givet adgang til Facebook-kontoen. Kontrollér enhedsindstillingerne."; - -/* The user facing error message when the Accounts framework encounters a network error. */ -"LoginError.SystemAccount.Network" = "Kunne ikke oprette forbindelse til Facebook. Kontrollér din netværksforbindelse, og prøv igen."; - -/* The user facing error message when the device Facebook account password is incorrect and login fails. */ -"LoginError.SystemAccount.PasswordChange" = "Din Facebook-adgangskode er ændret. For at bekræfte din adgangskode skal du åbne Indstillinger > Facebook og trykke på dit navn."; - -/* The user facing error message when the device Facebook account is unavailable and login fails. */ -"LoginError.SystemAccount.Unavailable" = "Facebook-kontoen er ikke blevet konfigureret på enheden."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ -"LoginError.SystemAccount.UnconfirmedUser" = "Din konto er ikke bekræftet. Log på www.facebook.com, og følg instruktionerne."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ -"LoginError.SystemAccount.UserCheckpointed" = "Du kan ikke logge på apps på nuværende tidspunkt. Log på www.facebook.com, og følg instruktionerne."; - -/* The message of the FBSDKLoginTooltipView */ -"LoginTooltip.Message" = "Du har styringen – vælg de oplysninger, som du vil dele med apps."; - -/* Title of the web dialog that prompts the user to log in to Facebook. */ -"LoginWeb.LogInTitle" = "Log på"; - -/* The label for FBSDKSendButton */ -"SendButton.Send" = "Send"; - -/* The label for FBSDKShareButton */ -"ShareButton.Share" = "Del"; - -/* Prompts a person if this is their current account */ -"SmartLogin.NotYou" = "Ikke dig?"; - -/* Text on a button that a person presses to confirm that they are finished with the login experience */ -"SmartLogin.ConfirmationTitle" = "Bekræft login"; - -/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ -"SmartLogin.Continue" = "Fortsæt som %@"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/de.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/de.lproj/FacebookSDK.strings deleted file mode 100644 index 331aa9b1f2..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/de.lproj/FacebookSDK.strings +++ /dev/null @@ -1,92 +0,0 @@ -/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ -"DeviceLogin.LogInPrompt" = "Besuche %@ und gib den oben angezeigten Code ein."; - -/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ -"DeviceLogin.SmartLogInPrompt" = "Um dein Konto zu verbinden, öffne die Facebook-App auf deinem Mobilgerät und prüfe, ob du Benachrichtigungen erhalten hast."; - -/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ -"DeviceLogin.SmartLogInOrLabel" = "– ODER –"; - -/* The title of the label to dismiss the alert when presenting user facing error messages */ -"ErrorRecovery.Alert.OK" = "OK"; - -/* The title of the label to decline attempting error recovery */ -"ErrorRecovery.Cancel" = "Abbrechen"; - -/* The fallback message to display to recover invalidated tokens */ -"ErrorRecovery.Login.Suggestion" = "Melde dich bitte erneut bei dieser App an, um die Verbindung mit deinem Facebook-Konto wiederherzustellen."; - -/* The title of the label to start attempting error recovery */ -"ErrorRecovery.OK" = "OK"; - -/* The fallback message to display to retry transient errors */ -"ErrorRecovery.Transient.Suggestion" = "Der Server ist vorübergehend beschäftigt. Bitte versuche es erneut."; - -/* The label for the FBSDKLikeButton when the object is not currently liked. */ -"LikeButton.Like" = "Gefällt mir"; - -/* The label for the FBSDKLikeButton when the object is currently liked. */ -"LikeButton.Liked" = "Gefällt dir"; - -/* The label for the FBSDKLoginButton action sheet to cancel logging out */ -"LoginButton.CancelLogout" = "Abbrechen"; - -/* The label for the FBSDKLoginButton action sheet to confirm logging out */ -"LoginButton.ConfirmLogOut" = "Abmelden"; - -/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ -"LoginButton.LoggedIn" = "Über Facebook angemeldet"; - -/* The format string for the FBSDKLoginButton label when the user is logged in */ -"LoginButton.LoggedInAs" = "Als %@ angemeldet"; - -/* The short label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogIn" = "Anmelden"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInContinue" = "Mit Facebook fortfahren"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInLong" = "Über Facebook anmelden"; - -/* The label for the FBSDKLoginButton when the user is currently logged in */ -"LoginButton.LogOut" = "Abmelden"; - -/* The user facing error message when the app slider has been disabled and login fails. */ -"LoginError.SystemAccount.Disabled" = "Auf das Facebook-Konto wurde kein Zugriff erteilt. Überprüfe bitte die Geräteeinstellungen."; - -/* The user facing error message when the Accounts framework encounters a network error. */ -"LoginError.SystemAccount.Network" = "Verbindung zu Facebook kann nicht hergestellt werden. Bitte überprüfe deine Netzwerkverbindung und versuche es erneut."; - -/* The user facing error message when the device Facebook account password is incorrect and login fails. */ -"LoginError.SystemAccount.PasswordChange" = "Dein Facebook-Passwort hat sich geändert. Öffne „Einstellungen“ > „Facebook“ und tippe auf deinen Namen, um dein Passwort zu bestätigen."; - -/* The user facing error message when the device Facebook account is unavailable and login fails. */ -"LoginError.SystemAccount.Unavailable" = "Das Facebook-Konto wurde für dieses Gerät nicht konfiguriert."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ -"LoginError.SystemAccount.UnconfirmedUser" = "Dein Konto wurde nicht bestätigt. Bitte melde dich unter www.facebook.com an und folge den Anweisungen."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ -"LoginError.SystemAccount.UserCheckpointed" = "Du kannst dich zurzeit nicht bei Apps anmelden. Bitte melde dich unter www.facebook.com an und folge den Anweisungen."; - -/* The message of the FBSDKLoginTooltipView */ -"LoginTooltip.Message" = "Es liegt ganz an dir – du kannst dir aussuchen, was du mit Apps teilen möchtest."; - -/* Title of the web dialog that prompts the user to log in to Facebook. */ -"LoginWeb.LogInTitle" = "Anmelden"; - -/* The label for FBSDKSendButton */ -"SendButton.Send" = "Senden"; - -/* The label for FBSDKShareButton */ -"ShareButton.Share" = "Teilen"; - -/* Prompts a person if this is their current account */ -"SmartLogin.NotYou" = "Nicht du?"; - -/* Text on a button that a person presses to confirm that they are finished with the login experience */ -"SmartLogin.ConfirmationTitle" = "Login bestätigen"; - -/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ -"SmartLogin.Continue" = "Fortfahren als %@"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/el.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/el.lproj/FacebookSDK.strings deleted file mode 100644 index 9b7a3bdde9..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/el.lproj/FacebookSDK.strings +++ /dev/null @@ -1,92 +0,0 @@ -/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ -"DeviceLogin.LogInPrompt" = "Επισκεφτείτε τη διεύθυνση %@ και συμπληρώστε τον παραπάνω κωδικό."; - -/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ -"DeviceLogin.SmartLogInPrompt" = "Για να συνδεθείτε στο λογαριασμό σας, ανοίξτε την εφαρμογή Facebook στη φορητή συσκευή σας και ελέγξτε τις ειδοποιήσεις."; - -/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ -"DeviceLogin.SmartLogInOrLabel" = "- Ή -"; - -/* The title of the label to dismiss the alert when presenting user facing error messages */ -"ErrorRecovery.Alert.OK" = "OK"; - -/* The title of the label to decline attempting error recovery */ -"ErrorRecovery.Cancel" = "Άκυρο"; - -/* The fallback message to display to recover invalidated tokens */ -"ErrorRecovery.Login.Suggestion" = "Συνδεθείτε ξανά σε αυτή την εφαρμογή για να συνδέσετε και πάλι το λογαριασμό σας στο Facebook."; - -/* The title of the label to start attempting error recovery */ -"ErrorRecovery.OK" = "OK"; - -/* The fallback message to display to retry transient errors */ -"ErrorRecovery.Transient.Suggestion" = "Ο διακομιστής είναι προσωρινά απασχολημένος, προσπαθήστε ξανά."; - -/* The label for the FBSDKLikeButton when the object is not currently liked. */ -"LikeButton.Like" = "Μου αρέσει!"; - -/* The label for the FBSDKLikeButton when the object is currently liked. */ -"LikeButton.Liked" = "Σας αρέσει"; - -/* The label for the FBSDKLoginButton action sheet to cancel logging out */ -"LoginButton.CancelLogout" = "Άκυρο"; - -/* The label for the FBSDKLoginButton action sheet to confirm logging out */ -"LoginButton.ConfirmLogOut" = "Αποσύνδεση"; - -/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ -"LoginButton.LoggedIn" = "Έχει γίνει σύνδεση μέσω Facebook"; - -/* The format string for the FBSDKLoginButton label when the user is logged in */ -"LoginButton.LoggedInAs" = "Έχει γίνει σύνδεση ως %@"; - -/* The short label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogIn" = "Σύνδεση"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInContinue" = "Συνεχίστε με το Facebook"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInLong" = "Σύνδεση μέσω Facebook"; - -/* The label for the FBSDKLoginButton when the user is currently logged in */ -"LoginButton.LogOut" = "Αποσύνδεση"; - -/* The user facing error message when the app slider has been disabled and login fails. */ -"LoginError.SystemAccount.Disabled" = "Δεν έχει παραχωρηθεί πρόσβαση στο λογαριασμό Facebook. Επαληθεύστε τις ρυθμίσεις της συσκευής σας."; - -/* The user facing error message when the Accounts framework encounters a network error. */ -"LoginError.SystemAccount.Network" = "Δεν είναι δυνατή η σύνδεση στο Facebook. Ελέγξτε τη σύνδεση στο δίκτυο και προσπαθήστε ξανά."; - -/* The user facing error message when the device Facebook account password is incorrect and login fails. */ -"LoginError.SystemAccount.PasswordChange" = "Ο κωδικός πρόσβασής σας στο Facebook άλλαξε. Για να επιβεβαιώσετε τον κωδικό σας, πηγαίνετε στις Ρυθμίσεις > Facebook και πατήστε το όνομά σας."; - -/* The user facing error message when the device Facebook account is unavailable and login fails. */ -"LoginError.SystemAccount.Unavailable" = "Ο λογαριασμός Facebook δεν έχει διαμορφωθεί στη συσκευή."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ -"LoginError.SystemAccount.UnconfirmedUser" = "Ο λογαριασμός σας δεν επιβεβαιώθηκε. Συνδεθείτε στο www.facebook.com και ακολουθήστε τις οδηγίες που εμφανίζονται."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ -"LoginError.SystemAccount.UserCheckpointed" = "Προς το παρόν δεν μπορείτε να συνδεθείτε σε εφαρμογές. Συνδεθείτε στο www.facebook.com και ακολουθήστε τις οδηγίες που εμφανίζονται."; - -/* The message of the FBSDKLoginTooltipView */ -"LoginTooltip.Message" = "Έχετε τον έλεγχο - επιλέξτε ποιες πληροφορίες θέλετε να κοινοποιούνται στις εφαρμογές."; - -/* Title of the web dialog that prompts the user to log in to Facebook. */ -"LoginWeb.LogInTitle" = "Σύνδεση"; - -/* The label for FBSDKSendButton */ -"SendButton.Send" = "Αποστολή"; - -/* The label for FBSDKShareButton */ -"ShareButton.Share" = "Κοινοποίηση"; - -/* Prompts a person if this is their current account */ -"SmartLogin.NotYou" = "Δεν είστε εσείς;"; - -/* Text on a button that a person presses to confirm that they are finished with the login experience */ -"SmartLogin.ConfirmationTitle" = "Επιβεβαίωση σύνδεσης"; - -/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ -"SmartLogin.Continue" = "Συνέχεια ως %@"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/en.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/en.lproj/FacebookSDK.strings deleted file mode 100644 index 6e6afcf99e..0000000000 Binary files a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/en.lproj/FacebookSDK.strings and /dev/null differ diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/en_GB.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/en_GB.lproj/FacebookSDK.strings deleted file mode 100644 index 358a92c5ad..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/en_GB.lproj/FacebookSDK.strings +++ /dev/null @@ -1,92 +0,0 @@ -/* The format string for device login instructions */ -"DeviceLogin.LogInPrompt" = "Visit %@ and enter the code shown above."; - -/* The 'or' string for smart login instructions */ -"DeviceLogin.SmartLogInOrLabel" = "-- OR --"; - -/* The string for smart login instructions */ -"DeviceLogin.SmartLogInPrompt" = "To connect your account, open the Facebook app on your mobile device and check for notifications."; - -/* The title of the label to dismiss the alert when presenting user facing error messages */ -"ErrorRecovery.Alert.OK" = "OK"; - -/* The title of the label to decline attempting error recovery */ -"ErrorRecovery.Cancel" = "Cancel"; - -/* The fallback message to display to recover invalidated tokens */ -"ErrorRecovery.Login.Suggestion" = "Please log in to this app again to reconnect your Facebook account."; - -/* The title of the label to start attempting error recovery */ -"ErrorRecovery.OK" = "OK"; - -/* The fallback message to display to retry transient errors */ -"ErrorRecovery.Transient.Suggestion" = "The server is temporarily busy, please try again."; - -/* The label for the FBSDKLikeButton when the object is not currently liked. */ -"LikeButton.Like" = "Like"; - -/* The label for the FBSDKLikeButton when the object is currently liked. */ -"LikeButton.Liked" = "Liked"; - -/* The label for the FBSDKLoginButton action sheet to cancel logging out */ -"LoginButton.CancelLogout" = "Cancel"; - -/* The label for the FBSDKLoginButton action sheet to confirm logging out */ -"LoginButton.ConfirmLogOut" = "Log out"; - -/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ -"LoginButton.LoggedIn" = "Logged in using Facebook"; - -/* The format string for the FBSDKLoginButton label when the user is logged in */ -"LoginButton.LoggedInAs" = "Logged in as %@"; - -/* The short label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogIn" = "Log in"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInContinue" = "Continue with Facebook"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInLong" = "Log in with Facebook"; - -/* The label for the FBSDKLoginButton when the user is currently logged in */ -"LoginButton.LogOut" = "Log out"; - -/* The user facing error message when the app slider has been disabled and login fails. */ -"LoginError.SystemAccount.Disabled" = "Access has not been granted to the Facebook account. Verify device settings."; - -/* The user facing error message when the Accounts framework encounters a network error. */ -"LoginError.SystemAccount.Network" = "Unable to connect to Facebook. Please check your network connection and try again."; - -/* The user facing error message when the device Facebook account password is incorrect and login fails. */ -"LoginError.SystemAccount.PasswordChange" = "Your Facebook password has changed. To confirm your password, open Settings > Facebook and tap your name."; - -/* The user facing error message when the device Facebook account is unavailable and login fails. */ -"LoginError.SystemAccount.Unavailable" = "The Facebook account has not been configured on the device."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ -"LoginError.SystemAccount.UnconfirmedUser" = "Your account is not confirmed. Please log in to www.facebook.com and follow the instructions given."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ -"LoginError.SystemAccount.UserCheckpointed" = "You cannot log in to apps at this time. Please log in to www.facebook.com and follow the instructions given."; - -/* The message of the FBSDKLoginTooltipView */ -"LoginTooltip.Message" = "You're in control – choose what information you want to share with apps."; - -/* Title of the web dialog that prompts the user to log in to Facebook. */ -"LoginWeb.LogInTitle" = "Log In"; - -/* The label for FBSDKSendButton */ -"SendButton.Send" = "Send"; - -/* The label for FBSDKShareButton */ -"ShareButton.Share" = "Share"; - -/* The title for the alert when smart login requires confirmation */ -"SmartLogin.ConfirmationTitle" = "Confirm Login"; - -/* The format string to continue as for the alert when smart login requires confirmation */ -"SmartLogin.Continue" = "Continue as %@"; - -/* The cancel label for the alert when smart login requires confirmation */ -"SmartLogin.NotYou" = "Not you?"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/es.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/es.lproj/FacebookSDK.strings deleted file mode 100644 index 7038004d96..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/es.lproj/FacebookSDK.strings +++ /dev/null @@ -1,92 +0,0 @@ -/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ -"DeviceLogin.LogInPrompt" = "Visita %@ e ingresa el código que se muestra arriba."; - -/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ -"DeviceLogin.SmartLogInPrompt" = "Para conectar tu cuenta, abre la aplicación de Facebook en tu dispositivo móvil y comprueba las notificaciones."; - -/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ -"DeviceLogin.SmartLogInOrLabel" = "- O -"; - -/* The title of the label to dismiss the alert when presenting user facing error messages */ -"ErrorRecovery.Alert.OK" = "Aceptar"; - -/* The title of the label to decline attempting error recovery */ -"ErrorRecovery.Cancel" = "Cancelar"; - -/* The fallback message to display to recover invalidated tokens */ -"ErrorRecovery.Login.Suggestion" = "Inicia sesión de nuevo en esta aplicación para volver a conectarte a tu cuenta de Facebook."; - -/* The title of the label to start attempting error recovery */ -"ErrorRecovery.OK" = "Aceptar"; - -/* The fallback message to display to retry transient errors */ -"ErrorRecovery.Transient.Suggestion" = "El servidor está temporalmente ocupado. Vuelve a intentarlo."; - -/* The label for the FBSDKLikeButton when the object is not currently liked. */ -"LikeButton.Like" = "Me gusta"; - -/* The label for the FBSDKLikeButton when the object is currently liked. */ -"LikeButton.Liked" = "Te gusta"; - -/* The label for the FBSDKLoginButton action sheet to cancel logging out */ -"LoginButton.CancelLogout" = "Cancelar"; - -/* The label for the FBSDKLoginButton action sheet to confirm logging out */ -"LoginButton.ConfirmLogOut" = "Cerrar sesión"; - -/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ -"LoginButton.LoggedIn" = "Sesión iniciada con Facebook"; - -/* The format string for the FBSDKLoginButton label when the user is logged in */ -"LoginButton.LoggedInAs" = "Sesión iniciada como %@"; - -/* The short label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogIn" = "Inicio de sesión"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInContinue" = "Continuar con Facebook"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInLong" = "Iniciar sesión con Facebook"; - -/* The label for the FBSDKLoginButton when the user is currently logged in */ -"LoginButton.LogOut" = "Salir"; - -/* The user facing error message when the app slider has been disabled and login fails. */ -"LoginError.SystemAccount.Disabled" = "No se concedió acceso a la cuenta de Facebook. Verifica la configuración del dispositivo."; - -/* The user facing error message when the Accounts framework encounters a network error. */ -"LoginError.SystemAccount.Network" = "No es posible conectarse a Facebook. Comprueba tu conexión a internet y vuelve a intentarlo."; - -/* The user facing error message when the device Facebook account password is incorrect and login fails. */ -"LoginError.SystemAccount.PasswordChange" = "Cambió tu contraseña de Facebook. Para confirmar tu contraseña, abre Configuración > Facebook y toca tu nombre."; - -/* The user facing error message when the device Facebook account is unavailable and login fails. */ -"LoginError.SystemAccount.Unavailable" = "No se configuró la cuenta de Facebook en el dispositivo."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ -"LoginError.SystemAccount.UnconfirmedUser" = "Tu cuenta no está confirmada. Inicia sesión en www.facebook.com y sigue las instrucciones."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ -"LoginError.SystemAccount.UserCheckpointed" = "No puedes iniciar sesión en las aplicaciones en este momento. Inicia sesión en www.facebook.com y sigue las instrucciones."; - -/* The message of the FBSDKLoginTooltipView */ -"LoginTooltip.Message" = "Tú decides: elige qué información quieres compartir con las aplicaciones."; - -/* Title of the web dialog that prompts the user to log in to Facebook. */ -"LoginWeb.LogInTitle" = "Inicio de sesión"; - -/* The label for FBSDKSendButton */ -"SendButton.Send" = "Enviar"; - -/* The label for FBSDKShareButton */ -"ShareButton.Share" = "Compartir"; - -/* Prompts a person if this is their current account */ -"SmartLogin.NotYou" = "¿No eres tú?"; - -/* Text on a button that a person presses to confirm that they are finished with the login experience */ -"SmartLogin.ConfirmationTitle" = "Confirmar inicio de sesión"; - -/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ -"SmartLogin.Continue" = "Continuar como %@"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/es_ES.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/es_ES.lproj/FacebookSDK.strings deleted file mode 100644 index 963fa96f60..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/es_ES.lproj/FacebookSDK.strings +++ /dev/null @@ -1,92 +0,0 @@ -/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ -"DeviceLogin.LogInPrompt" = "Visita %@ e introduce el código que se muestra arriba."; - -/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ -"DeviceLogin.SmartLogInPrompt" = "Para conectar tu cuenta, abre la aplicación de Facebook en tu dispositivo móvil y comprueba las notificaciones."; - -/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ -"DeviceLogin.SmartLogInOrLabel" = "- O -"; - -/* The title of the label to dismiss the alert when presenting user facing error messages */ -"ErrorRecovery.Alert.OK" = "Aceptar"; - -/* The title of the label to decline attempting error recovery */ -"ErrorRecovery.Cancel" = "Cancelar"; - -/* The fallback message to display to recover invalidated tokens */ -"ErrorRecovery.Login.Suggestion" = "Vuelve a iniciar sesión en esta aplicación para volver a conectar tu cuenta de Facebook."; - -/* The title of the label to start attempting error recovery */ -"ErrorRecovery.OK" = "Aceptar"; - -/* The fallback message to display to retry transient errors */ -"ErrorRecovery.Transient.Suggestion" = "El servidor está ocupado temporalmente. Vuelve a intentarlo más tarde."; - -/* The label for the FBSDKLikeButton when the object is not currently liked. */ -"LikeButton.Like" = "Me gusta"; - -/* The label for the FBSDKLikeButton when the object is currently liked. */ -"LikeButton.Liked" = "Te gusta"; - -/* The label for the FBSDKLoginButton action sheet to cancel logging out */ -"LoginButton.CancelLogout" = "Cancelar"; - -/* The label for the FBSDKLoginButton action sheet to confirm logging out */ -"LoginButton.ConfirmLogOut" = "Salir"; - -/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ -"LoginButton.LoggedIn" = "Sesión iniciada con Facebook"; - -/* The format string for the FBSDKLoginButton label when the user is logged in */ -"LoginButton.LoggedInAs" = "Sesión iniciada como %@"; - -/* The short label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogIn" = "Inicio de sesión"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInContinue" = "Continuar con Facebook"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInLong" = "Iniciar sesión con Facebook"; - -/* The label for the FBSDKLoginButton when the user is currently logged in */ -"LoginButton.LogOut" = "Salir"; - -/* The user facing error message when the app slider has been disabled and login fails. */ -"LoginError.SystemAccount.Disabled" = "No se ha otorgado acceso a la cuenta de Facebook. Verifica la configuración del dispositivo."; - -/* The user facing error message when the Accounts framework encounters a network error. */ -"LoginError.SystemAccount.Network" = "No es posible conectarse a Facebook. Comprueba tu conexión de red y vuelve a intentarlo."; - -/* The user facing error message when the device Facebook account password is incorrect and login fails. */ -"LoginError.SystemAccount.PasswordChange" = "Tu contraseña de Facebook ha cambiado. Para confirmar tu contraseña, abre Configuración > Facebook y toca tu nombre."; - -/* The user facing error message when the device Facebook account is unavailable and login fails. */ -"LoginError.SystemAccount.Unavailable" = "La cuenta de Facebook no se ha configurado en el dispositivo."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ -"LoginError.SystemAccount.UnconfirmedUser" = "Tu cuenta no se ha confirmado. Inicia sesión en www.facebook.com y sigue las instrucciones."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ -"LoginError.SystemAccount.UserCheckpointed" = "No puedes iniciar sesión en las aplicaciones en este momento. Inicia sesión en www.facebook.com y sigue las instrucciones."; - -/* The message of the FBSDKLoginTooltipView */ -"LoginTooltip.Message" = "Tú tienes el control: elige la información que quieres compartir con las aplicaciones."; - -/* Title of the web dialog that prompts the user to log in to Facebook. */ -"LoginWeb.LogInTitle" = "Inicio de sesión"; - -/* The label for FBSDKSendButton */ -"SendButton.Send" = "Enviar"; - -/* The label for FBSDKShareButton */ -"ShareButton.Share" = "Compartir"; - -/* Prompts a person if this is their current account */ -"SmartLogin.NotYou" = "¿No eres tú?"; - -/* Text on a button that a person presses to confirm that they are finished with the login experience */ -"SmartLogin.ConfirmationTitle" = "Confirmar inicio de sesión"; - -/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ -"SmartLogin.Continue" = "Continuar como %@"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/fi.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/fi.lproj/FacebookSDK.strings deleted file mode 100644 index 1f1cc78722..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/fi.lproj/FacebookSDK.strings +++ /dev/null @@ -1,92 +0,0 @@ -/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ -"DeviceLogin.LogInPrompt" = "Siirry osoitteeseen %@ ja kirjoita oheinen koodi sivulle."; - -/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ -"DeviceLogin.SmartLogInPrompt" = "Pääset liittämään käyttäjätilisi avaamalla Facebook-sovelluksen mobiililaitteellasi ja tarkistamalla ilmoitukset."; - -/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ -"DeviceLogin.SmartLogInOrLabel" = "- TAI -"; - -/* The title of the label to dismiss the alert when presenting user facing error messages */ -"ErrorRecovery.Alert.OK" = "OK"; - -/* The title of the label to decline attempting error recovery */ -"ErrorRecovery.Cancel" = "Peruuta"; - -/* The fallback message to display to recover invalidated tokens */ -"ErrorRecovery.Login.Suggestion" = "Kirjaudu tähän sovellukseen uudelleen, jotta voit yhdistää Facebook-tilisi uudelleen."; - -/* The title of the label to start attempting error recovery */ -"ErrorRecovery.OK" = "OK"; - -/* The fallback message to display to retry transient errors */ -"ErrorRecovery.Transient.Suggestion" = "Palvelin on tilapäisesti varattu, yritä uudelleen."; - -/* The label for the FBSDKLikeButton when the object is not currently liked. */ -"LikeButton.Like" = "Tykkää"; - -/* The label for the FBSDKLikeButton when the object is currently liked. */ -"LikeButton.Liked" = "Tykätty"; - -/* The label for the FBSDKLoginButton action sheet to cancel logging out */ -"LoginButton.CancelLogout" = "Peruuta"; - -/* The label for the FBSDKLoginButton action sheet to confirm logging out */ -"LoginButton.ConfirmLogOut" = "Kirjaudu ulos"; - -/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ -"LoginButton.LoggedIn" = "Sisäänkirjautunut Facebookin avulla"; - -/* The format string for the FBSDKLoginButton label when the user is logged in */ -"LoginButton.LoggedInAs" = "Sisäänkirjautunut nimellä %@"; - -/* The short label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogIn" = "Kirjaudu sisään"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInContinue" = "Jatka Facebook-tunnuksilla"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInLong" = "Kirjaudu sisään Facebookin avulla"; - -/* The label for the FBSDKLoginButton when the user is currently logged in */ -"LoginButton.LogOut" = "Kirjaudu ulos"; - -/* The user facing error message when the app slider has been disabled and login fails. */ -"LoginError.SystemAccount.Disabled" = "Pääsyä Facebook-tiliin ei ole myönnetty. Tarkista laiteasetukset."; - -/* The user facing error message when the Accounts framework encounters a network error. */ -"LoginError.SystemAccount.Network" = "Yhteyttä Facebookiin ei voi muodostaa. Tarkista verkkoyhteys ja yritä sitten uudelleen."; - -/* The user facing error message when the device Facebook account password is incorrect and login fails. */ -"LoginError.SystemAccount.PasswordChange" = "Facebook-salasanasi on vaihdettu. Vahvista salasanasi avaamalla Asetukset > Facebook ja napauttamalla nimeäsi."; - -/* The user facing error message when the device Facebook account is unavailable and login fails. */ -"LoginError.SystemAccount.Unavailable" = "Facebook-tiliä ei ole määritetty laitteessa."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ -"LoginError.SystemAccount.UnconfirmedUser" = "Tiliäsi ei ole vahvistettu. Kirjaudu sisään osoitteeseen www.facebook.com ja noudata annettuja ohjeita."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ -"LoginError.SystemAccount.UserCheckpointed" = "Et pysty kirjautumaan sovelluksiin tällä hetkellä. Kirjaudu sisään osoitteeseen www.facebook.com ja noudata annettuja ohjeita."; - -/* The message of the FBSDKLoginTooltipView */ -"LoginTooltip.Message" = "Sinä voit valita, mitä tietoja jaat sovelluksille."; - -/* Title of the web dialog that prompts the user to log in to Facebook. */ -"LoginWeb.LogInTitle" = "Kirjaudu sisään"; - -/* The label for FBSDKSendButton */ -"SendButton.Send" = "Lähetä"; - -/* The label for FBSDKShareButton */ -"ShareButton.Share" = "Jaa"; - -/* Prompts a person if this is their current account */ -"SmartLogin.NotYou" = "Etkö tämä ole sinä?"; - -/* Text on a button that a person presses to confirm that they are finished with the login experience */ -"SmartLogin.ConfirmationTitle" = "Vahvista sisäänkirjautuminen"; - -/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ -"SmartLogin.Continue" = "Jatka nimellä %@"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/fil.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/fil.lproj/FacebookSDK.strings deleted file mode 100644 index 5daf341fdb..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/fil.lproj/FacebookSDK.strings +++ /dev/null @@ -1,92 +0,0 @@ -/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ -"DeviceLogin.LogInPrompt" = "Pumunta sa %@ at ilagay ang code na ipinapakita sa itaas."; - -/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ -"DeviceLogin.SmartLogInPrompt" = "Para ikonekta ang iyong account, buksan ang Facebook app sa iyong cellphone at tumingin ng mga notification."; - -/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ -"DeviceLogin.SmartLogInOrLabel" = "- O KAYA -"; - -/* The title of the label to dismiss the alert when presenting user facing error messages */ -"ErrorRecovery.Alert.OK" = "OK"; - -/* The title of the label to decline attempting error recovery */ -"ErrorRecovery.Cancel" = "Kanselahin"; - -/* The fallback message to display to recover invalidated tokens */ -"ErrorRecovery.Login.Suggestion" = "Mangyaring mag-log in muli sa app na ito para ikonekta muli ang iyong Facebook account."; - -/* The title of the label to start attempting error recovery */ -"ErrorRecovery.OK" = "OK"; - -/* The fallback message to display to retry transient errors */ -"ErrorRecovery.Transient.Suggestion" = "Pansamantalang abala ang server, pakisubukan muli."; - -/* The label for the FBSDKLikeButton when the object is not currently liked. */ -"LikeButton.Like" = "Gustuhin"; - -/* The label for the FBSDKLikeButton when the object is currently liked. */ -"LikeButton.Liked" = "Nagustuhan"; - -/* The label for the FBSDKLoginButton action sheet to cancel logging out */ -"LoginButton.CancelLogout" = "Kanselahin"; - -/* The label for the FBSDKLoginButton action sheet to confirm logging out */ -"LoginButton.ConfirmLogOut" = "Mag-log Out"; - -/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ -"LoginButton.LoggedIn" = "Naka-log in gamit ang Facebook"; - -/* The format string for the FBSDKLoginButton label when the user is logged in */ -"LoginButton.LoggedInAs" = "Naka-log in bilang si %@"; - -/* The short label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogIn" = "Mag-log in"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInContinue" = "Magatuloy sa Facebook"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInLong" = "Mag-log in sa pamamagitan ng Facebook"; - -/* The label for the FBSDKLoginButton when the user is currently logged in */ -"LoginButton.LogOut" = "Mag-log out"; - -/* The user facing error message when the app slider has been disabled and login fails. */ -"LoginError.SystemAccount.Disabled" = "Hindi binigyan ng access ang Facebook account. Beripikahin ang mga setting ng device."; - -/* The user facing error message when the Accounts framework encounters a network error. */ -"LoginError.SystemAccount.Network" = "Hindi nakakonekta sa Facebook. Tingnan ang iyong koneksyon sa network at subukan muli."; - -/* The user facing error message when the device Facebook account password is incorrect and login fails. */ -"LoginError.SystemAccount.PasswordChange" = "Nagbago ang iyong password sa Facebook. Para makumpirma ang iyong password, buksan ang Mga Setting > Facebook at i-tap ang iyong pangalan."; - -/* The user facing error message when the device Facebook account is unavailable and login fails. */ -"LoginError.SystemAccount.Unavailable" = "Hindi na-configure sa device ang Facebook account."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ -"LoginError.SystemAccount.UnconfirmedUser" = "Hindi nakumpirma ang iyong account. Mangyaring mag-log in sa www.facebook.com at sundin ang mga ibinigay na tagubilin."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ -"LoginError.SystemAccount.UserCheckpointed" = "Hindi ka makakapag-log in sa mga app sa oras na ito. Mangyaring mag-log in sa www.facebook.com at sundin ang mga ibinigay na tagubilin."; - -/* The message of the FBSDKLoginTooltipView */ -"LoginTooltip.Message" = "Ikaw ang may kontrol - piliin kung anong impormasyon ang gusto mong ibahagi sa mga app."; - -/* Title of the web dialog that prompts the user to log in to Facebook. */ -"LoginWeb.LogInTitle" = "Mag-log In"; - -/* The label for FBSDKSendButton */ -"SendButton.Send" = "Ipadala"; - -/* The label for FBSDKShareButton */ -"ShareButton.Share" = "Ibahagi"; - -/* Prompts a person if this is their current account */ -"SmartLogin.NotYou" = "Hindi ikaw?"; - -/* Text on a button that a person presses to confirm that they are finished with the login experience */ -"SmartLogin.ConfirmationTitle" = "I-confirm ang Pag-log in"; - -/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ -"SmartLogin.Continue" = "Magpatuloy bilang %@"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/fr.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/fr.lproj/FacebookSDK.strings deleted file mode 100644 index 65fb07c8d1..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/fr.lproj/FacebookSDK.strings +++ /dev/null @@ -1,92 +0,0 @@ -/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ -"DeviceLogin.LogInPrompt" = "Consultez la page %@ et saisissez le code indiqué ci-dessus."; - -/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ -"DeviceLogin.SmartLogInPrompt" = "Pour connecter votre compte, lancez l’application Facebook sur votre appareil mobile et consultez les notifications."; - -/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ -"DeviceLogin.SmartLogInOrLabel" = "- OU -"; - -/* The title of the label to dismiss the alert when presenting user facing error messages */ -"ErrorRecovery.Alert.OK" = "OK"; - -/* The title of the label to decline attempting error recovery */ -"ErrorRecovery.Cancel" = "Annuler"; - -/* The fallback message to display to recover invalidated tokens */ -"ErrorRecovery.Login.Suggestion" = "Veuillez vous connecter à nouveau à cette application pour reconnecter votre compte Facebook."; - -/* The title of the label to start attempting error recovery */ -"ErrorRecovery.OK" = "OK"; - -/* The fallback message to display to retry transient errors */ -"ErrorRecovery.Transient.Suggestion" = "Le serveur est temporairement occupé. Veuillez réessayer plus tard."; - -/* The label for the FBSDKLikeButton when the object is not currently liked. */ -"LikeButton.Like" = "J’aime"; - -/* The label for the FBSDKLikeButton when the object is currently liked. */ -"LikeButton.Liked" = "J’aime déjà"; - -/* The label for the FBSDKLoginButton action sheet to cancel logging out */ -"LoginButton.CancelLogout" = "Annuler"; - -/* The label for the FBSDKLoginButton action sheet to confirm logging out */ -"LoginButton.ConfirmLogOut" = "Déconnexion"; - -/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ -"LoginButton.LoggedIn" = "Connecté(e) à l’aide de Facebook"; - -/* The format string for the FBSDKLoginButton label when the user is logged in */ -"LoginButton.LoggedInAs" = "Connecté(e) en tant que %@"; - -/* The short label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogIn" = "Connexion"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInContinue" = "Continuer avec Facebook"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInLong" = "Connexion avec Facebook"; - -/* The label for the FBSDKLoginButton when the user is currently logged in */ -"LoginButton.LogOut" = "Déconnexion"; - -/* The user facing error message when the app slider has been disabled and login fails. */ -"LoginError.SystemAccount.Disabled" = "L’accès au compte Facebook n’a pas été autorisé. Vérifiez les paramètres de l’appareil."; - -/* The user facing error message when the Accounts framework encounters a network error. */ -"LoginError.SystemAccount.Network" = "Connexion à Facebook impossible. Vérifiez votre connexion avant de réessayer."; - -/* The user facing error message when the device Facebook account password is incorrect and login fails. */ -"LoginError.SystemAccount.PasswordChange" = "Votre mot de passe Facebook a changé. Pour confirmer votre mot de passe, ouvrez Paramètres > Facebook et saisissez votre nom."; - -/* The user facing error message when the device Facebook account is unavailable and login fails. */ -"LoginError.SystemAccount.Unavailable" = "Le compte Facebook n’a pas été configuré sur l’appareil."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ -"LoginError.SystemAccount.UnconfirmedUser" = "Votre compte n’est pas confirmé. Veuillez vous connecter à www.facebook.com et suivre les instructions indiquées."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ -"LoginError.SystemAccount.UserCheckpointed" = "Vous ne pouvez pas vous connecter à des applications pour le moment. Veuillez vous connecter à www.facebook.com et suivre les instructions indiquées."; - -/* The message of the FBSDKLoginTooltipView */ -"LoginTooltip.Message" = "Vous gardez le contrôle. Choisissez les informations que vous souhaitez partager avec les applications."; - -/* Title of the web dialog that prompts the user to log in to Facebook. */ -"LoginWeb.LogInTitle" = "Connexion"; - -/* The label for FBSDKSendButton */ -"SendButton.Send" = "Envoyer"; - -/* The label for FBSDKShareButton */ -"ShareButton.Share" = "Partager"; - -/* Prompts a person if this is their current account */ -"SmartLogin.NotYou" = "Ce n’est pas vous ?"; - -/* Text on a button that a person presses to confirm that they are finished with the login experience */ -"SmartLogin.ConfirmationTitle" = "Confirmer la connexion"; - -/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ -"SmartLogin.Continue" = "Continuer en tant que %@"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/gu.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/gu.lproj/FacebookSDK.strings deleted file mode 100644 index a91785a83c..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/gu.lproj/FacebookSDK.strings +++ /dev/null @@ -1,92 +0,0 @@ -/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ -"DeviceLogin.LogInPrompt" = "%@ ની મુલાકાત લો અને ઉપર બતાવ્યા પ્રમાણે કોડ દાખલ કરો."; - -/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ -"DeviceLogin.SmartLogInPrompt" = "તમારા એકાઉન્ટ સાથે જોડાવા માટે, તમારા મોબાઇલ ઉપકરણ પર Facebook એપ્લિકેશન ખોલો અને સૂચનો માટે તપાસો."; - -/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ -"DeviceLogin.SmartLogInOrLabel" = "- અથવા -"; - -/* The title of the label to dismiss the alert when presenting user facing error messages */ -"ErrorRecovery.Alert.OK" = "ઠીક"; - -/* The title of the label to decline attempting error recovery */ -"ErrorRecovery.Cancel" = "રદ કરો"; - -/* The fallback message to display to recover invalidated tokens */ -"ErrorRecovery.Login.Suggestion" = "તમારા ફેસબુક ખાતાને ફરીથી કનેક્ટ કરવા માટે કૃપા કરીને આ એપ્લિકેશનમાં ફરી લૉગ ઇન કરો."; - -/* The title of the label to start attempting error recovery */ -"ErrorRecovery.OK" = "ઠીક"; - -/* The fallback message to display to retry transient errors */ -"ErrorRecovery.Transient.Suggestion" = "સર્વર અસ્થાયીરૂપે વ્યસ્ત છે, કૃપા કરીને ફરી પ્રયાસ કરો."; - -/* The label for the FBSDKLikeButton when the object is not currently liked. */ -"LikeButton.Like" = "પસંદ કરો"; - -/* The label for the FBSDKLikeButton when the object is currently liked. */ -"LikeButton.Liked" = "પસંદ કર્યું"; - -/* The label for the FBSDKLoginButton action sheet to cancel logging out */ -"LoginButton.CancelLogout" = "રદ કરો"; - -/* The label for the FBSDKLoginButton action sheet to confirm logging out */ -"LoginButton.ConfirmLogOut" = "લૉગ આઉટ કરો"; - -/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ -"LoginButton.LoggedIn" = "ફેસબુકનો ઉપયોગ કરીને લૉગ ઇન કરો"; - -/* The format string for the FBSDKLoginButton label when the user is logged in */ -"LoginButton.LoggedInAs" = "%@ તરીકે લૉગ ઇન થયાં"; - -/* The short label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogIn" = "લૉગ ઇન કરો"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInContinue" = "Facebook સાથે ચાલુ રાખો"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInLong" = "ફેસબુક સાથે લૉગ ઇન કરો"; - -/* The label for the FBSDKLoginButton when the user is currently logged in */ -"LoginButton.LogOut" = "લૉગ આઉટ કરો"; - -/* The user facing error message when the app slider has been disabled and login fails. */ -"LoginError.SystemAccount.Disabled" = "ફેસબુક ખાતા પર ઍક્સેસ આપવામાં આવી નથી. ઉપકરણ સેટિંગ્સ ચકાસો"; - -/* The user facing error message when the Accounts framework encounters a network error. */ -"LoginError.SystemAccount.Network" = "ફેસબુકથી કનેક્ટ કરવામાં અસમર્થ. તમારું નેટવર્ક કનેક્શન તપાસો અને ફરી પ્રયાસ કરો."; - -/* The user facing error message when the device Facebook account password is incorrect and login fails. */ -"LoginError.SystemAccount.PasswordChange" = "તમારો ફેસબુક પાસવર્ડ બદલાઈ ગયો છે. તમારા પાસવર્ડની પુષ્ટિ કરવા માટે, સેટિંગ્સ > ફેસબુક ખોલો અને તમારા નામ પર ટૅપ કરો."; - -/* The user facing error message when the device Facebook account is unavailable and login fails. */ -"LoginError.SystemAccount.Unavailable" = "ઉપકરણ પર ફેસબુક ખાતું કન્ફિગર કરવામાં આવ્યું નથી."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ -"LoginError.SystemAccount.UnconfirmedUser" = "તમારા ખાતાની પુષ્ટિ કરવામાં આવી નથી. કૃપા કરીને www.facebook.com પર લૉગ ઇન કરો અને આપેલા સૂચનોને અનુસરો."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ -"LoginError.SystemAccount.UserCheckpointed" = "તમે આ સમયે એપ્લિકેશન્સમાં લૉગ ઇન કરી શકતાં નથી. કૃપા કરીને www.facebook.com પર લૉગ ઇન કરો અને આપેલા સૂચનોને અનુસરો."; - -/* The message of the FBSDKLoginTooltipView */ -"LoginTooltip.Message" = "તમે નિયંત્રણ કરો છો - તમે એપ્લિકેશન્સ સાથે કઈ માહિતી શેર કરવા માંગો છો તે પસંદ કરો."; - -/* Title of the web dialog that prompts the user to log in to Facebook. */ -"LoginWeb.LogInTitle" = "લૉગ ઇન કરો"; - -/* The label for FBSDKSendButton */ -"SendButton.Send" = "મોકલો"; - -/* The label for FBSDKShareButton */ -"ShareButton.Share" = "શેર કરો"; - -/* Prompts a person if this is their current account */ -"SmartLogin.NotYou" = "તમે નહિ?"; - -/* Text on a button that a person presses to confirm that they are finished with the login experience */ -"SmartLogin.ConfirmationTitle" = "લૉગિનની પુષ્ટિ કરો"; - -/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ -"SmartLogin.Continue" = "%@ તરીકે ચાલુ રાખો"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/he.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/he.lproj/FacebookSDK.strings deleted file mode 100644 index 2e2a3c56a8..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/he.lproj/FacebookSDK.strings +++ /dev/null @@ -1,92 +0,0 @@ -/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ -"DeviceLogin.LogInPrompt" = "בקר ב-%@ והזן את הקוד המופיע למעלה."; - -/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ -"DeviceLogin.SmartLogInPrompt" = "כדי לחבר את החשבון שלך, פתח את אפליקציית פייסבוק במכשיר הנייד שלך ובדוק אם יש התראות."; - -/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ -"DeviceLogin.SmartLogInOrLabel" = "- או -"; - -/* The title of the label to dismiss the alert when presenting user facing error messages */ -"ErrorRecovery.Alert.OK" = "אישור"; - -/* The title of the label to decline attempting error recovery */ -"ErrorRecovery.Cancel" = "ביטול"; - -/* The fallback message to display to recover invalidated tokens */ -"ErrorRecovery.Login.Suggestion" = "התחבר לאפליקציה זו שוב כדי לחבר מחדש את חשבון הפייסבוק שלך."; - -/* The title of the label to start attempting error recovery */ -"ErrorRecovery.OK" = "אישור"; - -/* The fallback message to display to retry transient errors */ -"ErrorRecovery.Transient.Suggestion" = "השרת עמוס באופן זמני, נסה שוב."; - -/* The label for the FBSDKLikeButton when the object is not currently liked. */ -"LikeButton.Like" = "אהבתי"; - -/* The label for the FBSDKLikeButton when the object is currently liked. */ -"LikeButton.Liked" = "אהבתי"; - -/* The label for the FBSDKLoginButton action sheet to cancel logging out */ -"LoginButton.CancelLogout" = "ביטול"; - -/* The label for the FBSDKLoginButton action sheet to confirm logging out */ -"LoginButton.ConfirmLogOut" = "התנתק"; - -/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ -"LoginButton.LoggedIn" = "מחובר באמצעות פייסבוק"; - -/* The format string for the FBSDKLoginButton label when the user is logged in */ -"LoginButton.LoggedInAs" = "מחובר בתור %@"; - -/* The short label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogIn" = "התחבר"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInContinue" = "המשך עם פייסבוק"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInLong" = "התחבר באמצעות פייסבוק"; - -/* The label for the FBSDKLoginButton when the user is currently logged in */ -"LoginButton.LogOut" = "התנתק"; - -/* The user facing error message when the app slider has been disabled and login fails. */ -"LoginError.SystemAccount.Disabled" = "לא הוענקה גישה לחשבון הפייסבוק. אמת את הגדרות המכשיר."; - -/* The user facing error message when the Accounts framework encounters a network error. */ -"LoginError.SystemAccount.Network" = "לא ניתן להתחבר לפייסבוק. בדוק את החיבור שלך לרשת ונסה שוב."; - -/* The user facing error message when the device Facebook account password is incorrect and login fails. */ -"LoginError.SystemAccount.PasswordChange" = "סיסמת הפייסבוק שלך השתנתה. כדי לאשר את הסיסמה, פתח את 'הגדרות' > 'פייסבוק' והקש על שמך."; - -/* The user facing error message when the device Facebook account is unavailable and login fails. */ -"LoginError.SystemAccount.Unavailable" = "חשבון הפייסבוק לא הוגדר במכשיר."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ -"LoginError.SystemAccount.UnconfirmedUser" = "החשבון שלך לא אושר. התחבר ל-www.facebook.com ופעל בהתאם להוראות שיוצגו."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ -"LoginError.SystemAccount.UserCheckpointed" = "לא ניתן להתחבר לאפליקציות כעת. התחבר ל-www.facebook.com ופעל בהתאם להוראות שיוצגו."; - -/* The message of the FBSDKLoginTooltipView */ -"LoginTooltip.Message" = "אתה מחליט - בחר איזה מידע אתה רוצה לשתף עם אפליקציות."; - -/* Title of the web dialog that prompts the user to log in to Facebook. */ -"LoginWeb.LogInTitle" = "התחבר"; - -/* The label for FBSDKSendButton */ -"SendButton.Send" = "שלח"; - -/* The label for FBSDKShareButton */ -"ShareButton.Share" = "שתף"; - -/* Prompts a person if this is their current account */ -"SmartLogin.NotYou" = "לא אתה?"; - -/* Text on a button that a person presses to confirm that they are finished with the login experience */ -"SmartLogin.ConfirmationTitle" = "אשר התחברות"; - -/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ -"SmartLogin.Continue" = "המשך כ-%@"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/hi.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/hi.lproj/FacebookSDK.strings deleted file mode 100644 index 14b1b959ef..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/hi.lproj/FacebookSDK.strings +++ /dev/null @@ -1,92 +0,0 @@ -/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ -"DeviceLogin.LogInPrompt" = "%@ पर जाएँ और ऊपर दिया गया कोड दर्ज करें."; - -/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ -"DeviceLogin.SmartLogInPrompt" = "अपने खाते को कनेक्ट करने के लिए, अपने मोबाइल एप्लिकेशन में Facebook एप्लिकेशन खोलें और सूचनाओं के लिए जाँच करें."; - -/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ -"DeviceLogin.SmartLogInOrLabel" = "- या -"; - -/* The title of the label to dismiss the alert when presenting user facing error messages */ -"ErrorRecovery.Alert.OK" = "ठीक"; - -/* The title of the label to decline attempting error recovery */ -"ErrorRecovery.Cancel" = "रद्द करें"; - -/* The fallback message to display to recover invalidated tokens */ -"ErrorRecovery.Login.Suggestion" = "अपने Facebook खाते से फिर से कनेक्ट होने के लिए कृपया इस एप्लिकेशन में फिर से लॉग इन करें."; - -/* The title of the label to start attempting error recovery */ -"ErrorRecovery.OK" = "ठीक"; - -/* The fallback message to display to retry transient errors */ -"ErrorRecovery.Transient.Suggestion" = "सर्वर अस्थायी रूप से व्यस्त है, कृपया फिर से कोशिश करें."; - -/* The label for the FBSDKLikeButton when the object is not currently liked. */ -"LikeButton.Like" = "पसंद करें"; - -/* The label for the FBSDKLikeButton when the object is currently liked. */ -"LikeButton.Liked" = "पसंद किया"; - -/* The label for the FBSDKLoginButton action sheet to cancel logging out */ -"LoginButton.CancelLogout" = "रद्द करें"; - -/* The label for the FBSDKLoginButton action sheet to confirm logging out */ -"LoginButton.ConfirmLogOut" = "लॉग आउट करें"; - -/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ -"LoginButton.LoggedIn" = "Facebook का उपयोग करके लॉग इन किया हुआ है"; - -/* The format string for the FBSDKLoginButton label when the user is logged in */ -"LoginButton.LoggedInAs" = "%@ के रूप में लॉग इन किया हुआ है"; - -/* The short label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogIn" = "लॉग इन करें"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInContinue" = "Facebook के साथ जारी रखें"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInLong" = "Facebook से लॉग इन करें"; - -/* The label for the FBSDKLoginButton when the user is currently logged in */ -"LoginButton.LogOut" = "लॉग आउट"; - -/* The user facing error message when the app slider has been disabled and login fails. */ -"LoginError.SystemAccount.Disabled" = "Facebook खाते को एक्सेस नहीं दी गई है. डिवाइस सेटिंग सत्यापित करें."; - -/* The user facing error message when the Accounts framework encounters a network error. */ -"LoginError.SystemAccount.Network" = "Facebook से कनेक्ट होने में असमर्थ. कृपया अपने नेटवर्क कनेक्शन की जाँच करें फिर से प्रयास करें."; - -/* The user facing error message when the device Facebook account password is incorrect and login fails. */ -"LoginError.SystemAccount.PasswordChange" = "आपका Facebook पासवर्ड बदल गया है. अपना पासवर्ड कन्फ़र्म करने के लिए, सेटिंग > Facebook खोलें और अपना नाम टैप करें."; - -/* The user facing error message when the device Facebook account is unavailable and login fails. */ -"LoginError.SystemAccount.Unavailable" = "डिवाइस पर Facebook खाता कॉन्फ़िगर नहीं किया गया है."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ -"LoginError.SystemAccount.UnconfirmedUser" = "आपका खाता कन्फ़र्म नहीं किया गया है. कृपया www.facebook.com में लॉग इन करें और दिए गए निर्देशों का पालन करें."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ -"LoginError.SystemAccount.UserCheckpointed" = "आप इस समय एप्लिकेशन में लॉग इन नहीं कर सकते. कृपया www.facebook.com में लॉग इन करें और दिए गए निर्देशों का पालन करें."; - -/* The message of the FBSDKLoginTooltipView */ -"LoginTooltip.Message" = "आप नियंत्रण में हैं - चुनें कि आप एप्लिकेशन से कौन-सी जानकारी साझा करना चाहते हैं."; - -/* Title of the web dialog that prompts the user to log in to Facebook. */ -"LoginWeb.LogInTitle" = "लॉग इन करें"; - -/* The label for FBSDKSendButton */ -"SendButton.Send" = "भेजें"; - -/* The label for FBSDKShareButton */ -"ShareButton.Share" = "साझा करें"; - -/* Prompts a person if this is their current account */ -"SmartLogin.NotYou" = "आप नहीं हैं?"; - -/* Text on a button that a person presses to confirm that they are finished with the login experience */ -"SmartLogin.ConfirmationTitle" = "लॉग इन कन्फ़र्म करें"; - -/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ -"SmartLogin.Continue" = "%@ के रूप में जारी रखें"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/hr.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/hr.lproj/FacebookSDK.strings deleted file mode 100644 index 45e3312642..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/hr.lproj/FacebookSDK.strings +++ /dev/null @@ -1,92 +0,0 @@ -/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ -"DeviceLogin.LogInPrompt" = "Posjetite adresu %@ i unesite gore prikazan kod."; - -/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ -"DeviceLogin.SmartLogInPrompt" = "Da biste povezali račun, otvorite aplikaciju Facebook na mobilnom uređaju i potražite obavijesti."; - -/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ -"DeviceLogin.SmartLogInOrLabel" = "- ILI -"; - -/* The title of the label to dismiss the alert when presenting user facing error messages */ -"ErrorRecovery.Alert.OK" = "U redu"; - -/* The title of the label to decline attempting error recovery */ -"ErrorRecovery.Cancel" = "Odustani"; - -/* The fallback message to display to recover invalidated tokens */ -"ErrorRecovery.Login.Suggestion" = "Ponovo se prijavite u ovu aplikaciju kako biste se ponovo povezali s Facebook računom."; - -/* The title of the label to start attempting error recovery */ -"ErrorRecovery.OK" = "U redu"; - -/* The fallback message to display to retry transient errors */ -"ErrorRecovery.Transient.Suggestion" = "Poslužitelj je privremeno zauzet, pokušajte ponovo."; - -/* The label for the FBSDKLikeButton when the object is not currently liked. */ -"LikeButton.Like" = "Sviđa mi se"; - -/* The label for the FBSDKLikeButton when the object is currently liked. */ -"LikeButton.Liked" = "Označeno sa \"sviđa mi se\""; - -/* The label for the FBSDKLoginButton action sheet to cancel logging out */ -"LoginButton.CancelLogout" = "Odustani"; - -/* The label for the FBSDKLoginButton action sheet to confirm logging out */ -"LoginButton.ConfirmLogOut" = "Odjavi se"; - -/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ -"LoginButton.LoggedIn" = "Prijavljen putem Facebooka"; - -/* The format string for the FBSDKLoginButton label when the user is logged in */ -"LoginButton.LoggedInAs" = "Prijavljen kao %@"; - -/* The short label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogIn" = "Prijavi se"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInContinue" = "Nastavite s korištenjem Facebooka"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInLong" = "Prijava putem Facebooka"; - -/* The label for the FBSDKLoginButton when the user is currently logged in */ -"LoginButton.LogOut" = "Odjavi se"; - -/* The user facing error message when the app slider has been disabled and login fails. */ -"LoginError.SystemAccount.Disabled" = "Pristup Facebook računu nije odobren. Provjerite postavke uređaja."; - -/* The user facing error message when the Accounts framework encounters a network error. */ -"LoginError.SystemAccount.Network" = "Povezivanje s Facebookom nije uspjelo. Provjerite mrežnu vezu i pokušajte ponovo."; - -/* The user facing error message when the device Facebook account password is incorrect and login fails. */ -"LoginError.SystemAccount.PasswordChange" = "Promijenili ste lozinku za Facebook. Za potvrdu lozinke otvorite Postavke > Facebook i dodirnite svoje ime."; - -/* The user facing error message when the device Facebook account is unavailable and login fails. */ -"LoginError.SystemAccount.Unavailable" = "Na uređaju nije konfiguriran račun za Facebook."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ -"LoginError.SystemAccount.UnconfirmedUser" = "Vaš račun nije potvrđen. Prijavite se na www.facebook.com i slijedite upute."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ -"LoginError.SystemAccount.UserCheckpointed" = "U ovome trenutku prijava u aplikacije nije moguća. Prijavite se na www.facebook.com i slijedite upute."; - -/* The message of the FBSDKLoginTooltipView */ -"LoginTooltip.Message" = "Vi odlučujete – odaberite koje podatke želite dijeliti u aplikacijama."; - -/* Title of the web dialog that prompts the user to log in to Facebook. */ -"LoginWeb.LogInTitle" = "Prijava"; - -/* The label for FBSDKSendButton */ -"SendButton.Send" = "Pošalji"; - -/* The label for FBSDKShareButton */ -"ShareButton.Share" = "Dijeli"; - -/* Prompts a person if this is their current account */ -"SmartLogin.NotYou" = "To niste vi?"; - -/* Text on a button that a person presses to confirm that they are finished with the login experience */ -"SmartLogin.ConfirmationTitle" = "Potvrda prijave"; - -/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ -"SmartLogin.Continue" = "Nastavi kao %@"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/hu.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/hu.lproj/FacebookSDK.strings deleted file mode 100644 index 6d74f46703..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/hu.lproj/FacebookSDK.strings +++ /dev/null @@ -1,92 +0,0 @@ -/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ -"DeviceLogin.LogInPrompt" = "Keresd fel a %@ címet, és írd be a fent megjelenített kódot."; - -/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ -"DeviceLogin.SmartLogInPrompt" = "A fiók hozzákapcsolásához nyisd meg a Facebook alkalmazást a mobilkészülékeden, és nézd meg az értesítéseket."; - -/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ -"DeviceLogin.SmartLogInOrLabel" = "- VAGY -"; - -/* The title of the label to dismiss the alert when presenting user facing error messages */ -"ErrorRecovery.Alert.OK" = "OK"; - -/* The title of the label to decline attempting error recovery */ -"ErrorRecovery.Cancel" = "Mégsem"; - -/* The fallback message to display to recover invalidated tokens */ -"ErrorRecovery.Login.Suggestion" = "Kérjük, jelentkezz be újra ebbe az alkalmazásba, ha szeretnéd ismét összekapcsolni a Facebook-fiókoddal."; - -/* The title of the label to start attempting error recovery */ -"ErrorRecovery.OK" = "OK"; - -/* The fallback message to display to retry transient errors */ -"ErrorRecovery.Transient.Suggestion" = "A kiszolgáló átmenetileg foglalt, próbáld meg újra."; - -/* The label for the FBSDKLikeButton when the object is not currently liked. */ -"LikeButton.Like" = "Tetszik"; - -/* The label for the FBSDKLikeButton when the object is currently liked. */ -"LikeButton.Liked" = "Kedveled"; - -/* The label for the FBSDKLoginButton action sheet to cancel logging out */ -"LoginButton.CancelLogout" = "Mégsem"; - -/* The label for the FBSDKLoginButton action sheet to confirm logging out */ -"LoginButton.ConfirmLogOut" = "Kijelentkezés"; - -/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ -"LoginButton.LoggedIn" = "Bejelentkezve a Facebook használatával"; - -/* The format string for the FBSDKLoginButton label when the user is logged in */ -"LoginButton.LoggedInAs" = "Bejelentkezve %@ néven"; - -/* The short label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogIn" = "Bejelentkezés"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInContinue" = "Folytatás a Facebookkal"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInLong" = "Bejelentkezés a Facebook használatával"; - -/* The label for the FBSDKLoginButton when the user is currently logged in */ -"LoginButton.LogOut" = "Kijelentkezés"; - -/* The user facing error message when the app slider has been disabled and login fails. */ -"LoginError.SystemAccount.Disabled" = "A Facebook-fiókhoz nincs megadva a hozzáférés. Ellenőrizd az eszköz beállításait."; - -/* The user facing error message when the Accounts framework encounters a network error. */ -"LoginError.SystemAccount.Network" = "Nem sikerült kapcsolódni a Facebookhoz. Ellenőrizd a hálózati kapcsolatot, majd próbáld meg újra."; - -/* The user facing error message when the device Facebook account password is incorrect and login fails. */ -"LoginError.SystemAccount.PasswordChange" = "Facebook-jelszavad megváltozott. A jelszó megerősítéséhez nyisd meg a Settings (Beállítások) > Facebook pontot, és koppints a nevedre."; - -/* The user facing error message when the device Facebook account is unavailable and login fails. */ -"LoginError.SystemAccount.Unavailable" = "A készüléken nincs beállítva a Facebook-fiók."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ -"LoginError.SystemAccount.UnconfirmedUser" = "A fiókod nincs megerősítve. Jelentkezz be a www.facebook.com címre, és kövesd az utasításokat."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ -"LoginError.SystemAccount.UserCheckpointed" = "Jelenleg nem tudsz alkalmazásokba bejelentkezni. Jelentkezz be a www.facebook.com címre, és kövesd az utasításokat."; - -/* The message of the FBSDKLoginTooltipView */ -"LoginTooltip.Message" = "A döntés a kezedben van: kiválaszthatod, hogy milyen adatokat osztasz meg az alkalmazásokkal."; - -/* Title of the web dialog that prompts the user to log in to Facebook. */ -"LoginWeb.LogInTitle" = "Bejelentkezés"; - -/* The label for FBSDKSendButton */ -"SendButton.Send" = "Küldés"; - -/* The label for FBSDKShareButton */ -"ShareButton.Share" = "Megosztás"; - -/* Prompts a person if this is their current account */ -"SmartLogin.NotYou" = "Nem te vagy az?"; - -/* Text on a button that a person presses to confirm that they are finished with the login experience */ -"SmartLogin.ConfirmationTitle" = "Bejelentkezés megerősítése"; - -/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ -"SmartLogin.Continue" = "Folytatás mint %@"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/id.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/id.lproj/FacebookSDK.strings deleted file mode 100644 index 651b51b22d..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/id.lproj/FacebookSDK.strings +++ /dev/null @@ -1,92 +0,0 @@ -/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ -"DeviceLogin.LogInPrompt" = "Kunjungi %@ dan masukkan kode yang ditampilkan di atas."; - -/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ -"DeviceLogin.SmartLogInPrompt" = "Untuk menghubungkan akun Anda, buka aplikasi Facebook di perangkat seluler Anda dan periksa pemberitahuan."; - -/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ -"DeviceLogin.SmartLogInOrLabel" = "- ATAU -"; - -/* The title of the label to dismiss the alert when presenting user facing error messages */ -"ErrorRecovery.Alert.OK" = "OK"; - -/* The title of the label to decline attempting error recovery */ -"ErrorRecovery.Cancel" = "Batal"; - -/* The fallback message to display to recover invalidated tokens */ -"ErrorRecovery.Login.Suggestion" = "Harap masuk ke aplikasi ini lagi untuk menghubungkan kembali akun Facebook Anda."; - -/* The title of the label to start attempting error recovery */ -"ErrorRecovery.OK" = "OK"; - -/* The fallback message to display to retry transient errors */ -"ErrorRecovery.Transient.Suggestion" = "Server untuk sementara sedang sibuk, harap coba lagi."; - -/* The label for the FBSDKLikeButton when the object is not currently liked. */ -"LikeButton.Like" = "Suka"; - -/* The label for the FBSDKLikeButton when the object is currently liked. */ -"LikeButton.Liked" = "Disukai"; - -/* The label for the FBSDKLoginButton action sheet to cancel logging out */ -"LoginButton.CancelLogout" = "Batal"; - -/* The label for the FBSDKLoginButton action sheet to confirm logging out */ -"LoginButton.ConfirmLogOut" = "Keluar"; - -/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ -"LoginButton.LoggedIn" = "Masuk menggunakan Facebook"; - -/* The format string for the FBSDKLoginButton label when the user is logged in */ -"LoginButton.LoggedInAs" = "Masuk sebagai %@"; - -/* The short label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogIn" = "Masuk"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInContinue" = "Lanjutkan dengan Facebook"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInLong" = "Masuk menggunakan Facebook"; - -/* The label for the FBSDKLoginButton when the user is currently logged in */ -"LoginButton.LogOut" = "Keluar"; - -/* The user facing error message when the app slider has been disabled and login fails. */ -"LoginError.SystemAccount.Disabled" = "Akses belum diberikan ke akun Facebook. Verifikasi pengaturan perangkat."; - -/* The user facing error message when the Accounts framework encounters a network error. */ -"LoginError.SystemAccount.Network" = "Tidak dapat terhubung ke Facebook. Periksa koneksi jaringan dan coba lagi."; - -/* The user facing error message when the device Facebook account password is incorrect and login fails. */ -"LoginError.SystemAccount.PasswordChange" = "Kata sandi Facebook Anda telah diubah. Untuk mengonfirmasi kata sandi Anda, buka Pengaturan > Facebook, lalu ketuk nama Anda."; - -/* The user facing error message when the device Facebook account is unavailable and login fails. */ -"LoginError.SystemAccount.Unavailable" = "Akun Facebook belum dikonfigurasikan di perangkat."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ -"LoginError.SystemAccount.UnconfirmedUser" = "Akun Anda tidak dikonfirmasi. Masuk ke www.facebook.com dan ikuti petunjuknya."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ -"LoginError.SystemAccount.UserCheckpointed" = "Saat ini Anda tidak dapat masuk ke aplikasi. Masuk ke www.facebook.com dan ikuti petunjuknya."; - -/* The message of the FBSDKLoginTooltipView */ -"LoginTooltip.Message" = "Anda memegang kendali - pilih info yang ingin Anda bagikan dengan aplikasi."; - -/* Title of the web dialog that prompts the user to log in to Facebook. */ -"LoginWeb.LogInTitle" = "Masuk"; - -/* The label for FBSDKSendButton */ -"SendButton.Send" = "Kirim"; - -/* The label for FBSDKShareButton */ -"ShareButton.Share" = "Berbagi"; - -/* Prompts a person if this is their current account */ -"SmartLogin.NotYou" = "Bukan Anda?"; - -/* Text on a button that a person presses to confirm that they are finished with the login experience */ -"SmartLogin.ConfirmationTitle" = "Konfirmasikan Masuk"; - -/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ -"SmartLogin.Continue" = "Lanjutkan sebagai %@"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/it.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/it.lproj/FacebookSDK.strings deleted file mode 100644 index 469ea536a7..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/it.lproj/FacebookSDK.strings +++ /dev/null @@ -1,92 +0,0 @@ -/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ -"DeviceLogin.LogInPrompt" = "Visita %@ e inserisci il codice mostrato sopra."; - -/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ -"DeviceLogin.SmartLogInPrompt" = "Per collegare il tuo account, apri l'app Facebook sul tuo dispositivo mobile e controlla se hai notifiche."; - -/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ -"DeviceLogin.SmartLogInOrLabel" = "- OPPURE -"; - -/* The title of the label to dismiss the alert when presenting user facing error messages */ -"ErrorRecovery.Alert.OK" = "OK"; - -/* The title of the label to decline attempting error recovery */ -"ErrorRecovery.Cancel" = "Annulla"; - -/* The fallback message to display to recover invalidated tokens */ -"ErrorRecovery.Login.Suggestion" = "Effettua di nuovo l'accesso a questa applicazione per riconnettere il tuo account Facebook."; - -/* The title of the label to start attempting error recovery */ -"ErrorRecovery.OK" = "OK"; - -/* The fallback message to display to retry transient errors */ -"ErrorRecovery.Transient.Suggestion" = "Il server è temporaneamente occupato, riprova."; - -/* The label for the FBSDKLikeButton when the object is not currently liked. */ -"LikeButton.Like" = "Mi piace"; - -/* The label for the FBSDKLikeButton when the object is currently liked. */ -"LikeButton.Liked" = "Ti piace"; - -/* The label for the FBSDKLoginButton action sheet to cancel logging out */ -"LoginButton.CancelLogout" = "Annulla"; - -/* The label for the FBSDKLoginButton action sheet to confirm logging out */ -"LoginButton.ConfirmLogOut" = "Esci"; - -/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ -"LoginButton.LoggedIn" = "Accesso effettuato tramite Facebook"; - -/* The format string for the FBSDKLoginButton label when the user is logged in */ -"LoginButton.LoggedInAs" = "Accesso effettuato come %@"; - -/* The short label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogIn" = "Accedi"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInContinue" = "Continua con Facebook"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInLong" = "Accedi con Facebook"; - -/* The label for the FBSDKLoginButton when the user is currently logged in */ -"LoginButton.LogOut" = "Esci"; - -/* The user facing error message when the app slider has been disabled and login fails. */ -"LoginError.SystemAccount.Disabled" = "All'account Facebook non è stato concesso l'accesso. Verifica le impostazioni del dispositivo."; - -/* The user facing error message when the Accounts framework encounters a network error. */ -"LoginError.SystemAccount.Network" = "Impossibile connettersi a Facebook. Controlla la tua connessione e riprova."; - -/* The user facing error message when the device Facebook account password is incorrect and login fails. */ -"LoginError.SystemAccount.PasswordChange" = "La tua password di Facebook è stata modificata. Per confermare la password, apri Impostazioni > Facebook e tocca il tuo nome."; - -/* The user facing error message when the device Facebook account is unavailable and login fails. */ -"LoginError.SystemAccount.Unavailable" = "L'account Facebook non è stato configurato nel dispositivo."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ -"LoginError.SystemAccount.UnconfirmedUser" = "Il tuo account non è stato verificato. Accedi a www.facebook.com e segui le istruzioni fornite."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ -"LoginError.SystemAccount.UserCheckpointed" = "Impossibile accedere alle applicazioni al momento. Accedi a www.facebook.com e segui le istruzioni fornite."; - -/* The message of the FBSDKLoginTooltipView */ -"LoginTooltip.Message" = "Il controllo è nelle tue mani: scegli quali informazioni condividere con le app."; - -/* Title of the web dialog that prompts the user to log in to Facebook. */ -"LoginWeb.LogInTitle" = "Accedi"; - -/* The label for FBSDKSendButton */ -"SendButton.Send" = "Invia"; - -/* The label for FBSDKShareButton */ -"ShareButton.Share" = "Condividi"; - -/* Prompts a person if this is their current account */ -"SmartLogin.NotYou" = "Non sei tu?"; - -/* Text on a button that a person presses to confirm that they are finished with the login experience */ -"SmartLogin.ConfirmationTitle" = "Conferma l'accesso"; - -/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ -"SmartLogin.Continue" = "Continua come %@"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/ja.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/ja.lproj/FacebookSDK.strings deleted file mode 100644 index fb08bd740b..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/ja.lproj/FacebookSDK.strings +++ /dev/null @@ -1,92 +0,0 @@ -/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ -"DeviceLogin.LogInPrompt" = "%@にアクセスし、上に表示されているコードを入力してください。"; - -/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ -"DeviceLogin.SmartLogInPrompt" = "アカウントをリンクするには、お使いのモバイル機器でFacebookアプリを開き、お知らせをご確認ください。"; - -/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ -"DeviceLogin.SmartLogInOrLabel" = "- または -"; - -/* The title of the label to dismiss the alert when presenting user facing error messages */ -"ErrorRecovery.Alert.OK" = "OK"; - -/* The title of the label to decline attempting error recovery */ -"ErrorRecovery.Cancel" = "キャンセル"; - -/* The fallback message to display to recover invalidated tokens */ -"ErrorRecovery.Login.Suggestion" = "このアプリにもう一度ログインして、Facebookアカウントを再接続してください。"; - -/* The title of the label to start attempting error recovery */ -"ErrorRecovery.OK" = "OK"; - -/* The fallback message to display to retry transient errors */ -"ErrorRecovery.Transient.Suggestion" = "サーバーが一時的にビジーです。もう一度お試しください。"; - -/* The label for the FBSDKLikeButton when the object is not currently liked. */ -"LikeButton.Like" = "いいね!"; - -/* The label for the FBSDKLikeButton when the object is currently liked. */ -"LikeButton.Liked" = "いいね!済み"; - -/* The label for the FBSDKLoginButton action sheet to cancel logging out */ -"LoginButton.CancelLogout" = "キャンセル"; - -/* The label for the FBSDKLoginButton action sheet to confirm logging out */ -"LoginButton.ConfirmLogOut" = "ログアウト"; - -/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ -"LoginButton.LoggedIn" = "Facebookを使用してログイン中"; - -/* The format string for the FBSDKLoginButton label when the user is logged in */ -"LoginButton.LoggedInAs" = "%@としてログイン中"; - -/* The short label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogIn" = "ログイン"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInContinue" = "Facebookで続ける"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInLong" = "Facebookでログイン"; - -/* The label for the FBSDKLoginButton when the user is currently logged in */ -"LoginButton.LogOut" = "ログアウト"; - -/* The user facing error message when the app slider has been disabled and login fails. */ -"LoginError.SystemAccount.Disabled" = "Facebookアカウントにアクセス権が与えられていません。デバイス設定を確認してください。"; - -/* The user facing error message when the Accounts framework encounters a network error. */ -"LoginError.SystemAccount.Network" = "Facebookに接続できませんでした。ネットワーク接続を確認してもう一度お試しください。"; - -/* The user facing error message when the device Facebook account password is incorrect and login fails. */ -"LoginError.SystemAccount.PasswordChange" = "Facebookパスワードが変更されています。パスワードを確認するには、[設定] > [Facebook]の順に開き、名前をタップしてください。"; - -/* The user facing error message when the device Facebook account is unavailable and login fails. */ -"LoginError.SystemAccount.Unavailable" = "デバイスにFacebookアカウントが構成されていません。"; - -/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ -"LoginError.SystemAccount.UnconfirmedUser" = "アカウントが確認されません。www.facebook.comにログインし、表示される説明に従ってください。"; - -/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ -"LoginError.SystemAccount.UserCheckpointed" = "今はアプリにログインできません。www.facebook.comにログインし、表示される説明に従ってください。"; - -/* The message of the FBSDKLoginTooltipView */ -"LoginTooltip.Message" = "アプリと共有する情報をコントロールできます。"; - -/* Title of the web dialog that prompts the user to log in to Facebook. */ -"LoginWeb.LogInTitle" = "ログイン"; - -/* The label for FBSDKSendButton */ -"SendButton.Send" = "送信"; - -/* The label for FBSDKShareButton */ -"ShareButton.Share" = "シェア"; - -/* Prompts a person if this is their current account */ -"SmartLogin.NotYou" = "別のユーザーとしてログイン"; - -/* Text on a button that a person presses to confirm that they are finished with the login experience */ -"SmartLogin.ConfirmationTitle" = "ログインの確認"; - -/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ -"SmartLogin.Continue" = "%@として続行"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/kn.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/kn.lproj/FacebookSDK.strings deleted file mode 100644 index f743a2793c..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/kn.lproj/FacebookSDK.strings +++ /dev/null @@ -1,77 +0,0 @@ -/* The format string for device login instructions */ -"DeviceLogin.LogInPrompt" = "ನಿಮ್ಮ ಸ್ಮಾರ್ಟ್‌ ಫೋನ್‌ ಅಥವಾ ಕಂಪ್ಯೂಟರ್‌ನಲ್ಲಿ %@ ಗೆ ಭೇಟಿ ನೀಡಿ ಮತ್ತು ಈ ಕೋಡ್‌ ಅನ್ನು ನಮೂದಿಸಿ:"; - -/* The title of the label to dismiss the alert when presenting user facing error messages */ -"ErrorRecovery.Alert.OK" = "ಸರಿ"; - -/* The title of the label to decline attempting error recovery */ -"ErrorRecovery.Cancel" = "ರದ್ದುಮಾಡು"; - -/* The fallback message to display to recover invalidated tokens */ -"ErrorRecovery.Login.Suggestion" = "ನಿಮ್ಮ Facebook ಖಾತೆಯನ್ನು ಮರುಸಂಪರ್ಕಗೊಳಿಸಲು ಈ ಅಪ್ಲಿಕೇಶನ್‌ನಲ್ಲಿ ಮತ್ತೊಮ್ಮೆ ಲಾಗಿನ್‌ ಮಾಡಿ."; - -/* The title of the label to start attempting error recovery */ -"ErrorRecovery.OK" = "ಸರಿ"; - -/* The fallback message to display to retry transient errors */ -"ErrorRecovery.Transient.Suggestion" = "ಸರ್ವರ್ ತಾತ್ಕಾಲಿಕವಾಗಿ ಕಾರ್ಯನಿರತವಾಗಿದೆ, ದಯವಿಟ್ಟು ನಂತರ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."; - -/* The label for the FBSDKLikeButton when the object is not currently liked. */ -"LikeButton.Like" = "ಇಷ್ಟವಾಗಿದೆ"; - -/* The label for the FBSDKLikeButton when the object is currently liked. */ -"LikeButton.Liked" = "ಇಷ್ಟಪಟ್ಟಿದ್ದಾರೆ"; - -/* The label for the FBSDKLoginButton action sheet to cancel logging out */ -"LoginButton.CancelLogout" = "ರದ್ದುಮಾಡು"; - -/* The label for the FBSDKLoginButton action sheet to confirm logging out */ -"LoginButton.ConfirmLogOut" = "ಲಾಗ್‌ ಔಟ್‌"; - -/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ -"LoginButton.LoggedIn" = "Facebook ಬಳಸಿಕೊಂಡು ಲಾಗಿನ್‌ ಮಾಡಲಾಗಿದೆ"; - -/* The format string for the FBSDKLoginButton label when the user is logged in */ -"LoginButton.LoggedInAs" = "%@ ರಂತೆ ಲಾಗಿನ್‌ ಮಾಡಲಾಗಿದೆ"; - -/* The short label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogIn" = "ಲಾಗ್‌ ಇನ್‌"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInContinue" = "Facebook ಅನ್ನು ಮುಂದುವರಿಸಿ"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInLong" = "Facebook ಮೂಲಕ ಲಾಗ್‌ ಇನ್‌ ಮಾಡಿ"; - -/* The label for the FBSDKLoginButton when the user is currently logged in */ -"LoginButton.LogOut" = "ಲಾಗ್‌ ಔಟ್‌"; - -/* The user facing error message when the app slider has been disabled and login fails. */ -"LoginError.SystemAccount.Disabled" = "Facebook ಖಾತೆಗೆ ಪ್ರವೇಶವನ್ನು ಅನುಮತಿಸಲಾಗಿಲ್ಲ. ಸಾಧನದ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಪರಿಶೀಲಿಸಿ."; - -/* The user facing error message when the Accounts framework encounters a network error. */ -"LoginError.SystemAccount.Network" = "Facebook ಗೆ ಸಂಪರ್ಕಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ನಿಮ್ಮ ನೆಟ್‌ವರ್ಕ್‌ ಸಂಪರ್ಕವನ್ನು ಪರಿಶೀಲಿಸಿ ಹಾಗೂ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."; - -/* The user facing error message when the device Facebook account password is incorrect and login fails. */ -"LoginError.SystemAccount.PasswordChange" = "ನಿಮ್ಮ Facebook ಪಾಸ್‌ವರ್ಡ್‌ ಬದಲಿಸಲಾಗಿದೆ. ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್‌ ಖಚಿತಪಡಿಸಲು, ಸೆಟ್ಟಿಂಗ್‌ಗಳು > Facebook ತೆರೆಯಿರಿ ಮತ್ತು ನಿಮ್ಮ ಹೆಸರನ್ನು ಟ್ಯಾಪ್‌ ಮಾಡಿ."; - -/* The user facing error message when the device Facebook account is unavailable and login fails. */ -"LoginError.SystemAccount.Unavailable" = "Facebook ಖಾತೆಯನ್ನು ಸಾಧನದಲ್ಲಿ ಕಾನ್ಫಿಗರ್ ಮಾಡಲಾಗಿಲ್ಲ."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ -"LoginError.SystemAccount.UnconfirmedUser" = "ನಿಮ್ಮ ಖಾತೆಯನ್ನು ದೃಢೀಕರಿಸಿಲ್ಲ. ದಯವಿಟ್ಟು www.facebook.com ಗೆ ಲಾಗಿನ್‌ ಮಾಡಿ ಮತ್ತು ಕೆಳಗೆ ನೀಡಿದ ಸೂಚನೆಗಳನ್ನು ಅನುಸರಿಸಿ."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ -"LoginError.SystemAccount.UserCheckpointed" = "ನೀವು ಈ ಸಮಯದಲ್ಲಿ ಅಪ್ಲಿಕೇಶನ್‌ಗಳಿಗೆ ಲಾಗಿನ್‌ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ. ದಯವಿಟ್ಟು www.facebook.com ಗೆ ಲಾಗಿನ್‌ ಮಾಡಿ ಮತ್ತು ಕೆಳಗೆ ನೀಡಿದ ಸೂಚನೆಗಳನ್ನು ಅನುಸರಿಸಿ."; - -/* The message of the FBSDKLoginTooltipView */ -"LoginTooltip.Message" = "ನೀವು ನಿಯಂತ್ರಣದಲ್ಲಿರುವಿರಿ - ನೀವು ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಹಂಚಿಕೊಳ್ಳಲು ಬಯಸುವ ವಿಷಯವನ್ನು ಆರಿಸಿ."; - -/* Title of the web dialog that prompts the user to log in to Facebook. */ -"LoginWeb.LogInTitle" = "ಲಾಗ್‌ ಇನ್‌"; - -/* The label for FBSDKSendButton */ -"SendButton.Send" = "ಕಳುಹಿಸಿ"; - -/* The label for FBSDKShareButton */ -"ShareButton.Share" = "ಹಂಚಿಕೊಳ್ಳಿ"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/ko.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/ko.lproj/FacebookSDK.strings deleted file mode 100644 index 0dbd73faa8..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/ko.lproj/FacebookSDK.strings +++ /dev/null @@ -1,92 +0,0 @@ -/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ -"DeviceLogin.LogInPrompt" = "%@를 방문하여 위에 표시된 코드를 입력하세요."; - -/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ -"DeviceLogin.SmartLogInPrompt" = "계정을 연결하려면 모바일 기기에서 Facebook 앱을 열고 알림을 확인하세요."; - -/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ -"DeviceLogin.SmartLogInOrLabel" = "- 또는 -"; - -/* The title of the label to dismiss the alert when presenting user facing error messages */ -"ErrorRecovery.Alert.OK" = "확인"; - -/* The title of the label to decline attempting error recovery */ -"ErrorRecovery.Cancel" = "취소"; - -/* The fallback message to display to recover invalidated tokens */ -"ErrorRecovery.Login.Suggestion" = "Facebook 계정을 다시 연결하려면 이 앱에 다시 로그인하세요."; - -/* The title of the label to start attempting error recovery */ -"ErrorRecovery.OK" = "확인"; - -/* The fallback message to display to retry transient errors */ -"ErrorRecovery.Transient.Suggestion" = "일시적으로 서버 사용량이 많아졌습니다. 다시 시도하세요."; - -/* The label for the FBSDKLikeButton when the object is not currently liked. */ -"LikeButton.Like" = "좋아요"; - -/* The label for the FBSDKLikeButton when the object is currently liked. */ -"LikeButton.Liked" = "좋아요"; - -/* The label for the FBSDKLoginButton action sheet to cancel logging out */ -"LoginButton.CancelLogout" = "취소"; - -/* The label for the FBSDKLoginButton action sheet to confirm logging out */ -"LoginButton.ConfirmLogOut" = "로그아웃"; - -/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ -"LoginButton.LoggedIn" = "Facebook 계정으로 로그인함"; - -/* The format string for the FBSDKLoginButton label when the user is logged in */ -"LoginButton.LoggedInAs" = "%@(으)로 로그인함"; - -/* The short label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogIn" = "로그인"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInContinue" = "Facebook으로 계속"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInLong" = "Facebook으로 로그인"; - -/* The label for the FBSDKLoginButton when the user is currently logged in */ -"LoginButton.LogOut" = "로그아웃"; - -/* The user facing error message when the app slider has been disabled and login fails. */ -"LoginError.SystemAccount.Disabled" = "Facebook 계정에 대한 액세스가 승인되지 않았습니다. 기기 설정을 확인하세요."; - -/* The user facing error message when the Accounts framework encounters a network error. */ -"LoginError.SystemAccount.Network" = "Facebook에 연결할 수 없습니다. 네트워크 연결을 확인하고 다시 시도하세요."; - -/* The user facing error message when the device Facebook account password is incorrect and login fails. */ -"LoginError.SystemAccount.PasswordChange" = "Facebook 비밀번호가 변경되었습니다. 비밀번호를 확인하려면 설정 > Facebook으로 이동하여 이름을 누르세요."; - -/* The user facing error message when the device Facebook account is unavailable and login fails. */ -"LoginError.SystemAccount.Unavailable" = "Facebook 계정이 기기에 구성되어 있지 않습니다."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ -"LoginError.SystemAccount.UnconfirmedUser" = "계정이 확인되지 않았습니다. www.facebook.com에 로그인한 뒤 안내를 따라주세요."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ -"LoginError.SystemAccount.UserCheckpointed" = "현재 앱에 로그인할 수 없습니다. www.facebook.com에 로그인한 뒤 안내를 따라주세요."; - -/* The message of the FBSDKLoginTooltipView */ -"LoginTooltip.Message" = "원하는 정보를 선택하여 앱에 공유할 수 있습니다."; - -/* Title of the web dialog that prompts the user to log in to Facebook. */ -"LoginWeb.LogInTitle" = "로그인"; - -/* The label for FBSDKSendButton */ -"SendButton.Send" = "보내기"; - -/* The label for FBSDKShareButton */ -"ShareButton.Share" = "공유하기"; - -/* Prompts a person if this is their current account */ -"SmartLogin.NotYou" = "회원님이 아닌가요?"; - -/* Text on a button that a person presses to confirm that they are finished with the login experience */ -"SmartLogin.ConfirmationTitle" = "로그인 확인"; - -/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ -"SmartLogin.Continue" = "%@님으로 계속"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/ml.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/ml.lproj/FacebookSDK.strings deleted file mode 100644 index e7a0189b59..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/ml.lproj/FacebookSDK.strings +++ /dev/null @@ -1,92 +0,0 @@ -/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ -"DeviceLogin.LogInPrompt" = "%@ സന്ദർശിച്ച്‌ മുകളിൽ കാണിച്ച‌ കോഡ്‌ നൽകുക."; - -/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ -"DeviceLogin.SmartLogInPrompt" = "നിങ്ങളുടെ അക്കൗണ്ട്‌ കണക്‌റ്റുചെയ്യാൻ, നിങ്ങളുടെ മൊബൈൽ ഉപകരണത്തിലെ Facebook ആപ്പ്‌ തുറന്ന്‌ അറിയിപ്പുകൾ പരിശോധിക്കുക."; - -/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ -"DeviceLogin.SmartLogInOrLabel" = "- അല്ലെങ്കിൽ -"; - -/* The title of the label to dismiss the alert when presenting user facing error messages */ -"ErrorRecovery.Alert.OK" = "ശരി"; - -/* The title of the label to decline attempting error recovery */ -"ErrorRecovery.Cancel" = "റദ്ദാക്കുക"; - -/* The fallback message to display to recover invalidated tokens */ -"ErrorRecovery.Login.Suggestion" = "നിങ്ങളുടെ Facebook അക്കൗണ്ടുമായി വീണ്ടും കണക്‌റ്റുചെയ്യുന്നതിന് ഈ ആപ്ലിക്കേഷനിൽ വീണ്ടും ലോഗിൻ ചെയ്യുക."; - -/* The title of the label to start attempting error recovery */ -"ErrorRecovery.OK" = "ശരി"; - -/* The fallback message to display to retry transient errors */ -"ErrorRecovery.Transient.Suggestion" = "സെർവർ താൽക്കാലികമായി തിരക്കിലാണ്, വീണ്ടും ശ്രമിക്കുക."; - -/* The label for the FBSDKLikeButton when the object is not currently liked. */ -"LikeButton.Like" = "ലൈക്കുചെയ്യുക"; - -/* The label for the FBSDKLikeButton when the object is currently liked. */ -"LikeButton.Liked" = "ലൈക്കുചെയ്‌‌തു"; - -/* The label for the FBSDKLoginButton action sheet to cancel logging out */ -"LoginButton.CancelLogout" = "റദ്ദാക്കുക"; - -/* The label for the FBSDKLoginButton action sheet to confirm logging out */ -"LoginButton.ConfirmLogOut" = "ലോഗ്ഔട്ട് ചെയ്യുക"; - -/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ -"LoginButton.LoggedIn" = "Facebook ഉപയോഗിച്ച് ലോഗിൻ ചെയ്‌തു"; - -/* The format string for the FBSDKLoginButton label when the user is logged in */ -"LoginButton.LoggedInAs" = "%@ എന്നതായി ലോഗിൻ ചെയ്‌തു"; - -/* The short label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogIn" = "ലോഗിൻ ചെയ്യുക"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInContinue" = "Facebook ഉപയോഗിച്ച് തുടരുക"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInLong" = "Facebook ഉപയോഗിച്ച് ലോഗിൻ ചെയ്യുക"; - -/* The label for the FBSDKLoginButton when the user is currently logged in */ -"LoginButton.LogOut" = "ലോഗ്ഔട്ട് ചെയ്യുക"; - -/* The user facing error message when the app slider has been disabled and login fails. */ -"LoginError.SystemAccount.Disabled" = "Facebook അക്കൗണ്ടിലേക്ക് ആക്‌സസ് നൽകിയിട്ടില്ല. ഉപകരണ ക്രമീകരണങ്ങൾ പരിശോധിച്ചുറപ്പിക്കുക."; - -/* The user facing error message when the Accounts framework encounters a network error. */ -"LoginError.SystemAccount.Network" = "Facebook-ലേക്ക് കണക്‌റ്റുചെയ്യാനായില്ല. നിങ്ങളുടെ നെറ്റ്‌വർക്ക് കണക്ഷൻ പരിശോധിച്ച് വീണ്ടും ശ്രമിക്കുക."; - -/* The user facing error message when the device Facebook account password is incorrect and login fails. */ -"LoginError.SystemAccount.PasswordChange" = "നിങ്ങളുടെ Facebook പാസ്‌വേഡ് മാറി. പാ‌സ്‌വേഡ് സ്ഥിരീകരിക്കുന്നതിന് ക്രമീകരണങ്ങൾ > Facebook എന്നത് തുറന്ന് പേര് ടാപ്പുചെയ്യുക."; - -/* The user facing error message when the device Facebook account is unavailable and login fails. */ -"LoginError.SystemAccount.Unavailable" = "ഉപകരണത്തിൽ Facebook അക്കൗണ്ട് കോൺഫിഗർ ചെയ്‌തിട്ടില്ല."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ -"LoginError.SystemAccount.UnconfirmedUser" = "അക്കൗണ്ട് സ്ഥിരീകരിച്ചു. www.facebook.com എന്നതിലേക്ക് ലോഗിൻ ചെയ്‌ത് തന്നിരിക്കുന്ന നിർദ്ദേശങ്ങൾ പാലിക്കുക."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ -"LoginError.SystemAccount.UserCheckpointed" = "നിങ്ങൾക്ക് ഈ സമയം ആപ്ലിക്കേഷനുകളിലേക്ക് ലോഗിൻ ചെയ്യാനാവില്ല. www.facebook.com എന്നതിലേക്ക് ലോഗിൻ ചെയ്‌ത് തന്നിരിക്കുന്ന നിർദ്ദേശങ്ങൾ പാലിക്കുക."; - -/* The message of the FBSDKLoginTooltipView */ -"LoginTooltip.Message" = "നിങ്ങളുടെ നിയന്ത്രണത്തിലാണ് - നിങ്ങൾക്ക് ആപ്‌സുമായി ഏതെല്ലാം വിവരങ്ങൾ പങ്കിടണമെന്ന് തിരഞ്ഞെടുക്കുക."; - -/* Title of the web dialog that prompts the user to log in to Facebook. */ -"LoginWeb.LogInTitle" = "ലോഗിൻ ചെയ്യുക"; - -/* The label for FBSDKSendButton */ -"SendButton.Send" = "അയയ്‌ക്കുക"; - -/* The label for FBSDKShareButton */ -"ShareButton.Share" = "പങ്കിടൂ"; - -/* Prompts a person if this is their current account */ -"SmartLogin.NotYou" = "നിങ്ങൾ അല്ലേ?"; - -/* Text on a button that a person presses to confirm that they are finished with the login experience */ -"SmartLogin.ConfirmationTitle" = "ലോഗിൻ സ്ഥിരീകരിക്കുക"; - -/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ -"SmartLogin.Continue" = "%@ ആയി തുടരുക"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/mr.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/mr.lproj/FacebookSDK.strings deleted file mode 100644 index 246b69266c..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/mr.lproj/FacebookSDK.strings +++ /dev/null @@ -1,92 +0,0 @@ -/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ -"DeviceLogin.LogInPrompt" = "%@ वर भेट द्या आणि वर दर्शवलेला कोड प्रविष्ट करा."; - -/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ -"DeviceLogin.SmartLogInPrompt" = "तुमचे खाते कनेक्ट करण्यासाठी, तुमच्या मोबाईल उपकरणावर Facebook अॅप उघडा आणि सूचना तपासा."; - -/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ -"DeviceLogin.SmartLogInOrLabel" = "- किंवा -"; - -/* The title of the label to dismiss the alert when presenting user facing error messages */ -"ErrorRecovery.Alert.OK" = "ठीक"; - -/* The title of the label to decline attempting error recovery */ -"ErrorRecovery.Cancel" = "रद्द करा"; - -/* The fallback message to display to recover invalidated tokens */ -"ErrorRecovery.Login.Suggestion" = "कृपया आपले फेसबुक खाते रीकनेक्ट करण्यासाठी या अनुप्रयोगावर पुन्हा लॉग इन करा."; - -/* The title of the label to start attempting error recovery */ -"ErrorRecovery.OK" = "ठीक"; - -/* The fallback message to display to retry transient errors */ -"ErrorRecovery.Transient.Suggestion" = "सर्व्हर तात्पुरता व्यस्त आहे, कृपया पुन्हा प्रयत्न करा."; - -/* The label for the FBSDKLikeButton when the object is not currently liked. */ -"LikeButton.Like" = "आवडले"; - -/* The label for the FBSDKLikeButton when the object is currently liked. */ -"LikeButton.Liked" = "आवडलेले"; - -/* The label for the FBSDKLoginButton action sheet to cancel logging out */ -"LoginButton.CancelLogout" = "रद्द करा"; - -/* The label for the FBSDKLoginButton action sheet to confirm logging out */ -"LoginButton.ConfirmLogOut" = "लॉग आउट करा"; - -/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ -"LoginButton.LoggedIn" = "फेसबुक वापरून लॉग इन केले"; - -/* The format string for the FBSDKLoginButton label when the user is logged in */ -"LoginButton.LoggedInAs" = "%@ म्हणून लॉग इन केले"; - -/* The short label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogIn" = "लॉग इन करा"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInContinue" = "Facebook सह चालू ठेवा"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInLong" = "फेसबुकसह लॉग इन करा"; - -/* The label for the FBSDKLoginButton when the user is currently logged in */ -"LoginButton.LogOut" = "लॉग आउट करा"; - -/* The user facing error message when the app slider has been disabled and login fails. */ -"LoginError.SystemAccount.Disabled" = "फेसबुक खात्यावर प्रवेशास मंजूरी दिली गेली नाही. डिव्हाइस सेटिंग्ज सत्यापित करा."; - -/* The user facing error message when the Accounts framework encounters a network error. */ -"LoginError.SystemAccount.Network" = "फेसबुकशी कनेक्ट करण्यात अक्षम. आपले नेटवर्क कनेक्शन तपासा आणि पुन्हा प्रयत्न करा."; - -/* The user facing error message when the device Facebook account password is incorrect and login fails. */ -"LoginError.SystemAccount.PasswordChange" = "आपला फेसबुक पासवर्ड बदलला आहे. आपल्या पासवर्डची पुष्टी करण्यासाठी, सेटिंग्ज > फेसबुक उघडा आणि आपले नाव टॅप करा."; - -/* The user facing error message when the device Facebook account is unavailable and login fails. */ -"LoginError.SystemAccount.Unavailable" = "डिव्हाइसवर फेसबुक खाते कॉन्फिगर केले गेले नाही."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ -"LoginError.SystemAccount.UnconfirmedUser" = "आपल्या खात्याची पुष्टी झाली नाही. कृपया www.facebook.com वर लॉग इन करा आणि दिलेल्या सूचनांचे अनुसरण करा."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ -"LoginError.SystemAccount.UserCheckpointed" = "आपण यावेळी अनुप्रयोगांवर लॉग इन करू शकत नाही. कृपया www.facebook.com वर लॉग इन करा आणि दिलेल्या सूचनांचे अनुसरण करा."; - -/* The message of the FBSDKLoginTooltipView */ -"LoginTooltip.Message" = "तुम्ही नियंत्रणात आहात - तुम्ही कोणती माहिती अॅपसह सामायिक करू इच्छिता ते निवडा."; - -/* Title of the web dialog that prompts the user to log in to Facebook. */ -"LoginWeb.LogInTitle" = "लॉग इन करा"; - -/* The label for FBSDKSendButton */ -"SendButton.Send" = "पाठवा"; - -/* The label for FBSDKShareButton */ -"ShareButton.Share" = "सामायिक करा"; - -/* Prompts a person if this is their current account */ -"SmartLogin.NotYou" = "तुम्ही नाही?"; - -/* Text on a button that a person presses to confirm that they are finished with the login experience */ -"SmartLogin.ConfirmationTitle" = "लॉग इन पुष्टी करा"; - -/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ -"SmartLogin.Continue" = "%@ म्हणून चालू ठेवा"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/ms.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/ms.lproj/FacebookSDK.strings deleted file mode 100644 index 20b212aa36..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/ms.lproj/FacebookSDK.strings +++ /dev/null @@ -1,92 +0,0 @@ -/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ -"DeviceLogin.LogInPrompt" = "Lawati %@ dan masukkan kod yang ditunjukkan di atas."; - -/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ -"DeviceLogin.SmartLogInPrompt" = "Untuk menghubungkan akaun anda, buka apl Facebook di peranti mudah alih anda dan semak pemberitahuan."; - -/* Prompts a person if this is their current account */ -"SmartLogin.NotYou" = "Bukan anda?"; - -/* The title of the label to dismiss the alert when presenting user facing error messages */ -"ErrorRecovery.Alert.OK" = "OK"; - -/* The title of the label to decline attempting error recovery */ -"ErrorRecovery.Cancel" = "Batal"; - -/* The fallback message to display to recover invalidated tokens */ -"ErrorRecovery.Login.Suggestion" = "Sila log masuk ke aplikasi ini sekali lagi untuk menyambung semula akaun Facebook anda."; - -/* The title of the label to start attempting error recovery */ -"ErrorRecovery.OK" = "OK"; - -/* The fallback message to display to retry transient errors */ -"ErrorRecovery.Transient.Suggestion" = "Pelayan ini sibuk buat sementara waktu, sila cuba lagi."; - -/* The label for the FBSDKLikeButton when the object is not currently liked. */ -"LikeButton.Like" = "Suka"; - -/* The label for the FBSDKLikeButton when the object is currently liked. */ -"LikeButton.Liked" = "Disukai"; - -/* The label for the FBSDKLoginButton action sheet to cancel logging out */ -"LoginButton.CancelLogout" = "Batal"; - -/* The label for the FBSDKLoginButton action sheet to confirm logging out */ -"LoginButton.ConfirmLogOut" = "Log Keluar"; - -/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ -"LoginButton.LoggedIn" = "Dilog masuk menggunakan Facebook"; - -/* The format string for the FBSDKLoginButton label when the user is logged in */ -"LoginButton.LoggedInAs" = "Dilog masuk sebagai %@"; - -/* The short label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogIn" = "Log masuk"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInContinue" = "Teruskan dengan Facebook"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInLong" = "Log masuk dengan Facebook"; - -/* The label for the FBSDKLoginButton when the user is currently logged in */ -"LoginButton.LogOut" = "Log keluar"; - -/* The user facing error message when the app slider has been disabled and login fails. */ -"LoginError.SystemAccount.Disabled" = "Akses ke akaun Facebook tidak diberikan. Sahkan tetapan peranti."; - -/* The user facing error message when the Accounts framework encounters a network error. */ -"LoginError.SystemAccount.Network" = "Tidak dapat menyambung ke Facebook. Semak sambungan rangkaian anda dan cuba lagi."; - -/* The user facing error message when the device Facebook account password is incorrect and login fails. */ -"LoginError.SystemAccount.PasswordChange" = "Kata laluan Facebook anda telah ditukar. Untuk mengesahkan kata laluan anda, buka Tetapan > Facebook dan ketik nama anda."; - -/* The user facing error message when the device Facebook account is unavailable and login fails. */ -"LoginError.SystemAccount.Unavailable" = "Akaun Facebook masih belum dikonfigurasikan pada peranti."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ -"LoginError.SystemAccount.UnconfirmedUser" = "Akaun anda tidak disahkan. Sila log masuk ke www.facebook.com dan ikuti arahan yang diberi."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ -"LoginError.SystemAccount.UserCheckpointed" = "Anda tidak boleh log masuk ke aplikasi pada masa ini. Sila log masuk ke www.facebook.com dan ikuti arahan yang diberi."; - -/* The message of the FBSDKLoginTooltipView */ -"LoginTooltip.Message" = "Anda yang mengawal - pilih maklumat yang anda ingin kongsi dengan apl."; - -/* Title of the web dialog that prompts the user to log in to Facebook. */ -"LoginWeb.LogInTitle" = "Log Masuk"; - -/* The label for FBSDKSendButton */ -"SendButton.Send" = "Hantar"; - -/* The label for FBSDKShareButton */ -"ShareButton.Share" = "Kongsi"; - -/* Text on a button that a person presses to confirm that they are finished with the login experience */ -"SmartLogin.ConfirmationTitle" = "Sahkan Log Masuk"; - -/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ -"SmartLogin.Continue" = "Teruskan sebagai %@"; - -/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ -"DeviceLogin.SmartLogInOrLabel" = "- ATAU -"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/nb.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/nb.lproj/FacebookSDK.strings deleted file mode 100644 index 2307ecb030..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/nb.lproj/FacebookSDK.strings +++ /dev/null @@ -1,92 +0,0 @@ -/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ -"DeviceLogin.LogInPrompt" = "Gå til %@, og oppgi koden som vises ovenfor."; - -/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ -"DeviceLogin.SmartLogInPrompt" = "Koble til kontoen din ved å åpne Facebook-appen på mobilenheten din og se etter varsler."; - -/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ -"DeviceLogin.SmartLogInOrLabel" = "- ELLER -"; - -/* The title of the label to dismiss the alert when presenting user facing error messages */ -"ErrorRecovery.Alert.OK" = "OK"; - -/* The title of the label to decline attempting error recovery */ -"ErrorRecovery.Cancel" = "Avbryt"; - -/* The fallback message to display to recover invalidated tokens */ -"ErrorRecovery.Login.Suggestion" = "Logg deg inn igjen på denne appen for å koble til Facebook-kontoen på nytt."; - -/* The title of the label to start attempting error recovery */ -"ErrorRecovery.OK" = "OK"; - -/* The fallback message to display to retry transient errors */ -"ErrorRecovery.Transient.Suggestion" = "Serveren er midlertidig opptatt. Prøv på nytt."; - -/* The label for the FBSDKLikeButton when the object is not currently liked. */ -"LikeButton.Like" = "Liker"; - -/* The label for the FBSDKLikeButton when the object is currently liked. */ -"LikeButton.Liked" = "Likt"; - -/* The label for the FBSDKLoginButton action sheet to cancel logging out */ -"LoginButton.CancelLogout" = "Avbryt"; - -/* The label for the FBSDKLoginButton action sheet to confirm logging out */ -"LoginButton.ConfirmLogOut" = "Logg ut"; - -/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ -"LoginButton.LoggedIn" = "Logget inn med Facebook"; - -/* The format string for the FBSDKLoginButton label when the user is logged in */ -"LoginButton.LoggedInAs" = "Logget inn som %@"; - -/* The short label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogIn" = "Logg inn"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInContinue" = "Fortsett med Facebook"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInLong" = "Logg inn med Facebook"; - -/* The label for the FBSDKLoginButton when the user is currently logged in */ -"LoginButton.LogOut" = "Logg ut"; - -/* The user facing error message when the app slider has been disabled and login fails. */ -"LoginError.SystemAccount.Disabled" = "Det er ikke gitt tilgang til Facebook-kontoen. Bekreft enhetsinnstillinger."; - -/* The user facing error message when the Accounts framework encounters a network error. */ -"LoginError.SystemAccount.Network" = "Kunne ikke koble til Facebook. Kontroller nettverkstilkoblingen, og prøv på nytt."; - -/* The user facing error message when the device Facebook account password is incorrect and login fails. */ -"LoginError.SystemAccount.PasswordChange" = "Facebook-passordet ditt er endret. Bekreft passordet ditt ved å gå til Innstillinger > Facebook og trykke på navnet ditt."; - -/* The user facing error message when the device Facebook account is unavailable and login fails. */ -"LoginError.SystemAccount.Unavailable" = "Facebook-kontoen er ikke konfigurert på enheten."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ -"LoginError.SystemAccount.UnconfirmedUser" = "Kontoen din er bekreftet. Logg deg inn på www.facebook.com, og følg instruksjonene."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ -"LoginError.SystemAccount.UserCheckpointed" = "Du kan ikke logge deg inn på apper for øyeblikket. Logg deg inn på www.facebook.com, og følg instruksjonene."; - -/* The message of the FBSDKLoginTooltipView */ -"LoginTooltip.Message" = "Du bestemmer – velg hvilke opplysninger du vil dele med appene."; - -/* Title of the web dialog that prompts the user to log in to Facebook. */ -"LoginWeb.LogInTitle" = "Logg inn"; - -/* The label for FBSDKSendButton */ -"SendButton.Send" = "Send"; - -/* The label for FBSDKShareButton */ -"ShareButton.Share" = "Del"; - -/* Prompts a person if this is their current account */ -"SmartLogin.NotYou" = "Ikke deg?"; - -/* Text on a button that a person presses to confirm that they are finished with the login experience */ -"SmartLogin.ConfirmationTitle" = "Bekreft innlogging"; - -/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ -"SmartLogin.Continue" = "Fortsett som %@"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/nl.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/nl.lproj/FacebookSDK.strings deleted file mode 100644 index 899870ef3f..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/nl.lproj/FacebookSDK.strings +++ /dev/null @@ -1,92 +0,0 @@ -/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ -"DeviceLogin.LogInPrompt" = "Ga naar %@ en voer de bovenstaande code in."; - -/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ -"DeviceLogin.SmartLogInPrompt" = "Om je account te verbinden, open je de Facebook-app op je mobiele apparaat en controleer of je meldingen ziet."; - -/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ -"DeviceLogin.SmartLogInOrLabel" = "- OF -"; - -/* The title of the label to dismiss the alert when presenting user facing error messages */ -"ErrorRecovery.Alert.OK" = "OK"; - -/* The title of the label to decline attempting error recovery */ -"ErrorRecovery.Cancel" = "Annuleren"; - -/* The fallback message to display to recover invalidated tokens */ -"ErrorRecovery.Login.Suggestion" = "Meld je nogmaals aan bij deze app om verbinding te maken met je Facebook-account."; - -/* The title of the label to start attempting error recovery */ -"ErrorRecovery.OK" = "OK"; - -/* The fallback message to display to retry transient errors */ -"ErrorRecovery.Transient.Suggestion" = "De server is tijdelijk niet beschikbaar. Probeer het opnieuw."; - -/* The label for the FBSDKLikeButton when the object is not currently liked. */ -"LikeButton.Like" = "Vind ik leuk"; - -/* The label for the FBSDKLikeButton when the object is currently liked. */ -"LikeButton.Liked" = "Vind ik leuk"; - -/* The label for the FBSDKLoginButton action sheet to cancel logging out */ -"LoginButton.CancelLogout" = "Annuleren"; - -/* The label for the FBSDKLoginButton action sheet to confirm logging out */ -"LoginButton.ConfirmLogOut" = "Afmelden"; - -/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ -"LoginButton.LoggedIn" = "Aangemeld via Facebook"; - -/* The format string for the FBSDKLoginButton label when the user is logged in */ -"LoginButton.LoggedInAs" = "Aangemeld als %@"; - -/* The short label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogIn" = "Aanmelden"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInContinue" = "Doorgaan met Facebook"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInLong" = "Aanmelden met Facebook"; - -/* The label for the FBSDKLoginButton when the user is currently logged in */ -"LoginButton.LogOut" = "Afmelden"; - -/* The user facing error message when the app slider has been disabled and login fails. */ -"LoginError.SystemAccount.Disabled" = "Er is geen toegang verleend aan het Facebook-account. Verifieer de apparaatinstellingen."; - -/* The user facing error message when the Accounts framework encounters a network error. */ -"LoginError.SystemAccount.Network" = "Er kan geen verbinding worden gemaakt met Facebook. Controleer je netwerkverbinding en probeer het opnieuw."; - -/* The user facing error message when the device Facebook account password is incorrect and login fails. */ -"LoginError.SystemAccount.PasswordChange" = "Je Facebook-wachtwoord is gewijzigd. Open Instellingen > Facebook en tik op je naam om je wachtwoord te bevestigen."; - -/* The user facing error message when the device Facebook account is unavailable and login fails. */ -"LoginError.SystemAccount.Unavailable" = "Het Facebook-account is niet geconfigureerd op het apparaat."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ -"LoginError.SystemAccount.UnconfirmedUser" = "Je account is niet bevestigd. Meld je aan bij www.facebook.com en volg de instructies."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ -"LoginError.SystemAccount.UserCheckpointed" = "Je kunt je momenteel niet aanmelden bij apps. Meld je aan bij www.facebook.com en volg de instructies."; - -/* The message of the FBSDKLoginTooltipView */ -"LoginTooltip.Message" = "Jij hebt de controle. Kies welke informatie je met apps wilt delen."; - -/* Title of the web dialog that prompts the user to log in to Facebook. */ -"LoginWeb.LogInTitle" = "Aanmelden"; - -/* The label for FBSDKSendButton */ -"SendButton.Send" = "Verzenden"; - -/* The label for FBSDKShareButton */ -"ShareButton.Share" = "Delen"; - -/* Prompts a person if this is their current account */ -"SmartLogin.NotYou" = "Ben jij dit niet?"; - -/* Text on a button that a person presses to confirm that they are finished with the login experience */ -"SmartLogin.ConfirmationTitle" = "Aanmelden bevestigen"; - -/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ -"SmartLogin.Continue" = "Doorgaan als %@"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/pa.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/pa.lproj/FacebookSDK.strings deleted file mode 100644 index 29ca536836..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/pa.lproj/FacebookSDK.strings +++ /dev/null @@ -1,92 +0,0 @@ -/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ -"DeviceLogin.LogInPrompt" = "%@ ਵਿੱਚ ਜਾਓ ਅਤੇ ਉੱਤੇ ਦਿਖਾਏ ਗਏ ਕੋਡ ਨੂੰ ਦਾਖ਼ਲ ਕਰੋ।"; - -/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ -"DeviceLogin.SmartLogInPrompt" = "ਆਪਣੇ ਖਾਤੇ ਨਾਲ ਕਨੈਕਟ ਕਰਨ ਲਈ, ਆਪਣੀ ਮੋਬਾਈਲ ਡਿਵਾਈਸ 'ਤੇ Facebook ਐਪ ਨੂੰ ਖੋਲ੍ਹੋ ਅਤੇ ਸੂਚਨਾਵਾਂ ਨੂੰ ਦੇਖੋ।"; - -/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ -"DeviceLogin.SmartLogInOrLabel" = "- ਜਾਂ -"; - -/* The title of the label to dismiss the alert when presenting user facing error messages */ -"ErrorRecovery.Alert.OK" = "ਠੀਕ"; - -/* The title of the label to decline attempting error recovery */ -"ErrorRecovery.Cancel" = "ਰੱਦ ਕਰੋ"; - -/* The fallback message to display to recover invalidated tokens */ -"ErrorRecovery.Login.Suggestion" = "ਕਿਰਪਾ ਕਰਕੇ ਆਪਣੇ Facebook ਖਾਤੇ ਨਾਲ ਮੁੜ ਕਨੈਕਟ ਕਰਨ ਲਈ ਇਸ ਐਪ ਵਿੱਚ ਦੁਬਾਰਾ ਲੌਗ ਇਨ ਕਰੋ।"; - -/* The title of the label to start attempting error recovery */ -"ErrorRecovery.OK" = "ਠੀਕ"; - -/* The fallback message to display to retry transient errors */ -"ErrorRecovery.Transient.Suggestion" = "ਇਹ ਸਰਵਰ ਅਸਥਾਈ ਰੂਪ ਵਿੱਚ ਵਿਅਸਤ ਹੈ, ਕਿਰਪਾ ਕਰਕੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"; - -/* The label for the FBSDKLikeButton when the object is not currently liked. */ -"LikeButton.Like" = "ਪਸੰਦ ਕਰੋ"; - -/* The label for the FBSDKLikeButton when the object is currently liked. */ -"LikeButton.Liked" = "ਪਸੰਦ ਕੀਤਾ ਗਿਆ"; - -/* The label for the FBSDKLoginButton action sheet to cancel logging out */ -"LoginButton.CancelLogout" = "ਰੱਦ ਕਰੋ"; - -/* The label for the FBSDKLoginButton action sheet to confirm logging out */ -"LoginButton.ConfirmLogOut" = "ਲੌਗ ਆਉਟ ਕਰੋ"; - -/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ -"LoginButton.LoggedIn" = "Facebook ਦਾ ਉਪਯੋਗ ਕਰਕੇ ਲੌਗ ਇਨ ਕੀਤਾ ਗਿਆ"; - -/* The format string for the FBSDKLoginButton label when the user is logged in */ -"LoginButton.LoggedInAs" = "%@ ਵੱਜੋਂ ਲੌਗ ਇਨ ਕੀਤਾ ਗਿਆ"; - -/* The short label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogIn" = "ਲੌਗ ਇਨ ਕਰੋ"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInContinue" = "Facebook ਦੇ ਨਾਲ ਜਾਰੀ ਰੱਖੋ"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInLong" = "Facebook ਦੇ ਨਾਲ ਲੌਗ ਇਨ ਕਰੋ"; - -/* The label for the FBSDKLoginButton when the user is currently logged in */ -"LoginButton.LogOut" = "ਲੌਗ ਆਉਟ ਕਰੋ"; - -/* The user facing error message when the app slider has been disabled and login fails. */ -"LoginError.SystemAccount.Disabled" = "Facebook ਖਾਤੇ ਨੂੰ ਐਕਸੈਸ ਪ੍ਰਦਾਨ ਨਹੀਂ ਕੀਤੀ ਗਈ। ਡਿਵਾਈਸ ਸੈੱਟਿੰਗਜ਼ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ।"; - -/* The user facing error message when the Accounts framework encounters a network error. */ -"LoginError.SystemAccount.Network" = "Facebook ਨਾਲ ਕਨੈਕਟ ਕਰਨ ਵਿੱਚ ਅਸਮਰਥਿਤ ਆਪਣੇ ਨੈੱਟਵਰਕ ਕਨੈਕਸ਼ਨ ਦੀ ਜਾਂਚ ਕਰੋ ਅਤੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"; - -/* The user facing error message when the device Facebook account password is incorrect and login fails. */ -"LoginError.SystemAccount.PasswordChange" = "ਤੁਹਾਡੇ Facebook ਪਾਸਵਰਡ ਨੂੰ ਬਦਲ ਦਿੱਤਾ ਗਿਆ ਹੈ। ਆਪਣੇ ਪਾਸਵਰਡ ਦੀ ਪੁਸ਼ਟੀ ਕਰਨ ਲਈ, ਸੈੱਟਿੰਗਜ਼ > Facebook ਖੋਲ੍ਹੋ ਅਤੇ ਆਪਣੇ ਨਾਂ ਨੂੰ ਟੈਪ ਕਰੋ।"; - -/* The user facing error message when the device Facebook account is unavailable and login fails. */ -"LoginError.SystemAccount.Unavailable" = "Facebook ਖਾਤੇ ਨੂੰ ਡਿਵਾਈਸ 'ਤੇ ਕਨਫ਼ੀਗਰ ਨਹੀਂ ਕੀਤਾ ਗਿਆ ਹੈ।"; - -/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ -"LoginError.SystemAccount.UnconfirmedUser" = "ਤੁਹਾਡੇ ਖਾਤੇ ਦੀ ਪੁਸ਼ਟੀ ਨਹੀਂ ਕੀਤੀ ਗਈ ਹੈ। ਕਿਰਪਾ ਕਰਕੇ www.facebook.com ਵਿੱਚ ਲੌਗ ਇਨ ਕਰੋ ਅਤੇ ਹੇਠਾਂ ਦਿੱਤੇ ਨਿਰਦੇਸ਼ਾਂ ਦਾ ਪਾਲਣ ਕਰੋ।"; - -/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ -"LoginError.SystemAccount.UserCheckpointed" = "ਤੁਸੀਂ ਇਸ ਸਮੇਂ ਐਪ ਵਿੱਚ ਲੌਗ ਇਨ ਨਹੀਂ ਕਰ ਸਕਦੇ ਹੋ। ਕਿਰਪਾ ਕਰਕੇ www.facebook.com ਵਿੱਚ ਲੌਗ ਇਨ ਕਰੋ ਅਤੇ ਹੇਠਾਂ ਦਿੱਤੇ ਨਿਰਦੇਸ਼ਾਂ ਦਾ ਪਾਲਣ ਕਰੋ।"; - -/* The message of the FBSDKLoginTooltipView */ -"LoginTooltip.Message" = "ਤੁ\ਸੀਂ ਨਿਯੰਤਰਣ ਵਿੱਚ ਹੋ - ਉਹ ਜਾਣਕਾਰੀ ਚੁਣੋ ਜੋ ਤੁਸੀਂ ਐਪਸ ਦੇ ਨਾਲ ਸਾਂਝੀ ਕਰਨੀ ਚਾਹੁੰਦੇ ਹੋ।"; - -/* Title of the web dialog that prompts the user to log in to Facebook. */ -"LoginWeb.LogInTitle" = "ਲੌਗ ਇਨ ਕਰੋ"; - -/* The label for FBSDKSendButton */ -"SendButton.Send" = "ਸਾਂਝਾ ਕਰੋ"; - -/* The label for FBSDKShareButton */ -"ShareButton.Share" = "ਭੇਜੋ"; - -/* Prompts a person if this is their current account */ -"SmartLogin.NotYou" = "ਕੀ ਤੁਸੀਂ ਨਹੀਂ ਹੋ?"; - -/* Text on a button that a person presses to confirm that they are finished with the login experience */ -"SmartLogin.ConfirmationTitle" = "ਲੌਗਇਨ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ"; - -/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ -"SmartLogin.Continue" = "%@ ਵੱਜੋਂ ਜਾਰੀ ਰੱਖੋ"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/pl.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/pl.lproj/FacebookSDK.strings deleted file mode 100644 index f7e86816c4..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/pl.lproj/FacebookSDK.strings +++ /dev/null @@ -1,92 +0,0 @@ -/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ -"DeviceLogin.LogInPrompt" = "Wejdź na stronę %@ i wprowadź podany powyżej kod."; - -/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ -"DeviceLogin.SmartLogInPrompt" = "Aby połączyć konto, otwórz aplikację Facebook na urządzeniu mobilnym i sprawdź powiadomienia."; - -/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ -"DeviceLogin.SmartLogInOrLabel" = "- LUB -"; - -/* The title of the label to dismiss the alert when presenting user facing error messages */ -"ErrorRecovery.Alert.OK" = "OK"; - -/* The title of the label to decline attempting error recovery */ -"ErrorRecovery.Cancel" = "Anuluj"; - -/* The fallback message to display to recover invalidated tokens */ -"ErrorRecovery.Login.Suggestion" = "Zaloguj się jeszcze raz do aplikacji, aby ponownie przyłączyć swoje konto na Facebooku."; - -/* The title of the label to start attempting error recovery */ -"ErrorRecovery.OK" = "OK"; - -/* The fallback message to display to retry transient errors */ -"ErrorRecovery.Transient.Suggestion" = "Serwer jest zajęty, spróbuj później."; - -/* The label for the FBSDKLikeButton when the object is not currently liked. */ -"LikeButton.Like" = "Lubię to!"; - -/* The label for the FBSDKLikeButton when the object is currently liked. */ -"LikeButton.Liked" = "Polubione"; - -/* The label for the FBSDKLoginButton action sheet to cancel logging out */ -"LoginButton.CancelLogout" = "Anuluj"; - -/* The label for the FBSDKLoginButton action sheet to confirm logging out */ -"LoginButton.ConfirmLogOut" = "Wyloguj się"; - -/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ -"LoginButton.LoggedIn" = "Zalogowano przez Facebooka"; - -/* The format string for the FBSDKLoginButton label when the user is logged in */ -"LoginButton.LoggedInAs" = "Zalogowano jako %@"; - -/* The short label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogIn" = "Zaloguj się"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInContinue" = "Kontynuuj za pośrednictwem Facebooka"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInLong" = "Zaloguj się przez Facebooka"; - -/* The label for the FBSDKLoginButton when the user is currently logged in */ -"LoginButton.LogOut" = "Wyloguj się"; - -/* The user facing error message when the app slider has been disabled and login fails. */ -"LoginError.SystemAccount.Disabled" = "Brak dostępu z tego konta na Facebooku. Sprawdź ustawienia urządzenia."; - -/* The user facing error message when the Accounts framework encounters a network error. */ -"LoginError.SystemAccount.Network" = "Nie można połączyć się z Facebookiem. Sprawdź połączenie sieciowe i spróbuj ponownie."; - -/* The user facing error message when the device Facebook account password is incorrect and login fails. */ -"LoginError.SystemAccount.PasswordChange" = "Twoje hasło do Facebooka zostało zmienione. Aby potwierdzić hasło, otwórz Ustawienia > Facebook i dotknij swojego imienia i nazwiska."; - -/* The user facing error message when the device Facebook account is unavailable and login fails. */ -"LoginError.SystemAccount.Unavailable" = "Na tym urządzeniu nie skonfigurowano konta na Facebooku."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ -"LoginError.SystemAccount.UnconfirmedUser" = "Konto niepotwierdzone. Zaloguj się przez stronę www.facebook.com i postępuj zgodnie ze wskazówkami."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ -"LoginError.SystemAccount.UserCheckpointed" = "Brak możliwości logowania się do aplikacji. Zaloguj się przez stronę www.facebook.com i postępuj zgodnie ze wskazówkami."; - -/* The message of the FBSDKLoginTooltipView */ -"LoginTooltip.Message" = "Masz pełną kontrolę – określ, jakie informacje chcesz udostępniać aplikacjom."; - -/* Title of the web dialog that prompts the user to log in to Facebook. */ -"LoginWeb.LogInTitle" = "Zaloguj się"; - -/* The label for FBSDKSendButton */ -"SendButton.Send" = "Wyślij"; - -/* The label for FBSDKShareButton */ -"ShareButton.Share" = "Udostępnij"; - -/* Prompts a person if this is their current account */ -"SmartLogin.NotYou" = "To nie Ty?"; - -/* Text on a button that a person presses to confirm that they are finished with the login experience */ -"SmartLogin.ConfirmationTitle" = "Potwierdź logowanie"; - -/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ -"SmartLogin.Continue" = "Kontynuuj jako %@"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/pt.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/pt.lproj/FacebookSDK.strings deleted file mode 100644 index 781791229d..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/pt.lproj/FacebookSDK.strings +++ /dev/null @@ -1,92 +0,0 @@ -/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ -"DeviceLogin.LogInPrompt" = "Acesse %@ e introduza o código mostrado acima."; - -/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ -"DeviceLogin.SmartLogInPrompt" = "Para conectar sua conta, abra o aplicativo Facebook em seu dispositivo móvel e verifique se tem notificações."; - -/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ -"DeviceLogin.SmartLogInOrLabel" = "– OU –"; - -/* The title of the label to dismiss the alert when presenting user facing error messages */ -"ErrorRecovery.Alert.OK" = "OK"; - -/* The title of the label to decline attempting error recovery */ -"ErrorRecovery.Cancel" = "Cancelar"; - -/* The fallback message to display to recover invalidated tokens */ -"ErrorRecovery.Login.Suggestion" = "Entre nesse aplicativo novamente para reconectar sua conta do Facebook."; - -/* The title of the label to start attempting error recovery */ -"ErrorRecovery.OK" = "OK"; - -/* The fallback message to display to retry transient errors */ -"ErrorRecovery.Transient.Suggestion" = "O servidor está temporariamente ocupado. Tente novamente."; - -/* The label for the FBSDKLikeButton when the object is not currently liked. */ -"LikeButton.Like" = "Curtir"; - -/* The label for the FBSDKLikeButton when the object is currently liked. */ -"LikeButton.Liked" = "Curtiu"; - -/* The label for the FBSDKLoginButton action sheet to cancel logging out */ -"LoginButton.CancelLogout" = "Cancelar"; - -/* The label for the FBSDKLoginButton action sheet to confirm logging out */ -"LoginButton.ConfirmLogOut" = "Sair"; - -/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ -"LoginButton.LoggedIn" = "Você entrou usando o Facebook"; - -/* The format string for the FBSDKLoginButton label when the user is logged in */ -"LoginButton.LoggedInAs" = "Conectado como %@"; - -/* The short label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogIn" = "Entrar"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInContinue" = "Continuar com o Facebook"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInLong" = "Entrar com o Facebook"; - -/* The label for the FBSDKLoginButton when the user is currently logged in */ -"LoginButton.LogOut" = "Sair"; - -/* The user facing error message when the app slider has been disabled and login fails. */ -"LoginError.SystemAccount.Disabled" = "O acesso à conta do Facebook não foi permitido. Verifique as configurações do dispositivo."; - -/* The user facing error message when the Accounts framework encounters a network error. */ -"LoginError.SystemAccount.Network" = "Não foi possível se conectar ao Facebook. Verifique sua conexão de rede e tente novamente."; - -/* The user facing error message when the device Facebook account password is incorrect and login fails. */ -"LoginError.SystemAccount.PasswordChange" = "A sua senha do Facebook foi alterada. Para confirmar a sua senha, abra Configurações > Facebook e toque no seu nome."; - -/* The user facing error message when the device Facebook account is unavailable and login fails. */ -"LoginError.SystemAccount.Unavailable" = "A conta do Facebook não foi configurada no dispositivo."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ -"LoginError.SystemAccount.UnconfirmedUser" = "A sua conta não foi confirmada. Entre no site www.facebook.com e siga as instruções fornecidas."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ -"LoginError.SystemAccount.UserCheckpointed" = "Não é possível entrar em aplicativos neste momento. Entre no site www.facebook.com e siga as instruções fornecidas."; - -/* The message of the FBSDKLoginTooltipView */ -"LoginTooltip.Message" = "Você é quem controla — escolha quais informações você quer compartilhar com os aplicativos."; - -/* Title of the web dialog that prompts the user to log in to Facebook. */ -"LoginWeb.LogInTitle" = "Entrar"; - -/* The label for FBSDKSendButton */ -"SendButton.Send" = "Envio"; - -/* The label for FBSDKShareButton */ -"ShareButton.Share" = "Compartilhar"; - -/* Prompts a person if this is their current account */ -"SmartLogin.NotYou" = "Não é você?"; - -/* Text on a button that a person presses to confirm that they are finished with the login experience */ -"SmartLogin.ConfirmationTitle" = "Confirme o login"; - -/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ -"SmartLogin.Continue" = "Continue como %@"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/pt_PT.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/pt_PT.lproj/FacebookSDK.strings deleted file mode 100644 index 1fd2d29ea4..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/pt_PT.lproj/FacebookSDK.strings +++ /dev/null @@ -1,92 +0,0 @@ -/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ -"DeviceLogin.LogInPrompt" = "Visita %@ e introduz o código mostrado acima."; - -/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ -"DeviceLogin.SmartLogInPrompt" = "Para ligares a tua conta, abre a app Facebook no teu dispositivo móvel e verifica se tens notificações."; - -/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ -"DeviceLogin.SmartLogInOrLabel" = "– OU –"; - -/* The title of the label to dismiss the alert when presenting user facing error messages */ -"ErrorRecovery.Alert.OK" = "OK"; - -/* The title of the label to decline attempting error recovery */ -"ErrorRecovery.Cancel" = "Cancelar"; - -/* The fallback message to display to recover invalidated tokens */ -"ErrorRecovery.Login.Suggestion" = "Volta a iniciar sessão nesta aplicação para te ligares novamente à tua conta do Facebook."; - -/* The title of the label to start attempting error recovery */ -"ErrorRecovery.OK" = "OK"; - -/* The fallback message to display to retry transient errors */ -"ErrorRecovery.Transient.Suggestion" = "O servidor está temporariamente ocupado. Tenta novamente."; - -/* The label for the FBSDKLikeButton when the object is not currently liked. */ -"LikeButton.Like" = "Gosto"; - -/* The label for the FBSDKLikeButton when the object is currently liked. */ -"LikeButton.Liked" = "Gostei"; - -/* The label for the FBSDKLoginButton action sheet to cancel logging out */ -"LoginButton.CancelLogout" = "Cancelar"; - -/* The label for the FBSDKLoginButton action sheet to confirm logging out */ -"LoginButton.ConfirmLogOut" = "Terminar sessão"; - -/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ -"LoginButton.LoggedIn" = "Com sessão iniciada através do Facebook"; - -/* The format string for the FBSDKLoginButton label when the user is logged in */ -"LoginButton.LoggedInAs" = "Com sessão iniciada como %@"; - -/* The short label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogIn" = "Iniciar sessão"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInContinue" = "Continuar com o Facebook"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInLong" = "Iniciar sessão com o Facebook"; - -/* The label for the FBSDKLoginButton when the user is currently logged in */ -"LoginButton.LogOut" = "Terminar a sessão"; - -/* The user facing error message when the app slider has been disabled and login fails. */ -"LoginError.SystemAccount.Disabled" = "O acesso não foi concedido à conta do Facebook. Verificar as definições do dispositivo."; - -/* The user facing error message when the Accounts framework encounters a network error. */ -"LoginError.SystemAccount.Network" = "Não é possível ligar ao Facebook. Verifica a tua ligação à rede e tenta novamente."; - -/* The user facing error message when the device Facebook account password is incorrect and login fails. */ -"LoginError.SystemAccount.PasswordChange" = "A tua palavra-passe do Facebook foi alterada. Para confirmares a tua palavra-passe, abre as Definições > Facebook e toca no teu nome."; - -/* The user facing error message when the device Facebook account is unavailable and login fails. */ -"LoginError.SystemAccount.Unavailable" = "A conta do Facebook não foi configurada no dispositivo."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ -"LoginError.SystemAccount.UnconfirmedUser" = "A tua conta não foi confirmada. Inicia sessão em www.facebook.com e segue as instruções indicadas."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ -"LoginError.SystemAccount.UserCheckpointed" = "Não podes iniciar sessão em aplicações neste momento. Inicia sessão em www.facebook.com e segue as instruções indicadas."; - -/* The message of the FBSDKLoginTooltipView */ -"LoginTooltip.Message" = "Tens o controlo: escolhe a informação que pretendes partilhar com as apps."; - -/* Title of the web dialog that prompts the user to log in to Facebook. */ -"LoginWeb.LogInTitle" = "Iniciar sessão"; - -/* The label for FBSDKSendButton */ -"SendButton.Send" = "Enviar"; - -/* The label for FBSDKShareButton */ -"ShareButton.Share" = "Partilhar"; - -/* Prompts a person if this is their current account */ -"SmartLogin.NotYou" = "Não és tu?"; - -/* Text on a button that a person presses to confirm that they are finished with the login experience */ -"SmartLogin.ConfirmationTitle" = "Confirmar Início de Sessão"; - -/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ -"SmartLogin.Continue" = "Continuar como %@"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/ru.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/ru.lproj/FacebookSDK.strings deleted file mode 100644 index 114e0be23d..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/ru.lproj/FacebookSDK.strings +++ /dev/null @@ -1,92 +0,0 @@ -/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ -"DeviceLogin.LogInPrompt" = "Откройте страницу %@ и введите представленный выше код."; - -/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ -"DeviceLogin.SmartLogInPrompt" = "Чтобы подключить аккаунт, откройте приложение Facebook на мобильном устройстве и проверьте уведомления."; - -/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ -"DeviceLogin.SmartLogInOrLabel" = "- ИЛИ -"; - -/* The title of the label to dismiss the alert when presenting user facing error messages */ -"ErrorRecovery.Alert.OK" = "OK"; - -/* The title of the label to decline attempting error recovery */ -"ErrorRecovery.Cancel" = "Отменить"; - -/* The fallback message to display to recover invalidated tokens */ -"ErrorRecovery.Login.Suggestion" = "Войдите в это приложение еще раз, чтобы повторно подключить ваш аккаунт Facebook."; - -/* The title of the label to start attempting error recovery */ -"ErrorRecovery.OK" = "OK"; - -/* The fallback message to display to retry transient errors */ -"ErrorRecovery.Transient.Suggestion" = "Сервер временно загружен, повторите попытку."; - -/* The label for the FBSDKLikeButton when the object is not currently liked. */ -"LikeButton.Like" = "Нравится"; - -/* The label for the FBSDKLikeButton when the object is currently liked. */ -"LikeButton.Liked" = "Понравилось"; - -/* The label for the FBSDKLoginButton action sheet to cancel logging out */ -"LoginButton.CancelLogout" = "Отменить"; - -/* The label for the FBSDKLoginButton action sheet to confirm logging out */ -"LoginButton.ConfirmLogOut" = "Выход"; - -/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ -"LoginButton.LoggedIn" = "Выполнен вход с помощью Facebook"; - -/* The format string for the FBSDKLoginButton label when the user is logged in */ -"LoginButton.LoggedInAs" = "Вы вошли как %@"; - -/* The short label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogIn" = "Вход"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInContinue" = "Продолжить с Facebook"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInLong" = "Вход через Facebook"; - -/* The label for the FBSDKLoginButton when the user is currently logged in */ -"LoginButton.LogOut" = "Выход"; - -/* The user facing error message when the app slider has been disabled and login fails. */ -"LoginError.SystemAccount.Disabled" = "Аккаунту Facebook доступ не предоставлен. Проверьте настройки устройства."; - -/* The user facing error message when the Accounts framework encounters a network error. */ -"LoginError.SystemAccount.Network" = "Не удалось подключиться к Facebook. Проверьте сетевое подключение и повторите попытку."; - -/* The user facing error message when the device Facebook account password is incorrect and login fails. */ -"LoginError.SystemAccount.PasswordChange" = "Ваш пароль Facebook изменен. Чтобы подтвердить пароль, откройте «Настройки» > Facebook и коснитесь вашего имени."; - -/* The user facing error message when the device Facebook account is unavailable and login fails. */ -"LoginError.SystemAccount.Unavailable" = "На устройстве не настроен аккаунт Facebook."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ -"LoginError.SystemAccount.UnconfirmedUser" = "Ваш аккаунт не подтвержден. Войдите на сайт www.facebook.com и следуйте инструкциям."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ -"LoginError.SystemAccount.UserCheckpointed" = "Сейчас нельзя войти в приложения. Войдите на сайт www.facebook.com и следуйте инструкциям."; - -/* The message of the FBSDKLoginTooltipView */ -"LoginTooltip.Message" = "Вы сами выбираете, какой информацией поделиться с приложениями."; - -/* Title of the web dialog that prompts the user to log in to Facebook. */ -"LoginWeb.LogInTitle" = "Вход в систему"; - -/* The label for FBSDKSendButton */ -"SendButton.Send" = "Отправить"; - -/* The label for FBSDKShareButton */ -"ShareButton.Share" = "Поделиться"; - -/* Prompts a person if this is their current account */ -"SmartLogin.NotYou" = "Это не вы?"; - -/* Text on a button that a person presses to confirm that they are finished with the login experience */ -"SmartLogin.ConfirmationTitle" = "Подтвердить вход"; - -/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ -"SmartLogin.Continue" = "Продолжить как %@"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/sk.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/sk.lproj/FacebookSDK.strings deleted file mode 100644 index 1c1e2a8363..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/sk.lproj/FacebookSDK.strings +++ /dev/null @@ -1,92 +0,0 @@ -/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ -"DeviceLogin.LogInPrompt" = "Navštívte stránku %@ a zadajte kód zobrazený vyššie."; - -/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ -"DeviceLogin.SmartLogInPrompt" = "Na pripojenie svojho účtu otvorte vo svojom mobilnom zariadení aplikáciu Facebook a skontrolujte upozornenia."; - -/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ -"DeviceLogin.SmartLogInOrLabel" = "- ALEBO -"; - -/* The title of the label to dismiss the alert when presenting user facing error messages */ -"ErrorRecovery.Alert.OK" = "OK"; - -/* The title of the label to decline attempting error recovery */ -"ErrorRecovery.Cancel" = "Zrušiť"; - -/* The fallback message to display to recover invalidated tokens */ -"ErrorRecovery.Login.Suggestion" = "Ak sa chcete znova pripojiť k svojmu účtu na Facebooku, prihláste sa znova do tejto aplikácie."; - -/* The title of the label to start attempting error recovery */ -"ErrorRecovery.OK" = "OK"; - -/* The fallback message to display to retry transient errors */ -"ErrorRecovery.Transient.Suggestion" = "Server je dočasne zaneprázdnený – skúste znova."; - -/* The label for the FBSDKLikeButton when the object is not currently liked. */ -"LikeButton.Like" = "Páči sa mi to"; - -/* The label for the FBSDKLikeButton when the object is currently liked. */ -"LikeButton.Liked" = "Páči sa mi to"; - -/* The label for the FBSDKLoginButton action sheet to cancel logging out */ -"LoginButton.CancelLogout" = "Zrušiť"; - -/* The label for the FBSDKLoginButton action sheet to confirm logging out */ -"LoginButton.ConfirmLogOut" = "Odhlásiť"; - -/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ -"LoginButton.LoggedIn" = "Prihlásený cez Facebook"; - -/* The format string for the FBSDKLoginButton label when the user is logged in */ -"LoginButton.LoggedInAs" = "Prihlásený ako %@"; - -/* The short label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogIn" = "Prihlásiť sa"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInContinue" = "Pokračovať s Facebookom"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInLong" = "Prihlásiť sa cez Facebook"; - -/* The label for the FBSDKLoginButton when the user is currently logged in */ -"LoginButton.LogOut" = "Odhlásiť sa"; - -/* The user facing error message when the app slider has been disabled and login fails. */ -"LoginError.SystemAccount.Disabled" = "Danému účtu na Facebooku nebol poskytnutý prístup. Skontrolujte nastavenia zariadenia."; - -/* The user facing error message when the Accounts framework encounters a network error. */ -"LoginError.SystemAccount.Network" = "Nedá sa pripojiť k Facebooku. Skontrolujte svoje sieťové pripojenie a skúste znova."; - -/* The user facing error message when the device Facebook account password is incorrect and login fails. */ -"LoginError.SystemAccount.PasswordChange" = "Vaše heslo pre Facebook sa zmenilo. Na potvrdenie svojho hesla otvorte Nastavenia > Facebook a ťuknite na svoje meno."; - -/* The user facing error message when the device Facebook account is unavailable and login fails. */ -"LoginError.SystemAccount.Unavailable" = "Daný účet na Facebooku nebol nastavený v zariadení."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ -"LoginError.SystemAccount.UnconfirmedUser" = "Váš účet nie je potvrdený. Prihláste sa na stránke www.facebook.com a postupujte podľa pokynov."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ -"LoginError.SystemAccount.UserCheckpointed" = "Momentálne sa nemôžete prihlásiť do aplikácií. Prihláste sa na stránke www.facebook.com a postupujte podľa pokynov."; - -/* The message of the FBSDKLoginTooltipView */ -"LoginTooltip.Message" = "Máte to pod kontrolou: vyberte, ktoré informácie chcete zdieľať s aplikáciami."; - -/* Title of the web dialog that prompts the user to log in to Facebook. */ -"LoginWeb.LogInTitle" = "Prihlásenie sa"; - -/* The label for FBSDKSendButton */ -"SendButton.Send" = "Odoslať"; - -/* The label for FBSDKShareButton */ -"ShareButton.Share" = "Zdieľať"; - -/* Prompts a person if this is their current account */ -"SmartLogin.NotYou" = "Nie ste to vy?"; - -/* Text on a button that a person presses to confirm that they are finished with the login experience */ -"SmartLogin.ConfirmationTitle" = "Potvrdiť prihlásenie"; - -/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ -"SmartLogin.Continue" = "Pokračovať ako %@"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/sv.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/sv.lproj/FacebookSDK.strings deleted file mode 100644 index 3fd3107bfd..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/sv.lproj/FacebookSDK.strings +++ /dev/null @@ -1,92 +0,0 @@ -/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ -"DeviceLogin.LogInPrompt" = "Besök %@ och ange koden som visas ovan."; - -/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ -"DeviceLogin.SmartLogInPrompt" = "Koppla ditt konto genom att öppna Facebook-appen på din mobila enhet och söka efter aviseringar."; - -/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ -"DeviceLogin.SmartLogInOrLabel" = "- ELLER -"; - -/* The title of the label to dismiss the alert when presenting user facing error messages */ -"ErrorRecovery.Alert.OK" = "OK"; - -/* The title of the label to decline attempting error recovery */ -"ErrorRecovery.Cancel" = "Avbryt"; - -/* The fallback message to display to recover invalidated tokens */ -"ErrorRecovery.Login.Suggestion" = "Logga in på den här appen igen om du vill ansluta ditt Facebook-konto på nytt."; - -/* The title of the label to start attempting error recovery */ -"ErrorRecovery.OK" = "OK"; - -/* The fallback message to display to retry transient errors */ -"ErrorRecovery.Transient.Suggestion" = "Servern är upptagen för tillfället. Försök igen."; - -/* The label for the FBSDKLikeButton when the object is not currently liked. */ -"LikeButton.Like" = "Gilla"; - -/* The label for the FBSDKLikeButton when the object is currently liked. */ -"LikeButton.Liked" = "Gillade"; - -/* The label for the FBSDKLoginButton action sheet to cancel logging out */ -"LoginButton.CancelLogout" = "Avbryt"; - -/* The label for the FBSDKLoginButton action sheet to confirm logging out */ -"LoginButton.ConfirmLogOut" = "Logga ut"; - -/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ -"LoginButton.LoggedIn" = "Inloggad med Facebook"; - -/* The format string for the FBSDKLoginButton label when the user is logged in */ -"LoginButton.LoggedInAs" = "Inloggad som %@"; - -/* The short label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogIn" = "Logga in"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInContinue" = "Fortsätt med Facebook"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInLong" = "Logga in med Facebook"; - -/* The label for the FBSDKLoginButton when the user is currently logged in */ -"LoginButton.LogOut" = "Logga ut"; - -/* The user facing error message when the app slider has been disabled and login fails. */ -"LoginError.SystemAccount.Disabled" = "Du har inte fått tillgång till Facebook-kontot. Verifiera enhetsinställningar."; - -/* The user facing error message when the Accounts framework encounters a network error. */ -"LoginError.SystemAccount.Network" = "Det går inte att ansluta till Facebook. Kontrollera nätverksanslutningen och försök igen."; - -/* The user facing error message when the device Facebook account password is incorrect and login fails. */ -"LoginError.SystemAccount.PasswordChange" = "Ditt Facebook-lösenord har ändrats. Bekräfta lösenordet genom att öppna Inställningar > Facebook och skriva in ditt namn."; - -/* The user facing error message when the device Facebook account is unavailable and login fails. */ -"LoginError.SystemAccount.Unavailable" = "Facebook-konto har inte konfigurerats på enheten."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ -"LoginError.SystemAccount.UnconfirmedUser" = "Ditt konto har inte bekräftats. Logga in på www.facebook.com och följ instruktionerna."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ -"LoginError.SystemAccount.UserCheckpointed" = "Du kan inte logga in på appar för närvarande. Logga in på www.facebook.com och följ instruktionerna."; - -/* The message of the FBSDKLoginTooltipView */ -"LoginTooltip.Message" = "Du bestämmer – välj vilken info du vill dela med appar."; - -/* Title of the web dialog that prompts the user to log in to Facebook. */ -"LoginWeb.LogInTitle" = "Logga in"; - -/* The label for FBSDKSendButton */ -"SendButton.Send" = "Skicka"; - -/* The label for FBSDKShareButton */ -"ShareButton.Share" = "Dela"; - -/* Prompts a person if this is their current account */ -"SmartLogin.NotYou" = "Inte du?"; - -/* Text on a button that a person presses to confirm that they are finished with the login experience */ -"SmartLogin.ConfirmationTitle" = "Bekräfta inloggning"; - -/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ -"SmartLogin.Continue" = "Fortsätt som %@"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/ta.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/ta.lproj/FacebookSDK.strings deleted file mode 100644 index c0d2d08da8..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/ta.lproj/FacebookSDK.strings +++ /dev/null @@ -1,92 +0,0 @@ -/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ -"DeviceLogin.LogInPrompt" = "%@ என்பதற்குச் சென்று மேலே தெரியும் குறியீட்டை உள்ளிடவும்."; - -/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ -"DeviceLogin.SmartLogInPrompt" = "உங்கள் கணக்குடன் இணைக்க, உங்கள் மொபைல் சாதனத்தில் Facebook பயன்பாட்டைத் திறந்து அறிவிப்புகளைப் பார்க்கவும்."; - -/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ -"DeviceLogin.SmartLogInOrLabel" = "- அல்லது -"; - -/* The title of the label to dismiss the alert when presenting user facing error messages */ -"ErrorRecovery.Alert.OK" = "சரி"; - -/* The title of the label to decline attempting error recovery */ -"ErrorRecovery.Cancel" = "ரத்துசெய்"; - -/* The fallback message to display to recover invalidated tokens */ -"ErrorRecovery.Login.Suggestion" = "உங்கள் Facebook கணக்கில் மீண்டும் இணைய, இந்தப் பயன்பாட்டில் மீண்டும் உள்நுழையவும்."; - -/* The title of the label to start attempting error recovery */ -"ErrorRecovery.OK" = "சரி"; - -/* The fallback message to display to retry transient errors */ -"ErrorRecovery.Transient.Suggestion" = "சேவையகம் தற்காலிகமாக பிஸியாக உள்ளது, மீண்டும் முயற்சிக்கவும்."; - -/* The label for the FBSDKLikeButton when the object is not currently liked. */ -"LikeButton.Like" = "விருப்பம்"; - -/* The label for the FBSDKLikeButton when the object is currently liked. */ -"LikeButton.Liked" = "விரும்பப்பட்டது"; - -/* The label for the FBSDKLoginButton action sheet to cancel logging out */ -"LoginButton.CancelLogout" = "ரத்துசெய்"; - -/* The label for the FBSDKLoginButton action sheet to confirm logging out */ -"LoginButton.ConfirmLogOut" = "வெளியேறு"; - -/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ -"LoginButton.LoggedIn" = "Facebook மூலம் உள்நுழையப்பட்டுள்ளது"; - -/* The format string for the FBSDKLoginButton label when the user is logged in */ -"LoginButton.LoggedInAs" = "%@ இல் உள்நுழைந்துள்ளீர்கள்"; - -/* The short label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogIn" = "உள்நுழைவு"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInContinue" = "Facebook இல் தொடரவும்"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInLong" = "Facebook மூலம் உள்நுழையவும்"; - -/* The label for the FBSDKLoginButton when the user is currently logged in */ -"LoginButton.LogOut" = "வெளியேறு"; - -/* The user facing error message when the app slider has been disabled and login fails. */ -"LoginError.SystemAccount.Disabled" = "Facebook கணக்கிற்கு அணுகல் வழங்கப்படவில்லை. சாதன அமைப்புகளைச் சரிபார்க்கவும்."; - -/* The user facing error message when the Accounts framework encounters a network error. */ -"LoginError.SystemAccount.Network" = "Facebook இல் இணைய முடியவில்லை. இணைய இணைப்பைச் சரிபார்த்து, மீண்டும் முயற்சிக்கவும்."; - -/* The user facing error message when the device Facebook account password is incorrect and login fails. */ -"LoginError.SystemAccount.PasswordChange" = "Facebook கடவுச்சொல் மாற்றப்பட்டது. கடவுச்சொல்லை உறுதிசெய்ய, அமைப்புகள் > Facebook க்கு சென்று உங்கள் பெயரைத் தட்டவும்."; - -/* The user facing error message when the device Facebook account is unavailable and login fails. */ -"LoginError.SystemAccount.Unavailable" = "சாதனத்தில் Facebook கணக்கு உள்ளமைக்கப்படவில்லை."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ -"LoginError.SystemAccount.UnconfirmedUser" = "உங்கள் கணக்கு உறுதிசெய்யப்படவில்லை. www.facebook.com இல் உள்நுழைந்து, வழங்கப்பட்டுள்ள வழிமுறைகளைப் பின்பற்றவும்."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ -"LoginError.SystemAccount.UserCheckpointed" = "இப்போது பயன்பாடுகளில் உள்நுழைய முடியாது. www.facebook.com இல் உள்நுழைந்து, வழங்கப்பட்டுள்ள வழிமுறைகளைப் பின்பற்றவும்."; - -/* The message of the FBSDKLoginTooltipView */ -"LoginTooltip.Message" = "பயன்பாடுகளில் எந்தத் தகவலைப் பகிர விரும்புகிறீர்கள் என்பதை நீங்கள் கட்டுப்படுத்தலாம்."; - -/* Title of the web dialog that prompts the user to log in to Facebook. */ -"LoginWeb.LogInTitle" = "உள்நுழைவு"; - -/* The label for FBSDKSendButton */ -"SendButton.Send" = "அனுப்பு"; - -/* The label for FBSDKShareButton */ -"ShareButton.Share" = "பகிர்"; - -/* Prompts a person if this is their current account */ -"SmartLogin.NotYou" = "நீங்கள் இல்லையா?"; - -/* Text on a button that a person presses to confirm that they are finished with the login experience */ -"SmartLogin.ConfirmationTitle" = "உள்நுழைவை உறுதிப்படுத்தவும்"; - -/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ -"SmartLogin.Continue" = "%@ ஆகத் தொடரவும்"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/te.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/te.lproj/FacebookSDK.strings deleted file mode 100644 index 7605c9b5e8..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/te.lproj/FacebookSDK.strings +++ /dev/null @@ -1,92 +0,0 @@ -/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ -"DeviceLogin.LogInPrompt" = "%@ లింక్‌ను సందర్శించి, ఎగువ చూపిన కోడ్‌ను నమోదు చేయండి."; - -/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ -"DeviceLogin.SmartLogInPrompt" = "మీ ఖాతాను అనుసంధానించడానికి, మీ మొబైల్ పరికరంలో Facebook అనువర్తనాన్ని తెరిచి, నోటిఫికేషన్‌లను తనిఖీ చేయండి."; - -/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ -"DeviceLogin.SmartLogInOrLabel" = "- లేదా -"; - -/* The title of the label to dismiss the alert when presenting user facing error messages */ -"ErrorRecovery.Alert.OK" = "ఒప్పుకుంటున్నాను"; - -/* The title of the label to decline attempting error recovery */ -"ErrorRecovery.Cancel" = "రద్దు చేయి"; - -/* The fallback message to display to recover invalidated tokens */ -"ErrorRecovery.Login.Suggestion" = "దయచేసి మీ Facebook ఖాతాను మళ్లీ కనెక్ట్ చేయడానికి ఈ అప్లికేషన్‌కు మళ్లీ లాగిన్ చేయండి."; - -/* The title of the label to start attempting error recovery */ -"ErrorRecovery.OK" = "ఒప్పుకుంటున్నాను"; - -/* The fallback message to display to retry transient errors */ -"ErrorRecovery.Transient.Suggestion" = "సర్వర్ తాత్కాలికంగా బిజీగా ఉంది, దయచేసి మళ్లీ ప్రయత్నించండి."; - -/* The label for the FBSDKLikeButton when the object is not currently liked. */ -"LikeButton.Like" = "ఇష్టంగా గుర్తు పెట్టు"; - -/* The label for the FBSDKLikeButton when the object is currently liked. */ -"LikeButton.Liked" = "ఇష్టంగా గుర్తు పెట్టబడింది"; - -/* The label for the FBSDKLoginButton action sheet to cancel logging out */ -"LoginButton.CancelLogout" = "రద్దు చేయి"; - -/* The label for the FBSDKLoginButton action sheet to confirm logging out */ -"LoginButton.ConfirmLogOut" = "లాగ్ అవుట్ చేయి"; - -/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ -"LoginButton.LoggedIn" = "Facebook ఉపయోగించి లాగిన్ చేసారు"; - -/* The format string for the FBSDKLoginButton label when the user is logged in */ -"LoginButton.LoggedInAs" = "%@గా లాగిన్ చేసారు"; - -/* The short label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogIn" = "లాగిన్ చేయి"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInContinue" = "Facebookతో కొనసాగించండి"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInLong" = "Facebookతో లాగిన్ చేయి"; - -/* The label for the FBSDKLoginButton when the user is currently logged in */ -"LoginButton.LogOut" = "లాగ్ అవుట్ చేయి"; - -/* The user facing error message when the app slider has been disabled and login fails. */ -"LoginError.SystemAccount.Disabled" = "Facebook ఖాతాకు ప్రాప్యత మంజూరు చేయలేదు. పరికర సెట్టింగ్‌లను సరిచూడండి."; - -/* The user facing error message when the Accounts framework encounters a network error. */ -"LoginError.SystemAccount.Network" = "Facebookకి కనెక్ట్ చేయడం సాధ్యపడలేదు. మీ నెట్‌వర్క్ కనెక్షన్‌ను తనిఖీ చేసి, మళ్లీ ప్రయత్నించండి."; - -/* The user facing error message when the device Facebook account password is incorrect and login fails. */ -"LoginError.SystemAccount.PasswordChange" = "మీ Facebook పాస్‌వర్డ్ మారింది. మీ పాస్‌వర్డ్‌ను నిర్ధారించడానికి, సెట్టింగ్‌లు > Facebook తెరిచి, మీ పేరు నొక్కండి."; - -/* The user facing error message when the device Facebook account is unavailable and login fails. */ -"LoginError.SystemAccount.Unavailable" = "పరికరంలో Facebook ఖాతా కాన్ఫిగర్ చేయబడలేదు."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ -"LoginError.SystemAccount.UnconfirmedUser" = "మీ ఖాతా నిర్ధారించబడలేదు. దయచేసి www.facebook.comకి లాగిన్ చేసి, అందించిన సూచనలను అనుసరించండి."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ -"LoginError.SystemAccount.UserCheckpointed" = "ప్రస్తుతం మీరు అప్లికేషన్‌లకు లాగిన్ చేయలేరు. దయచేసి www.facebook.comకి లాగిన్ చేసి, అందించిన సూచనలను అనుసరించండి."; - -/* The message of the FBSDKLoginTooltipView */ -"LoginTooltip.Message" = "మీకు నియంత్రణ ఉంది - మీరు అనువర్తనాలతో భాగస్వామ్యం చేయాలనుకునే సమాచారాన్ని ఎంచుకోండి."; - -/* Title of the web dialog that prompts the user to log in to Facebook. */ -"LoginWeb.LogInTitle" = "లాగిన్ చేయండి"; - -/* The label for FBSDKSendButton */ -"SendButton.Send" = "పంపు"; - -/* The label for FBSDKShareButton */ -"ShareButton.Share" = "భాగస్వామ్యం చేయండి"; - -/* Prompts a person if this is their current account */ -"SmartLogin.NotYou" = "మీరు కాదా?"; - -/* Text on a button that a person presses to confirm that they are finished with the login experience */ -"SmartLogin.ConfirmationTitle" = "లాగిన్‌ను నిర్ధారించండి"; - -/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ -"SmartLogin.Continue" = "%@ వలె కొనసాగండి"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/th.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/th.lproj/FacebookSDK.strings deleted file mode 100644 index 8c5c9fde49..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/th.lproj/FacebookSDK.strings +++ /dev/null @@ -1,92 +0,0 @@ -/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ -"DeviceLogin.LogInPrompt" = "ไปที่ %@ และใส่โค้ดที่แสดงด้านบน"; - -/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ -"DeviceLogin.SmartLogInPrompt" = "หากต้องการเชื่อมต่อบัญชีผู้ใช้ของคุณ ให้เปิดแอพ Facebook บนอุปกรณ์มือถือของคุณและตรวจสอบการแจ้งเตือน"; - -/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ -"DeviceLogin.SmartLogInOrLabel" = "- หรือ -"; - -/* The title of the label to dismiss the alert when presenting user facing error messages */ -"ErrorRecovery.Alert.OK" = "ตกลง"; - -/* The title of the label to decline attempting error recovery */ -"ErrorRecovery.Cancel" = "ยกเลิก"; - -/* The fallback message to display to recover invalidated tokens */ -"ErrorRecovery.Login.Suggestion" = "โปรดลงชื่อเข้าใช้แอพนี้อีกครั้งเพื่อเชื่อมต่อบัญชีผู้ใช้ Facebook ของคุณใหม่"; - -/* The title of the label to start attempting error recovery */ -"ErrorRecovery.OK" = "ตกลง"; - -/* The fallback message to display to retry transient errors */ -"ErrorRecovery.Transient.Suggestion" = "เซิร์ฟเวอร์ไม่พร้อมให้บริการชั่วคราว โปรดลองใหม่อีกครั้ง"; - -/* The label for the FBSDKLikeButton when the object is not currently liked. */ -"LikeButton.Like" = "ถูกใจ"; - -/* The label for the FBSDKLikeButton when the object is currently liked. */ -"LikeButton.Liked" = "ถูกใจแล้ว"; - -/* The label for the FBSDKLoginButton action sheet to cancel logging out */ -"LoginButton.CancelLogout" = "ยกเลิก"; - -/* The label for the FBSDKLoginButton action sheet to confirm logging out */ -"LoginButton.ConfirmLogOut" = "ออกจากระบบ"; - -/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ -"LoginButton.LoggedIn" = "เข้าสู่ระบบโดยใช้ Facebook"; - -/* The format string for the FBSDKLoginButton label when the user is logged in */ -"LoginButton.LoggedInAs" = "เข้าสู่ระบบในชื่อ %@"; - -/* The short label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogIn" = "เข้าสู่ระบบ"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInContinue" = "ดำเนินการต่อด้วย Facebook"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInLong" = "เข้าสู่ระบบด้วย Facebook"; - -/* The label for the FBSDKLoginButton when the user is currently logged in */ -"LoginButton.LogOut" = "ออกจากระบบ"; - -/* The user facing error message when the app slider has been disabled and login fails. */ -"LoginError.SystemAccount.Disabled" = "บัญชีผู้ใช้ Facebook ไม่ได้รับอนุญาตให้เข้าถึง ตรวจสอบการตั้งค่าของอุปกรณ์"; - -/* The user facing error message when the Accounts framework encounters a network error. */ -"LoginError.SystemAccount.Network" = "ไม่สามารถเชื่อมต่อกับ Facebook ตรวจสอบการเชื่อมต่อเครือข่ายและลองอีกครั้ง"; - -/* The user facing error message when the device Facebook account password is incorrect and login fails. */ -"LoginError.SystemAccount.PasswordChange" = "เปลี่ยนรหัสผ่าน Facebook ของคุณแล้ว เพื่อยืนยันรหัสผ่านของคุณ ให้เปิด การตั้งค่า > Facebook แล้วแตะชื่อของคุณ"; - -/* The user facing error message when the device Facebook account is unavailable and login fails. */ -"LoginError.SystemAccount.Unavailable" = "บัญชีผู้ใช้ Facebook ไม่ได้รับการกำหนดค่าบนอุปกรณ์เครื่องนี้"; - -/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ -"LoginError.SystemAccount.UnconfirmedUser" = "บัญชีผู้ใช้ของคุณไม่ได้รับการยืนยัน โปรดเข้าสู่ระบบที่ www.facebook.com และทำตามคำแนะนำที่ปรากฏ"; - -/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ -"LoginError.SystemAccount.UserCheckpointed" = "คุณไม่สามารถเข้าสู่ระบบของแอพได้ในตอนนี้ โปรดเข้าสู่ระบบที่ www.facebook.com และทำตามคำแนะนำที่ปรากฏ"; - -/* The message of the FBSDKLoginTooltipView */ -"LoginTooltip.Message" = "คุณเป็นฝ่ายควบคุม โปรดเลือกข้อมูลที่คุณต้องการแชร์ด้วยแอพ"; - -/* Title of the web dialog that prompts the user to log in to Facebook. */ -"LoginWeb.LogInTitle" = "เข้าสู่ระบบ"; - -/* The label for FBSDKSendButton */ -"SendButton.Send" = "ส่ง"; - -/* The label for FBSDKShareButton */ -"ShareButton.Share" = "แชร์"; - -/* Prompts a person if this is their current account */ -"SmartLogin.NotYou" = "หากไม่ใช่คุณ"; - -/* Text on a button that a person presses to confirm that they are finished with the login experience */ -"SmartLogin.ConfirmationTitle" = "ยืนยันการเข้าสู่ระบบ"; - -/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ -"SmartLogin.Continue" = "ดำเนินการต่อในชื่อ %@"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/tr.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/tr.lproj/FacebookSDK.strings deleted file mode 100644 index 3d57b8f219..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/tr.lproj/FacebookSDK.strings +++ /dev/null @@ -1,92 +0,0 @@ -/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ -"DeviceLogin.LogInPrompt" = "%@ adresini ziyaret edin ve yukarıda görülen kodu girin."; - -/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ -"DeviceLogin.SmartLogInPrompt" = "Hesabınızı bağlamak için, mobil cihazınızda Facebook uygulamasını açın ve bildirimlerinizi kontrol edin."; - -/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ -"DeviceLogin.SmartLogInOrLabel" = "- YA DA -"; - -/* The title of the label to dismiss the alert when presenting user facing error messages */ -"ErrorRecovery.Alert.OK" = "Tamam"; - -/* The title of the label to decline attempting error recovery */ -"ErrorRecovery.Cancel" = "İptal"; - -/* The fallback message to display to recover invalidated tokens */ -"ErrorRecovery.Login.Suggestion" = "Facebook hesabına yeniden bağlanmak için lütfen bu uygulamaya tekrar giriş yap."; - -/* The title of the label to start attempting error recovery */ -"ErrorRecovery.OK" = "Tamam"; - -/* The fallback message to display to retry transient errors */ -"ErrorRecovery.Transient.Suggestion" = "Sunucu geçici olarak meşgul. Lütfen tekrar dene."; - -/* The label for the FBSDKLikeButton when the object is not currently liked. */ -"LikeButton.Like" = "Beğen"; - -/* The label for the FBSDKLikeButton when the object is currently liked. */ -"LikeButton.Liked" = "Beğendin"; - -/* The label for the FBSDKLoginButton action sheet to cancel logging out */ -"LoginButton.CancelLogout" = "İptal"; - -/* The label for the FBSDKLoginButton action sheet to confirm logging out */ -"LoginButton.ConfirmLogOut" = "Çıkış Yap"; - -/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ -"LoginButton.LoggedIn" = "Facebook ile giriş yapıldı"; - -/* The format string for the FBSDKLoginButton label when the user is logged in */ -"LoginButton.LoggedInAs" = "%@ olarak giriş yapıldı"; - -/* The short label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogIn" = "Giriş yap"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInContinue" = "Facebook ile Devam Et"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInLong" = "Facebook ile giriş yap"; - -/* The label for the FBSDKLoginButton when the user is currently logged in */ -"LoginButton.LogOut" = "Çıkış yap"; - -/* The user facing error message when the app slider has been disabled and login fails. */ -"LoginError.SystemAccount.Disabled" = "Facebook hesabına erişim izni verilmedi. Cihaz ayarlarını doğrula."; - -/* The user facing error message when the Accounts framework encounters a network error. */ -"LoginError.SystemAccount.Network" = "Facebook'a bağlanılamıyor. Ağ bağlantını kontrol edip tekrar dene."; - -/* The user facing error message when the device Facebook account password is incorrect and login fails. */ -"LoginError.SystemAccount.PasswordChange" = "Facebook şifren değiştirildi. Şifreni onaylamak için Ayarlar > Facebook'u aç ve adına dokunun."; - -/* The user facing error message when the device Facebook account is unavailable and login fails. */ -"LoginError.SystemAccount.Unavailable" = "Facebook hesabı cihaz üzerinde yapılandırılmadı."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ -"LoginError.SystemAccount.UnconfirmedUser" = "Hesabın onaylanmadı. Lütfen www.facebook.com adresine giriş yap ve verilen talimatları izle."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ -"LoginError.SystemAccount.UserCheckpointed" = "Şu an için uygulamalara giriş yapamazsın. Lütfen www.facebook.com adresine giriş yap ve verilen talimatları izle."; - -/* The message of the FBSDKLoginTooltipView */ -"LoginTooltip.Message" = "Kontrol sende. Uygulamalarla paylaşmak istediğin bilgileri seç."; - -/* Title of the web dialog that prompts the user to log in to Facebook. */ -"LoginWeb.LogInTitle" = "Giriş Yap"; - -/* The label for FBSDKSendButton */ -"SendButton.Send" = "Gönder"; - -/* The label for FBSDKShareButton */ -"ShareButton.Share" = "Paylaş"; - -/* Prompts a person if this is their current account */ -"SmartLogin.NotYou" = "Sen değil misin?"; - -/* Text on a button that a person presses to confirm that they are finished with the login experience */ -"SmartLogin.ConfirmationTitle" = "Girişi Onayla"; - -/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ -"SmartLogin.Continue" = "%@ olarak devam et"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/vi.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/vi.lproj/FacebookSDK.strings deleted file mode 100644 index e7b69465ef..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/vi.lproj/FacebookSDK.strings +++ /dev/null @@ -1,92 +0,0 @@ -/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ -"DeviceLogin.LogInPrompt" = "Truy cập %@ và nhập mã hiển thị ở trên."; - -/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ -"DeviceLogin.SmartLogInPrompt" = "Để kết nối tài khoản của bạn, hãy mở ứng dụng Facebook trên thiết bị di động và kiểm tra thông báo."; - -/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ -"DeviceLogin.SmartLogInOrLabel" = "- HOẶC -"; - -/* The title of the label to dismiss the alert when presenting user facing error messages */ -"ErrorRecovery.Alert.OK" = "OK"; - -/* The title of the label to decline attempting error recovery */ -"ErrorRecovery.Cancel" = "Hủy"; - -/* The fallback message to display to recover invalidated tokens */ -"ErrorRecovery.Login.Suggestion" = "Vui lòng đăng nhập lại vào ứng dụng này để kết nối lại tài khoản Facebook của bạn."; - -/* The title of the label to start attempting error recovery */ -"ErrorRecovery.OK" = "OK"; - -/* The fallback message to display to retry transient errors */ -"ErrorRecovery.Transient.Suggestion" = "Máy chủ hiện đang bận, vui lòng thử lại sau."; - -/* The label for the FBSDKLikeButton when the object is not currently liked. */ -"LikeButton.Like" = "Thích"; - -/* The label for the FBSDKLikeButton when the object is currently liked. */ -"LikeButton.Liked" = "Đã thích"; - -/* The label for the FBSDKLoginButton action sheet to cancel logging out */ -"LoginButton.CancelLogout" = "Hủy"; - -/* The label for the FBSDKLoginButton action sheet to confirm logging out */ -"LoginButton.ConfirmLogOut" = "Đăng xuất"; - -/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ -"LoginButton.LoggedIn" = "Đã đăng nhập bằng Facebook"; - -/* The format string for the FBSDKLoginButton label when the user is logged in */ -"LoginButton.LoggedInAs" = "Đã đăng nhập với tư cách là"; - -/* The short label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogIn" = "Đăng nhập"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInContinue" = "Tiếp tục với Facebook"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInLong" = "Đăng nhập bằng Facebook"; - -/* The label for the FBSDKLoginButton when the user is currently logged in */ -"LoginButton.LogOut" = "Đăng xuất"; - -/* The user facing error message when the app slider has been disabled and login fails. */ -"LoginError.SystemAccount.Disabled" = "Quyền truy cập chưa được cấp cho tài khoản Facebook. Xác minh thiết lập của thiết bị."; - -/* The user facing error message when the Accounts framework encounters a network error. */ -"LoginError.SystemAccount.Network" = "Không thể kết nối với Facebook. Vui lòng kiểm tra kết nối mạng của bạn và thử lại."; - -/* The user facing error message when the device Facebook account password is incorrect and login fails. */ -"LoginError.SystemAccount.PasswordChange" = "Mật khẩu Facebook của bạn đã thay đổi. Để xác nhận mật khẩu của bạn, hãy mở Thiết lập > Facebook và nhấn vào tên bạn."; - -/* The user facing error message when the device Facebook account is unavailable and login fails. */ -"LoginError.SystemAccount.Unavailable" = "Tài khoản Facebook chưa được định cấu hình trên thiết bị."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ -"LoginError.SystemAccount.UnconfirmedUser" = "Tài khoản của bạn không được xác nhận. Vui lòng đăng nhập vào www.facebook.com và làm theo hướng dẫn được cung cấp."; - -/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ -"LoginError.SystemAccount.UserCheckpointed" = "Bạn không thể đăng nhập vào các ứng dụng lúc này. Vui lòng đăng nhập vào www.facebook.com và làm theo hướng dẫn được cung cấp."; - -/* The message of the FBSDKLoginTooltipView */ -"LoginTooltip.Message" = "Bạn đang có quyền kiểm soát - hãy chọn thông tin bạn muốn chia sẻ với ứng dụng."; - -/* Title of the web dialog that prompts the user to log in to Facebook. */ -"LoginWeb.LogInTitle" = "Đăng nhập"; - -/* The label for FBSDKSendButton */ -"SendButton.Send" = "Gửi"; - -/* The label for FBSDKShareButton */ -"ShareButton.Share" = "Chia sẻ"; - -/* Prompts a person if this is their current account */ -"SmartLogin.NotYou" = "Không phải bạn?"; - -/* Text on a button that a person presses to confirm that they are finished with the login experience */ -"SmartLogin.ConfirmationTitle" = "Xác nhận đăng nhập"; - -/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ -"SmartLogin.Continue" = "Tiếp tục với tư cách %@"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/zh.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/zh.lproj/FacebookSDK.strings deleted file mode 100644 index e153685846..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/zh.lproj/FacebookSDK.strings +++ /dev/null @@ -1,92 +0,0 @@ -/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ -"DeviceLogin.LogInPrompt" = "请访问 %@ 并输入上方显示的验证码。"; - -/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ -"DeviceLogin.SmartLogInPrompt" = "要关联你的帐户,请在移动设备上打开 Facebook 应用,并查看通知。"; - -/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ -"DeviceLogin.SmartLogInOrLabel" = "- 或者 -"; - -/* The title of the label to dismiss the alert when presenting user facing error messages */ -"ErrorRecovery.Alert.OK" = "确定"; - -/* The title of the label to decline attempting error recovery */ -"ErrorRecovery.Cancel" = "取消"; - -/* The fallback message to display to recover invalidated tokens */ -"ErrorRecovery.Login.Suggestion" = "请再次登录此应用,以便重新连接您的 Facebook 帐户。"; - -/* The title of the label to start attempting error recovery */ -"ErrorRecovery.OK" = "确定"; - -/* The fallback message to display to retry transient errors */ -"ErrorRecovery.Transient.Suggestion" = "服务器暂时繁忙,请重试。"; - -/* The label for the FBSDKLikeButton when the object is not currently liked. */ -"LikeButton.Like" = "赞"; - -/* The label for the FBSDKLikeButton when the object is currently liked. */ -"LikeButton.Liked" = "赞了"; - -/* The label for the FBSDKLoginButton action sheet to cancel logging out */ -"LoginButton.CancelLogout" = "取消"; - -/* The label for the FBSDKLoginButton action sheet to confirm logging out */ -"LoginButton.ConfirmLogOut" = "退出"; - -/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ -"LoginButton.LoggedIn" = "已使用 Facebook 登录"; - -/* The format string for the FBSDKLoginButton label when the user is logged in */ -"LoginButton.LoggedInAs" = "已以 %@ 身份登录"; - -/* The short label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogIn" = "登录"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInContinue" = "继续使用 Facebook 登录"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInLong" = "使用 Facebook 登录"; - -/* The label for the FBSDKLoginButton when the user is currently logged in */ -"LoginButton.LogOut" = "退出"; - -/* The user facing error message when the app slider has been disabled and login fails. */ -"LoginError.SystemAccount.Disabled" = "未授予该 Facebook 帐户访问权限。验证设备设置。"; - -/* The user facing error message when the Accounts framework encounters a network error. */ -"LoginError.SystemAccount.Network" = "无法连接到 Facebook。检查网络连接并重试。"; - -/* The user facing error message when the device Facebook account password is incorrect and login fails. */ -"LoginError.SystemAccount.PasswordChange" = "您的 Facebook 密码已更改。要确认密码,请打开设置 > Facebook,并轻触您的姓名。"; - -/* The user facing error message when the device Facebook account is unavailable and login fails. */ -"LoginError.SystemAccount.Unavailable" = "未在设备上配置 Facebook 帐户。"; - -/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ -"LoginError.SystemAccount.UnconfirmedUser" = "您的帐户未确认。请登录 www.facebook.com,并按照提供的说明操作。"; - -/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ -"LoginError.SystemAccount.UserCheckpointed" = "您此时不能登录应用。请登录 www.facebook.com,并按照提供的说明操作。"; - -/* The message of the FBSDKLoginTooltipView */ -"LoginTooltip.Message" = "一切任您掌控 — 选择您想通过应用分享的信息。"; - -/* Title of the web dialog that prompts the user to log in to Facebook. */ -"LoginWeb.LogInTitle" = "登录"; - -/* The label for FBSDKSendButton */ -"SendButton.Send" = "发送"; - -/* The label for FBSDKShareButton */ -"ShareButton.Share" = "分享"; - -/* Prompts a person if this is their current account */ -"SmartLogin.NotYou" = "不是你?"; - -/* Text on a button that a person presses to confirm that they are finished with the login experience */ -"SmartLogin.ConfirmationTitle" = "确认登录"; - -/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ -"SmartLogin.Continue" = "以%@的身份继续"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/zh_Hant_HK.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/zh_Hant_HK.lproj/FacebookSDK.strings deleted file mode 100644 index fcf0c3ed3b..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/zh_Hant_HK.lproj/FacebookSDK.strings +++ /dev/null @@ -1,92 +0,0 @@ -/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ -"DeviceLogin.LogInPrompt" = "前往 %@ 並輸入上方的程式碼。"; - -/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ -"DeviceLogin.SmartLogInPrompt" = "若要連結您的帳戶,請在您的流動裝置上開啟 Facebook 應用程式並查看通知。"; - -/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ -"DeviceLogin.SmartLogInOrLabel" = "- 或 -"; - -/* The title of the label to dismiss the alert when presenting user facing error messages */ -"ErrorRecovery.Alert.OK" = "確定"; - -/* The title of the label to decline attempting error recovery */ -"ErrorRecovery.Cancel" = "取消"; - -/* The fallback message to display to recover invalidated tokens */ -"ErrorRecovery.Login.Suggestion" = "請再次登入此應用程式以重新連接您的 Facebook 帳戶。"; - -/* The title of the label to start attempting error recovery */ -"ErrorRecovery.OK" = "確定"; - -/* The fallback message to display to retry transient errors */ -"ErrorRecovery.Transient.Suggestion" = "伺服器暫時忙碌中,請再試一次。"; - -/* The label for the FBSDKLikeButton when the object is not currently liked. */ -"LikeButton.Like" = "讚好"; - -/* The label for the FBSDKLikeButton when the object is currently liked. */ -"LikeButton.Liked" = "已讚好"; - -/* The label for the FBSDKLoginButton action sheet to cancel logging out */ -"LoginButton.CancelLogout" = "取消"; - -/* The label for the FBSDKLoginButton action sheet to confirm logging out */ -"LoginButton.ConfirmLogOut" = "登出"; - -/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ -"LoginButton.LoggedIn" = "使用 Facebook 登入"; - -/* The format string for the FBSDKLoginButton label when the user is logged in */ -"LoginButton.LoggedInAs" = "以 %@ 身分登入"; - -/* The short label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogIn" = "登入"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInContinue" = "繼續使用 Facebook"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInLong" = "使用 Facebook 登入"; - -/* The label for the FBSDKLoginButton when the user is currently logged in */ -"LoginButton.LogOut" = "登出"; - -/* The user facing error message when the app slider has been disabled and login fails. */ -"LoginError.SystemAccount.Disabled" = "沒有獲得 Facebook 帳戶的存取授權。確認裝置設定。"; - -/* The user facing error message when the Accounts framework encounters a network error. */ -"LoginError.SystemAccount.Network" = "無法與 Facebook 連線。請檢查網絡連線,然後再試一次。"; - -/* The user facing error message when the device Facebook account password is incorrect and login fails. */ -"LoginError.SystemAccount.PasswordChange" = "您的 Facebook 密碼已經變更。要確認密碼,請開啟設定 > Facebook,然後點按您的名稱。"; - -/* The user facing error message when the device Facebook account is unavailable and login fails. */ -"LoginError.SystemAccount.Unavailable" = "Facebook 帳戶尚未在此裝置上設定。"; - -/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ -"LoginError.SystemAccount.UnconfirmedUser" = "您的帳戶尚未確認。請登入 www.facebook.com 並依據指示操作。"; - -/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ -"LoginError.SystemAccount.UserCheckpointed" = "您現時無法登入應用程式。請登入 www.facebook.com 並依據指示操作。"; - -/* The message of the FBSDKLoginTooltipView */ -"LoginTooltip.Message" = "控制權在您 - 選擇您要與應用程式分享的資訊。"; - -/* Title of the web dialog that prompts the user to log in to Facebook. */ -"LoginWeb.LogInTitle" = "登入"; - -/* The label for FBSDKSendButton */ -"SendButton.Send" = "傳送"; - -/* The label for FBSDKShareButton */ -"ShareButton.Share" = "分享"; - -/* Prompts a person if this is their current account */ -"SmartLogin.NotYou" = "這不是您?"; - -/* Text on a button that a person presses to confirm that they are finished with the login experience */ -"SmartLogin.ConfirmationTitle" = "確認登入"; - -/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ -"SmartLogin.Continue" = "以%@的身分繼續"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/zh_Hant_TW.lproj/FacebookSDK.strings b/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/zh_Hant_TW.lproj/FacebookSDK.strings deleted file mode 100644 index f02b0c86de..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/FacebookSDKStrings.bundle/Resources/zh_Hant_TW.lproj/FacebookSDK.strings +++ /dev/null @@ -1,92 +0,0 @@ -/* Prompts a person to go to the URL listed to enter the confirmation code that is presented to them above the given string. */ -"DeviceLogin.LogInPrompt" = "請前往 %@ 並輸入上方顯示的代碼。"; - -/* Prompts a person that the next thing they need to do to finish connecting their Smart TV and Facebook application is to navigate to their Facebook application on their mobile device and look through their notifications for a message about the connection being formed */ -"DeviceLogin.SmartLogInPrompt" = "若要連結帳號,請從行動裝置開啟 Facebook 應用程式,並查看通知。"; - -/* Displayed as a separator between two options. First option is on a line above this, and second option is below */ -"DeviceLogin.SmartLogInOrLabel" = "- 或 -"; - -/* The title of the label to dismiss the alert when presenting user facing error messages */ -"ErrorRecovery.Alert.OK" = "是"; - -/* The title of the label to decline attempting error recovery */ -"ErrorRecovery.Cancel" = "取消"; - -/* The fallback message to display to recover invalidated tokens */ -"ErrorRecovery.Login.Suggestion" = "請重新登入此應用程式以重新連結您的 Facebook 帳號。"; - -/* The title of the label to start attempting error recovery */ -"ErrorRecovery.OK" = "是"; - -/* The fallback message to display to retry transient errors */ -"ErrorRecovery.Transient.Suggestion" = "伺服器暫時忙碌中,請再試一次。"; - -/* The label for the FBSDKLikeButton when the object is not currently liked. */ -"LikeButton.Like" = "讚"; - -/* The label for the FBSDKLikeButton when the object is currently liked. */ -"LikeButton.Liked" = "說讚"; - -/* The label for the FBSDKLoginButton action sheet to cancel logging out */ -"LoginButton.CancelLogout" = "取消"; - -/* The label for the FBSDKLoginButton action sheet to confirm logging out */ -"LoginButton.ConfirmLogOut" = "登出"; - -/* The fallback string for the FBSDKLoginButton label when the user name is not available yet */ -"LoginButton.LoggedIn" = "已使用 Facebook 登入"; - -/* The format string for the FBSDKLoginButton label when the user is logged in */ -"LoginButton.LoggedInAs" = "以 %@ 身分登入"; - -/* The short label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogIn" = "登入"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInContinue" = "繼續使用 Facebook 帳號"; - -/* The long label for the FBSDKLoginButton when the user is currently logged out */ -"LoginButton.LogInLong" = "使用 Facebook 登入"; - -/* The label for the FBSDKLoginButton when the user is currently logged in */ -"LoginButton.LogOut" = "登出"; - -/* The user facing error message when the app slider has been disabled and login fails. */ -"LoginError.SystemAccount.Disabled" = "尚未取得授權,無法存取 Facebook 帳號。請確認裝置設定。"; - -/* The user facing error message when the Accounts framework encounters a network error. */ -"LoginError.SystemAccount.Network" = "無法連線到 Facebook。請檢查網路連線,然後再試一次。"; - -/* The user facing error message when the device Facebook account password is incorrect and login fails. */ -"LoginError.SystemAccount.PasswordChange" = "您的 Facebook 密碼已經更改。若要確認您的密碼,請開啟「設定」>「Facebook」,然後點按您的姓名。"; - -/* The user facing error message when the device Facebook account is unavailable and login fails. */ -"LoginError.SystemAccount.Unavailable" = "尚未透過裝置設定 Facebook 帳號。"; - -/* The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed. */ -"LoginError.SystemAccount.UnconfirmedUser" = "您的帳號尚未確認。請登入 www.facebook.com,然後按照指示操作。"; - -/* The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed. */ -"LoginError.SystemAccount.UserCheckpointed" = "您目前無法登入應用程式。請登入 www.facebook.com,然後按照指示操作。"; - -/* The message of the FBSDKLoginTooltipView */ -"LoginTooltip.Message" = "您可以全盤掌控!選擇您想和應用程式分享的資訊內容。"; - -/* Title of the web dialog that prompts the user to log in to Facebook. */ -"LoginWeb.LogInTitle" = "登入"; - -/* The label for FBSDKSendButton */ -"SendButton.Send" = "傳送"; - -/* The label for FBSDKShareButton */ -"ShareButton.Share" = "分享"; - -/* Prompts a person if this is their current account */ -"SmartLogin.NotYou" = "這不是您?"; - -/* Text on a button that a person presses to confirm that they are finished with the login experience */ -"SmartLogin.ConfirmationTitle" = "確認登入"; - -/* Text on a button that lets a person continue with their name linked to a Facebook account (Name = %@) */ -"SmartLogin.Continue" = "以 %@ 身分繼續"; diff --git a/iphone/Maps/Pods/FBSDKCoreKit/LICENSE b/iphone/Maps/Pods/FBSDKCoreKit/LICENSE deleted file mode 100644 index bdb9fc54be..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/LICENSE +++ /dev/null @@ -1,17 +0,0 @@ -Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - -You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -copy, modify, and distribute this software in source code or binary form for use -in connection with the web services and APIs provided by Facebook. - -As with any software that integrates with the Facebook platform, your use of -this software is subject to the Facebook Developer Principles and Policies -[http://developers.facebook.com/policy/]. This copyright 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/iphone/Maps/Pods/FBSDKCoreKit/README.md b/iphone/Maps/Pods/FBSDKCoreKit/README.md deleted file mode 100644 index a200d7a196..0000000000 --- a/iphone/Maps/Pods/FBSDKCoreKit/README.md +++ /dev/null @@ -1,91 +0,0 @@ -# Facebook SDK for iOS - -[![Platforms](https://img.shields.io/cocoapods/p/FBSDKCoreKit.svg)](https://cocoapods.org/pods/FBSDKCoreKit) -[![Build Status](https://travis-ci.org/facebook/facebook-ios-sdk.svg?branch=master)](https://travis-ci.org/facebook/facebook-ios-sdk) - -[![CocoaPods](https://img.shields.io/cocoapods/v/FBSDKCoreKit.svg)](https://cocoapods.org/pods/FBSDKCoreKit) -[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) - -This open-source library allows you to integrate Facebook into your iOS app. - -Learn more about the provided samples, documentation, integrating the SDK into your app, accessing source code, and more -at https://developers.facebook.com/docs/ios - -NOTE: By default, the Facebook SDK for iOS is installed in ~/Documents/FacebookSDK - -## TRY IT OUT - -### Swift Package Manager (available Xcode 11.2 and forward) - -1. In Xcode, select File > Swift Packages > Add Package Dependency. -2. Follow the prompts using the URL for this repository and a minimum semantic version of v5.10.0 -3. Check-out the tutorials available online at: -4. Start coding! Visit for tutorials and reference documentation. - -**Note:** - -If you explicitly **DO NOT** want to include Swift, import `FBSDKCoreKit` `FBSDKLoginKit` and `FBSDKShareKit` - -For projects that include Swift, use `FacebookCore`, `FacebookLogin`, and `FacebookShare` - -### CocoaPods - -1. If you explicitly **DO NOT** want to include Swift files, add the following to your `Podfile`: - - pod 'FBSDKCoreKit' - pod 'FBSDKLoginKit' - pod 'FBSDKShareKit' - - If you would like to use versions of the pods that include Swift, add the following to your `Podfile`: - - pod 'FBSDKCoreKit/Swift' - pod 'FBSDKLoginKit/Swift' - pod 'FBSDKShareKit/Swift' - -2. Test your install by adding `import FBSDKCoreKit` to your `AppDelegate` -3. Check-out the tutorials available online at: -4. Start coding! Visit for tutorials and reference documentation. - -## FEATURES - -- Login - -- Sharing - -- App Links - -- Graph API - -- Analytics - - -## GIVE FEEDBACK - -Please report bugs or issues to our designated developer support team -- -- as this will help us resolve them more quickly. - -You can also visit our [Facebook Developer Community Forum](https://developers.facebook.com/community/), -join the [Facebook Developers Group on Facebook](https://www.facebook.com/groups/fbdevelopers/), -ask questions on [Stack Overflow](http://facebook.stackoverflow.com), -or open an issue in this repository. - -## LICENSE - -See the [LICENSE](LICENSE) file. - -## Security Policy - -See the [SECURITY POLICY](SECURITY.md) for more info on our bug bounty program. - -## DEVELOPER TERMS - -- By enabling Facebook integrations, including through this SDK, you can share information with Facebook, including - information about people’s use of your app. Facebook will use information received in accordance with our - [Data Use Policy](https://www.facebook.com/about/privacy/), including to provide you with insights about the - effectiveness of your ads and the use of your app. These integrations also enable us and our partners to serve ads on - and off Facebook. -- You may limit your sharing of information with us by updating the Insights control in the developer tool - `https://developers.facebook.com/apps/{app_id}/settings/advanced`. -- If you use a Facebook integration, including to share information with us, you agree and confirm that you have - provided appropriate and sufficiently prominent notice to and obtained the appropriate consent from your users - regarding such collection, use, and disclosure (including, at a minimum, through your privacy policy). You further - agree that you will not share information with us about children under the age of 13. -- You agree to comply with all applicable laws and regulations and also agree to our Terms - , including our Platform Policies .and - Advertising Guidelines, as applicable . - -By using the Facebook SDK for iOS you agree to these terms. diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginCodeInfo.h b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginCodeInfo.h deleted file mode 100644 index 36665b96ae..0000000000 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginCodeInfo.h +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -NS_ASSUME_NONNULL_BEGIN - -/*! - @abstract Describes the initial response when starting the device login flow. - @discussion This is used by `FBSDKDeviceLoginManager`. - */ -NS_SWIFT_NAME(DeviceLoginCodeInfo) -@interface FBSDKDeviceLoginCodeInfo : NSObject - -/*! - @abstract There is no public initializer. - */ -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; - -/*! - @abstract the unique id for this login flow. -*/ -@property (nonatomic, copy, readonly) NSString *identifier; - -/*! - @abstract the short "user_code" that should be presented to the user. -*/ -@property (nonatomic, copy, readonly) NSString *loginCode; - -/*! - @abstract the verification URL. -*/ -@property (nonatomic, copy, readonly) NSURL *verificationURL; - -/*! - @abstract the expiration date. -*/ -@property (nonatomic, copy, readonly) NSDate *expirationDate; - -/*! - @abstract the polling interval -*/ -@property (nonatomic, assign, readonly) NSUInteger pollingInterval; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginCodeInfo.m b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginCodeInfo.m deleted file mode 100644 index 4f22fce519..0000000000 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginCodeInfo.m +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKDeviceLoginCodeInfo+Internal.h" - -@implementation FBSDKDeviceLoginCodeInfo - -- (instancetype)initWithIdentifier:(NSString *)identifier - loginCode:(NSString *)loginCode - verificationURL:(NSURL *)verificationURL - expirationDate:(NSDate *)expirationDate - pollingInterval:(NSUInteger)pollingInterval -{ - if ((self = [super init])) { - _identifier = [identifier copy]; - _loginCode = [loginCode copy]; - _verificationURL = [verificationURL copy]; - _expirationDate = [expirationDate copy]; - _pollingInterval = pollingInterval; - } - return self; -} -@end diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginManager.h b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginManager.h deleted file mode 100644 index b4e483ab42..0000000000 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginManager.h +++ /dev/null @@ -1,108 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -#import "FBSDKDeviceLoginCodeInfo.h" -#import "FBSDKDeviceLoginManagerResult.h" - -NS_ASSUME_NONNULL_BEGIN - -@class FBSDKDeviceLoginManager; - -/*! - @abstract A delegate for `FBSDKDeviceLoginManager`. - */ -NS_SWIFT_NAME(DeviceLoginManagerDelegate) -@protocol FBSDKDeviceLoginManagerDelegate - -/*! - @abstract Indicates the device login flow has started. You should parse `codeInfo` to - present the code to the user to enter. - @param loginManager the login manager instance. - @param codeInfo the code info data. - */ -- (void)deviceLoginManager:(FBSDKDeviceLoginManager *)loginManager - startedWithCodeInfo:(FBSDKDeviceLoginCodeInfo *)codeInfo; - -/*! - @abstract Indicates the device login flow has finished. - @param loginManager the login manager instance. - @param result the results of the login flow. - @param error the error, if available. - @discussion The flow can be finished if the user completed the flow, cancelled, or if the code has expired. - */ -- (void)deviceLoginManager:(FBSDKDeviceLoginManager *)loginManager - completedWithResult:(nullable FBSDKDeviceLoginManagerResult *)result - error:(nullable NSError *)error; - -@end - -/*! - @abstract Use this class to perform a device login flow. - @discussion The device login flow starts by requesting a code from the device login API. - This class informs the delegate when this code is received. You should then present the - code to the user to enter. In the meantime, this class polls the device login API - periodically and informs the delegate of the results. - - See [Facebook Device Login](https://developers.facebook.com/docs/facebook-login/for-devices). - */ -NS_SWIFT_NAME(DeviceLoginManager) -@interface FBSDKDeviceLoginManager : NSObject - -/*! - @abstract Initializes a new instance. - @param permissions permissions to request. - */ -- (instancetype)initWithPermissions:(NSArray *)permissions - enableSmartLogin:(BOOL)enableSmartLogin -NS_DESIGNATED_INITIALIZER; - -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; - -/*! - @abstract the delegate. - */ -@property (nonatomic, weak) id delegate; - -/*! - @abstract the requested permissions. - */ -@property (nonatomic, copy, readonly) NSArray *permissions; - -/*! - @abstract the optional URL to redirect the user to after they complete the login. - @discussion the URL must be configured in your App Settings -> Advanced -> OAuth Redirect URIs - */ -@property (nullable, nonatomic, copy) NSURL *redirectURL; - -/*! - @abstract Starts the device login flow - @discussion This instance will retain self until the flow is finished or cancelled. - */ -- (void)start; - -/*! - @abstract Attempts to cancel the device login flow. - */ -- (void)cancel; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginManager.m b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginManager.m deleted file mode 100644 index 653345b689..0000000000 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginManager.m +++ /dev/null @@ -1,243 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKDeviceLoginManager.h" -#import "FBSDKDeviceLoginManagerResult+Internal.h" - -#ifdef FBSDKCOCOAPODS -#import -#import -#else -#import "FBSDKCoreKit+Internal.h" -#endif - -#import "FBSDKDeviceLoginCodeInfo+Internal.h" -#import "FBSDKLoginConstants.h" - -static NSMutableArray *g_loginManagerInstances; - -@implementation FBSDKDeviceLoginManager { - FBSDKDeviceLoginCodeInfo *_codeInfo; - BOOL _isCancelled; - NSNetService * _loginAdvertisementService; - BOOL _isSmartLoginEnabled; -} - -+ (void)initialize -{ - if (self == [FBSDKDeviceLoginManager class]) { - g_loginManagerInstances = [NSMutableArray array]; - } -} - -- (instancetype)initWithPermissions:(NSArray *)permissions enableSmartLogin:(BOOL)enableSmartLogin -{ - if ((self = [super init])) { - _permissions = [permissions copy]; - _isSmartLoginEnabled = enableSmartLogin; - } - return self; -} - -- (void)start -{ - [FBSDKInternalUtility validateAppID]; - [g_loginManagerInstances addObject:self]; - - NSDictionary *parameters = @{ - @"scope": [self.permissions componentsJoinedByString:@","] ?: @"", - @"redirect_uri": self.redirectURL.absoluteString ?: @"", - FBSDK_DEVICE_INFO_PARAM: [FBSDKDeviceRequestsHelper getDeviceInfo], - }; - FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:@"device/login" - parameters:parameters - tokenString:[FBSDKInternalUtility validateRequiredClientAccessToken] - HTTPMethod:@"POST" - flags:FBSDKGraphRequestFlagNone]; - [request setGraphErrorRecoveryDisabled:YES]; - [request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { - if (error) { - [self _processError:error]; - return; - } - - self->_codeInfo = [[FBSDKDeviceLoginCodeInfo alloc] - initWithIdentifier:result[@"code"] - loginCode:result[@"user_code"] - verificationURL:[NSURL URLWithString:result[@"verification_uri"]] - expirationDate:[[NSDate date] dateByAddingTimeInterval:[result[@"expires_in"] doubleValue]] - pollingInterval:[result[@"interval"] integerValue]]; - - if (self->_isSmartLoginEnabled) { - [FBSDKDeviceRequestsHelper startAdvertisementService:self->_codeInfo.loginCode - withDelegate:self - ]; - } - - [self.delegate deviceLoginManager:self startedWithCodeInfo:self->_codeInfo]; - [self _schedulePoll:self->_codeInfo.pollingInterval]; - }]; - } - -- (void)cancel -{ - [FBSDKDeviceRequestsHelper cleanUpAdvertisementService:self]; - _isCancelled = YES; - [g_loginManagerInstances removeObject:self]; -} - -#pragma mark - Private impl - -- (void)_notifyError:(NSError *)error -{ - [FBSDKDeviceRequestsHelper cleanUpAdvertisementService:self]; - [self.delegate deviceLoginManager:self - completedWithResult:nil - error:error]; - [g_loginManagerInstances removeObject:self]; -} - -- (void)_notifyToken:(NSString *)tokenString -{ - [FBSDKDeviceRequestsHelper cleanUpAdvertisementService:self]; - void(^completeWithResult)(FBSDKDeviceLoginManagerResult *) = ^(FBSDKDeviceLoginManagerResult *result) { - [self.delegate deviceLoginManager:self completedWithResult:result error:nil]; - [g_loginManagerInstances removeObject:self]; - }; - - if (tokenString) { - FBSDKGraphRequest *permissionsRequest = - [[FBSDKGraphRequest alloc] initWithGraphPath:@"me" - parameters:@{@"fields": @"id,permissions"} - tokenString:tokenString - HTTPMethod:@"GET" - flags:FBSDKGraphRequestFlagDisableErrorRecovery]; - [permissionsRequest startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id permissionRawResult, NSError *error) { - NSString *userID = permissionRawResult[@"id"]; - NSDictionary *permissionResult = permissionRawResult[@"permissions"]; - if (error || - !userID || - !permissionResult) { -#if TARGET_TV_OS - NSError *wrappedError = [FBSDKError errorWithDomain:FBSDKShareErrorDomain - code:FBSDKErrorTVOSUnknown - message:@"Unable to fetch permissions for token" - underlyingError:error]; -#else - NSError *wrappedError = [FBSDKError errorWithDomain:FBSDKLoginErrorDomain - code:FBSDKErrorUnknown - message:@"Unable to fetch permissions for token" - underlyingError:error]; -#endif - [self _notifyError:wrappedError]; - } else { - NSMutableSet *permissions = [NSMutableSet set]; - NSMutableSet *declinedPermissions = [NSMutableSet set]; - NSMutableSet *expiredPermissions = [NSMutableSet set]; - - [FBSDKInternalUtility extractPermissionsFromResponse:permissionResult - grantedPermissions:permissions - declinedPermissions:declinedPermissions - expiredPermissions:expiredPermissions]; - FBSDKAccessToken *accessToken = [[FBSDKAccessToken alloc] initWithTokenString:tokenString - permissions:permissions.allObjects - declinedPermissions:declinedPermissions.allObjects - expiredPermissions:expiredPermissions.allObjects - appID:[FBSDKSettings appID] - userID:userID - expirationDate:nil - refreshDate:nil - dataAccessExpirationDate:nil - graphDomain:nil]; - FBSDKDeviceLoginManagerResult *result = [[FBSDKDeviceLoginManagerResult alloc] initWithToken:accessToken - isCancelled:NO]; - completeWithResult(result); - } - }]; - } else { - _isCancelled = YES; - FBSDKDeviceLoginManagerResult *result = [[FBSDKDeviceLoginManagerResult alloc] initWithToken:nil isCancelled:YES]; - completeWithResult(result); - } -} - -- (void)_processError:(NSError *)error -{ - FBSDKDeviceLoginError code = [error.userInfo[FBSDKGraphRequestErrorGraphErrorSubcodeKey] unsignedIntegerValue]; - switch (code) { - case FBSDKDeviceLoginErrorAuthorizationPending: - [self _schedulePoll:_codeInfo.pollingInterval]; - break; - case FBSDKDeviceLoginErrorCodeExpired: - case FBSDKDeviceLoginErrorAuthorizationDeclined: - [self _notifyToken:nil]; - break; - case FBSDKDeviceLoginErrorExcessivePolling: - [self _schedulePoll:_codeInfo.pollingInterval * 2]; - default: - [self _notifyError:error]; - break; - } -} - -- (void)_schedulePoll:(NSUInteger)interval -{ - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(interval * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - if (self->_isCancelled) { - return; - } - - NSDictionary *parameters = @{ @"code": self->_codeInfo.identifier }; - FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:@"device/login_status" - parameters:parameters - tokenString:[FBSDKInternalUtility validateRequiredClientAccessToken] - HTTPMethod:@"POST" - flags:FBSDKGraphRequestFlagNone]; - [request setGraphErrorRecoveryDisabled:YES]; - [request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { - if (self->_isCancelled) { - return; - } - if (error) { - [self _processError:error]; - } else { - NSString *tokenString = result[@"access_token"]; - if (tokenString) { - [self _notifyToken:tokenString]; - } else { - NSError *unknownError = [FBSDKError errorWithDomain:FBSDKLoginErrorDomain - code:FBSDKErrorUnknown - message:@"Device Login poll failed. No token nor error was found."]; - [self _notifyError:unknownError]; - } - } - }]; - }); -} - -- (void)netService:(NSNetService *)sender - didNotPublish:(NSDictionary *)errorDict -{ - // Only cleanup if the publish error is from our advertising service - if ([FBSDKDeviceRequestsHelper isDelegate:self forAdvertisementService:sender]) - { - [FBSDKDeviceRequestsHelper cleanUpAdvertisementService:self]; - } -} - -@end diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginManagerResult.h b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginManagerResult.h deleted file mode 100644 index 3124c0fae6..0000000000 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginManagerResult.h +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -#ifdef FBSDKCOCOAPODS -#import -#endif - -@class FBSDKAccessToken; - -NS_ASSUME_NONNULL_BEGIN - -/*! - @abstract Represents the results of the a device login flow. - @discussion This is used by `FBSDKDeviceLoginManager`. - */ -NS_SWIFT_NAME(DeviceLoginManagerResult) -@interface FBSDKDeviceLoginManagerResult : NSObject - -/*! - @abstract There is no public initializer. - */ -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; - -/*! - @abstract The token. - */ -@property (nullable, nonatomic, strong, readonly) FBSDKAccessToken *accessToken; - -/*! - @abstract Indicates if the login was cancelled by the user, or if the device - login code has expired. - */ -@property (nonatomic, assign, readonly, getter=isCancelled) BOOL cancelled; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginManagerResult.m b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginManagerResult.m deleted file mode 100644 index a95f1cfe46..0000000000 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginManagerResult.m +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKDeviceLoginManagerResult+Internal.h" - -@implementation FBSDKDeviceLoginManagerResult - -- (instancetype)initWithToken:(FBSDKAccessToken *)token - isCancelled:(BOOL)cancelled -{ - if ((self = [super init])) { - _accessToken = token; - _cancelled = cancelled; - } - return self; -} - -@end diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginButton.h b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginButton.h deleted file mode 100644 index e181b7a03e..0000000000 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginButton.h +++ /dev/null @@ -1,150 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -#import "TargetConditionals.h" - -#if TARGET_OS_TV - -@interface FBLoginButton : UIView - -@property (copy, nonatomic) NSArray *permissions; - -@end - -#else - -#if defined BUCK || defined FBSDKCOCOAPODS || defined __cplusplus -#import -#else -@import FBSDKCoreKit; -#endif - -#import "FBSDKLoginManager.h" -#import "FBSDKTooltipView.h" - -NS_ASSUME_NONNULL_BEGIN - -@protocol FBSDKLoginButtonDelegate; - -/** - NS_ENUM(NSUInteger, FBSDKLoginButtonTooltipBehavior) - Indicates the desired login tooltip behavior. - */ -typedef NS_ENUM(NSUInteger, FBSDKLoginButtonTooltipBehavior) -{ - /** The default behavior. The tooltip will only be displayed if - the app is eligible (determined by possible server round trip) */ - FBSDKLoginButtonTooltipBehaviorAutomatic = 0, - /** Force display of the tooltip (typically for UI testing) */ - FBSDKLoginButtonTooltipBehaviorForceDisplay = 1, - /** Force disable. In this case you can still exert more refined - control by manually constructing a `FBSDKLoginTooltipView` instance. */ - FBSDKLoginButtonTooltipBehaviorDisable = 2 -} NS_SWIFT_NAME(FBLoginButton.TooltipBehavior); - -/** - A button that initiates a log in or log out flow upon tapping. - - `FBSDKLoginButton` works with `[FBSDKAccessToken currentAccessToken]` to - determine what to display, and automatically starts authentication when tapped (i.e., - you do not need to manually subscribe action targets). - - Like `FBSDKLoginManager`, you should make sure your app delegate is connected to - `FBSDKApplicationDelegate` in order for the button's delegate to receive messages. - - `FBSDKLoginButton` has a fixed height of @c 30 pixels, but you may change the width. `initWithFrame:CGRectZero` - will size the button to its minimum frame. -*/ -NS_SWIFT_NAME(FBLoginButton) -@interface FBSDKLoginButton : FBSDKButton - -/** - The default audience to use, if publish permissions are requested at login time. - */ -@property (assign, nonatomic) FBSDKDefaultAudience defaultAudience; -/** - Gets or sets the delegate. - */ -@property (weak, nonatomic) IBOutlet id delegate; -/** - Gets or sets the login behavior to use - */ -@property (assign, nonatomic) FBSDKLoginBehavior loginBehavior -DEPRECATED_MSG_ATTRIBUTE("All login flows utilize the browser. This will be removed in the next major release"); - -/*! - @abstract The permissions to request. - @discussion To provide the best experience, you should minimize the number of permissions you request, and only ask for them when needed. - For example, do not ask for "user_location" until you the information is actually used by the app. - - Note this is converted to NSSet and is only - an NSArray for the convenience of literal syntax. - - See [the permissions guide]( https://developers.facebook.com/docs/facebook-login/permissions/ ) for more details. - */ -@property (copy, nonatomic) NSArray *permissions; -/** - Gets or sets the desired tooltip behavior. - */ -@property (assign, nonatomic) FBSDKLoginButtonTooltipBehavior tooltipBehavior; -/** - Gets or sets the desired tooltip color style. - */ -@property (assign, nonatomic) FBSDKTooltipColorStyle tooltipColorStyle; - -@end - -/** - @protocol - A delegate for `FBSDKLoginButton` - */ -NS_SWIFT_NAME(LoginButtonDelegate) -@protocol FBSDKLoginButtonDelegate - -@required -/** - Sent to the delegate when the button was used to login. - @param loginButton the sender - @param result The results of the login - @param error The error (if any) from the login - */ -- (void)loginButton:(FBSDKLoginButton *)loginButton -didCompleteWithResult:(nullable FBSDKLoginManagerLoginResult *)result - error:(nullable NSError *)error; - -/** - Sent to the delegate when the button was used to logout. - @param loginButton The button that was clicked. -*/ -- (void)loginButtonDidLogOut:(FBSDKLoginButton *)loginButton; - -@optional -/** - Sent to the delegate when the button is about to login. - @param loginButton the sender - @return YES if the login should be allowed to proceed, NO otherwise - */ -- (BOOL)loginButtonWillLogin:(FBSDKLoginButton *)loginButton; - -@end - -NS_ASSUME_NONNULL_END - -#endif diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginButton.m b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginButton.m deleted file mode 100644 index f75c55e297..0000000000 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginButton.m +++ /dev/null @@ -1,340 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKLoginButton.h" - -#ifdef FBSDKCOCOAPODS -#import -#else -#import "FBSDKCoreKit+Internal.h" -#endif - -#import "FBSDKLoginTooltipView.h" - -static const CGFloat kFBLogoSize = 16.0; -static const CGFloat kFBLogoLeftMargin = 6.0; -static const CGFloat kButtonHeight = 28.0; -static const CGFloat kRightMargin = 8.0; -static const CGFloat kPaddingBetweenLogoTitle = 8.0; - -@interface FBSDKLoginButton() -@end - -@implementation FBSDKLoginButton -{ - BOOL _hasShownTooltipBubble; - FBSDKLoginManager *_loginManager; - NSString *_userID; - NSString *_userName; -} - -#pragma mark - Object Lifecycle - -- (void)dealloc -{ - [[NSNotificationCenter defaultCenter] removeObserver:self]; -} - -#pragma mark - Properties - -- (FBSDKDefaultAudience)defaultAudience -{ - return _loginManager.defaultAudience; -} - -- (void)setDefaultAudience:(FBSDKDefaultAudience)defaultAudience -{ - _loginManager.defaultAudience = defaultAudience; -} - -- (FBSDKLoginBehavior)loginBehavior -{ - return _loginManager.loginBehavior; -} - -- (void)setLoginBehavior:(FBSDKLoginBehavior)loginBehavior -{ - _loginManager.loginBehavior = loginBehavior; -} - -- (UIFont *)defaultFont -{ - CGFloat size = 15; - - if (@available(iOS 8.2, *)) { - return [UIFont systemFontOfSize:size weight:UIFontWeightSemibold]; - } else { - return [UIFont boldSystemFontOfSize:size]; - } -} - -#pragma mark - UIView - -- (void)didMoveToWindow -{ - [super didMoveToWindow]; - - if (self.window && - ((self.tooltipBehavior == FBSDKLoginButtonTooltipBehaviorForceDisplay) || !_hasShownTooltipBubble)) { - [self performSelector:@selector(_showTooltipIfNeeded) withObject:nil afterDelay:0]; - _hasShownTooltipBubble = YES; - } -} - -#pragma mark - Layout - -- (CGRect)imageRectForContentRect:(CGRect)contentRect -{ - CGFloat centerY = CGRectGetMidY(contentRect); - CGFloat y = centerY - (kFBLogoSize / 2.0); - return CGRectMake(kFBLogoLeftMargin, y, kFBLogoSize, kFBLogoSize); -} - -- (CGRect)titleRectForContentRect:(CGRect)contentRect -{ - if (self.hidden || CGRectIsEmpty(self.bounds)) { - return CGRectZero; - } - CGRect imageRect = [self imageRectForContentRect:contentRect]; - CGFloat titleX = CGRectGetMaxX(imageRect) + kPaddingBetweenLogoTitle; - CGRect titleRect = CGRectMake(titleX, 0, CGRectGetWidth(contentRect) - titleX - kRightMargin, CGRectGetHeight(contentRect)); - - return titleRect; -} - -- (void)layoutSubviews -{ - CGSize size = self.bounds.size; - CGSize longTitleSize = [self sizeThatFits:size title:[self _longLogInTitle]]; - NSString *title = (longTitleSize.width <= size.width ? - [self _longLogInTitle] : - [self _shortLogInTitle]); - if (![title isEqualToString:[self titleForState:UIControlStateNormal]]) { - [self setTitle:title forState:UIControlStateNormal]; - } - - [super layoutSubviews]; -} - -- (CGSize)sizeThatFits:(CGSize)size -{ - if (self.hidden) { - return CGSizeZero; - } - UIFont *font = self.titleLabel.font; - - CGSize selectedSize = FBSDKTextSize([self _logOutTitle], font, size, self.titleLabel.lineBreakMode); - CGSize normalSize = FBSDKTextSize([self _longLogInTitle], font, size, self.titleLabel.lineBreakMode); - if (normalSize.width > size.width) { - normalSize = FBSDKTextSize([self _shortLogInTitle], font, size, self.titleLabel.lineBreakMode); - } - - CGFloat titleWidth = MAX(normalSize.width, selectedSize.width); - CGFloat buttonWidth = kFBLogoLeftMargin + kFBLogoSize + kPaddingBetweenLogoTitle + titleWidth + kRightMargin; - return CGSizeMake(buttonWidth, kButtonHeight); -} - -#pragma mark - FBSDKButtonImpressionTracking - -- (NSDictionary *)analyticsParameters -{ - return nil; -} - -- (NSString *)impressionTrackingEventName -{ - return FBSDKAppEventNameFBSDKLoginButtonImpression; -} - -- (NSString *)impressionTrackingIdentifier -{ - return @"login"; -} - -#pragma mark - FBSDKButton - -- (void)configureButton -{ - _loginManager = [[FBSDKLoginManager alloc] init]; - - NSString *logInTitle = [self _shortLogInTitle]; - NSString *logOutTitle = [self _logOutTitle]; - - [self configureWithIcon:nil - title:logInTitle - backgroundColor:self.backgroundColor - highlightedColor:nil - selectedTitle:logOutTitle - selectedIcon:nil - selectedColor:self.backgroundColor - selectedHighlightedColor:nil]; - self.titleLabel.textAlignment = NSTextAlignmentCenter; - [self addConstraint:[NSLayoutConstraint constraintWithItem:self - attribute:NSLayoutAttributeHeight - relatedBy:NSLayoutRelationEqual - toItem:nil - attribute:NSLayoutAttributeNotAnAttribute - multiplier:1 - constant:kButtonHeight]]; - [self _updateContent]; - - [self addTarget:self action:@selector(_buttonPressed:) forControlEvents:UIControlEventTouchUpInside]; - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(_accessTokenDidChangeNotification:) - name:FBSDKAccessTokenDidChangeNotification - object:nil]; -} - -#pragma mark - Helper Methods - -- (void)_accessTokenDidChangeNotification:(NSNotification *)notification -{ - if (notification.userInfo[FBSDKAccessTokenDidChangeUserIDKey] || notification.userInfo[FBSDKAccessTokenDidExpireKey]) { - [self _updateContent]; - } -} - -- (void)_buttonPressed:(id)sender -{ - [self logTapEventWithEventName:FBSDKAppEventNameFBSDKLoginButtonDidTap parameters:self.analyticsParameters]; - if (FBSDKAccessToken.isCurrentAccessTokenActive) { - NSString *title = nil; - - if (_userName) { - NSString *localizedFormatString = - NSLocalizedStringWithDefaultValue(@"LoginButton.LoggedInAs", @"FacebookSDK", [FBSDKInternalUtility bundleForStrings], - @"Logged in as %@", - @"The format string for the FBSDKLoginButton label when the user is logged in"); - title = [NSString localizedStringWithFormat:localizedFormatString, _userName]; - } else { - NSString *localizedLoggedIn = - NSLocalizedStringWithDefaultValue(@"LoginButton.LoggedIn", @"FacebookSDK", [FBSDKInternalUtility bundleForStrings], - @"Logged in using Facebook", - @"The fallback string for the FBSDKLoginButton label when the user name is not available yet"); - title = localizedLoggedIn; - } - NSString *cancelTitle = - NSLocalizedStringWithDefaultValue(@"LoginButton.CancelLogout", @"FacebookSDK", [FBSDKInternalUtility bundleForStrings], - @"Cancel", - @"The label for the FBSDKLoginButton action sheet to cancel logging out"); - NSString *logOutTitle = - NSLocalizedStringWithDefaultValue(@"LoginButton.ConfirmLogOut", @"FacebookSDK", [FBSDKInternalUtility bundleForStrings], - @"Log Out", - @"The label for the FBSDKLoginButton action sheet to confirm logging out"); - UIAlertController *alertController = [UIAlertController alertControllerWithTitle:title - message:nil - preferredStyle:UIAlertControllerStyleActionSheet]; - alertController.popoverPresentationController.sourceView = self; - alertController.popoverPresentationController.sourceRect = self.bounds; - UIAlertAction *cancel = [UIAlertAction actionWithTitle:cancelTitle - style:UIAlertActionStyleCancel - handler:nil]; - UIAlertAction *logout = [UIAlertAction actionWithTitle:logOutTitle - style:UIAlertActionStyleDestructive - handler:^(UIAlertAction * _Nonnull action) { - [self->_loginManager logOut]; - [self.delegate loginButtonDidLogOut:self]; - }]; - [alertController addAction:cancel]; - [alertController addAction:logout]; - UIViewController *topMostViewController = [FBSDKInternalUtility topMostViewController]; - [topMostViewController presentViewController:alertController - animated:YES - completion:nil]; - } else { - if ([self.delegate respondsToSelector:@selector(loginButtonWillLogin:)]) { - if (![self.delegate loginButtonWillLogin:self]) { - return; - } - } - - FBSDKLoginManagerLoginResultBlock handler = ^(FBSDKLoginManagerLoginResult *result, NSError *error) { - if ([self.delegate respondsToSelector:@selector(loginButton:didCompleteWithResult:error:)]) { - [self.delegate loginButton:self didCompleteWithResult:result error:error]; - } - }; - - [_loginManager logInWithPermissions:self.permissions - fromViewController:[FBSDKInternalUtility viewControllerForView:self] - handler:handler]; - - } -} - -- (NSString *)_logOutTitle -{ - return NSLocalizedStringWithDefaultValue(@"LoginButton.LogOut", @"FacebookSDK", [FBSDKInternalUtility bundleForStrings], - @"Log out", - @"The label for the FBSDKLoginButton when the user is currently logged in"); -} - -- (NSString *)_longLogInTitle -{ - return NSLocalizedStringWithDefaultValue(@"LoginButton.LogInContinue", @"FacebookSDK", [FBSDKInternalUtility bundleForStrings], - @"Continue with Facebook", - @"The long label for the FBSDKLoginButton when the user is currently logged out"); -} - -- (NSString *)_shortLogInTitle -{ - return NSLocalizedStringWithDefaultValue(@"LoginButton.LogIn", @"FacebookSDK", [FBSDKInternalUtility bundleForStrings], - @"Log in", - @"The short label for the FBSDKLoginButton when the user is currently logged out"); -} - -- (void)_showTooltipIfNeeded -{ - if ([FBSDKAccessToken currentAccessToken] || self.tooltipBehavior == FBSDKLoginButtonTooltipBehaviorDisable) { - return; - } else { - FBSDKLoginTooltipView *tooltipView = [[FBSDKLoginTooltipView alloc] init]; - tooltipView.colorStyle = self.tooltipColorStyle; - if (self.tooltipBehavior == FBSDKLoginButtonTooltipBehaviorForceDisplay) { - tooltipView.forceDisplay = YES; - } - [tooltipView presentFromView:self]; - } -} - -- (void)_updateContent -{ - BOOL accessTokenIsValid = FBSDKAccessToken.isCurrentAccessTokenActive; - self.selected = accessTokenIsValid; - if (accessTokenIsValid) { - if (![[FBSDKAccessToken currentAccessToken].userID isEqualToString:_userID]) { - FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:@"me?fields=id,name" - parameters:nil - flags:FBSDKGraphRequestFlagDisableErrorRecovery]; - [request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { - NSString *userID = [FBSDKTypeUtility stringValue:result[@"id"]]; - if (!error && [[FBSDKAccessToken currentAccessToken].userID isEqualToString:userID]) { - self->_userName = [FBSDKTypeUtility stringValue:result[@"name"]]; - self->_userID = userID; - } - }]; - } - } -} - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginConstants.h b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginConstants.h deleted file mode 100644 index 471bfdcab3..0000000000 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginConstants.h +++ /dev/null @@ -1,128 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -NS_ASSUME_NONNULL_BEGIN - -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 - -/** - The error domain for all errors from FBSDKLoginKit - - Error codes from the SDK in the range 300-399 are reserved for this domain. - */ -FOUNDATION_EXPORT NSErrorDomain const FBSDKLoginErrorDomain -NS_SWIFT_NAME(LoginErrorDomain); - -#else - -/** - The error domain for all errors from FBSDKLoginKit - - Error codes from the SDK in the range 300-399 are reserved for this domain. - */ -FOUNDATION_EXPORT NSString *const FBSDKLoginErrorDomain -NS_SWIFT_NAME(LoginErrorDomain); - -#endif - -#ifndef NS_ERROR_ENUM -#define NS_ERROR_ENUM(_domain, _name) \ -enum _name: NSInteger _name; \ -enum __attribute__((ns_error_domain(_domain))) _name: NSInteger -#endif - -/** - FBSDKLoginError - Error codes for FBSDKLoginErrorDomain. - */ -typedef NS_ERROR_ENUM(FBSDKLoginErrorDomain, FBSDKLoginError) -{ - /** - Reserved. - */ - FBSDKLoginErrorReserved = 300, - - /** - The error code for unknown errors. - */ - FBSDKLoginErrorUnknown, - - /** - The user's password has changed and must log in again - */ - FBSDKLoginErrorPasswordChanged, - - /** - The user must log in to their account on www.facebook.com to restore access - */ - FBSDKLoginErrorUserCheckpointed, - - /** - Indicates a failure to request new permissions because the user has changed. - */ - FBSDKLoginErrorUserMismatch, - - /** - The user must confirm their account with Facebook before logging in - */ - FBSDKLoginErrorUnconfirmedUser, - - /** - The Accounts framework failed without returning an error, indicating the - app's slider in the iOS Facebook Settings (device Settings -> Facebook -> App Name) has - been disabled. - */ - FBSDKLoginErrorSystemAccountAppDisabled, - - /** - An error occurred related to Facebook system Account store - */ - FBSDKLoginErrorSystemAccountUnavailable, - - /** - The login response was missing a valid challenge string. - */ - FBSDKLoginErrorBadChallengeString, -} NS_SWIFT_NAME(LoginError); - -/** - FBSDKDeviceLoginError - Error codes for FBSDKDeviceLoginErrorDomain. - */ -typedef NS_ERROR_ENUM(FBSDKLoginErrorDomain, FBSDKDeviceLoginError) { - /** - Your device is polling too frequently. - */ - FBSDKDeviceLoginErrorExcessivePolling = 1349172, - /** - User has declined to authorize your application. - */ - FBSDKDeviceLoginErrorAuthorizationDeclined = 1349173, - /** - User has not yet authorized your application. Continue polling. - */ - FBSDKDeviceLoginErrorAuthorizationPending = 1349174, - /** - The code you entered has expired. - */ - FBSDKDeviceLoginErrorCodeExpired = 1349152 -} NS_SWIFT_NAME(DeviceLoginError); - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginConstants.m b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginConstants.m deleted file mode 100644 index 0e6e6e5edb..0000000000 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginConstants.m +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "FBSDKLoginConstants.h" - -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 - -NSErrorDomain const FBSDKLoginErrorDomain = @"com.facebook.sdk.login"; - -#else - -NSString *const FBSDKLoginErrorDomain = @"com.facebook.sdk.login"; - -#endif diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit.h b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit.h deleted file mode 100644 index 7e7a4bddf6..0000000000 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit.h +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -#import "FBSDKDeviceLoginCodeInfo.h" -#import "FBSDKDeviceLoginManager.h" -#import "FBSDKDeviceLoginManagerResult.h" -#import "FBSDKLoginConstants.h" - -#if !TARGET_OS_TV -#import "FBSDKLoginButton.h" -#import "FBSDKLoginManager.h" -#import "FBSDKLoginManagerLoginResult.h" -#import "FBSDKLoginTooltipView.h" -#endif diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManager.h b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManager.h deleted file mode 100644 index 1b4b22e4a1..0000000000 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManager.h +++ /dev/null @@ -1,207 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -NS_ASSUME_NONNULL_BEGIN - -#if TARGET_OS_TV - -// This is an unfortunate hack for Swift Package Manager support. -// SPM does not allow us to conditionally exclude Swift files for compilation by platform. -// -// So to support tvOS with SPM we need to use runtime availability checks in the Swift files. -// This means that even though the code in `LoginManager.swift` will never be run for tvOS -// targets, it still needs to be able to compile. Hence we need to declare it here. -// -// The way to fix this is to remove extensions of ObjC types in Swift. -// This will be be done in the next major release (6.0) - -@class LoginManagerLoginResult; - -typedef NS_ENUM(NSUInteger, LoginBehavior) { LoginBehaviorBrowser }; -typedef NS_ENUM(NSUInteger, DefaultAudience) { DefaultAudienceFriends }; -typedef void (^LoginManagerLoginResultBlock)(LoginManagerLoginResult *_Nullable result, - NSError *_Nullable error); - -@interface LoginManager : NSObject - -@property (assign, nonatomic) LoginBehavior loginBehavior; -@property (assign, nonatomic) DefaultAudience defaultAudience; - -- (void)logInWithPermissions:(NSArray *)permissions - fromViewController:(nullable UIViewController *)fromViewController - handler:(nullable LoginManagerLoginResultBlock)handler -NS_SWIFT_NAME(logIn(permissions:from:handler:)); - -@end - -#else - -@class FBSDKLoginManagerLoginResult; - -/// typedef for FBSDKLoginAuthType -typedef NSString *const FBSDKLoginAuthType NS_TYPED_EXTENSIBLE_ENUM NS_SWIFT_NAME(LoginAuthType); - -/// Rerequest -FOUNDATION_EXPORT FBSDKLoginAuthType FBSDKLoginAuthTypeRerequest; - -/// Reauthorize -FOUNDATION_EXPORT FBSDKLoginAuthType FBSDKLoginAuthTypeReauthorize; - -/** - Describes the call back to the FBSDKLoginManager - @param result the result of the authorization - @param error the authorization error, if any. - */ -typedef void (^FBSDKLoginManagerLoginResultBlock)(FBSDKLoginManagerLoginResult *_Nullable result, - NSError *_Nullable error) -NS_SWIFT_NAME(LoginManagerLoginResultBlock); - - -/** - FBSDKDefaultAudience enum - - Passed to open to indicate which default audience to use for sessions that post data to Facebook. - - - - Certain operations such as publishing a status or publishing a photo require an audience. When the user - grants an application permission to perform a publish operation, a default audience is selected as the - publication ceiling for the application. This enumerated value allows the application to select which - audience to ask the user to grant publish permission for. - */ -typedef NS_ENUM(NSUInteger, FBSDKDefaultAudience) -{ - /** Indicates that the user's friends are able to see posts made by the application */ - FBSDKDefaultAudienceFriends = 0, - /** Indicates that only the user is able to see posts made by the application */ - FBSDKDefaultAudienceOnlyMe, - /** Indicates that all Facebook users are able to see posts made by the application */ - FBSDKDefaultAudienceEveryone, -} NS_SWIFT_NAME(DefaultAudience); - -/** - FBSDKLoginBehavior enum - - Passed to the \c FBSDKLoginManager to indicate how Facebook Login should be attempted. - - - - Facebook Login authorizes the application to act on behalf of the user, using the user's - Facebook account. Usually a Facebook Login will rely on an account maintained outside of - the application, by the native Facebook application, the browser, or perhaps the device - itself. This avoids the need for a user to enter their username and password directly, and - provides the most secure and lowest friction way for a user to authorize the application to - interact with Facebook. - - The \c FBSDKLoginBehavior enum specifies which log-in methods may be used. The SDK - will determine the best behavior based on the current device (such as iOS version). - */ -typedef NS_ENUM(NSUInteger, FBSDKLoginBehavior) -{ - /** - This is the default behavior, and indicates logging in via ASWebAuthenticationSession (iOS 12+) or SFAuthenticationSession (iOS 11), - which present specialized SafariViewControllers. Falls back to plain SFSafariViewController (iOS 9 and 10) or Safari (iOS 8). - */ - FBSDKLoginBehaviorBrowser = 0, -} NS_SWIFT_NAME(LoginBehavior) -DEPRECATED_MSG_ATTRIBUTE("All login flows utilize the browser. This will be removed in the next major release"); - -/** - `FBSDKLoginManager` provides methods for logging the user in and out. - - `FBSDKLoginManager` works directly with `[FBSDKAccessToken currentAccessToken]` and - sets the "currentAccessToken" upon successful authorizations (or sets `nil` in case of `logOut`). - - You should check `[FBSDKAccessToken currentAccessToken]` before calling logIn* to see if there is - a cached token available (typically in your viewDidLoad). - - If you are managing your own token instances outside of "currentAccessToken", you will need to set - "currentAccessToken" before calling logIn* to authorize further permissions on your tokens. - */ -NS_SWIFT_NAME(LoginManager) -@interface FBSDKLoginManager : NSObject - -/** - Auth type - */ -@property (strong, nonatomic) FBSDKLoginAuthType authType; -/** - the default audience. - - you should set this if you intend to ask for publish permissions. - */ -@property (assign, nonatomic) FBSDKDefaultAudience defaultAudience; - -/** - the login behavior - */ -@property (assign, nonatomic) FBSDKLoginBehavior loginBehavior -DEPRECATED_MSG_ATTRIBUTE("All login flows utilize the browser. This will be removed in the next major release"); - -/** - Logs the user in or authorizes additional permissions. - @param permissions the optional array of permissions. Note this is converted to NSSet and is only - an NSArray for the convenience of literal syntax. - @param fromViewController the view controller to present from. If nil, the topmost view controller will be - automatically determined as best as possible. - @param handler the callback. - - Use this method when asking for read permissions. You should only ask for permissions when they - are needed and explain the value to the user. You can inspect the result.declinedPermissions to also - provide more information to the user if they decline permissions. - - This method will present UI the user. You typically should check if `[FBSDKAccessToken currentAccessToken]` - already contains the permissions you need before asking to reduce unnecessary app switching. For example, - you could make that check at viewDidLoad. - You can only do one login call at a time. Calling a login method before the completion handler is called - on a previous login will return an error. - */ -- (void)logInWithPermissions:(NSArray *)permissions - fromViewController:(nullable UIViewController *)fromViewController - handler:(nullable FBSDKLoginManagerLoginResultBlock)handler -NS_SWIFT_NAME(logIn(permissions:from:handler:)); - -/** - Requests user's permission to reathorize application's data access, after it has expired due to inactivity. - @param fromViewController the view controller to present from. If nil, the topmost view controller will be - automatically determined as best as possible. - @param handler the callback. - Use this method when you need to reathorize your app's access to user data via Graph API, after such an access has expired. - You should provide as much context to the user as possible as to why you need to reauthorize the access, the scope of - access being reathorized, and what added value your app provides when the access is reathorized. - You can inspect the result.declinedPermissions to also provide more information to the user if they decline permissions. - This method will present UI the user. You typically should call this if `[FBSDKAccessToken isDataAccessExpired]` returns true. - */ -- (void)reauthorizeDataAccess:(UIViewController *)fromViewController - handler:(FBSDKLoginManagerLoginResultBlock)handler -NS_SWIFT_NAME(reauthorizeDataAccess(from:handler:)); - -/** - Logs the user out - - This calls [FBSDKAccessToken setCurrentAccessToken:nil] and [FBSDKProfile setCurrentProfile:nil]. - */ -- (void)logOut; - -@end - -#endif - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManager.m b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManager.m deleted file mode 100644 index 7157cbd673..0000000000 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManager.m +++ /dev/null @@ -1,558 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKLoginManager+Internal.h" -#import "FBSDKLoginManagerLoginResult+Internal.h" - -#ifdef SWIFT_PACKAGE -#import "FBSDKAccessToken.h" -#import "FBSDKSettings.h" -#else -#import -#endif - -#ifdef FBSDKCOCOAPODS -#import -#else -#import "FBSDKCoreKit+Internal.h" -#endif - -#import "_FBSDKLoginRecoveryAttempter.h" -#import "FBSDKLoginCompletion.h" -#import "FBSDKLoginConstants.h" -#import "FBSDKLoginError.h" -#import "FBSDKLoginManagerLogger.h" -#import "FBSDKLoginUtility.h" - -static int const FBClientStateChallengeLength = 20; -static NSString *const FBSDKExpectedChallengeKey = @"expected_login_challenge"; -static NSString *const FBSDKOauthPath = @"/dialog/oauth"; -static NSString *const SFVCCanceledLogin = @"com.apple.SafariServices.Authentication"; -static NSString *const ASCanceledLogin = @"com.apple.AuthenticationServices.WebAuthenticationSession"; - -// constants -FBSDKLoginAuthType FBSDKLoginAuthTypeRerequest = @"rerequest"; -FBSDKLoginAuthType FBSDKLoginAuthTypeReauthorize = @"reauthorize"; - -typedef NS_ENUM(NSInteger, FBSDKLoginManagerState) { - FBSDKLoginManagerStateIdle, - // We received a call to start login. - FBSDKLoginManagerStateStart, - // We're calling out to the Facebook app or Safari to perform a log in - FBSDKLoginManagerStatePerformingLogin, -}; - -@implementation FBSDKLoginManager -{ - FBSDKLoginManagerLoginResultBlock _handler; - FBSDKLoginManagerLogger *_logger; - FBSDKLoginManagerState _state; - FBSDKKeychainStore *_keychainStore; - BOOL _usedSFAuthSession; -} - -+ (void)initialize -{ - if (self == [FBSDKLoginManager class]) { - [_FBSDKLoginRecoveryAttempter class]; - [FBSDKServerConfigurationManager loadServerConfigurationWithCompletionBlock:NULL]; - } -} - -- (instancetype)init -{ - self = [super init]; - if (self) { - self.authType = FBSDKLoginAuthTypeRerequest; - NSString *keyChainServiceIdentifier = [NSString stringWithFormat:@"com.facebook.sdk.loginmanager.%@", [NSBundle mainBundle].bundleIdentifier]; - _keychainStore = [[FBSDKKeychainStore alloc] initWithService:keyChainServiceIdentifier accessGroup:nil]; - } - return self; -} - -- (void)logInWithPermissions:(NSArray *)permissions - fromViewController:(UIViewController *)fromViewController - handler:(FBSDKLoginManagerLoginResultBlock)handler -{ - if (![self validateLoginStartState]) { - return; - } - self.fromViewController = fromViewController; - NSSet *permissionSet = [NSSet setWithArray:permissions]; - [self logInWithPermissions:permissionSet handler:handler]; -} - -- (void)reauthorizeDataAccess:(UIViewController *)fromViewController handler:(FBSDKLoginManagerLoginResultBlock)handler -{ - if (![self validateLoginStartState]) { - return; - } - self.fromViewController = fromViewController; - [self reauthorizeDataAccess:handler]; -} - - -- (void)logOut -{ - [FBSDKAccessToken setCurrentAccessToken:nil]; - [FBSDKProfile setCurrentProfile:nil]; -} - -#pragma mark - Private - -- (void)raiseLoginException:(NSException *)exception -{ - _state = FBSDKLoginManagerStateIdle; - [exception raise]; -} - -- (void)handleImplicitCancelOfLogIn -{ - FBSDKLoginManagerLoginResult *result = [[FBSDKLoginManagerLoginResult alloc] initWithToken:nil - isCancelled:YES - grantedPermissions:NSSet.set - declinedPermissions:NSSet.set]; - [result addLoggingExtra:@YES forKey:@"implicit_cancel"]; - [self invokeHandler:result error:nil]; -} - -- (BOOL)validateLoginStartState -{ - switch (_state) { - case FBSDKLoginManagerStateStart: { - if (self->_usedSFAuthSession) { - // Using SFAuthenticationSession makes an interestitial dialog that blocks the app, but in certain situations such as - // screen lock it can be dismissed and have the control returned to the app without invoking the completionHandler. - // In this case, the viewcontroller has the control back and tried to reinvoke the login. This is acceptable behavior - // and we should pop up the dialog again - return YES; - } - - NSString *errorStr = @"** WARNING: You are trying to start a login while a previous login has not finished yet." - "This is unsupported behavior. You should wait until the previous login handler gets called to start a new login."; - [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors - formatString:@"%@", errorStr]; - return NO; - } - case FBSDKLoginManagerStatePerformingLogin:{ - [self handleImplicitCancelOfLogIn]; - return YES; - } - case FBSDKLoginManagerStateIdle: - _state = FBSDKLoginManagerStateStart; - return YES; - } -} - -- (BOOL)isPerformingLogin -{ - return _state == FBSDKLoginManagerStatePerformingLogin; -} - -- (void)assertPermissions:(NSArray *)permissions -{ - for (NSString *permission in permissions) { - if (![permission isKindOfClass:[NSString class]]) { - [self raiseLoginException:[NSException exceptionWithName:NSInvalidArgumentException - reason:@"Permissions must be string values." - userInfo:nil]]; - } - if ([permission rangeOfString:@","].location != NSNotFound) { - [self raiseLoginException:[NSException exceptionWithName:NSInvalidArgumentException - reason:@"Permissions should each be specified in separate string values in the array." - userInfo:nil]]; - } - } -} - -- (void)completeAuthentication:(FBSDKLoginCompletionParameters *)parameters expectChallenge:(BOOL)expectChallenge -{ - NSSet *recentlyGrantedPermissions = nil; - NSSet *recentlyDeclinedPermissions = nil; - FBSDKLoginManagerLoginResult *result = nil; - NSError *error = parameters.error; - - NSString *tokenString = parameters.accessTokenString; - BOOL cancelled = (tokenString == nil); - - BOOL challengePassed = YES; - if (expectChallenge) { - // Perform this check early so we be sure to clear expected challenge in all cases. - NSString *challengeReceived = parameters.challenge; - NSString *challengeExpected = [[self loadExpectedChallenge] stringByReplacingOccurrencesOfString:@"+" withString:@" "]; - if (![challengeExpected isEqualToString:challengeReceived]) { - challengePassed = NO; - } - - // Don't overwrite an existing error, if any. - if (!error && !cancelled && !challengePassed) { - error = [NSError fbErrorForFailedLoginWithCode:FBSDKLoginErrorBadChallengeString]; - } - } - - [self storeExpectedChallenge:nil]; - - if (!error) { - if (!cancelled) { - NSSet *grantedPermissions = parameters.permissions; - NSSet *declinedPermissions = parameters.declinedPermissions; - - [self determineRecentlyGrantedPermissions:&recentlyGrantedPermissions - recentlyDeclinedPermissions:&recentlyDeclinedPermissions - forGrantedPermission:grantedPermissions - declinedPermissions:declinedPermissions]; - - if (recentlyGrantedPermissions.count > 0) { - FBSDKAccessToken *token = [[FBSDKAccessToken alloc] initWithTokenString:tokenString - permissions:grantedPermissions.allObjects - declinedPermissions:declinedPermissions.allObjects - expiredPermissions:@[] - appID:parameters.appID - userID:parameters.userID - expirationDate:parameters.expirationDate - refreshDate:[NSDate date] - dataAccessExpirationDate:parameters.dataAccessExpirationDate - graphDomain:parameters.graphDomain]; - result = [[FBSDKLoginManagerLoginResult alloc] initWithToken:token - isCancelled:NO - grantedPermissions:recentlyGrantedPermissions - declinedPermissions:recentlyDeclinedPermissions]; - - if ([FBSDKAccessToken currentAccessToken]) { - [self validateReauthentication:[FBSDKAccessToken currentAccessToken] withResult:result]; - // in a reauth, short circuit and let the login handler be called when the validation finishes. - return; - } - } - } - - if (cancelled || recentlyGrantedPermissions.count == 0) { - NSSet *declinedPermissions = nil; - if ([FBSDKAccessToken currentAccessToken] != nil) { - // Always include the list of declined permissions from this login request - // if an access token is already cached by the SDK - declinedPermissions = recentlyDeclinedPermissions; - } - - result = [[FBSDKLoginManagerLoginResult alloc] initWithToken:nil - isCancelled:cancelled - grantedPermissions:NSSet.set - declinedPermissions:declinedPermissions]; - } - } - - if (result.token) { - [FBSDKAccessToken setCurrentAccessToken:result.token]; - } - - [self invokeHandler:result error:error]; -} - -- (void)determineRecentlyGrantedPermissions:(NSSet **)recentlyGrantedPermissionsRef - recentlyDeclinedPermissions:(NSSet **)recentlyDeclinedPermissionsRef - forGrantedPermission:(NSSet *)grantedPermissions - declinedPermissions:(NSSet *)declinedPermissions -{ - NSMutableSet *recentlyGrantedPermissions = [grantedPermissions mutableCopy]; - NSSet *previouslyGrantedPermissions = ([FBSDKAccessToken currentAccessToken] ? - [FBSDKAccessToken currentAccessToken].permissions : - nil); - if (previouslyGrantedPermissions.count > 0) { - // If there were no requested permissions for this auth - treat all permissions as granted. - // Otherwise this is a reauth, so recentlyGranted should be a subset of what was requested. - if (_requestedPermissions.count != 0) { - [recentlyGrantedPermissions intersectSet:_requestedPermissions]; - } - } - - NSMutableSet *recentlyDeclinedPermissions = [_requestedPermissions mutableCopy]; - [recentlyDeclinedPermissions intersectSet:declinedPermissions]; - - if (recentlyGrantedPermissionsRef != NULL) { - *recentlyGrantedPermissionsRef = [recentlyGrantedPermissions copy]; - } - if (recentlyDeclinedPermissionsRef != NULL) { - *recentlyDeclinedPermissionsRef = [recentlyDeclinedPermissions copy]; - } -} - -- (void)invokeHandler:(FBSDKLoginManagerLoginResult *)result error:(NSError *)error -{ - [_logger endLoginWithResult:result error:error]; - [_logger endSession]; - _logger = nil; - _state = FBSDKLoginManagerStateIdle; - - if (_handler) { - FBSDKLoginManagerLoginResultBlock handler = _handler; - _handler(result, error); - if (handler == _handler) { - _handler = nil; - } else { - [FBSDKLogger singleShotLogEntry:FBSDKLoggingBehaviorDeveloperErrors - formatString:@"** WARNING: You are requesting permissions inside the completion block of an existing login." - "This is unsupported behavior. You should request additional permissions only when they are needed, such as requesting for publish_actions" - "when the user performs a sharing action."]; - } - } -} - -- (NSString *)loadExpectedChallenge -{ - return [_keychainStore stringForKey:FBSDKExpectedChallengeKey]; -} - -- (NSDictionary *)logInParametersWithPermissions:(NSSet *)permissions serverConfiguration:(FBSDKServerConfiguration *)serverConfiguration -{ - [FBSDKInternalUtility validateURLSchemes]; - - NSMutableDictionary *loginParams = [NSMutableDictionary dictionary]; - loginParams[@"client_id"] = [FBSDKSettings appID]; - loginParams[@"response_type"] = @"token_or_nonce,signed_request,graph_domain"; - loginParams[@"redirect_uri"] = @"fbconnect://success"; - loginParams[@"display"] = @"touch"; - loginParams[@"sdk"] = @"ios"; - loginParams[@"return_scopes"] = @"true"; - loginParams[@"sdk_version"] = FBSDK_VERSION_STRING; - loginParams[@"fbapp_pres"] = @([FBSDKInternalUtility isFacebookAppInstalled]); - loginParams[@"auth_type"] = self.authType; - loginParams[@"logging_token"] = serverConfiguration.loggingToken; - long long cbtInMilliseconds = round(1000 * [NSDate date].timeIntervalSince1970); - loginParams[@"cbt"] = @(cbtInMilliseconds); - loginParams[@"ies"] = [FBSDKSettings isAutoLogAppEventsEnabled] ? @1 : @0; - - [FBSDKBasicUtility dictionary:loginParams setObject:[FBSDKSettings appURLSchemeSuffix] forKey:@"local_client_id"]; - [FBSDKBasicUtility dictionary:loginParams setObject:[FBSDKLoginUtility stringForAudience:self.defaultAudience] forKey:@"default_audience"]; - [FBSDKBasicUtility dictionary:loginParams setObject:[permissions.allObjects componentsJoinedByString:@","] forKey:@"scope"]; - - NSString *expectedChallenge = [FBSDKLoginManager stringForChallenge]; - NSDictionary *state = @{@"challenge": [FBSDKUtility URLEncode:expectedChallenge]}; - loginParams[@"state"] = [FBSDKBasicUtility JSONStringForObject:state error:NULL invalidObjectHandler:nil]; - - [self storeExpectedChallenge:expectedChallenge]; - - return loginParams; -} - -- (void)logInWithPermissions:(NSSet *)permissions handler:(FBSDKLoginManagerLoginResultBlock)handler -{ - FBSDKServerConfiguration *serverConfiguration = [FBSDKServerConfigurationManager cachedServerConfiguration]; - _logger = [[FBSDKLoginManagerLogger alloc] initWithLoggingToken:serverConfiguration.loggingToken]; - - _handler = [handler copy]; - _requestedPermissions = permissions; - - [_logger startSessionForLoginManager:self]; - - [self logIn]; -} - -- (void)reauthorizeDataAccess:(FBSDKLoginManagerLoginResultBlock)handler -{ - FBSDKServerConfiguration *serverConfiguration = [FBSDKServerConfigurationManager cachedServerConfiguration]; - _logger = [[FBSDKLoginManagerLogger alloc] initWithLoggingToken:serverConfiguration.loggingToken]; - _handler = [handler copy]; - // Don't need to pass permissions for data reauthorization. - _requestedPermissions = [NSSet set]; - self.authType = FBSDKLoginAuthTypeReauthorize; - [_logger startSessionForLoginManager:self]; - [self logIn]; -} - -- (void)logIn -{ - FBSDKServerConfiguration *serverConfiguration = [FBSDKServerConfigurationManager cachedServerConfiguration]; - NSDictionary *loginParams = [self logInParametersWithPermissions:_requestedPermissions serverConfiguration:serverConfiguration]; - self->_usedSFAuthSession = NO; - - void(^completion)(BOOL, NSError *) = ^void(BOOL didPerformLogIn, NSError *error) { - if (didPerformLogIn) { - self->_state = FBSDKLoginManagerStatePerformingLogin; - } else if ([error.domain isEqualToString:SFVCCanceledLogin] || - [error.domain isEqualToString:ASCanceledLogin]) { - [self handleImplicitCancelOfLogIn]; - } else { - if (!error) { - error = [NSError errorWithDomain:FBSDKLoginErrorDomain code:FBSDKLoginErrorUnknown userInfo:nil]; - } - [self invokeHandler:nil error:error]; - } - }; - - [self performBrowserLogInWithParameters:loginParams handler:^(BOOL openedURL, - NSError *openedURLError) { - completion(openedURL, openedURLError); - }]; -} - -- (void)storeExpectedChallenge:(NSString *)challengeExpected -{ - [_keychainStore setString:challengeExpected - forKey:FBSDKExpectedChallengeKey - accessibility:[FBSDKDynamicFrameworkLoader loadkSecAttrAccessibleAfterFirstUnlockThisDeviceOnly]]; -} - -+ (NSString *)stringForChallenge { - NSString *challenge = [FBSDKCrypto randomString:FBClientStateChallengeLength]; - - return [challenge stringByReplacingOccurrencesOfString:@"+" withString:@"="]; -} - -- (void)validateReauthentication:(FBSDKAccessToken *)currentToken withResult:(FBSDKLoginManagerLoginResult *)loginResult -{ - FBSDKGraphRequest *requestMe = [[FBSDKGraphRequest alloc] initWithGraphPath:@"me" - parameters:@{@"fields":@""} - tokenString:loginResult.token.tokenString - HTTPMethod:nil - flags:FBSDKGraphRequestFlagDoNotInvalidateTokenOnError | FBSDKGraphRequestFlagDisableErrorRecovery]; - [requestMe startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { - NSString *actualID = result[@"id"]; - if ([currentToken.userID isEqualToString:actualID]) { - [FBSDKAccessToken setCurrentAccessToken:loginResult.token]; - [self invokeHandler:loginResult error:nil]; - } else { - NSMutableDictionary *userInfo = [NSMutableDictionary dictionary]; - [FBSDKBasicUtility dictionary:userInfo setObject:error forKey:NSUnderlyingErrorKey]; - NSError *resultError = [NSError errorWithDomain:FBSDKLoginErrorDomain - code:FBSDKLoginErrorUserMismatch - userInfo:userInfo]; - [self invokeHandler:nil error:resultError]; - } - }]; -} - -#pragma mark - Test Methods - -- (void)setHandler:(FBSDKLoginManagerLoginResultBlock)handler -{ - _handler = [handler copy]; -} - -- (void)setRequestedPermissions:(NSSet *)requestedPermissions -{ - _requestedPermissions = [requestedPermissions copy]; -} - -// change bool to auth method string. -- (void)performBrowserLogInWithParameters:(NSDictionary *)loginParams - handler:(FBSDKBrowserLoginSuccessBlock)handler -{ - [_logger willAttemptAppSwitchingBehavior]; - - FBSDKServerConfiguration *configuration = [FBSDKServerConfigurationManager cachedServerConfiguration]; - BOOL useSafariViewController = [configuration useSafariViewControllerForDialogName:FBSDKDialogConfigurationNameLogin]; - NSString *authMethod = (useSafariViewController ? FBSDKLoginManagerLoggerAuthMethod_SFVC : FBSDKLoginManagerLoggerAuthMethod_Browser); - - loginParams = [_logger parametersWithTimeStampAndClientState:loginParams forAuthMethod:authMethod]; - - NSURL *authURL = nil; - NSError *error; - NSURL *redirectURL = [FBSDKInternalUtility appURLWithHost:@"authorize" path:@"" queryParameters:@{} error:&error]; - if (!error) { - NSMutableDictionary *browserParams = [loginParams mutableCopy]; - [FBSDKBasicUtility dictionary:browserParams - setObject:redirectURL - forKey:@"redirect_uri"]; - authURL = [FBSDKInternalUtility facebookURLWithHostPrefix:@"m." - path:FBSDKOauthPath - queryParameters:browserParams - error:&error]; - } - - [_logger startAuthMethod:authMethod]; - - if (authURL) { - void(^handlerWrapper)(BOOL, NSError*) = ^(BOOL didOpen, NSError *anError) { - if (handler) { - handler(didOpen, anError); - } - }; - - if (useSafariViewController) { - // Note based on above, authURL must be a http scheme. If that changes, add a guard, otherwise SFVC can throw - self->_usedSFAuthSession = YES; - [[FBSDKBridgeAPI sharedInstance] openURLWithSafariViewController:authURL - sender:self - fromViewController:self.fromViewController - handler:handlerWrapper]; - } else { - [[FBSDKBridgeAPI sharedInstance] openURL:authURL sender:self handler:handlerWrapper]; - } - } else { - error = error ?: [FBSDKError errorWithCode:FBSDKLoginErrorUnknown message:@"Failed to construct oauth browser url"]; - if (handler) { - handler(NO, error); - } - } -} - -#pragma mark - FBSDKURLOpening -- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation -{ - BOOL isFacebookURL = [self canOpenURL:url forApplication:application sourceApplication:sourceApplication annotation:annotation]; - - if (!isFacebookURL && [self isPerformingLogin]) { - [self handleImplicitCancelOfLogIn]; - } - - if (isFacebookURL) { - NSDictionary *urlParameters = [FBSDKLoginUtility queryParamsFromLoginURL:url]; - id completer = [[FBSDKLoginURLCompleter alloc] initWithURLParameters:urlParameters appID:[FBSDKSettings appID]]; - - if (_logger == nil) { - _logger = [FBSDKLoginManagerLogger loggerFromParameters:urlParameters]; - } - - // any necessary strong reference is maintained by the FBSDKLoginURLCompleter handler - [completer completeLoginWithHandler:^(FBSDKLoginCompletionParameters *parameters) { - [self completeAuthentication:parameters expectChallenge:YES]; - }]; - } - - return isFacebookURL; -} - -- (BOOL)canOpenURL:(NSURL *)url - forApplication:(UIApplication *)application - sourceApplication:(NSString *)sourceApplication - annotation:(id)annotation -{ - // verify the URL is intended as a callback for the SDK's log in - return [url.scheme hasPrefix:[NSString stringWithFormat:@"fb%@", [FBSDKSettings appID]]] && - [url.host isEqualToString:@"authorize"]; -} - -- (void)applicationDidBecomeActive:(UIApplication *)application -{ - if ([self isPerformingLogin]) { - [self handleImplicitCancelOfLogIn]; - } -} - -- (BOOL)isAuthenticationURL:(NSURL *)url -{ - return [url.path hasSuffix:FBSDKOauthPath]; -} - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManagerLoginResult.h b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManagerLoginResult.h deleted file mode 100644 index 2aa0913705..0000000000 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManagerLoginResult.h +++ /dev/null @@ -1,97 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -NS_ASSUME_NONNULL_BEGIN - -#if TARGET_OS_TV - -// This is an unfortunate hack for Swift Package Manager support. -// SPM does not allow us to conditionally exclude Swift files for compilation by platform. -// -// So to support tvOS with SPM we need to use runtime availability checks in the Swift files. -// This means that even though the code in `LoginManager.swift` will never be run for tvOS -// targets, it still needs to be able to compile. Hence we need to declare it here. -// -// The way to fix this is to remove extensions of ObjC types in Swift. -// This will be be done in the next major release (6.0) - -@interface LoginManagerLoginResult : NSObject - -@property (copy, nonatomic, nullable) FBSDKAccessToken *token; -@property (readonly, nonatomic) BOOL isCancelled; -@property (copy, nonatomic) NSSet *grantedPermissions; -@property (copy, nonatomic) NSSet *declinedPermissions; - -@end - -#else - -@class FBSDKAccessToken; - -/** - Describes the result of a login attempt. - */ -NS_SWIFT_NAME(LoginManagerLoginResult) -@interface FBSDKLoginManagerLoginResult : NSObject - -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; - -/** - the access token. - */ -@property (copy, nonatomic, nullable) FBSDKAccessToken *token; - -/** - whether the login was cancelled by the user. - */ -@property (readonly, nonatomic) BOOL isCancelled; - -/** - the set of permissions granted by the user in the associated request. - - inspect the token's permissions set for a complete list. - */ -@property (copy, nonatomic) NSSet *grantedPermissions; - -/** - the set of permissions declined by the user in the associated request. - - inspect the token's permissions set for a complete list. - */ -@property (copy, nonatomic) NSSet *declinedPermissions; - -/** - Initializes a new instance. - @param token the access token - @param isCancelled whether the login was cancelled by the user - @param grantedPermissions the set of granted permissions - @param declinedPermissions the set of declined permissions - */ -- (instancetype)initWithToken:(nullable FBSDKAccessToken *)token - isCancelled:(BOOL)isCancelled - grantedPermissions:(NSSet *)grantedPermissions - declinedPermissions:(NSSet *)declinedPermissions -NS_DESIGNATED_INITIALIZER; -@end - -#endif - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManagerLoginResult.m b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManagerLoginResult.m deleted file mode 100644 index c21a300f93..0000000000 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManagerLoginResult.m +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKLoginManagerLoginResult+Internal.h" - -#ifdef FBSDKCOCOAPODS -#import -#else -#import "FBSDKCoreKit+Internal.h" -#endif - -@implementation FBSDKLoginManagerLoginResult { - NSMutableDictionary *_mutableLoggingExtras; -} - -- (instancetype)initWithToken:(FBSDKAccessToken *)token - isCancelled:(BOOL)isCancelled - grantedPermissions:(NSSet *)grantedPermissions - declinedPermissions:(NSSet *)declinedPermissions { - if ((self = [super init])) { - _mutableLoggingExtras = [NSMutableDictionary dictionary]; - _token = token ? [token copy] : nil; - _isCancelled = isCancelled; - _grantedPermissions = [grantedPermissions copy]; - _declinedPermissions = [declinedPermissions copy]; - }; - return self; -} - -- (void)addLoggingExtra:(id)object forKey:(id)key -{ - [FBSDKBasicUtility dictionary:_mutableLoggingExtras setObject:object forKey:key]; -} - -- (NSDictionary *)loggingExtras -{ - return [_mutableLoggingExtras copy]; -} - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginTooltipView.h b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginTooltipView.h deleted file mode 100644 index 1e03eeaef0..0000000000 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginTooltipView.h +++ /dev/null @@ -1,102 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import - -#import "FBSDKTooltipView.h" - -NS_ASSUME_NONNULL_BEGIN - -@protocol FBSDKLoginTooltipViewDelegate; - -/** - - Represents a tooltip to be displayed next to a Facebook login button - to highlight features for new users. - - - The `FBSDKLoginButton` may display this view automatically. If you do - not use the `FBSDKLoginButton`, you can manually call one of the `present*` methods - as appropriate and customize behavior via `FBSDKLoginTooltipViewDelegate` delegate. - - By default, the `FBSDKLoginTooltipView` is not added to the superview until it is - determined the app has migrated to the new login experience. You can override this - (e.g., to test the UI layout) by implementing the delegate or setting `forceDisplay` to YES. - - */ -NS_SWIFT_NAME(FBLoginTooltipView) -@interface FBSDKLoginTooltipView : FBSDKTooltipView - -/** the delegate */ -@property (nonatomic, weak) id delegate; - -/** if set to YES, the view will always be displayed and the delegate's - `loginTooltipView:shouldAppear:` will NOT be called. */ -@property (nonatomic, assign, getter=shouldForceDisplay) BOOL forceDisplay; - -@end - -/** - @protocol - - The `FBSDKLoginTooltipViewDelegate` protocol defines the methods used to receive event - notifications from `FBSDKLoginTooltipView` objects. - */ -NS_SWIFT_NAME(LoginTooltipViewDelegate) -@protocol FBSDKLoginTooltipViewDelegate - -@optional - -/** - Asks the delegate if the tooltip view should appear - - @param view The tooltip view. - @param appIsEligible The value fetched from the server identifying if the app - is eligible for the new login experience. - - - Use this method to customize display behavior. - */ -- (BOOL)loginTooltipView:(FBSDKLoginTooltipView *)view shouldAppear:(BOOL)appIsEligible; - -/** - Tells the delegate the tooltip view will appear, specifically after it's been - added to the super view but before the fade in animation. - - @param view The tooltip view. - */ -- (void)loginTooltipViewWillAppear:(FBSDKLoginTooltipView *)view; - -/** - Tells the delegate the tooltip view will not appear (i.e., was not - added to the super view). - - @param view The tooltip view. - */ -- (void)loginTooltipViewWillNotAppear:(FBSDKLoginTooltipView *)view; - - -@end - -NS_ASSUME_NONNULL_END - -#endif diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginTooltipView.m b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginTooltipView.m deleted file mode 100644 index 7ebe1cb63a..0000000000 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginTooltipView.m +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKLoginTooltipView.h" - -#ifdef FBSDKCOCOAPODS -#import -#else -#import "FBSDKCoreKit+Internal.h" -#endif - -@interface FBSDKLoginTooltipView () -@end - -@implementation FBSDKLoginTooltipView - -- (instancetype)init -{ - NSString *tooltipMessage = - NSLocalizedStringWithDefaultValue(@"LoginTooltip.Message", @"FacebookSDK", [FBSDKInternalUtility bundleForStrings], - @"You're in control - choose what info you want to share with apps.", - @"The message of the FBSDKLoginTooltipView"); - return [super initWithTagline:nil message:tooltipMessage colorStyle:FBSDKTooltipColorStyleFriendlyBlue]; -} - -- (void)presentInView:(UIView *)view withArrowPosition:(CGPoint)arrowPosition direction:(FBSDKTooltipViewArrowDirection)arrowDirection -{ - if (self.forceDisplay) { - [super presentInView:view withArrowPosition:arrowPosition direction:arrowDirection]; - } else { - - [FBSDKServerConfigurationManager loadServerConfigurationWithCompletionBlock:^(FBSDKServerConfiguration *serverConfiguration, NSError *error) { - self.message = serverConfiguration.loginTooltipText; - BOOL shouldDisplay = serverConfiguration.loginTooltipEnabled; - if ([self.delegate respondsToSelector:@selector(loginTooltipView:shouldAppear:)]) { - shouldDisplay = [self.delegate loginTooltipView:self shouldAppear:shouldDisplay]; - } - if (shouldDisplay) { - [super presentInView:view withArrowPosition:arrowPosition direction:arrowDirection]; - if ([self.delegate respondsToSelector:@selector(loginTooltipViewWillAppear:)]) { - [self.delegate loginTooltipViewWillAppear:self]; - } - } else { - if ([self.delegate respondsToSelector:@selector(loginTooltipViewWillNotAppear:)]) { - [self.delegate loginTooltipViewWillNotAppear:self]; - } - } - }]; - } -} -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKTooltipView.h b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKTooltipView.h deleted file mode 100644 index eee01c7bd1..0000000000 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKTooltipView.h +++ /dev/null @@ -1,152 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - FBSDKTooltipViewArrowDirection enum - - Passed on construction to determine arrow orientation. - */ -typedef NS_ENUM(NSUInteger, FBSDKTooltipViewArrowDirection) -{ - /** View is located above given point, arrow is pointing down. */ - FBSDKTooltipViewArrowDirectionDown = 0, - /** View is located below given point, arrow is pointing up. */ - FBSDKTooltipViewArrowDirectionUp = 1, -} NS_SWIFT_NAME(FBTooltipView.ArrowDirection); - -/** - FBSDKTooltipColorStyle enum - - Passed on construction to determine color styling. - */ -typedef NS_ENUM(NSUInteger, FBSDKTooltipColorStyle) -{ - /** Light blue background, white text, faded blue close button. */ - FBSDKTooltipColorStyleFriendlyBlue = 0, - /** Dark gray background, white text, light gray close button. */ - FBSDKTooltipColorStyleNeutralGray = 1, -} NS_SWIFT_NAME(FBTooltipView.ColorStyle); - -/** - - Tooltip bubble with text in it used to display tips for UI elements, - with a pointed arrow (to refer to the UI element). - - - - The tooltip fades in and will automatically fade out. See `displayDuration`. - */ -NS_SWIFT_NAME(FBTooltipView) -@interface FBSDKTooltipView : UIView - -/** - Gets or sets the amount of time in seconds the tooltip should be displayed. - Set this to zero to make the display permanent until explicitly dismissed. - Defaults to six seconds. - */ -@property (nonatomic, assign) CFTimeInterval displayDuration; - -/** - Gets or sets the color style after initialization. - Defaults to value passed to -initWithTagline:message:colorStyle:. - */ -@property (nonatomic, assign) FBSDKTooltipColorStyle colorStyle; - -/** - Gets or sets the message. - */ -@property (nonatomic, copy, nullable) NSString *message; - -/** - Gets or sets the optional phrase that comprises the first part of the label (and is highlighted differently). - */ -@property (nonatomic, copy, nullable) NSString *tagline; - -/** - Designated initializer. - - @param tagline First part of the label, that will be highlighted with different color. Can be nil. - - @param message Main message to display. - - @param colorStyle Color style to use for tooltip. - - - - If you need to show a tooltip for login, consider using the `FBSDKLoginTooltipView` view. - - - @see FBSDKLoginTooltipView - */ -- (instancetype)initWithTagline:(nullable NSString *)tagline - message:(nullable NSString *)message - colorStyle:(FBSDKTooltipColorStyle)colorStyle; - -/** - Show tooltip at the top or at the bottom of given view. - Tooltip will be added to anchorView.window.rootViewController.view - - @param anchorView view to show at, must be already added to window view hierarchy, in order to decide - where tooltip will be shown. (If there's not enough space at the top of the anchorView in window bounds - - tooltip will be shown at the bottom of it) - - - - Use this method to present the tooltip with automatic positioning or - use -presentInView:withArrowPosition:direction: for manual positioning - If anchorView is nil or has no window - this method does nothing. - */ -- (void)presentFromView:(UIView *)anchorView; - -/** - Adds tooltip to given view, with given position and arrow direction. - - @param view View to be used as superview. - - @param arrowPosition Point in view's cordinates, where arrow will be pointing - - @param arrowDirection whenever arrow should be pointing up (message bubble is below the arrow) or - down (message bubble is above the arrow). - */ -- (void)presentInView:(UIView *)view - withArrowPosition:(CGPoint)arrowPosition - direction:(FBSDKTooltipViewArrowDirection)arrowDirection -NS_SWIFT_NAME(present(in:arrowPosition:direction:)); - -/** - Remove tooltip manually. - - - - Calling this method isn't necessary - tooltip will dismiss itself automatically after the `displayDuration`. - */ -- (void)dismiss; - -@end - -NS_ASSUME_NONNULL_END - -#endif diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKTooltipView.m b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKTooltipView.m deleted file mode 100644 index 5f6bff1b70..0000000000 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/FBSDKTooltipView.m +++ /dev/null @@ -1,613 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKTooltipView.h" - -#import - -#ifdef FBSDKCOCOAPODS -#import -#else -#import "FBSDKCoreKit+Internal.h" -#endif - -static const CGFloat kTransitionDuration = 0.3; -static const CGFloat kZoomOutScale = 0.001f; -static const CGFloat kZoomInScale = 1.1f; -static const CGFloat kZoomBounceScale = 0.98f; - -static const CGFloat kNUXRectInset = 6; -static const CGFloat kNUXBubbleMargin = 17 - kNUXRectInset; -static const CGFloat kNUXPointMargin = -3; -static const CGFloat kNUXCornerRadius = 4; -static const CGFloat kNUXStrokeLineWidth = 0.5f; -static const CGFloat kNUXSideCap = 6; -static const CGFloat kNUXFontSize = 10; -static const CGFloat kNUXCrossGlyphSize = 11; - -static CGMutablePathRef _fbsdkCreateUpPointingBubbleWithRect(CGRect rect, CGFloat arrowMidpoint, CGFloat arrowHeight, CGFloat radius); -static CGMutablePathRef _fbsdkCreateDownPointingBubbleWithRect(CGRect rect, CGFloat arrowMidpoint, CGFloat arrowHeight, CGFloat radius); - -#pragma mark - - -@implementation FBSDKTooltipView -{ - CGPoint _positionInView; - CFAbsoluteTime _displayTime; - CFTimeInterval _minimumDisplayDuration; - UILabel *_textLabel; - UITapGestureRecognizer *_insideTapGestureRecognizer; - CGFloat _leftWidth; - CGFloat _rightWidth; - CGFloat _arrowMidpoint; - BOOL _pointingUp; - BOOL _isFadingOut; - // style - UIColor *_innerStrokeColor; - CGFloat _arrowHeight; - CGFloat _textPadding; - CGFloat _maximumTextWidth; - CGFloat _verticalTextOffset; - CGFloat _verticalCrossOffset; - FBSDKTooltipColorStyle _colorStyle; - NSArray *_gradientColors; - UIColor *_crossCloseGlyphColor; -} - -- (instancetype)initWithTagline:(NSString *)tagline message:(NSString *)message colorStyle:(FBSDKTooltipColorStyle)colorStyle -{ - self = [super initWithFrame:CGRectZero]; - if (self) { - // Define style - _textLabel = [[UILabel alloc] initWithFrame:CGRectZero]; - _textLabel.backgroundColor = [UIColor clearColor]; - _textLabel.autoresizingMask = UIViewAutoresizingFlexibleRightMargin; - _textLabel.numberOfLines = 0; - _textLabel.font = [UIFont boldSystemFontOfSize: kNUXFontSize]; - _textLabel.textAlignment = NSTextAlignmentLeft; - _arrowHeight = 7; - _textPadding = 10; - _maximumTextWidth = 185; - _verticalCrossOffset = - 2.5f; - _verticalTextOffset = 0; - _displayDuration = 6.0; - self.colorStyle = colorStyle; - - _message = [message copy]; - _tagline = [tagline copy]; - [self setMessage:message tagline:tagline]; - [self addSubview:_textLabel]; - - _insideTapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onTapInTooltip:)]; - [self addGestureRecognizer:_insideTapGestureRecognizer]; - - self.opaque = NO; - self.backgroundColor = [UIColor clearColor]; - self.layer.needsDisplayOnBoundsChange = YES; - self.layer.shadowColor = [UIColor blackColor].CGColor; - self.layer.shadowOpacity = 0.5f; - self.layer.shadowOffset = CGSizeMake(0.0f, 2.0f); - self.layer.shadowRadius = 5.0f; - self.layer.masksToBounds = NO; - } - return self; -} - -- (void)dealloc -{ - [_insideTapGestureRecognizer removeTarget:self action:NULL]; -} - -#pragma mark - Public Methods - -- (void)setMessage:(NSString *)message -{ - if (![message isEqualToString:_message]) { - _message = [message copy]; - [self setMessage:_message tagline:self.tagline]; - } -} - -- (void)setTagline:(NSString *)tagline -{ - if (![tagline isEqualToString:_tagline]) { - _tagline = [tagline copy]; - [self setMessage:self.message tagline:_tagline]; - } -} - -#pragma mark Presentation - -- (void)presentFromView:(UIView *)anchorView -{ - UIView *superview = anchorView.window.rootViewController.view; - if (!superview) { - return; - } - - // By default - attach to the top, pointing down - CGPoint position = CGPointMake(CGRectGetMidX(anchorView.bounds), CGRectGetMinY(anchorView.bounds)); - CGPoint positionInSuperview = [superview convertPoint:position fromView:anchorView]; - FBSDKTooltipViewArrowDirection direction = FBSDKTooltipViewArrowDirectionDown; - - // If not enough space to point up from top of anchor view - point up to it's bottom - CGFloat bubbleHeight = CGRectGetHeight(_textLabel.bounds) + _verticalTextOffset + _textPadding * 2; - if (positionInSuperview.y - bubbleHeight - kNUXBubbleMargin < CGRectGetMinY(superview.bounds)) { - direction = FBSDKTooltipViewArrowDirectionUp; - position = CGPointMake(CGRectGetMidX(anchorView.bounds), CGRectGetMaxY(anchorView.bounds)); - positionInSuperview = [superview convertPoint:position fromView:anchorView]; - } - - [self presentInView:superview withArrowPosition:positionInSuperview direction:direction]; -} - -- (void)presentInView:(UIView *)view withArrowPosition:(CGPoint)arrowPosition direction:(FBSDKTooltipViewArrowDirection)arrowDirection -{ - _pointingUp = arrowDirection == FBSDKTooltipViewArrowDirectionUp; - _positionInView = arrowPosition; - self.frame = [self layoutSubviewsAndDetermineFrame]; - - // Add to view, while invisible. - self.hidden = YES; - if (self.superview) { - [self removeFromSuperview]; - } - [view addSubview:self]; - - // Layout & schedule dismissal. - _displayTime = CFAbsoluteTimeGetCurrent(); - _isFadingOut = NO; - [self scheduleAutomaticFadeout]; - [self layoutSubviews]; - - [self animateFadeIn]; -} - -- (void)dismiss -{ - if (_isFadingOut) { - return; - } - _isFadingOut = YES; - - [self animateFadeOutWithCompletion:^{ - [self removeFromSuperview]; - [self cancelAllScheduledFadeOutMethods]; - self->_isFadingOut = NO; - }]; -} - -#pragma mark Style - -- (FBSDKTooltipColorStyle)colorStyle -{ - return _colorStyle; -} - -- (void)setColorStyle:(FBSDKTooltipColorStyle)colorStyle -{ - _colorStyle = colorStyle; - switch (colorStyle) { - case FBSDKTooltipColorStyleNeutralGray: - _gradientColors = @[ - (id)(FBSDKUIColorWithRGB(0x51, 0x50, 0x4f).CGColor), - (id)(FBSDKUIColorWithRGB(0x2d, 0x2c, 0x2c).CGColor) - ]; - _innerStrokeColor = [UIColor colorWithWhite:0.13f alpha:1.0f]; - _crossCloseGlyphColor = [UIColor colorWithWhite:0.69f alpha:1.0f]; - break; - - case FBSDKTooltipColorStyleFriendlyBlue: - default: - _gradientColors = @[ - (id)(FBSDKUIColorWithRGB(0x6e, 0x9c, 0xf5).CGColor), - (id)(FBSDKUIColorWithRGB(0x49, 0x74, 0xc6).CGColor) - ]; - _innerStrokeColor = [UIColor colorWithRed:0.12f green:0.26f blue:0.55f alpha:1.0f]; - _crossCloseGlyphColor = [UIColor colorWithRed:0.60f green:0.73f blue:1.0f alpha:1.0f]; - break; - } - - _textLabel.textColor = [UIColor whiteColor]; -} - -#pragma mark - Private Methods -#pragma mark Animation - -- (void)animateFadeIn -{ - // Prepare Animation: Zoom in with bounce. Keep the arrow point in place. - // Set initial transform (zoomed out) & become visible. - CGFloat centerPos = self.bounds.size.width / 2.0; - CGFloat zoomOffsetX = (centerPos - _arrowMidpoint) * (kZoomOutScale - 1.0f); - CGFloat zoomOffsetY = -0.5f * self.bounds.size.height * (kZoomOutScale - 1.0f); - if (_pointingUp) { - zoomOffsetY = -zoomOffsetY; - } - self.layer.transform = fbsdkdfl_CATransform3DConcat(fbsdkdfl_CATransform3DMakeScale(kZoomOutScale, kZoomOutScale, kZoomOutScale), - fbsdkdfl_CATransform3DMakeTranslation(zoomOffsetX, zoomOffsetY, 0)); - self.hidden = NO; - - // Prepare animation steps - // 1st Step. - void (^zoomIn)(void) = ^{ - self.alpha = 1.0; - - CGFloat newZoomOffsetX = (centerPos - self->_arrowMidpoint) * (kZoomInScale - 1.0f); - CGFloat newZoomOffsetY = -0.5f * self.bounds.size.height * (kZoomInScale - 1.0f); - if (self->_pointingUp) { - newZoomOffsetY = -newZoomOffsetY; - } - - CATransform3D scale = fbsdkdfl_CATransform3DMakeScale(kZoomInScale, kZoomInScale, kZoomInScale); - CATransform3D translate =fbsdkdfl_CATransform3DMakeTranslation(newZoomOffsetX, newZoomOffsetY, 0); - self.layer.transform = fbsdkdfl_CATransform3DConcat(scale, translate); - }; - - // 2nd Step. - void (^bounceZoom)(void) = ^{ - CGFloat centerPos2 = self.bounds.size.width / 2.0; - CGFloat zoomOffsetX2 = (centerPos2 - self->_arrowMidpoint) * (kZoomBounceScale - 1.0f); - CGFloat zoomOffsetY2 = -0.5f * self.bounds.size.height * (kZoomBounceScale - 1.0f); - if (self->_pointingUp) { - zoomOffsetY2 = -zoomOffsetY2; - } - self.layer.transform = fbsdkdfl_CATransform3DConcat(fbsdkdfl_CATransform3DMakeScale(kZoomBounceScale, kZoomBounceScale, kZoomBounceScale), - fbsdkdfl_CATransform3DMakeTranslation(zoomOffsetX2, zoomOffsetY2, 0)); - }; - - // 3rd Step. - void (^normalizeZoom)(void) = ^{ - self.layer.transform = fbsdkdfl_CATransform3DIdentity; - }; - - // Animate 3 steps sequentially - [UIView animateWithDuration:kTransitionDuration/1.5 - delay:0 - options:UIViewAnimationOptionCurveEaseInOut - animations:zoomIn - completion:^(BOOL finished) { - [UIView animateWithDuration:kTransitionDuration/2.2 - animations:bounceZoom - completion:^(BOOL innerFinished) { - [UIView animateWithDuration:kTransitionDuration/5 - animations:normalizeZoom]; - }]; - }]; -} - -- (void) animateFadeOutWithCompletion: (void(^)(void)) completionHandler -{ - [UIView animateWithDuration:0.3 - delay:0 - options:UIViewAnimationOptionCurveEaseInOut - animations:^{ - self.alpha = 0.0; - } - completion:^(BOOL complete) { - if(completionHandler) - completionHandler(); - }]; -} - -#pragma mark Gestures - -- (void)onTapInTooltip:(UIGestureRecognizer*)sender -{ - // ignore incomplete tap gestures - if (sender.state != UIGestureRecognizerStateEnded) { - return; - } - - // fade out the tooltip view right away - [self dismiss]; -} - -#pragma mark Drawing - -CGMutablePathRef _fbsdkCreateUpPointingBubbleWithRect(CGRect rect, CGFloat arrowMidpoint, CGFloat arrowHeight, CGFloat radius) -{ - CGMutablePathRef path = CGPathCreateMutable(); - CGFloat arrowHalfWidth = arrowHeight; - // start with arrow - CGPathMoveToPoint(path, NULL, arrowMidpoint - arrowHalfWidth, CGRectGetMinY(rect)); - CGPathAddLineToPoint(path, NULL, arrowMidpoint, CGRectGetMinY(rect) - arrowHeight); - CGPathAddLineToPoint(path, NULL, arrowMidpoint + arrowHalfWidth, CGRectGetMinY(rect)); - - // rest of curved rectangle - CGPathAddArcToPoint(path, NULL, CGRectGetMaxX(rect), CGRectGetMinY(rect), CGRectGetMaxX(rect), CGRectGetMaxY(rect), radius); - CGPathAddArcToPoint(path, NULL, CGRectGetMaxX(rect), CGRectGetMaxY(rect), CGRectGetMinX(rect), CGRectGetMaxY(rect), radius); - CGPathAddArcToPoint(path, NULL, CGRectGetMinX(rect), CGRectGetMaxY(rect), CGRectGetMinX(rect), CGRectGetMinY(rect), radius); - CGPathAddArcToPoint(path, NULL, CGRectGetMinX(rect), CGRectGetMinY(rect), CGRectGetMaxX(rect), CGRectGetMinY(rect), radius); - CGPathCloseSubpath(path); - return path; -} - -CGMutablePathRef _fbsdkCreateDownPointingBubbleWithRect(CGRect rect, CGFloat arrowMidpoint, CGFloat arrowHeight, CGFloat radius) -{ - CGMutablePathRef path = CGPathCreateMutable(); - CGFloat arrowHalfWidth = arrowHeight; - - // start with arrow - CGPathMoveToPoint(path, NULL, arrowMidpoint + arrowHalfWidth, CGRectGetMaxY(rect)); - CGPathAddLineToPoint(path, NULL, arrowMidpoint, CGRectGetMaxY(rect) + arrowHeight); - CGPathAddLineToPoint(path, NULL, arrowMidpoint - arrowHalfWidth, CGRectGetMaxY(rect)); - - // rest of curved rectangle - CGPathAddArcToPoint(path, NULL, CGRectGetMinX(rect), CGRectGetMaxY(rect), CGRectGetMinX(rect), CGRectGetMinY(rect), radius); - CGPathAddArcToPoint(path, NULL, CGRectGetMinX(rect), CGRectGetMinY(rect), CGRectGetMaxX(rect), CGRectGetMinY(rect), radius); - CGPathAddArcToPoint(path, NULL, CGRectGetMaxX(rect), CGRectGetMinY(rect), CGRectGetMaxX(rect), CGRectGetMaxY(rect), radius); - CGPathAddArcToPoint(path, NULL, CGRectGetMaxX(rect), CGRectGetMaxY(rect), CGRectGetMinX(rect), CGRectGetMaxY(rect), radius); - CGPathCloseSubpath(path); - return path; -} - -static CGMutablePathRef _createCloseCrossGlyphWithRect(CGRect rect) -{ - CGFloat lineThickness = 0.20f * CGRectGetHeight(rect); - - // One rectangle - CGMutablePathRef path1 = CGPathCreateMutable(); - CGPathMoveToPoint(path1, NULL, CGRectGetMinX(rect), CGRectGetMinY(rect) + lineThickness); - CGPathAddLineToPoint(path1, NULL, CGRectGetMinX(rect) + lineThickness, CGRectGetMinY(rect)); - CGPathAddLineToPoint(path1, NULL, CGRectGetMaxX(rect), CGRectGetMaxY(rect) - lineThickness); - CGPathAddLineToPoint(path1, NULL, CGRectGetMaxX(rect) - lineThickness, CGRectGetMaxY(rect)); - CGPathCloseSubpath(path1); - - // 2nd rectangle - mirrored horizontally - CGMutablePathRef path2 = CGPathCreateMutable(); - CGPathMoveToPoint(path2, NULL, CGRectGetMinX(rect), CGRectGetMaxY(rect) - lineThickness); - CGPathAddLineToPoint(path2, NULL, CGRectGetMaxX(rect) - lineThickness, CGRectGetMinY(rect)); - CGPathAddLineToPoint(path2, NULL, CGRectGetMaxX(rect), CGRectGetMinY(rect) + lineThickness); - CGPathAddLineToPoint(path2, NULL, CGRectGetMinX(rect) + lineThickness, CGRectGetMaxY(rect)); - CGPathCloseSubpath(path2); - - CGMutablePathRef groupedPath = CGPathCreateMutable(); - CGPathAddPath(groupedPath, NULL, path1); - CGPathAddPath(groupedPath, NULL, path2); - CFRelease(path1); - CFRelease(path2); - - return groupedPath; -} - -- (void)drawRect:(CGRect)rect -{ - // Ignore dirty rect and just redraw the entire nux bubble - CGFloat arrowSideMargin = 1 + 0.5f * MAX(kNUXRectInset, _arrowHeight); - CGFloat arrowYMarginOffset = _pointingUp ? arrowSideMargin : kNUXRectInset; - CGFloat halfStroke = kNUXStrokeLineWidth / 2.0; - CGRect outerRect = CGRectMake(kNUXRectInset + halfStroke, - arrowYMarginOffset + halfStroke, - self.bounds.size.width - 2 * kNUXRectInset - kNUXStrokeLineWidth, - self.bounds.size.height - kNUXRectInset - arrowSideMargin - kNUXStrokeLineWidth); - outerRect = CGRectInset(outerRect, 5, 5); - CGRect innerRect = CGRectInset(outerRect, kNUXStrokeLineWidth, kNUXStrokeLineWidth); - CGRect fillRect = CGRectInset(innerRect, kNUXStrokeLineWidth/2.0, kNUXStrokeLineWidth/2.0); - CGFloat closeCrossGlyphPositionY = MIN(CGRectGetMinY(fillRect) + _textPadding + _verticalCrossOffset, - CGRectGetMidY(fillRect) - 0.5f * kNUXCrossGlyphSize); - CGRect closeCrossGlyphRect = CGRectMake(CGRectGetMaxX(fillRect) - 2 * kNUXFontSize, closeCrossGlyphPositionY, - kNUXCrossGlyphSize, kNUXCrossGlyphSize); - - // setup and get paths - CGContextRef context = UIGraphicsGetCurrentContext(); - CGMutablePathRef outerPath; - CGMutablePathRef innerPath; - CGMutablePathRef fillPath; - CGMutablePathRef crossCloseGlyphPath = _createCloseCrossGlyphWithRect(closeCrossGlyphRect); - CGRect gradientRect = fillRect; - if (_pointingUp) { - outerPath = _fbsdkCreateUpPointingBubbleWithRect(outerRect, - _arrowMidpoint, _arrowHeight, - kNUXCornerRadius + kNUXStrokeLineWidth); - innerPath = _fbsdkCreateUpPointingBubbleWithRect(innerRect, - _arrowMidpoint, _arrowHeight, - kNUXCornerRadius); - fillPath = _fbsdkCreateUpPointingBubbleWithRect(fillRect, - _arrowMidpoint, _arrowHeight, - kNUXCornerRadius - kNUXStrokeLineWidth); - gradientRect.origin.y -= _arrowHeight; - gradientRect.size.height += _arrowHeight; - } else { - outerPath = _fbsdkCreateDownPointingBubbleWithRect(outerRect, - _arrowMidpoint, _arrowHeight, - kNUXCornerRadius + kNUXStrokeLineWidth); - innerPath = _fbsdkCreateDownPointingBubbleWithRect(innerRect, - _arrowMidpoint, _arrowHeight, - kNUXCornerRadius); - fillPath = _fbsdkCreateDownPointingBubbleWithRect(fillRect, - _arrowMidpoint, _arrowHeight, - kNUXCornerRadius - kNUXStrokeLineWidth); - gradientRect.size.height += _arrowHeight; - } - self.layer.shadowPath = outerPath; - - // This tooltip has two borders, so draw two strokes and a fill. - CGColorRef strokeColor = _innerStrokeColor.CGColor; - CGContextSaveGState(context); - CGContextSetStrokeColorWithColor(context, strokeColor); - CGContextSetLineWidth(context, kNUXStrokeLineWidth); - CGContextAddPath(context, innerPath); - CGContextStrokePath(context); - CGContextAddPath(context, fillPath); - CGContextClip(context); - CGColorSpaceRef rgbColorspace = CGColorSpaceCreateDeviceRGB(); - CGGradientRef gradient = CGGradientCreateWithColors(rgbColorspace, (CFArrayRef)_gradientColors, nil); - CGColorSpaceRelease(rgbColorspace); - CGPoint start = CGPointMake(gradientRect.origin.x, gradientRect.origin.y); - CGPoint end = CGPointMake(gradientRect.origin.x, CGRectGetMaxY(gradientRect)); - CGContextDrawLinearGradient(context, gradient, start, end, 0); - CGContextAddPath(context, crossCloseGlyphPath); - CGContextSetFillColorWithColor(context, _crossCloseGlyphColor.CGColor); - CGContextFillPath(context); - CGGradientRelease(gradient); - CGContextRestoreGState(context); - CFRelease(outerPath); - CFRelease(innerPath); - CFRelease(fillPath); - CFRelease(crossCloseGlyphPath); -} - -#pragma mark Layout - -- (void)layoutSubviews -{ - [super layoutSubviews]; - - // We won't set the frame in layoutSubviews to avoid potential infinite loops. - // Frame is set in -presentInView:withArrowPosition:direction: method. - [self layoutSubviewsAndDetermineFrame]; -} - -- (CGRect)layoutSubviewsAndDetermineFrame -{ - // Compute the positioning of the arrow. - CGRect screenBounds = [UIScreen mainScreen].bounds; - UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation; - if (!UIInterfaceOrientationIsPortrait(orientation)) { - screenBounds = CGRectMake(0, 0, screenBounds.size.height, screenBounds.size.width); - } - CGFloat arrowHalfWidth = _arrowHeight; - CGFloat arrowXPos = _positionInView.x - arrowHalfWidth; - arrowXPos = MAX(arrowXPos, kNUXSideCap + kNUXBubbleMargin); - arrowXPos = MIN(arrowXPos, screenBounds.size.width - kNUXBubbleMargin - kNUXSideCap - 2 * arrowHalfWidth); - _positionInView = CGPointMake(arrowXPos + arrowHalfWidth, _positionInView.y); - - CGFloat arrowYMarginOffset = _pointingUp ? MAX(kNUXRectInset, _arrowHeight) : kNUXRectInset; - - // Set the lock image frame. - CGFloat xPos = kNUXRectInset + _textPadding + kNUXStrokeLineWidth; - CGFloat yPos = arrowYMarginOffset + kNUXStrokeLineWidth + _textPadding; - - // Set the text label frame. - _textLabel.frame = CGRectMake(xPos, - yPos + _verticalTextOffset, // sizing function may not return desired height exactly - CGRectGetWidth(_textLabel.bounds), - CGRectGetHeight(_textLabel.bounds)); - - // Determine the size of the nux bubble. - CGFloat bubbleHeight = CGRectGetHeight(_textLabel.bounds) + _verticalTextOffset + _textPadding * 2; - CGFloat crossGlyphWidth = 2 * kNUXFontSize; - CGFloat bubbleWidth = CGRectGetWidth(_textLabel.bounds) + _textPadding * 2 + kNUXStrokeLineWidth * 2 + crossGlyphWidth; - - // Compute the widths to the left and right of the arrow. - _leftWidth = roundf(0.5f * (bubbleWidth - 2 * arrowHalfWidth)); - _rightWidth = _leftWidth; - CGFloat originX = arrowXPos - _leftWidth; - if (originX < kNUXBubbleMargin) { - CGFloat xShift = kNUXBubbleMargin - originX; - originX += xShift; - _leftWidth -= xShift; - _rightWidth += xShift; - } else if (originX + bubbleWidth > screenBounds.size.width - kNUXBubbleMargin) { - CGFloat xShift = originX + bubbleWidth - (screenBounds.size.width - kNUXBubbleMargin); - originX -= xShift; - _leftWidth += xShift; - _rightWidth -= xShift; - } - - _arrowMidpoint = _positionInView.x - originX + kNUXRectInset; - - // Set the frame for the view. - CGFloat nuxWidth = bubbleWidth + 2 * kNUXRectInset; - CGFloat nuxHeight = bubbleHeight + kNUXRectInset + MAX(kNUXRectInset, _arrowHeight) + 2 * kNUXStrokeLineWidth; - CGFloat yOrigin = 0; - if (_pointingUp) { - yOrigin = _positionInView.y + kNUXPointMargin - MAX(0, kNUXRectInset - _arrowHeight); - } else { - yOrigin = _positionInView.y - nuxHeight - kNUXPointMargin + MAX(0, kNUXRectInset - _arrowHeight); - } - - return CGRectMake(originX - kNUXRectInset, - yOrigin, - nuxWidth, - nuxHeight); -} - -#pragma mark Message & Tagline - -- (void)setMessage:(NSString *)message tagline:(NSString *)tagline -{ - message = message ?: @""; - // Ensure tagline is empty string or ends with space - tagline = tagline ?: @""; - if (tagline.length && ![tagline hasSuffix:@" "]) - tagline = [tagline stringByAppendingString:@" "]; - - // Concatenate tagline & main message - message = [tagline stringByAppendingString:message]; - - NSRange fullRange = NSMakeRange(0, message.length); - NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString: message]; - - UIFont *font=[UIFont boldSystemFontOfSize:kNUXFontSize]; - [attrString addAttribute:NSFontAttributeName value:font range:fullRange]; - [attrString addAttribute:NSForegroundColorAttributeName value:[UIColor whiteColor] range:fullRange]; - if (tagline.length) { - [attrString addAttribute:NSForegroundColorAttributeName value: FBSDKUIColorWithRGB(0x6D, 0x87, 0xC7) range:NSMakeRange(0, tagline.length)]; - } - - _textLabel.attributedText = attrString; - - CGSize textLabelSize = [_textLabel sizeThatFits:CGSizeMake(_maximumTextWidth, MAXFLOAT)]; - _textLabel.bounds = CGRectMake(0, 0, textLabelSize.width, textLabelSize.height); - self.frame = [self layoutSubviewsAndDetermineFrame]; - [self setNeedsDisplay]; -} - -#pragma mark Auto Dismiss Timeout - -- (void)scheduleAutomaticFadeout -{ - [[self class] cancelPreviousPerformRequestsWithTarget:self selector:@selector(scheduleFadeoutRespectingMinimumDisplayDuration) object:nil]; - - if (_displayDuration > 0.0 && self.superview) { - CFTimeInterval intervalAlreadyDisplaying = CFAbsoluteTimeGetCurrent() - _displayTime; - CFTimeInterval timeRemainingBeforeAutomaticFadeout = _displayDuration - intervalAlreadyDisplaying; - if (timeRemainingBeforeAutomaticFadeout > 0.0) { - [self performSelector:@selector(scheduleFadeoutRespectingMinimumDisplayDuration) withObject:nil afterDelay:timeRemainingBeforeAutomaticFadeout]; - } else { - [self scheduleFadeoutRespectingMinimumDisplayDuration]; - } - } -} - -- (void)scheduleFadeoutRespectingMinimumDisplayDuration -{ - CFTimeInterval intervalAlreadyDisplaying = CFAbsoluteTimeGetCurrent() - _displayTime; - CFTimeInterval remainingDisplayTime = _minimumDisplayDuration - intervalAlreadyDisplaying; - if (remainingDisplayTime > 0.0) { - [self performSelector:@selector(dismiss) withObject:nil afterDelay:remainingDisplayTime]; - } else { - [self dismiss]; - } -} - -- (void)cancelAllScheduledFadeOutMethods -{ - [[self class] cancelPreviousPerformRequestsWithTarget:self selector:@selector(scheduleFadeoutRespectingMinimumDisplayDuration) object:nil]; - [[self class] cancelPreviousPerformRequestsWithTarget:self selector:@selector(dismiss) object:nil]; -} - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKDeviceLoginCodeInfo+Internal.h b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKDeviceLoginCodeInfo+Internal.h deleted file mode 100644 index cf021e1101..0000000000 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKDeviceLoginCodeInfo+Internal.h +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -#import "FBSDKDeviceLoginCodeInfo.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FBSDKDeviceLoginCodeInfo () - -/*! - @abstract Initializes a new instance - @param identifier the unique id for this login flow instance. - @param loginCode the short "user_code". - @param verificationURL the verification URL. - @param expirationDate expiration date. - @param pollingInterval time between polling. - */ -- (instancetype)initWithIdentifier:(NSString *)identifier - loginCode:(NSString *)loginCode - verificationURL:(NSURL *)verificationURL - expirationDate:(NSDate *)expirationDate - pollingInterval:(NSUInteger)pollingInterval NS_DESIGNATED_INITIALIZER; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKDeviceLoginManagerResult+Internal.h b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKDeviceLoginManagerResult+Internal.h deleted file mode 100644 index a3b683c191..0000000000 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKDeviceLoginManagerResult+Internal.h +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import - -#if defined BUCK || defined FBSDKCOCOAPODS -#import -#else -@import FBSDKCoreKit; -#endif - -#import "FBSDKDeviceLoginManagerResult.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FBSDKDeviceLoginManagerResult () - -/*! - @abstract Initializes a new instance - @param token The token - @param cancelled Indicates if the flow was cancelled. - */ -- (instancetype)initWithToken:(nullable FBSDKAccessToken *)token - isCancelled:(BOOL)cancelled NS_DESIGNATED_INITIALIZER; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginCompletion+Internal.h b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginCompletion+Internal.h deleted file mode 100644 index 118407a21c..0000000000 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginCompletion+Internal.h +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKLoginCompletion.h" - -@interface FBSDKLoginCompletionParameters () - -@property (nonatomic, copy) NSString *accessTokenString; -@property (nonatomic, copy) NSString *nonceString; - -@property (nonatomic, copy) NSSet *permissions; -@property (nonatomic, copy) NSSet *declinedPermissions; -@property (nonatomic, copy) NSSet *expiredPermissions; - -@property (nonatomic, copy) NSString *appID; -@property (nonatomic, copy) NSString *userID; - -@property (nonatomic, copy) NSError *error; - -@property (nonatomic, copy) NSDate *expirationDate; -@property (nonatomic, copy) NSDate *dataAccessExpirationDate; - -@property (nonatomic, copy) NSString *challenge; - -@property (nonatomic, copy) NSString *graphDomain; - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginCompletion.h b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginCompletion.h deleted file mode 100644 index 0efe5136c2..0000000000 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginCompletion.h +++ /dev/null @@ -1,96 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import - -@class FBSDKLoginManager; -@class FBSDKLoginCompletionParameters; - -/** - Success Block - */ -typedef void (^FBSDKLoginCompletionParametersBlock)(FBSDKLoginCompletionParameters *parameters) -NS_SWIFT_NAME(LoginCompletionParametersBlock); - -/** - Structured interface for accessing the parameters used to complete a log in request. - If \c accessTokenString is non-nil, the authentication succeeded. If \c error is - non-nil the request failed. If both are \c nil, the request was cancelled. - */ -NS_SWIFT_NAME(LoginCompletionParameters) -@interface FBSDKLoginCompletionParameters : NSObject - -- (instancetype)init NS_DESIGNATED_INITIALIZER; -- (instancetype)initWithError:(NSError *)error; - -@property (nonatomic, copy, readonly) NSString *accessTokenString; -@property (nonatomic, copy, readonly) NSString *nonceString; - -@property (nonatomic, copy, readonly) NSSet *permissions; -@property (nonatomic, copy, readonly) NSSet *declinedPermissions; -@property (nonatomic, copy, readonly) NSSet *expiredPermissions; - -@property (nonatomic, copy, readonly) NSString *appID; -@property (nonatomic, copy, readonly) NSString *userID; - -@property (nonatomic, copy, readonly) NSError *error; - -@property (nonatomic, copy, readonly) NSDate *expirationDate; -@property (nonatomic, copy, readonly) NSDate *dataAccessExpirationDate; - -@property (nonatomic, copy, readonly) NSString *challenge; - -@property (nonatomic, copy, readonly) NSString *graphDomain; -@end - -NS_SWIFT_NAME(LoginCompleting) -@protocol FBSDKLoginCompleting - -/** - Invoke \p handler with the login parameters derived from the authentication result. - See the implementing class's documentation for whether it completes synchronously or asynchronously. - */ -- (void)completeLoginWithHandler:(FBSDKLoginCompletionParametersBlock)handler; - -@end - -#pragma mark - Completers - -/** - Extracts the log in completion parameters from the \p parameters dictionary, - which must contain the parsed result of the return URL query string. - - The \c user_id key is first used to derive the User ID. If that fails, \c signed_request - is used. - - Completion occurs synchronously. - */ -NS_SWIFT_NAME(LoginURLCompleter) -@interface FBSDKLoginURLCompleter : NSObject - -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; -- (instancetype)initWithURLParameters:(NSDictionary *)parameters appID:(NSString *)appID NS_DESIGNATED_INITIALIZER; - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginCompletion.m b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginCompletion.m deleted file mode 100644 index 7db05098b2..0000000000 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginCompletion.m +++ /dev/null @@ -1,291 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKLoginCompletion+Internal.h" - -#if SWIFT_PACKAGE -@import FBSDKCoreKit; -#else -#import -#endif - -#import "FBSDKLoginConstants.h" -#import "FBSDKLoginError.h" -#import "FBSDKLoginManager+Internal.h" -#import "FBSDKLoginUtility.h" - -static void FBSDKLoginRequestMeAndPermissions(FBSDKLoginCompletionParameters *parameters, void(^completionBlock)(void)) -{ - __block NSUInteger pendingCount = 1; - void(^didCompleteBlock)(void) = ^{ - if (--pendingCount == 0) { - completionBlock(); - } - }; - - NSString *tokenString = parameters.accessTokenString; - FBSDKGraphRequestConnection *connection = [[FBSDKGraphRequestConnection alloc] init]; - - pendingCount++; - FBSDKGraphRequest *userIDRequest = [[FBSDKGraphRequest alloc] initWithGraphPath:@"me" - parameters:@{ @"fields" : @"id" } - tokenString:tokenString - HTTPMethod:nil - flags:FBSDKGraphRequestFlagDoNotInvalidateTokenOnError | FBSDKGraphRequestFlagDisableErrorRecovery]; - - [connection addRequest:userIDRequest completionHandler:^(FBSDKGraphRequestConnection *requestConnection, - id result, - NSError *error) { - parameters.userID = result[@"id"]; - if (error) { - parameters.error = error; - } - didCompleteBlock(); - }]; - - pendingCount++; - FBSDKGraphRequest *permissionsRequest = [[FBSDKGraphRequest alloc] initWithGraphPath:@"me/permissions" - parameters:@{@"fields":@""} - tokenString:tokenString - HTTPMethod:nil - flags:FBSDKGraphRequestFlagDoNotInvalidateTokenOnError | FBSDKGraphRequestFlagDisableErrorRecovery]; - - [connection addRequest:permissionsRequest completionHandler:^(FBSDKGraphRequestConnection *requestConnection, - id result, - NSError *error) { - NSMutableSet *grantedPermissions = [NSMutableSet set]; - NSMutableSet *declinedPermissions = [NSMutableSet set]; - NSMutableSet *expiredPermissions = [NSMutableSet set]; - - [FBSDKInternalUtility extractPermissionsFromResponse:result - grantedPermissions:grantedPermissions - declinedPermissions:declinedPermissions - expiredPermissions:expiredPermissions]; - - parameters.permissions = [grantedPermissions copy]; - parameters.declinedPermissions = [declinedPermissions copy]; - parameters.expiredPermissions = [expiredPermissions copy]; - if (error) { - parameters.error = error; - } - didCompleteBlock(); - }]; - - [connection start]; - didCompleteBlock(); -} - -@implementation FBSDKLoginCompletionParameters - -- (instancetype)init -{ - return [super init]; -} - -- (instancetype)initWithError:(NSError *)error -{ - if ((self = [self init]) != nil) { - self.error = error; - } - return self; -} - -@end - -#pragma mark - Completers - -@implementation FBSDKLoginURLCompleter -{ - FBSDKLoginCompletionParameters *_parameters; - id _observer; - BOOL _performExplicitFallback; -} - -- (instancetype)initWithURLParameters:(NSDictionary *)parameters appID:(NSString *)appID -{ - if ((self = [super init]) != nil) { - _parameters = [[FBSDKLoginCompletionParameters alloc] init]; - - _parameters.accessTokenString = parameters[@"access_token"]; - _parameters.nonceString = parameters[@"nonce"]; - - if (_parameters.accessTokenString.length > 0 || _parameters.nonceString.length > 0) { - [self setParametersWithDictionary:parameters appID:appID]; - } else { - _parameters.accessTokenString = nil; - [self setErrorWithDictionary:parameters]; - } - } - return self; -} - -- (void)completeLoginWithHandler:(FBSDKLoginCompletionParametersBlock)handler -{ - if (_parameters.nonceString) { - [self _exchangeNonceForTokenWithHandler:handler]; - return; - } else if (_parameters.accessTokenString && !_parameters.userID) { - void(^handlerCopy)(FBSDKLoginCompletionParameters *) = [handler copy]; - FBSDKLoginRequestMeAndPermissions(_parameters, ^{ - handlerCopy(self->_parameters); - }); - return; - } - - handler(_parameters); -} - -- (void)setParametersWithDictionary:(NSDictionary *)parameters appID:(NSString *)appID -{ - NSString *grantedPermissionsString = parameters[@"granted_scopes"]; - NSString *declinedPermissionsString = parameters[@"denied_scopes"]; - - NSString *signedRequest = parameters[@"signed_request"]; - NSString *userID = parameters[@"user_id"]; - - // check the string length so that we assign an empty set rather than a set with an empty string - _parameters.permissions = (grantedPermissionsString.length > 0) - ? [NSSet setWithArray:[grantedPermissionsString componentsSeparatedByString:@","]] - : [NSSet set]; - _parameters.declinedPermissions = (declinedPermissionsString.length > 0) - ? [NSSet setWithArray:[declinedPermissionsString componentsSeparatedByString:@","]] - : [NSSet set]; - - _parameters.expiredPermissions = [NSSet set]; - - _parameters.appID = appID; - - if (userID.length == 0 && signedRequest.length > 0) { - _parameters.userID = [FBSDKLoginUtility userIDFromSignedRequest:signedRequest]; - } else { - _parameters.userID = userID; - } - - NSString *expirationDateString = parameters[@"expires"] ?: parameters[@"expires_at"]; - NSDate *expirationDate = [NSDate distantFuture]; - if (expirationDateString && expirationDateString.doubleValue > 0) { - expirationDate = [NSDate dateWithTimeIntervalSince1970:expirationDateString.doubleValue]; - } else if (parameters[@"expires_in"] && [parameters[@"expires_in"] integerValue] > 0) { - expirationDate = [NSDate dateWithTimeIntervalSinceNow:[parameters[@"expires_in"] integerValue]]; - } - _parameters.expirationDate = expirationDate; - - NSDate *dataAccessExpirationDate = [NSDate distantFuture]; - if (parameters[@"data_access_expiration_time"] && [parameters[@"data_access_expiration_time"] integerValue] > 0) { - dataAccessExpirationDate = [NSDate dateWithTimeIntervalSince1970:[parameters[@"data_access_expiration_time"] integerValue]]; - } - _parameters.dataAccessExpirationDate = dataAccessExpirationDate; - - NSError *error = nil; - NSDictionary *state = [FBSDKBasicUtility objectForJSONString:parameters[@"state"] error:&error]; - _parameters.challenge = [FBSDKUtility URLDecode:state[@"challenge"]]; - - NSString *domain = parameters[@"graph_domain"]; - _parameters.graphDomain = [domain copy]; -} - -- (void)setErrorWithDictionary:(NSDictionary *)parameters -{ - NSString *legacyErrorReason = parameters[@"error"]; - - if ([legacyErrorReason isEqualToString:@"service_disabled_use_browser"] || - [legacyErrorReason isEqualToString:@"service_disabled"]) { - _performExplicitFallback = YES; - } - - // if error is nil, then this should be processed as a cancellation unless - // _performExplicitFallback is set to YES and the log in behavior is Native. - _parameters.error = [NSError fbErrorFromReturnURLParameters:parameters]; -} - -- (void)attemptBrowserLogIn:(FBSDKLoginManager *)loginManager { - if (_observer != nil) { - [[NSNotificationCenter defaultCenter] removeObserver:_observer]; - _observer = nil; - } - - if ([FBSDKBridgeAPI sharedInstance].isActive) { - [loginManager logIn]; - } else { - // The application is active but due to notification ordering the FBSDKApplicationDelegate - // doesn't know it yet. Wait one more turn of the run loop. - dispatch_async(dispatch_get_main_queue(), ^{ - [self attemptBrowserLogIn:loginManager]; - }); - } -} - -- (void)_exchangeNonceForTokenWithHandler:(FBSDKLoginCompletionParametersBlock)handler -{ - if (!handler) { - return; - } - - NSString *nonce = _parameters.nonceString ?: @""; - NSString *appID = [FBSDKSettings appID] ?: @""; - - if (nonce.length == 0 || appID.length == 0) { - _parameters.error = [FBSDKError errorWithCode:FBSDKErrorInvalidArgument message:@"Missing required parameters to exchange nonce for access token."]; - - handler(_parameters); - return; - } - - FBSDKGraphRequestConnection *connection = [[FBSDKGraphRequestConnection alloc] init]; - FBSDKGraphRequest *tokenRequest = [[FBSDKGraphRequest alloc] - initWithGraphPath:@"oauth/access_token" - parameters:@{ @"grant_type" : @"fb_exchange_nonce", - @"fb_exchange_nonce" : nonce, - @"client_id" : appID, - @"fields" : @"" } - flags:FBSDKGraphRequestFlagDoNotInvalidateTokenOnError | - FBSDKGraphRequestFlagDisableErrorRecovery]; - __block FBSDKLoginCompletionParameters *parameters = _parameters; - [connection addRequest:tokenRequest completionHandler:^(FBSDKGraphRequestConnection *requestConnection, - id result, - NSError *error) { - if (!error) { - parameters.accessTokenString = result[@"access_token"]; - NSDate *expirationDate = [NSDate distantFuture]; - if (result[@"expires_in"] && [result[@"expires_in"] integerValue] > 0) { - expirationDate = [NSDate dateWithTimeIntervalSinceNow:[result[@"expires_in"] integerValue]]; - } - parameters.expirationDate = expirationDate; - - NSDate *dataAccessExpirationDate = [NSDate distantFuture]; - if (result[@"data_access_expiration_time"] && [result[@"data_access_expiration_time"] integerValue] > 0) { - dataAccessExpirationDate = [NSDate dateWithTimeIntervalSince1970:[result[@"data_access_expiration_time"] integerValue]]; - } - parameters.dataAccessExpirationDate = dataAccessExpirationDate; - } else { - parameters.error = error; - } - - handler(parameters); - }]; - - [connection start]; -} - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginError.h b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginError.h deleted file mode 100644 index af51ee7f9e..0000000000 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginError.h +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import - -#import "FBSDKLoginConstants.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface NSError (FBSDKLoginError) - -+ (NSError *)fbErrorForFailedLoginWithCode:(FBSDKLoginError)code; -+ (NSError *)fbErrorForSystemPasswordChange:(NSError *)innerError; - -+ (nullable NSError *)fbErrorFromReturnURLParameters:(NSDictionary *)parameters; -+ (nullable NSError *)fbErrorFromServerError:(NSError *)serverError; - -@end - -NS_ASSUME_NONNULL_END - -#endif diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginError.m b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginError.m deleted file mode 100644 index e0bc88b1e8..0000000000 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginError.m +++ /dev/null @@ -1,227 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKLoginError.h" - -#ifdef FBSDKCOCOAPODS -#import -#else -#import "FBSDKCoreKit+Internal.h" -#endif - -#ifndef NS_ERROR_ENUM -#define NS_ERROR_ENUM(_domain, _name) \ -enum _name: NSInteger _name; \ -enum __attribute__((ns_error_domain(_domain))) _name: NSInteger -#endif - -typedef NS_ERROR_ENUM(FBSDKLoginErrorDomain, FBSDKLoginErrorSubcode) -{ - FBSDKLoginErrorSubcodeUserCheckpointed = 459, - FBSDKLoginErrorSubcodePasswordChanged = 460, - FBSDKLoginErrorSubcodeUnconfirmedUser = 464, -}; - -@implementation NSError (FBSDKLoginError) - -+ (NSError *)fbErrorForFailedLoginWithCode:(FBSDKLoginError)code -{ - return [self fbErrorForFailedLoginWithCode:code innerError:nil]; -} - -+ (NSError *)fbErrorForFailedLoginWithCode:(FBSDKLoginError)code - innerError:(NSError *)innerError -{ - NSMutableDictionary *userInfo = [NSMutableDictionary dictionary]; - - [FBSDKBasicUtility dictionary:userInfo setObject:innerError forKey:NSUnderlyingErrorKey]; - - NSString *errorDomain = FBSDKLoginErrorDomain; - NSString *localizedDescription = nil; - - switch ((NSInteger)code) { - case FBSDKErrorNetwork: - errorDomain = FBSDKErrorDomain; - localizedDescription = - NSLocalizedStringWithDefaultValue(@"LoginError.SystemAccount.Network", @"FacebookSDK", [FBSDKInternalUtility bundleForStrings], - @"Unable to connect to Facebook. Check your network connection and try again.", - @"The user facing error message when the Accounts framework encounters a network error."); - break; - case FBSDKLoginErrorUserCheckpointed: - localizedDescription = - NSLocalizedStringWithDefaultValue(@"LoginError.SystemAccount.UserCheckpointed", @"FacebookSDK", [FBSDKInternalUtility bundleForStrings], - @"You cannot log in to apps at this time. Please log in to www.facebook.com and follow the instructions given.", - @"The user facing error message when the Facebook account signed in to the Accounts framework has been checkpointed."); - break; - case FBSDKLoginErrorUnconfirmedUser: - localizedDescription = - NSLocalizedStringWithDefaultValue(@"LoginError.SystemAccount.UnconfirmedUser", @"FacebookSDK", [FBSDKInternalUtility bundleForStrings], - @"Your account is not confirmed. Please log in to www.facebook.com and follow the instructions given.", - @"The user facing error message when the Facebook account signed in to the Accounts framework becomes unconfirmed."); - break; - case FBSDKLoginErrorSystemAccountAppDisabled: - localizedDescription = - NSLocalizedStringWithDefaultValue(@"LoginError.SystemAccount.Disabled", @"FacebookSDK", [FBSDKInternalUtility bundleForStrings], - @"Access has not been granted to the Facebook account. Verify device settings.", - @"The user facing error message when the app slider has been disabled and login fails."); - break; - case FBSDKLoginErrorSystemAccountUnavailable: - localizedDescription = - NSLocalizedStringWithDefaultValue(@"LoginError.SystemAccount.Unavailable", @"FacebookSDK", [FBSDKInternalUtility bundleForStrings], - @"The Facebook account has not been configured on the device.", - @"The user facing error message when the device Facebook account is unavailable and login fails."); - break; - default: - break; - } - - [FBSDKBasicUtility dictionary:userInfo setObject:localizedDescription forKey:NSLocalizedDescriptionKey]; - [FBSDKBasicUtility dictionary:userInfo setObject:localizedDescription forKey:FBSDKErrorLocalizedDescriptionKey]; - - return [NSError errorWithDomain:errorDomain - code:code - userInfo:userInfo]; -} - -+ (NSError *)fbErrorForSystemPasswordChange:(NSError *)innerError -{ - NSString *failureReasonAndDescription = - NSLocalizedStringWithDefaultValue(@"LoginError.SystemAccount.PasswordChange", @"FacebookSDK", [FBSDKInternalUtility bundleForStrings], - @"Your Facebook password has changed. To confirm your password, open Settings > Facebook and tap your name.", - @"The user facing error message when the device Facebook account password is incorrect and login fails."); - NSMutableDictionary *userInfo = [NSMutableDictionary dictionaryWithObjectsAndKeys: - failureReasonAndDescription, FBSDKErrorLocalizedDescriptionKey, - failureReasonAndDescription, NSLocalizedDescriptionKey, - nil]; - - [FBSDKBasicUtility dictionary:userInfo setObject:innerError forKey:NSUnderlyingErrorKey]; - - return [NSError errorWithDomain:FBSDKLoginErrorDomain - code:FBSDKLoginErrorPasswordChanged - userInfo:userInfo]; -} - -+ (NSError *)fbErrorFromReturnURLParameters:(NSDictionary *)parameters -{ - NSError *error = nil; - - NSMutableDictionary *userInfo = [[NSMutableDictionary alloc] init]; - [FBSDKBasicUtility dictionary:userInfo setObject:parameters[@"error_message"] forKey:FBSDKErrorDeveloperMessageKey]; - - if (userInfo.count > 0) { - [FBSDKBasicUtility dictionary:userInfo setObject:parameters[@"error"] forKey:FBSDKErrorDeveloperMessageKey]; - [FBSDKBasicUtility dictionary:userInfo setObject:parameters[@"error_code"] forKey:FBSDKGraphRequestErrorGraphErrorCodeKey]; - - if (!userInfo[FBSDKErrorDeveloperMessageKey]) { - [FBSDKBasicUtility dictionary:userInfo setObject:parameters[@"error_reason"] forKey:FBSDKErrorDeveloperMessageKey]; - } - - userInfo[FBSDKGraphRequestErrorKey] = @(FBSDKGraphRequestErrorOther); - - error = [NSError errorWithDomain:FBSDKErrorDomain - code:FBSDKErrorGraphRequestGraphAPI - userInfo:userInfo]; - } - - return error; -} - -+ (NSError *)fbErrorFromServerError:(NSError *)serverError -{ - NSError *loginError = nil; - - if ([serverError.domain isEqualToString:FBSDKErrorDomain]) { - NSDictionary *response = [FBSDKTypeUtility dictionaryValue:serverError.userInfo[FBSDKGraphRequestErrorParsedJSONResponseKey]]; - NSDictionary *body = [FBSDKTypeUtility dictionaryValue:response[@"body"]]; - NSDictionary *error = [FBSDKTypeUtility dictionaryValue:body[@"error"]]; - NSInteger subcode = [FBSDKTypeUtility integerValue:error[@"error_subcode"]]; - - switch (subcode) { - case FBSDKLoginErrorSubcodeUserCheckpointed: - loginError = [self fbErrorForFailedLoginWithCode:FBSDKLoginErrorUserCheckpointed - innerError:serverError]; - break; - case FBSDKLoginErrorSubcodePasswordChanged: - loginError = [self fbErrorForFailedLoginWithCode:FBSDKLoginErrorPasswordChanged - innerError:serverError]; - break; - case FBSDKLoginErrorSubcodeUnconfirmedUser: - loginError = [self fbErrorForFailedLoginWithCode:FBSDKLoginErrorUnconfirmedUser - innerError:serverError]; - break; - } - } - - return loginError; -} - -+ (NSError *)fbErrorWithSystemAccountStoreDeniedError:(NSError *)accountStoreError - isCancellation:(BOOL *)cancellation -{ - // The Accounts framework returns an ACErrorPermissionDenied error for both user denied errors, - // Facebook denied errors, and other things. Unfortunately examining the contents of the - // description is the only means available to determine the reason for the error. - NSString *description = accountStoreError.userInfo[NSLocalizedDescriptionKey]; - NSError *err = nil; - - if (description) { - // If a parenthetical error code exists, map it ot a Facebook server error - FBSDKLoginError errorCode = FBSDKLoginErrorReserved; - if ([description rangeOfString:@"(459)"].location != NSNotFound) { - // The Facebook server could not fulfill this access request: Error validating access token: - // You cannot access the app till you log in to www.facebook.com and follow the instructions given. (459) - - // The OAuth endpoint directs people to www.facebook.com when an account has been - // checkpointed. If the web address is present, assume it's due to a checkpoint. - errorCode = FBSDKLoginErrorUserCheckpointed; - } else if ([description rangeOfString:@"(452)"].location != NSNotFound || - [description rangeOfString:@"(460)"].location != NSNotFound) { - // The Facebook server could not fulfill this access request: Error validating access token: - // Session does not match current stored session. This may be because the user changed the password since - // the time the session was created or Facebook has changed the session for security reasons. (452)or(460) - - // If the login failed due to the session changing, maybe it's due to the password - // changing. Direct the user to update the password in the Settings > Facebook. - err = [self fbErrorForSystemPasswordChange:accountStoreError]; - } else if ([description rangeOfString:@"(464)"].location != NSNotFound) { - // The Facebook server could not fulfill this access request: Error validating access token: - // Sessions for the user are not allowed because the user is not a confirmed user. (464) - errorCode = FBSDKLoginErrorUnconfirmedUser; - } - - if (errorCode != FBSDKLoginErrorReserved) { - err = [self fbErrorForFailedLoginWithCode:errorCode]; - } - } else { - // If there is no description, assume this is a user cancellation. No error object is - // returned for a cancellation. - if (cancellation != NULL) { - *cancellation = YES; - } - } - - return err; -} - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginKit+Internal.h b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginKit+Internal.h deleted file mode 100644 index a94b7cdc82..0000000000 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginKit+Internal.h +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "../FBSDKLoginKit.h" - -#import "FBSDKLoginCompletion+Internal.h" -#import "FBSDKLoginError.h" -#import "FBSDKLoginManager+Internal.h" -#import "FBSDKLoginUtility.h" diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginManager+Internal.h b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginManager+Internal.h deleted file mode 100644 index cc05176e03..0000000000 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginManager+Internal.h +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import - -#ifdef FBSDKCOCOAPODS -#import -#else -#import "FBSDKCoreKit+Internal.h" -#endif - -#import "FBSDKLoginManager.h" - -@class FBSDKAccessToken; -@class FBSDKLoginCompletionParameters; - -/** - Success Block - */ -typedef void (^FBSDKBrowserLoginSuccessBlock)(BOOL didOpen, NSError *error) -NS_SWIFT_NAME(BrowserLoginSuccessBlock); - -@interface FBSDKLoginManager () -@property (nonatomic, weak) UIViewController *fromViewController; -@property (nonatomic, readonly) NSSet *requestedPermissions; - -// for testing only -@property (nonatomic, readonly, copy) NSString *loadExpectedChallenge; - -- (void)completeAuthentication:(FBSDKLoginCompletionParameters *)parameters expectChallenge:(BOOL)expectChallenge; - -// available to internal types to trigger login without checking read/publish mixtures. -- (void)logInWithPermissions:(NSSet *)permissions handler:(FBSDKLoginManagerLoginResultBlock)handler; -- (void)logIn; - -// made available for testing only -- (NSDictionary *)logInParametersWithPermissions:(NSSet *)permissions serverConfiguration:(FBSDKServerConfiguration *)serverConfiguration; -// made available for testing only -- (void)validateReauthentication:(FBSDKAccessToken *)currentToken withResult:(FBSDKLoginManagerLoginResult *)loginResult; - -// for testing only -- (void)setHandler:(FBSDKLoginManagerLoginResultBlock)handler; -// for testing only -- (void)setRequestedPermissions:(NSSet *)requestedPermissions; -// for testing only -- (void)performBrowserLogInWithParameters:(NSDictionary *)loginParams handler:(FBSDKBrowserLoginSuccessBlock)handler; - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginManagerLogger.h b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginManagerLogger.h deleted file mode 100644 index 5c2ea0947e..0000000000 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginManagerLogger.h +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKLoginManager+Internal.h" - -FOUNDATION_EXPORT NSString *const FBSDKLoginManagerLoggerAuthMethod_Native; -FOUNDATION_EXPORT NSString *const FBSDKLoginManagerLoggerAuthMethod_Browser; -FOUNDATION_EXPORT NSString *const FBSDKLoginManagerLoggerAuthMethod_SFVC; - - -NS_SWIFT_NAME(LoginManagerLogger) -@interface FBSDKLoginManagerLogger : NSObject -+ (FBSDKLoginManagerLogger *)loggerFromParameters:(NSDictionary *)parameters; - -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; - -- (instancetype)initWithLoggingToken:(NSString *)loggingToken NS_DESIGNATED_INITIALIZER; - -// this must not retain loginManager - only used to conveniently grab various properties to log. -- (void)startSessionForLoginManager:(FBSDKLoginManager *)loginManager; -- (void)endSession; - -- (void)startAuthMethod:(NSString *)authMethod; -- (void)endLoginWithResult:(FBSDKLoginManagerLoginResult *)result error:(NSError *)error; - -- (NSDictionary *)parametersWithTimeStampAndClientState:(NSDictionary *)loginParams forAuthMethod:(NSString *)authMethod; -- (void)willAttemptAppSwitchingBehavior; - -- (void)logNativeAppDialogResult:(BOOL)result dialogDuration:(NSTimeInterval)dialogDuration; -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginManagerLogger.m b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginManagerLogger.m deleted file mode 100644 index d90a794d7e..0000000000 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginManagerLogger.m +++ /dev/null @@ -1,283 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKLoginManagerLogger.h" - -#ifdef FBSDKCOCOAPODS -#import -#else -#import "FBSDKCoreKit+Internal.h" -#endif -#import "FBSDKLoginError.h" -#import "FBSDKLoginManagerLoginResult+Internal.h" -#import "FBSDKLoginUtility.h" - -NSString *const FBSDKLoginManagerLoggerAuthMethod_Native = @"fb_application_web_auth"; -NSString *const FBSDKLoginManagerLoggerAuthMethod_Browser = @"browser_auth"; -NSString *const FBSDKLoginManagerLoggerAuthMethod_SFVC = @"sfvc_auth"; - -static NSString *const FBSDKLoginManagerLoggingClientStateKey = @"state"; -static NSString *const FBSDKLoginManagerLoggingClientStateIsClientState = @"com.facebook.sdk_client_state"; - -static NSString *const FBSDKLoginManagerLoggerParamIdentifierKey = @"0_auth_logger_id"; -static NSString *const FBSDKLoginManagerLoggerParamTimestampKey = @"1_timestamp_ms"; -static NSString *const FBSDKLoginManagerLoggerParamResultKey = @"2_result"; -static NSString *const FBSDKLoginManagerLoggerParamAuthMethodKey = @"3_method"; -static NSString *const FBSDKLoginManagerLoggerParamErrorCodeKey = @"4_error_code"; -static NSString *const FBSDKLoginManagerLoggerParamErrorMessageKey = @"5_error_message"; -static NSString *const FBSDKLoginManagerLoggerParamExtrasKey = @"6_extras"; -static NSString *const FBSDKLoginManagerLoggerParamLoggingTokenKey = @"7_logging_token"; - -static NSString *const FBSDKLoginManagerLoggerValueEmpty = @""; - -static NSString *const FBSDKLoginManagerLoggerResultSuccessString = @"success"; -static NSString *const FBSDKLoginManagerLoggerResultCancelString = @"cancelled"; -static NSString *const FBSDKLoginManagerLoggerResultErrorString = @"error"; -static NSString *const FBSDKLoginManagerLoggerResultSkippedString = @"skipped"; - -static NSString *const FBSDKLoginManagerLoggerTryNative = @"tryFBAppAuth"; -static NSString *const FBSDKLoginManagerLoggerTryBrowser = @"trySafariAuth"; - -@implementation FBSDKLoginManagerLogger -{ -@private - NSString *_identifier; - NSMutableDictionary *_extras; - - NSString *_lastResult; - NSError *_lastError; - - NSString *_authMethod; - NSString *_loggingToken; -} - -+ (FBSDKLoginManagerLogger *)loggerFromParameters:(NSDictionary *)parameters -{ - NSDictionary *clientState = [FBSDKBasicUtility objectForJSONString:parameters[FBSDKLoginManagerLoggingClientStateKey] error:NULL]; - - id isClientState = clientState[FBSDKLoginManagerLoggingClientStateIsClientState]; - if ([isClientState isKindOfClass:[NSNumber class]] && [isClientState boolValue]) { - FBSDKLoginManagerLogger *logger = [[self alloc] initWithLoggingToken:nil]; - if (logger != nil) { - logger->_identifier = clientState[FBSDKLoginManagerLoggerParamIdentifierKey]; - logger->_authMethod = clientState[FBSDKLoginManagerLoggerParamAuthMethodKey]; - logger->_loggingToken = clientState[FBSDKLoginManagerLoggerParamLoggingTokenKey]; - return logger; - } - } - return nil; -} - -- (instancetype)initWithLoggingToken:(NSString *)loggingToken -{ - if ((self = [super init]) != nil) { - _identifier = [NSUUID UUID].UUIDString; - _extras = [NSMutableDictionary dictionary]; - _loggingToken = [loggingToken copy]; - } - return self; -} - -- (void)startSessionForLoginManager:(FBSDKLoginManager *)loginManager -{ - BOOL isReauthorize = ([FBSDKAccessToken currentAccessToken] != nil); - BOOL willTryNative = NO; - BOOL willTryBrowser = YES; - NSString *behaviorString = @"FBSDKLoginBehaviorBrowser"; - - [_extras addEntriesFromDictionary:@{ - FBSDKLoginManagerLoggerTryNative : @(willTryNative), - FBSDKLoginManagerLoggerTryBrowser : @(willTryBrowser), - @"isReauthorize" : @(isReauthorize), - @"login_behavior" : behaviorString, - @"default_audience" : [FBSDKLoginUtility stringForAudience:loginManager.defaultAudience], - @"permissions" : [loginManager.requestedPermissions.allObjects componentsJoinedByString:@","] ?: @"" - }]; - - [self logEvent:FBSDKAppEventNameFBSessionAuthStart params:[self _parametersForNewEvent]]; -} - -- (void)endSession -{ - [self logEvent:FBSDKAppEventNameFBSessionAuthEnd result:_lastResult error:_lastError]; -} - -- (void)startAuthMethod:(NSString *)authMethod -{ - _authMethod = [authMethod copy]; - [self logEvent:FBSDKAppEventNameFBSessionAuthMethodStart params:[self _parametersForNewEvent]]; -} - -- (void)endLoginWithResult:(FBSDKLoginManagerLoginResult *)result error:(NSError *)error -{ - NSString *resultString = @""; - - if (error != nil) { - resultString = FBSDKLoginManagerLoggerResultErrorString; - } else if (result.isCancelled) { - resultString = FBSDKLoginManagerLoggerResultCancelString; - } else if (result.isSkipped) { - resultString = FBSDKLoginManagerLoggerResultSkippedString; - } else if (result.token) { - resultString = FBSDKLoginManagerLoggerResultSuccessString; - if (result.declinedPermissions.count) { - _extras[@"declined_permissions"] = [result.declinedPermissions.allObjects componentsJoinedByString:@","]; - } - } - - _lastResult = resultString; - _lastError = error; - [_extras addEntriesFromDictionary:result.loggingExtras]; - - [self logEvent:FBSDKAppEventNameFBSessionAuthMethodEnd result:resultString error:error]; -} - -- (NSDictionary *)parametersWithTimeStampAndClientState:(NSDictionary *)loginParams forAuthMethod:(NSString *)authMethod -{ - NSMutableDictionary *params = [loginParams mutableCopy]; - - NSTimeInterval timeValue = (NSTimeInterval)FBSDKMonotonicTimeGetCurrentSeconds(); - NSString *e2eTimestampString = [FBSDKBasicUtility JSONStringForObject:@{ @"init" : @(timeValue) } - error:NULL - invalidObjectHandler:NULL]; - params[@"e2e"] = e2eTimestampString; - - NSDictionary *existingState = [FBSDKBasicUtility objectForJSONString:params[FBSDKLoginManagerLoggingClientStateKey] error:NULL]; - params[FBSDKLoginManagerLoggingClientStateKey] = [self clientStateForAuthMethod:authMethod andExistingState:existingState]; - - return params; -} - -- (void)willAttemptAppSwitchingBehavior -{ - NSString *defaultUrlScheme = [NSString stringWithFormat:@"fb%@%@", [FBSDKSettings appID], [FBSDKSettings appURLSchemeSuffix] ?: @""]; - BOOL isURLSchemeRegistered = [FBSDKInternalUtility isRegisteredURLScheme:defaultUrlScheme]; - - BOOL isFacebookAppCanOpenURLSchemeRegistered = [FBSDKInternalUtility isRegisteredCanOpenURLScheme:FBSDK_CANOPENURL_FACEBOOK]; - BOOL isMessengerAppCanOpenURLSchemeRegistered = [FBSDKInternalUtility isRegisteredCanOpenURLScheme:FBSDK_CANOPENURL_MESSENGER]; - - [_extras addEntriesFromDictionary:@{ - @"isURLSchemeRegistered" : @(isURLSchemeRegistered), - @"isFacebookAppCanOpenURLSchemeRegistered" : @(isFacebookAppCanOpenURLSchemeRegistered), - @"isMessengerAppCanOpenURLSchemeRegistered" : @(isMessengerAppCanOpenURLSchemeRegistered), - }]; -} - -- (void)logNativeAppDialogResult:(BOOL)result dialogDuration:(NSTimeInterval)dialogDuration -{ - NSOperatingSystemVersion iOS10Version = { .majorVersion = 10, .minorVersion = 0, .patchVersion = 0 }; - if ([FBSDKInternalUtility isOSRunTimeVersionAtLeast:iOS10Version]) { - _extras[@"native_app_login_dialog_duration"] = @(dialogDuration); - _extras[@"native_app_login_dialog_result"] = @(result); - [self logEvent:FBSDKAppEventNameFBSessionFASLoginDialogResult params:[self _parametersForNewEvent]]; - } -} - -#pragma mark - Private - -- (NSString *)clientStateForAuthMethod:(NSString *)authMethod andExistingState:(NSDictionary *)existingState -{ - NSDictionary *clientState = @{ - FBSDKLoginManagerLoggerParamAuthMethodKey: authMethod ?: @"", - FBSDKLoginManagerLoggerParamIdentifierKey: _identifier, - FBSDKLoginManagerLoggingClientStateIsClientState: @YES, - }; - - if (existingState) { - NSMutableDictionary *mutableState = [clientState mutableCopy]; - [mutableState addEntriesFromDictionary:existingState]; - clientState = mutableState; - } - - return [FBSDKBasicUtility JSONStringForObject:clientState error:NULL invalidObjectHandler:NULL]; -} - -- (NSMutableDictionary *)_parametersForNewEvent -{ - NSMutableDictionary *eventParameters = [[NSMutableDictionary alloc] init]; - - // NOTE: We ALWAYS add all params to each event, to ensure predictable mapping on the backend. - eventParameters[FBSDKLoginManagerLoggerParamIdentifierKey] = _identifier ?: FBSDKLoginManagerLoggerValueEmpty; - eventParameters[FBSDKLoginManagerLoggerParamTimestampKey] = @(round(1000 * [NSDate date].timeIntervalSince1970)); - eventParameters[FBSDKLoginManagerLoggerParamResultKey] = FBSDKLoginManagerLoggerValueEmpty; - [FBSDKBasicUtility dictionary:eventParameters setObject:_authMethod forKey:FBSDKLoginManagerLoggerParamAuthMethodKey]; - eventParameters[FBSDKLoginManagerLoggerParamErrorCodeKey] = FBSDKLoginManagerLoggerValueEmpty; - eventParameters[FBSDKLoginManagerLoggerParamErrorMessageKey] = FBSDKLoginManagerLoggerValueEmpty; - eventParameters[FBSDKLoginManagerLoggerParamExtrasKey] = FBSDKLoginManagerLoggerValueEmpty; - eventParameters[FBSDKLoginManagerLoggerParamLoggingTokenKey] = _loggingToken ?: FBSDKLoginManagerLoggerValueEmpty; - - return eventParameters; -} - -- (void)logEvent:(NSString *)eventName params:(NSMutableDictionary *)params -{ - if (_identifier) { - NSString *extrasJSONString = [FBSDKBasicUtility JSONStringForObject:_extras - error:NULL - invalidObjectHandler:NULL]; - if (extrasJSONString) { - params[FBSDKLoginManagerLoggerParamExtrasKey] = extrasJSONString; - } - [_extras removeAllObjects]; - - [FBSDKAppEvents logInternalEvent:eventName - parameters:params - isImplicitlyLogged:YES]; - } -} - -- (void)logEvent:(NSString *)eventName result:(NSString *)result error:(NSError *)error -{ - NSMutableDictionary *params = [self _parametersForNewEvent]; - - params[FBSDKLoginManagerLoggerParamResultKey] = result; - - if ([error.domain isEqualToString:FBSDKErrorDomain] || [error.domain isEqualToString:FBSDKLoginErrorDomain]) { - // tease apart the structure. - - // first see if there is an explicit message in the error's userInfo. If not, default to the reason, - // which is less useful. - NSString *value = error.userInfo[@"error_message"] ?: error.userInfo[FBSDKErrorLocalizedDescriptionKey]; - [FBSDKBasicUtility dictionary:params setObject:value forKey:FBSDKLoginManagerLoggerParamErrorMessageKey]; - - value = error.userInfo[FBSDKGraphRequestErrorGraphErrorCodeKey] ?: [NSString stringWithFormat:@"%ld", (long)error.code]; - [FBSDKBasicUtility dictionary:params setObject:value forKey:FBSDKLoginManagerLoggerParamErrorCodeKey]; - - NSError *innerError = error.userInfo[NSUnderlyingErrorKey]; - if (innerError != nil) { - value = innerError.userInfo[@"error_message"] ?: innerError.userInfo[NSLocalizedDescriptionKey]; - [FBSDKBasicUtility dictionary:_extras setObject:value forKey:@"inner_error_message"]; - - value = innerError.userInfo[FBSDKGraphRequestErrorGraphErrorCodeKey] ?: [NSString stringWithFormat:@"%ld", (long)innerError.code]; - [FBSDKBasicUtility dictionary:_extras setObject:value forKey:@"inner_error_code"]; - } - } else if (error) { - params[FBSDKLoginManagerLoggerParamErrorCodeKey] = @(error.code); - params[FBSDKLoginManagerLoggerParamErrorMessageKey] = error.localizedDescription; - } - - [self logEvent:eventName params:params]; -} - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginManagerLoginResult+Internal.h b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginManagerLoginResult+Internal.h deleted file mode 100644 index 18dd7cef1b..0000000000 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginManagerLoginResult+Internal.h +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import - -#import "FBSDKLoginManagerLoginResult.h" - -@interface FBSDKLoginManagerLoginResult() - -@property (nonatomic, readonly) NSDictionary *loggingExtras; - -// legacy flag indicating this is an intermediary result only for logging purposes. -@property (nonatomic, assign) BOOL isSkipped; - -// adds additional logging entry to extras - only sent as part of `endLoginWithResult:` --(void)addLoggingExtra:(id)object forKey:(id)key; -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginUtility.h b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginUtility.h deleted file mode 100644 index 440f651efc..0000000000 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginUtility.h +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import - -#import "FBSDKLoginManager.h" - -NS_SWIFT_NAME(LoginUtility) -@interface FBSDKLoginUtility : NSObject - -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; - -+ (NSString *)stringForAudience:(FBSDKDefaultAudience)audience; -+ (NSDictionary *)queryParamsFromLoginURL:(NSURL *)url; - -+ (NSString *)userIDFromSignedRequest:(NSString *)signedRequest; - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginUtility.m b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginUtility.m deleted file mode 100644 index aae6a17ac4..0000000000 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginUtility.m +++ /dev/null @@ -1,97 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "FBSDKLoginUtility.h" - -#if SWIFT_PACKAGE -@import FBSDKCoreKit; -#else -#import -#endif - -#ifdef FBSDKCOCOAPODS -#import -#else -#import "FBSDKCoreKit+Internal.h" -#endif -#import "FBSDKLoginConstants.h" - -@implementation FBSDKLoginUtility - -+ (NSString *)stringForAudience:(FBSDKDefaultAudience)audience -{ - switch (audience) { - case FBSDKDefaultAudienceOnlyMe: - return @"only_me"; - case FBSDKDefaultAudienceFriends: - return @"friends"; - case FBSDKDefaultAudienceEveryone: - return @"everyone"; - } -} - -+ (NSDictionary *)queryParamsFromLoginURL:(NSURL *)url -{ - NSString *expectedUrlPrefix = [FBSDKInternalUtility - appURLWithHost:@"authorize" - path:@"" - queryParameters:@{} - error:NULL].absoluteString; - if (![url.absoluteString hasPrefix:expectedUrlPrefix]) { - // Don't have an App ID, just verify path. - NSString *host = url.host; - if (![host isEqualToString:@"authorize"]) { - return nil; - } - } - NSMutableDictionary *params = [NSMutableDictionary dictionaryWithDictionary:[FBSDKInternalUtility dictionaryFromFBURL:url]]; - - NSString *userID = [[self class] userIDFromSignedRequest:params[@"signed_request"]]; - if (userID) { - params[@"user_id"] = userID; - } - - return params; -} - -+ (NSString *)userIDFromSignedRequest:(NSString *)signedRequest -{ - if (!signedRequest) { - return nil; - } - - NSArray *signatureAndPayload = [signedRequest componentsSeparatedByString:@"."]; - NSString *userID = nil; - - if (signatureAndPayload.count == 2) { - NSData *data = [FBSDKBase64 decodeAsData:signatureAndPayload[1]]; - if (data) { - NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; - userID = dictionary[@"user_id"]; - } - } - return userID; -} - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/_FBSDKLoginRecoveryAttempter.h b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/_FBSDKLoginRecoveryAttempter.h deleted file mode 100644 index 63efb5e81f..0000000000 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/_FBSDKLoginRecoveryAttempter.h +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#ifdef FBSDKCOCOAPODS -#import -#else -#import "FBSDKCoreKit+Internal.h" -#endif - -@interface _FBSDKLoginRecoveryAttempter : FBSDKErrorRecoveryAttempter - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/_FBSDKLoginRecoveryAttempter.m b/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/_FBSDKLoginRecoveryAttempter.m deleted file mode 100644 index d344be4689..0000000000 --- a/iphone/Maps/Pods/FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit/Internal/_FBSDKLoginRecoveryAttempter.m +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -// -// You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -// copy, modify, and distribute this software in source code or binary form for use -// in connection with the web services and APIs provided by Facebook. -// -// As with any software that integrates with the Facebook platform, your use of -// this software is subject to the Facebook Developer Principles and Policies -// [http://developers.facebook.com/policy/]. This copyright 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. - -#import "TargetConditionals.h" - -#if !TARGET_OS_TV - -#import "_FBSDKLoginRecoveryAttempter.h" - -#import "FBSDKLoginKit+Internal.h" - -@implementation _FBSDKLoginRecoveryAttempter - -- (void)attemptRecoveryFromError:(NSError *)error - optionIndex:(NSUInteger)recoveryOptionIndex - delegate:(id)delegate - didRecoverSelector:(SEL)didRecoverSelector - contextInfo:(void *)contextInfo { - - void(^handler)(BOOL) = ^(BOOL didRecover) { - [super completeRecovery:didRecover delegate:delegate didRecoverSelector:didRecoverSelector contextInfo:contextInfo]; - }; - NSSet *currentPermissions = [FBSDKAccessToken currentAccessToken].permissions; - if (recoveryOptionIndex == 0 && currentPermissions.count > 0) { - FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init]; - [login logInWithPermissions:currentPermissions handler:^(FBSDKLoginManagerLoginResult *result, NSError *loginError) { - // we can only consider a recovery successful if there are no declines - // (note this could still set an updated currentAccessToken). - handler(!loginError && !result.isCancelled && result.declinedPermissions.count == 0); - }]; - } else { - handler(NO); - } -} - -@end - -#endif diff --git a/iphone/Maps/Pods/FBSDKLoginKit/LICENSE b/iphone/Maps/Pods/FBSDKLoginKit/LICENSE deleted file mode 100644 index bdb9fc54be..0000000000 --- a/iphone/Maps/Pods/FBSDKLoginKit/LICENSE +++ /dev/null @@ -1,17 +0,0 @@ -Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - -You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -copy, modify, and distribute this software in source code or binary form for use -in connection with the web services and APIs provided by Facebook. - -As with any software that integrates with the Facebook platform, your use of -this software is subject to the Facebook Developer Principles and Policies -[http://developers.facebook.com/policy/]. This copyright 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/iphone/Maps/Pods/FBSDKLoginKit/README.md b/iphone/Maps/Pods/FBSDKLoginKit/README.md deleted file mode 100644 index a200d7a196..0000000000 --- a/iphone/Maps/Pods/FBSDKLoginKit/README.md +++ /dev/null @@ -1,91 +0,0 @@ -# Facebook SDK for iOS - -[![Platforms](https://img.shields.io/cocoapods/p/FBSDKCoreKit.svg)](https://cocoapods.org/pods/FBSDKCoreKit) -[![Build Status](https://travis-ci.org/facebook/facebook-ios-sdk.svg?branch=master)](https://travis-ci.org/facebook/facebook-ios-sdk) - -[![CocoaPods](https://img.shields.io/cocoapods/v/FBSDKCoreKit.svg)](https://cocoapods.org/pods/FBSDKCoreKit) -[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) - -This open-source library allows you to integrate Facebook into your iOS app. - -Learn more about the provided samples, documentation, integrating the SDK into your app, accessing source code, and more -at https://developers.facebook.com/docs/ios - -NOTE: By default, the Facebook SDK for iOS is installed in ~/Documents/FacebookSDK - -## TRY IT OUT - -### Swift Package Manager (available Xcode 11.2 and forward) - -1. In Xcode, select File > Swift Packages > Add Package Dependency. -2. Follow the prompts using the URL for this repository and a minimum semantic version of v5.10.0 -3. Check-out the tutorials available online at: -4. Start coding! Visit for tutorials and reference documentation. - -**Note:** - -If you explicitly **DO NOT** want to include Swift, import `FBSDKCoreKit` `FBSDKLoginKit` and `FBSDKShareKit` - -For projects that include Swift, use `FacebookCore`, `FacebookLogin`, and `FacebookShare` - -### CocoaPods - -1. If you explicitly **DO NOT** want to include Swift files, add the following to your `Podfile`: - - pod 'FBSDKCoreKit' - pod 'FBSDKLoginKit' - pod 'FBSDKShareKit' - - If you would like to use versions of the pods that include Swift, add the following to your `Podfile`: - - pod 'FBSDKCoreKit/Swift' - pod 'FBSDKLoginKit/Swift' - pod 'FBSDKShareKit/Swift' - -2. Test your install by adding `import FBSDKCoreKit` to your `AppDelegate` -3. Check-out the tutorials available online at: -4. Start coding! Visit for tutorials and reference documentation. - -## FEATURES - -- Login - -- Sharing - -- App Links - -- Graph API - -- Analytics - - -## GIVE FEEDBACK - -Please report bugs or issues to our designated developer support team -- -- as this will help us resolve them more quickly. - -You can also visit our [Facebook Developer Community Forum](https://developers.facebook.com/community/), -join the [Facebook Developers Group on Facebook](https://www.facebook.com/groups/fbdevelopers/), -ask questions on [Stack Overflow](http://facebook.stackoverflow.com), -or open an issue in this repository. - -## LICENSE - -See the [LICENSE](LICENSE) file. - -## Security Policy - -See the [SECURITY POLICY](SECURITY.md) for more info on our bug bounty program. - -## DEVELOPER TERMS - -- By enabling Facebook integrations, including through this SDK, you can share information with Facebook, including - information about people’s use of your app. Facebook will use information received in accordance with our - [Data Use Policy](https://www.facebook.com/about/privacy/), including to provide you with insights about the - effectiveness of your ads and the use of your app. These integrations also enable us and our partners to serve ads on - and off Facebook. -- You may limit your sharing of information with us by updating the Insights control in the developer tool - `https://developers.facebook.com/apps/{app_id}/settings/advanced`. -- If you use a Facebook integration, including to share information with us, you agree and confirm that you have - provided appropriate and sufficiently prominent notice to and obtained the appropriate consent from your users - regarding such collection, use, and disclosure (including, at a minimum, through your privacy policy). You further - agree that you will not share information with us about children under the age of 13. -- You agree to comply with all applicable laws and regulations and also agree to our Terms - , including our Platform Policies .and - Advertising Guidelines, as applicable . - -By using the Facebook SDK for iOS you agree to these terms. diff --git a/iphone/Maps/Pods/Firebase/CoreOnly/Sources/Firebase.h b/iphone/Maps/Pods/Firebase/CoreOnly/Sources/Firebase.h deleted file mode 100755 index e5049ca432..0000000000 --- a/iphone/Maps/Pods/Firebase/CoreOnly/Sources/Firebase.h +++ /dev/null @@ -1,172 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import - -#if !defined(__has_include) - #error "Firebase.h won't import anything if your compiler doesn't support __has_include. Please \ - import the headers individually." -#else - #if __has_include() - #import - #endif - - #if __has_include() - #import - #endif - - #if __has_include() - #import - #endif - - #if __has_include() - #import - #endif - - #if __has_include() - #import - #if !__has_include() - #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING - #warning "FirebaseAnalytics.framework is not included in your target. Please add \ -`Firebase/Analytics` to your Podfile or add FirebaseAnalytics.framework to your project to ensure \ -Firebase Dynamic Links works as intended." - #endif // #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING - #endif - #endif - - #if __has_include() - #import - #endif - - #if __has_include() - #import - #endif - - #if __has_include() - #import - #if !__has_include() - #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING - #warning "FirebaseAnalytics.framework is not included in your target. Please add \ -`Firebase/Analytics` to your Podfile or add FirebaseAnalytics.framework to your project to ensure \ -Firebase In App Messaging works as intended." - #endif // #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING - #endif - #endif - - #if __has_include() - #import - #endif - - #if __has_include() - #import - #if !__has_include() - #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING - #warning "FirebaseAnalytics.framework is not included in your target. Please add \ -`Firebase/Analytics` to your Podfile or add FirebaseAnalytics.framework to your project to ensure \ -Firebase Messaging works as intended." - #endif // #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING - #endif -#endif - - #if __has_include() - #import - #endif - - #if __has_include() - #import - #endif - - #if __has_include() - #import - #endif - - #if __has_include() - #import - #endif - - #if __has_include() - #import - #endif - - #if __has_include() - #import - #endif - - #if __has_include() - #import - #endif - - #if __has_include() - #import - #endif - - #if __has_include() - #import - #endif - - #if __has_include() - #import - #endif - - #if __has_include() - #import - #endif - - #if __has_include() - #import - #endif - - #if __has_include() - #import - #endif - - #if __has_include() - #import - #if !__has_include() - #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING - #warning "FirebaseAnalytics.framework is not included in your target. Please add \ -`Firebase/Analytics` to your Podfile or add FirebaseAnalytics.framework to your project to ensure \ -Firebase Performance works as intended." - #endif // #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING - #endif - #endif - - #if __has_include() - #import - #if !__has_include() - #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING - #warning "FirebaseAnalytics.framework is not included in your target. Please add \ -`Firebase/Analytics` to your Podfile or add FirebaseAnalytics.framework to your project to ensure \ -Firebase Remote Config works as intended." - #endif // #ifndef FIREBASE_ANALYTICS_SUPPRESS_WARNING - #endif - #endif - - #if __has_include() - #import - #endif - - #if __has_include() - #import - #endif - - #if __has_include() - #import - #endif - - #if __has_include() - #import - #endif - -#endif // defined(__has_include) diff --git a/iphone/Maps/Pods/Firebase/CoreOnly/Sources/module.modulemap b/iphone/Maps/Pods/Firebase/CoreOnly/Sources/module.modulemap deleted file mode 100755 index 3685b54a68..0000000000 --- a/iphone/Maps/Pods/Firebase/CoreOnly/Sources/module.modulemap +++ /dev/null @@ -1,4 +0,0 @@ -module Firebase { - export * - header "Firebase.h" -} \ No newline at end of file diff --git a/iphone/Maps/Pods/Firebase/LICENSE b/iphone/Maps/Pods/Firebase/LICENSE deleted file mode 100644 index d645695673..0000000000 --- a/iphone/Maps/Pods/Firebase/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/iphone/Maps/Pods/Firebase/README.md b/iphone/Maps/Pods/Firebase/README.md deleted file mode 100644 index a396a214d9..0000000000 --- a/iphone/Maps/Pods/Firebase/README.md +++ /dev/null @@ -1,307 +0,0 @@ -[![Version](https://img.shields.io/cocoapods/v/Firebase.svg?style=flat)](https://cocoapods.org/pods/Firebase) -[![License](https://img.shields.io/cocoapods/l/Firebase.svg?style=flat)](https://cocoapods.org/pods/Firebase) -[![Platform](https://img.shields.io/cocoapods/p/Firebase.svg?style=flat)](https://cocoapods.org/pods/Firebase) - -[![Actions Status][gh-abtesting-badge]][gh-actions] -[![Actions Status][gh-auth-badge]][gh-actions] -[![Actions Status][gh-core-badge]][gh-actions] -[![Actions Status][gh-crashlytics-badge]][gh-actions] -[![Actions Status][gh-database-badge]][gh-actions] -[![Actions Status][gh-datatransport-badge]][gh-actions] -[![Actions Status][gh-dynamiclinks-badge]][gh-actions] -[![Actions Status][gh-firebasepod-badge]][gh-actions] -[![Actions Status][gh-firestore-badge]][gh-actions] -[![Actions Status][gh-functions-badge]][gh-actions] -[![Actions Status][gh-inappmessaging-badge]][gh-actions] -[![Actions Status][gh-interop-badge]][gh-actions] -[![Actions Status][gh-messaging-badge]][gh-actions] -[![Actions Status][gh-remoteconfig-badge]][gh-actions] -[![Actions Status][gh-storage-badge]][gh-actions] -[![Actions Status][gh-symbolcollision-badge]][gh-actions] -[![Actions Status][gh-zip-badge]][gh-actions] -[![Travis](https://travis-ci.org/firebase/firebase-ios-sdk.svg?branch=master)](https://travis-ci.org/firebase/firebase-ios-sdk) - -# Firebase Apple Open Source Development - -This repository contains all Apple platform Firebase SDK source except FirebaseAnalytics, -FirebasePerformance, and FirebaseML. - -The repository also includes GoogleUtilities source. The -[GoogleUtilities](GoogleUtilities/README.md) pod is -a set of utilities used by Firebase and other Google products. - -Firebase is an app development platform with tools to help you build, grow and -monetize your app. More information about Firebase can be found at -[https://firebase.google.com](https://firebase.google.com). - -## Installation - -See the three subsections for details about three different installation methods. -1. [Standard pod install](README.md#standard-pod-install) -1. [Installing from the GitHub repo](README.md#installing-from-github) -1. [Experimental Carthage](README.md#carthage-ios-only) - -### Standard pod install - -Go to -[https://firebase.google.com/docs/ios/setup](https://firebase.google.com/docs/ios/setup). - -### Installing from GitHub - -For releases starting with 5.0.0, the source for each release is also deployed -to CocoaPods master and available via standard -[CocoaPods Podfile syntax](https://guides.cocoapods.org/syntax/podfile.html#pod). - -These instructions can be used to access the Firebase repo at other branches, -tags, or commits. - -#### Background - -See -[the Podfile Syntax Reference](https://guides.cocoapods.org/syntax/podfile.html#pod) -for instructions and options about overriding pod source locations. - -#### Accessing Firebase Source Snapshots - -All of the official releases are tagged in this repo and available via CocoaPods. To access a local -source snapshot or unreleased branch, use Podfile directives like the following: - -To access FirebaseFirestore via a branch: -``` -pod 'FirebaseCore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master' -pod 'FirebaseFirestore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master' -``` - -To access FirebaseMessaging via a checked out version of the firebase-ios-sdk repo do: - -``` -pod 'FirebaseCore', :path => '/path/to/firebase-ios-sdk' -pod 'FirebaseMessaging', :path => '/path/to/firebase-ios-sdk' -``` - -### Carthage (iOS only) - -Instructions for the experimental Carthage distribution are at -[Carthage](Carthage.md). - -### Rome - -Instructions for installing binary frameworks via -[Rome](https://github.com/CocoaPods/Rome) are at [Rome](Rome.md). - -### Using Firebase from a Framework or a library - -[Using Firebase from a Framework or a library](docs/firebase_in_libraries.md) - -## Development - -To develop Firebase software in this repository, ensure that you have at least -the following software: - - * Xcode 10.1 (or later) - * CocoaPods 1.7.2 (or later) - * [CocoaPods generate](https://github.com/square/cocoapods-generate) - -For the pod that you want to develop: - -`pod gen Firebase{name here}.podspec --local-sources=./ --auto-open --platforms=ios` - -Note: If the CocoaPods cache is out of date, you may need to run -`pod repo update` before the `pod gen` command. - -Note: Set the `--platforms` option to `macos` or `tvos` to develop/test for -those platforms. Since 10.2, Xcode does not properly handle multi-platform -CocoaPods workspaces. - -Firestore has a self contained Xcode project. See -[Firestore/README.md](Firestore/README.md). - -### Development for Catalyst -* `pod gen {name here}.podspec --local-sources=./ --auto-open --platforms=ios` -* Check the Mac box in the App-iOS Build Settings -* Sign the App in the Settings Signing & Capabilities tab -* Click Pods in the Project Manager -* Add Signing to the iOS host app and unit test targets -* Select the Unit-unit scheme -* Run it to build and test - -### Adding a New Firebase Pod - -See [AddNewPod.md](AddNewPod.md). - -### Code Formatting - -To ensure that the code is formatted consistently, run the script -[./scripts/style.sh](https://github.com/firebase/firebase-ios-sdk/blob/master/scripts/style.sh) -before creating a PR. - -Travis will verify that any code changes are done in a style compliant way. Install -`clang-format` and `swiftformat`. -These commands will get the right versions: - -``` -brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/c6f1cbd/Formula/clang-format.rb -brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/c13eda8/Formula/swiftformat.rb -``` - -Note: if you already have a newer version of these installed you may need to -`brew switch` to this version. - -To update this section, find the versions of clang-format and swiftformat.rb to -match the versions in the CI failure logs -[here](https://github.com/Homebrew/homebrew-core/tree/master/Formula). - -### Running Unit Tests - -Select a scheme and press Command-u to build a component and run its unit tests. - -#### Viewing Code Coverage (Deprecated) - -First, make sure that [xcov](https://github.com/nakiostudio/xcov) is installed with `gem install xcov`. - -After running the `AllUnitTests_iOS` scheme in Xcode, execute -`xcov --workspace Firebase.xcworkspace --scheme AllUnitTests_iOS --output_directory xcov_output` -at Example/ in the terminal. This will aggregate the coverage, and you can run `open xcov_output/index.html` to see the results. - -### Running Sample Apps -In order to run the sample apps and integration tests, you'll need valid -`GoogleService-Info.plist` files for those samples. The Firebase Xcode project contains dummy plist -files without real values, but can be replaced with real plist files. To get your own -`GoogleService-Info.plist` files: - -1. Go to the [Firebase Console](https://console.firebase.google.com/) -2. Create a new Firebase project, if you don't already have one -3. For each sample app you want to test, create a new Firebase app with the sample app's bundle -identifier (e.g. `com.google.Database-Example`) -4. Download the resulting `GoogleService-Info.plist` and replace the appropriate dummy plist file -(e.g. in [Example/Database/App/](Example/Database/App/)); - -Some sample apps like Firebase Messaging ([Example/Messaging/App](Example/Messaging/App)) require -special Apple capabilities, and you will have to change the sample app to use a unique bundle -identifier that you can control in your own Apple Developer account. - -## Specific Component Instructions -See the sections below for any special instructions for those components. - -### Firebase Auth - -If you're doing specific Firebase Auth development, see -[the Auth Sample README](FirebaseAuth/Tests/Sample/README.md) for instructions about -building and running the FirebaseAuth pod along with various samples and tests. - -### Firebase Database - -The Firebase Database Integration tests can be run against a locally running Database Emulator -or against a production instance. - -To run against a local emulator instance, invoke `./scripts/run_database_emulator.sh start` before -running the integration test. - -To run against a production instance, provide a valid GoogleServices-Info.plist and copy it to -`Example/Database/App/GoogleService-Info.plist`. Your Security Rule must be set to -[public](https://firebase.google.com/docs/database/security/quickstart) while your tests are -running. - -### Firebase Storage - -To run the Storage Integration tests, follow the instructions in -[FIRStorageIntegrationTests.m](FirebaseStorage/Tests/Integration/FIRStorageIntegrationTests.m). - -#### Push Notifications - -Push notifications can only be delivered to specially provisioned App IDs in the developer portal. -In order to actually test receiving push notifications, you will need to: - -1. Change the bundle identifier of the sample app to something you own in your Apple Developer -account, and enable that App ID for push notifications. -2. You'll also need to -[upload your APNs Provider Authentication Key or certificate to the Firebase Console](https://firebase.google.com/docs/cloud-messaging/ios/certs) -at **Project Settings > Cloud Messaging > [Your Firebase App]**. -3. Ensure your iOS device is added to your Apple Developer portal as a test device. - -#### iOS Simulator - -The iOS Simulator cannot register for remote notifications, and will not receive push notifications. -In order to receive push notifications, you'll have to follow the steps above and run the app on a -physical device. - -## Community Supported Efforts - -We've seen an amazing amount of interest and contributions to improve the Firebase SDKs, and we are -very grateful! We'd like to empower as many developers as we can to be able to use Firebase and -participate in the Firebase community. - -### tvOS, macOS, watchOS and Catalyst -Thanks to contributions from the community, many of Firebase SDKs now compile, run unit tests, and work on -tvOS, macOS, watchOS and Catalyst. - -For tvOS, checkout the [Sample](Example/tvOSSample). -For watchOS, currently only Messaging and Storage (and their dependencies) have limited support. Checkout the -[Independent Watch App Sample](Example/watchOSSample). - -Keep in mind that macOS, tvOS, watchOS and Catalyst are not officially supported by Firebase, and this -repository is actively developed primarily for iOS. While we can catch basic unit test issues with -Travis, there may be some changes where the SDK no longer works as expected on macOS, tvOS or watchOS. If you -encounter this, please [file an issue](https://github.com/firebase/firebase-ios-sdk/issues). - -During app setup in the console, you may get to a step that mentions something like "Checking if the app -has communicated with our servers". This relies on Analytics and will not work on macOS/tvOS/watchOS/Catalyst. -**It's safe to ignore the message and continue**, the rest of the SDKs will work as expected. - -To install, add a subset of the following to the Podfile: - -``` -pod 'Firebase/ABTesting' # No watchOS support yet -pod 'Firebase/Auth' # No watchOS support yet -pod 'Firebase/Crashlytics' # No watchOS support yet -pod 'Firebase/Database' # No watchOS support yet -pod 'Firebase/Firestore' # No watchOS support yet -pod 'Firebase/Functions' # No watchOS support yet -pod 'Firebase/Messaging' -pod 'Firebase/RemoteConfig' # No watchOS support yet -pod 'Firebase/Storage' -``` - -#### Additional Catalyst Notes - -* FirebaseAuth and FirebaseMessaging require adding `Keychain Sharing Capability` -to Build Settings. -* FirebaseFirestore requires signing the -[gRPC Resource target](https://github.com/firebase/firebase-ios-sdk/issues/3500#issuecomment-518741681). - -## Roadmap - -See [Roadmap](ROADMAP.md) for more about the Firebase iOS SDK Open Source -plans and directions. - -## Contributing - -See [Contributing](CONTRIBUTING.md) for more information on contributing to the Firebase -iOS SDK. - -## License - -The contents of this repository is licensed under the -[Apache License, version 2.0](http://www.apache.org/licenses/LICENSE-2.0). - -Your use of Firebase is governed by the -[Terms of Service for Firebase Services](https://firebase.google.com/terms/). - -[gh-actions]: https://github.com/firebase/firebase-ios-sdk/actions -[gh-abtesting-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/abtesting/badge.svg -[gh-auth-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/auth/badge.svg -[gh-core-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/core/badge.svg -[gh-crashlytics-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/crashlytics/badge.svg -[gh-database-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/database/badge.svg -[gh-datatransport-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/datatransport/badge.svg -[gh-dynamiclinks-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/dynamiclinks/badge.svg -[gh-firebasepod-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/firebasepod/badge.svg -[gh-firestore-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/firestore/badge.svg -[gh-functions-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/functions/badge.svg -[gh-inappmessaging-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/inappmessaging/badge.svg -[gh-interop-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/interop/badge.svg -[gh-messaging-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/messaging/badge.svg -[gh-remoteconfig-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/remoteconfig/badge.svg -[gh-storage-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/storage/badge.svg -[gh-symbolcollision-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/symbolcollision/badge.svg -[gh-zip-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/zip/badge.svg diff --git a/iphone/Maps/Pods/FirebaseAnalytics/Frameworks/FIRAnalyticsConnector.framework/FIRAnalyticsConnector b/iphone/Maps/Pods/FirebaseAnalytics/Frameworks/FIRAnalyticsConnector.framework/FIRAnalyticsConnector deleted file mode 100755 index 0ab56523a7..0000000000 Binary files a/iphone/Maps/Pods/FirebaseAnalytics/Frameworks/FIRAnalyticsConnector.framework/FIRAnalyticsConnector and /dev/null differ diff --git a/iphone/Maps/Pods/FirebaseAnalytics/Frameworks/FIRAnalyticsConnector.framework/Modules/module.modulemap b/iphone/Maps/Pods/FirebaseAnalytics/Frameworks/FIRAnalyticsConnector.framework/Modules/module.modulemap deleted file mode 100755 index 99a4b1dc23..0000000000 --- a/iphone/Maps/Pods/FirebaseAnalytics/Frameworks/FIRAnalyticsConnector.framework/Modules/module.modulemap +++ /dev/null @@ -1,11 +0,0 @@ -framework module FIRAnalyticsConnector { - export * - module * { export * } - link "sqlite3" - link "z" - link framework "CoreData" - link framework "Security" - link framework "StoreKit" - link framework "SystemConfiguration" - link framework "UIKit" -} diff --git a/iphone/Maps/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/FirebaseAnalytics b/iphone/Maps/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/FirebaseAnalytics deleted file mode 100755 index 7021749a56..0000000000 Binary files a/iphone/Maps/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/FirebaseAnalytics and /dev/null differ diff --git a/iphone/Maps/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRAnalytics+AppDelegate.h b/iphone/Maps/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRAnalytics+AppDelegate.h deleted file mode 100755 index d499af668b..0000000000 --- a/iphone/Maps/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRAnalytics+AppDelegate.h +++ /dev/null @@ -1,62 +0,0 @@ -#import - -#import "FIRAnalytics.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - * Provides App Delegate handlers to be used in your App Delegate. - * - * To save time integrating Firebase Analytics in an application, Firebase Analytics does not - * require delegation implementation from the AppDelegate. Instead this is automatically done by - * Firebase Analytics. Should you choose instead to delegate manually, you can turn off the App - * Delegate Proxy by adding FirebaseAppDelegateProxyEnabled into your app's Info.plist and setting - * it to NO, and adding the methods in this category to corresponding delegation handlers. - * - * To handle Universal Links, you must return YES in - * [UIApplicationDelegate application:didFinishLaunchingWithOptions:]. - */ -@interface FIRAnalytics (AppDelegate) - -/** - * Handles events related to a URL session that are waiting to be processed. - * - * For optimal use of Firebase Analytics, call this method from the - * [UIApplicationDelegate application:handleEventsForBackgroundURLSession:completionHandler] - * method of the app delegate in your app. - * - * @param identifier The identifier of the URL session requiring attention. - * @param completionHandler The completion handler to call when you finish processing the events. - * Calling this completion handler lets the system know that your app's user interface is - * updated and a new snapshot can be taken. - */ -+ (void)handleEventsForBackgroundURLSession:(NSString *)identifier - completionHandler:(nullable void (^)(void))completionHandler; - -/** - * Handles the event when the app is launched by a URL. - * - * Call this method from [UIApplicationDelegate application:openURL:options:] (on iOS 9.0 and - * above), or [UIApplicationDelegate application:openURL:sourceApplication:annotation:] (on - * iOS 8.x and below) in your app. - * - * @param url The URL resource to open. This resource can be a network resource or a file. - */ -+ (void)handleOpenURL:(NSURL *)url; - -/** - * Handles the event when the app receives data associated with user activity that includes a - * Universal Link (on iOS 9.0 and above). - * - * Call this method from [UIApplication continueUserActivity:restorationHandler:] in your app - * delegate (on iOS 9.0 and above). - * - * @param userActivity The activity object containing the data associated with the task the user - * was performing. - */ -+ (void)handleUserActivity:(id)userActivity; - -@end - -NS_ASSUME_NONNULL_END - diff --git a/iphone/Maps/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRAnalytics.h b/iphone/Maps/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRAnalytics.h deleted file mode 100755 index be0b1faee5..0000000000 --- a/iphone/Maps/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRAnalytics.h +++ /dev/null @@ -1,136 +0,0 @@ -#import - -#import "FIREventNames.h" -#import "FIRParameterNames.h" -#import "FIRUserPropertyNames.h" - -NS_ASSUME_NONNULL_BEGIN - -/// The top level Firebase Analytics singleton that provides methods for logging events and setting -/// user properties. See the developer guides for general -/// information on using Firebase Analytics in your apps. -/// -/// @note The Analytics SDK uses SQLite to persist events and other app-specific data. Calling -/// certain thread-unsafe global SQLite methods like `sqlite3_shutdown()` can result in -/// unexpected crashes at runtime. -NS_SWIFT_NAME(Analytics) -@interface FIRAnalytics : NSObject - -/// Logs an app event. The event can have up to 25 parameters. Events with the same name must have -/// the same parameters. Up to 500 event names are supported. Using predefined events and/or -/// parameters is recommended for optimal reporting. -/// -/// The following event names are reserved and cannot be used: -///
    -///
  • ad_activeview
  • -///
  • ad_click
  • -///
  • ad_exposure
  • -///
  • ad_impression
  • -///
  • ad_query
  • -///
  • adunit_exposure
  • -///
  • app_clear_data
  • -///
  • app_remove
  • -///
  • app_update
  • -///
  • error
  • -///
  • first_open
  • -///
  • in_app_purchase
  • -///
  • notification_dismiss
  • -///
  • notification_foreground
  • -///
  • notification_open
  • -///
  • notification_receive
  • -///
  • os_update
  • -///
  • screen_view
  • -///
  • session_start
  • -///
  • user_engagement
  • -///
-/// -/// @param name The name of the event. Should contain 1 to 40 alphanumeric characters or -/// underscores. The name must start with an alphabetic character. Some event names are -/// reserved. See FIREventNames.h for the list of reserved event names. The "firebase_", -/// "google_", and "ga_" prefixes are reserved and should not be used. Note that event names are -/// case-sensitive and that logging two events whose names differ only in case will result in -/// two distinct events. -/// @param parameters The dictionary of event parameters. Passing nil indicates that the event has -/// no parameters. Parameter names can be up to 40 characters long and must start with an -/// alphabetic character and contain only alphanumeric characters and underscores. Only NSString -/// and NSNumber (signed 64-bit integer and 64-bit floating-point number) parameter types are -/// supported. NSString parameter values can be up to 100 characters long. The "firebase_", -/// "google_", and "ga_" prefixes are reserved and should not be used for parameter names. -+ (void)logEventWithName:(NSString *)name - parameters:(nullable NSDictionary *)parameters - NS_SWIFT_NAME(logEvent(_:parameters:)); - -/// Sets a user property to a given value. Up to 25 user property names are supported. Once set, -/// user property values persist throughout the app lifecycle and across sessions. -/// -/// The following user property names are reserved and cannot be used: -///
    -///
  • first_open_time
  • -///
  • last_deep_link_referrer
  • -///
  • user_id
  • -///
-/// -/// @param value The value of the user property. Values can be up to 36 characters long. Setting the -/// value to nil removes the user property. -/// @param name The name of the user property to set. Should contain 1 to 24 alphanumeric characters -/// or underscores and must start with an alphabetic character. The "firebase_", "google_", and -/// "ga_" prefixes are reserved and should not be used for user property names. -+ (void)setUserPropertyString:(nullable NSString *)value forName:(NSString *)name - NS_SWIFT_NAME(setUserProperty(_:forName:)); - -/// Sets the user ID property. This feature must be used in accordance with -/// Google's Privacy Policy -/// -/// @param userID The user ID to ascribe to the user of this app on this device, which must be -/// non-empty and no more than 256 characters long. Setting userID to nil removes the user ID. -+ (void)setUserID:(nullable NSString *)userID; - -/// Sets the current screen name, which specifies the current visual context in your app. This helps -/// identify the areas in your app where users spend their time and how they interact with your app. -/// Must be called on the main thread. -/// -/// Note that screen reporting is enabled automatically and records the class name of the current -/// UIViewController for you without requiring you to call this method. If you implement -/// viewDidAppear in your UIViewController but do not call [super viewDidAppear:], that screen class -/// will not be automatically tracked. The class name can optionally be overridden by calling this -/// method in the viewDidAppear callback of your UIViewController and specifying the -/// screenClassOverride parameter. setScreenName:screenClass: must be called after -/// [super viewDidAppear:]. -/// -/// If your app does not use a distinct UIViewController for each screen, you should call this -/// method and specify a distinct screenName each time a new screen is presented to the user. -/// -/// The screen name and screen class remain in effect until the current UIViewController changes or -/// a new call to setScreenName:screenClass: is made. -/// -/// @param screenName The name of the current screen. Should contain 1 to 100 characters. Set to nil -/// to clear the current screen name. -/// @param screenClassOverride The name of the screen class. Should contain 1 to 100 characters. By -/// default this is the class name of the current UIViewController. Set to nil to revert to the -/// default class name. -+ (void)setScreenName:(nullable NSString *)screenName - screenClass:(nullable NSString *)screenClassOverride; - -/// Sets whether analytics collection is enabled for this app on this device. This setting is -/// persisted across app sessions. By default it is enabled. -/// -/// @param analyticsCollectionEnabled A flag that enables or disables Analytics collection. -+ (void)setAnalyticsCollectionEnabled:(BOOL)analyticsCollectionEnabled; - -/// Sets the interval of inactivity in seconds that terminates the current session. The default -/// value is 1800 seconds (30 minutes). -/// -/// @param sessionTimeoutInterval The custom time of inactivity in seconds before the current -/// session terminates. -+ (void)setSessionTimeoutInterval:(NSTimeInterval)sessionTimeoutInterval; - -/// The unique ID for this instance of the application. -+ (NSString *)appInstanceID; - -/// Clears all analytics data for this instance from the device and resets the app instance ID. -/// FIRAnalyticsConfiguration values will be reset to the default values. -+ (void)resetAnalyticsData; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIREventNames.h b/iphone/Maps/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIREventNames.h deleted file mode 100755 index 807b6159e0..0000000000 --- a/iphone/Maps/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIREventNames.h +++ /dev/null @@ -1,471 +0,0 @@ -/// @file FIREventNames.h -/// -/// Predefined event names. -/// -/// An Event is an important occurrence in your app that you want to measure. You can report up to -/// 500 different types of Events per app and you can associate up to 25 unique parameters with each -/// Event type. Some common events are suggested below, but you may also choose to specify custom -/// Event types that are associated with your specific app. Each event type is identified by a -/// unique name. Event names can be up to 40 characters long, may only contain alphanumeric -/// characters and underscores ("_"), and must start with an alphabetic character. The "firebase_", -/// "google_", and "ga_" prefixes are reserved and should not be used. - -#import - -/// Add Payment Info event. This event signifies that a user has submitted their payment -/// information. Note: If you supply the @c kFIRParameterValue parameter, you must also supply the -/// @c kFIRParameterCurrency parameter so that revenue metrics can be computed accurately. Params: -/// -///
    -///
  • @c kFIRParameterCoupon (NSString) (optional)
  • -///
  • @c kFIRParameterCurrency (NSString) (optional)
  • -///
  • @c kFIRParameterItems (NSArray) (optional)
  • -///
  • @c kFIRParameterPaymentType (NSString) (optional)
  • -///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • -///
-static NSString *const kFIREventAddPaymentInfo NS_SWIFT_NAME(AnalyticsEventAddPaymentInfo) = - @"add_payment_info"; - -/// E-Commerce Add To Cart event. This event signifies that an item(s) was added to a cart for -/// purchase. Add this event to a funnel with @c kFIREventPurchase to gauge the effectiveness of -/// your checkout process. Note: If you supply the @c kFIRParameterValue parameter, you must also -/// supply the @c kFIRParameterCurrency parameter so that revenue metrics can be computed -/// accurately. Params: -/// -///
    -///
  • @c kFIRParameterCurrency (NSString) (optional)
  • -///
  • @c kFIRParameterItems (NSArray) (optional)
  • -///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • -///
-static NSString *const kFIREventAddToCart NS_SWIFT_NAME(AnalyticsEventAddToCart) = @"add_to_cart"; - -/// E-Commerce Add To Wishlist event. This event signifies that an item was added to a wishlist. Use -/// this event to identify popular gift items. Note: If you supply the @c kFIRParameterValue -/// parameter, you must also supply the @c kFIRParameterCurrency parameter so that revenue metrics -/// can be computed accurately. Params: -/// -///
    -///
  • @c kFIRParameterCurrency (NSString) (optional)
  • -///
  • @c kFIRParameterItems (NSArray) (optional)
  • -///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • -///
-static NSString *const kFIREventAddToWishlist NS_SWIFT_NAME(AnalyticsEventAddToWishlist) = - @"add_to_wishlist"; - -/// App Open event. By logging this event when an App becomes active, developers can understand how -/// often users leave and return during the course of a Session. Although Sessions are automatically -/// reported, this event can provide further clarification around the continuous engagement of -/// app-users. -static NSString *const kFIREventAppOpen NS_SWIFT_NAME(AnalyticsEventAppOpen) = @"app_open"; - -/// E-Commerce Begin Checkout event. This event signifies that a user has begun the process of -/// checking out. Add this event to a funnel with your @c kFIREventPurchase event to gauge the -/// effectiveness of your checkout process. Note: If you supply the @c kFIRParameterValue parameter, -/// you must also supply the @c kFIRParameterCurrency parameter so that revenue metrics can be -/// computed accurately. Params: -/// -///
    -///
  • @c kFIRParameterCoupon (NSString) (optional)
  • -///
  • @c kFIRParameterCurrency (NSString) (optional)
  • -///
  • @c kFIRParameterItems (NSArray) (optional)
  • -///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • -///
-static NSString *const kFIREventBeginCheckout NS_SWIFT_NAME(AnalyticsEventBeginCheckout) = - @"begin_checkout"; - -/// Campaign Detail event. Log this event to supply the referral details of a re-engagement -/// campaign. Note: you must supply at least one of the required parameters kFIRParameterSource, -/// kFIRParameterMedium or kFIRParameterCampaign. Params: -/// -///
    -///
  • @c kFIRParameterSource (NSString)
  • -///
  • @c kFIRParameterMedium (NSString)
  • -///
  • @c kFIRParameterCampaign (NSString)
  • -///
  • @c kFIRParameterTerm (NSString) (optional)
  • -///
  • @c kFIRParameterContent (NSString) (optional)
  • -///
  • @c kFIRParameterAdNetworkClickID (NSString) (optional)
  • -///
  • @c kFIRParameterCP1 (NSString) (optional)
  • -///
-static NSString *const kFIREventCampaignDetails NS_SWIFT_NAME(AnalyticsEventCampaignDetails) = - @"campaign_details"; - -/// Checkout progress. Params: -/// -///
    -///
  • @c kFIRParameterCheckoutStep (unsigned 64-bit integer as NSNumber)
  • -///
  • @c kFIRParameterCheckoutOption (NSString) (optional)
  • -///
-/// This constant has been deprecated. -static NSString *const kFIREventCheckoutProgress NS_SWIFT_NAME(AnalyticsEventCheckoutProgress) = - @"checkout_progress"; - -/// Earn Virtual Currency event. This event tracks the awarding of virtual currency in your app. Log -/// this along with @c kFIREventSpendVirtualCurrency to better understand your virtual economy. -/// Params: -/// -///
    -///
  • @c kFIRParameterVirtualCurrencyName (NSString)
  • -///
  • @c kFIRParameterValue (signed 64-bit integer or double as NSNumber)
  • -///
-static NSString *const kFIREventEarnVirtualCurrency - NS_SWIFT_NAME(AnalyticsEventEarnVirtualCurrency) = @"earn_virtual_currency"; - -/// E-Commerce Purchase event. This event signifies that an item was purchased by a user. Note: -/// This is different from the in-app purchase event, which is reported automatically for App -/// Store-based apps. Note: If you supply the @c kFIRParameterValue parameter, you must also -/// supply the @c kFIRParameterCurrency parameter so that revenue metrics can be computed -/// accurately. Params: -/// -///
    -///
  • @c kFIRParameterCurrency (NSString) (optional)
  • -///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • -///
  • @c kFIRParameterTransactionID (NSString) (optional)
  • -///
  • @c kFIRParameterTax (double as NSNumber) (optional)
  • -///
  • @c kFIRParameterShipping (double as NSNumber) (optional)
  • -///
  • @c kFIRParameterCoupon (NSString) (optional)
  • -///
  • @c kFIRParameterLocation (NSString) (optional)
  • -///
  • @c kFIRParameterStartDate (NSString) (optional)
  • -///
  • @c kFIRParameterEndDate (NSString) (optional)
  • -///
  • @c kFIRParameterNumberOfNights (signed 64-bit integer as NSNumber) (optional) for -/// hotel bookings
  • -///
  • @c kFIRParameterNumberOfRooms (signed 64-bit integer as NSNumber) (optional) for -/// hotel bookings
  • -///
  • @c kFIRParameterNumberOfPassengers (signed 64-bit integer as NSNumber) (optional) -/// for travel bookings
  • -///
  • @c kFIRParameterOrigin (NSString) (optional)
  • -///
  • @c kFIRParameterDestination (NSString) (optional)
  • -///
  • @c kFIRParameterTravelClass (NSString) (optional) for travel bookings
  • -///
-/// This constant has been deprecated. Use @c kFIREventPurchase constant instead. -static NSString *const kFIREventEcommercePurchase NS_SWIFT_NAME(AnalyticsEventEcommercePurchase) = - @"ecommerce_purchase"; - -/// Generate Lead event. Log this event when a lead has been generated in the app to understand the -/// efficacy of your install and re-engagement campaigns. Note: If you supply the -/// @c kFIRParameterValue parameter, you must also supply the @c kFIRParameterCurrency -/// parameter so that revenue metrics can be computed accurately. Params: -/// -///
    -///
  • @c kFIRParameterCurrency (NSString) (optional)
  • -///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • -///
-static NSString *const kFIREventGenerateLead NS_SWIFT_NAME(AnalyticsEventGenerateLead) = - @"generate_lead"; - -/// Join Group event. Log this event when a user joins a group such as a guild, team or family. Use -/// this event to analyze how popular certain groups or social features are in your app. Params: -/// -///
    -///
  • @c kFIRParameterGroupID (NSString)
  • -///
-static NSString *const kFIREventJoinGroup NS_SWIFT_NAME(AnalyticsEventJoinGroup) = @"join_group"; - -/// Level End event. Log this event when the user finishes a level. Params: -/// -///
    -///
  • @c kFIRParameterLevelName (NSString)
  • -///
  • @c kFIRParameterSuccess (NSString)
  • -///
-static NSString *const kFIREventLevelEnd NS_SWIFT_NAME(AnalyticsEventLevelEnd) = @"level_end"; - -/// Level Start event. Log this event when the user starts a new level. Params: -/// -///
    -///
  • @c kFIRParameterLevelName (NSString)
  • -///
-static NSString *const kFIREventLevelStart NS_SWIFT_NAME(AnalyticsEventLevelStart) = @"level_start"; - -/// Level Up event. This event signifies that a player has leveled up in your gaming app. It can -/// help you gauge the level distribution of your userbase and help you identify certain levels that -/// are difficult to pass. Params: -/// -///
    -///
  • @c kFIRParameterLevel (signed 64-bit integer as NSNumber)
  • -///
  • @c kFIRParameterCharacter (NSString) (optional)
  • -///
-static NSString *const kFIREventLevelUp NS_SWIFT_NAME(AnalyticsEventLevelUp) = @"level_up"; - -/// Login event. Apps with a login feature can report this event to signify that a user has logged -/// in. -static NSString *const kFIREventLogin NS_SWIFT_NAME(AnalyticsEventLogin) = @"login"; - -/// Post Score event. Log this event when the user posts a score in your gaming app. This event can -/// help you understand how users are actually performing in your game and it can help you correlate -/// high scores with certain audiences or behaviors. Params: -/// -///
    -///
  • @c kFIRParameterScore (signed 64-bit integer as NSNumber)
  • -///
  • @c kFIRParameterLevel (signed 64-bit integer as NSNumber) (optional)
  • -///
  • @c kFIRParameterCharacter (NSString) (optional)
  • -///
-static NSString *const kFIREventPostScore NS_SWIFT_NAME(AnalyticsEventPostScore) = @"post_score"; - -/// Present Offer event. This event signifies that the app has presented a purchase offer to a user. -/// Add this event to a funnel with the kFIREventAddToCart and kFIREventEcommercePurchase to gauge -/// your conversion process. Note: If you supply the @c kFIRParameterValue parameter, you must -/// also supply the @c kFIRParameterCurrency parameter so that revenue metrics can be computed -/// accurately. Params: -/// -///
    -///
  • @c kFIRParameterQuantity (signed 64-bit integer as NSNumber)
  • -///
  • @c kFIRParameterItemID (NSString)
  • -///
  • @c kFIRParameterItemName (NSString)
  • -///
  • @c kFIRParameterItemCategory (NSString)
  • -///
  • @c kFIRParameterItemLocationID (NSString) (optional)
  • -///
  • @c kFIRParameterPrice (double as NSNumber) (optional)
  • -///
  • @c kFIRParameterCurrency (NSString) (optional)
  • -///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • -///
-/// This constant has been deprecated. Use @c kFIREventViewPromotion constant instead. -static NSString *const kFIREventPresentOffer NS_SWIFT_NAME(AnalyticsEventPresentOffer) = - @"present_offer"; - -/// E-Commerce Purchase Refund event. This event signifies that an item purchase was refunded. -/// Note: If you supply the @c kFIRParameterValue parameter, you must also supply the -/// @c kFIRParameterCurrency parameter so that revenue metrics can be computed accurately. -/// Params: -/// -///
    -///
  • @c kFIRParameterCurrency (NSString) (optional)
  • -///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • -///
  • @c kFIRParameterTransactionID (NSString) (optional)
  • -///
-/// This constant has been deprecated. Use @c kFIREventRefund constant instead. -static NSString *const kFIREventPurchaseRefund NS_SWIFT_NAME(AnalyticsEventPurchaseRefund) = - @"purchase_refund"; - -/// E-Commerce Remove from Cart event. This event signifies that an item(s) was removed from a cart. -/// Note: If you supply the @c kFIRParameterValue parameter, you must also supply the @c -/// kFIRParameterCurrency parameter so that revenue metrics can be computed accurately. Params: -/// -///
    -///
  • @c kFIRParameterCurrency (NSString) (optional)
  • -///
  • @c kFIRParameterItems (NSArray) (optional)
  • -///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • -///
-static NSString *const kFIREventRemoveFromCart NS_SWIFT_NAME(AnalyticsEventRemoveFromCart) = - @"remove_from_cart"; - -/// Search event. Apps that support search features can use this event to contextualize search -/// operations by supplying the appropriate, corresponding parameters. This event can help you -/// identify the most popular content in your app. Params: -/// -///
    -///
  • @c kFIRParameterSearchTerm (NSString)
  • -///
  • @c kFIRParameterStartDate (NSString) (optional)
  • -///
  • @c kFIRParameterEndDate (NSString) (optional)
  • -///
  • @c kFIRParameterNumberOfNights (signed 64-bit integer as NSNumber) (optional) for -/// hotel bookings
  • -///
  • @c kFIRParameterNumberOfRooms (signed 64-bit integer as NSNumber) (optional) for -/// hotel bookings
  • -///
  • @c kFIRParameterNumberOfPassengers (signed 64-bit integer as NSNumber) (optional) -/// for travel bookings
  • -///
  • @c kFIRParameterOrigin (NSString) (optional)
  • -///
  • @c kFIRParameterDestination (NSString) (optional)
  • -///
  • @c kFIRParameterTravelClass (NSString) (optional) for travel bookings
  • -///
-static NSString *const kFIREventSearch NS_SWIFT_NAME(AnalyticsEventSearch) = @"search"; - -/// Select Content event. This general purpose event signifies that a user has selected some content -/// of a certain type in an app. The content can be any object in your app. This event can help you -/// identify popular content and categories of content in your app. Params: -/// -///
    -///
  • @c kFIRParameterContentType (NSString)
  • -///
  • @c kFIRParameterItemID (NSString)
  • -///
-static NSString *const kFIREventSelectContent NS_SWIFT_NAME(AnalyticsEventSelectContent) = - @"select_content"; - -/// Set checkout option. Params: -/// -///
    -///
  • @c kFIRParameterCheckoutStep (unsigned 64-bit integer as NSNumber)
  • -///
  • @c kFIRParameterCheckoutOption (NSString)
  • -///
-/// This constant has been deprecated. -static NSString *const kFIREventSetCheckoutOption NS_SWIFT_NAME(AnalyticsEventSetCheckoutOption) = - @"set_checkout_option"; - -/// Share event. Apps with social features can log the Share event to identify the most viral -/// content. Params: -/// -///
    -///
  • @c kFIRParameterContentType (NSString)
  • -///
  • @c kFIRParameterItemID (NSString)
  • -///
-static NSString *const kFIREventShare NS_SWIFT_NAME(AnalyticsEventShare) = @"share"; - -/// Sign Up event. This event indicates that a user has signed up for an account in your app. The -/// parameter signifies the method by which the user signed up. Use this event to understand the -/// different behaviors between logged in and logged out users. Params: -/// -///
    -///
  • @c kFIRParameterSignUpMethod (NSString)
  • -///
-static NSString *const kFIREventSignUp NS_SWIFT_NAME(AnalyticsEventSignUp) = @"sign_up"; - -/// Spend Virtual Currency event. This event tracks the sale of virtual goods in your app and can -/// help you identify which virtual goods are the most popular objects of purchase. Params: -/// -///
    -///
  • @c kFIRParameterItemName (NSString)
  • -///
  • @c kFIRParameterVirtualCurrencyName (NSString)
  • -///
  • @c kFIRParameterValue (signed 64-bit integer or double as NSNumber)
  • -///
-static NSString *const kFIREventSpendVirtualCurrency - NS_SWIFT_NAME(AnalyticsEventSpendVirtualCurrency) = @"spend_virtual_currency"; - -/// Tutorial Begin event. This event signifies the start of the on-boarding process in your app. Use -/// this in a funnel with kFIREventTutorialComplete to understand how many users complete this -/// process and move on to the full app experience. -static NSString *const kFIREventTutorialBegin NS_SWIFT_NAME(AnalyticsEventTutorialBegin) = - @"tutorial_begin"; - -/// Tutorial End event. Use this event to signify the user's completion of your app's on-boarding -/// process. Add this to a funnel with kFIREventTutorialBegin to gauge the completion rate of your -/// on-boarding process. -static NSString *const kFIREventTutorialComplete NS_SWIFT_NAME(AnalyticsEventTutorialComplete) = - @"tutorial_complete"; - -/// Unlock Achievement event. Log this event when the user has unlocked an achievement in your -/// game. Since achievements generally represent the breadth of a gaming experience, this event can -/// help you understand how many users are experiencing all that your game has to offer. Params: -/// -///
    -///
  • @c kFIRParameterAchievementID (NSString)
  • -///
-static NSString *const kFIREventUnlockAchievement NS_SWIFT_NAME(AnalyticsEventUnlockAchievement) = - @"unlock_achievement"; - -/// View Item event. This event signifies that a user has viewed an item. Use the appropriate -/// parameters to contextualize the event. Use this event to discover the most popular items viewed -/// in your app. Note: If you supply the @c kFIRParameterValue parameter, you must also supply the -/// @c kFIRParameterCurrency parameter so that revenue metrics can be computed accurately. Params: -/// -///
    -///
  • @c kFIRParameterCurrency (NSString) (optional)
  • -///
  • @c kFIRParameterItems (NSArray) (optional)
  • -///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • -///
-static NSString *const kFIREventViewItem NS_SWIFT_NAME(AnalyticsEventViewItem) = @"view_item"; - -/// View Item List event. Log this event when a user sees a list of items or offerings. Params: -/// -///
    -///
  • @c kFIRParameterItems (NSArray) (optional)
  • -///
  • @c kFIRParameterItemListID (NSString) (optional)
  • -///
  • @c kFIRParameterItemListName (NSString) (optional)
  • -///
-static NSString *const kFIREventViewItemList NS_SWIFT_NAME(AnalyticsEventViewItemList) = - @"view_item_list"; - -/// View Search Results event. Log this event when the user has been presented with the results of a -/// search. Params: -/// -///
    -///
  • @c kFIRParameterSearchTerm (NSString)
  • -///
-static NSString *const kFIREventViewSearchResults NS_SWIFT_NAME(AnalyticsEventViewSearchResults) = - @"view_search_results"; - -/// Add Shipping Info event. This event signifies that a user has submitted their shipping -/// information. Note: If you supply the @c kFIRParameterValue parameter, you must also supply the -/// @c kFIRParameterCurrency parameter so that revenue metrics can be computed accurately. Params: -/// -///
    -///
  • @c kFIRParameterCoupon (NSString) (optional)
  • -///
  • @c kFIRParameterCurrency (NSString) (optional)
  • -///
  • @c kFIRParameterItems (NSArray) (optional)
  • -///
  • @c kFIRParameterShippingTier (NSString) (optional)
  • -///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • -///
-static NSString *const kFIREventAddShippingInfo NS_SWIFT_NAME(AnalyticsEventAddShippingInfo) = - @"add_shipping_info"; - -/// E-Commerce Purchase event. This event signifies that an item(s) was purchased by a user. Note: -/// This is different from the in-app purchase event, which is reported automatically for App -/// Store-based apps. Note: If you supply the @c kFIRParameterValue parameter, you must also supply -/// the @c kFIRParameterCurrency parameter so that revenue metrics can be computed accurately. -/// Params: -/// -///
    -///
  • @c kFIRParameterAffiliation (NSString) (optional)
  • -///
  • @c kFIRParameterCoupon (NSString) (optional)
  • -///
  • @c kFIRParameterCurrency (NSString) (optional)
  • -///
  • @c kFIRParameterItems (NSArray) (optional)
  • -///
  • @c kFIRParameterShipping (double as NSNumber) (optional)
  • -///
  • @c kFIRParameterTax (double as NSNumber) (optional)
  • -///
  • @c kFIRParameterTransactionID (NSString) (optional)
  • -///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • -///
-static NSString *const kFIREventPurchase NS_SWIFT_NAME(AnalyticsEventPurchase) = @"purchase"; - -/// E-Commerce Refund event. This event signifies that a refund was issued. Note: If you supply the -/// @c kFIRParameterValue parameter, you must also supply the @c kFIRParameterCurrency parameter so -/// that revenue metrics can be computed accurately. Params: -/// -///
    -///
  • @c kFIRParameterAffiliation (NSString) (optional)
  • -///
  • @c kFIRParameterCoupon (NSString) (optional)
  • -///
  • @c kFIRParameterCurrency (NSString) (optional)
  • -///
  • @c kFIRParameterItems (NSArray) (optional)
  • -///
  • @c kFIRParameterShipping (double as NSNumber) (optional)
  • -///
  • @c kFIRParameterTax (double as NSNumber) (optional)
  • -///
  • @c kFIRParameterTransactionID (NSString) (optional)
  • -///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • -///
-static NSString *const kFIREventRefund NS_SWIFT_NAME(AnalyticsEventRefund) = @"refund"; - -/// Select Item event. This event signifies that an item was selected by a user from a list. Use the -/// appropriate parameters to contextualize the event. Use this event to discover the most popular -/// items selected. Params: -/// -///
    -///
  • @c kFIRParameterItems (NSArray) (optional)
  • -///
  • @c kFIRParameterItemListID (NSString) (optional)
  • -///
  • @c kFIRParameterItemListName (NSString) (optional)
  • -///
-static NSString *const kFIREventSelectItem NS_SWIFT_NAME(AnalyticsEventSelectItem) = @"select_item"; - -/// Select promotion event. This event signifies that a user has selected a promotion offer. Use the -/// appropriate parameters to contextualize the event, such as the item(s) for which the promotion -/// applies. Params: -/// -///
    -///
  • @c kFIRParameterCreativeName (NSString) (optional)
  • -///
  • @c kFIRParameterCreativeSlot (NSString) (optional)
  • -///
  • @c kFIRParameterItems (NSArray) (optional)
  • -///
  • @c kFIRParameterLocationID (NSString) (optional)
  • -///
  • @c kFIRParameterPromotionID (NSString) (optional)
  • -///
  • @c kFIRParameterPromotionName (NSString) (optional)
  • -///
-static NSString *const kFIREventSelectPromotion NS_SWIFT_NAME(AnalyticsEventSelectPromotion) = - @"select_promotion"; - -/// E-commerce View Cart event. This event signifies that a user has viewed their cart. Use this to -/// analyze your purchase funnel. Note: If you supply the @c kFIRParameterValue parameter, you must -/// also supply the @c kFIRParameterCurrency parameter so that revenue metrics can be computed -/// accurately. Params: -/// -///
    -///
  • @c kFIRParameterCurrency (NSString) (optional)
  • -///
  • @c kFIRParameterItems (NSArray) (optional)
  • -///
  • @c kFIRParameterValue (double as NSNumber) (optional)
  • -///
-static NSString *const kFIREventViewCart NS_SWIFT_NAME(AnalyticsEventViewCart) = @"view_cart"; - -/// View Promotion event. This event signifies that a promotion was shown to a user. Add this event -/// to a funnel with the @c kFIREventAddToCart and @c kFIREventPurchase to gauge your conversion -/// process. Params: -/// -///
    -///
  • @c kFIRParameterCreativeName (NSString) (optional)
  • -///
  • @c kFIRParameterCreativeSlot (NSString) (optional)
  • -///
  • @c kFIRParameterItems (NSArray) (optional)
  • -///
  • @c kFIRParameterLocationID (NSString) (optional)
  • -///
  • @c kFIRParameterPromotionID (NSString) (optional)
  • -///
  • @c kFIRParameterPromotionName (NSString) (optional)
  • -///
-static NSString *const kFIREventViewPromotion NS_SWIFT_NAME(AnalyticsEventViewPromotion) = - @"view_promotion"; diff --git a/iphone/Maps/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRParameterNames.h b/iphone/Maps/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRParameterNames.h deleted file mode 100755 index 5775d866c4..0000000000 --- a/iphone/Maps/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRParameterNames.h +++ /dev/null @@ -1,670 +0,0 @@ -/// @file FIRParameterNames.h -/// -/// Predefined event parameter names. -/// -/// Params supply information that contextualize Events. You can associate up to 25 unique Params -/// with each Event type. Some Params are suggested below for certain common Events, but you are -/// not limited to these. You may supply extra Params for suggested Events or custom Params for -/// Custom events. Param names can be up to 40 characters long, may only contain alphanumeric -/// characters and underscores ("_"), and must start with an alphabetic character. Param values can -/// be up to 100 characters long. The "firebase_", "google_", and "ga_" prefixes are reserved and -/// should not be used. - -#import - -/// Game achievement ID (NSString). -///
-///     NSDictionary *params = @{
-///       kFIRParameterAchievementID : @"10_matches_won",
-///       // ...
-///     };
-/// 
-static NSString *const kFIRParameterAchievementID NS_SWIFT_NAME(AnalyticsParameterAchievementID) = - @"achievement_id"; - -/// Ad Network Click ID (NSString). Used for network-specific click IDs which vary in format. -///
-///     NSDictionary *params = @{
-///       kFIRParameterAdNetworkClickID : @"1234567",
-///       // ...
-///     };
-/// 
-static NSString *const kFIRParameterAdNetworkClickID - NS_SWIFT_NAME(AnalyticsParameterAdNetworkClickID) = @"aclid"; - -/// A product affiliation to designate a supplying company or brick and mortar store location -/// (NSString).
-///     NSDictionary *params = @{
-///       kFIRParameterAffiliation : @"Google Store",
-///       // ...
-///     };
-/// 
-static NSString *const kFIRParameterAffiliation NS_SWIFT_NAME(AnalyticsParameterAffiliation) = - @"affiliation"; - -/// The individual campaign name, slogan, promo code, etc. Some networks have pre-defined macro to -/// capture campaign information, otherwise can be populated by developer. Highly Recommended -/// (NSString). -///
-///     NSDictionary *params = @{
-///       kFIRParameterCampaign : @"winter_promotion",
-///       // ...
-///     };
-/// 
-static NSString *const kFIRParameterCampaign NS_SWIFT_NAME(AnalyticsParameterCampaign) = - @"campaign"; - -/// Character used in game (NSString). -///
-///     NSDictionary *params = @{
-///       kFIRParameterCharacter : @"beat_boss",
-///       // ...
-///     };
-/// 
-static NSString *const kFIRParameterCharacter NS_SWIFT_NAME(AnalyticsParameterCharacter) = - @"character"; - -/// The checkout step (1..N) (unsigned 64-bit integer as NSNumber). -///
-///     NSDictionary *params = @{
-///       kFIRParameterCheckoutStep : @"1",
-///       // ...
-///     };
-/// 
-/// This constant has been deprecated. -static NSString *const kFIRParameterCheckoutStep NS_SWIFT_NAME(AnalyticsParameterCheckoutStep) = - @"checkout_step"; - -/// Some option on a step in an ecommerce flow (NSString). -///
-///     NSDictionary *params = @{
-///       kFIRParameterCheckoutOption : @"Visa",
-///       // ...
-///     };
-/// 
-/// This constant has been deprecated. -static NSString *const kFIRParameterCheckoutOption - NS_SWIFT_NAME(AnalyticsParameterCheckoutOption) = @"checkout_option"; - -/// Campaign content (NSString). -static NSString *const kFIRParameterContent NS_SWIFT_NAME(AnalyticsParameterContent) = @"content"; - -/// Type of content selected (NSString). -///
-///     NSDictionary *params = @{
-///       kFIRParameterContentType : @"news article",
-///       // ...
-///     };
-/// 
-static NSString *const kFIRParameterContentType NS_SWIFT_NAME(AnalyticsParameterContentType) = - @"content_type"; - -/// Coupon code used for a purchase (NSString). -///
-///     NSDictionary *params = @{
-///       kFIRParameterCoupon : @"SUMMER_FUN",
-///       // ...
-///     };
-/// 
-static NSString *const kFIRParameterCoupon NS_SWIFT_NAME(AnalyticsParameterCoupon) = @"coupon"; - -/// Campaign custom parameter (NSString). Used as a method of capturing custom data in a campaign. -/// Use varies by network. -///
-///     NSDictionary *params = @{
-///       kFIRParameterCP1 : @"custom_data",
-///       // ...
-///     };
-/// 
-static NSString *const kFIRParameterCP1 NS_SWIFT_NAME(AnalyticsParameterCP1) = @"cp1"; - -/// The name of a creative used in a promotional spot (NSString). -///
-///     NSDictionary *params = @{
-///       kFIRParameterCreativeName : @"Summer Sale",
-///       // ...
-///     };
-/// 
-static NSString *const kFIRParameterCreativeName NS_SWIFT_NAME(AnalyticsParameterCreativeName) = - @"creative_name"; - -/// The name of a creative slot (NSString). -///
-///     NSDictionary *params = @{
-///       kFIRParameterCreativeSlot : @"summer_banner2",
-///       // ...
-///     };
-/// 
-static NSString *const kFIRParameterCreativeSlot NS_SWIFT_NAME(AnalyticsParameterCreativeSlot) = - @"creative_slot"; - -/// Currency of the purchase or items associated with the event, in 3-letter -/// ISO_4217 format (NSString). -///
-///     NSDictionary *params = @{
-///       kFIRParameterCurrency : @"USD",
-///       // ...
-///     };
-/// 
-static NSString *const kFIRParameterCurrency NS_SWIFT_NAME(AnalyticsParameterCurrency) = - @"currency"; - -/// Flight or Travel destination (NSString). -///
-///     NSDictionary *params = @{
-///       kFIRParameterDestination : @"Mountain View, CA",
-///       // ...
-///     };
-/// 
-static NSString *const kFIRParameterDestination NS_SWIFT_NAME(AnalyticsParameterDestination) = - @"destination"; - -/// The arrival date, check-out date or rental end date for the item. This should be in -/// YYYY-MM-DD format (NSString). -///
-///     NSDictionary *params = @{
-///       kFIRParameterEndDate : @"2015-09-14",
-///       // ...
-///     };
-/// 
-static NSString *const kFIRParameterEndDate NS_SWIFT_NAME(AnalyticsParameterEndDate) = @"end_date"; - -/// Flight number for travel events (NSString). -///
-///     NSDictionary *params = @{
-///       kFIRParameterFlightNumber : @"ZZ800",
-///       // ...
-///     };
-/// 
-static NSString *const kFIRParameterFlightNumber NS_SWIFT_NAME(AnalyticsParameterFlightNumber) = - @"flight_number"; - -/// Group/clan/guild ID (NSString). -///
-///     NSDictionary *params = @{
-///       kFIRParameterGroupID : @"g1",
-///       // ...
-///     };
-/// 
-static NSString *const kFIRParameterGroupID NS_SWIFT_NAME(AnalyticsParameterGroupID) = @"group_id"; - -/// The index of the item in a list (signed 64-bit integer as NSNumber). -///
-///     NSDictionary *params = @{
-///       kFIRParameterIndex : @(5),
-///       // ...
-///     };
-/// 
-static NSString *const kFIRParameterIndex NS_SWIFT_NAME(AnalyticsParameterIndex) = @"index"; - -/// Item brand (NSString). -///
-///     NSDictionary *params = @{
-///       kFIRParameterItemBrand : @"Google",
-///       // ...
-///     };
-/// 
-static NSString *const kFIRParameterItemBrand NS_SWIFT_NAME(AnalyticsParameterItemBrand) = - @"item_brand"; - -/// Item category (context-specific) (NSString). -///
-///     NSDictionary *params = @{
-///       kFIRParameterItemCategory : @"pants",
-///       // ...
-///     };
-/// 
-static NSString *const kFIRParameterItemCategory NS_SWIFT_NAME(AnalyticsParameterItemCategory) = - @"item_category"; - -/// Item ID (context-specific) (NSString). -///
-///     NSDictionary *params = @{
-///       kFIRParameterItemID : @"SKU_12345",
-///       // ...
-///     };
-/// 
-static NSString *const kFIRParameterItemID NS_SWIFT_NAME(AnalyticsParameterItemID) = @"item_id"; - -/// The Google Place ID (NSString) that -/// corresponds to the associated item. Alternatively, you can supply your own custom Location ID. -///
-///     NSDictionary *params = @{
-///       kFIRParameterItemLocationID : @"ChIJiyj437sx3YAR9kUWC8QkLzQ",
-///       // ...
-///     };
-/// 
-/// This constant has been deprecated. Use @c kFIRParameterLocationID constant instead. -static NSString *const kFIRParameterItemLocationID - NS_SWIFT_NAME(AnalyticsParameterItemLocationID) = @"item_location_id"; - -/// Item Name (context-specific) (NSString). -///
-///     NSDictionary *params = @{
-///       kFIRParameterItemName : @"jeggings",
-///       // ...
-///     };
-/// 
-static NSString *const kFIRParameterItemName NS_SWIFT_NAME(AnalyticsParameterItemName) = - @"item_name"; - -/// The list in which the item was presented to the user (NSString). -///
-///     NSDictionary *params = @{
-///       kFIRParameterItemList : @"Search Results",
-///       // ...
-///     };
-/// 
-/// This constant has been deprecated. Use @c kFIRParameterItemListName constant instead. -static NSString *const kFIRParameterItemList NS_SWIFT_NAME(AnalyticsParameterItemList) = - @"item_list"; - -/// Item variant (NSString). -///
-///     NSDictionary *params = @{
-///       kFIRParameterItemVariant : @"Black",
-///       // ...
-///     };
-/// 
-static NSString *const kFIRParameterItemVariant NS_SWIFT_NAME(AnalyticsParameterItemVariant) = - @"item_variant"; - -/// Level in game (signed 64-bit integer as NSNumber). -///
-///     NSDictionary *params = @{
-///       kFIRParameterLevel : @(42),
-///       // ...
-///     };
-/// 
-static NSString *const kFIRParameterLevel NS_SWIFT_NAME(AnalyticsParameterLevel) = @"level"; - -/// Location (NSString). The Google Place ID -/// that corresponds to the associated event. Alternatively, you can supply your own custom -/// Location ID. -///
-///     NSDictionary *params = @{
-///       kFIRParameterLocation : @"ChIJiyj437sx3YAR9kUWC8QkLzQ",
-///       // ...
-///     };
-/// 
-static NSString *const kFIRParameterLocation NS_SWIFT_NAME(AnalyticsParameterLocation) = - @"location"; - -/// The advertising or marketing medium, for example: cpc, banner, email, push. Highly recommended -/// (NSString). -///
-///     NSDictionary *params = @{
-///       kFIRParameterMedium : @"email",
-///       // ...
-///     };
-/// 
-static NSString *const kFIRParameterMedium NS_SWIFT_NAME(AnalyticsParameterMedium) = @"medium"; - -/// Number of nights staying at hotel (signed 64-bit integer as NSNumber). -///
-///     NSDictionary *params = @{
-///       kFIRParameterNumberOfNights : @(3),
-///       // ...
-///     };
-/// 
-static NSString *const kFIRParameterNumberOfNights - NS_SWIFT_NAME(AnalyticsParameterNumberOfNights) = @"number_of_nights"; - -/// Number of passengers traveling (signed 64-bit integer as NSNumber). -///
-///     NSDictionary *params = @{
-///       kFIRParameterNumberOfPassengers : @(11),
-///       // ...
-///     };
-/// 
-static NSString *const kFIRParameterNumberOfPassengers - NS_SWIFT_NAME(AnalyticsParameterNumberOfPassengers) = @"number_of_passengers"; - -/// Number of rooms for travel events (signed 64-bit integer as NSNumber). -///
-///     NSDictionary *params = @{
-///       kFIRParameterNumberOfRooms : @(2),
-///       // ...
-///     };
-/// 
-static NSString *const kFIRParameterNumberOfRooms NS_SWIFT_NAME(AnalyticsParameterNumberOfRooms) = - @"number_of_rooms"; - -/// Flight or Travel origin (NSString). -///
-///     NSDictionary *params = @{
-///       kFIRParameterOrigin : @"Mountain View, CA",
-///       // ...
-///     };
-/// 
-static NSString *const kFIRParameterOrigin NS_SWIFT_NAME(AnalyticsParameterOrigin) = @"origin"; - -/// Purchase price (double as NSNumber). -///
-///     NSDictionary *params = @{
-///       kFIRParameterPrice : @(1.0),
-///       kFIRParameterCurrency : @"USD",  // e.g. $1.00 USD
-///       // ...
-///     };
-/// 
-static NSString *const kFIRParameterPrice NS_SWIFT_NAME(AnalyticsParameterPrice) = @"price"; - -/// Purchase quantity (signed 64-bit integer as NSNumber). -///
-///     NSDictionary *params = @{
-///       kFIRParameterQuantity : @(1),
-///       // ...
-///     };
-/// 
-static NSString *const kFIRParameterQuantity NS_SWIFT_NAME(AnalyticsParameterQuantity) = - @"quantity"; - -/// Score in game (signed 64-bit integer as NSNumber). -///
-///     NSDictionary *params = @{
-///       kFIRParameterScore : @(4200),
-///       // ...
-///     };
-/// 
-static NSString *const kFIRParameterScore NS_SWIFT_NAME(AnalyticsParameterScore) = @"score"; - -/// The search string/keywords used (NSString). -///
-///     NSDictionary *params = @{
-///       kFIRParameterSearchTerm : @"periodic table",
-///       // ...
-///     };
-/// 
-static NSString *const kFIRParameterSearchTerm NS_SWIFT_NAME(AnalyticsParameterSearchTerm) = - @"search_term"; - -/// Shipping cost associated with a transaction (double as NSNumber). -///
-///     NSDictionary *params = @{
-///       kFIRParameterShipping : @(5.99),
-///       kFIRParameterCurrency : @"USD",  // e.g. $5.99 USD
-///       // ...
-///     };
-/// 
-static NSString *const kFIRParameterShipping NS_SWIFT_NAME(AnalyticsParameterShipping) = - @"shipping"; - -/// Sign up method (NSString). -///
-///     NSDictionary *params = @{
-///       kFIRParameterSignUpMethod : @"google",
-///       // ...
-///     };
-/// 
-/// -/// This constant has been deprecated. Use Method constant instead. -static NSString *const kFIRParameterSignUpMethod NS_SWIFT_NAME(AnalyticsParameterSignUpMethod) = - @"sign_up_method"; - -/// A particular approach used in an operation; for example, "facebook" or "email" in the context -/// of a sign_up or login event. (NSString). -///
-///     NSDictionary *params = @{
-///       kFIRParameterMethod : @"google",
-///       // ...
-///     };
-/// 
-static NSString *const kFIRParameterMethod NS_SWIFT_NAME(AnalyticsParameterMethod) = @"method"; - -/// The origin of your traffic, such as an Ad network (for example, google) or partner (urban -/// airship). Identify the advertiser, site, publication, etc. that is sending traffic to your -/// property. Highly recommended (NSString). -///
-///     NSDictionary *params = @{
-///       kFIRParameterSource : @"InMobi",
-///       // ...
-///     };
-/// 
-static NSString *const kFIRParameterSource NS_SWIFT_NAME(AnalyticsParameterSource) = @"source"; - -/// The departure date, check-in date or rental start date for the item. This should be in -/// YYYY-MM-DD format (NSString). -///
-///     NSDictionary *params = @{
-///       kFIRParameterStartDate : @"2015-09-14",
-///       // ...
-///     };
-/// 
-static NSString *const kFIRParameterStartDate NS_SWIFT_NAME(AnalyticsParameterStartDate) = - @"start_date"; - -/// Tax cost associated with a transaction (double as NSNumber). -///
-///     NSDictionary *params = @{
-///       kFIRParameterTax : @(2.43),
-///       kFIRParameterCurrency : @"USD",  // e.g. $2.43 USD
-///       // ...
-///     };
-/// 
-static NSString *const kFIRParameterTax NS_SWIFT_NAME(AnalyticsParameterTax) = @"tax"; - -/// If you're manually tagging keyword campaigns, you should use utm_term to specify the keyword -/// (NSString). -///
-///     NSDictionary *params = @{
-///       kFIRParameterTerm : @"game",
-///       // ...
-///     };
-/// 
-static NSString *const kFIRParameterTerm NS_SWIFT_NAME(AnalyticsParameterTerm) = @"term"; - -/// The unique identifier of a transaction (NSString). -///
-///     NSDictionary *params = @{
-///       kFIRParameterTransactionID : @"T12345",
-///       // ...
-///     };
-/// 
-static NSString *const kFIRParameterTransactionID NS_SWIFT_NAME(AnalyticsParameterTransactionID) = - @"transaction_id"; - -/// Travel class (NSString). -///
-///     NSDictionary *params = @{
-///       kFIRParameterTravelClass : @"business",
-///       // ...
-///     };
-/// 
-static NSString *const kFIRParameterTravelClass NS_SWIFT_NAME(AnalyticsParameterTravelClass) = - @"travel_class"; - -/// A context-specific numeric value which is accumulated automatically for each event type. This is -/// a general purpose parameter that is useful for accumulating a key metric that pertains to an -/// event. Examples include revenue, distance, time and points. Value should be specified as signed -/// 64-bit integer or double as NSNumber. Notes: Values for pre-defined currency-related events -/// (such as @c kFIREventAddToCart) should be supplied using double as NSNumber and must be -/// accompanied by a @c kFIRParameterCurrency parameter. The valid range of accumulated values is -/// [-9,223,372,036,854.77, 9,223,372,036,854.77]. Supplying a non-numeric value, omitting the -/// corresponding @c kFIRParameterCurrency parameter, or supplying an invalid -/// currency code for conversion events will cause that -/// conversion to be omitted from reporting. -///
-///     NSDictionary *params = @{
-///       kFIRParameterValue : @(3.99),
-///       kFIRParameterCurrency : @"USD",  // e.g. $3.99 USD
-///       // ...
-///     };
-/// 
-static NSString *const kFIRParameterValue NS_SWIFT_NAME(AnalyticsParameterValue) = @"value"; - -/// Name of virtual currency type (NSString). -///
-///     NSDictionary *params = @{
-///       kFIRParameterVirtualCurrencyName : @"virtual_currency_name",
-///       // ...
-///     };
-/// 
-static NSString *const kFIRParameterVirtualCurrencyName - NS_SWIFT_NAME(AnalyticsParameterVirtualCurrencyName) = @"virtual_currency_name"; - -/// The name of a level in a game (NSString). -///
-///     NSDictionary *params = @{
-///       kFIRParameterLevelName : @"room_1",
-///       // ...
-///     };
-/// 
-static NSString *const kFIRParameterLevelName NS_SWIFT_NAME(AnalyticsParameterLevelName) = - @"level_name"; - -/// The result of an operation. Specify 1 to indicate success and 0 to indicate failure (unsigned -/// integer as NSNumber). -///
-///     NSDictionary *params = @{
-///       kFIRParameterSuccess : @(1),
-///       // ...
-///     };
-/// 
-static NSString *const kFIRParameterSuccess NS_SWIFT_NAME(AnalyticsParameterSuccess) = @"success"; - -/// Indicates that the associated event should either extend the current session -/// or start a new session if no session was active when the event was logged. -/// Specify YES to extend the current session or to start a new session; any -/// other value will not extend or start a session. -///
-///     NSDictionary *params = @{
-///       kFIRParameterExtendSession : @YES,
-///       // ...
-///     };
-/// 
-static NSString *const kFIRParameterExtendSession NS_SWIFT_NAME(AnalyticsParameterExtendSession) = - @"extend_session"; - -/// Monetary value of discount associated with a purchase (double as NSNumber). -///
-///     NSDictionary *params = @{
-///       kFIRParameterDiscount : @(2.0),
-///       kFIRParameterCurrency : @"USD",  // e.g. $2.00 USD
-///       // ...
-///     };
-/// 
-static NSString *const kFIRParameterDiscount NS_SWIFT_NAME(AnalyticsParameterDiscount) = - @"discount"; - -/// Item Category (context-specific) (NSString). -///
-///     NSDictionary *params = @{
-///       kFIRParameterItemCategory2 : @"pants",
-///       // ...
-///     };
-/// 
-static NSString *const kFIRParameterItemCategory2 NS_SWIFT_NAME(AnalyticsParameterItemCategory2) = - @"item_category2"; - -/// Item Category (context-specific) (NSString). -///
-///     NSDictionary *params = @{
-///       kFIRParameterItemCategory3 : @"pants",
-///       // ...
-///     };
-/// 
-static NSString *const kFIRParameterItemCategory3 NS_SWIFT_NAME(AnalyticsParameterItemCategory3) = - @"item_category3"; - -/// Item Category (context-specific) (NSString). -///
-///     NSDictionary *params = @{
-///       kFIRParameterItemCategory4 : @"pants",
-///       // ...
-///     };
-/// 
-static NSString *const kFIRParameterItemCategory4 NS_SWIFT_NAME(AnalyticsParameterItemCategory4) = - @"item_category4"; - -/// Item Category (context-specific) (NSString). -///
-///     NSDictionary *params = @{
-///       kFIRParameterItemCategory5 : @"pants",
-///       // ...
-///     };
-/// 
-static NSString *const kFIRParameterItemCategory5 NS_SWIFT_NAME(AnalyticsParameterItemCategory5) = - @"item_category5"; - -/// The ID of the list in which the item was presented to the user (NSString). -///
-///     NSDictionary *params = @{
-///       kFIRParameterItemListID : @"ABC123",
-///       // ...
-///     };
-/// 
-static NSString *const kFIRParameterItemListID NS_SWIFT_NAME(AnalyticsParameterItemListID) = - @"item_list_id"; - -/// The name of the list in which the item was presented to the user (NSString). -///
-///     NSDictionary *params = @{
-///       kFIRParameterItemListName : @"Related products",
-///       // ...
-///     };
-/// 
-static NSString *const kFIRParameterItemListName NS_SWIFT_NAME(AnalyticsParameterItemListName) = - @"item_list_name"; - -/// The list of items involved in the transaction. (NSArray). -///
-///     NSDictionary *params = @{
-///       kFIRParameterItems : @[
-///         @{kFIRParameterItemName : @"jeggings", kFIRParameterItemCategory : @"pants"},
-///         @{kFIRParameterItemName : @"boots", kFIRParameterItemCategory : @"shoes"},
-///       ],
-///     };
-/// 
-static NSString *const kFIRParameterItems NS_SWIFT_NAME(AnalyticsParameterItems) = @"items"; - -/// The location associated with the event. Preferred to be the Google -/// Place ID that corresponds to the -/// associated item but could be overridden to a custom location ID string.(NSString).
-///     NSDictionary *params = @{
-///       kFIRParameterLocationID : @"ChIJiyj437sx3YAR9kUWC8QkLzQ",
-///       // ...
-///     };
-/// 
-static NSString *const kFIRParameterLocationID NS_SWIFT_NAME(AnalyticsParameterLocationID) = - @"location_id"; - -/// The chosen method of payment (NSString). -///
-///     NSDictionary *params = @{
-///       kFIRParameterPaymentType : @"Visa",
-///       // ...
-///     };
-/// 
-static NSString *const kFIRParameterPaymentType NS_SWIFT_NAME(AnalyticsParameterPaymentType) = - @"payment_type"; - -/// The ID of a product promotion (NSString). -///
-///     NSDictionary *params = @{
-///       kFIRParameterPromotionID : @"ABC123",
-///       // ...
-///     };
-/// 
-static NSString *const kFIRParameterPromotionID NS_SWIFT_NAME(AnalyticsParameterPromotionID) = - @"promotion_id"; - -/// The name of a product promotion (NSString). -///
-///     NSDictionary *params = @{
-///       kFIRParameterPromotionName : @"Summer Sale",
-///       // ...
-///     };
-/// 
-static NSString *const kFIRParameterPromotionName NS_SWIFT_NAME(AnalyticsParameterPromotionName) = - @"promotion_name"; - -/// The shipping tier (e.g. Ground, Air, Next-day) selected for delivery of the purchased item -/// (NSString). -///
-///     NSDictionary *params = @{
-///       kFIRParameterShippingTier : @"Ground",
-///       // ...
-///     };
-/// 
-static NSString *const kFIRParameterShippingTier NS_SWIFT_NAME(AnalyticsParameterShippingTier) = - @"shipping_tier"; diff --git a/iphone/Maps/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRUserPropertyNames.h b/iphone/Maps/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRUserPropertyNames.h deleted file mode 100755 index 132aef770c..0000000000 --- a/iphone/Maps/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FIRUserPropertyNames.h +++ /dev/null @@ -1,29 +0,0 @@ -/// @file FIRUserPropertyNames.h -/// -/// Predefined user property names. -/// -/// A UserProperty is an attribute that describes the app-user. By supplying UserProperties, you can -/// later analyze different behaviors of various segments of your userbase. You may supply up to 25 -/// unique UserProperties per app, and you can use the name and value of your choosing for each one. -/// UserProperty names can be up to 24 characters long, may only contain alphanumeric characters and -/// underscores ("_"), and must start with an alphabetic character. UserProperty values can be up to -/// 36 characters long. The "firebase_", "google_", and "ga_" prefixes are reserved and should not -/// be used. - -#import - -/// The method used to sign in. For example, "google", "facebook" or "twitter". -static NSString *const kFIRUserPropertySignUpMethod - NS_SWIFT_NAME(AnalyticsUserPropertySignUpMethod) = @"sign_up_method"; - -/// Indicates whether events logged by Google Analytics can be used to personalize ads for the user. -/// Set to "YES" to enable, or "NO" to disable. Default is enabled. See the -/// documentation for -/// more details and information about related settings. -/// -///
-///     [FIRAnalytics setUserPropertyString:@"NO"
-///                                 forName:kFIRUserPropertyAllowAdPersonalizationSignals];
-/// 
-static NSString *const kFIRUserPropertyAllowAdPersonalizationSignals - NS_SWIFT_NAME(AnalyticsUserPropertyAllowAdPersonalizationSignals) = @"allow_personalized_ads"; diff --git a/iphone/Maps/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FirebaseAnalytics.h b/iphone/Maps/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FirebaseAnalytics.h deleted file mode 100755 index ed7588a6b7..0000000000 --- a/iphone/Maps/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Headers/FirebaseAnalytics.h +++ /dev/null @@ -1,5 +0,0 @@ -#import "FIRAnalytics+AppDelegate.h" -#import "FIRAnalytics.h" -#import "FIREventNames.h" -#import "FIRParameterNames.h" -#import "FIRUserPropertyNames.h" diff --git a/iphone/Maps/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Modules/module.modulemap b/iphone/Maps/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Modules/module.modulemap deleted file mode 100755 index d7c59054aa..0000000000 --- a/iphone/Maps/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/Modules/module.modulemap +++ /dev/null @@ -1,12 +0,0 @@ -framework module FirebaseAnalytics { - umbrella header "FirebaseAnalytics.h" - export * - module * { export * } - link "sqlite3" - link "z" - link framework "CoreData" - link framework "Security" - link framework "StoreKit" - link framework "SystemConfiguration" - link framework "UIKit" -} diff --git a/iphone/Maps/Pods/FirebaseAnalyticsInterop/Interop/Analytics/Public/FIRAnalyticsInterop.h b/iphone/Maps/Pods/FirebaseAnalyticsInterop/Interop/Analytics/Public/FIRAnalyticsInterop.h deleted file mode 100644 index 6581b5368d..0000000000 --- a/iphone/Maps/Pods/FirebaseAnalyticsInterop/Interop/Analytics/Public/FIRAnalyticsInterop.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -@protocol FIRAnalyticsInteropListener; - -NS_ASSUME_NONNULL_BEGIN - -/// Block typedef callback parameter to getUserPropertiesWithCallback:. -typedef void (^FIRAInteropUserPropertiesCallback)(NSDictionary *userProperties); - -/// Connector for bridging communication between Firebase SDKs and FirebaseAnalytics API. -@protocol FIRAnalyticsInterop - -/// Sets user property when trigger event is logged. This API is only available in the SDK. -- (void)setConditionalUserProperty:(NSDictionary *)conditionalUserProperty; - -/// Clears user property if set. -- (void)clearConditionalUserProperty:(NSString *)userPropertyName - forOrigin:(NSString *)origin - clearEventName:(NSString *)clearEventName - clearEventParameters:(NSDictionary *)clearEventParameters; - -/// Returns currently set user properties. -- (NSArray *> *)conditionalUserProperties:(NSString *)origin - propertyNamePrefix: - (NSString *)propertyNamePrefix; - -/// Returns the maximum number of user properties. -- (NSInteger)maxUserProperties:(NSString *)origin; - -/// Returns the user properties to a callback function. -- (void)getUserPropertiesWithCallback:(FIRAInteropUserPropertiesCallback)callback; - -/// Logs events. -- (void)logEventWithOrigin:(NSString *)origin - name:(NSString *)name - parameters:(nullable NSDictionary *)parameters; - -/// Sets user property. -- (void)setUserPropertyWithOrigin:(NSString *)origin name:(NSString *)name value:(id)value; - -/// Registers an Analytics listener for the given origin. -- (void)registerAnalyticsListener:(id)listener - withOrigin:(NSString *)origin; - -/// Unregisters an Analytics listener for the given origin. -- (void)unregisterAnalyticsListenerWithOrigin:(NSString *)origin; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FirebaseAnalyticsInterop/Interop/Analytics/Public/FIRAnalyticsInteropListener.h b/iphone/Maps/Pods/FirebaseAnalyticsInterop/Interop/Analytics/Public/FIRAnalyticsInteropListener.h deleted file mode 100644 index 45cde55061..0000000000 --- a/iphone/Maps/Pods/FirebaseAnalyticsInterop/Interop/Analytics/Public/FIRAnalyticsInteropListener.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/// Handles events and messages from Analytics. -@protocol FIRAnalyticsInteropListener - -/// Triggers when an Analytics event happens for the registered origin with -/// `FIRAnalyticsInterop`s `registerAnalyticsListener:withOrigin:`. -- (void)messageTriggered:(NSString *)name parameters:(NSDictionary *)parameters; - -@end \ No newline at end of file diff --git a/iphone/Maps/Pods/FirebaseAnalyticsInterop/Interop/Analytics/Public/FIRInteropEventNames.h b/iphone/Maps/Pods/FirebaseAnalyticsInterop/Interop/Analytics/Public/FIRInteropEventNames.h deleted file mode 100644 index efc54ab221..0000000000 --- a/iphone/Maps/Pods/FirebaseAnalyticsInterop/Interop/Analytics/Public/FIRInteropEventNames.h +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/// @file FIRInteropEventNames.h - -#import - -/// Notification open event name. -static NSString *const kFIRIEventNotificationOpen = @"_no"; - -/// Notification foreground event name. -static NSString *const kFIRIEventNotificationForeground = @"_nf"; - -/// Campaign event name. -static NSString *const kFIRIEventFirebaseCampaign = @"_cmp"; diff --git a/iphone/Maps/Pods/FirebaseAnalyticsInterop/Interop/Analytics/Public/FIRInteropParameterNames.h b/iphone/Maps/Pods/FirebaseAnalyticsInterop/Interop/Analytics/Public/FIRInteropParameterNames.h deleted file mode 100644 index ae440becf8..0000000000 --- a/iphone/Maps/Pods/FirebaseAnalyticsInterop/Interop/Analytics/Public/FIRInteropParameterNames.h +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -/// @file FIRInteropParameterNames.h -/// -/// Predefined event parameter names used by Firebase. This file is a subset of the -/// FirebaseAnalytics FIRParameterNames.h public header. -/// -/// The origin of your traffic, such as an Ad network (for example, google) or partner (urban -/// airship). Identify the advertiser, site, publication, etc. that is sending traffic to your -/// property. Highly recommended (NSString). -///
-///     NSDictionary *params = @{
-///       kFIRParameterSource : @"InMobi",
-///       // ...
-///     };
-/// 
-static NSString *const kFIRIParameterSource NS_SWIFT_NAME(AnalyticsParameterSource) = @"source"; - -/// The advertising or marketing medium, for example: cpc, banner, email, push. Highly recommended -/// (NSString). -///
-///     NSDictionary *params = @{
-///       kFIRParameterMedium : @"email",
-///       // ...
-///     };
-/// 
-static NSString *const kFIRIParameterMedium NS_SWIFT_NAME(AnalyticsParameterMedium) = @"medium"; - -/// The individual campaign name, slogan, promo code, etc. Some networks have pre-defined macro to -/// capture campaign information, otherwise can be populated by developer. Highly Recommended -/// (NSString). -///
-///     NSDictionary *params = @{
-///       kFIRParameterCampaign : @"winter_promotion",
-///       // ...
-///     };
-/// 
-static NSString *const kFIRIParameterCampaign NS_SWIFT_NAME(AnalyticsParameterCampaign) = - @"campaign"; - -/// Message identifier. -static NSString *const kFIRIParameterMessageIdentifier = @"_nmid"; - -/// Message name. -static NSString *const kFIRIParameterMessageName = @"_nmn"; - -/// Message send time. -static NSString *const kFIRIParameterMessageTime = @"_nmt"; - -/// Message device time. -static NSString *const kFIRIParameterMessageDeviceTime = @"_ndt"; - -/// Topic message. -static NSString *const kFIRIParameterTopic = @"_nt"; - -/// Stores the message_id of the last notification opened by the app. -static NSString *const kFIRIUserPropertyLastNotification = @"_ln"; diff --git a/iphone/Maps/Pods/FirebaseAnalyticsInterop/LICENSE b/iphone/Maps/Pods/FirebaseAnalyticsInterop/LICENSE deleted file mode 100644 index d645695673..0000000000 --- a/iphone/Maps/Pods/FirebaseAnalyticsInterop/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/iphone/Maps/Pods/FirebaseAnalyticsInterop/README.md b/iphone/Maps/Pods/FirebaseAnalyticsInterop/README.md deleted file mode 100644 index 3ddc8fbd29..0000000000 --- a/iphone/Maps/Pods/FirebaseAnalyticsInterop/README.md +++ /dev/null @@ -1,251 +0,0 @@ -# Firebase iOS Open Source Development [![Build Status](https://travis-ci.org/firebase/firebase-ios-sdk.svg?branch=master)](https://travis-ci.org/firebase/firebase-ios-sdk) - -This repository contains a subset of the Firebase iOS SDK source. It currently -includes FirebaseCore, FirebaseABTesting, FirebaseAuth, FirebaseDatabase, -FirebaseFirestore, FirebaseFunctions, FirebaseInstanceID, FirebaseInAppMessaging, -FirebaseInAppMessagingDisplay, FirebaseMessaging, FirebaseRemoteConfig, and -FirebaseStorage. - -The repository also includes GoogleUtilities source. The -[GoogleUtilities](GoogleUtilities/README.md) pod is -a set of utilities used by Firebase and other Google products. - -Firebase is an app development platform with tools to help you build, grow and -monetize your app. More information about Firebase can be found at -[https://firebase.google.com](https://firebase.google.com). - -## Installation - -See the three subsections for details about three different installation methods. -1. [Standard pod install](README.md#standard-pod-install) -1. [Installing from the GitHub repo](README.md#installing-from-github) -1. [Experimental Carthage](README.md#carthage-ios-only) - -### Standard pod install - -Go to -[https://firebase.google.com/docs/ios/setup](https://firebase.google.com/docs/ios/setup). - -### Installing from GitHub - -For releases starting with 5.0.0, the source for each release is also deployed -to CocoaPods master and available via standard -[CocoaPods Podfile syntax](https://guides.cocoapods.org/syntax/podfile.html#pod). - -These instructions can be used to access the Firebase repo at other branches, -tags, or commits. - -#### Background - -See -[the Podfile Syntax Reference](https://guides.cocoapods.org/syntax/podfile.html#pod) -for instructions and options about overriding pod source locations. - -#### Accessing Firebase Source Snapshots - -All of the official releases are tagged in this repo and available via CocoaPods. To access a local -source snapshot or unreleased branch, use Podfile directives like the following: - -To access FirebaseFirestore via a branch: -``` -pod 'FirebaseCore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master' -pod 'FirebaseFirestore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master' -``` - -To access FirebaseMessaging via a checked out version of the firebase-ios-sdk repo do: - -``` -pod 'FirebaseCore', :path => '/path/to/firebase-ios-sdk' -pod 'FirebaseMessaging', :path => '/path/to/firebase-ios-sdk' -``` - -### Carthage (iOS only) - -Instructions for the experimental Carthage distribution are at -[Carthage](Carthage.md). - -### Rome - -Instructions for installing binary frameworks via -[Rome](https://github.com/CocoaPods/Rome) are at [Rome](Rome.md). - -## Development - -To develop Firebase software in this repository, ensure that you have at least -the following software: - - * Xcode 10.1 (or later) - * CocoaPods 1.7.2 (or later) - * [CocoaPods generate](https://github.com/square/cocoapods-generate) - -For the pod that you want to develop: - -`pod gen Firebase{name here}.podspec --local-sources=./ --auto-open --platforms=ios` - -Note: If the CocoaPods cache is out of date, you may need to run -`pod repo update` before the `pod gen` command. - -Note: Set the `--platforms` option to `macos` or `tvos` to develop/test for -those platforms. Since 10.2, Xcode does not properly handle multi-platform -CocoaPods workspaces. - -Firestore has a self contained Xcode project. See -[Firestore/README.md](Firestore/README.md). - -### Development for Catalyst -* `pod gen {name here}.podspec --local-sources=./ --auto-open --platforms=ios` -* Check the Mac box in the App-iOS Build Settings -* Sign the App in the Settings Signing & Capabilities tab -* Click Pods in the Project Manager -* Add Signing to the iOS host app and unit test targets -* Select the Unit-unit scheme -* Run it to build and test - -### Adding a New Firebase Pod - -See [AddNewPod.md](AddNewPod.md). - -### Code Formatting - -To ensure that the code is formatted consistently, run the script -[./scripts/style.sh](https://github.com/firebase/firebase-ios-sdk/blob/master/scripts/style.sh) -before creating a PR. - -Travis will verify that any code changes are done in a style compliant way. Install -`clang-format` and `swiftformat`. -These commands will get the right versions: - -``` -brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/e3496d9/Formula/clang-format.rb -brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/7963c3d/Formula/swiftformat.rb -``` - -Note: if you already have a newer version of these installed you may need to -`brew switch` to this version. - -To update this section, find the versions of clang-format and swiftformat.rb to -match the versions in the CI failure logs -[here](https://github.com/Homebrew/homebrew-core/tree/master/Formula). - -### Running Unit Tests - -Select a scheme and press Command-u to build a component and run its unit tests. - -#### Viewing Code Coverage - -First, make sure that [xcov](https://github.com/nakiostudio/xcov) is installed with `gem install xcov`. - -After running the `AllUnitTests_iOS` scheme in Xcode, execute -`xcov --workspace Firebase.xcworkspace --scheme AllUnitTests_iOS --output_directory xcov_output` -at Example/ in the terminal. This will aggregate the coverage, and you can run `open xcov_output/index.html` to see the results. - -### Running Sample Apps -In order to run the sample apps and integration tests, you'll need valid -`GoogleService-Info.plist` files for those samples. The Firebase Xcode project contains dummy plist -files without real values, but can be replaced with real plist files. To get your own -`GoogleService-Info.plist` files: - -1. Go to the [Firebase Console](https://console.firebase.google.com/) -2. Create a new Firebase project, if you don't already have one -3. For each sample app you want to test, create a new Firebase app with the sample app's bundle -identifier (e.g. `com.google.Database-Example`) -4. Download the resulting `GoogleService-Info.plist` and replace the appropriate dummy plist file -(e.g. in [Example/Database/App/](Example/Database/App/)); - -Some sample apps like Firebase Messaging ([Example/Messaging/App](Example/Messaging/App)) require -special Apple capabilities, and you will have to change the sample app to use a unique bundle -identifier that you can control in your own Apple Developer account. - -## Specific Component Instructions -See the sections below for any special instructions for those components. - -### Firebase Auth - -If you're doing specific Firebase Auth development, see -[the Auth Sample README](Example/Auth/README.md) for instructions about -building and running the FirebaseAuth pod along with various samples and tests. - -### Firebase Database - -To run the Database Integration tests, make your database authentication rules -[public](https://firebase.google.com/docs/database/security/quickstart). - -### Firebase Storage - -To run the Storage Integration tests, follow the instructions in -[FIRStorageIntegrationTests.m](Example/Storage/Tests/Integration/FIRStorageIntegrationTests.m). - -#### Push Notifications - -Push notifications can only be delivered to specially provisioned App IDs in the developer portal. -In order to actually test receiving push notifications, you will need to: - -1. Change the bundle identifier of the sample app to something you own in your Apple Developer -account, and enable that App ID for push notifications. -2. You'll also need to -[upload your APNs Provider Authentication Key or certificate to the Firebase Console](https://firebase.google.com/docs/cloud-messaging/ios/certs) -at **Project Settings > Cloud Messaging > [Your Firebase App]**. -3. Ensure your iOS device is added to your Apple Developer portal as a test device. - -#### iOS Simulator - -The iOS Simulator cannot register for remote notifications, and will not receive push notifications. -In order to receive push notifications, you'll have to follow the steps above and run the app on a -physical device. - -## Community Supported Efforts - -We've seen an amazing amount of interest and contributions to improve the Firebase SDKs, and we are -very grateful! We'd like to empower as many developers as we can to be able to use Firebase and -participate in the Firebase community. - -### tvOS, macOS, and Catalyst -Thanks to contributions from the community, FirebaseABTesting, FirebaseAuth, FirebaseCore, -FirebaseDatabase, FirebaseMessaging, FirebaseFirestore, -FirebaseFunctions, FirebaseRemoteConfig, and FirebaseStorage now compile, run unit tests, and work on -tvOS, macOS, and Catalyst. - -For tvOS, checkout the [Sample](Example/tvOSSample). - -Keep in mind that macOS, Catalyst and tvOS are not officially supported by Firebase, and this -repository is actively developed primarily for iOS. While we can catch basic unit test issues with -Travis, there may be some changes where the SDK no longer works as expected on macOS or tvOS. If you -encounter this, please [file an issue](https://github.com/firebase/firebase-ios-sdk/issues). - -To install, add a subset of the following to the Podfile: - -``` -pod 'Firebase/ABTesting' -pod 'Firebase/Auth' -pod 'Firebase/Database' -pod 'Firebase/Firestore' -pod 'Firebase/Functions' -pod 'Firebase/Messaging' -pod 'Firebase/RemoteConfig' -pod 'Firebase/Storage' -``` - -#### Additional Catalyst Notes - -* FirebaseAuth and FirebaseMessaging require adding `Keychain Sharing Capability` -to Build Settings. -* FirebaseFirestore requires signing the -[gRPC Resource target](https://github.com/firebase/firebase-ios-sdk/issues/3500#issuecomment-518741681). - -## Roadmap - -See [Roadmap](ROADMAP.md) for more about the Firebase iOS SDK Open Source -plans and directions. - -## Contributing - -See [Contributing](CONTRIBUTING.md) for more information on contributing to the Firebase -iOS SDK. - -## License - -The contents of this repository is licensed under the -[Apache License, version 2.0](http://www.apache.org/licenses/LICENSE-2.0). - -Your use of Firebase is governed by the -[Terms of Service for Firebase Services](https://firebase.google.com/terms/). diff --git a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/FIRAnalyticsConfiguration.m b/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/FIRAnalyticsConfiguration.m deleted file mode 100644 index 3a7d6de0e7..0000000000 --- a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/FIRAnalyticsConfiguration.m +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2017 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import - -#import "FirebaseCore/Sources/Private/FIRAnalyticsConfiguration.h" - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-implementations" -@implementation FIRAnalyticsConfiguration -#pragma clang diagnostic pop - -+ (FIRAnalyticsConfiguration *)sharedInstance { - static FIRAnalyticsConfiguration *sharedInstance = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - sharedInstance = [[FIRAnalyticsConfiguration alloc] init]; - }); - return sharedInstance; -} - -- (void)postNotificationName:(NSString *)name value:(id)value { - if (!name.length || !value) { - return; - } - [[NSNotificationCenter defaultCenter] postNotificationName:name - object:self - userInfo:@{name : value}]; -} - -- (void)setAnalyticsCollectionEnabled:(BOOL)analyticsCollectionEnabled { - [self setAnalyticsCollectionEnabled:analyticsCollectionEnabled persistSetting:YES]; -} - -- (void)setAnalyticsCollectionEnabled:(BOOL)analyticsCollectionEnabled - persistSetting:(BOOL)shouldPersist { - // Persist the measurementEnabledState. Use FIRAnalyticsEnabledState values instead of YES/NO. - FIRAnalyticsEnabledState analyticsEnabledState = - analyticsCollectionEnabled ? kFIRAnalyticsEnabledStateSetYes : kFIRAnalyticsEnabledStateSetNo; - if (shouldPersist) { - NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; - [userDefaults setObject:@(analyticsEnabledState) - forKey:kFIRAPersistedConfigMeasurementEnabledStateKey]; - [userDefaults synchronize]; - } - - [self postNotificationName:kFIRAnalyticsConfigurationSetEnabledNotification - value:@(analyticsCollectionEnabled)]; -} - -@end diff --git a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/FIRApp.m b/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/FIRApp.m deleted file mode 100644 index f12a1455ab..0000000000 --- a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/FIRApp.m +++ /dev/null @@ -1,938 +0,0 @@ -// Copyright 2017 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include - -#if __has_include() -#import -#endif - -#if __has_include() -#import -#endif - -#import - -#import "FirebaseCore/Sources/FIRBundleUtil.h" -#import "FirebaseCore/Sources/FIRVersion.h" -#import "FirebaseCore/Sources/Private/FIRAnalyticsConfiguration.h" -#import "FirebaseCore/Sources/Private/FIRAppInternal.h" -#import "FirebaseCore/Sources/Private/FIRComponentContainerInternal.h" -#import "FirebaseCore/Sources/Private/FIRConfigurationInternal.h" -#import "FirebaseCore/Sources/Private/FIRCoreDiagnosticsConnector.h" -#import "FirebaseCore/Sources/Private/FIRLibrary.h" -#import "FirebaseCore/Sources/Private/FIRLogger.h" -#import "FirebaseCore/Sources/Private/FIROptionsInternal.h" - -#import - -#import - -// The kFIRService strings are only here while transitioning CoreDiagnostics from the Analytics -// pod to a Core dependency. These symbols are not used and should be deleted after the transition. -NSString *const kFIRServiceAdMob; -NSString *const kFIRServiceAuth; -NSString *const kFIRServiceAuthUI; -NSString *const kFIRServiceCrash; -NSString *const kFIRServiceDatabase; -NSString *const kFIRServiceDynamicLinks; -NSString *const kFIRServiceFirestore; -NSString *const kFIRServiceFunctions; -NSString *const kFIRServiceInstanceID; -NSString *const kFIRServiceInvites; -NSString *const kFIRServiceMessaging; -NSString *const kFIRServiceMeasurement; -NSString *const kFIRServicePerformance; -NSString *const kFIRServiceRemoteConfig; -NSString *const kFIRServiceStorage; -NSString *const kGGLServiceAnalytics; -NSString *const kGGLServiceSignIn; - -NSString *const kFIRDefaultAppName = @"__FIRAPP_DEFAULT"; -NSString *const kFIRAppReadyToConfigureSDKNotification = @"FIRAppReadyToConfigureSDKNotification"; -NSString *const kFIRAppDeleteNotification = @"FIRAppDeleteNotification"; -NSString *const kFIRAppIsDefaultAppKey = @"FIRAppIsDefaultAppKey"; -NSString *const kFIRAppNameKey = @"FIRAppNameKey"; -NSString *const kFIRGoogleAppIDKey = @"FIRGoogleAppIDKey"; - -NSString *const kFIRGlobalAppDataCollectionEnabledDefaultsKeyFormat = - @"/google/firebase/global_data_collection_enabled:%@"; -NSString *const kFIRGlobalAppDataCollectionEnabledPlistKey = - @"FirebaseDataCollectionDefaultEnabled"; - -NSString *const kFIRAppDiagnosticsNotification = @"FIRAppDiagnosticsNotification"; - -NSString *const kFIRAppDiagnosticsConfigurationTypeKey = @"ConfigType"; -NSString *const kFIRAppDiagnosticsErrorKey = @"Error"; -NSString *const kFIRAppDiagnosticsFIRAppKey = @"FIRApp"; -NSString *const kFIRAppDiagnosticsSDKNameKey = @"SDKName"; -NSString *const kFIRAppDiagnosticsSDKVersionKey = @"SDKVersion"; -NSString *const kFIRAppDiagnosticsApplePlatformPrefix = @"apple-platform"; - -// Auth internal notification notification and key. -NSString *const FIRAuthStateDidChangeInternalNotification = - @"FIRAuthStateDidChangeInternalNotification"; -NSString *const FIRAuthStateDidChangeInternalNotificationAppKey = - @"FIRAuthStateDidChangeInternalNotificationAppKey"; -NSString *const FIRAuthStateDidChangeInternalNotificationTokenKey = - @"FIRAuthStateDidChangeInternalNotificationTokenKey"; -NSString *const FIRAuthStateDidChangeInternalNotificationUIDKey = - @"FIRAuthStateDidChangeInternalNotificationUIDKey"; - -/** - * The URL to download plist files. - */ -static NSString *const kPlistURL = @"https://console.firebase.google.com/"; - -/** - * An array of all classes that registered as `FIRCoreConfigurable` in order to receive lifecycle - * events from Core. - */ -static NSMutableArray> *sRegisteredAsConfigurable; - -@interface FIRApp () - -#ifdef DEBUG -@property(nonatomic) BOOL alreadyOutputDataCollectionFlag; -#endif // DEBUG - -@end - -@implementation FIRApp - -// This is necessary since our custom getter prevents `_options` from being created. -@synthesize options = _options; - -static NSMutableDictionary *sAllApps; -static FIRApp *sDefaultApp; -static NSMutableDictionary *sLibraryVersions; -static dispatch_once_t sFirebaseUserAgentOnceToken; - -+ (void)configure { - FIROptions *options = [FIROptions defaultOptions]; - if (!options) { - [NSException raise:kFirebaseCoreErrorDomain - format:@"`[FIRApp configure];` (`FirebaseApp.configure()` in Swift) could not find " - @"a valid GoogleService-Info.plist in your project. Please download one " - @"from %@.", - kPlistURL]; - } - [FIRApp configureWithOptions:options]; -#if TARGET_OS_OSX || TARGET_OS_TV - FIRLogNotice(kFIRLoggerCore, @"I-COR000028", - @"tvOS and macOS SDK support is not part of the official Firebase product. " - @"Instead they are community supported. Details at " - @"https://github.com/firebase/firebase-ios-sdk/blob/master/README.md."); -#endif -} - -+ (void)configureWithOptions:(FIROptions *)options { - if (!options) { - [NSException raise:kFirebaseCoreErrorDomain - format:@"Options is nil. Please pass a valid options."]; - } - [FIRApp configureWithName:kFIRDefaultAppName options:options]; -} - -+ (NSCharacterSet *)applicationNameAllowedCharacters { - static NSCharacterSet *applicationNameAllowedCharacters; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - NSMutableCharacterSet *allowedNameCharacters = [NSMutableCharacterSet alphanumericCharacterSet]; - [allowedNameCharacters addCharactersInString:@"-_"]; - applicationNameAllowedCharacters = [allowedNameCharacters copy]; - }); - return applicationNameAllowedCharacters; -} - -+ (void)configureWithName:(NSString *)name options:(FIROptions *)options { - if (!name || !options) { - [NSException raise:kFirebaseCoreErrorDomain format:@"Neither name nor options can be nil."]; - } - if (name.length == 0) { - [NSException raise:kFirebaseCoreErrorDomain format:@"Name cannot be empty."]; - } - - if ([name isEqualToString:kFIRDefaultAppName]) { - if (sDefaultApp) { - // The default app already exists. Handle duplicate `configure` calls and return. - [self appWasConfiguredTwice:sDefaultApp usingOptions:options]; - return; - } - - FIRLogDebug(kFIRLoggerCore, @"I-COR000001", @"Configuring the default app."); - } else { - // Validate the app name and ensure it hasn't been configured already. - NSCharacterSet *nameCharacters = [NSCharacterSet characterSetWithCharactersInString:name]; - - if (![[self applicationNameAllowedCharacters] isSupersetOfSet:nameCharacters]) { - [NSException raise:kFirebaseCoreErrorDomain - format:@"App name can only contain alphanumeric, " - @"hyphen (-), and underscore (_) characters"]; - } - - @synchronized(self) { - if (sAllApps && sAllApps[name]) { - // The app already exists. Handle a duplicate `configure` call and return. - [self appWasConfiguredTwice:sAllApps[name] usingOptions:options]; - return; - } - } - - FIRLogDebug(kFIRLoggerCore, @"I-COR000002", @"Configuring app named %@", name); - } - - @synchronized(self) { - FIRApp *app = [[FIRApp alloc] initInstanceWithName:name options:options]; - if (app.isDefaultApp) { - sDefaultApp = app; - } - - [FIRApp addAppToAppDictionary:app]; - - // The FIRApp instance is ready to go, `sDefaultApp` is assigned, other SDKs are now ready to be - // instantiated. - [app.container instantiateEagerComponents]; - [FIRApp sendNotificationsToSDKs:app]; - } -} - -/// Called when `configure` has been called multiple times for the same app. This can either throw -/// an exception (most cases) or ignore the duplicate configuration in situations where it's allowed -/// like an extension. -+ (void)appWasConfiguredTwice:(FIRApp *)app usingOptions:(FIROptions *)options { - // Only extensions should potentially be able to call `configure` more than once. - if (![GULAppEnvironmentUtil isAppExtension]) { - // Throw an exception since this is now an invalid state. - if (app.isDefaultApp) { - [NSException raise:kFirebaseCoreErrorDomain - format:@"Default app has already been configured."]; - } else { - [NSException raise:kFirebaseCoreErrorDomain - format:@"App named %@ has already been configured.", app.name]; - } - } - - // In an extension, the entry point could be called multiple times. As long as the options are - // identical we should allow multiple `configure` calls. - if ([options isEqual:app.options]) { - // Everything is identical but the extension's lifecycle triggered `configure` twice. - // Ignore duplicate calls and return since everything should still be in a valid state. - FIRLogDebug(kFIRLoggerCore, @"I-COR000035", - @"Ignoring second `configure` call in an extension."); - return; - } else { - [NSException raise:kFirebaseCoreErrorDomain - format:@"App named %@ has already been configured.", app.name]; - } -} - -+ (FIRApp *)defaultApp { - if (sDefaultApp) { - return sDefaultApp; - } - FIRLogError(kFIRLoggerCore, @"I-COR000003", - @"The default Firebase app has not yet been " - @"configured. Add `[FIRApp configure];` (`FirebaseApp.configure()` in Swift) to your " - @"application initialization. Read more: https://goo.gl/ctyzm8."); - return nil; -} - -+ (FIRApp *)appNamed:(NSString *)name { - @synchronized(self) { - if (sAllApps) { - FIRApp *app = sAllApps[name]; - if (app) { - return app; - } - } - FIRLogError(kFIRLoggerCore, @"I-COR000004", @"App with name %@ does not exist.", name); - return nil; - } -} - -+ (NSDictionary *)allApps { - @synchronized(self) { - if (!sAllApps) { - FIRLogError(kFIRLoggerCore, @"I-COR000005", @"No app has been configured yet."); - } - return [sAllApps copy]; - } -} - -// Public only for tests -+ (void)resetApps { - @synchronized(self) { - sDefaultApp = nil; - [sAllApps removeAllObjects]; - sAllApps = nil; - [sLibraryVersions removeAllObjects]; - sLibraryVersions = nil; - sFirebaseUserAgentOnceToken = 0; - } -} - -- (void)deleteApp:(FIRAppVoidBoolCallback)completion { - @synchronized([self class]) { - if (sAllApps && sAllApps[self.name]) { - FIRLogDebug(kFIRLoggerCore, @"I-COR000006", @"Deleting app named %@", self.name); - - // Remove all registered libraries from the container to avoid creating new instances. - [self.container removeAllComponents]; - // Remove all cached instances from the container before deleting the app. - [self.container removeAllCachedInstances]; - - [sAllApps removeObjectForKey:self.name]; - [self clearDataCollectionSwitchFromUserDefaults]; - if ([self.name isEqualToString:kFIRDefaultAppName]) { - sDefaultApp = nil; - } - NSDictionary *appInfoDict = @{kFIRAppNameKey : self.name}; - [[NSNotificationCenter defaultCenter] postNotificationName:kFIRAppDeleteNotification - object:[self class] - userInfo:appInfoDict]; - completion(YES); - } else { - FIRLogError(kFIRLoggerCore, @"I-COR000007", @"App does not exist."); - completion(NO); - } - } -} - -+ (void)addAppToAppDictionary:(FIRApp *)app { - if (!sAllApps) { - sAllApps = [NSMutableDictionary dictionary]; - } - if ([app configureCore]) { - sAllApps[app.name] = app; - } else { - [NSException raise:kFirebaseCoreErrorDomain - format:@"Configuration fails. It may be caused by an invalid GOOGLE_APP_ID in " - @"GoogleService-Info.plist or set in the customized options."]; - } -} - -- (instancetype)initInstanceWithName:(NSString *)name options:(FIROptions *)options { - self = [super init]; - if (self) { - _name = [name copy]; - _options = [options copy]; - _options.editingLocked = YES; - _isDefaultApp = [name isEqualToString:kFIRDefaultAppName]; - _container = [[FIRComponentContainer alloc] initWithApp:self]; - } - return self; -} - -- (void)dealloc { - [[NSNotificationCenter defaultCenter] removeObserver:self]; -} - -- (BOOL)configureCore { - [self checkExpectedBundleID]; - if (![self isAppIDValid]) { - return NO; - } - - [self logCoreTelemetryIfEnabled]; - -#if TARGET_OS_IOS - // Initialize the Analytics once there is a valid options under default app. Analytics should - // always initialize first by itself before the other SDKs. - if ([self.name isEqualToString:kFIRDefaultAppName]) { - Class firAnalyticsClass = NSClassFromString(@"FIRAnalytics"); - if (firAnalyticsClass) { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wundeclared-selector" - SEL startWithConfigurationSelector = @selector(startWithConfiguration:options:); -#pragma clang diagnostic pop - if ([firAnalyticsClass respondsToSelector:startWithConfigurationSelector]) { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Warc-performSelector-leaks" -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - [firAnalyticsClass performSelector:startWithConfigurationSelector - withObject:[FIRConfiguration sharedInstance].analyticsConfiguration - withObject:_options]; -#pragma clang diagnostic pop - } - } - } -#endif - - [self subscribeForAppDidBecomeActiveNotifications]; - - return YES; -} - -- (FIROptions *)options { - return [_options copy]; -} - -- (void)setDataCollectionDefaultEnabled:(BOOL)dataCollectionDefaultEnabled { -#ifdef DEBUG - FIRLogDebug(kFIRLoggerCore, @"I-COR000034", @"Explicitly %@ data collection flag.", - dataCollectionDefaultEnabled ? @"enabled" : @"disabled"); - self.alreadyOutputDataCollectionFlag = YES; -#endif // DEBUG - - NSString *key = - [NSString stringWithFormat:kFIRGlobalAppDataCollectionEnabledDefaultsKeyFormat, self.name]; - [[NSUserDefaults standardUserDefaults] setBool:dataCollectionDefaultEnabled forKey:key]; - - // Core also controls the FirebaseAnalytics flag, so check if the Analytics flags are set - // within FIROptions and change the Analytics value if necessary. Analytics only works with the - // default app, so return if this isn't the default app. - if (!self.isDefaultApp) { - return; - } - - // Check if the Analytics flag is explicitly set. If so, no further actions are necessary. - if ([self.options isAnalyticsCollectionExplicitlySet]) { - return; - } - - // The Analytics flag has not been explicitly set, so update with the value being set. -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - [[FIRAnalyticsConfiguration sharedInstance] - setAnalyticsCollectionEnabled:dataCollectionDefaultEnabled - persistSetting:NO]; -#pragma clang diagnostic pop -} - -- (BOOL)isDataCollectionDefaultEnabled { - // Check if it's been manually set before in code, and use that as the higher priority value. - NSNumber *defaultsObject = [[self class] readDataCollectionSwitchFromUserDefaultsForApp:self]; - if (defaultsObject != nil) { -#ifdef DEBUG - if (!self.alreadyOutputDataCollectionFlag) { - FIRLogDebug(kFIRLoggerCore, @"I-COR000031", @"Data Collection flag is %@ in user defaults.", - [defaultsObject boolValue] ? @"enabled" : @"disabled"); - self.alreadyOutputDataCollectionFlag = YES; - } -#endif // DEBUG - return [defaultsObject boolValue]; - } - - // Read the Info.plist to see if the flag is set. If it's not set, it should default to `YES`. - // As per the implementation of `readDataCollectionSwitchFromPlist`, it's a cached value and has - // no performance impact calling multiple times. - NSNumber *collectionEnabledPlistValue = [[self class] readDataCollectionSwitchFromPlist]; - if (collectionEnabledPlistValue != nil) { -#ifdef DEBUG - if (!self.alreadyOutputDataCollectionFlag) { - FIRLogDebug(kFIRLoggerCore, @"I-COR000032", @"Data Collection flag is %@ in plist.", - [collectionEnabledPlistValue boolValue] ? @"enabled" : @"disabled"); - self.alreadyOutputDataCollectionFlag = YES; - } -#endif // DEBUG - return [collectionEnabledPlistValue boolValue]; - } - -#ifdef DEBUG - if (!self.alreadyOutputDataCollectionFlag) { - FIRLogDebug(kFIRLoggerCore, @"I-COR000033", @"Data Collection flag is not set."); - self.alreadyOutputDataCollectionFlag = YES; - } -#endif // DEBUG - return YES; -} - -#pragma mark - private - -+ (void)sendNotificationsToSDKs:(FIRApp *)app { - // TODO: Remove this notification once all SDKs are registered with `FIRCoreConfigurable`. - NSNumber *isDefaultApp = [NSNumber numberWithBool:app.isDefaultApp]; - NSDictionary *appInfoDict = @{ - kFIRAppNameKey : app.name, - kFIRAppIsDefaultAppKey : isDefaultApp, - kFIRGoogleAppIDKey : app.options.googleAppID - }; - [[NSNotificationCenter defaultCenter] postNotificationName:kFIRAppReadyToConfigureSDKNotification - object:self - userInfo:appInfoDict]; - - // This is the new way of sending information to SDKs. - // TODO: Do we want this on a background thread, maybe? - @synchronized(self) { - for (Class library in sRegisteredAsConfigurable) { - [library configureWithApp:app]; - } - } -} - -+ (NSError *)errorForMissingOptions { - NSDictionary *errorDict = @{ - NSLocalizedDescriptionKey : - @"Unable to parse GoogleService-Info.plist in order to configure services.", - NSLocalizedRecoverySuggestionErrorKey : - @"Check formatting and location of GoogleService-Info.plist." - }; - return [NSError errorWithDomain:kFirebaseCoreErrorDomain - code:FIRErrorCodeInvalidPlistFile - userInfo:errorDict]; -} - -+ (NSError *)errorForSubspecConfigurationFailureWithDomain:(NSString *)domain - errorCode:(FIRErrorCode)code - service:(NSString *)service - reason:(NSString *)reason { - NSString *description = - [NSString stringWithFormat:@"Configuration failed for service %@.", service]; - NSDictionary *errorDict = - @{NSLocalizedDescriptionKey : description, NSLocalizedFailureReasonErrorKey : reason}; - return [NSError errorWithDomain:domain code:code userInfo:errorDict]; -} - -+ (NSError *)errorForInvalidAppID { - NSDictionary *errorDict = @{ - NSLocalizedDescriptionKey : @"Unable to validate Google App ID", - NSLocalizedRecoverySuggestionErrorKey : - @"Check formatting and location of GoogleService-Info.plist or GoogleAppID set in the " - @"customized options." - }; - return [NSError errorWithDomain:kFirebaseCoreErrorDomain - code:FIRErrorCodeInvalidAppID - userInfo:errorDict]; -} - -+ (BOOL)isDefaultAppConfigured { - return (sDefaultApp != nil); -} - -+ (void)registerLibrary:(nonnull NSString *)name withVersion:(nonnull NSString *)version { - // Create the set of characters which aren't allowed, only if this feature is used. - NSMutableCharacterSet *allowedSet = [NSMutableCharacterSet alphanumericCharacterSet]; - [allowedSet addCharactersInString:@"-_."]; - NSCharacterSet *disallowedSet = [allowedSet invertedSet]; - // Make sure the library name and version strings do not contain unexpected characters, and - // add the name/version pair to the dictionary. - if ([name rangeOfCharacterFromSet:disallowedSet].location == NSNotFound && - [version rangeOfCharacterFromSet:disallowedSet].location == NSNotFound) { - @synchronized(self) { - if (!sLibraryVersions) { - sLibraryVersions = [[NSMutableDictionary alloc] init]; - } - sLibraryVersions[name] = version; - } - } else { - FIRLogError(kFIRLoggerCore, @"I-COR000027", - @"The library name (%@) or version number (%@) contain invalid characters. " - @"Only alphanumeric, dash, underscore and period characters are allowed.", - name, version); - } -} - -+ (void)registerInternalLibrary:(nonnull Class)library - withName:(nonnull NSString *)name - withVersion:(nonnull NSString *)version { - // This is called at +load time, keep the work to a minimum. - - // Ensure the class given conforms to the proper protocol. - if (![(Class)library conformsToProtocol:@protocol(FIRLibrary)] || - ![(Class)library respondsToSelector:@selector(componentsToRegister)]) { - [NSException raise:NSInvalidArgumentException - format:@"Class %@ attempted to register components, but it does not conform to " - @"`FIRLibrary or provide a `componentsToRegister:` method.", - library]; - } - - [FIRComponentContainer registerAsComponentRegistrant:library]; - if ([(Class)library respondsToSelector:@selector(configureWithApp:)]) { - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - sRegisteredAsConfigurable = [[NSMutableArray alloc] init]; - }); - @synchronized(self) { - [sRegisteredAsConfigurable addObject:library]; - } - } - [self registerLibrary:name withVersion:version]; -} - -+ (NSString *)firebaseUserAgent { - @synchronized(self) { - dispatch_once(&sFirebaseUserAgentOnceToken, ^{ - // Report FirebaseCore version for useragent string - [FIRApp registerLibrary:@"fire-ios" - withVersion:[NSString stringWithUTF8String:FIRCoreVersionString]]; - - NSDictionary *info = [[NSBundle mainBundle] infoDictionary]; - NSString *xcodeVersion = info[@"DTXcodeBuild"]; - NSString *sdkVersion = info[@"DTSDKBuild"]; - if (xcodeVersion) { - [FIRApp registerLibrary:@"xcode" withVersion:xcodeVersion]; - } - if (sdkVersion) { - [FIRApp registerLibrary:@"apple-sdk" withVersion:sdkVersion]; - } - - NSString *swiftFlagValue = [self hasSwiftRuntime] ? @"true" : @"false"; - [FIRApp registerLibrary:@"swift" withVersion:swiftFlagValue]; - - [FIRApp registerLibrary:kFIRAppDiagnosticsApplePlatformPrefix - withVersion:[self applePlatform]]; - }); - - NSMutableArray *libraries = - [[NSMutableArray alloc] initWithCapacity:sLibraryVersions.count]; - for (NSString *libraryName in sLibraryVersions) { - [libraries addObject:[NSString stringWithFormat:@"%@/%@", libraryName, - sLibraryVersions[libraryName]]]; - } - [libraries sortUsingSelector:@selector(localizedCaseInsensitiveCompare:)]; - return [libraries componentsJoinedByString:@" "]; - } -} - -+ (BOOL)hasSwiftRuntime { - // The class - // [Swift._SwiftObject](https://github.com/apple/swift/blob/5eac3e2818eb340b11232aff83edfbd1c307fa03/stdlib/public/runtime/SwiftObject.h#L35) - // is a part of Swift runtime, so it should be present if Swift runtime is available. - - BOOL hasSwiftRuntime = - objc_lookUpClass("Swift._SwiftObject") != nil || - // Swift object class name before - // https://github.com/apple/swift/commit/9637b4a6e11ddca72f5f6dbe528efc7c92f14d01 - objc_getClass("_TtCs12_SwiftObject") != nil; - - return hasSwiftRuntime; -} - -+ (NSString *)applePlatform { - NSString *applePlatform = @"unknown"; - - // When a Catalyst app is run on macOS then both `TARGET_OS_MACCATALYST` and `TARGET_OS_IOS` are - // `true`, which means the condition list is order-sensitive. -#if TARGET_OS_MACCATALYST - applePlatform = @"maccatalyst"; -#elif TARGET_OS_IOS - applePlatform = @"ios"; -#elif TARGET_OS_TV - applePlatform = @"tvos"; -#elif TARGET_OS_OSX - applePlatform = @"macos"; -#elif TARGET_OS_WATCH - applePlatform = @"watchos"; -#endif - - return applePlatform; -} - -- (void)checkExpectedBundleID { - NSArray *bundles = [FIRBundleUtil relevantBundles]; - NSString *expectedBundleID = [self expectedBundleID]; - // The checking is only done when the bundle ID is provided in the serviceInfo dictionary for - // backward compatibility. - if (expectedBundleID != nil && ![FIRBundleUtil hasBundleIdentifierPrefix:expectedBundleID - inBundles:bundles]) { - FIRLogError(kFIRLoggerCore, @"I-COR000008", - @"The project's Bundle ID is inconsistent with " - @"either the Bundle ID in '%@.%@', or the Bundle ID in the options if you are " - @"using a customized options. To ensure that everything can be configured " - @"correctly, you may need to make the Bundle IDs consistent. To continue with this " - @"plist file, you may change your app's bundle identifier to '%@'. Or you can " - @"download a new configuration file that matches your bundle identifier from %@ " - @"and replace the current one.", - kServiceInfoFileName, kServiceInfoFileType, expectedBundleID, kPlistURL); - } -} - -#pragma mark - private - App ID Validation - -/** - * Validates the format and fingerprint of the app ID contained in GOOGLE_APP_ID in the plist file. - * This is the main method for validating app ID. - * - * @return YES if the app ID fulfills the expected format and fingerprint, NO otherwise. - */ -- (BOOL)isAppIDValid { - NSString *appID = _options.googleAppID; - BOOL isValid = [FIRApp validateAppID:appID]; - if (!isValid) { - NSString *expectedBundleID = [self expectedBundleID]; - FIRLogError(kFIRLoggerCore, @"I-COR000009", - @"The GOOGLE_APP_ID either in the plist file " - @"'%@.%@' or the one set in the customized options is invalid. If you are using " - @"the plist file, use the iOS version of bundle identifier to download the file, " - @"and do not manually edit the GOOGLE_APP_ID. You may change your app's bundle " - @"identifier to '%@'. Or you can download a new configuration file that matches " - @"your bundle identifier from %@ and replace the current one.", - kServiceInfoFileName, kServiceInfoFileType, expectedBundleID, kPlistURL); - }; - return isValid; -} - -+ (BOOL)validateAppID:(NSString *)appID { - // Failing validation only occurs when we are sure we are looking at a V2 app ID and it does not - // have a valid fingerprint, otherwise we just warn about the potential issue. - if (!appID.length) { - return NO; - } - - NSScanner *stringScanner = [NSScanner scannerWithString:appID]; - stringScanner.charactersToBeSkipped = nil; - - NSString *appIDVersion; - if (![stringScanner scanCharactersFromSet:[NSCharacterSet decimalDigitCharacterSet] - intoString:&appIDVersion]) { - return NO; - } - - if (![stringScanner scanString:@":" intoString:NULL]) { - // appIDVersion must be separated by ":" - return NO; - } - - NSArray *knownVersions = @[ @"1" ]; - if (![knownVersions containsObject:appIDVersion]) { - // Permit unknown yet properly formatted app ID versions. - FIRLogInfo(kFIRLoggerCore, @"I-COR000010", @"Unknown GOOGLE_APP_ID version: %@", appIDVersion); - return YES; - } - - if (![self validateAppIDFormat:appID withVersion:appIDVersion]) { - return NO; - } - - if (![self validateAppIDFingerprint:appID withVersion:appIDVersion]) { - return NO; - } - - return YES; -} - -+ (NSString *)actualBundleID { - return [[NSBundle mainBundle] bundleIdentifier]; -} - -/** - * Validates that the format of the app ID string is what is expected based on the supplied version. - * The version must end in ":". - * - * For v1 app ids the format is expected to be - * '::ios:'. - * - * This method does not verify that the contents of the app id are correct, just that they fulfill - * the expected format. - * - * @param appID Contents of GOOGLE_APP_ID from the plist file. - * @param version Indicates what version of the app id format this string should be. - * @return YES if provided string fufills the expected format, NO otherwise. - */ -+ (BOOL)validateAppIDFormat:(NSString *)appID withVersion:(NSString *)version { - if (!appID.length || !version.length) { - return NO; - } - - NSScanner *stringScanner = [NSScanner scannerWithString:appID]; - stringScanner.charactersToBeSkipped = nil; - - // Skip version part - // '**::ios:' - if (![stringScanner scanString:version intoString:NULL]) { - // The version part is missing or mismatched - return NO; - } - - // Validate version part (see part between '*' symbols below) - // '*:*:ios:' - if (![stringScanner scanString:@":" intoString:NULL]) { - // appIDVersion must be separated by ":" - return NO; - } - - // Validate version part (see part between '*' symbols below) - // ':**:ios:'. - NSInteger projectNumber = NSNotFound; - if (![stringScanner scanInteger:&projectNumber]) { - // NO project number found. - return NO; - } - - // Validate version part (see part between '*' symbols below) - // ':*:*ios:'. - if (![stringScanner scanString:@":" intoString:NULL]) { - // The project number must be separated by ":" - return NO; - } - - // Validate version part (see part between '*' symbols below) - // '::*ios*:'. - NSString *platform; - if (![stringScanner scanUpToString:@":" intoString:&platform]) { - return NO; - } - - if (![platform isEqualToString:@"ios"]) { - // The platform must be @"ios" - return NO; - } - - // Validate version part (see part between '*' symbols below) - // '::ios*:*'. - if (![stringScanner scanString:@":" intoString:NULL]) { - // The platform must be separated by ":" - return NO; - } - - // Validate version part (see part between '*' symbols below) - // '::ios:**'. - unsigned long long fingerprint = NSNotFound; - if (![stringScanner scanHexLongLong:&fingerprint]) { - // Fingerprint part is missing - return NO; - } - - if (!stringScanner.isAtEnd) { - // There are not allowed characters in the fingerprint part - return NO; - } - - return YES; -} - -/** - * Validates that the fingerprint of the app ID string is what is expected based on the supplied - * version. - * - * Note that the v1 hash algorithm is not permitted on the client and cannot be fully validated. - * - * @param appID Contents of GOOGLE_APP_ID from the plist file. - * @param version Indicates what version of the app id format this string should be. - * @return YES if provided string fufills the expected fingerprint and the version is known, NO - * otherwise. - */ -+ (BOOL)validateAppIDFingerprint:(NSString *)appID withVersion:(NSString *)version { - // Extract the supplied fingerprint from the supplied app ID. - // This assumes the app ID format is the same for all known versions below. If the app ID format - // changes in future versions, the tokenizing of the app ID format will need to take into account - // the version of the app ID. - NSArray *components = [appID componentsSeparatedByString:@":"]; - if (components.count != 4) { - return NO; - } - - NSString *suppliedFingerprintString = components[3]; - if (!suppliedFingerprintString.length) { - return NO; - } - - uint64_t suppliedFingerprint; - NSScanner *scanner = [NSScanner scannerWithString:suppliedFingerprintString]; - if (![scanner scanHexLongLong:&suppliedFingerprint]) { - return NO; - } - - if ([version isEqual:@"1"]) { - // The v1 hash algorithm is not permitted on the client so the actual hash cannot be validated. - return YES; - } - - // Unknown version. - return NO; -} - -- (NSString *)expectedBundleID { - return _options.bundleID; -} - -// end App ID validation - -#pragma mark - Reading From Plist & User Defaults - -/** - * Clears the data collection switch from the standard NSUserDefaults for easier testing and - * readability. - */ -- (void)clearDataCollectionSwitchFromUserDefaults { - NSString *key = - [NSString stringWithFormat:kFIRGlobalAppDataCollectionEnabledDefaultsKeyFormat, self.name]; - [[NSUserDefaults standardUserDefaults] removeObjectForKey:key]; -} - -/** - * Reads the data collection switch from the standard NSUserDefaults for easier testing and - * readability. - */ -+ (nullable NSNumber *)readDataCollectionSwitchFromUserDefaultsForApp:(FIRApp *)app { - // Read the object in user defaults, and only return if it's an NSNumber. - NSString *key = - [NSString stringWithFormat:kFIRGlobalAppDataCollectionEnabledDefaultsKeyFormat, app.name]; - id collectionEnabledDefaultsObject = [[NSUserDefaults standardUserDefaults] objectForKey:key]; - if ([collectionEnabledDefaultsObject isKindOfClass:[NSNumber class]]) { - return collectionEnabledDefaultsObject; - } - - return nil; -} - -/** - * Reads the data collection switch from the Info.plist for easier testing and readability. Will - * only read once from the plist and return the cached value. - */ -+ (nullable NSNumber *)readDataCollectionSwitchFromPlist { - static NSNumber *collectionEnabledPlistObject; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - // Read the data from the `Info.plist`, only assign it if it's there and an NSNumber. - id plistValue = [[NSBundle mainBundle] - objectForInfoDictionaryKey:kFIRGlobalAppDataCollectionEnabledPlistKey]; - if (plistValue && [plistValue isKindOfClass:[NSNumber class]]) { - collectionEnabledPlistObject = (NSNumber *)plistValue; - } - }); - - return collectionEnabledPlistObject; -} - -#pragma mark - Sending Logs - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wunused-parameter" -- (void)sendLogsWithServiceName:(NSString *)serviceName - version:(NSString *)version - error:(NSError *)error { - // Do nothing. Please remove calls to this method. -} -#pragma clang diagnostic pop - -#pragma mark - App Life Cycle - -- (void)subscribeForAppDidBecomeActiveNotifications { -#if TARGET_OS_IOS || TARGET_OS_TV - NSNotificationName notificationName = UIApplicationDidBecomeActiveNotification; -#elif TARGET_OS_OSX - NSNotificationName notificationName = NSApplicationDidBecomeActiveNotification; -#endif - -#if !TARGET_OS_WATCH - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(appDidBecomeActive:) - name:notificationName - object:nil]; -#endif -} - -- (void)appDidBecomeActive:(NSNotification *)notification { - [self logCoreTelemetryIfEnabled]; -} - -- (void)logCoreTelemetryIfEnabled { - if ([self isDataCollectionDefaultEnabled]) { - [FIRCoreDiagnosticsConnector logCoreTelemetryWithOptions:_options]; - } -} - -@end diff --git a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/FIRAppAssociationRegistration.m b/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/FIRAppAssociationRegistration.m deleted file mode 100644 index e4125cd255..0000000000 --- a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/FIRAppAssociationRegistration.m +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2017 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FirebaseCore/Sources/Private/FIRAppAssociationRegistration.h" - -#import - -@implementation FIRAppAssociationRegistration - -+ (nullable id)registeredObjectWithHost:(id)host - key:(NSString *)key - creationBlock:(id _Nullable (^)(void))creationBlock { - @synchronized(self) { - SEL dictKey = @selector(registeredObjectWithHost:key:creationBlock:); - NSMutableDictionary *objectsByKey = objc_getAssociatedObject(host, dictKey); - if (!objectsByKey) { - objectsByKey = [[NSMutableDictionary alloc] init]; - objc_setAssociatedObject(host, dictKey, objectsByKey, OBJC_ASSOCIATION_RETAIN_NONATOMIC); - } - id obj = objectsByKey[key]; - NSValue *creationBlockBeingCalled = [NSValue valueWithPointer:dictKey]; - if (obj) { - if ([creationBlockBeingCalled isEqual:obj]) { - [NSException raise:@"Reentering registeredObjectWithHost:key:creationBlock: not allowed" - format:@"host: %@ key: %@", host, key]; - } - return obj; - } - objectsByKey[key] = creationBlockBeingCalled; - obj = creationBlock(); - objectsByKey[key] = obj; - return obj; - } -} - -@end diff --git a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/FIRBundleUtil.h b/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/FIRBundleUtil.h deleted file mode 100644 index d9475dd29e..0000000000 --- a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/FIRBundleUtil.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -/** - * This class provides utilities for accessing resources in bundles. - */ -@interface FIRBundleUtil : NSObject - -/** - * Finds all relevant bundles, starting with [NSBundle mainBundle]. - */ -+ (NSArray *)relevantBundles; - -/** - * Reads the options dictionary from one of the provided bundles. - * - * @param resourceName The resource name, e.g. @"GoogleService-Info". - * @param fileType The file type (extension), e.g. @"plist". - * @param bundles The bundles to expect, in priority order. See also - * +[FIRBundleUtil relevantBundles]. - */ -+ (NSString *)optionsDictionaryPathWithResourceName:(NSString *)resourceName - andFileType:(NSString *)fileType - inBundles:(NSArray *)bundles; - -/** - * Finds URL schemes defined in all relevant bundles, starting with those from - * [NSBundle mainBundle]. - */ -+ (NSArray *)relevantURLSchemes; - -/** - * Checks if any of the given bundles have a matching bundle identifier prefix (removing extension - * suffixes). - */ -+ (BOOL)hasBundleIdentifierPrefix:(NSString *)bundleIdentifier inBundles:(NSArray *)bundles; - -@end diff --git a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/FIRBundleUtil.m b/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/FIRBundleUtil.m deleted file mode 100644 index de2c295429..0000000000 --- a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/FIRBundleUtil.m +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright 2017 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FirebaseCore/Sources/FIRBundleUtil.h" - -#import - -@implementation FIRBundleUtil - -+ (NSArray *)relevantBundles { - return @[ [NSBundle mainBundle], [NSBundle bundleForClass:[self class]] ]; -} - -+ (NSString *)optionsDictionaryPathWithResourceName:(NSString *)resourceName - andFileType:(NSString *)fileType - inBundles:(NSArray *)bundles { - // Loop through all bundles to find the config dict. - for (NSBundle *bundle in bundles) { - NSString *path = [bundle pathForResource:resourceName ofType:fileType]; - // Use the first one we find. - if (path) { - return path; - } - } - return nil; -} - -+ (NSArray *)relevantURLSchemes { - NSMutableArray *result = [[NSMutableArray alloc] init]; - for (NSBundle *bundle in [[self class] relevantBundles]) { - NSArray *urlTypes = [bundle objectForInfoDictionaryKey:@"CFBundleURLTypes"]; - for (NSDictionary *urlType in urlTypes) { - [result addObjectsFromArray:urlType[@"CFBundleURLSchemes"]]; - } - } - return result; -} - -+ (BOOL)hasBundleIdentifierPrefix:(NSString *)bundleIdentifier inBundles:(NSArray *)bundles { - for (NSBundle *bundle in bundles) { - if ([bundle.bundleIdentifier isEqualToString:bundleIdentifier]) { - return YES; - } - - if ([GULAppEnvironmentUtil isAppExtension]) { - // A developer could be using the same `FIROptions` for both their app and extension. Since - // extensions have a suffix added to the bundleID, we consider a matching prefix as valid. - NSString *appBundleIDFromExtension = - [self bundleIdentifierByRemovingLastPartFrom:bundle.bundleIdentifier]; - if ([appBundleIDFromExtension isEqualToString:bundleIdentifier]) { - return YES; - } - } - } - return NO; -} - -+ (NSString *)bundleIdentifierByRemovingLastPartFrom:(NSString *)bundleIdentifier { - NSString *bundleIDComponentsSeparator = @"."; - - NSMutableArray *bundleIDComponents = - [[bundleIdentifier componentsSeparatedByString:bundleIDComponentsSeparator] mutableCopy]; - [bundleIDComponents removeLastObject]; - - return [bundleIDComponents componentsJoinedByString:bundleIDComponentsSeparator]; -} - -@end diff --git a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/FIRComponent.m b/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/FIRComponent.m deleted file mode 100644 index 9c1fbed3cb..0000000000 --- a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/FIRComponent.m +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FirebaseCore/Sources/Private/FIRComponent.h" - -#import "FirebaseCore/Sources/Private/FIRComponentContainer.h" -#import "FirebaseCore/Sources/Private/FIRDependency.h" - -@interface FIRComponent () - -- (instancetype)initWithProtocol:(Protocol *)protocol - instantiationTiming:(FIRInstantiationTiming)instantiationTiming - dependencies:(NSArray *)dependencies - creationBlock:(FIRComponentCreationBlock)creationBlock; - -@end - -@implementation FIRComponent - -+ (instancetype)componentWithProtocol:(Protocol *)protocol - creationBlock:(FIRComponentCreationBlock)creationBlock { - return [[FIRComponent alloc] initWithProtocol:protocol - instantiationTiming:FIRInstantiationTimingLazy - dependencies:@[] - creationBlock:creationBlock]; -} - -+ (instancetype)componentWithProtocol:(Protocol *)protocol - instantiationTiming:(FIRInstantiationTiming)instantiationTiming - dependencies:(NSArray *)dependencies - creationBlock:(FIRComponentCreationBlock)creationBlock { - return [[FIRComponent alloc] initWithProtocol:protocol - instantiationTiming:instantiationTiming - dependencies:dependencies - creationBlock:creationBlock]; -} - -- (instancetype)initWithProtocol:(Protocol *)protocol - instantiationTiming:(FIRInstantiationTiming)instantiationTiming - dependencies:(NSArray *)dependencies - creationBlock:(FIRComponentCreationBlock)creationBlock { - self = [super init]; - if (self) { - _protocol = protocol; - _instantiationTiming = instantiationTiming; - _dependencies = [dependencies copy]; - _creationBlock = creationBlock; - } - return self; -} - -@end diff --git a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/FIRComponentContainer.m b/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/FIRComponentContainer.m deleted file mode 100644 index bbe887824f..0000000000 --- a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/FIRComponentContainer.m +++ /dev/null @@ -1,214 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FirebaseCore/Sources/Private/FIRComponentContainer.h" - -#import "FirebaseCore/Sources/Private/FIRAppInternal.h" -#import "FirebaseCore/Sources/Private/FIRComponent.h" -#import "FirebaseCore/Sources/Private/FIRLibrary.h" -#import "FirebaseCore/Sources/Private/FIRLogger.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FIRComponentContainer () - -/// The dictionary of components that are registered for a particular app. The key is an `NSString` -/// of the protocol. -@property(nonatomic, strong) NSMutableDictionary *components; - -/// Cached instances of components that requested to be cached. -@property(nonatomic, strong) NSMutableDictionary *cachedInstances; - -/// Protocols of components that have requested to be eagerly instantiated. -@property(nonatomic, strong, nullable) NSMutableArray *eagerProtocolsToInstantiate; - -@end - -@implementation FIRComponentContainer - -// Collection of all classes that register to provide components. -static NSMutableSet *sFIRComponentRegistrants; - -#pragma mark - Public Registration - -+ (void)registerAsComponentRegistrant:(Class)klass { - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - sFIRComponentRegistrants = [[NSMutableSet alloc] init]; - }); - - [self registerAsComponentRegistrant:klass inSet:sFIRComponentRegistrants]; -} - -+ (void)registerAsComponentRegistrant:(Class)klass - inSet:(NSMutableSet *)allRegistrants { - [allRegistrants addObject:klass]; -} - -#pragma mark - Internal Initialization - -- (instancetype)initWithApp:(FIRApp *)app { - return [self initWithApp:app registrants:sFIRComponentRegistrants]; -} - -- (instancetype)initWithApp:(FIRApp *)app registrants:(NSMutableSet *)allRegistrants { - self = [super init]; - if (self) { - _app = app; - _cachedInstances = [NSMutableDictionary dictionary]; - _components = [NSMutableDictionary dictionary]; - - [self populateComponentsFromRegisteredClasses:allRegistrants forApp:app]; - } - return self; -} - -- (void)populateComponentsFromRegisteredClasses:(NSSet *)classes forApp:(FIRApp *)app { - // Keep track of any components that need to eagerly instantiate after all components are added. - self.eagerProtocolsToInstantiate = [[NSMutableArray alloc] init]; - - // Loop through the verified component registrants and populate the components array. - for (Class klass in classes) { - // Loop through all the components being registered and store them as appropriate. - // Classes which do not provide functionality should use a dummy FIRComponentRegistrant - // protocol. - for (FIRComponent *component in [klass componentsToRegister]) { - // Check if the component has been registered before, and error out if so. - NSString *protocolName = NSStringFromProtocol(component.protocol); - if (self.components[protocolName]) { - FIRLogError(kFIRLoggerCore, @"I-COR000029", - @"Attempted to register protocol %@, but it already has an implementation.", - protocolName); - continue; - } - - // Store the creation block for later usage. - self.components[protocolName] = component.creationBlock; - - // Queue any protocols that should be eagerly instantiated. Don't instantiate them yet - // because they could depend on other components that haven't been added to the components - // array yet. - BOOL shouldInstantiateEager = - (component.instantiationTiming == FIRInstantiationTimingAlwaysEager); - BOOL shouldInstantiateDefaultEager = - (component.instantiationTiming == FIRInstantiationTimingEagerInDefaultApp && - [app isDefaultApp]); - if (shouldInstantiateEager || shouldInstantiateDefaultEager) { - [self.eagerProtocolsToInstantiate addObject:component.protocol]; - } - } - } -} - -#pragma mark - Instance Creation - -- (void)instantiateEagerComponents { - // After all components are registered, instantiate the ones that are requesting eager - // instantiation. - @synchronized(self) { - for (Protocol *protocol in self.eagerProtocolsToInstantiate) { - // Get an instance for the protocol, which will instantiate it since it couldn't have been - // cached yet. Ignore the instance coming back since we don't need it. - __unused id unusedInstance = [self instanceForProtocol:protocol]; - } - - // All eager instantiation is complete, clear the stored property now. - self.eagerProtocolsToInstantiate = nil; - } -} - -/// Instantiate an instance of a class that conforms to the specified protocol. -/// This will: -/// - Call the block to create an instance if possible, -/// - Validate that the instance returned conforms to the protocol it claims to, -/// - Cache the instance if the block requests it -/// -/// Note that this method assumes the caller already has @sychronized on self. -- (nullable id)instantiateInstanceForProtocol:(Protocol *)protocol - withBlock:(FIRComponentCreationBlock)creationBlock { - if (!creationBlock) { - return nil; - } - - // Create an instance using the creation block. - BOOL shouldCache = NO; - id instance = creationBlock(self, &shouldCache); - if (!instance) { - return nil; - } - - // An instance was created, validate that it conforms to the protocol it claims to. - NSString *protocolName = NSStringFromProtocol(protocol); - if (![instance conformsToProtocol:protocol]) { - FIRLogError(kFIRLoggerCore, @"I-COR000030", - @"An instance conforming to %@ was requested, but the instance provided does not " - @"conform to the protocol", - protocolName); - } - - // The instance is ready to be returned, but check if it should be cached first before returning. - if (shouldCache) { - self.cachedInstances[protocolName] = instance; - } - - return instance; -} - -#pragma mark - Internal Retrieval - -- (nullable id)instanceForProtocol:(Protocol *)protocol { - // Check if there is a cached instance, and return it if so. - NSString *protocolName = NSStringFromProtocol(protocol); - - id cachedInstance; - @synchronized(self) { - cachedInstance = self.cachedInstances[protocolName]; - if (!cachedInstance) { - // Use the creation block to instantiate an instance and return it. - FIRComponentCreationBlock creationBlock = self.components[protocolName]; - cachedInstance = [self instantiateInstanceForProtocol:protocol withBlock:creationBlock]; - } - } - return cachedInstance; -} - -#pragma mark - Lifecycle - -- (void)removeAllCachedInstances { - @synchronized(self) { - // Loop through the cache and notify each instance that is a maintainer to clean up after - // itself. - for (id instance in self.cachedInstances.allValues) { - if ([instance conformsToProtocol:@protocol(FIRComponentLifecycleMaintainer)] && - [instance respondsToSelector:@selector(appWillBeDeleted:)]) { - [instance appWillBeDeleted:self.app]; - } - } - - // Empty the cache. - [self.cachedInstances removeAllObjects]; - } -} - -- (void)removeAllComponents { - @synchronized(self) { - [self.components removeAllObjects]; - } -} - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/FIRComponentType.m b/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/FIRComponentType.m deleted file mode 100644 index 6410f2ea1c..0000000000 --- a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/FIRComponentType.m +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FirebaseCore/Sources/Private/FIRComponentType.h" - -#import "FirebaseCore/Sources/Private/FIRComponentContainerInternal.h" - -@implementation FIRComponentType - -+ (id)instanceForProtocol:(Protocol *)protocol inContainer:(FIRComponentContainer *)container { - // Forward the call to the container. - return [container instanceForProtocol:protocol]; -} - -@end diff --git a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/FIRConfiguration.m b/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/FIRConfiguration.m deleted file mode 100644 index a1c9f4a2e9..0000000000 --- a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/FIRConfiguration.m +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2017 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FirebaseCore/Sources/Private/FIRConfigurationInternal.h" - -#import "FirebaseCore/Sources/Private/FIRAnalyticsConfiguration.h" - -extern void FIRSetLoggerLevel(FIRLoggerLevel loggerLevel); - -@implementation FIRConfiguration - -+ (instancetype)sharedInstance { - static FIRConfiguration *sharedInstance = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - sharedInstance = [[FIRConfiguration alloc] init]; - }); - return sharedInstance; -} - -- (instancetype)init { - self = [super init]; - if (self) { - _analyticsConfiguration = [FIRAnalyticsConfiguration sharedInstance]; - } - return self; -} - -- (void)setLoggerLevel:(FIRLoggerLevel)loggerLevel { - NSAssert(loggerLevel <= FIRLoggerLevelMax && loggerLevel >= FIRLoggerLevelMin, - @"Invalid logger level, %ld", (long)loggerLevel); - FIRSetLoggerLevel(loggerLevel); -} - -@end diff --git a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/FIRCoreDiagnosticsConnector.m b/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/FIRCoreDiagnosticsConnector.m deleted file mode 100644 index 4981ca1b05..0000000000 --- a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/FIRCoreDiagnosticsConnector.m +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FirebaseCore/Sources/Private/FIRCoreDiagnosticsConnector.h" - -#import - -#import - -#import "FirebaseCore/Sources/Private/FIRAppInternal.h" -#import "FirebaseCore/Sources/Private/FIRDiagnosticsData.h" -#import "FirebaseCore/Sources/Private/FIROptionsInternal.h" - -// Define the interop class symbol declared as an extern in FIRCoreDiagnosticsInterop. -Class FIRCoreDiagnosticsImplementation; - -@implementation FIRCoreDiagnosticsConnector - -+ (void)initialize { - if (!FIRCoreDiagnosticsImplementation) { - FIRCoreDiagnosticsImplementation = NSClassFromString(@"FIRCoreDiagnostics"); - if (FIRCoreDiagnosticsImplementation) { - NSAssert([FIRCoreDiagnosticsImplementation - conformsToProtocol:@protocol(FIRCoreDiagnosticsInterop)], - @"If FIRCoreDiagnostics is implemented, it must conform to the interop protocol."); - NSAssert( - [FIRCoreDiagnosticsImplementation respondsToSelector:@selector(sendDiagnosticsData:)], - @"If FIRCoreDiagnostics is implemented, it must implement +sendDiagnosticsData."); - } - } -} - -+ (void)logCoreTelemetryWithOptions:(FIROptions *)options { - if (FIRCoreDiagnosticsImplementation) { - FIRDiagnosticsData *diagnosticsData = [[FIRDiagnosticsData alloc] init]; - [diagnosticsData insertValue:@(YES) forKey:kFIRCDIsDataCollectionDefaultEnabledKey]; - [diagnosticsData insertValue:[FIRApp firebaseUserAgent] forKey:kFIRCDFirebaseUserAgentKey]; - [diagnosticsData insertValue:@(FIRConfigTypeCore) forKey:kFIRCDConfigurationTypeKey]; - [diagnosticsData insertValue:options.googleAppID forKey:kFIRCDGoogleAppIDKey]; - [diagnosticsData insertValue:options.bundleID forKey:kFIRCDBundleIDKey]; - [diagnosticsData insertValue:@(options.usingOptionsFromDefaultPlist) - forKey:kFIRCDUsingOptionsFromDefaultPlistKey]; - [diagnosticsData insertValue:options.libraryVersionID forKey:kFIRCDLibraryVersionIDKey]; - [FIRCoreDiagnosticsImplementation sendDiagnosticsData:diagnosticsData]; - } -} - -@end diff --git a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/FIRDependency.m b/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/FIRDependency.m deleted file mode 100644 index e1e25783ef..0000000000 --- a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/FIRDependency.m +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FirebaseCore/Sources/Private/FIRDependency.h" - -@interface FIRDependency () - -- (instancetype)initWithProtocol:(Protocol *)protocol isRequired:(BOOL)required; - -@end - -@implementation FIRDependency - -+ (instancetype)dependencyWithProtocol:(Protocol *)protocol { - return [[self alloc] initWithProtocol:protocol isRequired:YES]; -} - -+ (instancetype)dependencyWithProtocol:(Protocol *)protocol isRequired:(BOOL)required { - return [[self alloc] initWithProtocol:protocol isRequired:required]; -} - -- (instancetype)initWithProtocol:(Protocol *)protocol isRequired:(BOOL)required { - self = [super init]; - if (self) { - _protocol = protocol; - _isRequired = required; - } - return self; -} - -@end diff --git a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/FIRDiagnosticsData.m b/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/FIRDiagnosticsData.m deleted file mode 100644 index bbe0561d95..0000000000 --- a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/FIRDiagnosticsData.m +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FirebaseCore/Sources/Private/FIRDiagnosticsData.h" - -#import - -#import "FirebaseCore/Sources/Private/FIRAppInternal.h" -#import "FirebaseCore/Sources/Private/FIROptionsInternal.h" - -@implementation FIRDiagnosticsData { - /** Backing ivar for the diagnosticObjects property. */ - NSMutableDictionary *_diagnosticObjects; -} - -- (instancetype)init { - self = [super init]; - if (self) { - _diagnosticObjects = [[NSMutableDictionary alloc] init]; - } - return self; -} - -- (void)insertValue:(nullable id)value forKey:(NSString *)key { - if (key) { - _diagnosticObjects[key] = value; - } -} - -#pragma mark - FIRCoreDiagnosticsData - -- (NSDictionary *)diagnosticObjects { - if (!_diagnosticObjects[kFIRCDllAppsCountKey]) { - _diagnosticObjects[kFIRCDllAppsCountKey] = @([FIRApp allApps].count); - } - if (!_diagnosticObjects[kFIRCDIsDataCollectionDefaultEnabledKey]) { - _diagnosticObjects[kFIRCDIsDataCollectionDefaultEnabledKey] = - @([[FIRApp defaultApp] isDataCollectionDefaultEnabled]); - } - if (!_diagnosticObjects[kFIRCDFirebaseUserAgentKey]) { - _diagnosticObjects[kFIRCDFirebaseUserAgentKey] = [FIRApp firebaseUserAgent]; - } - return _diagnosticObjects; -} - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wunused-parameter" -- (void)setDiagnosticObjects:(NSDictionary *)diagnosticObjects { - NSAssert(NO, @"Please use -insertValue:forKey:"); -} -#pragma clang diagnostic pop - -@end diff --git a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/FIRErrors.m b/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/FIRErrors.m deleted file mode 100644 index 104eeb8252..0000000000 --- a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/FIRErrors.m +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2017 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FirebaseCore/Sources/Private/FIRErrors.h" - -NSString *const kFirebaseErrorDomain = @"com.firebase"; -NSString *const kFirebaseConfigErrorDomain = @"com.firebase.config"; -NSString *const kFirebaseCoreErrorDomain = @"com.firebase.core"; -NSString *const kFirebasePerfErrorDomain = @"com.firebase.perf"; -NSString *const kFirebaseStorageErrorDomain = @"com.firebase.storage"; diff --git a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/FIRHeartbeatInfo.m b/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/FIRHeartbeatInfo.m deleted file mode 100644 index 277b0f712b..0000000000 --- a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/FIRHeartbeatInfo.m +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FirebaseCore/Sources/Private/FIRHeartbeatInfo.h" -#import -#import - -const static long secondsInDay = 86400; -@implementation FIRHeartbeatInfo : NSObject - -/** Updates the storage with the heartbeat information corresponding to this tag. - * @param heartbeatTag Tag which could either be sdk specific tag or the global tag. - * @return Boolean representing whether the heartbeat needs to be sent for this tag or not. - */ -+ (BOOL)updateIfNeededHeartbeatDateForTag:(NSString *)heartbeatTag { - @synchronized(self) { - NSString *const kHeartbeatStorageFile = @"HEARTBEAT_INFO_STORAGE"; - GULHeartbeatDateStorage *dataStorage = - [[GULHeartbeatDateStorage alloc] initWithFileName:kHeartbeatStorageFile]; - NSDate *heartbeatTime = [dataStorage heartbeatDateForTag:heartbeatTag]; - NSDate *currentDate = [NSDate date]; - if (heartbeatTime != nil) { - NSTimeInterval secondsBetween = [currentDate timeIntervalSinceDate:heartbeatTime]; - if (secondsBetween < secondsInDay) { - return false; - } - } - return [dataStorage setHearbeatDate:currentDate forTag:heartbeatTag]; - } -} - -+ (FIRHeartbeatInfoCode)heartbeatCodeForTag:(NSString *)heartbeatTag { - NSString *globalTag = @"GLOBAL"; - BOOL isSdkHeartbeatNeeded = [FIRHeartbeatInfo updateIfNeededHeartbeatDateForTag:heartbeatTag]; - BOOL isGlobalHeartbeatNeeded = [FIRHeartbeatInfo updateIfNeededHeartbeatDateForTag:globalTag]; - if (!isSdkHeartbeatNeeded && !isGlobalHeartbeatNeeded) { - // Both sdk and global heartbeat not needed. - return FIRHeartbeatInfoCodeNone; - } else if (isSdkHeartbeatNeeded && !isGlobalHeartbeatNeeded) { - // Only SDK heartbeat needed. - return FIRHeartbeatInfoCodeSDK; - } else if (!isSdkHeartbeatNeeded && isGlobalHeartbeatNeeded) { - // Only global heartbeat needed. - return FIRHeartbeatInfoCodeGlobal; - } else { - // Both sdk and global heartbeat are needed. - return FIRHeartbeatInfoCodeCombined; - } -} -@end diff --git a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/FIRLogger.m b/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/FIRLogger.m deleted file mode 100644 index ba2ee1f584..0000000000 --- a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/FIRLogger.m +++ /dev/null @@ -1,179 +0,0 @@ -// Copyright 2017 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FirebaseCore/Sources/Private/FIRLogger.h" - -#import -#import -#import - -#import "FirebaseCore/Sources/FIRVersion.h" - -FIRLoggerService kFIRLoggerCore = @"[Firebase/Core]"; - -// All the FIRLoggerService definitions should be migrated to clients. Do not add new ones! -FIRLoggerService kFIRLoggerABTesting = @"[Firebase/ABTesting]"; -FIRLoggerService kFIRLoggerAdMob = @"[Firebase/AdMob]"; -FIRLoggerService kFIRLoggerAnalytics = @"[Firebase/Analytics]"; -FIRLoggerService kFIRLoggerAuth = @"[Firebase/Auth]"; -FIRLoggerService kFIRLoggerCrash = @"[Firebase/Crash]"; -FIRLoggerService kFIRLoggerMLKit = @"[Firebase/MLKit]"; -FIRLoggerService kFIRLoggerPerf = @"[Firebase/Performance]"; -FIRLoggerService kFIRLoggerRemoteConfig = @"[Firebase/RemoteConfig]"; - -/// Arguments passed on launch. -NSString *const kFIRDisableDebugModeApplicationArgument = @"-FIRDebugDisabled"; -NSString *const kFIREnableDebugModeApplicationArgument = @"-FIRDebugEnabled"; -NSString *const kFIRLoggerForceSDTERRApplicationArgument = @"-FIRLoggerForceSTDERR"; - -/// Key for the debug mode bit in NSUserDefaults. -NSString *const kFIRPersistedDebugModeKey = @"/google/firebase/debug_mode"; - -/// NSUserDefaults that should be used to store and read variables. If nil, `standardUserDefaults` -/// will be used. -static NSUserDefaults *sFIRLoggerUserDefaults; - -static dispatch_once_t sFIRLoggerOnceToken; - -// The sFIRAnalyticsDebugMode flag is here to support the -FIRDebugEnabled/-FIRDebugDisabled -// flags used by Analytics. Users who use those flags expect Analytics to log verbosely, -// while the rest of Firebase logs at the default level. This flag is introduced to support -// that behavior. -static BOOL sFIRAnalyticsDebugMode; - -#ifdef DEBUG -/// The regex pattern for the message code. -static NSString *const kMessageCodePattern = @"^I-[A-Z]{3}[0-9]{6}$"; -static NSRegularExpression *sMessageCodeRegex; -#endif - -void FIRLoggerInitializeASL() { - dispatch_once(&sFIRLoggerOnceToken, ^{ - // Register Firebase Version with GULLogger. - GULLoggerRegisterVersion(FIRVersionString); - - // Override the aslOptions to ASL_OPT_STDERR if the override argument is passed in. - NSArray *arguments = [NSProcessInfo processInfo].arguments; - BOOL overrideSTDERR = [arguments containsObject:kFIRLoggerForceSDTERRApplicationArgument]; - - // Use the standard NSUserDefaults if it hasn't been explicitly set. - if (sFIRLoggerUserDefaults == nil) { - sFIRLoggerUserDefaults = [NSUserDefaults standardUserDefaults]; - } - - BOOL forceDebugMode = NO; - BOOL debugMode = [sFIRLoggerUserDefaults boolForKey:kFIRPersistedDebugModeKey]; - if ([arguments containsObject:kFIRDisableDebugModeApplicationArgument]) { // Default mode - [sFIRLoggerUserDefaults removeObjectForKey:kFIRPersistedDebugModeKey]; - } else if ([arguments containsObject:kFIREnableDebugModeApplicationArgument] || - debugMode) { // Debug mode - [sFIRLoggerUserDefaults setBool:YES forKey:kFIRPersistedDebugModeKey]; - forceDebugMode = YES; - } - GULLoggerInitializeASL(); - if (overrideSTDERR) { - GULLoggerEnableSTDERR(); - } - if (forceDebugMode) { - GULLoggerForceDebug(); - } - }); -} - -__attribute__((no_sanitize("thread"))) void FIRSetAnalyticsDebugMode(BOOL analyticsDebugMode) { - sFIRAnalyticsDebugMode = analyticsDebugMode; -} - -void FIRSetLoggerLevel(FIRLoggerLevel loggerLevel) { - FIRLoggerInitializeASL(); - GULSetLoggerLevel((GULLoggerLevel)loggerLevel); -} - -#ifdef DEBUG -void FIRResetLogger() { - extern void GULResetLogger(void); - sFIRLoggerOnceToken = 0; - [sFIRLoggerUserDefaults removeObjectForKey:kFIRPersistedDebugModeKey]; - sFIRLoggerUserDefaults = nil; - GULResetLogger(); -} - -void FIRSetLoggerUserDefaults(NSUserDefaults *defaults) { - sFIRLoggerUserDefaults = defaults; -} -#endif - -/** - * Check if the level is high enough to be loggable. - * - * Analytics can override the log level with an intentional race condition. - * Add the attribute to get a clean thread sanitizer run. - */ -__attribute__((no_sanitize("thread"))) BOOL FIRIsLoggableLevel(FIRLoggerLevel loggerLevel, - BOOL analyticsComponent) { - FIRLoggerInitializeASL(); - if (sFIRAnalyticsDebugMode && analyticsComponent) { - return YES; - } - return GULIsLoggableLevel((GULLoggerLevel)loggerLevel); -} - -void FIRLogBasic(FIRLoggerLevel level, - FIRLoggerService service, - NSString *messageCode, - NSString *message, - va_list args_ptr) { - FIRLoggerInitializeASL(); - GULLogBasic((GULLoggerLevel)level, service, - sFIRAnalyticsDebugMode && [kFIRLoggerAnalytics isEqualToString:service], messageCode, - message, args_ptr); -} - -/** - * Generates the logging functions using macros. - * - * Calling FIRLogError(kFIRLoggerCore, @"I-COR000001", @"Configure %@ failed.", @"blah") shows: - * yyyy-mm-dd hh:mm:ss.SSS sender[PID] [Firebase/Core][I-COR000001] Configure blah failed. - * Calling FIRLogDebug(kFIRLoggerCore, @"I-COR000001", @"Configure succeed.") shows: - * yyyy-mm-dd hh:mm:ss.SSS sender[PID] [Firebase/Core][I-COR000001] Configure succeed. - */ -#define FIR_LOGGING_FUNCTION(level) \ - void FIRLog##level(FIRLoggerService service, NSString *messageCode, NSString *message, ...) { \ - va_list args_ptr; \ - va_start(args_ptr, message); \ - FIRLogBasic(FIRLoggerLevel##level, service, messageCode, message, args_ptr); \ - va_end(args_ptr); \ - } - -FIR_LOGGING_FUNCTION(Error) -FIR_LOGGING_FUNCTION(Warning) -FIR_LOGGING_FUNCTION(Notice) -FIR_LOGGING_FUNCTION(Info) -FIR_LOGGING_FUNCTION(Debug) - -#undef FIR_MAKE_LOGGER - -#pragma mark - FIRLoggerWrapper - -@implementation FIRLoggerWrapper - -+ (void)logWithLevel:(FIRLoggerLevel)level - withService:(FIRLoggerService)service - withCode:(NSString *)messageCode - withMessage:(NSString *)message - withArgs:(va_list)args { - FIRLogBasic(level, service, messageCode, message, args); -} - -@end diff --git a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/FIROptions.m b/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/FIROptions.m deleted file mode 100644 index d185330940..0000000000 --- a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/FIROptions.m +++ /dev/null @@ -1,490 +0,0 @@ -// Copyright 2017 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FirebaseCore/Sources/FIRBundleUtil.h" -#import "FirebaseCore/Sources/FIRVersion.h" -#import "FirebaseCore/Sources/Private/FIRAppInternal.h" -#import "FirebaseCore/Sources/Private/FIRLogger.h" -#import "FirebaseCore/Sources/Private/FIROptionsInternal.h" - -// Keys for the strings in the plist file. -NSString *const kFIRAPIKey = @"API_KEY"; -NSString *const kFIRTrackingID = @"TRACKING_ID"; -NSString *const kFIRGoogleAppID = @"GOOGLE_APP_ID"; -NSString *const kFIRClientID = @"CLIENT_ID"; -NSString *const kFIRGCMSenderID = @"GCM_SENDER_ID"; -NSString *const kFIRAndroidClientID = @"ANDROID_CLIENT_ID"; -NSString *const kFIRDatabaseURL = @"DATABASE_URL"; -NSString *const kFIRStorageBucket = @"STORAGE_BUCKET"; -// The key to locate the expected bundle identifier in the plist file. -NSString *const kFIRBundleID = @"BUNDLE_ID"; -// The key to locate the project identifier in the plist file. -NSString *const kFIRProjectID = @"PROJECT_ID"; - -NSString *const kFIRIsMeasurementEnabled = @"IS_MEASUREMENT_ENABLED"; -NSString *const kFIRIsAnalyticsCollectionEnabled = @"FIREBASE_ANALYTICS_COLLECTION_ENABLED"; -NSString *const kFIRIsAnalyticsCollectionDeactivated = @"FIREBASE_ANALYTICS_COLLECTION_DEACTIVATED"; - -NSString *const kFIRIsAnalyticsEnabled = @"IS_ANALYTICS_ENABLED"; -NSString *const kFIRIsSignInEnabled = @"IS_SIGNIN_ENABLED"; - -// Library version ID formatted like: -// @"5" // Major version (one or more digits) -// @"04" // Minor version (exactly 2 digits) -// @"01" // Build number (exactly 2 digits) -// @"000"; // Fixed "000" -NSString *kFIRLibraryVersionID; - -// Plist file name. -NSString *const kServiceInfoFileName = @"GoogleService-Info"; -// Plist file type. -NSString *const kServiceInfoFileType = @"plist"; - -// Exception raised from attempting to modify a FIROptions after it's been copied to a FIRApp. -NSString *const kFIRExceptionBadModification = - @"Attempted to modify options after it's set on FIRApp. Please modify all properties before " - @"initializing FIRApp."; - -@interface FIROptions () - -/** - * This property maintains the actual configuration key-value pairs. - */ -@property(nonatomic, readwrite) NSMutableDictionary *optionsDictionary; - -/** - * Calls `analyticsOptionsDictionaryWithInfoDictionary:` using [NSBundle mainBundle].infoDictionary. - * It combines analytics options from both the infoDictionary and the GoogleService-Info.plist. - * Values which are present in the main plist override values from the GoogleService-Info.plist. - */ -@property(nonatomic, readonly) NSDictionary *analyticsOptionsDictionary; - -/** - * Combination of analytics options from both the infoDictionary and the GoogleService-Info.plist. - * Values which are present in the infoDictionary override values from the GoogleService-Info.plist. - */ -- (NSDictionary *)analyticsOptionsDictionaryWithInfoDictionary:(NSDictionary *)infoDictionary; - -/** - * Throw exception if editing is locked when attempting to modify an option. - */ -- (void)checkEditingLocked; - -@end - -@implementation FIROptions { - /// Backing variable for self.analyticsOptionsDictionary. - NSDictionary *_analyticsOptionsDictionary; -} - -static FIROptions *sDefaultOptions = nil; -static NSDictionary *sDefaultOptionsDictionary = nil; - -#pragma mark - Public only for internal class methods - -+ (FIROptions *)defaultOptions { - if (sDefaultOptions != nil) { - return sDefaultOptions; - } - - NSDictionary *defaultOptionsDictionary = [self defaultOptionsDictionary]; - if (defaultOptionsDictionary == nil) { - return nil; - } - - sDefaultOptions = [[FIROptions alloc] initInternalWithOptionsDictionary:defaultOptionsDictionary]; - return sDefaultOptions; -} - -#pragma mark - Private class methods - -+ (NSDictionary *)defaultOptionsDictionary { - if (sDefaultOptionsDictionary != nil) { - return sDefaultOptionsDictionary; - } - NSString *plistFilePath = [FIROptions plistFilePathWithName:kServiceInfoFileName]; - if (plistFilePath == nil) { - return nil; - } - sDefaultOptionsDictionary = [NSDictionary dictionaryWithContentsOfFile:plistFilePath]; - if (sDefaultOptionsDictionary == nil) { - FIRLogError(kFIRLoggerCore, @"I-COR000011", - @"The configuration file is not a dictionary: " - @"'%@.%@'.", - kServiceInfoFileName, kServiceInfoFileType); - } - return sDefaultOptionsDictionary; -} - -// Returns the path of the plist file with a given file name. -+ (NSString *)plistFilePathWithName:(NSString *)fileName { - NSArray *bundles = [FIRBundleUtil relevantBundles]; - NSString *plistFilePath = - [FIRBundleUtil optionsDictionaryPathWithResourceName:fileName - andFileType:kServiceInfoFileType - inBundles:bundles]; - if (plistFilePath == nil) { - FIRLogError(kFIRLoggerCore, @"I-COR000012", @"Could not locate configuration file: '%@.%@'.", - fileName, kServiceInfoFileType); - } - return plistFilePath; -} - -+ (void)resetDefaultOptions { - sDefaultOptions = nil; - sDefaultOptionsDictionary = nil; -} - -#pragma mark - Private instance methods - -- (instancetype)initInternalWithOptionsDictionary:(NSDictionary *)optionsDictionary { - self = [super init]; - if (self) { - _optionsDictionary = [optionsDictionary mutableCopy]; - _usingOptionsFromDefaultPlist = YES; - } - return self; -} - -- (id)copyWithZone:(NSZone *)zone { - FIROptions *newOptions = [[[self class] allocWithZone:zone] init]; - if (newOptions) { - newOptions.optionsDictionary = self.optionsDictionary; - newOptions.deepLinkURLScheme = self.deepLinkURLScheme; - newOptions.appGroupID = self.appGroupID; - newOptions.editingLocked = self.isEditingLocked; - newOptions.usingOptionsFromDefaultPlist = self.usingOptionsFromDefaultPlist; - } - return newOptions; -} - -#pragma mark - Public instance methods - -- (instancetype)initWithContentsOfFile:(NSString *)plistPath { - self = [super init]; - if (self) { - if (plistPath == nil) { - FIRLogError(kFIRLoggerCore, @"I-COR000013", @"The plist file path is nil."); - return nil; - } - _optionsDictionary = [[NSDictionary dictionaryWithContentsOfFile:plistPath] mutableCopy]; - if (_optionsDictionary == nil) { - FIRLogError(kFIRLoggerCore, @"I-COR000014", - @"The configuration file at %@ does not exist or " - @"is not a well-formed plist file.", - plistPath); - return nil; - } - // TODO: Do we want to validate the dictionary here? It says we do that already in - // the public header. - } - return self; -} - -- (instancetype)initWithGoogleAppID:(NSString *)googleAppID GCMSenderID:(NSString *)GCMSenderID { - self = [super init]; - if (self) { - NSMutableDictionary *mutableOptionsDict = [NSMutableDictionary dictionary]; - [mutableOptionsDict setValue:googleAppID forKey:kFIRGoogleAppID]; - [mutableOptionsDict setValue:GCMSenderID forKey:kFIRGCMSenderID]; - [mutableOptionsDict setValue:[[NSBundle mainBundle] bundleIdentifier] forKey:kFIRBundleID]; - self.optionsDictionary = mutableOptionsDict; - } - return self; -} - -- (NSString *)APIKey { - return self.optionsDictionary[kFIRAPIKey]; -} - -- (void)checkEditingLocked { - if (self.isEditingLocked) { - [NSException raise:kFirebaseCoreErrorDomain format:kFIRExceptionBadModification]; - } -} - -- (void)setAPIKey:(NSString *)APIKey { - [self checkEditingLocked]; - _optionsDictionary[kFIRAPIKey] = [APIKey copy]; -} - -- (NSString *)clientID { - return self.optionsDictionary[kFIRClientID]; -} - -- (void)setClientID:(NSString *)clientID { - [self checkEditingLocked]; - _optionsDictionary[kFIRClientID] = [clientID copy]; -} - -- (NSString *)trackingID { - return self.optionsDictionary[kFIRTrackingID]; -} - -- (void)setTrackingID:(NSString *)trackingID { - [self checkEditingLocked]; - _optionsDictionary[kFIRTrackingID] = [trackingID copy]; -} - -- (NSString *)GCMSenderID { - return self.optionsDictionary[kFIRGCMSenderID]; -} - -- (void)setGCMSenderID:(NSString *)GCMSenderID { - [self checkEditingLocked]; - _optionsDictionary[kFIRGCMSenderID] = [GCMSenderID copy]; -} - -- (NSString *)projectID { - return self.optionsDictionary[kFIRProjectID]; -} - -- (void)setProjectID:(NSString *)projectID { - [self checkEditingLocked]; - _optionsDictionary[kFIRProjectID] = [projectID copy]; -} - -- (NSString *)androidClientID { - return self.optionsDictionary[kFIRAndroidClientID]; -} - -- (void)setAndroidClientID:(NSString *)androidClientID { - [self checkEditingLocked]; - _optionsDictionary[kFIRAndroidClientID] = [androidClientID copy]; -} - -- (NSString *)googleAppID { - return self.optionsDictionary[kFIRGoogleAppID]; -} - -- (void)setGoogleAppID:(NSString *)googleAppID { - [self checkEditingLocked]; - _optionsDictionary[kFIRGoogleAppID] = [googleAppID copy]; -} - -- (NSString *)libraryVersionID { - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - // The unit tests are set up to catch anything that does not properly convert. - NSString *version = [NSString stringWithUTF8String:FIRCoreVersionString]; - NSArray *components = [version componentsSeparatedByString:@"."]; - NSString *major = [components objectAtIndex:0]; - NSString *minor = [NSString stringWithFormat:@"%02d", [[components objectAtIndex:1] intValue]]; - NSString *patch = [NSString stringWithFormat:@"%02d", [[components objectAtIndex:2] intValue]]; - kFIRLibraryVersionID = [NSString stringWithFormat:@"%@%@%@000", major, minor, patch]; - }); - return kFIRLibraryVersionID; -} - -- (void)setLibraryVersionID:(NSString *)libraryVersionID { - _optionsDictionary[kFIRLibraryVersionID] = [libraryVersionID copy]; -} - -- (NSString *)databaseURL { - return self.optionsDictionary[kFIRDatabaseURL]; -} - -- (void)setDatabaseURL:(NSString *)databaseURL { - [self checkEditingLocked]; - - _optionsDictionary[kFIRDatabaseURL] = [databaseURL copy]; -} - -- (NSString *)storageBucket { - return self.optionsDictionary[kFIRStorageBucket]; -} - -- (void)setStorageBucket:(NSString *)storageBucket { - [self checkEditingLocked]; - _optionsDictionary[kFIRStorageBucket] = [storageBucket copy]; -} - -- (void)setDeepLinkURLScheme:(NSString *)deepLinkURLScheme { - [self checkEditingLocked]; - _deepLinkURLScheme = [deepLinkURLScheme copy]; -} - -- (NSString *)bundleID { - return self.optionsDictionary[kFIRBundleID]; -} - -- (void)setBundleID:(NSString *)bundleID { - [self checkEditingLocked]; - _optionsDictionary[kFIRBundleID] = [bundleID copy]; -} - -- (void)setAppGroupID:(NSString *)appGroupID { - [self checkEditingLocked]; - _appGroupID = [appGroupID copy]; -} - -#pragma mark - Equality - -- (BOOL)isEqual:(id)object { - if (!object || ![object isKindOfClass:[FIROptions class]]) { - return NO; - } - - return [self isEqualToOptions:(FIROptions *)object]; -} - -- (BOOL)isEqualToOptions:(FIROptions *)options { - // Skip any non-FIROptions classes. - if (![options isKindOfClass:[FIROptions class]]) { - return NO; - } - - // Check the internal dictionary and custom properties for differences. - if (![options.optionsDictionary isEqualToDictionary:self.optionsDictionary]) { - return NO; - } - - // Validate extra properties not contained in the dictionary. Only validate it if one of the - // objects has the property set. - if ((options.deepLinkURLScheme != nil || self.deepLinkURLScheme != nil) && - ![options.deepLinkURLScheme isEqualToString:self.deepLinkURLScheme]) { - return NO; - } - - if ((options.appGroupID != nil || self.appGroupID != nil) && - ![options.appGroupID isEqualToString:self.appGroupID]) { - return NO; - } - - // Validate the Analytics options haven't changed with the Info.plist. - if (![options.analyticsOptionsDictionary isEqualToDictionary:self.analyticsOptionsDictionary]) { - return NO; - } - - // We don't care about the `editingLocked` or `usingOptionsFromDefaultPlist` properties since - // those relate to lifecycle and construction, we only care if the contents of the options - // themselves are equal. - return YES; -} - -- (NSUInteger)hash { - // This is strongly recommended for any object that implements a custom `isEqual:` method to - // ensure that dictionary and set behavior matches other `isEqual:` checks. - // Note: `self.analyticsOptionsDictionary` was left out here since it solely relies on the - // contents of the main bundle's `Info.plist`. We should avoid reading that file and the contents - // should be identical. - return self.optionsDictionary.hash ^ self.deepLinkURLScheme.hash ^ self.appGroupID.hash; -} - -#pragma mark - Internal instance methods - -- (NSDictionary *)analyticsOptionsDictionaryWithInfoDictionary:(NSDictionary *)infoDictionary { - if (_analyticsOptionsDictionary == nil) { - NSMutableDictionary *tempAnalyticsOptions = [[NSMutableDictionary alloc] init]; - NSArray *measurementKeys = @[ - kFIRIsMeasurementEnabled, kFIRIsAnalyticsCollectionEnabled, - kFIRIsAnalyticsCollectionDeactivated - ]; - for (NSString *key in measurementKeys) { - id value = infoDictionary[key] ?: self.optionsDictionary[key] ?: nil; - if (!value) { - continue; - } - tempAnalyticsOptions[key] = value; - } - _analyticsOptionsDictionary = tempAnalyticsOptions; - } - return _analyticsOptionsDictionary; -} - -- (NSDictionary *)analyticsOptionsDictionary { - return [self analyticsOptionsDictionaryWithInfoDictionary:[NSBundle mainBundle].infoDictionary]; -} - -/** - * Whether or not Measurement was enabled. Measurement is enabled unless explicitly disabled in - * GoogleService-Info.plist. This uses the old plist flag IS_MEASUREMENT_ENABLED, which should still - * be supported. - */ -- (BOOL)isMeasurementEnabled { - if (self.isAnalyticsCollectionDeactivated) { - return NO; - } - NSNumber *value = self.analyticsOptionsDictionary[kFIRIsMeasurementEnabled]; - if (value == nil) { - // TODO: This could probably be cleaned up since FIROptions shouldn't know about FIRApp or have - // to check if it's the default app. The FIROptions instance can't be modified after - // `+configure` is called, so it's not a good place to copy it either in case the flag is - // changed at runtime. - - // If no values are set for Analytics, fall back to the global collection switch in FIRApp. - // Analytics only supports the default FIRApp, so check that first. - if (![FIRApp isDefaultAppConfigured]) { - return NO; - } - - // Fall back to the default app's collection switch when the key is not in the dictionary. - return [FIRApp defaultApp].isDataCollectionDefaultEnabled; - } - return [value boolValue]; -} - -- (BOOL)isAnalyticsCollectionExplicitlySet { - // If it's de-activated, it classifies as explicity set. If not, it's not a good enough indication - // that the developer wants FirebaseAnalytics enabled so continue checking. - if (self.isAnalyticsCollectionDeactivated) { - return YES; - } - - // Check if the current Analytics flag is set. - id collectionEnabledObject = self.analyticsOptionsDictionary[kFIRIsAnalyticsCollectionEnabled]; - if (collectionEnabledObject && [collectionEnabledObject isKindOfClass:[NSNumber class]]) { - // It doesn't matter what the value is, it's explicitly set. - return YES; - } - - // Check if the old measurement flag is set. - id measurementEnabledObject = self.analyticsOptionsDictionary[kFIRIsMeasurementEnabled]; - if (measurementEnabledObject && [measurementEnabledObject isKindOfClass:[NSNumber class]]) { - // It doesn't matter what the value is, it's explicitly set. - return YES; - } - - // No flags are set to explicitly enable or disable FirebaseAnalytics. - return NO; -} - -- (BOOL)isAnalyticsCollectionEnabled { - if (self.isAnalyticsCollectionDeactivated) { - return NO; - } - NSNumber *value = self.analyticsOptionsDictionary[kFIRIsAnalyticsCollectionEnabled]; - if (value == nil) { - return self.isMeasurementEnabled; // Fall back to older plist flag. - } - return [value boolValue]; -} - -- (BOOL)isAnalyticsCollectionDeactivated { - NSNumber *value = self.analyticsOptionsDictionary[kFIRIsAnalyticsCollectionDeactivated]; - if (value == nil) { - return NO; // Analytics Collection is not deactivated when the key is not in the dictionary. - } - return [value boolValue]; -} - -- (BOOL)isAnalyticsEnabled { - return [self.optionsDictionary[kFIRIsAnalyticsEnabled] boolValue]; -} - -- (BOOL)isSignInEnabled { - return [self.optionsDictionary[kFIRIsSignInEnabled] boolValue]; -} - -@end diff --git a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/FIRVersion.h b/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/FIRVersion.h deleted file mode 100644 index 226efb1a76..0000000000 --- a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/FIRVersion.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -/** The version of the Firebase SDK. */ -FOUNDATION_EXPORT const char *const FIRVersionString; - -/** The version of the FirebaseCore Component. */ -FOUNDATION_EXPORT const char *const FIRCoreVersionString; diff --git a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/FIRVersion.m b/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/FIRVersion.m deleted file mode 100644 index ec0f6ba640..0000000000 --- a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/FIRVersion.m +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef Firebase_VERSION -#error "Firebase_VERSION is not defined: add -DFirebase_VERSION=... to the build invocation" -#endif - -#ifndef FIRCore_VERSION -#error "FIRCore_VERSION is not defined: add -DFIRCore_VERSION=... to the build invocation" -#endif - -// The following two macros supply the incantation so that the C -// preprocessor does not try to parse the version as a floating -// point number. See -// https://www.guyrutenberg.com/2008/12/20/expanding-macros-into-string-constants-in-c/ -#define STR(x) STR_EXPAND(x) -#define STR_EXPAND(x) #x - -const char *const FIRVersionString = (const char *const)STR(Firebase_VERSION); -const char *const FIRCoreVersionString = (const char *const)STR(FIRCore_VERSION); diff --git a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRAnalyticsConfiguration.h b/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRAnalyticsConfiguration.h deleted file mode 100644 index 6429ac70ea..0000000000 --- a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRAnalyticsConfiguration.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -/// Values stored in analyticsEnabledState. Never alter these constants since they must match with -/// values persisted to disk. -typedef NS_ENUM(int64_t, FIRAnalyticsEnabledState) { - // 0 is the default value for keys not found stored in persisted config, so it cannot represent - // kFIRAnalyticsEnabledStateSetNo. It must represent kFIRAnalyticsEnabledStateNotSet. - kFIRAnalyticsEnabledStateNotSet = 0, - kFIRAnalyticsEnabledStateSetYes = 1, - kFIRAnalyticsEnabledStateSetNo = 2, -}; - -/// The user defaults key for the persisted measurementEnabledState value. FIRAPersistedConfig reads -/// measurementEnabledState using this same key. -static NSString *const kFIRAPersistedConfigMeasurementEnabledStateKey = - @"/google/measurement/measurement_enabled_state"; - -static NSString *const kFIRAnalyticsConfigurationSetEnabledNotification = - @"FIRAnalyticsConfigurationSetEnabledNotification"; -static NSString *const kFIRAnalyticsConfigurationSetMinimumSessionIntervalNotification = - @"FIRAnalyticsConfigurationSetMinimumSessionIntervalNotification"; -static NSString *const kFIRAnalyticsConfigurationSetSessionTimeoutIntervalNotification = - @"FIRAnalyticsConfigurationSetSessionTimeoutIntervalNotification"; - -@interface FIRAnalyticsConfiguration : NSObject - -/// Returns the shared instance of FIRAnalyticsConfiguration. -+ (FIRAnalyticsConfiguration *)sharedInstance; - -// Sets whether analytics collection is enabled for this app on this device. This setting is -// persisted across app sessions. By default it is enabled. -- (void)setAnalyticsCollectionEnabled:(BOOL)analyticsCollectionEnabled; - -/// Sets whether analytics collection is enabled for this app on this device, and a flag to persist -/// the value or not. The setting should not be persisted if being set by the global data collection -/// flag. -- (void)setAnalyticsCollectionEnabled:(BOOL)analyticsCollectionEnabled - persistSetting:(BOOL)shouldPersist; - -@end diff --git a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRAppAssociationRegistration.h b/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRAppAssociationRegistration.h deleted file mode 100644 index 3fc69c6c25..0000000000 --- a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRAppAssociationRegistration.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -// TODO: Remove this once Auth moves over to Core's instance registration system. -/** @class FIRAppAssociationRegistration - @brief Manages object associations as a singleton-dependent: At most one object is - registered for any given host/key pair, and the object shall be created on-the-fly when - asked for. - */ -@interface FIRAppAssociationRegistration : NSObject - -/** @fn registeredObjectWithHost:key:creationBlock: - @brief Retrieves the registered object with a particular host and key. - @param host The host object. - @param key The key to specify the registered object on the host. - @param creationBlock The block to return the object to be registered if not already. - The block is executed immediately before this method returns if it is executed at all. - It can also be executed multiple times across different method invocations if previous - execution of the block returns @c nil. - @return The registered object for the host/key pair, or @c nil if no object is registered - and @c creationBlock returns @c nil. - @remarks The method is thread-safe but non-reentrant in the sense that attempting to call this - method again within the @c creationBlock with the same host/key pair raises an exception. - The registered object is retained by the host. - */ -+ (nullable ObjectType)registeredObjectWithHost:(id)host - key:(NSString *)key - creationBlock:(ObjectType _Nullable (^)(void))creationBlock; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRAppInternal.h b/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRAppInternal.h deleted file mode 100644 index ad1a186b93..0000000000 --- a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRAppInternal.h +++ /dev/null @@ -1,162 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import -#import - -@class FIRComponentContainer; -@protocol FIRLibrary; - -/** - * The internal interface to FIRApp. This is meant for first-party integrators, who need to receive - * FIRApp notifications, log info about the success or failure of their configuration, and access - * other internal functionality of FIRApp. - * - * TODO(b/28296561): Restructure this header. - */ -NS_ASSUME_NONNULL_BEGIN - -typedef NS_ENUM(NSInteger, FIRConfigType) { - FIRConfigTypeCore = 1, - FIRConfigTypeSDK = 2, -}; - -extern NSString *const kFIRDefaultAppName; -extern NSString *const kFIRAppReadyToConfigureSDKNotification; -extern NSString *const kFIRAppDeleteNotification; -extern NSString *const kFIRAppIsDefaultAppKey; -extern NSString *const kFIRAppNameKey; -extern NSString *const kFIRGoogleAppIDKey; - -/** - * The format string for the User Defaults key used for storing the data collection enabled flag. - * This includes formatting to append the Firebase App's name. - */ -extern NSString *const kFIRGlobalAppDataCollectionEnabledDefaultsKeyFormat; - -/** - * The plist key used for storing the data collection enabled flag. - */ -extern NSString *const kFIRGlobalAppDataCollectionEnabledPlistKey; - -/** - * A notification fired containing diagnostic information when SDK errors occur. - */ -extern NSString *const kFIRAppDiagnosticsNotification; - -/** @var FIRAuthStateDidChangeInternalNotification - @brief The name of the @c NSNotificationCenter notification which is posted when the auth state - changes (e.g. a new token has been produced, a user logs in or out). The object parameter of - the notification is a dictionary possibly containing the key: - @c FIRAuthStateDidChangeInternalNotificationTokenKey (the new access token.) If it does not - contain this key it indicates a sign-out event took place. - */ -extern NSString *const FIRAuthStateDidChangeInternalNotification; - -/** @var FIRAuthStateDidChangeInternalNotificationTokenKey - @brief A key present in the dictionary object parameter of the - @c FIRAuthStateDidChangeInternalNotification notification. The value associated with this - key will contain the new access token. - */ -extern NSString *const FIRAuthStateDidChangeInternalNotificationTokenKey; - -/** @var FIRAuthStateDidChangeInternalNotificationAppKey - @brief A key present in the dictionary object parameter of the - @c FIRAuthStateDidChangeInternalNotification notification. The value associated with this - key will contain the FIRApp associated with the auth instance. - */ -extern NSString *const FIRAuthStateDidChangeInternalNotificationAppKey; - -/** @var FIRAuthStateDidChangeInternalNotificationUIDKey - @brief A key present in the dictionary object parameter of the - @c FIRAuthStateDidChangeInternalNotification notification. The value associated with this - key will contain the new user's UID (or nil if there is no longer a user signed in). - */ -extern NSString *const FIRAuthStateDidChangeInternalNotificationUIDKey; - -@interface FIRApp () - -/** - * A flag indicating if this is the default app (has the default app name). - */ -@property(nonatomic, readonly) BOOL isDefaultApp; - -/* - * The container of interop SDKs for this app. - */ -@property(nonatomic) FIRComponentContainer *container; - -/** - * Creates an error for failing to configure a subspec service. This method is called by each - * FIRApp notification listener. - */ -+ (NSError *)errorForSubspecConfigurationFailureWithDomain:(NSString *)domain - errorCode:(FIRErrorCode)code - service:(NSString *)service - reason:(NSString *)reason; -/** - * Checks if the default app is configured without trying to configure it. - */ -+ (BOOL)isDefaultAppConfigured; - -/** - * Registers a given third-party library with the given version number to be reported for - * analytics. - * - * @param name Name of the library. - * @param version Version of the library. - */ -+ (void)registerLibrary:(nonnull NSString *)name withVersion:(nonnull NSString *)version; - -/** - * Registers a given internal library with the given version number to be reported for - * analytics. - * - * @param library Optional parameter for component registration. - * @param name Name of the library. - * @param version Version of the library. - */ -+ (void)registerInternalLibrary:(nonnull Class)library - withName:(nonnull NSString *)name - withVersion:(nonnull NSString *)version; - -/** - * A concatenated string representing all the third-party libraries and version numbers. - */ -+ (NSString *)firebaseUserAgent; - -/** - * Used by each SDK to send logs about SDK configuration status to Clearcut. - * - * @note This API is a no-op, please remove calls to it. - */ -- (void)sendLogsWithServiceName:(NSString *)serviceName - version:(NSString *)version - error:(NSError *)error; - -/** - * Can be used by the unit tests in eack SDK to reset FIRApp. This method is thread unsafe. - */ -+ (void)resetApps; - -/** - * Can be used by the unit tests in each SDK to set customized options. - */ -- (instancetype)initInstanceWithName:(NSString *)name options:(FIROptions *)options; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRComponent.h b/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRComponent.h deleted file mode 100644 index cb51ee70e2..0000000000 --- a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRComponent.h +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -@class FIRApp; -@class FIRComponentContainer; - -NS_ASSUME_NONNULL_BEGIN - -/// Provides a system to clean up cached instances returned from the component system. -NS_SWIFT_NAME(ComponentLifecycleMaintainer) -@protocol FIRComponentLifecycleMaintainer -/// The associated app will be deleted, clean up any resources as they are about to be deallocated. -- (void)appWillBeDeleted:(FIRApp *)app; -@end - -typedef _Nullable id (^FIRComponentCreationBlock)(FIRComponentContainer *container, - BOOL *isCacheable) - NS_SWIFT_NAME(ComponentCreationBlock); - -@class FIRDependency; - -/// Describes the timing of instantiation. Note: new components should default to lazy unless there -/// is a strong reason to be eager. -typedef NS_ENUM(NSInteger, FIRInstantiationTiming) { - FIRInstantiationTimingLazy, - FIRInstantiationTimingAlwaysEager, - FIRInstantiationTimingEagerInDefaultApp -} NS_SWIFT_NAME(InstantiationTiming); - -/// A component that can be used from other Firebase SDKs. -NS_SWIFT_NAME(Component) -@interface FIRComponent : NSObject - -/// The protocol describing functionality provided from the Component. -@property(nonatomic, strong, readonly) Protocol *protocol; - -/// The timing of instantiation. -@property(nonatomic, readonly) FIRInstantiationTiming instantiationTiming; - -/// An array of dependencies for the component. -@property(nonatomic, copy, readonly) NSArray *dependencies; - -/// A block to instantiate an instance of the component with the appropriate dependencies. -@property(nonatomic, copy, readonly) FIRComponentCreationBlock creationBlock; - -// There's an issue with long NS_SWIFT_NAMES that causes compilation to fail, disable clang-format -// for the next two methods. -// clang-format off - -/// Creates a component with no dependencies that will be lazily initialized. -+ (instancetype)componentWithProtocol:(Protocol *)protocol - creationBlock:(FIRComponentCreationBlock)creationBlock -NS_SWIFT_NAME(init(_:creationBlock:)); - -/// Creates a component to be registered with the component container. -/// -/// @param protocol - The protocol describing functionality provided by the component. -/// @param instantiationTiming - When the component should be initialized. Use .lazy unless there's -/// a good reason to be instantiated earlier. -/// @param dependencies - Any dependencies the `implementingClass` has, optional or required. -/// @param creationBlock - A block to instantiate the component with a container, and if -/// @return A component that can be registered with the component container. -+ (instancetype)componentWithProtocol:(Protocol *)protocol - instantiationTiming:(FIRInstantiationTiming)instantiationTiming - dependencies:(NSArray *)dependencies - creationBlock:(FIRComponentCreationBlock)creationBlock -NS_SWIFT_NAME(init(_:instantiationTiming:dependencies:creationBlock:)); - -// clang-format on - -/// Unavailable. -- (instancetype)init NS_UNAVAILABLE; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRComponentContainer.h b/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRComponentContainer.h deleted file mode 100644 index 8dfab9c10d..0000000000 --- a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRComponentContainer.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#import - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/// A type-safe macro to retrieve a component from a container. This should be used to retrieve -/// components instead of using the container directly. -#define FIR_COMPONENT(type, container) \ - [FIRComponentType> instanceForProtocol:@protocol(type) inContainer:container] - -@class FIRApp; - -/// A container that holds different components that are registered via the -/// `registerAsComponentRegistrant:` call. These classes should conform to `FIRComponentRegistrant` -/// in order to properly register components for Core. -NS_SWIFT_NAME(FirebaseComponentContainer) -@interface FIRComponentContainer : NSObject - -/// A weak reference to the app that an instance of the container belongs to. -@property(nonatomic, weak, readonly) FIRApp *app; - -/// Unavailable. Use the `container` property on `FIRApp`. -- (instancetype)init NS_UNAVAILABLE; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRComponentContainerInternal.h b/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRComponentContainerInternal.h deleted file mode 100644 index bf39bc6ce4..0000000000 --- a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRComponentContainerInternal.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#import - -#import -#import - -@class FIRApp; - -NS_ASSUME_NONNULL_BEGIN - -@interface FIRComponentContainer (Private) - -/// Initializes a container for a given app. This should only be called by the app itself. -- (instancetype)initWithApp:(FIRApp *)app; - -/// Retrieves an instance that conforms to the specified protocol. This will return `nil` if the -/// protocol wasn't registered, or if the instance couldn't be instantiated for the provided app. -- (nullable id)instanceForProtocol:(Protocol *)protocol NS_SWIFT_NAME(instance(for:)); - -/// Instantiates all the components that have registered as "eager" after initialization. -- (void)instantiateEagerComponents; - -/// Remove all of the cached instances stored and allow them to clean up after themselves. -- (void)removeAllCachedInstances; - -/// Removes all the components. After calling this method no new instances will be created. -- (void)removeAllComponents; - -/// Register a class to provide components for the interoperability system. The class should conform -/// to `FIRComponentRegistrant` and provide an array of `FIRComponent` objects. -+ (void)registerAsComponentRegistrant:(Class)klass; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRComponentType.h b/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRComponentType.h deleted file mode 100644 index 6f2aca7b86..0000000000 --- a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRComponentType.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -@class FIRComponentContainer; - -NS_ASSUME_NONNULL_BEGIN - -/// Do not use directly. A placeholder type in order to provide a macro that will warn users of -/// mis-matched protocols. -NS_SWIFT_NAME(ComponentType) -@interface FIRComponentType<__covariant T> : NSObject - -/// Do not use directly. A factory method to retrieve an instance that provides a specific -/// functionality. -+ (T)instanceForProtocol:(Protocol *)protocol inContainer:(FIRComponentContainer *)container; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRConfigurationInternal.h b/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRConfigurationInternal.h deleted file mode 100644 index 0d1a36f666..0000000000 --- a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRConfigurationInternal.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -@class FIRAnalyticsConfiguration; - -@interface FIRConfiguration () - -/** - * The configuration class for Firebase Analytics. This should be removed once the logic for - * enabling and disabling Analytics is moved to Analytics. - */ -@property(nonatomic, readwrite) FIRAnalyticsConfiguration *analyticsConfiguration; - -@end diff --git a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRCoreDiagnosticsConnector.h b/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRCoreDiagnosticsConnector.h deleted file mode 100644 index 76c0c05f0a..0000000000 --- a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRCoreDiagnosticsConnector.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -@class FIRDiagnosticsData; -@class FIROptions; - -NS_ASSUME_NONNULL_BEGIN - -/** Connects FIRCore with the CoreDiagnostics library. */ -@interface FIRCoreDiagnosticsConnector : NSObject - -/** Logs FirebaseCore related data. - * - * @param options The options object containing data to log. - */ -+ (void)logCoreTelemetryWithOptions:(FIROptions *)options; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRDependency.h b/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRDependency.h deleted file mode 100644 index 46e9b7ea60..0000000000 --- a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRDependency.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -/// A dependency on a specific protocol's functionality. -NS_SWIFT_NAME(Dependency) -@interface FIRDependency : NSObject - -/// The protocol describing functionality being depended on. -@property(nonatomic, strong, readonly) Protocol *protocol; - -/// A flag to specify if the dependency is required or not. -@property(nonatomic, readonly) BOOL isRequired; - -/// Initializes a dependency that is required. Calls `initWithProtocol:isRequired` with `YES` for -/// the required parameter. -/// Creates a required dependency on the specified protocol's functionality. -+ (instancetype)dependencyWithProtocol:(Protocol *)protocol; - -/// Creates a dependency on the specified protocol's functionality and specify if it's required for -/// the class's functionality. -+ (instancetype)dependencyWithProtocol:(Protocol *)protocol isRequired:(BOOL)required; - -/// Use `dependencyWithProtocol:isRequired:` instead. -- (instancetype)init NS_UNAVAILABLE; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRDiagnosticsData.h b/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRDiagnosticsData.h deleted file mode 100644 index ac5ef2c4f9..0000000000 --- a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRDiagnosticsData.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** Implements the FIRCoreDiagnosticsData protocol to log diagnostics data. */ -@interface FIRDiagnosticsData : NSObject - -/** Inserts values into the diagnosticObjects dictionary if the value isn't nil. - * - * @param value The value to insert if it's not nil. - * @param key The key to associate it with. - */ -- (void)insertValue:(nullable id)value forKey:(NSString *)key; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRErrorCode.h b/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRErrorCode.h deleted file mode 100644 index f77b3d0024..0000000000 --- a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRErrorCode.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** Error codes in Firebase error domain. */ -typedef NS_ENUM(NSInteger, FIRErrorCode) { - /** - * Unknown error. - */ - FIRErrorCodeUnknown = 0, - /** - * Loading data from the GoogleService-Info.plist file failed. This is a fatal error and should - * not be ignored. Further calls to the API will fail and/or possibly cause crashes. - */ - FIRErrorCodeInvalidPlistFile = -100, - - /** - * Validating the Google App ID format failed. - */ - FIRErrorCodeInvalidAppID = -101, - - /** - * Error code for failing to configure a specific service. - */ - FIRErrorCodeConfigFailed = -114, -}; diff --git a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRErrors.h b/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRErrors.h deleted file mode 100644 index 19e47328ac..0000000000 --- a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRErrors.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -#include "FIRErrorCode.h" - -extern NSString *const kFirebaseErrorDomain; -extern NSString *const kFirebaseConfigErrorDomain; -extern NSString *const kFirebaseCoreErrorDomain; -extern NSString *const kFirebasePerfErrorDomain; diff --git a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRHeartbeatInfo.h b/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRHeartbeatInfo.h deleted file mode 100644 index bfff73e5d9..0000000000 --- a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRHeartbeatInfo.h +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface FIRHeartbeatInfo : NSObject - -// Enum representing the different heartbeat codes. -typedef NS_ENUM(NSInteger, FIRHeartbeatInfoCode) { - FIRHeartbeatInfoCodeNone = 0, - FIRHeartbeatInfoCodeSDK = 1, - FIRHeartbeatInfoCodeGlobal = 2, - FIRHeartbeatInfoCodeCombined = 3, -}; - -/** - * Get heartbeat code requred for the sdk. - * @param heartbeatTag String representing the sdk heartbeat tag. - * @return Heartbeat code indicating whether or not an sdk/global heartbeat - * needs to be sent - */ -+ (FIRHeartbeatInfoCode)heartbeatCodeForTag:(NSString *)heartbeatTag; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRLibrary.h b/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRLibrary.h deleted file mode 100644 index af9d9685d5..0000000000 --- a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRLibrary.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef FIRLibrary_h -#define FIRLibrary_h - -#import - -#import - -@class FIRApp; - -NS_ASSUME_NONNULL_BEGIN - -/// Provide an interface to register a library for userAgent logging and availability to others. -NS_SWIFT_NAME(Library) -@protocol FIRLibrary - -/// Returns one or more FIRComponents that will be registered in -/// FIRApp and participate in dependency resolution and injection. -+ (NSArray *)componentsToRegister; - -@optional -/// Implement this method if the library needs notifications for lifecycle events. This method is -/// called when the developer calls `FirebaseApp.configure()`. -+ (void)configureWithApp:(FIRApp *)app; - -@end - -NS_ASSUME_NONNULL_END - -#endif /* FIRLibrary_h */ diff --git a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRLogger.h b/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRLogger.h deleted file mode 100644 index 548e389a4e..0000000000 --- a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRLogger.h +++ /dev/null @@ -1,151 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - * The Firebase services used in Firebase logger. - */ -typedef NSString *const FIRLoggerService; - -extern FIRLoggerService kFIRLoggerABTesting; -extern FIRLoggerService kFIRLoggerAdMob; -extern FIRLoggerService kFIRLoggerAnalytics; -extern FIRLoggerService kFIRLoggerAuth; -extern FIRLoggerService kFIRLoggerCrash; -extern FIRLoggerService kFIRLoggerCore; -extern FIRLoggerService kFIRLoggerMLKit; -extern FIRLoggerService kFIRLoggerPerf; -extern FIRLoggerService kFIRLoggerRemoteConfig; - -/** - * The key used to store the logger's error count. - */ -extern NSString *const kFIRLoggerErrorCountKey; - -/** - * The key used to store the logger's warning count. - */ -extern NSString *const kFIRLoggerWarningCountKey; - -#ifdef __cplusplus -extern "C" { -#endif // __cplusplus - -/** - * Enables or disables Analytics debug mode. - * If set to YES, the logging level for Analytics will be set to FIRLoggerLevelDebug. - * Enabling the debug mode has no effect if the app is running from App Store. - * (required) analytics debug mode flag. - */ -void FIRSetAnalyticsDebugMode(BOOL analyticsDebugMode); - -/** - * Changes the default logging level of FIRLoggerLevelNotice to a user-specified level. - * The default level cannot be set above FIRLoggerLevelNotice if the app is running from App Store. - * (required) log level (one of the FIRLoggerLevel enum values). - */ -void FIRSetLoggerLevel(FIRLoggerLevel loggerLevel); - -/** - * Checks if the specified logger level is loggable given the current settings. - * (required) log level (one of the FIRLoggerLevel enum values). - * (required) whether or not this function is called from the Analytics component. - */ -BOOL FIRIsLoggableLevel(FIRLoggerLevel loggerLevel, BOOL analyticsComponent); - -/** - * Logs a message to the Xcode console and the device log. If running from AppStore, will - * not log any messages with a level higher than FIRLoggerLevelNotice to avoid log spamming. - * (required) log level (one of the FIRLoggerLevel enum values). - * (required) service name of type FIRLoggerService. - * (required) message code starting with "I-" which means iOS, followed by a capitalized - * three-character service identifier and a six digit integer message ID that is unique - * within the service. - * An example of the message code is @"I-COR000001". - * (required) message string which can be a format string. - * (optional) variable arguments list obtained from calling va_start, used when message is a format - * string. - */ -extern void FIRLogBasic(FIRLoggerLevel level, - FIRLoggerService service, - NSString *messageCode, - NSString *message, -// On 64-bit simulators, va_list is not a pointer, so cannot be marked nullable -// See: http://stackoverflow.com/q/29095469 -#if __LP64__ && TARGET_OS_SIMULATOR || TARGET_OS_OSX - va_list args_ptr -#else - va_list _Nullable args_ptr -#endif -); - -/** - * The following functions accept the following parameters in order: - * (required) service name of type FIRLoggerService. - * (required) message code starting from "I-" which means iOS, followed by a capitalized - * three-character service identifier and a six digit integer message ID that is unique - * within the service. - * An example of the message code is @"I-COR000001". - * See go/firebase-log-proposal for details. - * (required) message string which can be a format string. - * (optional) the list of arguments to substitute into the format string. - * Example usage: - * FIRLogError(kFIRLoggerCore, @"I-COR000001", @"Configuration of %@ failed.", app.name); - */ -extern void FIRLogError(FIRLoggerService service, NSString *messageCode, NSString *message, ...) - NS_FORMAT_FUNCTION(3, 4); -extern void FIRLogWarning(FIRLoggerService service, NSString *messageCode, NSString *message, ...) - NS_FORMAT_FUNCTION(3, 4); -extern void FIRLogNotice(FIRLoggerService service, NSString *messageCode, NSString *message, ...) - NS_FORMAT_FUNCTION(3, 4); -extern void FIRLogInfo(FIRLoggerService service, NSString *messageCode, NSString *message, ...) - NS_FORMAT_FUNCTION(3, 4); -extern void FIRLogDebug(FIRLoggerService service, NSString *messageCode, NSString *message, ...) - NS_FORMAT_FUNCTION(3, 4); - -#ifdef __cplusplus -} // extern "C" -#endif // __cplusplus - -@interface FIRLoggerWrapper : NSObject - -/** - * Objective-C wrapper for FIRLogBasic to allow weak linking to FIRLogger - * (required) log level (one of the FIRLoggerLevel enum values). - * (required) service name of type FIRLoggerService. - * (required) message code starting with "I-" which means iOS, followed by a capitalized - * three-character service identifier and a six digit integer message ID that is unique - * within the service. - * An example of the message code is @"I-COR000001". - * (required) message string which can be a format string. - * (optional) variable arguments list obtained from calling va_start, used when message is a format - * string. - */ - -+ (void)logWithLevel:(FIRLoggerLevel)level - withService:(FIRLoggerService)service - withCode:(NSString *)messageCode - withMessage:(NSString *)message - withArgs:(va_list)args; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIROptionsInternal.h b/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIROptionsInternal.h deleted file mode 100644 index 0660a3cd8c..0000000000 --- a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIROptionsInternal.h +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -/** - * Keys for the strings in the plist file. - */ -extern NSString *const kFIRAPIKey; -extern NSString *const kFIRTrackingID; -extern NSString *const kFIRGoogleAppID; -extern NSString *const kFIRClientID; -extern NSString *const kFIRGCMSenderID; -extern NSString *const kFIRAndroidClientID; -extern NSString *const kFIRDatabaseURL; -extern NSString *const kFIRStorageBucket; -extern NSString *const kFIRBundleID; -extern NSString *const kFIRProjectID; - -/** - * Keys for the plist file name - */ -extern NSString *const kServiceInfoFileName; - -extern NSString *const kServiceInfoFileType; - -/** - * This header file exposes the initialization of FIROptions to internal use. - */ -@interface FIROptions () - -/** - * resetDefaultOptions and initInternalWithOptionsDictionary: are exposed only for unit tests. - */ -+ (void)resetDefaultOptions; - -/** - * Initializes the options with dictionary. The above strings are the keys of the dictionary. - * This is the designated initializer. - */ -- (instancetype)initInternalWithOptionsDictionary:(NSDictionary *)serviceInfoDictionary; - -/** - * defaultOptions and defaultOptionsDictionary are exposed in order to be used in FIRApp and - * other first party services. - */ -+ (FIROptions *)defaultOptions; - -+ (NSDictionary *)defaultOptionsDictionary; - -/** - * Indicates whether or not Analytics collection was explicitly enabled via a plist flag or at - * runtime. - */ -@property(nonatomic, readonly) BOOL isAnalyticsCollectionExplicitlySet; - -/** - * Whether or not Analytics Collection was enabled. Analytics Collection is enabled unless - * explicitly disabled in GoogleService-Info.plist. - */ -@property(nonatomic, readonly) BOOL isAnalyticsCollectionEnabled; - -/** - * Whether or not Analytics Collection was completely disabled. If YES, then - * isAnalyticsCollectionEnabled will be NO. - */ -@property(nonatomic, readonly) BOOL isAnalyticsCollectionDeactivated; - -/** - * The version ID of the client library, e.g. @"1100000". - */ -@property(nonatomic, readonly, copy) NSString *libraryVersionID; - -/** - * The flag indicating whether this object was constructed with the values in the default plist - * file. - */ -@property(nonatomic) BOOL usingOptionsFromDefaultPlist; - -/** - * Whether or not Measurement was enabled. Measurement is enabled unless explicitly disabled in - * GoogleService-Info.plist. - */ -@property(nonatomic, readonly) BOOL isMeasurementEnabled; - -/** - * Whether or not Analytics was enabled in the developer console. - */ -@property(nonatomic, readonly) BOOL isAnalyticsEnabled; - -/** - * Whether or not SignIn was enabled in the developer console. - */ -@property(nonatomic, readonly) BOOL isSignInEnabled; - -/** - * Whether or not editing is locked. This should occur after FIROptions has been set on a FIRApp. - */ -@property(nonatomic, getter=isEditingLocked) BOOL editingLocked; - -@end diff --git a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Public/FIRApp.h b/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Public/FIRApp.h deleted file mode 100644 index f5578c6a0d..0000000000 --- a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Public/FIRApp.h +++ /dev/null @@ -1,127 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -@class FIROptions; - -NS_ASSUME_NONNULL_BEGIN - -/** A block that takes a BOOL and has no return value. */ -typedef void (^FIRAppVoidBoolCallback)(BOOL success) NS_SWIFT_NAME(FirebaseAppVoidBoolCallback); - -/** - * The entry point of Firebase SDKs. - * - * Initialize and configure FIRApp using +[FIRApp configure] - * or other customized ways as shown below. - * - * The logging system has two modes: default mode and debug mode. In default mode, only logs with - * log level Notice, Warning and Error will be sent to device. In debug mode, all logs will be sent - * to device. The log levels that Firebase uses are consistent with the ASL log levels. - * - * Enable debug mode by passing the -FIRDebugEnabled argument to the application. You can add this - * argument in the application's Xcode scheme. When debug mode is enabled via -FIRDebugEnabled, - * further executions of the application will also be in debug mode. In order to return to default - * mode, you must explicitly disable the debug mode with the application argument -FIRDebugDisabled. - * - * It is also possible to change the default logging level in code by calling setLoggerLevel: on - * the FIRConfiguration interface. - */ -NS_SWIFT_NAME(FirebaseApp) -@interface FIRApp : NSObject - -/** - * Configures a default Firebase app. Raises an exception if any configuration step fails. The - * default app is named "__FIRAPP_DEFAULT". This method should be called after the app is launched - * and before using Firebase services. This method should be called from the main thread and - * contains synchronous file I/O (reading GoogleService-Info.plist from disk). - */ -+ (void)configure; - -/** - * Configures the default Firebase app with the provided options. The default app is named - * "__FIRAPP_DEFAULT". Raises an exception if any configuration step fails. This method should be - * called from the main thread. - * - * @param options The Firebase application options used to configure the service. - */ -+ (void)configureWithOptions:(FIROptions *)options NS_SWIFT_NAME(configure(options:)); - -/** - * Configures a Firebase app with the given name and options. Raises an exception if any - * configuration step fails. This method should be called from the main thread. - * - * @param name The application's name given by the developer. The name should should only contain - Letters, Numbers and Underscore. - * @param options The Firebase application options used to configure the services. - */ -// clang-format off -+ (void)configureWithName:(NSString *)name - options:(FIROptions *)options NS_SWIFT_NAME(configure(name:options:)); -// clang-format on - -/** - * Returns the default app, or nil if the default app does not exist. - */ -+ (nullable FIRApp *)defaultApp NS_SWIFT_NAME(app()); - -/** - * Returns a previously created FIRApp instance with the given name, or nil if no such app exists. - * This method is thread safe. - */ -+ (nullable FIRApp *)appNamed:(NSString *)name NS_SWIFT_NAME(app(name:)); - -/** - * Returns the set of all extant FIRApp instances, or nil if there are no FIRApp instances. This - * method is thread safe. - */ -@property(class, readonly, nullable) NSDictionary *allApps; - -/** - * Cleans up the current FIRApp, freeing associated data and returning its name to the pool for - * future use. This method is thread safe. - */ -- (void)deleteApp:(FIRAppVoidBoolCallback)completion; - -/** - * FIRApp instances should not be initialized directly. Call +[FIRApp configure], - * +[FIRApp configureWithOptions:], or +[FIRApp configureWithNames:options:] directly. - */ -- (instancetype)init NS_UNAVAILABLE; - -/** - * Gets the name of this app. - */ -@property(nonatomic, copy, readonly) NSString *name; - -/** - * Gets a copy of the options for this app. These are non-modifiable. - */ -@property(nonatomic, copy, readonly) FIROptions *options; - -/** - * Gets or sets whether automatic data collection is enabled for all products. Defaults to `YES` - * unless `FirebaseDataCollectionDefaultEnabled` is set to `NO` in your app's Info.plist. This value - * is persisted across runs of the app so that it can be set once when users have consented to - * collection. - */ -@property(nonatomic, readwrite, getter=isDataCollectionDefaultEnabled) - BOOL dataCollectionDefaultEnabled; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Public/FIRConfiguration.h b/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Public/FIRConfiguration.h deleted file mode 100644 index 8de3b076a6..0000000000 --- a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Public/FIRConfiguration.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - * This interface provides global level properties that the developer can tweak. - */ -NS_SWIFT_NAME(FirebaseConfiguration) -@interface FIRConfiguration : NSObject - -/** Returns the shared configuration object. */ -@property(class, nonatomic, readonly) FIRConfiguration *sharedInstance NS_SWIFT_NAME(shared); - -/** - * Sets the logging level for internal Firebase logging. Firebase will only log messages - * that are logged at or below loggerLevel. The messages are logged both to the Xcode - * console and to the device's log. Note that if an app is running from AppStore, it will - * never log above FIRLoggerLevelNotice even if loggerLevel is set to a higher (more verbose) - * setting. - * - * @param loggerLevel The maximum logging level. The default level is set to FIRLoggerLevelNotice. - */ -- (void)setLoggerLevel:(FIRLoggerLevel)loggerLevel; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Public/FIRLoggerLevel.h b/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Public/FIRLoggerLevel.h deleted file mode 100644 index dca3aa0b01..0000000000 --- a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Public/FIRLoggerLevel.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// Note that importing GULLoggerLevel.h will lead to a non-modular header -// import error. - -/** - * The log levels used by internal logging. - */ -typedef NS_ENUM(NSInteger, FIRLoggerLevel) { - /** Error level, matches ASL_LEVEL_ERR. */ - FIRLoggerLevelError = 3, - /** Warning level, matches ASL_LEVEL_WARNING. */ - FIRLoggerLevelWarning = 4, - /** Notice level, matches ASL_LEVEL_NOTICE. */ - FIRLoggerLevelNotice = 5, - /** Info level, matches ASL_LEVEL_INFO. */ - FIRLoggerLevelInfo = 6, - /** Debug level, matches ASL_LEVEL_DEBUG. */ - FIRLoggerLevelDebug = 7, - /** Minimum log level. */ - FIRLoggerLevelMin = FIRLoggerLevelError, - /** Maximum log level. */ - FIRLoggerLevelMax = FIRLoggerLevelDebug -} NS_SWIFT_NAME(FirebaseLoggerLevel); diff --git a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Public/FIROptions.h b/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Public/FIROptions.h deleted file mode 100644 index 67fbe5ba42..0000000000 --- a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Public/FIROptions.h +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - * This class provides constant fields of Google APIs. - */ -NS_SWIFT_NAME(FirebaseOptions) -@interface FIROptions : NSObject - -/** - * Returns the default options. The first time this is called it synchronously reads - * GoogleService-Info.plist from disk. - */ -+ (nullable FIROptions *)defaultOptions NS_SWIFT_NAME(defaultOptions()); - -/** - * An iOS API key used for authenticating requests from your app, e.g. - * @"AIzaSyDdVgKwhZl0sTTTLZ7iTmt1r3N2cJLnaDk", used to identify your app to Google servers. - */ -@property(nonatomic, copy, nullable) NSString *APIKey NS_SWIFT_NAME(apiKey); - -/** - * The bundle ID for the application. Defaults to `[[NSBundle mainBundle] bundleID]` when not set - * manually or in a plist. - */ -@property(nonatomic, copy) NSString *bundleID; - -/** - * The OAuth2 client ID for iOS application used to authenticate Google users, for example - * @"12345.apps.googleusercontent.com", used for signing in with Google. - */ -@property(nonatomic, copy, nullable) NSString *clientID; - -/** - * The tracking ID for Google Analytics, e.g. @"UA-12345678-1", used to configure Google Analytics. - */ -@property(nonatomic, copy, nullable) NSString *trackingID; - -/** - * The Project Number from the Google Developer's console, for example @"012345678901", used to - * configure Google Cloud Messaging. - */ -@property(nonatomic, copy) NSString *GCMSenderID NS_SWIFT_NAME(gcmSenderID); - -/** - * The Project ID from the Firebase console, for example @"abc-xyz-123". - */ -@property(nonatomic, copy, nullable) NSString *projectID; - -/** - * The Android client ID used in Google AppInvite when an iOS app has its Android version, for - * example @"12345.apps.googleusercontent.com". - */ -@property(nonatomic, copy, nullable) NSString *androidClientID; - -/** - * The Google App ID that is used to uniquely identify an instance of an app. - */ -@property(nonatomic, copy) NSString *googleAppID; - -/** - * The database root URL, e.g. @"http://abc-xyz-123.firebaseio.com". - */ -@property(nonatomic, copy, nullable) NSString *databaseURL; - -/** - * The URL scheme used to set up Durable Deep Link service. - */ -@property(nonatomic, copy, nullable) NSString *deepLinkURLScheme; - -/** - * The Google Cloud Storage bucket name, e.g. @"abc-xyz-123.storage.firebase.com". - */ -@property(nonatomic, copy, nullable) NSString *storageBucket; - -/** - * The App Group identifier to share data between the application and the application extensions. - * The App Group must be configured in the application and on the Apple Developer Portal. Default - * value `nil`. - */ -@property(nonatomic, copy, nullable) NSString *appGroupID; - -/** - * Initializes a customized instance of FIROptions from the file at the given plist file path. This - * will read the file synchronously from disk. - * For example, - * NSString *filePath = - * [[NSBundle mainBundle] pathForResource:@"GoogleService-Info" ofType:@"plist"]; - * FIROptions *options = [[FIROptions alloc] initWithContentsOfFile:filePath]; - * Returns nil if the plist file does not exist or is invalid. - */ -- (nullable instancetype)initWithContentsOfFile:(NSString *)plistPath; - -/** - * Initializes a customized instance of FIROptions with required fields. Use the mutable properties - * to modify fields for configuring specific services. - */ -// clang-format off -- (instancetype)initWithGoogleAppID:(NSString *)googleAppID - GCMSenderID:(NSString *)GCMSenderID - NS_SWIFT_NAME(init(googleAppID:gcmSenderID:)); -// clang-format on - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Public/FirebaseCore.h b/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Public/FirebaseCore.h deleted file mode 100644 index 95119aed92..0000000000 --- a/iphone/Maps/Pods/FirebaseCore/FirebaseCore/Sources/Public/FirebaseCore.h +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIRApp.h" -#import "FIRConfiguration.h" -#import "FIRLoggerLevel.h" -#import "FIROptions.h" diff --git a/iphone/Maps/Pods/FirebaseCore/LICENSE b/iphone/Maps/Pods/FirebaseCore/LICENSE deleted file mode 100644 index d645695673..0000000000 --- a/iphone/Maps/Pods/FirebaseCore/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/iphone/Maps/Pods/FirebaseCore/README.md b/iphone/Maps/Pods/FirebaseCore/README.md deleted file mode 100644 index a396a214d9..0000000000 --- a/iphone/Maps/Pods/FirebaseCore/README.md +++ /dev/null @@ -1,307 +0,0 @@ -[![Version](https://img.shields.io/cocoapods/v/Firebase.svg?style=flat)](https://cocoapods.org/pods/Firebase) -[![License](https://img.shields.io/cocoapods/l/Firebase.svg?style=flat)](https://cocoapods.org/pods/Firebase) -[![Platform](https://img.shields.io/cocoapods/p/Firebase.svg?style=flat)](https://cocoapods.org/pods/Firebase) - -[![Actions Status][gh-abtesting-badge]][gh-actions] -[![Actions Status][gh-auth-badge]][gh-actions] -[![Actions Status][gh-core-badge]][gh-actions] -[![Actions Status][gh-crashlytics-badge]][gh-actions] -[![Actions Status][gh-database-badge]][gh-actions] -[![Actions Status][gh-datatransport-badge]][gh-actions] -[![Actions Status][gh-dynamiclinks-badge]][gh-actions] -[![Actions Status][gh-firebasepod-badge]][gh-actions] -[![Actions Status][gh-firestore-badge]][gh-actions] -[![Actions Status][gh-functions-badge]][gh-actions] -[![Actions Status][gh-inappmessaging-badge]][gh-actions] -[![Actions Status][gh-interop-badge]][gh-actions] -[![Actions Status][gh-messaging-badge]][gh-actions] -[![Actions Status][gh-remoteconfig-badge]][gh-actions] -[![Actions Status][gh-storage-badge]][gh-actions] -[![Actions Status][gh-symbolcollision-badge]][gh-actions] -[![Actions Status][gh-zip-badge]][gh-actions] -[![Travis](https://travis-ci.org/firebase/firebase-ios-sdk.svg?branch=master)](https://travis-ci.org/firebase/firebase-ios-sdk) - -# Firebase Apple Open Source Development - -This repository contains all Apple platform Firebase SDK source except FirebaseAnalytics, -FirebasePerformance, and FirebaseML. - -The repository also includes GoogleUtilities source. The -[GoogleUtilities](GoogleUtilities/README.md) pod is -a set of utilities used by Firebase and other Google products. - -Firebase is an app development platform with tools to help you build, grow and -monetize your app. More information about Firebase can be found at -[https://firebase.google.com](https://firebase.google.com). - -## Installation - -See the three subsections for details about three different installation methods. -1. [Standard pod install](README.md#standard-pod-install) -1. [Installing from the GitHub repo](README.md#installing-from-github) -1. [Experimental Carthage](README.md#carthage-ios-only) - -### Standard pod install - -Go to -[https://firebase.google.com/docs/ios/setup](https://firebase.google.com/docs/ios/setup). - -### Installing from GitHub - -For releases starting with 5.0.0, the source for each release is also deployed -to CocoaPods master and available via standard -[CocoaPods Podfile syntax](https://guides.cocoapods.org/syntax/podfile.html#pod). - -These instructions can be used to access the Firebase repo at other branches, -tags, or commits. - -#### Background - -See -[the Podfile Syntax Reference](https://guides.cocoapods.org/syntax/podfile.html#pod) -for instructions and options about overriding pod source locations. - -#### Accessing Firebase Source Snapshots - -All of the official releases are tagged in this repo and available via CocoaPods. To access a local -source snapshot or unreleased branch, use Podfile directives like the following: - -To access FirebaseFirestore via a branch: -``` -pod 'FirebaseCore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master' -pod 'FirebaseFirestore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master' -``` - -To access FirebaseMessaging via a checked out version of the firebase-ios-sdk repo do: - -``` -pod 'FirebaseCore', :path => '/path/to/firebase-ios-sdk' -pod 'FirebaseMessaging', :path => '/path/to/firebase-ios-sdk' -``` - -### Carthage (iOS only) - -Instructions for the experimental Carthage distribution are at -[Carthage](Carthage.md). - -### Rome - -Instructions for installing binary frameworks via -[Rome](https://github.com/CocoaPods/Rome) are at [Rome](Rome.md). - -### Using Firebase from a Framework or a library - -[Using Firebase from a Framework or a library](docs/firebase_in_libraries.md) - -## Development - -To develop Firebase software in this repository, ensure that you have at least -the following software: - - * Xcode 10.1 (or later) - * CocoaPods 1.7.2 (or later) - * [CocoaPods generate](https://github.com/square/cocoapods-generate) - -For the pod that you want to develop: - -`pod gen Firebase{name here}.podspec --local-sources=./ --auto-open --platforms=ios` - -Note: If the CocoaPods cache is out of date, you may need to run -`pod repo update` before the `pod gen` command. - -Note: Set the `--platforms` option to `macos` or `tvos` to develop/test for -those platforms. Since 10.2, Xcode does not properly handle multi-platform -CocoaPods workspaces. - -Firestore has a self contained Xcode project. See -[Firestore/README.md](Firestore/README.md). - -### Development for Catalyst -* `pod gen {name here}.podspec --local-sources=./ --auto-open --platforms=ios` -* Check the Mac box in the App-iOS Build Settings -* Sign the App in the Settings Signing & Capabilities tab -* Click Pods in the Project Manager -* Add Signing to the iOS host app and unit test targets -* Select the Unit-unit scheme -* Run it to build and test - -### Adding a New Firebase Pod - -See [AddNewPod.md](AddNewPod.md). - -### Code Formatting - -To ensure that the code is formatted consistently, run the script -[./scripts/style.sh](https://github.com/firebase/firebase-ios-sdk/blob/master/scripts/style.sh) -before creating a PR. - -Travis will verify that any code changes are done in a style compliant way. Install -`clang-format` and `swiftformat`. -These commands will get the right versions: - -``` -brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/c6f1cbd/Formula/clang-format.rb -brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/c13eda8/Formula/swiftformat.rb -``` - -Note: if you already have a newer version of these installed you may need to -`brew switch` to this version. - -To update this section, find the versions of clang-format and swiftformat.rb to -match the versions in the CI failure logs -[here](https://github.com/Homebrew/homebrew-core/tree/master/Formula). - -### Running Unit Tests - -Select a scheme and press Command-u to build a component and run its unit tests. - -#### Viewing Code Coverage (Deprecated) - -First, make sure that [xcov](https://github.com/nakiostudio/xcov) is installed with `gem install xcov`. - -After running the `AllUnitTests_iOS` scheme in Xcode, execute -`xcov --workspace Firebase.xcworkspace --scheme AllUnitTests_iOS --output_directory xcov_output` -at Example/ in the terminal. This will aggregate the coverage, and you can run `open xcov_output/index.html` to see the results. - -### Running Sample Apps -In order to run the sample apps and integration tests, you'll need valid -`GoogleService-Info.plist` files for those samples. The Firebase Xcode project contains dummy plist -files without real values, but can be replaced with real plist files. To get your own -`GoogleService-Info.plist` files: - -1. Go to the [Firebase Console](https://console.firebase.google.com/) -2. Create a new Firebase project, if you don't already have one -3. For each sample app you want to test, create a new Firebase app with the sample app's bundle -identifier (e.g. `com.google.Database-Example`) -4. Download the resulting `GoogleService-Info.plist` and replace the appropriate dummy plist file -(e.g. in [Example/Database/App/](Example/Database/App/)); - -Some sample apps like Firebase Messaging ([Example/Messaging/App](Example/Messaging/App)) require -special Apple capabilities, and you will have to change the sample app to use a unique bundle -identifier that you can control in your own Apple Developer account. - -## Specific Component Instructions -See the sections below for any special instructions for those components. - -### Firebase Auth - -If you're doing specific Firebase Auth development, see -[the Auth Sample README](FirebaseAuth/Tests/Sample/README.md) for instructions about -building and running the FirebaseAuth pod along with various samples and tests. - -### Firebase Database - -The Firebase Database Integration tests can be run against a locally running Database Emulator -or against a production instance. - -To run against a local emulator instance, invoke `./scripts/run_database_emulator.sh start` before -running the integration test. - -To run against a production instance, provide a valid GoogleServices-Info.plist and copy it to -`Example/Database/App/GoogleService-Info.plist`. Your Security Rule must be set to -[public](https://firebase.google.com/docs/database/security/quickstart) while your tests are -running. - -### Firebase Storage - -To run the Storage Integration tests, follow the instructions in -[FIRStorageIntegrationTests.m](FirebaseStorage/Tests/Integration/FIRStorageIntegrationTests.m). - -#### Push Notifications - -Push notifications can only be delivered to specially provisioned App IDs in the developer portal. -In order to actually test receiving push notifications, you will need to: - -1. Change the bundle identifier of the sample app to something you own in your Apple Developer -account, and enable that App ID for push notifications. -2. You'll also need to -[upload your APNs Provider Authentication Key or certificate to the Firebase Console](https://firebase.google.com/docs/cloud-messaging/ios/certs) -at **Project Settings > Cloud Messaging > [Your Firebase App]**. -3. Ensure your iOS device is added to your Apple Developer portal as a test device. - -#### iOS Simulator - -The iOS Simulator cannot register for remote notifications, and will not receive push notifications. -In order to receive push notifications, you'll have to follow the steps above and run the app on a -physical device. - -## Community Supported Efforts - -We've seen an amazing amount of interest and contributions to improve the Firebase SDKs, and we are -very grateful! We'd like to empower as many developers as we can to be able to use Firebase and -participate in the Firebase community. - -### tvOS, macOS, watchOS and Catalyst -Thanks to contributions from the community, many of Firebase SDKs now compile, run unit tests, and work on -tvOS, macOS, watchOS and Catalyst. - -For tvOS, checkout the [Sample](Example/tvOSSample). -For watchOS, currently only Messaging and Storage (and their dependencies) have limited support. Checkout the -[Independent Watch App Sample](Example/watchOSSample). - -Keep in mind that macOS, tvOS, watchOS and Catalyst are not officially supported by Firebase, and this -repository is actively developed primarily for iOS. While we can catch basic unit test issues with -Travis, there may be some changes where the SDK no longer works as expected on macOS, tvOS or watchOS. If you -encounter this, please [file an issue](https://github.com/firebase/firebase-ios-sdk/issues). - -During app setup in the console, you may get to a step that mentions something like "Checking if the app -has communicated with our servers". This relies on Analytics and will not work on macOS/tvOS/watchOS/Catalyst. -**It's safe to ignore the message and continue**, the rest of the SDKs will work as expected. - -To install, add a subset of the following to the Podfile: - -``` -pod 'Firebase/ABTesting' # No watchOS support yet -pod 'Firebase/Auth' # No watchOS support yet -pod 'Firebase/Crashlytics' # No watchOS support yet -pod 'Firebase/Database' # No watchOS support yet -pod 'Firebase/Firestore' # No watchOS support yet -pod 'Firebase/Functions' # No watchOS support yet -pod 'Firebase/Messaging' -pod 'Firebase/RemoteConfig' # No watchOS support yet -pod 'Firebase/Storage' -``` - -#### Additional Catalyst Notes - -* FirebaseAuth and FirebaseMessaging require adding `Keychain Sharing Capability` -to Build Settings. -* FirebaseFirestore requires signing the -[gRPC Resource target](https://github.com/firebase/firebase-ios-sdk/issues/3500#issuecomment-518741681). - -## Roadmap - -See [Roadmap](ROADMAP.md) for more about the Firebase iOS SDK Open Source -plans and directions. - -## Contributing - -See [Contributing](CONTRIBUTING.md) for more information on contributing to the Firebase -iOS SDK. - -## License - -The contents of this repository is licensed under the -[Apache License, version 2.0](http://www.apache.org/licenses/LICENSE-2.0). - -Your use of Firebase is governed by the -[Terms of Service for Firebase Services](https://firebase.google.com/terms/). - -[gh-actions]: https://github.com/firebase/firebase-ios-sdk/actions -[gh-abtesting-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/abtesting/badge.svg -[gh-auth-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/auth/badge.svg -[gh-core-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/core/badge.svg -[gh-crashlytics-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/crashlytics/badge.svg -[gh-database-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/database/badge.svg -[gh-datatransport-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/datatransport/badge.svg -[gh-dynamiclinks-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/dynamiclinks/badge.svg -[gh-firebasepod-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/firebasepod/badge.svg -[gh-firestore-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/firestore/badge.svg -[gh-functions-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/functions/badge.svg -[gh-inappmessaging-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/inappmessaging/badge.svg -[gh-interop-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/interop/badge.svg -[gh-messaging-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/messaging/badge.svg -[gh-remoteconfig-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/remoteconfig/badge.svg -[gh-storage-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/storage/badge.svg -[gh-symbolcollision-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/symbolcollision/badge.svg -[gh-zip-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/zip/badge.svg diff --git a/iphone/Maps/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/FIRCoreDiagnostics.m b/iphone/Maps/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/FIRCoreDiagnostics.m deleted file mode 100644 index 2db7db8398..0000000000 --- a/iphone/Maps/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/FIRCoreDiagnostics.m +++ /dev/null @@ -1,647 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import -#include - -#import -#import -#import -#import - -#import -#import -#import - -#import "Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsData.h" -#import "Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsInterop.h" - -#import -#import -#import - -#import "FIRCDLibrary/Protogen/nanopb/firebasecore.nanopb.h" - -/** The logger service string to use when printing to the console. */ -static GULLoggerService kFIRCoreDiagnostics = @"[FirebaseCoreDiagnostics/FIRCoreDiagnostics]"; - -#ifdef FIREBASE_BUILD_ZIP_FILE -static BOOL kUsingZipFile = YES; -#else // FIREBASE_BUILD_ZIP_FILE -static BOOL kUsingZipFile = NO; -#endif // FIREBASE_BUILD_ZIP_FILE - -#ifdef FIREBASE_BUILD_CARTHAGE -#define kDeploymentType logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_CARTHAGE -#elif FIREBASE_BUILD_ZIP_FILE -#define kDeploymentType logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_ZIP_FILE -#else -#define kDeploymentType logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_COCOAPODS -#endif - -static NSString *const kFIRServiceMLVisionOnDeviceAutoML = @"MLVisionOnDeviceAutoML"; -static NSString *const kFIRServiceMLVisionOnDeviceFace = @"MLVisionOnDeviceFace"; -static NSString *const kFIRServiceMLVisionOnDeviceBarcode = @"MLVisionOnDeviceBarcode"; -static NSString *const kFIRServiceMLVisionOnDeviceText = @"MLVisionOnDeviceText"; -static NSString *const kFIRServiceMLVisionOnDeviceLabel = @"MLVisionOnDeviceLabel"; -static NSString *const kFIRServiceMLVisionOnDeviceObjectDetection = - @"MLVisionOnDeviceObjectDetection"; -static NSString *const kFIRServiceMLModelInterpreter = @"MLModelInterpreter"; - -static NSString *const kFIRServiceAdMob = @"AdMob"; -static NSString *const kFIRServiceAuth = @"Auth"; -static NSString *const kFIRServiceAuthUI = @"AuthUI"; -static NSString *const kFIRServiceCrash = @"Crash"; -static NSString *const kFIRServiceDatabase = @"Database"; -static NSString *const kFIRServiceDynamicLinks = @"DynamicLinks"; -static NSString *const kFIRServiceFirestore = @"Firestore"; -static NSString *const kFIRServiceFunctions = @"Functions"; -static NSString *const kFIRServiceIAM = @"InAppMessaging"; -static NSString *const kFIRServiceInstanceID = @"InstanceID"; -static NSString *const kFIRServiceInvites = @"Invites"; -static NSString *const kFIRServiceMessaging = @"Messaging"; -static NSString *const kFIRServiceMeasurement = @"Measurement"; -static NSString *const kFIRServicePerformance = @"Performance"; -static NSString *const kFIRServiceRemoteConfig = @"RemoteConfig"; -static NSString *const kFIRServiceStorage = @"Storage"; -static NSString *const kGGLServiceAnalytics = @"Analytics"; -static NSString *const kGGLServiceSignIn = @"SignIn"; -static NSString *const kFIRAppDiagnosticsConfigurationTypeKey = - @"FIRAppDiagnosticsConfigurationTypeKey"; -static NSString *const kFIRAppDiagnosticsFIRAppKey = @"FIRAppDiagnosticsFIRAppKey"; -static NSString *const kFIRAppDiagnosticsSDKNameKey = @"FIRAppDiagnosticsSDKNameKey"; -static NSString *const kFIRAppDiagnosticsSDKVersionKey = @"FIRAppDiagnosticsSDKVersionKey"; -static NSString *const kFIRCoreDiagnosticsHeartbeatTag = @"FIRCoreDiagnostics"; - -/** - * The file name to the recent heartbeat date. - */ -NSString *const kFIRCoreDiagnosticsHeartbeatDateFileName = @"FIREBASE_DIAGNOSTICS_HEARTBEAT_DATE"; - -/** - * @note This should implement the GDTCOREventDataObject protocol, but can't because of - * weak-linking. - */ -@interface FIRCoreDiagnosticsLog : NSObject - -/** The config that will be converted to proto bytes. */ -@property(nonatomic) logs_proto_mobilesdk_ios_ICoreConfiguration config; - -@end - -@implementation FIRCoreDiagnosticsLog - -- (instancetype)initWithConfig:(logs_proto_mobilesdk_ios_ICoreConfiguration)config { - self = [super init]; - if (self) { - _config = config; - } - return self; -} - -// Provided and required by the GDTCOREventDataObject protocol. -- (NSData *)transportBytes { - pb_ostream_t sizestream = PB_OSTREAM_SIZING; - - // Encode 1 time to determine the size. - if (!pb_encode(&sizestream, logs_proto_mobilesdk_ios_ICoreConfiguration_fields, &_config)) { - GDTCORLogError(GDTCORMCETransportBytesError, @"Error in nanopb encoding for size: %s", - PB_GET_ERROR(&sizestream)); - } - - // Encode a 2nd time to actually get the bytes from it. - size_t bufferSize = sizestream.bytes_written; - CFMutableDataRef dataRef = CFDataCreateMutable(CFAllocatorGetDefault(), bufferSize); - CFDataSetLength(dataRef, bufferSize); - pb_ostream_t ostream = pb_ostream_from_buffer((void *)CFDataGetBytePtr(dataRef), bufferSize); - if (!pb_encode(&ostream, logs_proto_mobilesdk_ios_ICoreConfiguration_fields, &_config)) { - GDTCORLogError(GDTCORMCETransportBytesError, @"Error in nanopb encoding for bytes: %s", - PB_GET_ERROR(&ostream)); - } - CFDataSetLength(dataRef, ostream.bytes_written); - - return CFBridgingRelease(dataRef); -} - -- (void)dealloc { - pb_release(logs_proto_mobilesdk_ios_ICoreConfiguration_fields, &_config); -} - -@end - -NS_ASSUME_NONNULL_BEGIN - -/** This class produces a protobuf containing diagnostics and usage data to be logged. */ -@interface FIRCoreDiagnostics : NSObject - -/** The queue on which all diagnostics collection will occur. */ -@property(nonatomic, readonly) dispatch_queue_t diagnosticsQueue; - -/** The transport object used to send data. */ -@property(nonatomic, readonly) GDTCORTransport *transport; - -/** The storage to store the date of the last sent heartbeat. */ -@property(nonatomic, readonly) GULHeartbeatDateStorage *heartbeatDateStorage; - -@end - -NS_ASSUME_NONNULL_END - -@implementation FIRCoreDiagnostics - -+ (instancetype)sharedInstance { - static FIRCoreDiagnostics *sharedInstance; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - sharedInstance = [[FIRCoreDiagnostics alloc] init]; - }); - return sharedInstance; -} - -- (instancetype)init { - GDTCORTransport *transport = [[GDTCORTransport alloc] initWithMappingID:@"137" - transformers:nil - target:kGDTCORTargetFLL]; - - GULHeartbeatDateStorage *dateStorage = - [[GULHeartbeatDateStorage alloc] initWithFileName:kFIRCoreDiagnosticsHeartbeatDateFileName]; - - return [self initWithTransport:transport heartbeatDateStorage:dateStorage]; -} - -/** Initializer for unit tests. - * - * @param transport A `GDTCORTransport` instance which that be used to send event. - * @param heartbeatDateStorage An instanse of date storage to track heartbeat sending. - * @return Returns the initialized `FIRCoreDiagnostics` instance. - */ -- (instancetype)initWithTransport:(GDTCORTransport *)transport - heartbeatDateStorage:(GULHeartbeatDateStorage *)heartbeatDateStorage { - self = [super init]; - if (self) { - _diagnosticsQueue = - dispatch_queue_create("com.google.FIRCoreDiagnostics", DISPATCH_QUEUE_SERIAL); - _transport = transport; - _heartbeatDateStorage = heartbeatDateStorage; - } - return self; -} - -#pragma mark - Metadata helpers - -/** Returns the model of iOS device. Sample platform strings are @"iPhone7,1" for iPhone 6 Plus, - * @"iPhone7,2" for iPhone 6, etc. Refer to the Hardware strings at - * https://en.wikipedia.org/wiki/List_of_iOS_devices - * - * @return The device model as an NSString. - */ -+ (NSString *)deviceModel { - static NSString *deviceModel = nil; - if (deviceModel == nil) { - struct utsname systemInfo; - uname(&systemInfo); - deviceModel = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding]; - } - return deviceModel; -} - -#pragma mark - nanopb helper functions - -/** Callocs a pb_bytes_array and copies the given NSString's bytes into the bytes array. - * - * @note Memory needs to be free manually, through pb_free or pb_release. - * @param string The string to encode as pb_bytes. - */ -pb_bytes_array_t *FIREncodeString(NSString *string) { - NSData *stringBytes = [string dataUsingEncoding:NSUTF8StringEncoding]; - return FIREncodeData(stringBytes); -} - -/** Callocs a pb_bytes_array and copies the given NSData bytes into the bytes array. - * - * @note Memory needs to be free manually, through pb_free or pb_release. - * @param data The data to copy into the new bytes array. - */ -pb_bytes_array_t *FIREncodeData(NSData *data) { - pb_bytes_array_t *pbBytesArray = calloc(1, PB_BYTES_ARRAY_T_ALLOCSIZE(data.length)); - if (pbBytesArray != NULL) { - [data getBytes:pbBytesArray->bytes length:data.length]; - pbBytesArray->size = (pb_size_t)data.length; - } - return pbBytesArray; -} - -/** Maps a service string to the representative nanopb enum. - * - * @param serviceString The SDK service string to convert. - * @return The representative nanopb enum. - */ -logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType FIRMapFromServiceStringToTypeEnum( - NSString *serviceString) { - static NSDictionary *serviceStringToTypeEnum; - if (serviceStringToTypeEnum == nil) { - serviceStringToTypeEnum = @{ - kFIRServiceAdMob : @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ADMOB), - kFIRServiceMessaging : @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_MESSAGING), - kFIRServiceMeasurement : - @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_MEASUREMENT), - kFIRServiceRemoteConfig : - @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_REMOTE_CONFIG), - kFIRServiceDatabase : @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_DATABASE), - kFIRServiceDynamicLinks : - @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_DYNAMIC_LINKS), - kFIRServiceAuth : @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_AUTH), - kFIRServiceAuthUI : @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_AUTH_UI), - kFIRServiceFirestore : @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_FIRESTORE), - kFIRServiceFunctions : @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_FUNCTIONS), - kFIRServicePerformance : - @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_PERFORMANCE), - kFIRServiceStorage : @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_STORAGE), - kFIRServiceMLVisionOnDeviceAutoML : - @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_AUTOML), - kFIRServiceMLVisionOnDeviceFace : - @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_FACE), - kFIRServiceMLVisionOnDeviceBarcode : - @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_BARCODE), - kFIRServiceMLVisionOnDeviceText : - @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_TEXT), - kFIRServiceMLVisionOnDeviceLabel : - @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_LABEL), - kFIRServiceMLVisionOnDeviceObjectDetection : @( - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_OBJECT_DETECTION), - kFIRServiceMLModelInterpreter : - @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_MODEL_INTERPRETER), - kGGLServiceAnalytics : @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ANALYTICS), - kGGLServiceSignIn : @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_SIGN_IN), - kFIRServiceIAM : @(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_IN_APP_MESSAGING), - }; - } - if (serviceStringToTypeEnum[serviceString] != nil) { - return (int32_t)serviceStringToTypeEnum[serviceString].longLongValue; - } - return logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_UNKNOWN_SDK_SERVICE; -} - -#pragma mark - Proto population functions - -/** Populates the given proto with data related to an SDK logDiagnostics call from the - * diagnosticObjects dictionary. - * - * @param config The proto to populate - * @param diagnosticObjects The dictionary of diagnostics objects. - */ -void FIRPopulateProtoWithInfoFromUserInfoParams(logs_proto_mobilesdk_ios_ICoreConfiguration *config, - NSDictionary *diagnosticObjects) { - NSNumber *configurationType = diagnosticObjects[kFIRCDConfigurationTypeKey]; - if (configurationType != nil) { - switch (configurationType.integerValue) { - case logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_CORE: - config->configuration_type = - logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_CORE; - config->has_configuration_type = 1; - break; - case logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_SDK: - config->configuration_type = - logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_SDK; - config->has_configuration_type = 1; - break; - default: - break; - } - } - - NSString *sdkName = diagnosticObjects[kFIRCDSdkNameKey]; - if (sdkName) { - config->sdk_name = FIRMapFromServiceStringToTypeEnum(sdkName); - config->has_sdk_name = 1; - } - - NSString *version = diagnosticObjects[kFIRCDSdkVersionKey]; - if (version) { - config->sdk_version = FIREncodeString(version); - } -} - -/** Populates the given proto with data from the calling FIRApp using the given - * diagnosticObjects dictionary. - * - * @param config The proto to populate - * @param diagnosticObjects The dictionary of diagnostics objects. - */ -void FIRPopulateProtoWithCommonInfoFromApp(logs_proto_mobilesdk_ios_ICoreConfiguration *config, - NSDictionary *diagnosticObjects) { - config->pod_name = logs_proto_mobilesdk_ios_ICoreConfiguration_PodName_FIREBASE; - config->has_pod_name = 1; - - if (!diagnosticObjects[kFIRCDllAppsCountKey]) { - GDTCORLogError(GDTCORMCEGeneralError, @"%@", - @"App count is a required value in the data dict."); - } - config->app_count = (int32_t)[diagnosticObjects[kFIRCDllAppsCountKey] integerValue]; - config->has_app_count = 1; - - NSString *googleAppID = diagnosticObjects[kFIRCDGoogleAppIDKey]; - if (googleAppID.length) { - config->app_id = FIREncodeString(googleAppID); - } - - NSString *bundleID = diagnosticObjects[kFIRCDBundleIDKey]; - if (bundleID.length) { - config->bundle_id = FIREncodeString(bundleID); - } - - NSString *firebaseUserAgent = diagnosticObjects[kFIRCDFirebaseUserAgentKey]; - if (firebaseUserAgent.length) { - config->platform_info = FIREncodeString(firebaseUserAgent); - } - - NSNumber *usingOptionsFromDefaultPlist = diagnosticObjects[kFIRCDUsingOptionsFromDefaultPlistKey]; - if (usingOptionsFromDefaultPlist != nil) { - config->use_default_app = [usingOptionsFromDefaultPlist boolValue]; - config->has_use_default_app = 1; - } - - NSString *libraryVersionID = diagnosticObjects[kFIRCDLibraryVersionIDKey]; - if (libraryVersionID) { - config->icore_version = FIREncodeString(libraryVersionID); - } - - NSString *deviceModel = [FIRCoreDiagnostics deviceModel]; - if (deviceModel.length) { - config->device_model = FIREncodeString(deviceModel); - } - - NSString *osVersion = [GULAppEnvironmentUtil systemVersion]; - if (osVersion.length) { - config->os_version = FIREncodeString(osVersion); - } - - config->using_zip_file = kUsingZipFile; - config->has_using_zip_file = 1; - config->deployment_type = kDeploymentType; - config->has_deployment_type = 1; - config->deployed_in_app_store = [GULAppEnvironmentUtil isFromAppStore]; - config->has_deployed_in_app_store = 1; -} - -/** Populates the given proto with installed services data. - * - * @param config The proto to populate - */ -void FIRPopulateProtoWithInstalledServices(logs_proto_mobilesdk_ios_ICoreConfiguration *config) { - NSMutableArray *sdkServiceInstalledArray = [NSMutableArray array]; - - // AdMob - if (NSClassFromString(@"GADBannerView") != nil) { - [sdkServiceInstalledArray addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceAdMob))]; - } - // CloudMessaging - if (NSClassFromString(@"FIRMessaging") != nil) { - [sdkServiceInstalledArray addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceMessaging))]; - } - // RemoteConfig - if (NSClassFromString(@"FIRRemoteConfig") != nil) { - [sdkServiceInstalledArray - addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceRemoteConfig))]; - } - // Measurement/Analtyics - if (NSClassFromString(@"FIRAnalytics") != nil) { - [sdkServiceInstalledArray - addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceMeasurement))]; - } - // ML Vision On Device AutoML. - if (NSClassFromString(@"FIRVisionOnDeviceAutoMLImageLabelerOptions") != nil) { - [sdkServiceInstalledArray - addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceMLVisionOnDeviceAutoML))]; - } - // ML Vision On Device Face. - if (NSClassFromString(@"FIRVisionFaceDetector") != nil && - NSClassFromString(@"GMVFaceDetector") != nil) { - [sdkServiceInstalledArray - addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceMLVisionOnDeviceFace))]; - } - // ML Vision On Device Barcode. - if (NSClassFromString(@"FIRVisionBarcodeDetector") != nil && - NSClassFromString(@"GMVBarcodeDetector") != nil) { - [sdkServiceInstalledArray - addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceMLVisionOnDeviceBarcode))]; - } - // ML Vision On Device Text. - if (NSClassFromString(@"FIRVisionTextDetector") != nil && - NSClassFromString(@"GMVTextDetector") != nil) { - [sdkServiceInstalledArray - addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceMLVisionOnDeviceText))]; - } - // ML Vision On Device Image Label. - if (NSClassFromString(@"FIRVisionLabelDetector") != nil && - NSClassFromString(@"GMVLabelDetector") != nil) { - [sdkServiceInstalledArray - addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceMLVisionOnDeviceLabel))]; - } - // ML Vision On Device Object. - if (NSClassFromString(@"FIRVisionObjectDetector") != nil) { - [sdkServiceInstalledArray - addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceMLVisionOnDeviceObjectDetection))]; - } - // ML Model Interpreter - if (NSClassFromString(@"FIRCustomModelInterpreter") != nil) { - [sdkServiceInstalledArray - addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceMLModelInterpreter))]; - } - // Database - if (NSClassFromString(@"FIRDatabase") != nil) { - [sdkServiceInstalledArray addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceDatabase))]; - } - // DynamicDeepLink - if (NSClassFromString(@"FIRDynamicLinks") != nil) { - [sdkServiceInstalledArray - addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceDynamicLinks))]; - } - // Auth - if (NSClassFromString(@"FIRAuth") != nil) { - [sdkServiceInstalledArray addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceAuth))]; - } - // AuthUI - if (NSClassFromString(@"FUIAuth") != nil) { - [sdkServiceInstalledArray addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceAuthUI))]; - } - // Firestore - if (NSClassFromString(@"FIRFirestore") != nil) { - [sdkServiceInstalledArray addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceFirestore))]; - } - // Functions - if (NSClassFromString(@"FIRFunctions") != nil) { - [sdkServiceInstalledArray addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceFunctions))]; - } - // Performance - if (NSClassFromString(@"FIRPerformance") != nil) { - [sdkServiceInstalledArray - addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServicePerformance))]; - } - // Storage - if (NSClassFromString(@"FIRStorage") != nil) { - [sdkServiceInstalledArray addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceStorage))]; - } - // SignIn via Google pod - if (NSClassFromString(@"GIDSignIn") != nil && NSClassFromString(@"GGLContext") != nil) { - [sdkServiceInstalledArray addObject:@(FIRMapFromServiceStringToTypeEnum(kGGLServiceSignIn))]; - } - // Analytics via Google pod - if (NSClassFromString(@"GAI") != nil && NSClassFromString(@"GGLContext") != nil) { - [sdkServiceInstalledArray addObject:@(FIRMapFromServiceStringToTypeEnum(kGGLServiceAnalytics))]; - } - - // In-App Messaging - if (NSClassFromString(@"FIRInAppMessaging") != nil) { - [sdkServiceInstalledArray addObject:@(FIRMapFromServiceStringToTypeEnum(kFIRServiceIAM))]; - } - - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType *servicesInstalled = - calloc(sdkServiceInstalledArray.count, - sizeof(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType)); - if (servicesInstalled == NULL) { - return; - } - for (NSUInteger i = 0; i < sdkServiceInstalledArray.count; i++) { - NSNumber *typeEnum = sdkServiceInstalledArray[i]; - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType serviceType = - (int32_t)typeEnum.integerValue; - servicesInstalled[i] = serviceType; - } - - config->sdk_service_installed = servicesInstalled; - config->sdk_service_installed_count = (int32_t)sdkServiceInstalledArray.count; -} - -/** Populates the proto with the number of linked frameworks. - * - * @param config The proto to populate. - */ -void FIRPopulateProtoWithNumberOfLinkedFrameworks( - logs_proto_mobilesdk_ios_ICoreConfiguration *config) { - int numFrameworks = -1; // Subtract the app binary itself. - unsigned int numImages; - const char **imageNames = objc_copyImageNames(&numImages); - for (unsigned int i = 0; i < numImages; i++) { - NSString *imageName = [NSString stringWithUTF8String:imageNames[i]]; - if ([imageName rangeOfString:@"System/Library"].length != 0 // Apple .frameworks - || [imageName rangeOfString:@"Developer/Library"].length != 0 // Xcode debug .frameworks - || [imageName rangeOfString:@"usr/lib"].length != 0) { // Public .dylibs - continue; - } - numFrameworks++; - } - free(imageNames); - config->dynamic_framework_count = numFrameworks; - config->has_dynamic_framework_count = 1; -} - -/** Populates the proto with Info.plist values. - * - * @param config The proto to populate. - */ -void FIRPopulateProtoWithInfoPlistValues(logs_proto_mobilesdk_ios_ICoreConfiguration *config) { - NSDictionary *info = [[NSBundle mainBundle] infoDictionary]; - - NSString *xcodeVersion = info[@"DTXcodeBuild"] ?: @""; - NSString *sdkVersion = info[@"DTSDKBuild"] ?: @""; - NSString *combinedVersions = [NSString stringWithFormat:@"%@-%@", xcodeVersion, sdkVersion]; - config->apple_framework_version = FIREncodeString(combinedVersions); - - NSString *minVersion = info[@"MinimumOSVersion"]; - if (minVersion) { - config->min_supported_ios_version = FIREncodeString(minVersion); - } - - // Apps can turn off swizzling in the Info.plist, check if they've explicitly set the value and - // report it. It's enabled by default. - NSNumber *appDelegateSwizzledNum = info[@"FirebaseAppDelegateProxyEnabled"]; - BOOL appDelegateSwizzled = YES; - if ([appDelegateSwizzledNum isKindOfClass:[NSNumber class]]) { - appDelegateSwizzled = [appDelegateSwizzledNum boolValue]; - } - config->swizzling_enabled = appDelegateSwizzled; - config->has_swizzling_enabled = 1; -} - -#pragma mark - FIRCoreDiagnosticsInterop - -+ (void)sendDiagnosticsData:(nonnull id)diagnosticsData { - FIRCoreDiagnostics *diagnostics = [FIRCoreDiagnostics sharedInstance]; - [diagnostics sendDiagnosticsData:diagnosticsData]; -} - -- (void)sendDiagnosticsData:(nonnull id)diagnosticsData { - dispatch_async(self.diagnosticsQueue, ^{ - NSDictionary *diagnosticObjects = diagnosticsData.diagnosticObjects; - NSNumber *isDataCollectionDefaultEnabled = - diagnosticObjects[kFIRCDIsDataCollectionDefaultEnabledKey]; - if (isDataCollectionDefaultEnabled && ![isDataCollectionDefaultEnabled boolValue]) { - return; - } - - // Create the proto. - logs_proto_mobilesdk_ios_ICoreConfiguration icore_config = - logs_proto_mobilesdk_ios_ICoreConfiguration_init_default; - - icore_config.using_gdt = 1; - icore_config.has_using_gdt = 1; - - // Populate the proto with information. - FIRPopulateProtoWithInfoFromUserInfoParams(&icore_config, diagnosticObjects); - FIRPopulateProtoWithCommonInfoFromApp(&icore_config, diagnosticObjects); - FIRPopulateProtoWithInstalledServices(&icore_config); - FIRPopulateProtoWithNumberOfLinkedFrameworks(&icore_config); - FIRPopulateProtoWithInfoPlistValues(&icore_config); - [self setHeartbeatFlagIfNeededToConfig:&icore_config]; - - // This log object is capable of converting the proto to bytes. - FIRCoreDiagnosticsLog *log = [[FIRCoreDiagnosticsLog alloc] initWithConfig:icore_config]; - - // Send the log as a telemetry event. - GDTCOREvent *event = [self.transport eventForTransport]; - event.dataObject = (id)log; - [self.transport sendTelemetryEvent:event]; - }); -} - -#pragma mark - Heartbeat - -- (void)setHeartbeatFlagIfNeededToConfig:(logs_proto_mobilesdk_ios_ICoreConfiguration *)config { - // Check if need to send a heartbeat. - NSDate *currentDate = [NSDate date]; - NSDate *lastCheckin = - [self.heartbeatDateStorage heartbeatDateForTag:kFIRCoreDiagnosticsHeartbeatTag]; - if (lastCheckin) { - // Ensure the previous checkin was on a different date in the past. - if ([self isDate:currentDate inSameDayOrBeforeThan:lastCheckin]) { - return; - } - } - - // Update heartbeat sent date. - [self.heartbeatDateStorage setHearbeatDate:currentDate forTag:kFIRCoreDiagnosticsHeartbeatTag]; - // Set the flag. - config->sdk_name = logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ICORE; - config->has_sdk_name = 1; -} - -- (BOOL)isDate:(NSDate *)date1 inSameDayOrBeforeThan:(NSDate *)date2 { - return [[NSCalendar currentCalendar] isDate:date1 inSameDayAsDate:date2] || - [date1 compare:date2] == NSOrderedAscending; -} - -@end diff --git a/iphone/Maps/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/Protogen/nanopb/firebasecore.nanopb.c b/iphone/Maps/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/Protogen/nanopb/firebasecore.nanopb.c deleted file mode 100644 index 0bdb27e282..0000000000 --- a/iphone/Maps/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/Protogen/nanopb/firebasecore.nanopb.c +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* Automatically generated nanopb constant definitions */ -/* Generated by nanopb-0.3.9.5 */ - -#include "firebasecore.nanopb.h" - -/* @@protoc_insertion_point(includes) */ -#if PB_PROTO_HEADER_VERSION != 30 -#error Regenerate this file with the current version of nanopb generator. -#endif - - - -const pb_field_t logs_proto_mobilesdk_ios_ICoreConfiguration_fields[22] = { - PB_FIELD( 1, UENUM , OPTIONAL, STATIC , FIRST, logs_proto_mobilesdk_ios_ICoreConfiguration, configuration_type, configuration_type, 0), - PB_FIELD( 7, UENUM , REPEATED, POINTER , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, sdk_service_installed, configuration_type, 0), - PB_FIELD( 9, BYTES , OPTIONAL, POINTER , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, device_model, sdk_service_installed, 0), - PB_FIELD( 10, BYTES , OPTIONAL, POINTER , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, app_id, device_model, 0), - PB_FIELD( 12, BYTES , OPTIONAL, POINTER , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, bundle_id, app_id, 0), - PB_FIELD( 16, UENUM , OPTIONAL, STATIC , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, pod_name, bundle_id, 0), - PB_FIELD( 18, BYTES , OPTIONAL, POINTER , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, icore_version, pod_name, 0), - PB_FIELD( 19, BYTES , OPTIONAL, POINTER , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, sdk_version, icore_version, 0), - PB_FIELD( 20, UENUM , OPTIONAL, STATIC , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, sdk_name, sdk_version, 0), - PB_FIELD( 21, INT32 , OPTIONAL, STATIC , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, app_count, sdk_name, 0), - PB_FIELD( 22, BYTES , OPTIONAL, POINTER , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, os_version, app_count, 0), - PB_FIELD( 24, BYTES , OPTIONAL, POINTER , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, min_supported_ios_version, os_version, 0), - PB_FIELD( 25, BOOL , OPTIONAL, STATIC , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, use_default_app, min_supported_ios_version, 0), - PB_FIELD( 26, BOOL , OPTIONAL, STATIC , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, deployed_in_app_store, use_default_app, 0), - PB_FIELD( 27, INT32 , OPTIONAL, STATIC , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, dynamic_framework_count, deployed_in_app_store, 0), - PB_FIELD( 28, BYTES , OPTIONAL, POINTER , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, apple_framework_version, dynamic_framework_count, 0), - PB_FIELD( 29, BOOL , OPTIONAL, STATIC , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, using_zip_file, apple_framework_version, 0), - PB_FIELD( 30, UENUM , OPTIONAL, STATIC , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, deployment_type, using_zip_file, 0), - PB_FIELD( 31, BYTES , OPTIONAL, POINTER , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, platform_info, deployment_type, 0), - PB_FIELD( 33, BOOL , OPTIONAL, STATIC , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, swizzling_enabled, platform_info, 0), - PB_FIELD( 36, BOOL , OPTIONAL, STATIC , OTHER, logs_proto_mobilesdk_ios_ICoreConfiguration, using_gdt, swizzling_enabled, 0), - PB_LAST_FIELD -}; - - - - - - - -/* @@protoc_insertion_point(eof) */ diff --git a/iphone/Maps/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/Protogen/nanopb/firebasecore.nanopb.h b/iphone/Maps/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/Protogen/nanopb/firebasecore.nanopb.h deleted file mode 100644 index 59d1b3b0d8..0000000000 --- a/iphone/Maps/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/Protogen/nanopb/firebasecore.nanopb.h +++ /dev/null @@ -1,193 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* Automatically generated nanopb header */ -/* Generated by nanopb-0.3.9.5 */ - -#ifndef PB_LOGS_PROTO_MOBILESDK_IOS_FIREBASECORE_NANOPB_H_INCLUDED -#define PB_LOGS_PROTO_MOBILESDK_IOS_FIREBASECORE_NANOPB_H_INCLUDED -#include - -/* @@protoc_insertion_point(includes) */ -#if PB_PROTO_HEADER_VERSION != 30 -#error Regenerate this file with the current version of nanopb generator. -#endif - - -/* Enum definitions */ -typedef enum _logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType { - logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_UNKNOWN_CONFIGURATION_TYPE = 0, - logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_CORE = 1, - logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_SDK = 2 -} logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType; -#define _logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_MIN logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_UNKNOWN_CONFIGURATION_TYPE -#define _logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_MAX logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_SDK -#define _logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_ARRAYSIZE ((logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType)(logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_SDK+1)) - -typedef enum _logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType { - logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType_UNKNOWN_BUILD_TYPE = 0, - logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType_INTERNAL = 1, - logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType_EAP = 2, - logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType_PROD = 3 -} logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType; -#define _logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType_MIN logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType_UNKNOWN_BUILD_TYPE -#define _logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType_MAX logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType_PROD -#define _logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType_ARRAYSIZE ((logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType)(logs_proto_mobilesdk_ios_ICoreConfiguration_BuildType_PROD+1)) - -typedef enum _logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType { - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_UNKNOWN_SDK_SERVICE = 0, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ICORE = 1, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ADMOB = 2, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_APP_INVITE = 3, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_SIGN_IN = 5, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_GCM = 6, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_MAPS = 7, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_SCION = 8, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ANALYTICS = 9, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_APP_INDEXING = 10, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_CONFIG = 11, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_DURABLE_DEEP_LINKS = 12, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_CRASH = 13, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_AUTH = 14, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_DATABASE = 15, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_STORAGE = 16, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_MESSAGING = 17, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_MEASUREMENT = 18, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_REMOTE_CONFIG = 19, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_DYNAMIC_LINKS = 20, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_INVITES = 21, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_AUTH_UI = 22, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_FIRESTORE = 23, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_PERFORMANCE = 24, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_FACE = 26, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_BARCODE = 27, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_TEXT = 28, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_LABEL = 29, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_MODEL_INTERPRETER = 30, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_IN_APP_MESSAGING = 31, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_FUNCTIONS = 32, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_NATURAL_LANGUAGE = 33, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_AUTOML = 34, - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_OBJECT_DETECTION = 35 -} logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType; -#define _logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_MIN logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_UNKNOWN_SDK_SERVICE -#define _logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_MAX logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_OBJECT_DETECTION -#define _logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ARRAYSIZE ((logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType)(logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_ML_VISION_ON_DEVICE_OBJECT_DETECTION+1)) - -typedef enum _logs_proto_mobilesdk_ios_ICoreConfiguration_PodName { - logs_proto_mobilesdk_ios_ICoreConfiguration_PodName_UNKNOWN_POD_NAME = 0, - logs_proto_mobilesdk_ios_ICoreConfiguration_PodName_GOOGLE = 1, - logs_proto_mobilesdk_ios_ICoreConfiguration_PodName_FIREBASE = 2 -} logs_proto_mobilesdk_ios_ICoreConfiguration_PodName; -#define _logs_proto_mobilesdk_ios_ICoreConfiguration_PodName_MIN logs_proto_mobilesdk_ios_ICoreConfiguration_PodName_UNKNOWN_POD_NAME -#define _logs_proto_mobilesdk_ios_ICoreConfiguration_PodName_MAX logs_proto_mobilesdk_ios_ICoreConfiguration_PodName_FIREBASE -#define _logs_proto_mobilesdk_ios_ICoreConfiguration_PodName_ARRAYSIZE ((logs_proto_mobilesdk_ios_ICoreConfiguration_PodName)(logs_proto_mobilesdk_ios_ICoreConfiguration_PodName_FIREBASE+1)) - -typedef enum _logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType { - logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_UNKNOWN = 0, - logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_COCOAPODS = 1, - logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_ZIP_FILE = 2, - logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_CARTHAGE = 3, - logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_SPM = 4 -} logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType; -#define _logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_MIN logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_UNKNOWN -#define _logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_MAX logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_SPM -#define _logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_ARRAYSIZE ((logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType)(logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_SPM+1)) - -/* Struct definitions */ -typedef struct _logs_proto_mobilesdk_ios_ICoreConfiguration { - bool has_configuration_type; - logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType configuration_type; - pb_size_t sdk_service_installed_count; - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType *sdk_service_installed; - pb_bytes_array_t *device_model; - pb_bytes_array_t *app_id; - pb_bytes_array_t *bundle_id; - bool has_pod_name; - logs_proto_mobilesdk_ios_ICoreConfiguration_PodName pod_name; - pb_bytes_array_t *icore_version; - pb_bytes_array_t *sdk_version; - bool has_sdk_name; - logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType sdk_name; - bool has_app_count; - int32_t app_count; - pb_bytes_array_t *os_version; - pb_bytes_array_t *min_supported_ios_version; - bool has_use_default_app; - bool use_default_app; - bool has_deployed_in_app_store; - bool deployed_in_app_store; - bool has_dynamic_framework_count; - int32_t dynamic_framework_count; - pb_bytes_array_t *apple_framework_version; - bool has_using_zip_file; - bool using_zip_file; - bool has_deployment_type; - logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType deployment_type; - pb_bytes_array_t *platform_info; - bool has_swizzling_enabled; - bool swizzling_enabled; - bool has_using_gdt; - bool using_gdt; -/* @@protoc_insertion_point(struct:logs_proto_mobilesdk_ios_ICoreConfiguration) */ -} logs_proto_mobilesdk_ios_ICoreConfiguration; - -/* Default values for struct fields */ - -/* Initializer values for message structs */ -#define logs_proto_mobilesdk_ios_ICoreConfiguration_init_default {false, _logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_MIN, 0, NULL, NULL, NULL, NULL, false, _logs_proto_mobilesdk_ios_ICoreConfiguration_PodName_MIN, NULL, NULL, false, _logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_MIN, false, 0, NULL, NULL, false, 0, false, 0, false, 0, NULL, false, 0, false, _logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_MIN, NULL, false, 0, false, 0} -#define logs_proto_mobilesdk_ios_ICoreConfiguration_init_zero {false, _logs_proto_mobilesdk_ios_ICoreConfiguration_ConfigurationType_MIN, 0, NULL, NULL, NULL, NULL, false, _logs_proto_mobilesdk_ios_ICoreConfiguration_PodName_MIN, NULL, NULL, false, _logs_proto_mobilesdk_ios_ICoreConfiguration_ServiceType_MIN, false, 0, NULL, NULL, false, 0, false, 0, false, 0, NULL, false, 0, false, _logs_proto_mobilesdk_ios_ICoreConfiguration_DeploymentType_MIN, NULL, false, 0, false, 0} - -/* Field tags (for use in manual encoding/decoding) */ -#define logs_proto_mobilesdk_ios_ICoreConfiguration_pod_name_tag 16 -#define logs_proto_mobilesdk_ios_ICoreConfiguration_configuration_type_tag 1 -#define logs_proto_mobilesdk_ios_ICoreConfiguration_icore_version_tag 18 -#define logs_proto_mobilesdk_ios_ICoreConfiguration_sdk_version_tag 19 -#define logs_proto_mobilesdk_ios_ICoreConfiguration_sdk_service_installed_tag 7 -#define logs_proto_mobilesdk_ios_ICoreConfiguration_sdk_name_tag 20 -#define logs_proto_mobilesdk_ios_ICoreConfiguration_device_model_tag 9 -#define logs_proto_mobilesdk_ios_ICoreConfiguration_os_version_tag 22 -#define logs_proto_mobilesdk_ios_ICoreConfiguration_app_id_tag 10 -#define logs_proto_mobilesdk_ios_ICoreConfiguration_bundle_id_tag 12 -#define logs_proto_mobilesdk_ios_ICoreConfiguration_min_supported_ios_version_tag 24 -#define logs_proto_mobilesdk_ios_ICoreConfiguration_use_default_app_tag 25 -#define logs_proto_mobilesdk_ios_ICoreConfiguration_app_count_tag 21 -#define logs_proto_mobilesdk_ios_ICoreConfiguration_deployed_in_app_store_tag 26 -#define logs_proto_mobilesdk_ios_ICoreConfiguration_dynamic_framework_count_tag 27 -#define logs_proto_mobilesdk_ios_ICoreConfiguration_apple_framework_version_tag 28 -#define logs_proto_mobilesdk_ios_ICoreConfiguration_using_zip_file_tag 29 -#define logs_proto_mobilesdk_ios_ICoreConfiguration_deployment_type_tag 30 -#define logs_proto_mobilesdk_ios_ICoreConfiguration_platform_info_tag 31 -#define logs_proto_mobilesdk_ios_ICoreConfiguration_swizzling_enabled_tag 33 -#define logs_proto_mobilesdk_ios_ICoreConfiguration_using_gdt_tag 36 - -/* Struct field encoding specification for nanopb */ -extern const pb_field_t logs_proto_mobilesdk_ios_ICoreConfiguration_fields[22]; - -/* Maximum encoded size of messages (where known) */ -/* logs_proto_mobilesdk_ios_ICoreConfiguration_size depends on runtime parameters */ - -/* Message IDs (where set with "msgid" option) */ -#ifdef PB_MSGID - -#define FIREBASECORE_MESSAGES \ - - -#endif - -/* @@protoc_insertion_point(eof) */ - -#endif diff --git a/iphone/Maps/Pods/FirebaseCoreDiagnostics/Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsData.h b/iphone/Maps/Pods/FirebaseCoreDiagnostics/Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsData.h deleted file mode 100644 index 69c40721a2..0000000000 --- a/iphone/Maps/Pods/FirebaseCoreDiagnostics/Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsData.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** If present, is a BOOL wrapped in an NSNumber. */ -#define kFIRCDIsDataCollectionDefaultEnabledKey @"FIRCDIsDataCollectionDefaultEnabledKey" - -/** If present, is an int32_t wrapped in an NSNumber. */ -#define kFIRCDConfigurationTypeKey @"FIRCDConfigurationTypeKey" - -/** If present, is an NSString. */ -#define kFIRCDSdkNameKey @"FIRCDSdkNameKey" - -/** If present, is an NSString. */ -#define kFIRCDSdkVersionKey @"FIRCDSdkVersionKey" - -/** If present, is an int32_t wrapped in an NSNumber. */ -#define kFIRCDllAppsCountKey @"FIRCDllAppsCountKey" - -/** If present, is an NSString. */ -#define kFIRCDGoogleAppIDKey @"FIRCDGoogleAppIDKey" - -/** If present, is an NSString. */ -#define kFIRCDBundleIDKey @"FIRCDBundleID" - -/** If present, is a BOOL wrapped in an NSNumber. */ -#define kFIRCDUsingOptionsFromDefaultPlistKey @"FIRCDUsingOptionsFromDefaultPlistKey" - -/** If present, is an NSString. */ -#define kFIRCDLibraryVersionIDKey @"FIRCDLibraryVersionIDKey" - -/** If present, is an NSString. */ -#define kFIRCDFirebaseUserAgentKey @"FIRCDFirebaseUserAgentKey" - -/** Defines the interface of a data object needed to log diagnostics data. */ -@protocol FIRCoreDiagnosticsData - -@required - -/** A dictionary containing data (non-exhaustive) to be logged in diagnostics. */ -@property(nonatomic) NSDictionary *diagnosticObjects; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FirebaseCoreDiagnostics/Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsInterop.h b/iphone/Maps/Pods/FirebaseCoreDiagnostics/Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsInterop.h deleted file mode 100644 index 2b0eb710cd..0000000000 --- a/iphone/Maps/Pods/FirebaseCoreDiagnostics/Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsInterop.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -#import "FIRCoreDiagnosticsData.h" - -NS_ASSUME_NONNULL_BEGIN - -/** Allows the interoperation of FirebaseCore and FirebaseCoreDiagnostics. */ -@protocol FIRCoreDiagnosticsInterop - -/** Sends the given diagnostics data. - * - * @param diagnosticsData The diagnostics data object to send. - */ -+ (void)sendDiagnosticsData:(id)diagnosticsData; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FirebaseCoreDiagnostics/LICENSE b/iphone/Maps/Pods/FirebaseCoreDiagnostics/LICENSE deleted file mode 100644 index d645695673..0000000000 --- a/iphone/Maps/Pods/FirebaseCoreDiagnostics/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/iphone/Maps/Pods/FirebaseCoreDiagnostics/README.md b/iphone/Maps/Pods/FirebaseCoreDiagnostics/README.md deleted file mode 100644 index d778205ffa..0000000000 --- a/iphone/Maps/Pods/FirebaseCoreDiagnostics/README.md +++ /dev/null @@ -1,311 +0,0 @@ -[![Version](https://img.shields.io/cocoapods/v/Firebase.svg?style=flat)](https://cocoapods.org/pods/Firebase) -[![License](https://img.shields.io/cocoapods/l/Firebase.svg?style=flat)](https://cocoapods.org/pods/Firebase) -[![Platform](https://img.shields.io/cocoapods/p/Firebase.svg?style=flat)](https://cocoapods.org/pods/Firebase) - -[![Actions Status][gh-abtesting-badge]][gh-actions] -[![Actions Status][gh-auth-badge]][gh-actions] -[![Actions Status][gh-core-badge]][gh-actions] -[![Actions Status][gh-crashlytics-badge]][gh-actions] -[![Actions Status][gh-database-badge]][gh-actions] -[![Actions Status][gh-datatransport-badge]][gh-actions] -[![Actions Status][gh-dynamiclinks-badge]][gh-actions] -[![Actions Status][gh-firebasepod-badge]][gh-actions] -[![Actions Status][gh-firestore-badge]][gh-actions] -[![Actions Status][gh-functions-badge]][gh-actions] -[![Actions Status][gh-inappmessaging-badge]][gh-actions] -[![Actions Status][gh-interop-badge]][gh-actions] -[![Actions Status][gh-messaging-badge]][gh-actions] -[![Actions Status][gh-remoteconfig-badge]][gh-actions] -[![Actions Status][gh-storage-badge]][gh-actions] -[![Actions Status][gh-symbolcollision-badge]][gh-actions] -[![Actions Status][gh-zip-badge]][gh-actions] -[![Travis](https://travis-ci.org/firebase/firebase-ios-sdk.svg?branch=master)](https://travis-ci.org/firebase/firebase-ios-sdk) - -# Firebase Apple Open Source Development - -This repository contains all Apple platform Firebase SDK source except FirebaseAnalytics, -FirebasePerformance, and FirebaseML. - -The repository also includes GoogleUtilities source. The -[GoogleUtilities](GoogleUtilities/README.md) pod is -a set of utilities used by Firebase and other Google products. - -Firebase is an app development platform with tools to help you build, grow and -monetize your app. More information about Firebase can be found at -[https://firebase.google.com](https://firebase.google.com). - -## Installation - -See the three subsections for details about three different installation methods. -1. [Standard pod install](README.md#standard-pod-install) -1. [Installing from the GitHub repo](README.md#installing-from-github) -1. [Experimental Carthage](README.md#carthage-ios-only) - -### Standard pod install - -Go to -[https://firebase.google.com/docs/ios/setup](https://firebase.google.com/docs/ios/setup). - -### Installing from GitHub - -For releases starting with 5.0.0, the source for each release is also deployed -to CocoaPods master and available via standard -[CocoaPods Podfile syntax](https://guides.cocoapods.org/syntax/podfile.html#pod). - -These instructions can be used to access the Firebase repo at other branches, -tags, or commits. - -#### Background - -See -[the Podfile Syntax Reference](https://guides.cocoapods.org/syntax/podfile.html#pod) -for instructions and options about overriding pod source locations. - -#### Accessing Firebase Source Snapshots - -All of the official releases are tagged in this repo and available via CocoaPods. To access a local -source snapshot or unreleased branch, use Podfile directives like the following: - -To access FirebaseFirestore via a branch: -``` -pod 'FirebaseCore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master' -pod 'FirebaseFirestore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master' -``` - -To access FirebaseMessaging via a checked out version of the firebase-ios-sdk repo do: - -``` -pod 'FirebaseCore', :path => '/path/to/firebase-ios-sdk' -pod 'FirebaseMessaging', :path => '/path/to/firebase-ios-sdk' -``` - -### Carthage (iOS only) - -Instructions for the experimental Carthage distribution are at -[Carthage](Carthage.md). - -### Rome - -Instructions for installing binary frameworks via -[Rome](https://github.com/CocoaPods/Rome) are at [Rome](Rome.md). - -### Using Firebase from a Framework or a library - -[Using Firebase from a Framework or a library](docs/firebase_in_libraries.md) - -## Development - -To develop Firebase software in this repository, ensure that you have at least -the following software: - - * Xcode 10.3 (or later) - * CocoaPods 1.7.2 (or later) - * [CocoaPods generate](https://github.com/square/cocoapods-generate) - -For the pod that you want to develop: - -`pod gen Firebase{name here}.podspec --local-sources=./ --auto-open --platforms=ios` - -Note: If the CocoaPods cache is out of date, you may need to run -`pod repo update` before the `pod gen` command. - -Note: Set the `--platforms` option to `macos` or `tvos` to develop/test for -those platforms. Since 10.2, Xcode does not properly handle multi-platform -CocoaPods workspaces. - -Firestore has a self contained Xcode project. See -[Firestore/README.md](Firestore/README.md). - -### Development for Catalyst -* `pod gen {name here}.podspec --local-sources=./ --auto-open --platforms=ios` -* Check the Mac box in the App-iOS Build Settings -* Sign the App in the Settings Signing & Capabilities tab -* Click Pods in the Project Manager -* Add Signing to the iOS host app and unit test targets -* Select the Unit-unit scheme -* Run it to build and test - -### Adding a New Firebase Pod - -See [AddNewPod.md](AddNewPod.md). - -### Managing Headers and Imports - -See [HeadersImports.md](HeadersImports.md). - -### Code Formatting - -To ensure that the code is formatted consistently, run the script -[./scripts/style.sh](https://github.com/firebase/firebase-ios-sdk/blob/master/scripts/style.sh) -before creating a PR. - -Travis will verify that any code changes are done in a style compliant way. Install -`clang-format` and `swiftformat`. -These commands will get the right versions: - -``` -brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/c6f1cbd/Formula/clang-format.rb -brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/c13eda8/Formula/swiftformat.rb -``` - -Note: if you already have a newer version of these installed you may need to -`brew switch` to this version. - -To update this section, find the versions of clang-format and swiftformat.rb to -match the versions in the CI failure logs -[here](https://github.com/Homebrew/homebrew-core/tree/master/Formula). - -### Running Unit Tests - -Select a scheme and press Command-u to build a component and run its unit tests. - -#### Viewing Code Coverage (Deprecated) - -First, make sure that [xcov](https://github.com/nakiostudio/xcov) is installed with `gem install xcov`. - -After running the `AllUnitTests_iOS` scheme in Xcode, execute -`xcov --workspace Firebase.xcworkspace --scheme AllUnitTests_iOS --output_directory xcov_output` -at Example/ in the terminal. This will aggregate the coverage, and you can run `open xcov_output/index.html` to see the results. - -### Running Sample Apps -In order to run the sample apps and integration tests, you'll need valid -`GoogleService-Info.plist` files for those samples. The Firebase Xcode project contains dummy plist -files without real values, but can be replaced with real plist files. To get your own -`GoogleService-Info.plist` files: - -1. Go to the [Firebase Console](https://console.firebase.google.com/) -2. Create a new Firebase project, if you don't already have one -3. For each sample app you want to test, create a new Firebase app with the sample app's bundle -identifier (e.g. `com.google.Database-Example`) -4. Download the resulting `GoogleService-Info.plist` and replace the appropriate dummy plist file -(e.g. in [Example/Database/App/](Example/Database/App/)); - -Some sample apps like Firebase Messaging ([Example/Messaging/App](Example/Messaging/App)) require -special Apple capabilities, and you will have to change the sample app to use a unique bundle -identifier that you can control in your own Apple Developer account. - -## Specific Component Instructions -See the sections below for any special instructions for those components. - -### Firebase Auth - -If you're doing specific Firebase Auth development, see -[the Auth Sample README](FirebaseAuth/Tests/Sample/README.md) for instructions about -building and running the FirebaseAuth pod along with various samples and tests. - -### Firebase Database - -The Firebase Database Integration tests can be run against a locally running Database Emulator -or against a production instance. - -To run against a local emulator instance, invoke `./scripts/run_database_emulator.sh start` before -running the integration test. - -To run against a production instance, provide a valid GoogleServices-Info.plist and copy it to -`Example/Database/App/GoogleService-Info.plist`. Your Security Rule must be set to -[public](https://firebase.google.com/docs/database/security/quickstart) while your tests are -running. - -### Firebase Storage - -To run the Storage Integration tests, follow the instructions in -[FIRStorageIntegrationTests.m](FirebaseStorage/Tests/Integration/FIRStorageIntegrationTests.m). - -#### Push Notifications - -Push notifications can only be delivered to specially provisioned App IDs in the developer portal. -In order to actually test receiving push notifications, you will need to: - -1. Change the bundle identifier of the sample app to something you own in your Apple Developer -account, and enable that App ID for push notifications. -2. You'll also need to -[upload your APNs Provider Authentication Key or certificate to the Firebase Console](https://firebase.google.com/docs/cloud-messaging/ios/certs) -at **Project Settings > Cloud Messaging > [Your Firebase App]**. -3. Ensure your iOS device is added to your Apple Developer portal as a test device. - -#### iOS Simulator - -The iOS Simulator cannot register for remote notifications, and will not receive push notifications. -In order to receive push notifications, you'll have to follow the steps above and run the app on a -physical device. - -## Community Supported Efforts - -We've seen an amazing amount of interest and contributions to improve the Firebase SDKs, and we are -very grateful! We'd like to empower as many developers as we can to be able to use Firebase and -participate in the Firebase community. - -### tvOS, macOS, watchOS and Catalyst -Thanks to contributions from the community, many of Firebase SDKs now compile, run unit tests, and work on -tvOS, macOS, watchOS and Catalyst. - -For tvOS, checkout the [Sample](Example/tvOSSample). -For watchOS, currently only Messaging and Storage (and their dependencies) have limited support. Checkout the -[Independent Watch App Sample](Example/watchOSSample). - -Keep in mind that macOS, tvOS, watchOS and Catalyst are not officially supported by Firebase, and this -repository is actively developed primarily for iOS. While we can catch basic unit test issues with -Travis, there may be some changes where the SDK no longer works as expected on macOS, tvOS or watchOS. If you -encounter this, please [file an issue](https://github.com/firebase/firebase-ios-sdk/issues). - -During app setup in the console, you may get to a step that mentions something like "Checking if the app -has communicated with our servers". This relies on Analytics and will not work on macOS/tvOS/watchOS/Catalyst. -**It's safe to ignore the message and continue**, the rest of the SDKs will work as expected. - -To install, add a subset of the following to the Podfile: - -``` -pod 'Firebase/ABTesting' # No watchOS support yet -pod 'Firebase/Auth' # No watchOS support yet -pod 'Firebase/Crashlytics' # No watchOS support yet -pod 'Firebase/Database' # No watchOS support yet -pod 'Firebase/Firestore' # No watchOS support yet -pod 'Firebase/Functions' # No watchOS support yet -pod 'Firebase/Messaging' -pod 'Firebase/RemoteConfig' # No watchOS support yet -pod 'Firebase/Storage' -``` - -#### Additional Catalyst Notes - -* FirebaseAuth and FirebaseMessaging require adding `Keychain Sharing Capability` -to Build Settings. -* FirebaseFirestore requires signing the -[gRPC Resource target](https://github.com/firebase/firebase-ios-sdk/issues/3500#issuecomment-518741681). - -## Roadmap - -See [Roadmap](ROADMAP.md) for more about the Firebase iOS SDK Open Source -plans and directions. - -## Contributing - -See [Contributing](CONTRIBUTING.md) for more information on contributing to the Firebase -iOS SDK. - -## License - -The contents of this repository is licensed under the -[Apache License, version 2.0](http://www.apache.org/licenses/LICENSE-2.0). - -Your use of Firebase is governed by the -[Terms of Service for Firebase Services](https://firebase.google.com/terms/). - -[gh-actions]: https://github.com/firebase/firebase-ios-sdk/actions -[gh-abtesting-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/abtesting/badge.svg -[gh-auth-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/auth/badge.svg -[gh-core-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/core/badge.svg -[gh-crashlytics-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/crashlytics/badge.svg -[gh-database-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/database/badge.svg -[gh-datatransport-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/datatransport/badge.svg -[gh-dynamiclinks-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/dynamiclinks/badge.svg -[gh-firebasepod-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/firebasepod/badge.svg -[gh-firestore-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/firestore/badge.svg -[gh-functions-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/functions/badge.svg -[gh-inappmessaging-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/inappmessaging/badge.svg -[gh-interop-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/interop/badge.svg -[gh-messaging-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/messaging/badge.svg -[gh-remoteconfig-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/remoteconfig/badge.svg -[gh-storage-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/storage/badge.svg -[gh-symbolcollision-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/symbolcollision/badge.svg -[gh-zip-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/zip/badge.svg diff --git a/iphone/Maps/Pods/FirebaseCoreDiagnosticsInterop/Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsData.h b/iphone/Maps/Pods/FirebaseCoreDiagnosticsInterop/Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsData.h deleted file mode 100644 index 69c40721a2..0000000000 --- a/iphone/Maps/Pods/FirebaseCoreDiagnosticsInterop/Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsData.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** If present, is a BOOL wrapped in an NSNumber. */ -#define kFIRCDIsDataCollectionDefaultEnabledKey @"FIRCDIsDataCollectionDefaultEnabledKey" - -/** If present, is an int32_t wrapped in an NSNumber. */ -#define kFIRCDConfigurationTypeKey @"FIRCDConfigurationTypeKey" - -/** If present, is an NSString. */ -#define kFIRCDSdkNameKey @"FIRCDSdkNameKey" - -/** If present, is an NSString. */ -#define kFIRCDSdkVersionKey @"FIRCDSdkVersionKey" - -/** If present, is an int32_t wrapped in an NSNumber. */ -#define kFIRCDllAppsCountKey @"FIRCDllAppsCountKey" - -/** If present, is an NSString. */ -#define kFIRCDGoogleAppIDKey @"FIRCDGoogleAppIDKey" - -/** If present, is an NSString. */ -#define kFIRCDBundleIDKey @"FIRCDBundleID" - -/** If present, is a BOOL wrapped in an NSNumber. */ -#define kFIRCDUsingOptionsFromDefaultPlistKey @"FIRCDUsingOptionsFromDefaultPlistKey" - -/** If present, is an NSString. */ -#define kFIRCDLibraryVersionIDKey @"FIRCDLibraryVersionIDKey" - -/** If present, is an NSString. */ -#define kFIRCDFirebaseUserAgentKey @"FIRCDFirebaseUserAgentKey" - -/** Defines the interface of a data object needed to log diagnostics data. */ -@protocol FIRCoreDiagnosticsData - -@required - -/** A dictionary containing data (non-exhaustive) to be logged in diagnostics. */ -@property(nonatomic) NSDictionary *diagnosticObjects; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FirebaseCoreDiagnosticsInterop/Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsInterop.h b/iphone/Maps/Pods/FirebaseCoreDiagnosticsInterop/Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsInterop.h deleted file mode 100644 index 2b0eb710cd..0000000000 --- a/iphone/Maps/Pods/FirebaseCoreDiagnosticsInterop/Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsInterop.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -#import "FIRCoreDiagnosticsData.h" - -NS_ASSUME_NONNULL_BEGIN - -/** Allows the interoperation of FirebaseCore and FirebaseCoreDiagnostics. */ -@protocol FIRCoreDiagnosticsInterop - -/** Sends the given diagnostics data. - * - * @param diagnosticsData The diagnostics data object to send. - */ -+ (void)sendDiagnosticsData:(id)diagnosticsData; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FirebaseCoreDiagnosticsInterop/LICENSE b/iphone/Maps/Pods/FirebaseCoreDiagnosticsInterop/LICENSE deleted file mode 100644 index d645695673..0000000000 --- a/iphone/Maps/Pods/FirebaseCoreDiagnosticsInterop/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/iphone/Maps/Pods/FirebaseCoreDiagnosticsInterop/README.md b/iphone/Maps/Pods/FirebaseCoreDiagnosticsInterop/README.md deleted file mode 100644 index 3ddc8fbd29..0000000000 --- a/iphone/Maps/Pods/FirebaseCoreDiagnosticsInterop/README.md +++ /dev/null @@ -1,251 +0,0 @@ -# Firebase iOS Open Source Development [![Build Status](https://travis-ci.org/firebase/firebase-ios-sdk.svg?branch=master)](https://travis-ci.org/firebase/firebase-ios-sdk) - -This repository contains a subset of the Firebase iOS SDK source. It currently -includes FirebaseCore, FirebaseABTesting, FirebaseAuth, FirebaseDatabase, -FirebaseFirestore, FirebaseFunctions, FirebaseInstanceID, FirebaseInAppMessaging, -FirebaseInAppMessagingDisplay, FirebaseMessaging, FirebaseRemoteConfig, and -FirebaseStorage. - -The repository also includes GoogleUtilities source. The -[GoogleUtilities](GoogleUtilities/README.md) pod is -a set of utilities used by Firebase and other Google products. - -Firebase is an app development platform with tools to help you build, grow and -monetize your app. More information about Firebase can be found at -[https://firebase.google.com](https://firebase.google.com). - -## Installation - -See the three subsections for details about three different installation methods. -1. [Standard pod install](README.md#standard-pod-install) -1. [Installing from the GitHub repo](README.md#installing-from-github) -1. [Experimental Carthage](README.md#carthage-ios-only) - -### Standard pod install - -Go to -[https://firebase.google.com/docs/ios/setup](https://firebase.google.com/docs/ios/setup). - -### Installing from GitHub - -For releases starting with 5.0.0, the source for each release is also deployed -to CocoaPods master and available via standard -[CocoaPods Podfile syntax](https://guides.cocoapods.org/syntax/podfile.html#pod). - -These instructions can be used to access the Firebase repo at other branches, -tags, or commits. - -#### Background - -See -[the Podfile Syntax Reference](https://guides.cocoapods.org/syntax/podfile.html#pod) -for instructions and options about overriding pod source locations. - -#### Accessing Firebase Source Snapshots - -All of the official releases are tagged in this repo and available via CocoaPods. To access a local -source snapshot or unreleased branch, use Podfile directives like the following: - -To access FirebaseFirestore via a branch: -``` -pod 'FirebaseCore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master' -pod 'FirebaseFirestore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master' -``` - -To access FirebaseMessaging via a checked out version of the firebase-ios-sdk repo do: - -``` -pod 'FirebaseCore', :path => '/path/to/firebase-ios-sdk' -pod 'FirebaseMessaging', :path => '/path/to/firebase-ios-sdk' -``` - -### Carthage (iOS only) - -Instructions for the experimental Carthage distribution are at -[Carthage](Carthage.md). - -### Rome - -Instructions for installing binary frameworks via -[Rome](https://github.com/CocoaPods/Rome) are at [Rome](Rome.md). - -## Development - -To develop Firebase software in this repository, ensure that you have at least -the following software: - - * Xcode 10.1 (or later) - * CocoaPods 1.7.2 (or later) - * [CocoaPods generate](https://github.com/square/cocoapods-generate) - -For the pod that you want to develop: - -`pod gen Firebase{name here}.podspec --local-sources=./ --auto-open --platforms=ios` - -Note: If the CocoaPods cache is out of date, you may need to run -`pod repo update` before the `pod gen` command. - -Note: Set the `--platforms` option to `macos` or `tvos` to develop/test for -those platforms. Since 10.2, Xcode does not properly handle multi-platform -CocoaPods workspaces. - -Firestore has a self contained Xcode project. See -[Firestore/README.md](Firestore/README.md). - -### Development for Catalyst -* `pod gen {name here}.podspec --local-sources=./ --auto-open --platforms=ios` -* Check the Mac box in the App-iOS Build Settings -* Sign the App in the Settings Signing & Capabilities tab -* Click Pods in the Project Manager -* Add Signing to the iOS host app and unit test targets -* Select the Unit-unit scheme -* Run it to build and test - -### Adding a New Firebase Pod - -See [AddNewPod.md](AddNewPod.md). - -### Code Formatting - -To ensure that the code is formatted consistently, run the script -[./scripts/style.sh](https://github.com/firebase/firebase-ios-sdk/blob/master/scripts/style.sh) -before creating a PR. - -Travis will verify that any code changes are done in a style compliant way. Install -`clang-format` and `swiftformat`. -These commands will get the right versions: - -``` -brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/e3496d9/Formula/clang-format.rb -brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/7963c3d/Formula/swiftformat.rb -``` - -Note: if you already have a newer version of these installed you may need to -`brew switch` to this version. - -To update this section, find the versions of clang-format and swiftformat.rb to -match the versions in the CI failure logs -[here](https://github.com/Homebrew/homebrew-core/tree/master/Formula). - -### Running Unit Tests - -Select a scheme and press Command-u to build a component and run its unit tests. - -#### Viewing Code Coverage - -First, make sure that [xcov](https://github.com/nakiostudio/xcov) is installed with `gem install xcov`. - -After running the `AllUnitTests_iOS` scheme in Xcode, execute -`xcov --workspace Firebase.xcworkspace --scheme AllUnitTests_iOS --output_directory xcov_output` -at Example/ in the terminal. This will aggregate the coverage, and you can run `open xcov_output/index.html` to see the results. - -### Running Sample Apps -In order to run the sample apps and integration tests, you'll need valid -`GoogleService-Info.plist` files for those samples. The Firebase Xcode project contains dummy plist -files without real values, but can be replaced with real plist files. To get your own -`GoogleService-Info.plist` files: - -1. Go to the [Firebase Console](https://console.firebase.google.com/) -2. Create a new Firebase project, if you don't already have one -3. For each sample app you want to test, create a new Firebase app with the sample app's bundle -identifier (e.g. `com.google.Database-Example`) -4. Download the resulting `GoogleService-Info.plist` and replace the appropriate dummy plist file -(e.g. in [Example/Database/App/](Example/Database/App/)); - -Some sample apps like Firebase Messaging ([Example/Messaging/App](Example/Messaging/App)) require -special Apple capabilities, and you will have to change the sample app to use a unique bundle -identifier that you can control in your own Apple Developer account. - -## Specific Component Instructions -See the sections below for any special instructions for those components. - -### Firebase Auth - -If you're doing specific Firebase Auth development, see -[the Auth Sample README](Example/Auth/README.md) for instructions about -building and running the FirebaseAuth pod along with various samples and tests. - -### Firebase Database - -To run the Database Integration tests, make your database authentication rules -[public](https://firebase.google.com/docs/database/security/quickstart). - -### Firebase Storage - -To run the Storage Integration tests, follow the instructions in -[FIRStorageIntegrationTests.m](Example/Storage/Tests/Integration/FIRStorageIntegrationTests.m). - -#### Push Notifications - -Push notifications can only be delivered to specially provisioned App IDs in the developer portal. -In order to actually test receiving push notifications, you will need to: - -1. Change the bundle identifier of the sample app to something you own in your Apple Developer -account, and enable that App ID for push notifications. -2. You'll also need to -[upload your APNs Provider Authentication Key or certificate to the Firebase Console](https://firebase.google.com/docs/cloud-messaging/ios/certs) -at **Project Settings > Cloud Messaging > [Your Firebase App]**. -3. Ensure your iOS device is added to your Apple Developer portal as a test device. - -#### iOS Simulator - -The iOS Simulator cannot register for remote notifications, and will not receive push notifications. -In order to receive push notifications, you'll have to follow the steps above and run the app on a -physical device. - -## Community Supported Efforts - -We've seen an amazing amount of interest and contributions to improve the Firebase SDKs, and we are -very grateful! We'd like to empower as many developers as we can to be able to use Firebase and -participate in the Firebase community. - -### tvOS, macOS, and Catalyst -Thanks to contributions from the community, FirebaseABTesting, FirebaseAuth, FirebaseCore, -FirebaseDatabase, FirebaseMessaging, FirebaseFirestore, -FirebaseFunctions, FirebaseRemoteConfig, and FirebaseStorage now compile, run unit tests, and work on -tvOS, macOS, and Catalyst. - -For tvOS, checkout the [Sample](Example/tvOSSample). - -Keep in mind that macOS, Catalyst and tvOS are not officially supported by Firebase, and this -repository is actively developed primarily for iOS. While we can catch basic unit test issues with -Travis, there may be some changes where the SDK no longer works as expected on macOS or tvOS. If you -encounter this, please [file an issue](https://github.com/firebase/firebase-ios-sdk/issues). - -To install, add a subset of the following to the Podfile: - -``` -pod 'Firebase/ABTesting' -pod 'Firebase/Auth' -pod 'Firebase/Database' -pod 'Firebase/Firestore' -pod 'Firebase/Functions' -pod 'Firebase/Messaging' -pod 'Firebase/RemoteConfig' -pod 'Firebase/Storage' -``` - -#### Additional Catalyst Notes - -* FirebaseAuth and FirebaseMessaging require adding `Keychain Sharing Capability` -to Build Settings. -* FirebaseFirestore requires signing the -[gRPC Resource target](https://github.com/firebase/firebase-ios-sdk/issues/3500#issuecomment-518741681). - -## Roadmap - -See [Roadmap](ROADMAP.md) for more about the Firebase iOS SDK Open Source -plans and directions. - -## Contributing - -See [Contributing](CONTRIBUTING.md) for more information on contributing to the Firebase -iOS SDK. - -## License - -The contents of this repository is licensed under the -[Apache License, version 2.0](http://www.apache.org/licenses/LICENSE-2.0). - -Your use of Firebase is governed by the -[Terms of Service for Firebase Services](https://firebase.google.com/terms/). diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Components/FIRCLSApplication.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Components/FIRCLSApplication.h deleted file mode 100644 index 75536f7cdd..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Components/FIRCLSApplication.h +++ /dev/null @@ -1,88 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import -#if CLS_TARGET_OS_HAS_UIKIT -#import -#endif - -__BEGIN_DECLS - -#define FIRCLSApplicationActivityDefault \ - (NSActivitySuddenTerminationDisabled | NSActivityAutomaticTerminationDisabled) - -/** - * Type to indicate application installation source - */ -typedef NS_ENUM(NSInteger, FIRCLSApplicationInstallationSourceType) { - FIRCLSApplicationInstallationSourceTypeDeveloperInstall = 1, - // 2 and 3 are reserved for legacy values. - FIRCLSApplicationInstallationSourceTypeAppStore = 4 -}; - -/** - * Returns the application bundle identifier with occurences of "/" replaced by "_" - */ -NSString* FIRCLSApplicationGetBundleIdentifier(void); - -/** - * Returns the SDK's bundle ID - */ -NSString* FIRCLSApplicationGetSDKBundleID(void); - -/** - * Returns the platform identifier, either: ios, mac, or tvos. - * Catalyst apps are treated as mac. - */ -NSString* FIRCLSApplicationGetPlatform(void); - -/** - * Returns the user-facing app name - */ -NSString* FIRCLSApplicationGetName(void); - -/** - * Returns the build number - */ -NSString* FIRCLSApplicationGetBundleVersion(void); - -/** - * Returns the human-readable build version - */ -NSString* FIRCLSApplicationGetShortBundleVersion(void); - -/** - * Returns a number to indicate how the app has been installed: Developer / App Store - */ -FIRCLSApplicationInstallationSourceType FIRCLSApplicationInstallationSource(void); - -BOOL FIRCLSApplicationIsExtension(void); -NSString* FIRCLSApplicationExtensionPointIdentifier(void); - -#if CLS_TARGET_OS_HAS_UIKIT -UIApplication* FIRCLSApplicationSharedInstance(void); -#else -id FIRCLSApplicationSharedInstance(void); -#endif - -void FIRCLSApplicationOpenURL(NSURL* url, - NSExtensionContext* extensionContext, - void (^completionBlock)(BOOL success)); - -id FIRCLSApplicationBeginActivity(NSActivityOptions options, NSString* reason); -void FIRCLSApplicationEndActivity(id activity); - -void FIRCLSApplicationActivity(NSActivityOptions options, NSString* reason, void (^block)(void)); - -__END_DECLS diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Components/FIRCLSApplication.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Components/FIRCLSApplication.m deleted file mode 100644 index 219b4bb7a2..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Components/FIRCLSApplication.m +++ /dev/null @@ -1,211 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSApplication.h" - -#import "FIRCLSHost.h" -#import "FIRCLSUtility.h" - -#if CLS_TARGET_OS_OSX -#import -#endif - -#if CLS_TARGET_OS_HAS_UIKIT -#import -#endif - -NSString* FIRCLSApplicationGetBundleIdentifier(void) { - return [[[NSBundle mainBundle] bundleIdentifier] stringByReplacingOccurrencesOfString:@"/" - withString:@"_"]; -} - -NSString* FIRCLSApplicationGetSDKBundleID(void) { - return - [@"com.google.firebase.crashlytics." stringByAppendingString:FIRCLSApplicationGetPlatform()]; -} - -NSString* FIRCLSApplicationGetPlatform(void) { -#if defined(TARGET_OS_MACCATALYST) && TARGET_OS_MACCATALYST - return @"mac"; -#elif TARGET_OS_IOS - return @"ios"; -#elif TARGET_OS_OSX - return @"mac"; -#elif TARGET_OS_TV - return @"tvos"; -#endif -} - -// these defaults match the FIRCLSInfoPlist helper in FIRCLSIDEFoundation -NSString* FIRCLSApplicationGetBundleVersion(void) { - return [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"]; -} - -NSString* FIRCLSApplicationGetShortBundleVersion(void) { - return [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"]; -} - -NSString* FIRCLSApplicationGetName(void) { - NSString* name; - NSBundle* mainBundle; - - mainBundle = [NSBundle mainBundle]; - - name = [mainBundle objectForInfoDictionaryKey:@"CFBundleDisplayName"]; - if (name) { - return name; - } - - name = [mainBundle objectForInfoDictionaryKey:@"CFBundleName"]; - if (name) { - return name; - } - - return FIRCLSApplicationGetBundleVersion(); -} - -BOOL FIRCLSApplicationHasAppStoreReceipt(void) { - NSURL* url = NSBundle.mainBundle.appStoreReceiptURL; - return [NSFileManager.defaultManager fileExistsAtPath:[url path]]; -} - -FIRCLSApplicationInstallationSourceType FIRCLSApplicationInstallationSource(void) { - if (FIRCLSApplicationHasAppStoreReceipt()) { - return FIRCLSApplicationInstallationSourceTypeAppStore; - } - - return FIRCLSApplicationInstallationSourceTypeDeveloperInstall; -} - -BOOL FIRCLSApplicationIsExtension(void) { - return FIRCLSApplicationExtensionPointIdentifier() != nil; -} - -NSString* FIRCLSApplicationExtensionPointIdentifier(void) { - id extensionDict = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"NSExtension"]; - - if (!extensionDict) { - return nil; - } - - if (![extensionDict isKindOfClass:[NSDictionary class]]) { - FIRCLSSDKLog("Error: NSExtension Info.plist entry is mal-formed\n"); - return nil; - } - - id typeValue = [(NSDictionary*)extensionDict objectForKey:@"NSExtensionPointIdentifier"]; - - if (![typeValue isKindOfClass:[NSString class]]) { - FIRCLSSDKLog("Error: NSExtensionPointIdentifier Info.plist entry is mal-formed\n"); - return nil; - } - - return typeValue; -} - -#if CLS_TARGET_OS_HAS_UIKIT -UIApplication* FIRCLSApplicationSharedInstance(void) { - if (FIRCLSApplicationIsExtension()) { - return nil; - } - - return [[UIApplication class] performSelector:@selector(sharedApplication)]; -} -#elif CLS_TARGET_OS_OSX -id FIRCLSApplicationSharedInstance(void) { - return [NSClassFromString(@"NSApplication") sharedApplication]; -} -#else -id FIRCLSApplicationSharedInstance(void) { - return nil; // FIXME: what do we actually return for watch? -} -#endif - -void FIRCLSApplicationOpenURL(NSURL* url, - NSExtensionContext* extensionContext, - void (^completionBlock)(BOOL success)) { - if (extensionContext) { - [extensionContext openURL:url completionHandler:completionBlock]; - return; - } - - BOOL result = NO; - -#if TARGET_OS_IOS - // What's going on here is the value returned is a scalar, but we really need an object to - // call this dynamically. Hoops must be jumped. - NSInvocationOperation* op = - [[NSInvocationOperation alloc] initWithTarget:FIRCLSApplicationSharedInstance() - selector:@selector(openURL:) - object:url]; - [op start]; - [op.result getValue:&result]; -#elif CLS_TARGET_OS_OSX - result = [[NSClassFromString(@"NSWorkspace") sharedWorkspace] openURL:url]; -#endif - - completionBlock(result); -} - -id FIRCLSApplicationBeginActivity(NSActivityOptions options, NSString* reason) { - if ([[NSProcessInfo processInfo] respondsToSelector:@selector(beginActivityWithOptions: - reason:)]) { - return [[NSProcessInfo processInfo] beginActivityWithOptions:options reason:reason]; - } - -#if CLS_TARGET_OS_OSX - if (options & NSActivitySuddenTerminationDisabled) { - [[NSProcessInfo processInfo] disableSuddenTermination]; - } - - if (options & NSActivityAutomaticTerminationDisabled) { - [[NSProcessInfo processInfo] disableAutomaticTermination:reason]; - } -#endif - - // encode the options, so we can undo our work later - return @{@"options" : @(options), @"reason" : reason}; -} - -void FIRCLSApplicationEndActivity(id activity) { - if (!activity) { - return; - } - - if ([[NSProcessInfo processInfo] respondsToSelector:@selector(endActivity:)]) { - [[NSProcessInfo processInfo] endActivity:activity]; - return; - } - -#if CLS_TARGET_OS_OSX - NSInteger options = [[(NSDictionary*)activity objectForKey:@"options"] integerValue]; - - if (options & NSActivitySuddenTerminationDisabled) { - [[NSProcessInfo processInfo] enableSuddenTermination]; - } - - if (options & NSActivityAutomaticTerminationDisabled) { - [[NSProcessInfo processInfo] - enableAutomaticTermination:[(NSDictionary*)activity objectForKey:@"reason"]]; - } -#endif -} - -void FIRCLSApplicationActivity(NSActivityOptions options, NSString* reason, void (^block)(void)) { - id activity = FIRCLSApplicationBeginActivity(options, reason); - - block(); - - FIRCLSApplicationEndActivity(activity); -} diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Components/FIRCLSBinaryImage.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Components/FIRCLSBinaryImage.h deleted file mode 100644 index f3c0bd7186..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Components/FIRCLSBinaryImage.h +++ /dev/null @@ -1,81 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#pragma once - -#include -#include - -#include "FIRCLSFeatures.h" -#include "FIRCLSFile.h" -#include "FIRCLSMachO.h" - -__BEGIN_DECLS - -// Typically, apps seem to have ~300 binary images loaded -#define CLS_BINARY_IMAGE_RUNTIME_NODE_COUNT (512) -#define CLS_BINARY_IMAGE_RUNTIME_NODE_NAME_SIZE (32) -#define CLS_BINARY_IMAGE_RUNTIME_NODE_RECORD_NAME 0 - -#define FIRCLSUUIDStringLength (33) - -typedef struct { - _Atomic(void*) volatile baseAddress; - uint64_t size; -#if CLS_DWARF_UNWINDING_SUPPORTED - const void* ehFrame; -#endif -#if CLS_COMPACT_UNWINDING_SUPPORTED - const void* unwindInfo; -#endif - const void* crashInfo; -#if CLS_BINARY_IMAGE_RUNTIME_NODE_RECORD_NAME - char name[CLS_BINARY_IMAGE_RUNTIME_NODE_NAME_SIZE]; -#endif -} FIRCLSBinaryImageRuntimeNode; - -typedef struct { - char uuidString[FIRCLSUUIDStringLength]; - bool encrypted; - FIRCLSMachOVersion builtSDK; - FIRCLSMachOVersion minSDK; - FIRCLSBinaryImageRuntimeNode node; - struct FIRCLSMachOSlice slice; - intptr_t vmaddr_slide; -} FIRCLSBinaryImageDetails; - -typedef struct { - const char* path; -} FIRCLSBinaryImageReadOnlyContext; - -typedef struct { - FIRCLSFile file; - FIRCLSBinaryImageRuntimeNode nodes[CLS_BINARY_IMAGE_RUNTIME_NODE_COUNT]; -} FIRCLSBinaryImageReadWriteContext; - -void FIRCLSBinaryImageInit(FIRCLSBinaryImageReadOnlyContext* roContext, - FIRCLSBinaryImageReadWriteContext* rwContext); - -#if CLS_COMPACT_UNWINDING_SUPPORTED -bool FIRCLSBinaryImageSafeFindImageForAddress(uintptr_t address, - FIRCLSBinaryImageRuntimeNode* image); -bool FIRCLSBinaryImageSafeHasUnwindInfo(FIRCLSBinaryImageRuntimeNode* image); -#endif - -bool FIRCLSBinaryImageFindImageForUUID(const char* uuidString, - FIRCLSBinaryImageDetails* imageDetails); - -bool FIRCLSBinaryImageRecordMainExecutable(FIRCLSFile* file); - -__END_DECLS diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Components/FIRCLSBinaryImage.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Components/FIRCLSBinaryImage.m deleted file mode 100644 index 8b707bb44e..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Components/FIRCLSBinaryImage.m +++ /dev/null @@ -1,571 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "FIRCLSBinaryImage.h" - -#include -#include - -#include - -#include - -#include "FIRCLSByteUtility.h" -#include "FIRCLSFeatures.h" -#include "FIRCLSFile.h" -#include "FIRCLSGlobals.h" -#include "FIRCLSHost.h" -#include "FIRCLSMachO.h" -#include "FIRCLSUtility.h" - -#include - -// this is defined only if __OPEN_SOURCE__ is *not* defined in the TVOS SDK's mach-o/loader.h -// also, it has not yet made it back to the OSX SDKs, for example -#ifndef LC_VERSION_MIN_TVOS -#define LC_VERSION_MIN_TVOS 0x2F -#endif - -#pragma mark Prototypes -static bool FIRCLSBinaryImageOpenIfNeeded(bool* needsClosing); - -static void FIRCLSBinaryImageAddedCallback(const struct mach_header* mh, intptr_t vmaddr_slide); -static void FIRCLSBinaryImageRemovedCallback(const struct mach_header* mh, intptr_t vmaddr_slide); -static void FIRCLSBinaryImageChanged(bool added, - const struct mach_header* mh, - intptr_t vmaddr_slide); -static bool FIRCLSBinaryImageFillInImageDetails(FIRCLSBinaryImageDetails* details); - -static void FIRCLSBinaryImageStoreNode(bool added, FIRCLSBinaryImageDetails imageDetails); -static void FIRCLSBinaryImageRecordSlice(bool added, const FIRCLSBinaryImageDetails imageDetails); - -#pragma mark - Core API -void FIRCLSBinaryImageInit(FIRCLSBinaryImageReadOnlyContext* roContext, - FIRCLSBinaryImageReadWriteContext* rwContext) { - // initialize our node array to all zeros - memset(&_firclsContext.writable->binaryImage, 0, sizeof(_firclsContext.writable->binaryImage)); - _firclsContext.writable->binaryImage.file.fd = -1; - - dispatch_async(FIRCLSGetBinaryImageQueue(), ^{ - if (!FIRCLSUnlinkIfExists(_firclsContext.readonly->binaryimage.path)) { - FIRCLSSDKLog("Unable to reset the binary image log file %s\n", strerror(errno)); - } - - bool needsClosing; // unneeded - if (!FIRCLSBinaryImageOpenIfNeeded(&needsClosing)) { - FIRCLSSDKLog("Error: Unable to open the binary image log file during init\n"); - } - }); - - _dyld_register_func_for_add_image(FIRCLSBinaryImageAddedCallback); - _dyld_register_func_for_remove_image(FIRCLSBinaryImageRemovedCallback); - - dispatch_async(FIRCLSGetBinaryImageQueue(), ^{ - FIRCLSFileClose(&_firclsContext.writable->binaryImage.file); - }); -} - -static bool FIRCLSBinaryImageOpenIfNeeded(bool* needsClosing) { - if (!FIRCLSIsValidPointer(_firclsContext.writable)) { - return false; - } - - if (!FIRCLSIsValidPointer(_firclsContext.readonly)) { - return false; - } - - if (!FIRCLSIsValidPointer(needsClosing)) { - return false; - } - - *needsClosing = false; - - if (FIRCLSFileIsOpen(&_firclsContext.writable->binaryImage.file)) { - return true; - } - - if (!FIRCLSFileInitWithPath(&_firclsContext.writable->binaryImage.file, - _firclsContext.readonly->binaryimage.path, false)) { - FIRCLSSDKLog("Error: unable to open binary image log file\n"); - return false; - } - - *needsClosing = true; - - return true; -} - -#if CLS_COMPACT_UNWINDING_SUPPORTED -bool FIRCLSBinaryImageSafeFindImageForAddress(uintptr_t address, - FIRCLSBinaryImageRuntimeNode* image) { - if (!FIRCLSContextIsInitialized()) { - return false; - } - - if (address == 0) { - return false; - } - - if (!FIRCLSIsValidPointer(image)) { - return false; - } - - FIRCLSBinaryImageRuntimeNode* nodes = _firclsContext.writable->binaryImage.nodes; - if (!nodes) { - FIRCLSSDKLogError("The node structure is NULL\n"); - return false; - } - - for (uint32_t i = 0; i < CLS_BINARY_IMAGE_RUNTIME_NODE_COUNT; ++i) { - FIRCLSBinaryImageRuntimeNode* node = &nodes[i]; - if (!FIRCLSIsValidPointer(node)) { - FIRCLSSDKLog( - "Invalid node pointer encountered in context's writable binary image at index %i", i); - continue; - } - - if ((address >= (uintptr_t)node->baseAddress) && - (address < (uintptr_t)node->baseAddress + node->size)) { - *image = *node; // copy the image - return true; - } - } - - return false; -} - -bool FIRCLSBinaryImageSafeHasUnwindInfo(FIRCLSBinaryImageRuntimeNode* image) { - return FIRCLSIsValidPointer(image->unwindInfo); -} -#endif - -bool FIRCLSBinaryImageFindImageForUUID(const char* uuidString, - FIRCLSBinaryImageDetails* imageDetails) { - if (!imageDetails || !uuidString) { - FIRCLSSDKLog("null input\n"); - return false; - } - - uint32_t imageCount = _dyld_image_count(); - - for (uint32_t i = 0; i < imageCount; ++i) { - const struct mach_header* mh = _dyld_get_image_header(i); - - FIRCLSBinaryImageDetails image; - - image.slice = FIRCLSMachOSliceWithHeader((void*)mh); - FIRCLSBinaryImageFillInImageDetails(&image); - - if (strncmp(uuidString, image.uuidString, FIRCLSUUIDStringLength) == 0) { - *imageDetails = image; - return true; - } - } - - return false; -} - -#pragma mark - DYLD callback handlers -static void FIRCLSBinaryImageAddedCallback(const struct mach_header* mh, intptr_t vmaddr_slide) { - FIRCLSBinaryImageChanged(true, mh, vmaddr_slide); -} - -static void FIRCLSBinaryImageRemovedCallback(const struct mach_header* mh, intptr_t vmaddr_slide) { - FIRCLSBinaryImageChanged(false, mh, vmaddr_slide); -} - -#if CLS_BINARY_IMAGE_RUNTIME_NODE_RECORD_NAME -static bool FIRCLSBinaryImagePopulateRuntimeNodeName(FIRCLSBinaryImageDetails* details) { - if (!FIRCLSIsValidPointer(details)) { - return false; - } - - memset(details->node.name, 0, CLS_BINARY_IMAGE_RUNTIME_NODE_NAME_SIZE); - - // We have limited storage space for the name. And, we really want to store - // "CoreFoundation", not "/System/Library/Fram", so we have to play tricks - // to make sure we get the right side of the string. - const char* imageName = FIRCLSMachOSliceGetExecutablePath(&details->slice); - if (!imageName) { - return false; - } - - const size_t imageNameLength = strlen(imageName); - - // Remember to leave one character for null-termination. - if (imageNameLength > CLS_BINARY_IMAGE_RUNTIME_NODE_NAME_SIZE - 1) { - imageName = imageName + (imageNameLength - (CLS_BINARY_IMAGE_RUNTIME_NODE_NAME_SIZE - 1)); - } - - // subtract one to make sure the string is always null-terminated - strncpy(details->node.name, imageName, CLS_BINARY_IMAGE_RUNTIME_NODE_NAME_SIZE - 1); - - return true; -} -#endif - -// There were plans later to replace this with FIRCLSMachO -static FIRCLSMachOSegmentCommand FIRCLSBinaryImageMachOGetSegmentCommand( - const struct load_command* cmd) { - FIRCLSMachOSegmentCommand segmentCommand; - - memset(&segmentCommand, 0, sizeof(FIRCLSMachOSegmentCommand)); - - if (!cmd) { - return segmentCommand; - } - - if (cmd->cmd == LC_SEGMENT) { - struct segment_command* segCmd = (struct segment_command*)cmd; - - memcpy(segmentCommand.segname, segCmd->segname, 16); - segmentCommand.vmaddr = segCmd->vmaddr; - segmentCommand.vmsize = segCmd->vmsize; - } else if (cmd->cmd == LC_SEGMENT_64) { - struct segment_command_64* segCmd = (struct segment_command_64*)cmd; - - memcpy(segmentCommand.segname, segCmd->segname, 16); - segmentCommand.vmaddr = segCmd->vmaddr; - segmentCommand.vmsize = segCmd->vmsize; - } - - return segmentCommand; -} - -static bool FIRCLSBinaryImageMachOSliceInitSectionByName(FIRCLSMachOSliceRef slice, - const char* segName, - const char* sectionName, - FIRCLSMachOSection* section) { - if (!FIRCLSIsValidPointer(slice)) { - return false; - } - - if (!section) { - return false; - } - - memset(section, 0, sizeof(FIRCLSMachOSection)); - - if (FIRCLSMachOSliceIs64Bit(slice)) { - const struct section_64* sect = - getsectbynamefromheader_64(slice->startAddress, segName, sectionName); - if (!sect) { - return false; - } - - section->addr = sect->addr; - section->size = sect->size; - section->offset = sect->offset; - } else { - const struct section* sect = getsectbynamefromheader(slice->startAddress, segName, sectionName); - if (!sect) { - return false; - } - - section->addr = sect->addr; - section->size = sect->size; - section->offset = sect->offset; - } - - return true; -} - -static bool FIRCLSBinaryImageFillInImageDetails(FIRCLSBinaryImageDetails* details) { - if (!FIRCLSIsValidPointer(details)) { - return false; - } - - if (!FIRCLSIsValidPointer(details->slice.startAddress)) { - return false; - } - -#if CLS_BINARY_IMAGE_RUNTIME_NODE_RECORD_NAME - // this is done for debugging purposes, so if it fails, its ok to continue - FIRCLSBinaryImagePopulateRuntimeNodeName(details); -#endif - - // This cast might look a little dubious, but its just because we're using the same - // struct types in a few different places. - details->node.baseAddress = (void* volatile)details->slice.startAddress; - - FIRCLSMachOSliceEnumerateLoadCommands( - &details->slice, ^(uint32_t type, uint32_t size, const struct load_command* cmd) { - switch (type) { - case LC_UUID: { - const uint8_t* uuid = FIRCLSMachOGetUUID(cmd); - FIRCLSSafeHexToString(uuid, 16, details->uuidString); - } break; - case LC_ENCRYPTION_INFO: - details->encrypted = FIRCLSMachOGetEncrypted(cmd); - break; - case LC_SEGMENT: - case LC_SEGMENT_64: { - FIRCLSMachOSegmentCommand segmentCommand = FIRCLSBinaryImageMachOGetSegmentCommand(cmd); - - if (strncmp(segmentCommand.segname, SEG_TEXT, sizeof(SEG_TEXT)) == 0) { - details->node.size = segmentCommand.vmsize; - } - } break; - case LC_VERSION_MIN_MACOSX: - case LC_VERSION_MIN_IPHONEOS: - case LC_VERSION_MIN_TVOS: - case LC_VERSION_MIN_WATCHOS: - details->minSDK = FIRCLSMachOGetMinimumOSVersion(cmd); - details->builtSDK = FIRCLSMachOGetLinkedSDKVersion(cmd); - break; - } - }); - - // We look up the section we want, and we *should* be able to use: - // - // address of data we want = start address + section.offset - // - // However, the offset value is coming back funky in iOS 9. So, instead we look up the address - // the section should be loaded at, and compute the offset by looking up the address of the - // segment itself. - - FIRCLSMachOSection section; - -#if CLS_COMPACT_UNWINDING_SUPPORTED - if (FIRCLSBinaryImageMachOSliceInitSectionByName(&details->slice, SEG_TEXT, "__unwind_info", - §ion)) { - details->node.unwindInfo = (void*)(section.addr + details->vmaddr_slide); - } -#endif - -#if CLS_DWARF_UNWINDING_SUPPORTED - if (FIRCLSBinaryImageMachOSliceInitSectionByName(&details->slice, SEG_TEXT, "__eh_frame", - §ion)) { - details->node.ehFrame = (void*)(section.addr + details->vmaddr_slide); - } -#endif - - if (FIRCLSBinaryImageMachOSliceInitSectionByName(&details->slice, SEG_DATA, "__crash_info", - §ion)) { - details->node.crashInfo = (void*)(section.addr + details->vmaddr_slide); - } - - return true; -} - -static void FIRCLSBinaryImageChanged(bool added, - const struct mach_header* mh, - intptr_t vmaddr_slide) { - // FIRCLSSDKLog("Binary image %s %p\n", added ? "loaded" : "unloaded", mh); - - FIRCLSBinaryImageDetails imageDetails; - - memset(&imageDetails, 0, sizeof(FIRCLSBinaryImageDetails)); - - imageDetails.slice = FIRCLSMachOSliceWithHeader((void*)mh); - imageDetails.vmaddr_slide = vmaddr_slide; - FIRCLSBinaryImageFillInImageDetails(&imageDetails); - - // this is an atomic operation - FIRCLSBinaryImageStoreNode(added, imageDetails); - - // this isn't, so do it on a serial queue - dispatch_async(FIRCLSGetBinaryImageQueue(), ^{ - FIRCLSBinaryImageRecordSlice(added, imageDetails); - }); -} - -#pragma mark - In-Memory Storage -static void FIRCLSBinaryImageStoreNode(bool added, FIRCLSBinaryImageDetails imageDetails) { - // This function is mutating a structure that needs to be accessed at crash time. We - // need to make sure the structure is always in as valid a state as possible. - // FIRCLSSDKLog("Storing %s node %p\n", added ? "loaded" : "unloaded", - // (void*)imageDetails.node.baseAddress); - - if (!_firclsContext.writable) { - FIRCLSSDKLog("Error: Writable context is NULL\n"); - return; - } - - void* searchAddress = NULL; - bool success = false; - FIRCLSBinaryImageRuntimeNode* nodes = _firclsContext.writable->binaryImage.nodes; - - if (!added) { - // capture the search address first - searchAddress = imageDetails.node.baseAddress; - - // If we are removing a node, we need to set its entries to zero. By clearing all of - // these values, we can just copy in imageDetails.node. Using memset here is slightly - // weird, since we have to restore one field. But, this way, if/when the structure changes, - // we still do the right thing. - memset(&imageDetails.node, 0, sizeof(FIRCLSBinaryImageRuntimeNode)); - - // restore the baseAddress, which just got zeroed, and is used for indexing - imageDetails.node.baseAddress = searchAddress; - } - - for (uint32_t i = 0; i < CLS_BINARY_IMAGE_RUNTIME_NODE_COUNT; ++i) { - FIRCLSBinaryImageRuntimeNode* node = &nodes[i]; - - if (!node) { - FIRCLSSDKLog("Error: Binary image storage is NULL\n"); - break; - } - - // navigate through the array, looking for our matching address - if (node->baseAddress != searchAddress) { - continue; - } - - // Attempt to swap the base address with whatever we are searching for. Success means that - // entry has been claims/cleared. Failure means some other thread beat us to it. - if (atomic_compare_exchange_strong(&node->baseAddress, &searchAddress, - imageDetails.node.baseAddress)) { - *node = imageDetails.node; - success = true; - - break; - } - - // If this is an unload, getting here means two threads unloaded at the same time. I think - // that's highly unlikely, and possibly even impossible. So, I'm choosing to abort the process - // at this point. - if (!added) { - FIRCLSSDKLog("Error: Failed to swap during image unload\n"); - break; - } - } - - if (!success) { - FIRCLSSDKLog("Error: Unable to track a %s node %p\n", added ? "loaded" : "unloaded", - (void*)imageDetails.node.baseAddress); - } -} - -#pragma mark - On-Disk Storage -static void FIRCLSBinaryImageRecordDetails(FIRCLSFile* file, - const FIRCLSBinaryImageDetails imageDetails) { - if (!file) { - FIRCLSSDKLog("Error: file is invalid\n"); - return; - } - - FIRCLSFileWriteHashEntryString(file, "uuid", imageDetails.uuidString); - FIRCLSFileWriteHashEntryUint64(file, "base", (uintptr_t)imageDetails.slice.startAddress); - FIRCLSFileWriteHashEntryUint64(file, "size", imageDetails.node.size); -} - -static void FIRCLSBinaryImageRecordLibraryFrameworkInfo(FIRCLSFile* file, const char* path) { - if (!file) { - FIRCLSSDKLog("Error: file is invalid\n"); - return; - } - - if (!path) { - return; - } - - // Because this function is so expensive, we've decided to omit this info for all Apple-supplied - // frameworks. This really isn't that bad, because we can know their info ahead of time (within a - // small margin of error). With this implemenation, we will still record this info for any - // user-built framework, which in the end is the most important thing. - if (strncmp(path, "/System", 7) == 0) { - return; - } - - // check to see if this is a potential framework bundle - if (!strstr(path, ".framework")) { - return; - } - - // My.framework/Versions/A/My for OS X - // My.framework/My for iOS - - NSString* frameworkPath = [NSString stringWithUTF8String:path]; -#if TARGET_OS_IPHONE - frameworkPath = [frameworkPath stringByDeletingLastPathComponent]; -#else - frameworkPath = [frameworkPath stringByDeletingLastPathComponent]; // My.framework/Versions/A - frameworkPath = [frameworkPath stringByDeletingLastPathComponent]; // My.framework/Versions - frameworkPath = [frameworkPath stringByDeletingLastPathComponent]; // My.framework -#endif - - NSBundle* const bundle = [NSBundle bundleWithPath:frameworkPath]; - - if (!bundle) { - return; - } - - FIRCLSFileWriteHashEntryNSStringUnlessNilOrEmpty(file, "bundle_id", [bundle bundleIdentifier]); - FIRCLSFileWriteHashEntryNSStringUnlessNilOrEmpty( - file, "build_version", [bundle objectForInfoDictionaryKey:@"CFBundleVersion"]); - FIRCLSFileWriteHashEntryNSStringUnlessNilOrEmpty( - file, "display_version", [bundle objectForInfoDictionaryKey:@"CFBundleShortVersionString"]); -} - -static void FIRCLSBinaryImageRecordSlice(bool added, const FIRCLSBinaryImageDetails imageDetails) { - bool needsClosing = false; - if (!FIRCLSBinaryImageOpenIfNeeded(&needsClosing)) { - FIRCLSSDKLog("Error: unable to open binary image log file\n"); - return; - } - - FIRCLSFile* file = &_firclsContext.writable->binaryImage.file; - - FIRCLSFileWriteSectionStart(file, added ? "load" : "unload"); - - FIRCLSFileWriteHashStart(file); - - const char* path = FIRCLSMachOSliceGetExecutablePath((FIRCLSMachOSliceRef)&imageDetails.slice); - - FIRCLSFileWriteHashEntryString(file, "path", path); - - if (added) { - // this won't work if the binary has been unloaded - FIRCLSBinaryImageRecordLibraryFrameworkInfo(file, path); - } - - FIRCLSBinaryImageRecordDetails(file, imageDetails); - - FIRCLSFileWriteHashEnd(file); - - FIRCLSFileWriteSectionEnd(file); - - if (needsClosing) { - FIRCLSFileClose(file); - } -} - -bool FIRCLSBinaryImageRecordMainExecutable(FIRCLSFile* file) { - FIRCLSBinaryImageDetails imageDetails; - - memset(&imageDetails, 0, sizeof(FIRCLSBinaryImageDetails)); - - imageDetails.slice = FIRCLSMachOSliceGetCurrent(); - FIRCLSBinaryImageFillInImageDetails(&imageDetails); - - FIRCLSFileWriteSectionStart(file, "executable"); - FIRCLSFileWriteHashStart(file); - - FIRCLSFileWriteHashEntryString(file, "architecture", - FIRCLSMachOSliceGetArchitectureName(&imageDetails.slice)); - - FIRCLSBinaryImageRecordDetails(file, imageDetails); - FIRCLSFileWriteHashEntryBoolean(file, "encrypted", imageDetails.encrypted); - FIRCLSFileWriteHashEntryString(file, "minimum_sdk_version", - [FIRCLSMachOFormatVersion(&imageDetails.minSDK) UTF8String]); - FIRCLSFileWriteHashEntryString(file, "built_sdk_version", - [FIRCLSMachOFormatVersion(&imageDetails.builtSDK) UTF8String]); - - FIRCLSFileWriteHashEnd(file); - FIRCLSFileWriteSectionEnd(file); - - return true; -} diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Components/FIRCLSContext.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Components/FIRCLSContext.h deleted file mode 100644 index bdb43418c6..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Components/FIRCLSContext.h +++ /dev/null @@ -1,121 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#pragma once - -#include "FIRCLSAllocate.h" -#include "FIRCLSBinaryImage.h" -#include "FIRCLSException.h" -#include "FIRCLSFeatures.h" -#include "FIRCLSHost.h" -#include "FIRCLSInternalLogging.h" -#include "FIRCLSMachException.h" -#include "FIRCLSSignal.h" -#include "FIRCLSUserLogging.h" - -#include -#include - -// The purpose of the crash context is to hold values that absolutely must be read and/or written at -// crash time. For robustness against memory corruption, they are protected with guard pages. -// Further, the context is seperated into read-only and read-write sections. - -__BEGIN_DECLS - -#ifdef __OBJC__ -@class FIRCLSInternalReport; -@class FIRCLSSettings; -@class FIRCLSInstallIdentifierModel; -@class FIRCLSFileManager; -#endif - -typedef struct { - volatile bool initialized; - volatile bool debuggerAttached; - const char* previouslyCrashedFileFullPath; - const char* logPath; -#if CLS_USE_SIGALTSTACK - void* signalStack; -#endif -#if CLS_MACH_EXCEPTION_SUPPORTED - void* machStack; -#endif - void* delegate; - void* callbackDelegate; - - FIRCLSBinaryImageReadOnlyContext binaryimage; - FIRCLSExceptionReadOnlyContext exception; - FIRCLSHostReadOnlyContext host; - FIRCLSSignalReadContext signal; -#if CLS_MACH_EXCEPTION_SUPPORTED - FIRCLSMachExceptionReadContext machException; -#endif - FIRCLSUserLoggingReadOnlyContext logging; -} FIRCLSReadOnlyContext; - -typedef struct { - FIRCLSInternalLoggingWritableContext internalLogging; - volatile bool crashOccurred; - FIRCLSBinaryImageReadWriteContext binaryImage; - FIRCLSUserLoggingWritableContext logging; - FIRCLSExceptionWritableContext exception; -} FIRCLSReadWriteContext; - -typedef struct { - FIRCLSReadOnlyContext* readonly; - FIRCLSReadWriteContext* writable; - FIRCLSAllocatorRef allocator; -} FIRCLSContext; - -typedef struct { - void* delegate; - const char* customBundleId; - const char* rootPath; - const char* previouslyCrashedFileRootPath; - const char* sessionId; - const char* installId; - const char* betaToken; -#if CLS_MACH_EXCEPTION_SUPPORTED - exception_mask_t machExceptionMask; -#endif - bool errorsEnabled; - bool customExceptionsEnabled; - uint32_t maxCustomExceptions; - uint32_t maxErrorLogSize; - uint32_t maxLogSize; - uint32_t maxKeyValues; -} FIRCLSContextInitData; - -#ifdef __OBJC__ -bool FIRCLSContextInitialize(FIRCLSInternalReport* report, - FIRCLSSettings* settings, - FIRCLSInstallIdentifierModel* installIDModel, - FIRCLSFileManager* fileManager); - -// Re-writes the metadata file on the current thread -void FIRCLSContextUpdateMetadata(FIRCLSInternalReport* report, - FIRCLSSettings* settings, - FIRCLSInstallIdentifierModel* installIDModel, - FIRCLSFileManager* fileManager); -#endif - -void FIRCLSContextBaseInit(void); -void FIRCLSContextBaseDeinit(void); - -bool FIRCLSContextIsInitialized(void); -bool FIRCLSContextHasCrashed(void); -void FIRCLSContextMarkHasCrashed(void); -bool FIRCLSContextMarkAndCheckIfCrashed(void); - -__END_DECLS diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Components/FIRCLSContext.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Components/FIRCLSContext.m deleted file mode 100644 index 26d46c72ec..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Components/FIRCLSContext.m +++ /dev/null @@ -1,468 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "FIRCLSContext.h" - -#include -#include - -#import "FIRCLSFileManager.h" -#import "FIRCLSInstallIdentifierModel.h" -#import "FIRCLSInternalReport.h" -#import "FIRCLSSettings.h" - -#include "FIRCLSApplication.h" -#include "FIRCLSCrashedMarkerFile.h" -#include "FIRCLSDefines.h" -#include "FIRCLSFeatures.h" -#include "FIRCLSGlobals.h" -#include "FIRCLSProcess.h" -#include "FIRCLSUtility.h" - -// The writable size is our handler stack plus whatever scratch we need. We have to use this space -// extremely carefully, however, because thread stacks always needs to be page-aligned. Only the -// first allocation is gauranteed to be page-aligned. -// -// CLS_SIGNAL_HANDLER_STACK_SIZE and CLS_MACH_EXCEPTION_HANDLER_STACK_SIZE are platform dependant, -// defined as 0 for tv/watch. -#define CLS_MINIMUM_READWRITE_SIZE \ - (CLS_SIGNAL_HANDLER_STACK_SIZE + CLS_MACH_EXCEPTION_HANDLER_STACK_SIZE + \ - sizeof(FIRCLSReadWriteContext)) - -// We need enough space here for the context, plus storage for strings. -#define CLS_MINIMUM_READABLE_SIZE (sizeof(FIRCLSReadOnlyContext) + 4096 * 4) - -static const int64_t FIRCLSContextInitWaitTime = 5LL * NSEC_PER_SEC; - -static bool FIRCLSContextRecordMetadata(const char* path, const FIRCLSContextInitData* initData); -static const char* FIRCLSContextAppendToRoot(NSString* root, NSString* component); -static void FIRCLSContextAllocate(FIRCLSContext* context); - -FIRCLSContextInitData FIRCLSContextBuildInitData(FIRCLSInternalReport* report, - FIRCLSSettings* settings, - FIRCLSInstallIdentifierModel* installIDModel, - FIRCLSFileManager* fileManager) { - // Because we need to start the crash reporter right away, - // it starts up either with default settings, or cached settings - // from the last time they were fetched - - FIRCLSContextInitData initData; - - memset(&initData, 0, sizeof(FIRCLSContextInitData)); - - initData.customBundleId = nil; - initData.installId = [installIDModel.installID UTF8String]; - initData.sessionId = [[report identifier] UTF8String]; - initData.rootPath = [[report path] UTF8String]; - initData.previouslyCrashedFileRootPath = [[fileManager rootPath] UTF8String]; - initData.errorsEnabled = [settings errorReportingEnabled]; - initData.customExceptionsEnabled = [settings customExceptionsEnabled]; - initData.maxCustomExceptions = [settings maxCustomExceptions]; - initData.maxErrorLogSize = [settings errorLogBufferSize]; - initData.maxLogSize = [settings logBufferSize]; - initData.maxKeyValues = [settings maxCustomKeys]; - - // If this is set, then we could attempt to do a synchronous submission for certain kinds of - // events (exceptions). This is a very cool feature, but adds complexity to the backend. For now, - // we're going to leave this disabled. It does work in the exception case, but will ultimtely - // result in the following crash to be discared. Usually that crash isn't interesting. But, if it - // was, we'd never have a chance to see it. - initData.delegate = nil; - -#if CLS_MACH_EXCEPTION_SUPPORTED - __block exception_mask_t mask = 0; - - // TODO(b/141241224) This if statement was hardcoded to no, so this block was never run - // FIRCLSSignalEnumerateHandledSignals(^(int idx, int signal) { - // if ([self.delegate ensureDeliveryOfUnixSignal:signal]) { - // mask |= FIRCLSMachExceptionMaskForSignal(signal); - // } - // }); - - initData.machExceptionMask = mask; -#endif - - return initData; -} - -bool FIRCLSContextInitialize(FIRCLSInternalReport* report, - FIRCLSSettings* settings, - FIRCLSInstallIdentifierModel* installIDModel, - FIRCLSFileManager* fileManager) { - FIRCLSContextInitData initDataObj = - FIRCLSContextBuildInitData(report, settings, installIDModel, fileManager); - FIRCLSContextInitData* initData = &initDataObj; - - if (!initData) { - return false; - } - - FIRCLSContextBaseInit(); - - dispatch_group_t group = dispatch_group_create(); - dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); - - if (!FIRCLSIsValidPointer(initData->rootPath)) { - return false; - } - - NSString* rootPath = [NSString stringWithUTF8String:initData->rootPath]; - - // setup our SDK log file synchronously, because other calls may depend on it - _firclsContext.readonly->logPath = FIRCLSContextAppendToRoot(rootPath, @"sdk.log"); - if (!FIRCLSUnlinkIfExists(_firclsContext.readonly->logPath)) { - FIRCLSErrorLog(@"Unable to write initialize SDK write paths %s", strerror(errno)); - } - - // some values that aren't tied to particular subsystem - _firclsContext.readonly->debuggerAttached = FIRCLSProcessDebuggerAttached(); - _firclsContext.readonly->delegate = initData->delegate; - - dispatch_group_async(group, queue, ^{ - FIRCLSHostInitialize(&_firclsContext.readonly->host); - }); - - dispatch_group_async(group, queue, ^{ - _firclsContext.readonly->logging.errorStorage.maxSize = 0; - _firclsContext.readonly->logging.errorStorage.maxEntries = - initData->errorsEnabled ? initData->maxCustomExceptions : 0; - _firclsContext.readonly->logging.errorStorage.restrictBySize = false; - _firclsContext.readonly->logging.errorStorage.entryCount = - &_firclsContext.writable->logging.errorsCount; - _firclsContext.readonly->logging.errorStorage.aPath = - FIRCLSContextAppendToRoot(rootPath, FIRCLSReportErrorAFile); - _firclsContext.readonly->logging.errorStorage.bPath = - FIRCLSContextAppendToRoot(rootPath, FIRCLSReportErrorBFile); - - _firclsContext.readonly->logging.logStorage.maxSize = initData->maxLogSize; - _firclsContext.readonly->logging.logStorage.maxEntries = 0; - _firclsContext.readonly->logging.logStorage.restrictBySize = true; - _firclsContext.readonly->logging.logStorage.entryCount = NULL; - _firclsContext.readonly->logging.logStorage.aPath = - FIRCLSContextAppendToRoot(rootPath, FIRCLSReportLogAFile); - _firclsContext.readonly->logging.logStorage.bPath = - FIRCLSContextAppendToRoot(rootPath, FIRCLSReportLogBFile); - _firclsContext.readonly->logging.customExceptionStorage.aPath = - FIRCLSContextAppendToRoot(rootPath, FIRCLSReportCustomExceptionAFile); - _firclsContext.readonly->logging.customExceptionStorage.bPath = - FIRCLSContextAppendToRoot(rootPath, FIRCLSReportCustomExceptionBFile); - _firclsContext.readonly->logging.customExceptionStorage.maxSize = 0; - _firclsContext.readonly->logging.customExceptionStorage.restrictBySize = false; - _firclsContext.readonly->logging.customExceptionStorage.maxEntries = - initData->maxCustomExceptions; - _firclsContext.readonly->logging.customExceptionStorage.entryCount = - &_firclsContext.writable->exception.customExceptionCount; - - _firclsContext.readonly->logging.userKVStorage.maxCount = initData->maxKeyValues; - _firclsContext.readonly->logging.userKVStorage.incrementalPath = - FIRCLSContextAppendToRoot(rootPath, FIRCLSReportUserIncrementalKVFile); - _firclsContext.readonly->logging.userKVStorage.compactedPath = - FIRCLSContextAppendToRoot(rootPath, FIRCLSReportUserCompactedKVFile); - - _firclsContext.readonly->logging.internalKVStorage.maxCount = 32; // Hardcode = bad - _firclsContext.readonly->logging.internalKVStorage.incrementalPath = - FIRCLSContextAppendToRoot(rootPath, FIRCLSReportInternalIncrementalKVFile); - _firclsContext.readonly->logging.internalKVStorage.compactedPath = - FIRCLSContextAppendToRoot(rootPath, FIRCLSReportInternalCompactedKVFile); - - FIRCLSUserLoggingInit(&_firclsContext.readonly->logging, &_firclsContext.writable->logging); - }); - - dispatch_group_async(group, queue, ^{ - _firclsContext.readonly->binaryimage.path = - FIRCLSContextAppendToRoot(rootPath, FIRCLSReportBinaryImageFile); - - FIRCLSBinaryImageInit(&_firclsContext.readonly->binaryimage, - &_firclsContext.writable->binaryImage); - }); - - dispatch_group_async(group, queue, ^{ - NSString* rootPath = [NSString stringWithUTF8String:initData->previouslyCrashedFileRootPath]; - NSString* fileName = [NSString stringWithUTF8String:FIRCLSCrashedMarkerFileName]; - _firclsContext.readonly->previouslyCrashedFileFullPath = - FIRCLSContextAppendToRoot(rootPath, fileName); - }); - - if (!_firclsContext.readonly->debuggerAttached) { - dispatch_group_async(group, queue, ^{ - _firclsContext.readonly->signal.path = - FIRCLSContextAppendToRoot(rootPath, FIRCLSReportSignalFile); - - FIRCLSSignalInitialize(&_firclsContext.readonly->signal); - }); - -#if CLS_MACH_EXCEPTION_SUPPORTED - dispatch_group_async(group, queue, ^{ - _firclsContext.readonly->machException.path = - FIRCLSContextAppendToRoot(rootPath, FIRCLSReportMachExceptionFile); - - FIRCLSMachExceptionInit(&_firclsContext.readonly->machException, initData->machExceptionMask); - }); -#endif - - dispatch_group_async(group, queue, ^{ - _firclsContext.readonly->exception.path = - FIRCLSContextAppendToRoot(rootPath, FIRCLSReportExceptionFile); - _firclsContext.readonly->exception.maxCustomExceptions = - initData->customExceptionsEnabled ? initData->maxCustomExceptions : 0; - - FIRCLSExceptionInitialize(&_firclsContext.readonly->exception, - &_firclsContext.writable->exception, initData->delegate); - }); - } else { - FIRCLSSDKLog("Debugger present - not installing handlers\n"); - } - - dispatch_group_async(group, queue, ^{ - const char* metaDataPath = [[rootPath stringByAppendingPathComponent:FIRCLSReportMetadataFile] - fileSystemRepresentation]; - if (!FIRCLSContextRecordMetadata(metaDataPath, initData)) { - FIRCLSSDKLog("Unable to record context metadata\n"); - } - }); - - // At this point we need to do two things. First, we need to do our memory protection *only* after - // all of these initialization steps are really done. But, we also want to wait as long as - // possible for these to be complete. If we do not, there's a chance that we will not be able to - // correctly report a crash shortly after start. - - // Note at this will retain the group, so its totally fine to release the group here. - dispatch_group_notify(group, queue, ^{ - _firclsContext.readonly->initialized = true; - __sync_synchronize(); - - if (!FIRCLSAllocatorProtect(_firclsContext.allocator)) { - FIRCLSSDKLog("Error: Memory protection failed\n"); - } - }); - - if (dispatch_group_wait(group, dispatch_time(DISPATCH_TIME_NOW, FIRCLSContextInitWaitTime)) != - 0) { - FIRCLSSDKLog("Error: Delayed initialization\n"); - } - - return true; -} - -void FIRCLSContextUpdateMetadata(FIRCLSInternalReport* report, - FIRCLSSettings* settings, - FIRCLSInstallIdentifierModel* installIDModel, - FIRCLSFileManager* fileManager) { - FIRCLSContextInitData initDataObj = - FIRCLSContextBuildInitData(report, settings, installIDModel, fileManager); - FIRCLSContextInitData* initData = &initDataObj; - - NSString* rootPath = [NSString stringWithUTF8String:initData->rootPath]; - - const char* metaDataPath = - [[rootPath stringByAppendingPathComponent:FIRCLSReportMetadataFile] fileSystemRepresentation]; - - if (!FIRCLSContextRecordMetadata(metaDataPath, initData)) { - FIRCLSErrorLog(@"Unable to update context metadata"); - } -} - -void FIRCLSContextBaseInit(void) { - NSString* sdkBundleID = FIRCLSApplicationGetSDKBundleID(); - - NSString* loggingQueueName = [sdkBundleID stringByAppendingString:@".logging"]; - NSString* binaryImagesQueueName = [sdkBundleID stringByAppendingString:@".binary-images"]; - NSString* exceptionQueueName = [sdkBundleID stringByAppendingString:@".exception"]; - - _firclsLoggingQueue = dispatch_queue_create([loggingQueueName UTF8String], DISPATCH_QUEUE_SERIAL); - _firclsBinaryImageQueue = - dispatch_queue_create([binaryImagesQueueName UTF8String], DISPATCH_QUEUE_SERIAL); - _firclsExceptionQueue = - dispatch_queue_create([exceptionQueueName UTF8String], DISPATCH_QUEUE_SERIAL); - - FIRCLSContextAllocate(&_firclsContext); - - _firclsContext.writable->internalLogging.logFd = -1; - _firclsContext.writable->internalLogging.logLevel = FIRCLSInternalLogLevelDebug; - _firclsContext.writable->crashOccurred = false; - - _firclsContext.readonly->initialized = false; - - __sync_synchronize(); -} - -static void FIRCLSContextAllocate(FIRCLSContext* context) { - // create the allocator, and the contexts - // The ordering here is really important, because the "stack" variable must be - // page-aligned. There's no mechanism to ask the allocator to do alignment, but we - // do know the very first allocation in a region is aligned to a page boundary. - - context->allocator = FIRCLSAllocatorCreate(CLS_MINIMUM_READWRITE_SIZE, CLS_MINIMUM_READABLE_SIZE); - - context->readonly = - FIRCLSAllocatorSafeAllocate(context->allocator, sizeof(FIRCLSReadOnlyContext), CLS_READONLY); - memset(context->readonly, 0, sizeof(FIRCLSReadOnlyContext)); - -#if CLS_MEMORY_PROTECTION_ENABLED -#if CLS_MACH_EXCEPTION_SUPPORTED - context->readonly->machStack = FIRCLSAllocatorSafeAllocate( - context->allocator, CLS_MACH_EXCEPTION_HANDLER_STACK_SIZE, CLS_READWRITE); -#endif -#if CLS_USE_SIGALTSTACK - context->readonly->signalStack = - FIRCLSAllocatorSafeAllocate(context->allocator, CLS_SIGNAL_HANDLER_STACK_SIZE, CLS_READWRITE); -#endif -#else -#if CLS_MACH_EXCEPTION_SUPPORTED - context->readonly->machStack = valloc(CLS_MACH_EXCEPTION_HANDLER_STACK_SIZE); -#endif -#if CLS_USE_SIGALTSTACK - context->readonly->signalStack = valloc(CLS_SIGNAL_HANDLER_STACK_SIZE); -#endif -#endif - -#if CLS_MACH_EXCEPTION_SUPPORTED - memset(_firclsContext.readonly->machStack, 0, CLS_MACH_EXCEPTION_HANDLER_STACK_SIZE); -#endif -#if CLS_USE_SIGALTSTACK - memset(_firclsContext.readonly->signalStack, 0, CLS_SIGNAL_HANDLER_STACK_SIZE); -#endif - - context->writable = FIRCLSAllocatorSafeAllocate(context->allocator, - sizeof(FIRCLSReadWriteContext), CLS_READWRITE); - memset(context->writable, 0, sizeof(FIRCLSReadWriteContext)); -} - -void FIRCLSContextBaseDeinit(void) { - _firclsContext.readonly->initialized = false; - - FIRCLSAllocatorDestroy(_firclsContext.allocator); -} - -bool FIRCLSContextIsInitialized(void) { - __sync_synchronize(); - if (!FIRCLSIsValidPointer(_firclsContext.readonly)) { - return false; - } - - return _firclsContext.readonly->initialized; -} - -bool FIRCLSContextHasCrashed(void) { - if (!FIRCLSContextIsInitialized()) { - return false; - } - - // we've already run a full barrier above, so this read is ok - return _firclsContext.writable->crashOccurred; -} - -void FIRCLSContextMarkHasCrashed(void) { - if (!FIRCLSContextIsInitialized()) { - return; - } - - _firclsContext.writable->crashOccurred = true; - __sync_synchronize(); -} - -bool FIRCLSContextMarkAndCheckIfCrashed(void) { - if (!FIRCLSContextIsInitialized()) { - return false; - } - - if (_firclsContext.writable->crashOccurred) { - return true; - } - - _firclsContext.writable->crashOccurred = true; - __sync_synchronize(); - - return false; -} - -static const char* FIRCLSContextAppendToRoot(NSString* root, NSString* component) { - return FIRCLSDupString( - [[root stringByAppendingPathComponent:component] fileSystemRepresentation]); -} - -static bool FIRCLSContextRecordIdentity(FIRCLSFile* file, const FIRCLSContextInitData* initData) { - FIRCLSFileWriteSectionStart(file, "identity"); - - FIRCLSFileWriteHashStart(file); - - FIRCLSFileWriteHashEntryString(file, "generator", CLS_SDK_GENERATOR_NAME); - FIRCLSFileWriteHashEntryString(file, "display_version", CLS_SDK_DISPLAY_VERSION); - FIRCLSFileWriteHashEntryString(file, "build_version", CLS_SDK_DISPLAY_VERSION); - FIRCLSFileWriteHashEntryUint64(file, "started_at", time(NULL)); - - FIRCLSFileWriteHashEntryString(file, "session_id", initData->sessionId); - FIRCLSFileWriteHashEntryString(file, "install_id", initData->installId); - FIRCLSFileWriteHashEntryString(file, "beta_token", initData->betaToken); - FIRCLSFileWriteHashEntryBoolean(file, "absolute_log_timestamps", true); - - FIRCLSFileWriteHashEnd(file); - FIRCLSFileWriteSectionEnd(file); - - return true; -} - -static bool FIRCLSContextRecordApplication(FIRCLSFile* file, const char* customBundleId) { - FIRCLSFileWriteSectionStart(file, "application"); - - FIRCLSFileWriteHashStart(file); - - FIRCLSFileWriteHashEntryString(file, "bundle_id", - [FIRCLSApplicationGetBundleIdentifier() UTF8String]); - FIRCLSFileWriteHashEntryString(file, "custom_bundle_id", customBundleId); - FIRCLSFileWriteHashEntryString(file, "build_version", - [FIRCLSApplicationGetBundleVersion() UTF8String]); - FIRCLSFileWriteHashEntryString(file, "display_version", - [FIRCLSApplicationGetShortBundleVersion() UTF8String]); - FIRCLSFileWriteHashEntryString(file, "extension_id", - [FIRCLSApplicationExtensionPointIdentifier() UTF8String]); - - FIRCLSFileWriteHashEnd(file); - FIRCLSFileWriteSectionEnd(file); - - return true; -} - -static bool FIRCLSContextRecordMetadata(const char* path, const FIRCLSContextInitData* initData) { - if (!FIRCLSUnlinkIfExists(path)) { - FIRCLSSDKLog("Unable to unlink existing metadata file %s\n", strerror(errno)); - } - - FIRCLSFile file; - - if (!FIRCLSFileInitWithPath(&file, path, false)) { - FIRCLSSDKLog("Unable to open metadata file %s\n", strerror(errno)); - return false; - } - - if (!FIRCLSContextRecordIdentity(&file, initData)) { - FIRCLSSDKLog("Unable to write out identity metadata\n"); - } - - if (!FIRCLSHostRecord(&file)) { - FIRCLSSDKLog("Unable to write out host metadata\n"); - } - - if (!FIRCLSContextRecordApplication(&file, initData->customBundleId)) { - FIRCLSSDKLog("Unable to write out application metadata\n"); - } - - if (!FIRCLSBinaryImageRecordMainExecutable(&file)) { - FIRCLSSDKLog("Unable to write out executable metadata\n"); - } - - FIRCLSFileClose(&file); - - return true; -} diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Components/FIRCLSCrashedMarkerFile.c b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Components/FIRCLSCrashedMarkerFile.c deleted file mode 100644 index 5dd67fdec6..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Components/FIRCLSCrashedMarkerFile.c +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "FIRCLSCrashedMarkerFile.h" -#include "FIRCLSFile.h" -#include "FIRCLSUtility.h" - -const char *FIRCLSCrashedMarkerFileName = "previously-crashed"; - -void FIRCLSCreateCrashedMarkerFile() { - FIRCLSFile file; - - if (!FIRCLSFileInitWithPath(&file, _firclsContext.readonly->previouslyCrashedFileFullPath, false)) { - FIRCLSSDKLog("Unable to create the crashed marker file\n"); - return; - } - - FIRCLSFileClose(&file); - FIRCLSSDKLog("Created the crashed marker file\n"); -} diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Components/FIRCLSCrashedMarkerFile.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Components/FIRCLSCrashedMarkerFile.h deleted file mode 100644 index ccf4276730..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Components/FIRCLSCrashedMarkerFile.h +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include - -extern const char *FIRCLSCrashedMarkerFileName; - -void FIRCLSCreateCrashedMarkerFile(void); diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Components/FIRCLSGlobals.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Components/FIRCLSGlobals.h deleted file mode 100644 index 4f125cf089..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Components/FIRCLSGlobals.h +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "FIRCLSContext.h" - -__BEGIN_DECLS - -extern FIRCLSContext _firclsContext; -extern dispatch_queue_t _firclsLoggingQueue; -extern dispatch_queue_t _firclsBinaryImageQueue; -extern dispatch_queue_t _firclsExceptionQueue; - -#define FIRCLSGetLoggingQueue() (_firclsLoggingQueue) -#define FIRCLSGetBinaryImageQueue() (_firclsBinaryImageQueue) -#define FIRCLSGetExceptionQueue() (_firclsExceptionQueue) - -__END_DECLS diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Components/FIRCLSHost.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Components/FIRCLSHost.h deleted file mode 100644 index 24b1acd13e..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Components/FIRCLSHost.h +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#pragma once - -#include -#include - -#include "FIRCLSFile.h" - -typedef struct { - const char* documentDirectoryPath; - vm_size_t pageSize; -} FIRCLSHostReadOnlyContext; - -__BEGIN_DECLS - -void FIRCLSHostInitialize(FIRCLSHostReadOnlyContext* roContext); - -vm_size_t FIRCLSHostGetPageSize(void); - -bool FIRCLSHostRecord(FIRCLSFile* file); - -void FIRCLSHostWriteDiskUsage(FIRCLSFile* file); - -__END_DECLS diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Components/FIRCLSHost.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Components/FIRCLSHost.m deleted file mode 100644 index 87ff0f7ae7..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Components/FIRCLSHost.m +++ /dev/null @@ -1,161 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "FIRCLSHost.h" - -#include -#include -#include - -#import "FIRCLSApplication.h" -#include "FIRCLSDefines.h" -#import "FIRCLSFABHost.h" -#include "FIRCLSFile.h" -#include "FIRCLSGlobals.h" -#include "FIRCLSUtility.h" - -#if TARGET_OS_IPHONE -#import -#else -#import -#endif - -#define CLS_HOST_SYSCTL_BUFFER_SIZE (128) - -#if CLS_CPU_ARM64 -#define CLS_MAX_NATIVE_PAGE_SIZE (1024 * 16) -#else -// return 4K, which is correct for all platforms except arm64, currently -#define CLS_MAX_NATIVE_PAGE_SIZE (1024 * 4) -#endif -#define CLS_MIN_NATIVE_PAGE_SIZE (1024 * 4) - -#pragma mark Prototypes -static void FIRCLSHostWriteSysctlEntry( - FIRCLSFile* file, const char* key, const char* sysctlKey, void* buffer, size_t bufferSize); -static void FIRCLSHostWriteModelInfo(FIRCLSFile* file); -static void FIRCLSHostWriteOSVersionInfo(FIRCLSFile* file); - -#pragma mark - API -void FIRCLSHostInitialize(FIRCLSHostReadOnlyContext* roContext) { - _firclsContext.readonly->host.pageSize = FIRCLSHostGetPageSize(); - _firclsContext.readonly->host.documentDirectoryPath = NULL; - - // determine where the document directory is mounted, so we can get file system statistics later - NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); - if ([paths count]) { - _firclsContext.readonly->host.documentDirectoryPath = - FIRCLSDupString([[paths objectAtIndex:0] fileSystemRepresentation]); - } -} - -vm_size_t FIRCLSHostGetPageSize(void) { - size_t size; - int pageSize; - - // hw.pagesize is defined as HW_PAGESIZE, which is an int. It's important to match - // these types. Turns out that sysctl will not init the data to zero, but it appears - // that sysctlbyname does. This API is nicer, but that's important to keep in mind. - - pageSize = 0; - size = sizeof(pageSize); - if (sysctlbyname("hw.pagesize", &pageSize, &size, NULL, 0) != 0) { - FIRCLSSDKLog("sysctlbyname failed while trying to get hw.pagesize\n"); - - return CLS_MAX_NATIVE_PAGE_SIZE; - } - - // if the returned size is not the expected value, abort - if (size != sizeof(pageSize)) { - return CLS_MAX_NATIVE_PAGE_SIZE; - } - - // put in some guards to make sure our size is reasonable - if (pageSize > CLS_MAX_NATIVE_PAGE_SIZE) { - return CLS_MAX_NATIVE_PAGE_SIZE; - } - - if (pageSize < CLS_MIN_NATIVE_PAGE_SIZE) { - return CLS_MIN_NATIVE_PAGE_SIZE; - } - - return pageSize; -} - -static void FIRCLSHostWriteSysctlEntry( - FIRCLSFile* file, const char* key, const char* sysctlKey, void* buffer, size_t bufferSize) { - if (sysctlbyname(sysctlKey, buffer, &bufferSize, NULL, 0) != 0) { - FIRCLSFileWriteHashEntryString(file, key, "(failed)"); - return; - } - - FIRCLSFileWriteHashEntryString(file, key, buffer); -} - -static void FIRCLSHostWriteModelInfo(FIRCLSFile* file) { - FIRCLSFileWriteHashEntryString(file, "model", [FIRCLSHostModelInfo() UTF8String]); - - // allocate a static buffer for the sysctl values, which are typically - // quite short - char buffer[CLS_HOST_SYSCTL_BUFFER_SIZE]; - -#if TARGET_OS_EMBEDDED - FIRCLSHostWriteSysctlEntry(file, "machine", "hw.model", buffer, CLS_HOST_SYSCTL_BUFFER_SIZE); -#else - FIRCLSHostWriteSysctlEntry(file, "machine", "hw.machine", buffer, CLS_HOST_SYSCTL_BUFFER_SIZE); - FIRCLSHostWriteSysctlEntry(file, "cpu", "machdep.cpu.brand_string", buffer, - CLS_HOST_SYSCTL_BUFFER_SIZE); -#endif -} - -static void FIRCLSHostWriteOSVersionInfo(FIRCLSFile* file) { - FIRCLSFileWriteHashEntryString(file, "os_build_version", [FIRCLSHostOSBuildVersion() UTF8String]); - FIRCLSFileWriteHashEntryString(file, "os_display_version", - [FIRCLSHostOSDisplayVersion() UTF8String]); - FIRCLSFileWriteHashEntryString(file, "platform", [FIRCLSApplicationGetPlatform() UTF8String]); -} - -bool FIRCLSHostRecord(FIRCLSFile* file) { - FIRCLSFileWriteSectionStart(file, "host"); - - FIRCLSFileWriteHashStart(file); - - FIRCLSHostWriteModelInfo(file); - FIRCLSHostWriteOSVersionInfo(file); - FIRCLSFileWriteHashEntryString(file, "locale", - [[[NSLocale currentLocale] localeIdentifier] UTF8String]); - - FIRCLSFileWriteHashEnd(file); - - FIRCLSFileWriteSectionEnd(file); - - return true; -} - -void FIRCLSHostWriteDiskUsage(FIRCLSFile* file) { - struct statfs tStats; - - FIRCLSFileWriteSectionStart(file, "storage"); - - FIRCLSFileWriteHashStart(file); - - if (statfs(_firclsContext.readonly->host.documentDirectoryPath, &tStats) == 0) { - FIRCLSFileWriteHashEntryUint64(file, "free", tStats.f_bavail * tStats.f_bsize); - FIRCLSFileWriteHashEntryUint64(file, "total", tStats.f_blocks * tStats.f_bsize); - } - - FIRCLSFileWriteHashEnd(file); - - FIRCLSFileWriteSectionEnd(file); -} diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Components/FIRCLSProcess.c b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Components/FIRCLSProcess.c deleted file mode 100644 index 415466ec47..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Components/FIRCLSProcess.c +++ /dev/null @@ -1,824 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "FIRCLSProcess.h" -#include "FIRCLSDefines.h" -#include "FIRCLSFeatures.h" -#include "FIRCLSGlobals.h" -#include "FIRCLSProfiling.h" -#include "FIRCLSThreadState.h" -#include "FIRCLSUnwind.h" -#include "FIRCLSUtility.h" - -#include -#include -#include -#include - -#define THREAD_NAME_BUFFER_SIZE (64) - -#pragma mark Prototypes -static bool FIRCLSProcessGetThreadName(FIRCLSProcess *process, - thread_t thread, - char *buffer, - size_t length); -static const char *FIRCLSProcessGetThreadDispatchQueueName(FIRCLSProcess *process, thread_t thread); - -#pragma mark - API -bool FIRCLSProcessInit(FIRCLSProcess *process, thread_t crashedThread, void *uapVoid) { - if (!process) { - return false; - } - - process->task = mach_task_self(); - process->thisThread = mach_thread_self(); - process->crashedThread = crashedThread; - process->uapVoid = uapVoid; - - if (task_threads(process->task, &process->threads, &process->threadCount) != KERN_SUCCESS) { - // failed to get all threads - process->threadCount = 0; - FIRCLSSDKLog("Error: unable to get task threads\n"); - - return false; - } - - return true; -} - -bool FIRCLSProcessDestroy(FIRCLSProcess *process) { - return false; -} - -// https://developer.apple.com/library/mac/#qa/qa2004/qa1361.html -bool FIRCLSProcessDebuggerAttached(void) { - int junk; - int mib[4]; - struct kinfo_proc info; - size_t size; - - // Initialize the flags so that, if sysctl fails for some bizarre - // reason, we get a predictable result. - info.kp_proc.p_flag = 0; - - // Initialize mib, which tells sysctl the info we want, in this case - // we're looking for information about a specific process ID. - mib[0] = CTL_KERN; - mib[1] = KERN_PROC; - mib[2] = KERN_PROC_PID; - mib[3] = getpid(); - - // Call sysctl. - size = sizeof(info); - junk = sysctl(mib, sizeof(mib) / sizeof(*mib), &info, &size, NULL, 0); - if (junk != 0) { - FIRCLSSDKLog("sysctl failed while trying to get kinfo_proc\n"); - return false; - } - - // We're being debugged if the P_TRACED flag is set. - return (info.kp_proc.p_flag & P_TRACED) != 0; -} - -#pragma mark - Thread Support -static bool FIRCLSProcessIsCurrentThread(FIRCLSProcess *process, thread_t thread) { - return MACH_PORT_INDEX(process->thisThread) == MACH_PORT_INDEX(thread); -} - -static bool FIRCLSProcessIsCrashedThread(FIRCLSProcess *process, thread_t thread) { - return MACH_PORT_INDEX(process->crashedThread) == MACH_PORT_INDEX(thread); -} - -static uint32_t FIRCLSProcessGetThreadCount(FIRCLSProcess *process) { - return process->threadCount; -} - -static thread_t FIRCLSProcessGetThread(FIRCLSProcess *process, uint32_t index) { - if (index >= process->threadCount) { - return MACH_PORT_NULL; - } - - return process->threads[index]; -} - -bool FIRCLSProcessSuspendAllOtherThreads(FIRCLSProcess *process) { - mach_msg_type_number_t i; - bool success; - - success = true; - for (i = 0; i < process->threadCount; ++i) { - thread_t thread; - - thread = FIRCLSProcessGetThread(process, i); - - if (FIRCLSProcessIsCurrentThread(process, thread)) { - continue; - } - - // FIXME: workaround to get this building on watch, but we need to suspend/resume threads! -#if CLS_CAN_SUSPEND_THREADS - success = success && (thread_suspend(thread) == KERN_SUCCESS); -#endif - } - - return success; -} - -bool FIRCLSProcessResumeAllOtherThreads(FIRCLSProcess *process) { - mach_msg_type_number_t i; - bool success; - - success = true; - for (i = 0; i < process->threadCount; ++i) { - thread_t thread; - - thread = FIRCLSProcessGetThread(process, i); - - if (FIRCLSProcessIsCurrentThread(process, thread)) { - continue; - } - - // FIXME: workaround to get this building on watch, but we need to suspend/resume threads! -#if CLS_CAN_SUSPEND_THREADS - success = success && (thread_resume(thread) == KERN_SUCCESS); -#endif - } - - return success; -} - -#pragma mark - Thread Properties -void *FIRCLSThreadGetCurrentPC(void) { - return __builtin_return_address(0); -} - -static bool FIRCLSProcessGetThreadState(FIRCLSProcess *process, - thread_t thread, - FIRCLSThreadContext *context) { - if (!FIRCLSIsValidPointer(context)) { - FIRCLSSDKLogError("invalid context supplied"); - return false; - } - - // If the thread context we should use is non-NULL, then just assign it here. Otherwise, - // query the thread state - if (FIRCLSProcessIsCrashedThread(process, thread) && FIRCLSIsValidPointer(process->uapVoid)) { - *context = *((_STRUCT_UCONTEXT *)process->uapVoid)->uc_mcontext; - return true; - } - - // Here's a wild trick: emulate what thread_get_state would do. It apppears that - // we cannot reliably unwind out of thread_get_state. So, instead of trying, setup - // a thread context that resembles what the real thing would look like - if (FIRCLSProcessIsCurrentThread(process, thread)) { - FIRCLSSDKLog("Faking current thread\n"); - memset(context, 0, sizeof(FIRCLSThreadContext)); - - // Compute the frame address, and then base the stack value off of that. A frame pushes - // two pointers onto the stack, so we have to offset. - const uintptr_t frameAddress = (uintptr_t)__builtin_frame_address(0); - const uintptr_t stackAddress = FIRCLSUnwindStackPointerFromFramePointer(frameAddress); - -#if CLS_CPU_X86_64 - context->__ss.__rip = (uintptr_t)FIRCLSThreadGetCurrentPC(); - context->__ss.__rbp = frameAddress; - context->__ss.__rsp = stackAddress; -#elif CLS_CPU_I386 - context->__ss.__eip = (uintptr_t)FIRCLSThreadGetCurrentPC(); - context->__ss.__ebp = frameAddress; - context->__ss.__esp = stackAddress; -#elif CLS_CPU_ARM64 - FIRCLSThreadContextSetPC(context, (uintptr_t)FIRCLSThreadGetCurrentPC()); - FIRCLSThreadContextSetFramePointer(context, frameAddress); - FIRCLSThreadContextSetLinkRegister(context, (uintptr_t)__builtin_return_address(0)); - FIRCLSThreadContextSetStackPointer(context, stackAddress); -#elif CLS_CPU_ARM - context->__ss.__pc = (uintptr_t)FIRCLSThreadGetCurrentPC(); - context->__ss.__r[7] = frameAddress; - context->__ss.__lr = (uintptr_t)__builtin_return_address(0); - context->__ss.__sp = stackAddress; -#endif - - return true; - } - -#if !TARGET_OS_WATCH - // try to get the value by querying the thread state - mach_msg_type_number_t stateCount = FIRCLSThreadStateCount; - if (thread_get_state(thread, FIRCLSThreadState, (thread_state_t)(&(context->__ss)), - &stateCount) != KERN_SUCCESS) { - FIRCLSSDKLogError("failed to get thread state\n"); - return false; - } - - return true; -#else - return false; -#endif -} - -static bool FIRCLSProcessGetThreadName(FIRCLSProcess *process, - thread_t thread, - char *buffer, - size_t length) { - pthread_t pthread; - - if (!buffer || length <= 0) { - return false; - } - - pthread = pthread_from_mach_thread_np(thread); - - return pthread_getname_np(pthread, buffer, length) == 0; -} - -static const char *FIRCLSProcessGetThreadDispatchQueueName(FIRCLSProcess *process, - thread_t thread) { - thread_identifier_info_data_t info; - mach_msg_type_number_t infoCount; - dispatch_queue_t *queueAddress; - dispatch_queue_t queue; - const char *string; - - infoCount = THREAD_IDENTIFIER_INFO_COUNT; - if (thread_info(thread, THREAD_IDENTIFIER_INFO, (thread_info_t)&info, &infoCount) != - KERN_SUCCESS) { - FIRCLSSDKLog("unable to get thread info\n"); - return NULL; - } - - queueAddress = (dispatch_queue_t *)info.dispatch_qaddr; - if (queueAddress == NULL) { - return ""; - } - - // Sometimes a queue address is invalid. I cannot explain why this is, but - // it can cause a crash. - if (!FIRCLSReadMemory((vm_address_t)queueAddress, &queue, sizeof(void *))) { - return ""; - } - - // here, we know it is safe to de-reference this address, so attempt to get the queue name - if (!queue) { - return ""; - } - - string = dispatch_queue_get_label(queue); - - // but, we still don't if the entire string is valid, so check that too - if (!FIRCLSReadString((vm_address_t)string, (char **)&string, 128)) { - return ""; - } - - return string; -} - -#pragma mark - Data Recording -static bool FIRCLSProcessRecordThreadRegisters(FIRCLSThreadContext context, FIRCLSFile *file) { -#if CLS_CPU_ARM - FIRCLSFileWriteHashEntryUint64(file, "r0", context.__ss.__r[0]); - FIRCLSFileWriteHashEntryUint64(file, "r1", context.__ss.__r[1]); - FIRCLSFileWriteHashEntryUint64(file, "r2", context.__ss.__r[2]); - FIRCLSFileWriteHashEntryUint64(file, "r3", context.__ss.__r[3]); - FIRCLSFileWriteHashEntryUint64(file, "r4", context.__ss.__r[4]); - FIRCLSFileWriteHashEntryUint64(file, "r5", context.__ss.__r[5]); - FIRCLSFileWriteHashEntryUint64(file, "r6", context.__ss.__r[6]); - FIRCLSFileWriteHashEntryUint64(file, "r7", context.__ss.__r[7]); - FIRCLSFileWriteHashEntryUint64(file, "r8", context.__ss.__r[8]); - FIRCLSFileWriteHashEntryUint64(file, "r9", context.__ss.__r[9]); - FIRCLSFileWriteHashEntryUint64(file, "r10", context.__ss.__r[10]); - FIRCLSFileWriteHashEntryUint64(file, "r11", context.__ss.__r[11]); - FIRCLSFileWriteHashEntryUint64(file, "ip", context.__ss.__r[12]); - FIRCLSFileWriteHashEntryUint64(file, "sp", context.__ss.__sp); - FIRCLSFileWriteHashEntryUint64(file, "lr", context.__ss.__lr); - FIRCLSFileWriteHashEntryUint64(file, "pc", context.__ss.__pc); - FIRCLSFileWriteHashEntryUint64(file, "cpsr", context.__ss.__cpsr); -#elif CLS_CPU_ARM64 - FIRCLSFileWriteHashEntryUint64(file, "x0", context.__ss.__x[0]); - FIRCLSFileWriteHashEntryUint64(file, "x1", context.__ss.__x[1]); - FIRCLSFileWriteHashEntryUint64(file, "x2", context.__ss.__x[2]); - FIRCLSFileWriteHashEntryUint64(file, "x3", context.__ss.__x[3]); - FIRCLSFileWriteHashEntryUint64(file, "x4", context.__ss.__x[4]); - FIRCLSFileWriteHashEntryUint64(file, "x5", context.__ss.__x[5]); - FIRCLSFileWriteHashEntryUint64(file, "x6", context.__ss.__x[6]); - FIRCLSFileWriteHashEntryUint64(file, "x7", context.__ss.__x[7]); - FIRCLSFileWriteHashEntryUint64(file, "x8", context.__ss.__x[8]); - FIRCLSFileWriteHashEntryUint64(file, "x9", context.__ss.__x[9]); - FIRCLSFileWriteHashEntryUint64(file, "x10", context.__ss.__x[10]); - FIRCLSFileWriteHashEntryUint64(file, "x11", context.__ss.__x[11]); - FIRCLSFileWriteHashEntryUint64(file, "x12", context.__ss.__x[12]); - FIRCLSFileWriteHashEntryUint64(file, "x13", context.__ss.__x[13]); - FIRCLSFileWriteHashEntryUint64(file, "x14", context.__ss.__x[14]); - FIRCLSFileWriteHashEntryUint64(file, "x15", context.__ss.__x[15]); - FIRCLSFileWriteHashEntryUint64(file, "x16", context.__ss.__x[16]); - FIRCLSFileWriteHashEntryUint64(file, "x17", context.__ss.__x[17]); - FIRCLSFileWriteHashEntryUint64(file, "x18", context.__ss.__x[18]); - FIRCLSFileWriteHashEntryUint64(file, "x19", context.__ss.__x[19]); - FIRCLSFileWriteHashEntryUint64(file, "x20", context.__ss.__x[20]); - FIRCLSFileWriteHashEntryUint64(file, "x21", context.__ss.__x[21]); - FIRCLSFileWriteHashEntryUint64(file, "x22", context.__ss.__x[22]); - FIRCLSFileWriteHashEntryUint64(file, "x23", context.__ss.__x[23]); - FIRCLSFileWriteHashEntryUint64(file, "x24", context.__ss.__x[24]); - FIRCLSFileWriteHashEntryUint64(file, "x25", context.__ss.__x[25]); - FIRCLSFileWriteHashEntryUint64(file, "x26", context.__ss.__x[26]); - FIRCLSFileWriteHashEntryUint64(file, "x27", context.__ss.__x[27]); - FIRCLSFileWriteHashEntryUint64(file, "x28", context.__ss.__x[28]); - FIRCLSFileWriteHashEntryUint64(file, "fp", FIRCLSThreadContextGetFramePointer(&context)); - FIRCLSFileWriteHashEntryUint64(file, "sp", FIRCLSThreadContextGetStackPointer(&context)); - FIRCLSFileWriteHashEntryUint64(file, "lr", FIRCLSThreadContextGetLinkRegister(&context)); - FIRCLSFileWriteHashEntryUint64(file, "pc", FIRCLSThreadContextGetPC(&context)); - FIRCLSFileWriteHashEntryUint64(file, "cpsr", context.__ss.__cpsr); -#elif CLS_CPU_I386 - FIRCLSFileWriteHashEntryUint64(file, "eax", context.__ss.__eax); - FIRCLSFileWriteHashEntryUint64(file, "ebx", context.__ss.__ebx); - FIRCLSFileWriteHashEntryUint64(file, "ecx", context.__ss.__ecx); - FIRCLSFileWriteHashEntryUint64(file, "edx", context.__ss.__edx); - FIRCLSFileWriteHashEntryUint64(file, "edi", context.__ss.__edi); - FIRCLSFileWriteHashEntryUint64(file, "esi", context.__ss.__esi); - FIRCLSFileWriteHashEntryUint64(file, "ebp", context.__ss.__ebp); - FIRCLSFileWriteHashEntryUint64(file, "esp", context.__ss.__esp); - FIRCLSFileWriteHashEntryUint64(file, "ss", context.__ss.__ss); - FIRCLSFileWriteHashEntryUint64(file, "eflags", context.__ss.__eflags); - FIRCLSFileWriteHashEntryUint64(file, "eip", context.__ss.__eip); - FIRCLSFileWriteHashEntryUint64(file, "cs", context.__ss.__cs); - FIRCLSFileWriteHashEntryUint64(file, "ds", context.__ss.__ds); - FIRCLSFileWriteHashEntryUint64(file, "es", context.__ss.__es); - FIRCLSFileWriteHashEntryUint64(file, "fs", context.__ss.__fs); - FIRCLSFileWriteHashEntryUint64(file, "gs", context.__ss.__gs); - - // how do we get the cr2 register? -#elif CLS_CPU_X86_64 - FIRCLSFileWriteHashEntryUint64(file, "rax", context.__ss.__rax); - FIRCLSFileWriteHashEntryUint64(file, "rbx", context.__ss.__rbx); - FIRCLSFileWriteHashEntryUint64(file, "rcx", context.__ss.__rcx); - FIRCLSFileWriteHashEntryUint64(file, "rdx", context.__ss.__rdx); - FIRCLSFileWriteHashEntryUint64(file, "rdi", context.__ss.__rdi); - FIRCLSFileWriteHashEntryUint64(file, "rsi", context.__ss.__rsi); - FIRCLSFileWriteHashEntryUint64(file, "rbp", context.__ss.__rbp); - FIRCLSFileWriteHashEntryUint64(file, "rsp", context.__ss.__rsp); - FIRCLSFileWriteHashEntryUint64(file, "r8", context.__ss.__r8); - FIRCLSFileWriteHashEntryUint64(file, "r9", context.__ss.__r9); - FIRCLSFileWriteHashEntryUint64(file, "r10", context.__ss.__r10); - FIRCLSFileWriteHashEntryUint64(file, "r11", context.__ss.__r11); - FIRCLSFileWriteHashEntryUint64(file, "r12", context.__ss.__r12); - FIRCLSFileWriteHashEntryUint64(file, "r13", context.__ss.__r13); - FIRCLSFileWriteHashEntryUint64(file, "r14", context.__ss.__r14); - FIRCLSFileWriteHashEntryUint64(file, "r15", context.__ss.__r15); - FIRCLSFileWriteHashEntryUint64(file, "rip", context.__ss.__rip); - FIRCLSFileWriteHashEntryUint64(file, "rflags", context.__ss.__rflags); - FIRCLSFileWriteHashEntryUint64(file, "cs", context.__ss.__cs); - FIRCLSFileWriteHashEntryUint64(file, "fs", context.__ss.__fs); - FIRCLSFileWriteHashEntryUint64(file, "gs", context.__ss.__gs); -#endif - - return true; -} - -static bool FIRCLSProcessRecordThread(FIRCLSProcess *process, thread_t thread, FIRCLSFile *file) { - FIRCLSUnwindContext unwindContext; - FIRCLSThreadContext context; - - if (!FIRCLSProcessGetThreadState(process, thread, &context)) { - FIRCLSSDKLogError("unable to get thread state"); - return false; - } - - if (!FIRCLSUnwindInit(&unwindContext, context)) { - FIRCLSSDKLog("unable to init unwind context\n"); - - return false; - } - - FIRCLSFileWriteHashStart(file); - - // registers - FIRCLSFileWriteHashKey(file, "registers"); - FIRCLSFileWriteHashStart(file); - - FIRCLSProcessRecordThreadRegisters(context, file); - - FIRCLSFileWriteHashEnd(file); - - // stacktrace - FIRCLSFileWriteHashKey(file, "stacktrace"); - - // stacktrace is an array of integers - FIRCLSFileWriteArrayStart(file); - - uint32_t repeatedPCCount = 0; - uint64_t repeatedPC = 0; - const FIRCLSInternalLogLevel level = _firclsContext.writable->internalLogging.logLevel; - - while (FIRCLSUnwindNextFrame(&unwindContext)) { - const uintptr_t pc = FIRCLSUnwindGetPC(&unwindContext); - const uint32_t frameCount = FIRCLSUnwindGetFrameRepeatCount(&unwindContext); - - if (repeatedPC == pc && repeatedPC != 0) { - // actively counting a recursion - repeatedPCCount = frameCount; - continue; - } - - if (frameCount >= FIRCLSUnwindInfiniteRecursionCountThreshold && repeatedPC == 0) { - repeatedPC = pc; - FIRCLSSDKLogWarn("Possible infinite recursion - suppressing logging\n"); - _firclsContext.writable->internalLogging.logLevel = FIRCLSInternalLogLevelWarn; - continue; - } - - if (repeatedPC != 0) { - // at this point, we've recorded a repeated PC, but it is now no longer - // repeating, so we can restore the logging - _firclsContext.writable->internalLogging.logLevel = level; - } - - FIRCLSFileWriteArrayEntryUint64(file, pc); - } - - FIRCLSFileWriteArrayEnd(file); - - // crashed? - if (FIRCLSProcessIsCrashedThread(process, thread)) { - FIRCLSFileWriteHashEntryBoolean(file, "crashed", true); - } - - if (repeatedPC != 0) { - FIRCLSFileWriteHashEntryUint64(file, "repeated_pc", repeatedPC); - FIRCLSFileWriteHashEntryUint64(file, "repeat_count", repeatedPCCount); - } - - // Just for extra safety, restore the logging level again. The logic - // above is fairly tricky, this is cheap, and no logging is a real pain. - _firclsContext.writable->internalLogging.logLevel = level; - - // end thread info - FIRCLSFileWriteHashEnd(file); - - return true; -} - -bool FIRCLSProcessRecordAllThreads(FIRCLSProcess *process, FIRCLSFile *file) { - uint32_t threadCount; - uint32_t i; - - threadCount = FIRCLSProcessGetThreadCount(process); - - FIRCLSFileWriteSectionStart(file, "threads"); - - FIRCLSFileWriteArrayStart(file); - - for (i = 0; i < threadCount; ++i) { - thread_t thread; - - thread = FIRCLSProcessGetThread(process, i); - - FIRCLSSDKLogInfo("recording thread %d data\n", i); - if (!FIRCLSProcessRecordThread(process, thread, file)) { - return false; - } - } - - FIRCLSFileWriteArrayEnd(file); - - FIRCLSFileWriteSectionEnd(file); - - FIRCLSSDKLogInfo("completed recording all thread data\n"); - - return true; -} - -void FIRCLSProcessRecordThreadNames(FIRCLSProcess *process, FIRCLSFile *file) { - uint32_t threadCount; - uint32_t i; - - FIRCLSFileWriteSectionStart(file, "thread_names"); - - FIRCLSFileWriteArrayStart(file); - - threadCount = FIRCLSProcessGetThreadCount(process); - for (i = 0; i < threadCount; ++i) { - thread_t thread; - char name[THREAD_NAME_BUFFER_SIZE]; - - thread = FIRCLSProcessGetThread(process, i); - - name[0] = 0; // null-terminate, just in case nothing is written - - FIRCLSProcessGetThreadName(process, thread, name, THREAD_NAME_BUFFER_SIZE); - - FIRCLSFileWriteArrayEntryString(file, name); - } - - FIRCLSFileWriteArrayEnd(file); - FIRCLSFileWriteSectionEnd(file); -} - -void FIRCLSProcessRecordDispatchQueueNames(FIRCLSProcess *process, FIRCLSFile *file) { - uint32_t threadCount; - uint32_t i; - - FIRCLSFileWriteSectionStart(file, "dispatch_queue_names"); - - FIRCLSFileWriteArrayStart(file); - - threadCount = FIRCLSProcessGetThreadCount(process); - for (i = 0; i < threadCount; ++i) { - thread_t thread; - const char *name; - - thread = FIRCLSProcessGetThread(process, i); - - name = FIRCLSProcessGetThreadDispatchQueueName(process, thread); - - FIRCLSFileWriteArrayEntryString(file, name); - } - - FIRCLSFileWriteArrayEnd(file); - FIRCLSFileWriteSectionEnd(file); -} - -#pragma mark - Othe Process Info -bool FIRCLSProcessGetMemoryUsage(uint64_t *active, - uint64_t *inactive, - uint64_t *wired, - uint64_t *freeMem) { - mach_port_t hostPort; - mach_msg_type_number_t hostSize; - vm_size_t pageSize; - vm_statistics_data_t vmStat; - - hostPort = mach_host_self(); - - hostSize = sizeof(vm_statistics_data_t) / sizeof(integer_t); - - pageSize = _firclsContext.readonly->host.pageSize; - - if (host_statistics(hostPort, HOST_VM_INFO, (host_info_t)&vmStat, &hostSize) != KERN_SUCCESS) { - FIRCLSSDKLog("Failed to get vm statistics\n"); - return false; - } - - if (!(active && inactive && wired && freeMem)) { - FIRCLSSDKLog("Invalid pointers\n"); - return false; - } - - // compute the sizes in bytes and return the values - *active = vmStat.active_count * pageSize; - *inactive = vmStat.inactive_count * pageSize; - *wired = vmStat.wire_count * pageSize; - *freeMem = vmStat.free_count * pageSize; - - return true; -} - -bool FIRCLSProcessGetInfo(FIRCLSProcess *process, - uint64_t *virtualSize, - uint64_t *residentSize, - time_value_t *userTime, - time_value_t *systemTime) { - struct task_basic_info_64 taskInfo; - mach_msg_type_number_t count; - - count = TASK_BASIC_INFO_64_COUNT; - if (task_info(process->task, TASK_BASIC_INFO_64, (task_info_t)&taskInfo, &count) != - KERN_SUCCESS) { - FIRCLSSDKLog("Failed to get task info\n"); - return false; - } - - if (!(virtualSize && residentSize && userTime && systemTime)) { - FIRCLSSDKLog("Invalid pointers\n"); - return false; - } - - *virtualSize = taskInfo.virtual_size; - *residentSize = taskInfo.resident_size; - *userTime = taskInfo.user_time; - *systemTime = taskInfo.system_time; - - return true; -} - -void FIRCLSProcessRecordStats(FIRCLSProcess *process, FIRCLSFile *file) { - uint64_t active; - uint64_t inactive; - uint64_t virtualSize; - uint64_t residentSize; - uint64_t wired; - uint64_t freeMem; - time_value_t userTime; - time_value_t systemTime; - - if (!FIRCLSProcessGetMemoryUsage(&active, &inactive, &wired, &freeMem)) { - FIRCLSSDKLog("Unable to get process memory usage\n"); - return; - } - - if (!FIRCLSProcessGetInfo(process, &virtualSize, &residentSize, &userTime, &systemTime)) { - FIRCLSSDKLog("Unable to get process stats\n"); - return; - } - - FIRCLSFileWriteSectionStart(file, "process_stats"); - - FIRCLSFileWriteHashStart(file); - - FIRCLSFileWriteHashEntryUint64(file, "active", active); - FIRCLSFileWriteHashEntryUint64(file, "inactive", inactive); - FIRCLSFileWriteHashEntryUint64(file, "wired", wired); - FIRCLSFileWriteHashEntryUint64(file, "freeMem", freeMem); // Intentionally left in, for now. Arg. - FIRCLSFileWriteHashEntryUint64(file, "free_mem", freeMem); - FIRCLSFileWriteHashEntryUint64(file, "virtual", virtualSize); - FIRCLSFileWriteHashEntryUint64(file, "resident", active); - FIRCLSFileWriteHashEntryUint64(file, "user_time", - (userTime.seconds * 1000 * 1000) + userTime.microseconds); - FIRCLSFileWriteHashEntryUint64(file, "sys_time", - (systemTime.seconds * 1000 * 1000) + systemTime.microseconds); - - FIRCLSFileWriteHashEnd(file); - - FIRCLSFileWriteSectionEnd(file); -} - -#pragma mark - Runtime Info -#define OBJC_MSG_SEND_START ((vm_address_t)objc_msgSend) -#define OBJC_MSG_SEND_SUPER_START ((vm_address_t)objc_msgSendSuper) -#define OBJC_MSG_SEND_END (OBJC_MSG_SEND_START + 66) -#define OBJC_MSG_SEND_SUPER_END (OBJC_MSG_SEND_SUPER_START + 66) - -#if !CLS_CPU_ARM64 -#define OBJC_MSG_SEND_STRET_START ((vm_address_t)objc_msgSend_stret) -#define OBJC_MSG_SEND_SUPER_STRET_START ((vm_address_t)objc_msgSendSuper_stret) -#define OBJC_MSG_SEND_STRET_END (OBJC_MSG_SEND_STRET_START + 66) -#define OBJC_MSG_SEND_SUPER_STRET_END (OBJC_MSG_SEND_SUPER_STRET_START + 66) -#endif - -#if CLS_CPU_X86 -#define OBJC_MSG_SEND_FPRET_START ((vm_address_t)objc_msgSend_fpret) -#define OBJC_MSG_SEND_FPRET_END (OBJC_MSG_SEND_FPRET_START + 66) -#endif - -static const char *FIRCLSProcessGetObjCSelectorName(FIRCLSThreadContext registers) { - void *selectorAddress; - void *selRegister; -#if !CLS_CPU_ARM64 - void *stretSelRegister; -#endif - vm_address_t pc; - - // First, did we crash in objc_msgSend? The two ways I can think - // of doing this are to use dladdr, and then comparing the strings to - // objc_msg*, or looking up the symbols, and guessing if we are "close enough". - - selectorAddress = NULL; - -#if CLS_CPU_ARM - pc = registers.__ss.__pc; - selRegister = (void *)registers.__ss.__r[1]; - stretSelRegister = (void *)registers.__ss.__r[2]; -#elif CLS_CPU_ARM64 - pc = FIRCLSThreadContextGetPC(®isters); - selRegister = (void *)registers.__ss.__x[1]; -#elif CLS_CPU_I386 - pc = registers.__ss.__eip; - selRegister = (void *)registers.__ss.__ecx; - stretSelRegister = (void *)registers.__ss.__ecx; -#elif CLS_CPU_X86_64 - pc = registers.__ss.__rip; - selRegister = (void *)registers.__ss.__rsi; - stretSelRegister = (void *)registers.__ss.__rdx; -#endif - - if ((pc >= OBJC_MSG_SEND_START) && (pc <= OBJC_MSG_SEND_END)) { - selectorAddress = selRegister; - } - -#if !CLS_CPU_ARM64 - if ((pc >= OBJC_MSG_SEND_SUPER_START) && (pc <= OBJC_MSG_SEND_SUPER_END)) { - selectorAddress = selRegister; - } - - if ((pc >= OBJC_MSG_SEND_STRET_START) && (pc <= OBJC_MSG_SEND_STRET_END)) { - selectorAddress = stretSelRegister; - } - - if ((pc >= OBJC_MSG_SEND_SUPER_STRET_START) && (pc <= OBJC_MSG_SEND_SUPER_STRET_END)) { - selectorAddress = stretSelRegister; - } - -#if CLS_CPU_X86 - if ((pc >= OBJC_MSG_SEND_FPRET_START) && (pc <= OBJC_MSG_SEND_FPRET_END)) { - selectorAddress = selRegister; - } -#endif -#endif - - if (!selectorAddress) { - return ""; - } - - if (!FIRCLSReadString((vm_address_t)selectorAddress, (char **)&selectorAddress, 128)) { - FIRCLSSDKLog("Unable to read the selector string\n"); - return ""; - } - - return selectorAddress; -} - -#define CRASH_ALIGN __attribute__((aligned(8))) -typedef struct { - unsigned version CRASH_ALIGN; - const char *message CRASH_ALIGN; - const char *signature CRASH_ALIGN; - const char *backtrace CRASH_ALIGN; - const char *message2 CRASH_ALIGN; - void *reserved CRASH_ALIGN; - void *reserved2 CRASH_ALIGN; -} crash_info_t; - -static void FIRCLSProcessRecordCrashInfo(FIRCLSFile *file) { - // TODO: this should be abstracted into binary images, if possible - FIRCLSBinaryImageRuntimeNode *nodes = _firclsContext.writable->binaryImage.nodes; - if (!nodes) { - FIRCLSSDKLogError("The node structure is NULL\n"); - return; - } - - for (uint32_t i = 0; i < CLS_BINARY_IMAGE_RUNTIME_NODE_COUNT; ++i) { - FIRCLSBinaryImageRuntimeNode *node = &nodes[i]; - - if (!node->crashInfo) { - continue; - } - - crash_info_t info; - - if (!FIRCLSReadMemory((vm_address_t)node->crashInfo, &info, sizeof(crash_info_t))) { - continue; - } - - FIRCLSSDKLogDebug("Found crash info with version %d\n", info.version); - - // Currently support versions 0 through 5. - // 4 was in use for a long time, but it appears that with iOS 9 / swift 2.0, the verison has - // been bumped. - if (info.version > 5) { - continue; - } - - if (!info.message) { - continue; - } - -#if CLS_BINARY_IMAGE_RUNTIME_NODE_RECORD_NAME - FIRCLSSDKLogInfo("Found crash info for %s\n", node->name); -#endif - - FIRCLSSDKLogDebug("attempting to read crash info string\n"); - - char *string = NULL; - - if (!FIRCLSReadString((vm_address_t)info.message, &string, 256)) { - FIRCLSSDKLogError("Failed to copy crash info string\n"); - continue; - } - - FIRCLSFileWriteArrayEntryHexEncodedString(file, string); - } -} - -void FIRCLSProcessRecordRuntimeInfo(FIRCLSProcess *process, FIRCLSFile *file) { - FIRCLSThreadContext mcontext; - - if (!FIRCLSProcessGetThreadState(process, process->crashedThread, &mcontext)) { - FIRCLSSDKLogError("unable to get crashed thread state"); - } - - FIRCLSFileWriteSectionStart(file, "runtime"); - - FIRCLSFileWriteHashStart(file); - - FIRCLSFileWriteHashEntryString(file, "objc_selector", FIRCLSProcessGetObjCSelectorName(mcontext)); - - FIRCLSFileWriteHashKey(file, "crash_info_entries"); - - FIRCLSFileWriteArrayStart(file); - FIRCLSProcessRecordCrashInfo(file); - FIRCLSFileWriteArrayEnd(file); - - FIRCLSFileWriteHashEnd(file); - - FIRCLSFileWriteSectionEnd(file); -} diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Components/FIRCLSProcess.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Components/FIRCLSProcess.h deleted file mode 100644 index dbe758ffd9..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Components/FIRCLSProcess.h +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#pragma once - -#include -#include - -#include "FIRCLSFile.h" - -typedef struct { - // task info - mach_port_t task; - - // thread stuff - thread_t thisThread; - thread_t crashedThread; - thread_act_array_t threads; - mach_msg_type_number_t threadCount; - void *uapVoid; // current thread state -} FIRCLSProcess; - -bool FIRCLSProcessInit(FIRCLSProcess *process, thread_t crashedThread, void *uapVoid); -bool FIRCLSProcessDestroy(FIRCLSProcess *process); -bool FIRCLSProcessDebuggerAttached(void); - -bool FIRCLSProcessSuspendAllOtherThreads(FIRCLSProcess *process); -bool FIRCLSProcessResumeAllOtherThreads(FIRCLSProcess *process); - -void FIRCLSProcessRecordThreadNames(FIRCLSProcess *process, FIRCLSFile *file); -void FIRCLSProcessRecordDispatchQueueNames(FIRCLSProcess *process, FIRCLSFile *file); -bool FIRCLSProcessRecordAllThreads(FIRCLSProcess *process, FIRCLSFile *file); -void FIRCLSProcessRecordStats(FIRCLSProcess *process, FIRCLSFile *file); -void FIRCLSProcessRecordRuntimeInfo(FIRCLSProcess *process, FIRCLSFile *file); diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Components/FIRCLSUserLogging.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Components/FIRCLSUserLogging.h deleted file mode 100644 index e1ee897d6b..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Components/FIRCLSUserLogging.h +++ /dev/null @@ -1,101 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#pragma once - -#include "FIRCLSFile.h" - -__BEGIN_DECLS - -#ifdef __OBJC__ -extern NSString* const FIRCLSStartTimeKey; -extern NSString* const FIRCLSFirstRunloopTurnTimeKey; -extern NSString* const FIRCLSInBackgroundKey; -#if TARGET_OS_IPHONE -extern NSString* const FIRCLSDeviceOrientationKey; -extern NSString* const FIRCLSUIOrientationKey; -#endif -extern NSString* const FIRCLSUserIdentifierKey; -extern NSString* const FIRCLSUserNameKey; -extern NSString* const FIRCLSUserEmailKey; -extern NSString* const FIRCLSDevelopmentPlatformNameKey; -extern NSString* const FIRCLSDevelopmentPlatformVersionKey; -#endif - -extern const uint32_t FIRCLSUserLoggingMaxKVEntries; - -typedef struct { - const char* incrementalPath; - const char* compactedPath; - - uint32_t maxIncrementalCount; - uint32_t maxCount; -} FIRCLSUserLoggingKVStorage; - -typedef struct { - const char* aPath; - const char* bPath; - uint32_t maxSize; - uint32_t maxEntries; - bool restrictBySize; - uint32_t* entryCount; -} FIRCLSUserLoggingABStorage; - -typedef struct { - FIRCLSUserLoggingKVStorage userKVStorage; - FIRCLSUserLoggingKVStorage internalKVStorage; - - FIRCLSUserLoggingABStorage logStorage; - FIRCLSUserLoggingABStorage errorStorage; - FIRCLSUserLoggingABStorage customExceptionStorage; -} FIRCLSUserLoggingReadOnlyContext; - -typedef struct { - const char* activeUserLogPath; - const char* activeErrorLogPath; - const char* activeCustomExceptionPath; - uint32_t userKVCount; - uint32_t internalKVCount; - uint32_t errorsCount; -} FIRCLSUserLoggingWritableContext; - -void FIRCLSUserLoggingInit(FIRCLSUserLoggingReadOnlyContext* roContext, - FIRCLSUserLoggingWritableContext* rwContext); - -#ifdef __OBJC__ -void FIRCLSUserLoggingRecordUserKeyValue(NSString* key, id value); -void FIRCLSUserLoggingRecordInternalKeyValue(NSString* key, id value); -void FIRCLSUserLoggingWriteInternalKeyValue(NSString* key, NSString* value); - -void FIRCLSUserLoggingRecordError(NSError* error, NSDictionary* additionalUserInfo); - -NSDictionary* FIRCLSUserLoggingGetCompactedKVEntries(FIRCLSUserLoggingKVStorage* storage, - bool decodeHex); -void FIRCLSUserLoggingCompactKVEntries(FIRCLSUserLoggingKVStorage* storage); - -void FIRCLSUserLoggingRecordKeyValue(NSString* key, - id value, - FIRCLSUserLoggingKVStorage* storage, - uint32_t* counter); - -void FIRCLSUserLoggingWriteAndCheckABFiles(FIRCLSUserLoggingABStorage* storage, - const char** activePath, - void (^openedFileBlock)(FIRCLSFile* file)); - -NSArray* FIRCLSUserLoggingStoredKeyValues(const char* path); - -OBJC_EXTERN void FIRCLSLog(NSString* format, ...) NS_FORMAT_FUNCTION(1, 2); -#endif - -__END_DECLS diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Components/FIRCLSUserLogging.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Components/FIRCLSUserLogging.m deleted file mode 100644 index 0bb768cfea..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Components/FIRCLSUserLogging.m +++ /dev/null @@ -1,523 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "FIRCLSUserLogging.h" - -#include - -#include "FIRCLSGlobals.h" -#include "FIRCLSUtility.h" - -#import "FIRCLSReportManager_Private.h" - -NSString *const FIRCLSStartTimeKey = @"com.crashlytics.kit-start-time"; -NSString *const FIRCLSFirstRunloopTurnTimeKey = @"com.crashlytics.first-run-loop-time"; -NSString *const FIRCLSInBackgroundKey = @"com.crashlytics.in-background"; -#if TARGET_OS_IPHONE -NSString *const FIRCLSDeviceOrientationKey = @"com.crashlytics.device-orientation"; -NSString *const FIRCLSUIOrientationKey = @"com.crashlytics.ui-orientation"; -#endif -NSString *const FIRCLSUserIdentifierKey = @"com.crashlytics.user-id"; -NSString *const FIRCLSDevelopmentPlatformNameKey = @"com.crashlytics.development-platform-name"; -NSString *const FIRCLSDevelopmentPlatformVersionKey = - @"com.crashlytics.development-platform-version"; - -const uint32_t FIRCLSUserLoggingMaxKVEntries = 64; - -#pragma mark - Prototypes -static void FIRCLSUserLoggingWriteKeyValue(NSString *key, - NSString *value, - FIRCLSUserLoggingKVStorage *storage, - uint32_t *counter); -static void FIRCLSUserLoggingCheckAndSwapABFiles(FIRCLSUserLoggingABStorage *storage, - const char **activePath, - off_t fileSize); -void FIRCLSLogInternal(NSString *message); - -#pragma mark - Setup -void FIRCLSUserLoggingInit(FIRCLSUserLoggingReadOnlyContext *roContext, - FIRCLSUserLoggingWritableContext *rwContext) { - rwContext->activeUserLogPath = roContext->logStorage.aPath; - rwContext->activeErrorLogPath = roContext->errorStorage.aPath; - rwContext->activeCustomExceptionPath = roContext->customExceptionStorage.aPath; - - rwContext->userKVCount = 0; - rwContext->internalKVCount = 0; - rwContext->errorsCount = 0; - - roContext->userKVStorage.maxIncrementalCount = FIRCLSUserLoggingMaxKVEntries; - roContext->internalKVStorage.maxIncrementalCount = roContext->userKVStorage.maxIncrementalCount; -} - -#pragma mark - KV Logging -void FIRCLSUserLoggingRecordInternalKeyValue(NSString *key, id value) { - FIRCLSUserLoggingRecordKeyValue(key, value, &_firclsContext.readonly->logging.internalKVStorage, - &_firclsContext.writable->logging.internalKVCount); -} - -void FIRCLSUserLoggingWriteInternalKeyValue(NSString *key, NSString *value) { - // Unsynchronized - must be run on the correct queue - FIRCLSUserLoggingWriteKeyValue(key, value, &_firclsContext.readonly->logging.internalKVStorage, - &_firclsContext.writable->logging.internalKVCount); -} - -void FIRCLSUserLoggingRecordUserKeyValue(NSString *key, id value) { - FIRCLSUserLoggingRecordKeyValue(key, value, &_firclsContext.readonly->logging.userKVStorage, - &_firclsContext.writable->logging.userKVCount); -} - -static id FIRCLSUserLoggingGetComponent(NSDictionary *entry, - NSString *componentName, - bool decodeHex) { - id value = [entry objectForKey:componentName]; - - return (decodeHex && value != [NSNull null]) ? FIRCLSFileHexDecodeString([value UTF8String]) - : value; -} - -static NSString *FIRCLSUserLoggingGetKey(NSDictionary *entry, bool decodeHex) { - return FIRCLSUserLoggingGetComponent(entry, @"key", decodeHex); -} - -static id FIRCLSUserLoggingGetValue(NSDictionary *entry, bool decodeHex) { - return FIRCLSUserLoggingGetComponent(entry, @"value", decodeHex); -} - -NSDictionary *FIRCLSUserLoggingGetCompactedKVEntries(FIRCLSUserLoggingKVStorage *storage, - bool decodeHex) { - if (!FIRCLSIsValidPointer(storage)) { - FIRCLSSDKLogError("storage invalid\n"); - return nil; - } - - NSArray *incrementalKVs = FIRCLSUserLoggingStoredKeyValues(storage->incrementalPath); - NSArray *compactedKVs = FIRCLSUserLoggingStoredKeyValues(storage->compactedPath); - - NSMutableDictionary *finalKVSet = [NSMutableDictionary new]; - - // These should all be unique, so there might be a more efficient way to - // do this - for (NSDictionary *entry in compactedKVs) { - NSString *key = FIRCLSUserLoggingGetKey(entry, decodeHex); - NSString *value = FIRCLSUserLoggingGetValue(entry, decodeHex); - - if (!key || !value) { - FIRCLSSDKLogError("compacted key/value contains a nil and must be dropped\n"); - continue; - } - - [finalKVSet setObject:value forKey:key]; - } - - // Now, assign the incremental values, in file order, so we overwrite any older values. - for (NSDictionary *entry in incrementalKVs) { - NSString *key = FIRCLSUserLoggingGetKey(entry, decodeHex); - NSString *value = FIRCLSUserLoggingGetValue(entry, decodeHex); - - if (!key || !value) { - FIRCLSSDKLogError("incremental key/value contains a nil and must be dropped\n"); - continue; - } - - if ([value isEqual:[NSNull null]]) { - [finalKVSet removeObjectForKey:key]; - } else { - [finalKVSet setObject:value forKey:key]; - } - } - - return finalKVSet; -} - -void FIRCLSUserLoggingCompactKVEntries(FIRCLSUserLoggingKVStorage *storage) { - if (!FIRCLSIsValidPointer(storage)) { - FIRCLSSDKLogError("Error: storage invalid\n"); - return; - } - - NSDictionary *finalKVs = FIRCLSUserLoggingGetCompactedKVEntries(storage, false); - - if (unlink(storage->compactedPath) != 0) { - FIRCLSSDKLog("Error: Unable to remove compacted KV store before compaction %s\n", - strerror(errno)); - } - - FIRCLSFile file; - - if (!FIRCLSFileInitWithPath(&file, storage->compactedPath, true)) { - FIRCLSSDKLog("Error: Unable to open compacted k-v file\n"); - return; - } - - uint32_t maxCount = storage->maxCount; - if ([finalKVs count] > maxCount) { - // We need to remove keys, to avoid going over the max. - // This is just about the worst way to go about doing this. There are lots of smarter ways, - // but it's very uncommon to go down this path. - NSArray *keys = [finalKVs allKeys]; - - FIRCLSSDKLogInfo("Truncating KV set, which is above max %d\n", maxCount); - - finalKVs = - [finalKVs dictionaryWithValuesForKeys:[keys subarrayWithRange:NSMakeRange(0, maxCount)]]; - } - - for (NSString *key in finalKVs) { - NSString *value = [finalKVs objectForKey:key]; - - FIRCLSFileWriteSectionStart(&file, "kv"); - FIRCLSFileWriteHashStart(&file); - // tricky - the values stored incrementally have already been hex-encoded - FIRCLSFileWriteHashEntryString(&file, "key", [key UTF8String]); - FIRCLSFileWriteHashEntryString(&file, "value", [value UTF8String]); - FIRCLSFileWriteHashEnd(&file); - FIRCLSFileWriteSectionEnd(&file); - } - - FIRCLSFileClose(&file); - - if (unlink(storage->incrementalPath) != 0) { - FIRCLSSDKLog("Error: Unable to remove incremental KV store after compaction %s\n", - strerror(errno)); - } -} - -void FIRCLSUserLoggingRecordKeyValue(NSString *key, - id value, - FIRCLSUserLoggingKVStorage *storage, - uint32_t *counter) { - if (!FIRCLSIsValidPointer(key)) { - FIRCLSSDKLogWarn("User provided bad key\n"); - return; - } - - // ensure that any invalid pointer is actually set to nil - if (!FIRCLSIsValidPointer(value) && value != nil) { - FIRCLSSDKLogWarn("Bad value pointer being clamped to nil\n"); - value = nil; - } - - if (!FIRCLSContextIsInitialized()) { - return; - } - - if ([value respondsToSelector:@selector(description)]) { - value = [value description]; - } else { - // passing nil will result in a JSON null being written, which is deserialized as [NSNull null], - // signaling to remove the key during compaction - value = nil; - } - - dispatch_sync(FIRCLSGetLoggingQueue(), ^{ - FIRCLSUserLoggingWriteKeyValue(key, value, storage, counter); - }); -} - -static void FIRCLSUserLoggingWriteKeyValue(NSString *key, - NSString *value, - FIRCLSUserLoggingKVStorage *storage, - uint32_t *counter) { - FIRCLSFile file; - - if (!FIRCLSIsValidPointer(storage) || !FIRCLSIsValidPointer(counter)) { - FIRCLSSDKLogError("Bad parameters\n"); - return; - } - - if (!FIRCLSFileInitWithPath(&file, storage->incrementalPath, true)) { - FIRCLSSDKLogError("Unable to open k-v file\n"); - return; - } - - FIRCLSFileWriteSectionStart(&file, "kv"); - FIRCLSFileWriteHashStart(&file); - FIRCLSFileWriteHashEntryHexEncodedString(&file, "key", [key UTF8String]); - FIRCLSFileWriteHashEntryHexEncodedString(&file, "value", [value UTF8String]); - FIRCLSFileWriteHashEnd(&file); - FIRCLSFileWriteSectionEnd(&file); - - FIRCLSFileClose(&file); - - *counter += 1; - if (*counter >= storage->maxIncrementalCount) { - dispatch_async(FIRCLSGetLoggingQueue(), ^{ - FIRCLSUserLoggingCompactKVEntries(storage); - *counter = 0; - }); - } -} - -NSArray *FIRCLSUserLoggingStoredKeyValues(const char *path) { - if (!FIRCLSContextIsInitialized()) { - return nil; - } - - return FIRCLSFileReadSections(path, true, ^NSObject *(id obj) { - return [obj objectForKey:@"kv"]; - }); -} - -#pragma mark - NSError Logging -static void FIRCLSUserLoggingRecordErrorUserInfo(FIRCLSFile *file, - const char *fileKey, - NSDictionary *userInfo) { - if ([userInfo count] == 0) { - return; - } - - FIRCLSFileWriteHashKey(file, fileKey); - FIRCLSFileWriteArrayStart(file); - - for (id key in userInfo) { - id value = [userInfo objectForKey:key]; - if (![value respondsToSelector:@selector(description)]) { - continue; - } - - FIRCLSFileWriteArrayStart(file); - FIRCLSFileWriteArrayEntryHexEncodedString(file, [key UTF8String]); - FIRCLSFileWriteArrayEntryHexEncodedString(file, [[value description] UTF8String]); - FIRCLSFileWriteArrayEnd(file); - } - - FIRCLSFileWriteArrayEnd(file); -} - -static void FIRCLSUserLoggingWriteError(FIRCLSFile *file, - NSError *error, - NSDictionary *additionalUserInfo, - NSArray *addresses, - uint64_t timestamp) { - FIRCLSFileWriteSectionStart(file, "error"); - FIRCLSFileWriteHashStart(file); - FIRCLSFileWriteHashEntryHexEncodedString(file, "domain", [[error domain] UTF8String]); - FIRCLSFileWriteHashEntryInt64(file, "code", [error code]); - FIRCLSFileWriteHashEntryUint64(file, "time", timestamp); - - // addresses - FIRCLSFileWriteHashKey(file, "stacktrace"); - FIRCLSFileWriteArrayStart(file); - for (NSNumber *address in addresses) { - FIRCLSFileWriteArrayEntryUint64(file, [address unsignedLongLongValue]); - } - FIRCLSFileWriteArrayEnd(file); - - // user-info - FIRCLSUserLoggingRecordErrorUserInfo(file, "info", [error userInfo]); - FIRCLSUserLoggingRecordErrorUserInfo(file, "extra_info", additionalUserInfo); - - FIRCLSFileWriteHashEnd(file); - FIRCLSFileWriteSectionEnd(file); -} - -void FIRCLSUserLoggingRecordError(NSError *error, - NSDictionary *additionalUserInfo) { - if (!error) { - return; - } - - if (!FIRCLSContextIsInitialized()) { - return; - } - - // record the stacktrace and timestamp here, so we - // are as close as possible to the user's log statement - NSArray *addresses = [NSThread callStackReturnAddresses]; - uint64_t timestamp = time(NULL); - - FIRCLSUserLoggingWriteAndCheckABFiles( - &_firclsContext.readonly->logging.errorStorage, - &_firclsContext.writable->logging.activeErrorLogPath, ^(FIRCLSFile *file) { - FIRCLSUserLoggingWriteError(file, error, additionalUserInfo, addresses, timestamp); - }); -} - -#pragma mark - CLSLog Support -void FIRCLSLog(NSString *format, ...) { - // If the format is nil do nothing just like NSLog. - if (!format) { - return; - } - - va_list args; - va_start(args, format); - NSString *msg = [[NSString alloc] initWithFormat:format arguments:args]; - va_end(args); - - FIRCLSLogInternal(msg); -} - -#pragma mark - Properties -uint32_t FIRCLSUserLoggingMaxLogSize(void) { - // don't forget that the message encoding overhead is 2x, and we - // wrap everything in a json structure with time. So, there is - // quite a penalty - - uint32_t size = 1024 * 64; - - return size * 2; -} - -uint32_t FIRCLSUserLoggingMaxErrorSize(void) { - return FIRCLSUserLoggingMaxLogSize(); -} - -#pragma mark - AB Logging -void FIRCLSUserLoggingCheckAndSwapABFiles(FIRCLSUserLoggingABStorage *storage, - const char **activePath, - off_t fileSize) { - if (!activePath || !storage) { - return; - } - - if (!*activePath) { - return; - } - - if (storage->restrictBySize) { - if (fileSize <= storage->maxSize) { - return; - } - } else { - if (!FIRCLSIsValidPointer(storage->entryCount)) { - FIRCLSSDKLogError("Error: storage has invalid pointer, but is restricted by entry count\n"); - return; - } - - if (*storage->entryCount < storage->maxEntries) { - return; - } - - // Here we have rolled over, so we have to reset our counter. - *storage->entryCount = 0; - } - - // if it is too big: - // - reset the other log - // - make it active - const char *otherPath = NULL; - - if (*activePath == storage->aPath) { - otherPath = storage->bPath; - } else { - // take this path if the pointer is invalid as well, to reset - otherPath = storage->aPath; - } - - // guard here against path being nil or empty - NSString *pathString = [NSString stringWithUTF8String:otherPath]; - - if ([pathString length] > 0) { - // ignore the error, because there is nothing we can do to recover here, and its likely - // any failures would be intermittent - - [[NSFileManager defaultManager] removeItemAtPath:pathString error:nil]; - } - - *activePath = otherPath; -} - -void FIRCLSUserLoggingWriteAndCheckABFiles(FIRCLSUserLoggingABStorage *storage, - const char **activePath, - void (^openedFileBlock)(FIRCLSFile *file)) { - if (!storage || !activePath || !openedFileBlock) { - return; - } - - if (!*activePath) { - return; - } - - if (storage->restrictBySize) { - if (storage->maxSize == 0) { - return; - } - } else { - if (storage->maxEntries == 0) { - return; - } - } - - dispatch_sync(FIRCLSGetLoggingQueue(), ^{ - FIRCLSFile file; - - if (!FIRCLSFileInitWithPath(&file, *activePath, true)) { - FIRCLSSDKLog("Unable to open log file\n"); - return; - } - - openedFileBlock(&file); - - off_t fileSize = 0; - FIRCLSFileCloseWithOffset(&file, &fileSize); - - // increment the count before calling FIRCLSUserLoggingCheckAndSwapABFiles, so the value - // reflects the actual amount of stuff written - if (!storage->restrictBySize && FIRCLSIsValidPointer(storage->entryCount)) { - *storage->entryCount += 1; - } - - dispatch_async(FIRCLSGetLoggingQueue(), ^{ - FIRCLSUserLoggingCheckAndSwapABFiles(storage, activePath, fileSize); - }); - }); -} - -void FIRCLSLogInternalWrite(FIRCLSFile *file, NSString *message, uint64_t time) { - FIRCLSFileWriteSectionStart(file, "log"); - FIRCLSFileWriteHashStart(file); - FIRCLSFileWriteHashEntryHexEncodedString(file, "msg", [message UTF8String]); - FIRCLSFileWriteHashEntryUint64(file, "time", time); - FIRCLSFileWriteHashEnd(file); - FIRCLSFileWriteSectionEnd(file); -} - -void FIRCLSLogInternal(NSString *message) { - if (!message) { - return; - } - - if (!FIRCLSContextIsInitialized()) { - FIRCLSWarningLog(@"WARNING: FIRCLSLog has been used before (or concurrently with) " - @"Crashlytics initialization and cannot be recorded. The message was: \n%@", - message); - return; - } - struct timeval te; - - NSUInteger messageLength = [message length]; - int maxLogSize = _firclsContext.readonly->logging.logStorage.maxSize; - - if (messageLength > maxLogSize) { - FIRCLSWarningLog( - @"WARNING: Attempted to write %zd bytes, but %d is the maximum size of the log. " - @"Truncating to %d bytes.\n", - messageLength, maxLogSize, maxLogSize); - message = [message substringToIndex:maxLogSize]; - } - - // unable to get time - abort - if (gettimeofday(&te, NULL) != 0) { - return; - } - - const uint64_t time = te.tv_sec * 1000LL + te.tv_usec / 1000; - - FIRCLSUserLoggingWriteAndCheckABFiles(&_firclsContext.readonly->logging.logStorage, - &_firclsContext.writable->logging.activeUserLogPath, - ^(FIRCLSFile *file) { - FIRCLSLogInternalWrite(file, message, time); - }); -} diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Controllers/FIRCLSNetworkClient.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Controllers/FIRCLSNetworkClient.h deleted file mode 100644 index 2c259c2960..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Controllers/FIRCLSNetworkClient.h +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import - -typedef NS_ENUM(NSInteger, FIRCLSNetworkClientErrorType) { - FIRCLSNetworkClientErrorTypeUnknown = -1, - FIRCLSNetworkClientErrorTypeFileUnreadable = -2 -}; - -extern NSString *const FIRCLSNetworkClientErrorDomain; - -@protocol FIRCLSNetworkClientDelegate; -@class FIRCLSDataCollectionToken; -@class FIRCLSFileManager; - -@interface FIRCLSNetworkClient : NSObject - -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; -- (instancetype)initWithQueue:(NSOperationQueue *)queue - fileManager:(FIRCLSFileManager *)fileManager - delegate:(id)delegate; - -@property(nonatomic, weak) id delegate; - -@property(nonatomic, readonly) NSOperationQueue *operationQueue; -@property(nonatomic, readonly) BOOL supportsBackgroundRequests; - -- (void)startUploadRequest:(NSURLRequest *)request - filePath:(NSString *)path - dataCollectionToken:(FIRCLSDataCollectionToken *)dataCollectionToken - immediately:(BOOL)immediate; - -- (void)attemptToReconnectBackgroundSessionWithCompletionBlock:(void (^)(void))completionBlock; - -@end - -@class FIRCLSNetworkClient; - -@protocol FIRCLSNetworkClientDelegate -@required -- (BOOL)networkClientCanUseBackgroundSessions:(FIRCLSNetworkClient *)client; - -@optional -- (void)networkClient:(FIRCLSNetworkClient *)client - didFinishUploadWithPath:(NSString *)path - error:(NSError *)error; - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Controllers/FIRCLSNetworkClient.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Controllers/FIRCLSNetworkClient.m deleted file mode 100644 index 5fee0ca9f4..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Controllers/FIRCLSNetworkClient.m +++ /dev/null @@ -1,366 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSNetworkClient.h" - -#import "FIRCLSApplication.h" -#import "FIRCLSByteUtility.h" -#import "FIRCLSDataCollectionToken.h" -#import "FIRCLSDefines.h" -#import "FIRCLSFileManager.h" -#import "FIRCLSNetworkResponseHandler.h" -#import "FIRCLSURLSession.h" -#import "FIRCLSURLSessionConfiguration.h" - -#import "FIRCLSUtility.h" - -NSString *const FIRCLSNetworkClientErrorDomain = @"FIRCLSNetworkError"; - -NSString *const FIRCLSNetworkClientBackgroundIdentifierSuffix = @".crash.background-session"; - -@interface FIRCLSNetworkClient () { - NSURLSession *_session; -} - -@property(nonatomic, strong) void (^backgroundCompletionHandler)(void); -@property(nonatomic, strong, readonly) NSURLSession *session; -@property(nonatomic, assign) BOOL canUseBackgroundSession; -@property(nonatomic, strong) FIRCLSFileManager *fileManager; - -@end - -@implementation FIRCLSNetworkClient - -- (instancetype)initWithQueue:(NSOperationQueue *)queue - fileManager:(FIRCLSFileManager *)fileManager - delegate:(id)delegate { - self = [super init]; - if (!self) { - return nil; - } - - _operationQueue = queue; - _delegate = delegate; - _fileManager = fileManager; - - self.canUseBackgroundSession = [_delegate networkClientCanUseBackgroundSessions:self]; - - if (!self.supportsBackgroundRequests) { - FIRCLSDeveloperLog( - "Crashlytics:Crash:Client", - @"Background session uploading not supported, asynchronous uploading will be used"); - } - - return self; -} - -#pragma mark - Background Support -- (NSURLSession *)session { - // Creating a NSURLSession takes some time. Doing it lazily saves us time in the normal case. - if (_session) { - return _session; - } - - NSURLSessionConfiguration *config = nil; - - Class urlSessionClass; - Class urlSessionConfigurationClass; -#if FIRCLSURLSESSION_REQUIRED - urlSessionClass = [FIRCLSURLSession class]; - urlSessionConfigurationClass = [FIRCLSURLSessionConfiguration class]; -#else - urlSessionClass = [NSURLSession class]; - urlSessionConfigurationClass = [NSURLSessionConfiguration class]; -#endif - - if (self.supportsBackgroundRequests) { - NSString *sdkBundleID = FIRCLSApplicationGetSDKBundleID(); - NSString *backgroundConfigName = - [sdkBundleID stringByAppendingString:FIRCLSNetworkClientBackgroundIdentifierSuffix]; - - config = [urlSessionConfigurationClass backgroundSessionConfiguration:backgroundConfigName]; -#if TARGET_OS_IPHONE - [config setSessionSendsLaunchEvents:NO]; -#endif - } - - if (!config) { - // take this code path if we don't support background requests OR if we failed to create a - // background configuration - config = [urlSessionConfigurationClass defaultSessionConfiguration]; - } - - _session = [urlSessionClass sessionWithConfiguration:config - delegate:self - delegateQueue:self.operationQueue]; - - if (!_session || !config) { - FIRCLSErrorLog(@"Failed to initialize"); - } - - return _session; -} - -#if FIRCLSURLSESSION_REQUIRED -- (BOOL)NSURLSessionAvailable { - if ([[FIRCLSURLSession class] respondsToSelector:@selector(NSURLSessionShouldBeUsed)]) { - return [FIRCLSURLSession NSURLSessionShouldBeUsed]; - } - - return NSClassFromString(@"NSURLSession") != nil; -} -#endif - -- (BOOL)supportsBackgroundRequests { - return !FIRCLSApplicationIsExtension() -#if FIRCLSURLSESSION_REQUIRED - && [self NSURLSessionAvailable] -#endif - && self.canUseBackgroundSession; -} - -- (void)attemptToReconnectBackgroundSessionWithCompletionBlock:(void (^)(void))completionBlock { - if (!self.supportsBackgroundRequests) { - if (completionBlock) { - completionBlock(); - } - return; - } - - // This is the absolute minimum necessary. Perhaps we can do better? - if (completionBlock) { - [[NSOperationQueue mainQueue] addOperationWithBlock:completionBlock]; - } -} - -#pragma mark - API -- (void)startUploadRequest:(NSURLRequest *)request - filePath:(NSString *)path - dataCollectionToken:(FIRCLSDataCollectionToken *)dataCollectionToken - immediately:(BOOL)immediate { - if (![dataCollectionToken isValid]) { - FIRCLSErrorLog(@"An upload was requested with an invalid data collection token."); - return; - } - - if (immediate) { - [self startImmediateUploadRequest:request filePath:path]; - return; - } - - NSString *description = [self relativeTaskPathForAbsolutePath:path]; - [self checkForExistingTaskMatchingDescription:description - completionBlock:^(BOOL found) { - if (found) { - FIRCLSDeveloperLog( - "Crashlytics:Crash:Client", - @"A task currently exists for this upload, skipping"); - return; - } - - [self startNewUploadRequest:request filePath:path]; - }]; -} - -#pragma mark - Support API -- (void)startImmediateUploadRequest:(NSURLRequest *)request filePath:(NSString *)path { - // check the ivar directly, to avoid going back to the delegate - if (self.supportsBackgroundRequests) { - // this can be done here, because the request will be started synchronously. - [self startNewUploadRequest:request filePath:path]; - return; - } - - if (![[NSFileManager defaultManager] isReadableFileAtPath:path]) { - FIRCLSSDKLog("Error: file unreadable\n"); - // Following the same logic as below, do not try to inform the delegate - return; - } - - NSMutableURLRequest *mutableRequest = [request mutableCopy]; - - [mutableRequest setHTTPBodyStream:[NSInputStream inputStreamWithFileAtPath:path]]; - - NSURLResponse *requestResponse = nil; - - [[NSURLSession sharedSession] - dataTaskWithRequest:mutableRequest - completionHandler:^(NSData *_Nullable data, NSURLResponse *_Nullable response, - NSError *_Nullable error) { - [FIRCLSNetworkResponseHandler - clientResponseType:requestResponse - handler:^(FIRCLSNetworkClientResponseType type, NSInteger statusCode) { - if (type != FIRCLSNetworkClientResponseSuccess) { - // don't even inform the delegate of a failure here, because we don't - // want any action to be taken synchronously - return; - } - - [[self delegate] networkClient:self - didFinishUploadWithPath:path - error:error]; - }]; - }]; -} - -- (void)startNewUploadRequest:(NSURLRequest *)request filePath:(NSString *)path { - if (![[NSFileManager defaultManager] isReadableFileAtPath:path]) { - [self.operationQueue addOperationWithBlock:^{ - [self - handleTaskDescription:path - completedWithError:[NSError errorWithDomain:FIRCLSNetworkClientErrorDomain - code:FIRCLSNetworkClientErrorTypeFileUnreadable - userInfo:@{@"path" : path}]]; - }]; - - return; - } - - NSURLSessionUploadTask *task = [self.session uploadTaskWithRequest:request - fromFile:[NSURL fileURLWithPath:path]]; - - // set the description, so we can determine what file was successfully uploaded later on - [task setTaskDescription:[self relativeTaskPathForAbsolutePath:path]]; - - [task resume]; -} - -- (NSString *)rootPath { - return self.fileManager.rootPath; -} - -- (NSString *)absolutePathForRelativeTaskPath:(NSString *)path { - return [self.rootPath stringByAppendingPathComponent:path]; -} - -- (NSString *)relativeTaskPathForAbsolutePath:(NSString *)path { - // make sure this has a tailing slash, so the path looks relative - NSString *root = [self.rootPath stringByAppendingString:@"/"]; - - if (![path hasPrefix:root]) { - FIRCLSSDKLog("Error: path '%s' is not at the root '%s'", [path UTF8String], [root UTF8String]); - return nil; - } - - return [path stringByReplacingOccurrencesOfString:root withString:@""]; -} - -#pragma mark - Task Management -- (BOOL)taskArray:(NSArray *)array hasTaskMatchingDescription:(NSString *)description { - NSUInteger idx = [array indexOfObjectPassingTest:^BOOL(id obj, NSUInteger arrayIdx, BOOL *stop) { - return [[obj taskDescription] isEqualToString:description]; - }]; - - return idx != NSNotFound; -} - -- (void)checkSession:(NSURLSession *)session - forTasksMatchingDescription:(NSString *)description - completionBlock:(void (^)(BOOL found))block { - if (!session) { - block(NO); - return; - } - - [session getTasksWithCompletionHandler:^(NSArray *dataTasks, NSArray *uploadTasks, - NSArray *downloadTasks) { - if ([self taskArray:uploadTasks hasTaskMatchingDescription:description]) { - block(YES); - return; - } - - if ([self taskArray:dataTasks hasTaskMatchingDescription:description]) { - block(YES); - return; - } - - if ([self taskArray:downloadTasks hasTaskMatchingDescription:description]) { - block(YES); - return; - } - - block(NO); - }]; -} - -- (void)checkForExistingTaskMatchingDescription:(NSString *)description - completionBlock:(void (^)(BOOL found))block { - // Do not instantiate the normal session, because if it doesn't exist yet, it cannot possibly have - // existing tasks - [_operationQueue addOperationWithBlock:^{ - [self checkSession:self.session - forTasksMatchingDescription:description - completionBlock:^(BOOL found) { - block(found); - }]; - }]; -} - -#pragma mark - Result Handling -// This method is duplicated from FIRCLSFABNetworkClient. Sharing it is a little weird - I didn't -// feel like it fit into FIRCLSNetworkResponseHandler. -- (void)runAfterRetryValueFromResponse:(NSURLResponse *)response block:(void (^)(void))block { - NSTimeInterval delay = [FIRCLSNetworkResponseHandler retryValueForResponse:response]; - - // FIRCLSDeveloperLog("Network", @"Restarting request after %f", delay); - - FIRCLSAddOperationAfter(delay, _operationQueue, block); -} - -- (void)restartTask:(NSURLSessionTask *)task { - NSURLRequest *request = [task originalRequest]; - - [self runAfterRetryValueFromResponse:[task response] - block:^{ - NSString *path = [self - absolutePathForRelativeTaskPath:[task taskDescription]]; - - [self startNewUploadRequest:request filePath:path]; - }]; -} - -- (void)handleTask:(NSURLSessionTask *)task completedWithError:(NSError *)error { - [self handleTaskDescription:[task taskDescription] completedWithError:error]; -} - -- (void)handleTaskDescription:(NSString *)taskDescription completedWithError:(NSError *)error { - NSString *path = [self absolutePathForRelativeTaskPath:taskDescription]; - - [[self delegate] networkClient:self didFinishUploadWithPath:path error:error]; -} - -#pragma mark - NSURLSessionDelegate -- (void)URLSession:(NSURLSession *)session didBecomeInvalidWithError:(NSError *)error { - FIRCLSDeveloperLog("Crashlytics:Crash:Client", @"session became invalid: %@", error); -} - -// Careful! Not implementing this method appears to cause a crash when using a background task -- (void)URLSession:(NSURLSession *)session - task:(NSURLSessionTask *)task - didCompleteWithError:(NSError *)error { - [FIRCLSNetworkResponseHandler handleCompletedResponse:task.response - forOriginalRequest:task.originalRequest - error:error - block:^(BOOL restart, NSError *taskError) { - if (restart) { - [self restartTask:task]; - return; - } - - [self handleTask:task - completedWithError:taskError]; - }]; -} - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Controllers/FIRCLSReportManager.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Controllers/FIRCLSReportManager.h deleted file mode 100644 index 02b7031a5f..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Controllers/FIRCLSReportManager.h +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import - -#include "FIRCLSApplicationIdentifierModel.h" -#include "FIRCLSProfiling.h" -#include "FIRCrashlytics.h" - -@class FBLPromise; - -NS_ASSUME_NONNULL_BEGIN - -@class FIRCLSDataCollectionArbiter; -@class FIRCLSFileManager; -@class FIRCLSInternalReport; -@class FIRCLSSettings; -@class GDTCORTransport; -@class FIRInstallations; -@protocol FIRAnalyticsInterop; - -@interface FIRCLSReportManager : NSObject - -- (instancetype)initWithFileManager:(FIRCLSFileManager *)fileManager - installations:(FIRInstallations *)installations - analytics:(nullable id)analytics - googleAppID:(NSString *)googleAppID - dataArbiter:(FIRCLSDataCollectionArbiter *)dataArbiter - googleTransport:(GDTCORTransport *)googleTransport - appIDModel:(FIRCLSApplicationIdentifierModel *)appIDModel - settings:(FIRCLSSettings *)settings NS_DESIGNATED_INITIALIZER; -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; - -- (FBLPromise *)startWithProfilingMark:(FIRCLSProfileMark)mark; - -- (FBLPromise *)checkForUnsentReports; -- (FBLPromise *)sendUnsentReports; -- (FBLPromise *)deleteUnsentReports; - -@end - -extern NSString *const FIRCLSConfigSubmitReportsKey; -extern NSString *const FIRCLSConfigPackageReportsKey; - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Controllers/FIRCLSReportManager.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Controllers/FIRCLSReportManager.m deleted file mode 100644 index 40a42e4a2f..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Controllers/FIRCLSReportManager.m +++ /dev/null @@ -1,908 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// -// The report manager has the ability to send to two different endpoints. -// -// The old legacy flow for a report goes through the following states/folders: -// 1. active - .clsrecords optimized for crash time persistence -// 2. processing - .clsrecords with attempted symbolication -// 3. prepared-legacy - .multipartmime of compressed .clsrecords -// -// The new flow for a report goes through the following states/folders: -// 1. active - .clsrecords optimized for crash time persistence -// 2. processing - .clsrecords with attempted symbolication -// 3. prepared - .clsrecords moved from processing with no changes -// -// The code was designed so the report processing workflows are not dramatically different from one -// another. The design will help avoid having a lot of conditional code blocks throughout the -// codebase. -// - -#include - -#if __has_include() -#import -#else -#import "FBLPromises.h" -#endif - -#import "FIRCLSApplication.h" -#import "FIRCLSDataCollectionArbiter.h" -#import "FIRCLSDataCollectionToken.h" -#import "FIRCLSDefines.h" -#import "FIRCLSFeatures.h" -#import "FIRCLSFileManager.h" -#import "FIRCLSInternalReport.h" -#import "FIRCLSLogger.h" -#import "FIRCLSNetworkClient.h" -#import "FIRCLSPackageReportOperation.h" -#import "FIRCLSProcessReportOperation.h" -#import "FIRCLSReportUploader.h" -#import "FIRCLSSettings.h" -#import "FIRCLSSymbolResolver.h" -#import "FIRCLSUserLogging.h" - -#include "FIRCLSGlobals.h" -#include "FIRCLSUtility.h" - -#import "FIRCLSConstants.h" -#import "FIRCLSExecutionIdentifierModel.h" -#import "FIRCLSInstallIdentifierModel.h" -#import "FIRCLSSettingsOnboardingManager.h" - -#import "FIRCLSReportManager_Private.h" - -#include -#include -#include "FIRAEvent+Internal.h" -#include "FIRCLSFCRAnalytics.h" - -#if TARGET_OS_IPHONE -#import -#else -#import -#endif - -static NSTimeInterval const CLSReportRetryInterval = 10 * 60; - -static NSString *FIRCLSFirebaseAnalyticsEventLogFormat = @"$A$:%@"; - -@interface FIRCLSAnalyticsInteropListener : NSObject { -} -@end - -@implementation FIRCLSAnalyticsInteropListener - -- (void)messageTriggered:(NSString *)name parameters:(NSDictionary *)parameters { - NSDictionary *event = @{ - @"name" : name, - @"parameters" : parameters, - }; - NSString *json = FIRCLSFIRAEventDictionaryToJSON(event); - if (json != nil) { - FIRCLSLog(FIRCLSFirebaseAnalyticsEventLogFormat, json); - } -} - -@end - -/** - * A FIRReportAction is used to indicate how to handle unsent reports. - */ -typedef NS_ENUM(NSInteger, FIRCLSReportAction) { - /** Upload the reports to Crashlytics. */ - FIRCLSReportActionSend, - /** Delete the reports without uploading them. */ - FIRCLSReportActionDelete, -}; - -/** - * This is just a helper to make code using FIRReportAction more readable. - */ -typedef NSNumber FIRCLSWrappedReportAction; -@implementation NSNumber (FIRCLSWrappedReportAction) -- (FIRCLSReportAction)reportActionValue { - return [self intValue]; -} -@end - -/** - * This is a helper to make code using NSNumber for bools more readable. - */ -typedef NSNumber FIRCLSWrappedBool; - -@interface FIRCLSReportManager () { - FIRCLSFileManager *_fileManager; - FIRCLSNetworkClient *_networkClient; - FIRCLSReportUploader *_uploader; - dispatch_queue_t _dispatchQueue; - NSOperationQueue *_operationQueue; - id _analytics; - - // A promise that will be resolved when unsent reports are found on the device, and - // processReports: can be called to decide how to deal with them. - FBLPromise *_unsentReportsAvailable; - - // A promise that will be resolved when the user has provided an action that they want to perform - // for all the unsent reports. - FBLPromise *_reportActionProvided; - - // A promise that will be resolved when all unsent reports have been "handled". They won't - // necessarily have been uploaded, but we will know whether they should be sent or deleted, and - // the initial work to make that happen will have been processed on the work queue. - // - // Currently only used for testing - FBLPromise *_unsentReportsHandled; - - // A token to make sure that checkForUnsentReports only gets called once. - atomic_bool _checkForUnsentReportsCalled; - - BOOL _registeredAnalyticsEventListener; -} - -@property(nonatomic, readonly) NSString *googleAppID; - -@property(nonatomic, strong) FIRCLSDataCollectionArbiter *dataArbiter; - -// Uniquely identifies a build / binary of the app -@property(nonatomic, strong) FIRCLSApplicationIdentifierModel *appIDModel; - -// Uniquely identifies an install of the app -@property(nonatomic, strong) FIRCLSInstallIdentifierModel *installIDModel; - -// Uniquely identifies a run of the app -@property(nonatomic, strong) FIRCLSExecutionIdentifierModel *executionIDModel; - -// Settings fetched from the server -@property(nonatomic, strong) FIRCLSSettings *settings; - -// Runs the operations that fetch settings and call onboarding endpoints -@property(nonatomic, strong) FIRCLSSettingsOnboardingManager *settingsAndOnboardingManager; - -@property(nonatomic, strong) GDTCORTransport *googleTransport; - -@end - -@implementation FIRCLSReportManager - -// Used only for internal data collection E2E testing -static void (^reportSentCallback)(void); - -- (instancetype)initWithFileManager:(FIRCLSFileManager *)fileManager - installations:(FIRInstallations *)installations - analytics:(id)analytics - googleAppID:(NSString *)googleAppID - dataArbiter:(FIRCLSDataCollectionArbiter *)dataArbiter - googleTransport:(GDTCORTransport *)googleTransport - appIDModel:(FIRCLSApplicationIdentifierModel *)appIDModel - settings:(FIRCLSSettings *)settings { - self = [super init]; - if (!self) { - return nil; - } - - _fileManager = fileManager; - _analytics = analytics; - _googleAppID = [googleAppID copy]; - _dataArbiter = dataArbiter; - - _googleTransport = googleTransport; - - NSString *sdkBundleID = FIRCLSApplicationGetSDKBundleID(); - - _operationQueue = [NSOperationQueue new]; - [_operationQueue setMaxConcurrentOperationCount:1]; - [_operationQueue setName:[sdkBundleID stringByAppendingString:@".work-queue"]]; - - _dispatchQueue = dispatch_queue_create("com.google.firebase.crashlytics.startup", 0); - _operationQueue.underlyingQueue = _dispatchQueue; - - _networkClient = [self clientWithOperationQueue:_operationQueue]; - - _unsentReportsAvailable = [FBLPromise pendingPromise]; - _reportActionProvided = [FBLPromise pendingPromise]; - _unsentReportsHandled = [FBLPromise pendingPromise]; - - _checkForUnsentReportsCalled = NO; - - _installIDModel = [[FIRCLSInstallIdentifierModel alloc] initWithInstallations:installations]; - _executionIDModel = [[FIRCLSExecutionIdentifierModel alloc] init]; - - _settings = settings; - _appIDModel = appIDModel; - - _settingsAndOnboardingManager = - [[FIRCLSSettingsOnboardingManager alloc] initWithAppIDModel:appIDModel - installIDModel:self.installIDModel - settings:self.settings - fileManager:self.fileManager - googleAppID:self.googleAppID]; - - return self; -} - -- (FIRCLSNetworkClient *)clientWithOperationQueue:(NSOperationQueue *)queue { - return [[FIRCLSNetworkClient alloc] initWithQueue:queue fileManager:_fileManager delegate:self]; -} - -/** - * Returns the number of unsent reports on the device, including the ones passed in. - */ -- (int)unsentReportsCountWithPreexisting:(NSArray *)paths { - int count = [self countSubmittableAndDeleteUnsubmittableReportPaths:paths]; - - count += _fileManager.processingPathContents.count; - - if (self.settings.shouldUseNewReportEndpoint) { - count += _fileManager.preparedPathContents.count; - } else { - count += _fileManager.legacyPreparedPathContents.count; - } - return count; -} - -// This method returns a promise that is resolved with a wrapped FIRReportAction once the user has -// indicated whether they want to upload currently cached reports. -// This method should only be called when we have determined there is at least 1 unsent report. -// This method waits until either: -// 1. Data collection becomes enabled, in which case, the promise will be resolved with Send. -// 2. The developer uses the processCrashReports API to indicate whether the report -// should be sent or deleted, at which point the promise will be resolved with the action. -- (FBLPromise *)waitForReportAction { - FIRCLSDebugLog(@"[Crashlytics:Crash] Notifying that unsent reports are available."); - [_unsentReportsAvailable fulfill:@YES]; - - // If data collection gets enabled while we are waiting for an action, go ahead and send the - // reports, and any subsequent explicit response will be ignored. - FBLPromise *collectionEnabled = - [[self.dataArbiter waitForCrashlyticsCollectionEnabled] - then:^id _Nullable(NSNumber *_Nullable value) { - return @(FIRCLSReportActionSend); - }]; - - FIRCLSDebugLog(@"[Crashlytics:Crash] Waiting for send/deleteUnsentReports to be called."); - // Wait for either the processReports callback to be called, or data collection to be enabled. - return [FBLPromise race:@[ collectionEnabled, _reportActionProvided ]]; -} - -- (FBLPromise *)checkForUnsentReports { - bool expectedCalled = NO; - if (!atomic_compare_exchange_strong(&_checkForUnsentReportsCalled, &expectedCalled, YES)) { - FIRCLSErrorLog(@"checkForUnsentReports should only be called once per execution."); - return [FBLPromise resolvedWith:@NO]; - } - return _unsentReportsAvailable; -} - -- (FBLPromise *)sendUnsentReports { - [_reportActionProvided fulfill:@(FIRCLSReportActionSend)]; - return _unsentReportsHandled; -} - -- (FBLPromise *)deleteUnsentReports { - [_reportActionProvided fulfill:@(FIRCLSReportActionDelete)]; - return _unsentReportsHandled; -} - -- (FBLPromise *)startWithProfilingMark:(FIRCLSProfileMark)mark { - NSString *executionIdentifier = self.executionIDModel.executionID; - - // This needs to be called before any values are read from settings - NSTimeInterval currentTimestamp = [NSDate timeIntervalSinceReferenceDate]; - [self.settings reloadFromCacheWithGoogleAppID:self.googleAppID currentTimestamp:currentTimestamp]; - - if (![self validateAppIdentifiers]) { - return [FBLPromise resolvedWith:@NO]; - } - -#if DEBUG - FIRCLSDebugLog(@"Root: %@", [_fileManager rootPath]); -#endif - - if ([self.dataArbiter isLegacyDataCollectionKeyInPlist]) { - FIRCLSErrorLog(@"Found legacy data collection key in app's Info.plist: " - @"firebase_crashlytics_collection_enabled"); - FIRCLSErrorLog(@"Please update your Info.plist to use the new data collection key: " - @"FirebaseCrashlyticsCollectionEnabled"); - FIRCLSErrorLog(@"The legacy data collection Info.plist value could be overridden by " - @"calling: [Fabric with:...]"); - FIRCLSErrorLog(@"The new value can be overridden by calling: [[FIRCrashlytics " - @"crashlytics] setCrashlyticsCollectionEnabled:]"); - - return [FBLPromise resolvedWith:@NO]; - } - - if (![_fileManager createReportDirectories]) { - return [FBLPromise resolvedWith:@NO]; - } - - // Grab existing reports - BOOL launchFailure = [self checkForAndCreateLaunchMarker]; - NSArray *preexistingReportPaths = _fileManager.activePathContents; - - FIRCLSInternalReport *report = [self setupCurrentReport:executionIdentifier]; - if (!report) { - FIRCLSErrorLog(@"Unable to setup a new report"); - } - - if (![self startCrashReporterWithProfilingMark:mark report:report]) { - FIRCLSErrorLog(@"Unable to start crash reporter"); - report = nil; - } - - // Regenerate the Install ID on a background thread if it needs to rotate because - // fetching the Firebase Install ID can be slow on some devices. This should happen after we - // create the session on disk so that we can update the Install ID in the written crash report - // metadata. - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ - [self checkAndRotateInstallUUIDIfNeededWithReport:report]; - }); - - FBLPromise *promise = [FBLPromise resolvedWith:@(report != nil)]; - - if ([self.dataArbiter isCrashlyticsCollectionEnabled]) { - FIRCLSDebugLog(@"Automatic data collection is enabled."); - FIRCLSDebugLog(@"Unsent reports will be uploaded at startup"); - FIRCLSDataCollectionToken *dataCollectionToken = [FIRCLSDataCollectionToken validToken]; - - [self beginSettingsAndOnboardingWithToken:dataCollectionToken waitForSettingsRequest:NO]; - - [self beginReportUploadsWithToken:dataCollectionToken - preexistingReportPaths:preexistingReportPaths - blockingSend:launchFailure - report:report]; - - // If data collection is enabled, the SDK will not notify the user - // when unsent reports are available, or respect Send / DeleteUnsentReports - [_unsentReportsAvailable fulfill:@NO]; - - } else { - FIRCLSDebugLog(@"Automatic data collection is disabled."); - - // TODO: This counting of the file system happens on the main thread. Now that some of the other - // work below has been made async and moved to the dispatch queue, maybe we can move this code - // to the dispatch queue as well. - int unsentReportsCount = [self unsentReportsCountWithPreexisting:preexistingReportPaths]; - if (unsentReportsCount > 0) { - FIRCLSDebugLog( - @"[Crashlytics:Crash] %d unsent reports are available. Checking for upload permission.", - unsentReportsCount); - // Wait for an action to get sent, either from processReports: or automatic data collection. - promise = [[self waitForReportAction] - onQueue:_dispatchQueue - then:^id _Nullable(FIRCLSWrappedReportAction *_Nullable wrappedAction) { - // Process the actions for the reports on disk. - FIRCLSReportAction action = [wrappedAction reportActionValue]; - if (action == FIRCLSReportActionSend) { - FIRCLSDebugLog(@"Sending unsent reports."); - FIRCLSDataCollectionToken *dataCollectionToken = - [FIRCLSDataCollectionToken validToken]; - - // For the new report endpoint, the orgID is not needed. - // For the legacy report endpoint, wait on settings if orgID is not available. - BOOL waitForSetting = - !self.settings.shouldUseNewReportEndpoint && !self.settings.orgID; - - [self beginSettingsAndOnboardingWithToken:dataCollectionToken - waitForSettingsRequest:waitForSetting]; - - [self beginReportUploadsWithToken:dataCollectionToken - preexistingReportPaths:preexistingReportPaths - blockingSend:NO - report:report]; - - } else if (action == FIRCLSReportActionDelete) { - FIRCLSDebugLog(@"Deleting unsent reports."); - [self deleteUnsentReportsWithPreexisting:preexistingReportPaths]; - } else { - FIRCLSErrorLog(@"Unknown report action: %d", action); - } - return @(report != nil); - }]; - } else { - FIRCLSDebugLog(@"[Crashlytics:Crash] There are no unsent reports."); - [_unsentReportsAvailable fulfill:@NO]; - } - } - - if (report != nil) { - // capture the start-up time here, but record it asynchronously - double endMark = FIRCLSProfileEnd(mark); - - dispatch_async(FIRCLSGetLoggingQueue(), ^{ - FIRCLSUserLoggingWriteInternalKeyValue(FIRCLSStartTimeKey, [@(endMark) description]); - }); - } - - // To make the code more predictable and therefore testable, don't resolve the startup promise - // until the operations that got queued up for processing reports have been processed through the - // work queue. - NSOperationQueue *__weak queue = _operationQueue; - FBLPromise *__weak unsentReportsHandled = _unsentReportsHandled; - promise = [promise then:^id _Nullable(NSNumber *_Nullable value) { - [queue waitUntilAllOperationsAreFinished]; - // Signal that to callers of processReports that everything is finished. - [unsentReportsHandled fulfill:nil]; - return value; - }]; - - return promise; -} - -- (void)checkAndRotateInstallUUIDIfNeededWithReport:(FIRCLSInternalReport *)report { - [self.installIDModel regenerateInstallIDIfNeededWithBlock:^(BOOL didRotate) { - if (!didRotate) { - return; - } - - FIRCLSContextUpdateMetadata(report, self.settings, self.installIDModel, self->_fileManager); - }]; -} - -- (void)beginSettingsAndOnboardingWithToken:(FIRCLSDataCollectionToken *)token - waitForSettingsRequest:(BOOL)waitForSettings { - if (self.settings.isCacheExpired) { - // This method can be called more than once if the user calls - // SendUnsentReports again, so don't repeat the settings fetch - static dispatch_once_t settingsFetchOnceToken; - dispatch_once(&settingsFetchOnceToken, ^{ - [self.settingsAndOnboardingManager beginSettingsAndOnboardingWithGoogleAppId:self.googleAppID - token:token - waitForCompletion:waitForSettings]; - }); - } -} - -- (void)beginReportUploadsWithToken:(FIRCLSDataCollectionToken *)token - preexistingReportPaths:(NSArray *)preexistingReportPaths - blockingSend:(BOOL)blockingSend - report:(FIRCLSInternalReport *)report { - if (self.settings.collectReportsEnabled) { - [self processExistingReportPaths:preexistingReportPaths - dataCollectionToken:token - asUrgent:blockingSend]; - [self handleContentsInOtherReportingDirectoriesWithToken:token]; - - } else { - FIRCLSInfoLog(@"Collect crash reports is disabled"); - [self deleteUnsentReportsWithPreexisting:preexistingReportPaths]; - } -} - -- (BOOL)startCrashReporterWithProfilingMark:(FIRCLSProfileMark)mark - report:(FIRCLSInternalReport *)report { - if (!report) { - return NO; - } - - if (!FIRCLSContextInitialize(report, self.settings, self.installIDModel, _fileManager)) { - return NO; - } - - [self setupStateNotifications]; - - [self registerAnalyticsEventListener]; - - [self crashReportingSetupCompleted:mark]; - - return YES; -} - -- (void)crashReportingSetupCompleted:(FIRCLSProfileMark)mark { - // check our handlers - FIRCLSDispatchAfter(2.0, dispatch_get_main_queue(), ^{ - FIRCLSExceptionCheckHandlers((__bridge void *)(self)); - FIRCLSSignalCheckHandlers(); -#if CLS_MACH_EXCEPTION_SUPPORTED - FIRCLSMachExceptionCheckHandlers(); -#endif - }); - - // remove the launch failure marker and record the startup time - dispatch_async(dispatch_get_main_queue(), ^{ - [self removeLaunchFailureMarker]; - dispatch_async(FIRCLSGetLoggingQueue(), ^{ - FIRCLSUserLoggingWriteInternalKeyValue(FIRCLSFirstRunloopTurnTimeKey, - [@(FIRCLSProfileEnd(mark)) description]); - }); - }); -} - -- (BOOL)validateAppIdentifiers { - // When the ApplicationIdentifierModel fails to initialize, it is usually due to - // failing computeExecutableInfo. This can happen if the user sets the - // Exported Symbols File in Build Settings, and leaves off the one symbol - // that Crashlytics needs, "__mh_execute_header" (wich is defined in mach-o/ldsyms.h as - // _MH_EXECUTE_SYM). From https://github.com/firebase/firebase-ios-sdk/issues/5020 - if (!self.appIDModel) { - FIRCLSErrorLog( - @"Crashlytics could not find the symbol for the app's main function and cannot " - @"start up. This can happen when Exported Symbols File is set in Build Settings. To " - @"resolve this, add \"__mh_execute_header\" as a newline to your Exported Symbols File."); - return NO; - } - - if (self.appIDModel.bundleID.length == 0) { - FIRCLSErrorLog(@"An application must have a valid bundle identifier in its Info.plist"); - return NO; - } - - return YES; -} - -- (FIRCLSReportUploader *)uploader { - if (!_uploader) { - _uploader = [[FIRCLSReportUploader alloc] initWithQueue:self.operationQueue - delegate:self - dataSource:self - client:self.networkClient - fileManager:_fileManager - analytics:_analytics]; - } - - return _uploader; -} - -#pragma mark - Reporting Lifecycle - -- (FIRCLSInternalReport *)setupCurrentReport:(NSString *)executionIdentifier { - [self createLaunchFailureMarker]; - - NSString *reportPath = [_fileManager setupNewPathForExecutionIdentifier:executionIdentifier]; - - return [[FIRCLSInternalReport alloc] initWithPath:reportPath - executionIdentifier:executionIdentifier]; -} - -- (int)countSubmittableAndDeleteUnsubmittableReportPaths:(NSArray *)reportPaths { - int count = 0; - for (NSString *path in reportPaths) { - FIRCLSInternalReport *report = [FIRCLSInternalReport reportWithPath:path]; - if ([report needsToBeSubmitted]) { - count++; - } else { - [self.operationQueue addOperationWithBlock:^{ - [self->_fileManager removeItemAtPath:path]; - }]; - } - } - return count; -} - -- (void)processExistingReportPaths:(NSArray *)reportPaths - dataCollectionToken:(FIRCLSDataCollectionToken *)dataCollectionToken - asUrgent:(BOOL)urgent { - for (NSString *path in reportPaths) { - [self processExistingActiveReportPath:path - dataCollectionToken:dataCollectionToken - asUrgent:urgent]; - } -} - -- (void)processExistingActiveReportPath:(NSString *)path - dataCollectionToken:(FIRCLSDataCollectionToken *)dataCollectionToken - asUrgent:(BOOL)urgent { - FIRCLSInternalReport *report = [FIRCLSInternalReport reportWithPath:path]; - - // TODO: needsToBeSubmitted should really be called on the background queue. - if (![report needsToBeSubmitted]) { - [self.operationQueue addOperationWithBlock:^{ - [self->_fileManager removeItemAtPath:path]; - }]; - - return; - } - - if (urgent && [dataCollectionToken isValid]) { - // We can proceed without the delegate. - [[self uploader] prepareAndSubmitReport:report - dataCollectionToken:dataCollectionToken - asUrgent:urgent - withProcessing:YES]; - return; - } - - [self submitReport:report dataCollectionToken:dataCollectionToken]; -} - -- (void)submitReport:(FIRCLSInternalReport *)report - dataCollectionToken:(FIRCLSDataCollectionToken *)dataCollectionToken { - [self.operationQueue addOperationWithBlock:^{ - [[self uploader] prepareAndSubmitReport:report - dataCollectionToken:dataCollectionToken - asUrgent:NO - withProcessing:YES]; - }]; - - [self didSubmitReport]; -} - -// This is the side-effect of calling deleteUnsentReports, or collect_reports setting -// being false -- (void)deleteUnsentReportsWithPreexisting:(NSArray *)preexistingReportPaths { - [self removeExistingReportPaths:preexistingReportPaths]; - - [self removeExistingReportPaths:self.fileManager.processingPathContents]; - if (self.settings.shouldUseNewReportEndpoint) { - [self removeExistingReportPaths:self.fileManager.preparedPathContents]; - } else { - [self removeExistingReportPaths:self.fileManager.legacyPreparedPathContents]; - } -} - -- (void)removeExistingReportPaths:(NSArray *)reportPaths { - [self.operationQueue addOperationWithBlock:^{ - for (NSString *path in reportPaths) { - [self.fileManager removeItemAtPath:path]; - } - }]; -} - -- (void)handleContentsInOtherReportingDirectoriesWithToken:(FIRCLSDataCollectionToken *)token { - [self handleExistingFilesInProcessingWithToken:token]; - [self handleExistingFilesInPreparedWithToken:token]; -} - -- (void)handleExistingFilesInProcessingWithToken:(FIRCLSDataCollectionToken *)token { - NSArray *processingPaths = _fileManager.processingPathContents; - - // deal with stuff in processing more carefully - do not process again - [self.operationQueue addOperationWithBlock:^{ - for (NSString *path in processingPaths) { - FIRCLSInternalReport *report = [FIRCLSInternalReport reportWithPath:path]; - [[self uploader] prepareAndSubmitReport:report - dataCollectionToken:token - asUrgent:NO - withProcessing:NO]; - } - }]; -} - -- (void)handleExistingFilesInPreparedWithToken:(FIRCLSDataCollectionToken *)token { - NSArray *preparedPaths = self.settings.shouldUseNewReportEndpoint - ? _fileManager.preparedPathContents - : _fileManager.legacyPreparedPathContents; - - // Give our network client a chance to reconnect here, if needed. This attempts to avoid - // trying to re-submit a prepared file that is already in flight. - [self.networkClient attemptToReconnectBackgroundSessionWithCompletionBlock:^{ - [self.operationQueue addOperationWithBlock:^{ - [self uploadPreexistingFiles:preparedPaths withToken:token]; - }]; - }]; -} - -- (void)uploadPreexistingFiles:(NSArray *)files withToken:(FIRCLSDataCollectionToken *)token { - // Because this could happen quite a bit after the inital set of files was - // captured, some could be completed (deleted). So, just double-check to make sure - // the file still exists. - - for (NSString *path in files) { - if (![[_fileManager underlyingFileManager] fileExistsAtPath:path]) { - continue; - } - - [[self uploader] uploadPackagedReportAtPath:path dataCollectionToken:token asUrgent:NO]; - } -} - -- (void)retryUploadForReportAtPath:(NSString *)path - dataCollectionToken:(FIRCLSDataCollectionToken *)token { - FIRCLSAddOperationAfter(CLSReportRetryInterval, self.operationQueue, ^{ - FIRCLSDeveloperLog("Crashlytics:Crash", @"re-attempting report submission"); - [[self uploader] uploadPackagedReportAtPath:path dataCollectionToken:token asUrgent:NO]; - }); -} - -#pragma mark - Launch Failure Detection -- (NSString *)launchFailureMarkerPath { - return [[_fileManager structurePath] stringByAppendingPathComponent:@"launchmarker"]; -} - -- (BOOL)createLaunchFailureMarker { - // It's tempting to use - [NSFileManger createFileAtPath:contents:attributes:] here. But that - // operation, even with empty/nil contents does a ton of work to write out nothing via a - // temporarly file. This is a much faster implemenation. - const char *path = [[self launchFailureMarkerPath] fileSystemRepresentation]; - -#if TARGET_OS_IPHONE - /* - * data-protected non-portable open(2) : - * int open_dprotected_np(user_addr_t path, int flags, int class, int dpflags, int mode) - */ - int fd = open_dprotected_np(path, O_WRONLY | O_CREAT | O_TRUNC, 4, 0, 0644); -#else - int fd = open(path, O_WRONLY | O_CREAT | O_TRUNC, 0644); -#endif - if (fd == -1) { - return NO; - } - - return close(fd) == 0; -} - -- (BOOL)launchFailureMarkerPresent { - return [[_fileManager underlyingFileManager] fileExistsAtPath:[self launchFailureMarkerPath]]; -} - -- (BOOL)removeLaunchFailureMarker { - return [_fileManager removeItemAtPath:[self launchFailureMarkerPath]]; -} - -- (BOOL)checkForAndCreateLaunchMarker { - BOOL launchFailure = [self launchFailureMarkerPresent]; - if (launchFailure) { - FIRCLSDeveloperLog("Crashlytics:Crash", - @"Last launch failed: this may indicate a crash shortly after app launch."); - } else { - [self createLaunchFailureMarker]; - } - - return launchFailure; -} - -#pragma mark - - -- (void)registerAnalyticsEventListener { - if (_registeredAnalyticsEventListener) { - return; - } - FIRCLSAnalyticsInteropListener *listener = [[FIRCLSAnalyticsInteropListener alloc] init]; - [FIRCLSFCRAnalytics registerEventListener:listener toAnalytics:_analytics]; - _registeredAnalyticsEventListener = YES; -} - -#pragma mark - Notifications -- (void)setupStateNotifications { - [self captureInitialNotificationStates]; - -#if TARGET_OS_IOS - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(willBecomeActive:) - name:UIApplicationWillEnterForegroundNotification - object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(didBecomeInactive:) - name:UIApplicationDidEnterBackgroundNotification - object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(didChangeOrientation:) - name:UIDeviceOrientationDidChangeNotification - object:nil]; - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - [[NSNotificationCenter defaultCenter] - addObserver:self - selector:@selector(didChangeUIOrientation:) - name:UIApplicationDidChangeStatusBarOrientationNotification - object:nil]; -#pragma clang diagnostic pop - -#elif CLS_TARGET_OS_OSX - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(willBecomeActive:) - name:@"NSApplicationWillBecomeActiveNotification" - object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(didBecomeInactive:) - name:@"NSApplicationDidResignActiveNotification" - object:nil]; -#endif -} - -- (void)captureInitialNotificationStates { -#if TARGET_OS_IOS - UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation]; - UIInterfaceOrientation statusBarOrientation = - [FIRCLSApplicationSharedInstance() statusBarOrientation]; -#endif - - // It's nice to do this async, so we don't hold up the main thread while doing three - // consecutive IOs here. - dispatch_async(FIRCLSGetLoggingQueue(), ^{ - FIRCLSUserLoggingWriteInternalKeyValue(FIRCLSInBackgroundKey, @"0"); -#if TARGET_OS_IOS - FIRCLSUserLoggingWriteInternalKeyValue(FIRCLSDeviceOrientationKey, - [@(orientation) description]); - FIRCLSUserLoggingWriteInternalKeyValue(FIRCLSUIOrientationKey, - [@(statusBarOrientation) description]); -#endif - }); -} - -- (void)willBecomeActive:(NSNotification *)notification { - FIRCLSUserLoggingRecordInternalKeyValue(FIRCLSInBackgroundKey, @NO); -} - -- (void)didBecomeInactive:(NSNotification *)notification { - FIRCLSUserLoggingRecordInternalKeyValue(FIRCLSInBackgroundKey, @YES); -} - -#if TARGET_OS_IOS -- (void)didChangeOrientation:(NSNotification *)notification { - UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation]; - - FIRCLSUserLoggingRecordInternalKeyValue(FIRCLSDeviceOrientationKey, @(orientation)); -} - -- (void)didChangeUIOrientation:(NSNotification *)notification { - UIInterfaceOrientation statusBarOrientation = - [FIRCLSApplicationSharedInstance() statusBarOrientation]; - - FIRCLSUserLoggingRecordInternalKeyValue(FIRCLSUIOrientationKey, @(statusBarOrientation)); -} -#endif - -#pragma mark - FIRCLSNetworkClientDelegate -- (BOOL)networkClientCanUseBackgroundSessions:(FIRCLSNetworkClient *)client { - return !FIRCLSApplicationIsExtension(); -} - -- (void)networkClient:(FIRCLSNetworkClient *)client - didFinishUploadWithPath:(NSString *)path - error:(NSError *)error { - // Route this through to the reports uploader. - // Since this callback happens after an upload finished, then we can assume that the original data - // collection was authorized. This isn't ideal, but it's better than trying to plumb the data - // collection token through all the system networking callbacks. - FIRCLSDataCollectionToken *token = [FIRCLSDataCollectionToken validToken]; - [[self uploader] reportUploadAtPath:path dataCollectionToken:token completedWithError:error]; -} - -#pragma mark - FIRCLSReportUploaderDelegate - -- (void)didCompletePackageSubmission:(NSString *)path - dataCollectionToken:(FIRCLSDataCollectionToken *)token - error:(NSError *)error { - if (!error) { - FIRCLSDeveloperLog("Crashlytics:Crash", @"report submission successful"); - return; - } - - FIRCLSDeveloperLog("Crashlytics:Crash", @"report submission failed with error %@", error); - FIRCLSSDKLog("Error: failed to submit report '%s'\n", error.description.UTF8String); - - [self retryUploadForReportAtPath:path dataCollectionToken:token]; -} - -- (void)didCompleteAllSubmissions { - [self.operationQueue addOperationWithBlock:^{ - // Dealloc the reports uploader. If we need it again (if we re-enqueued submissions from - // didCompletePackageSubmission:, we can just create it again - self->_uploader = nil; - - FIRCLSDeveloperLog("Crashlytics:Crash", @"report submission complete"); - }]; -} - -#pragma mark - UITest Helpers - -// Used only for internal data collection E2E testing -- (void)didSubmitReport { - if (reportSentCallback) { - dispatch_async(dispatch_get_main_queue(), ^{ - reportSentCallback(); - }); - } -} - -+ (void)setReportSentCallback:(void (^)(void))callback { - reportSentCallback = callback; -} - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Controllers/FIRCLSReportManager_Private.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Controllers/FIRCLSReportManager_Private.h deleted file mode 100644 index f7f139740a..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Controllers/FIRCLSReportManager_Private.h +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSReportManager.h" -#import "FIRCLSReportUploader.h" - -@class FIRCLSInstallIdentifierModel; - -@interface FIRCLSReportManager () - -@property(nonatomic, strong) NSOperationQueue *operationQueue; -@property(nonatomic, strong) FIRCLSNetworkClient *networkClient; -@property(nonatomic, readonly) FIRCLSReportUploader *uploader; -@property(nonatomic, strong) FIRCLSFileManager *fileManager; - -@end - -@interface FIRCLSReportManager (PrivateMethods) - -- (BOOL)createLaunchFailureMarker; -- (BOOL)launchFailureMarkerPresent; - -- (BOOL)potentiallySubmittableCrashOccurred; - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Controllers/FIRCLSReportUploader.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Controllers/FIRCLSReportUploader.h deleted file mode 100644 index c1cf8b4a15..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Controllers/FIRCLSReportUploader.h +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import - -#import - -@class FIRCLSDataCollectionToken; -@class FIRCLSInternalReport; -@class FIRCLSSettings; -@class FIRCLSFileManager; -@class FIRCLSNetworkClient; -@class FIRCLSReportUploader; - -@protocol FIRCLSReportUploaderDelegate; -@protocol FIRCLSReportUploaderDataSource; -@protocol FIRAnalyticsInterop; - -@interface FIRCLSReportUploader : NSObject - -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; -- (instancetype)initWithQueue:(NSOperationQueue *)queue - delegate:(id)delegate - dataSource:(id)dataSource - client:(FIRCLSNetworkClient *)client - fileManager:(FIRCLSFileManager *)fileManager - analytics:(id)analytics NS_DESIGNATED_INITIALIZER; - -@property(nonatomic, weak) id delegate; -@property(nonatomic, weak) id dataSource; - -@property(nonatomic, readonly) NSOperationQueue *operationQueue; -@property(nonatomic, readonly) FIRCLSNetworkClient *networkClient; -@property(nonatomic, readonly) FIRCLSFileManager *fileManager; - -- (BOOL)prepareAndSubmitReport:(FIRCLSInternalReport *)report - dataCollectionToken:(FIRCLSDataCollectionToken *)dataCollectionToken - asUrgent:(BOOL)urgent - withProcessing:(BOOL)shouldProcess; - -- (BOOL)uploadPackagedReportAtPath:(NSString *)path - dataCollectionToken:(FIRCLSDataCollectionToken *)dataCollectionToken - asUrgent:(BOOL)urgent; - -- (void)reportUploadAtPath:(NSString *)path - dataCollectionToken:(FIRCLSDataCollectionToken *)dataCollectionToken - completedWithError:(NSError *)error; - -@end - -@protocol FIRCLSReportUploaderDelegate -@required - -- (void)didCompletePackageSubmission:(NSString *)path - dataCollectionToken:(FIRCLSDataCollectionToken *)token - error:(NSError *)error; -- (void)didCompleteAllSubmissions; - -@end - -@protocol FIRCLSReportUploaderDataSource -@required - -- (NSString *)googleAppID; -- (FIRCLSSettings *)settings; -- (GDTCORTransport *)googleTransport; - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Controllers/FIRCLSReportUploader.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Controllers/FIRCLSReportUploader.m deleted file mode 100644 index 2283d4e199..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Controllers/FIRCLSReportUploader.m +++ /dev/null @@ -1,356 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import - -#import "FIRCLSApplication.h" -#import "FIRCLSDataCollectionArbiter.h" -#import "FIRCLSDataCollectionToken.h" -#import "FIRCLSDefines.h" -#import "FIRCLSFCRAnalytics.h" -#import "FIRCLSFileManager.h" -#import "FIRCLSInstallIdentifierModel.h" -#import "FIRCLSInternalReport.h" -#import "FIRCLSNetworkClient.h" -#import "FIRCLSPackageReportOperation.h" -#import "FIRCLSProcessReportOperation.h" -#import "FIRCLSReportAdapter.h" -#import "FIRCLSReportUploader_Private.h" -#import "FIRCLSSettings.h" -#import "FIRCLSSymbolResolver.h" - -#include "FIRCLSUtility.h" - -#import "FIRCLSConstants.h" -#import "FIRCLSMultipartMimeStreamEncoder.h" -#import "FIRCLSURLBuilder.h" - -#import -#import - -@interface FIRCLSReportUploader () { - id _analytics; -} -@end - -@implementation FIRCLSReportUploader - -- (instancetype)initWithQueue:(NSOperationQueue *)queue - delegate:(id)delegate - dataSource:(id)dataSource - client:(FIRCLSNetworkClient *)client - fileManager:(FIRCLSFileManager *)fileManager - analytics:(id)analytics { - self = [super init]; - if (!self) { - return nil; - } - - _operationQueue = queue; - _delegate = delegate; - _dataSource = dataSource; - _networkClient = client; - _fileManager = fileManager; - _analytics = analytics; - - return self; -} - -#pragma mark - Packaging and Submission -- (BOOL)prepareAndSubmitReport:(FIRCLSInternalReport *)report - dataCollectionToken:(FIRCLSDataCollectionToken *)dataCollectionToken - asUrgent:(BOOL)urgent - withProcessing:(BOOL)shouldProcess { - __block BOOL success = NO; - - if (![dataCollectionToken isValid]) { - FIRCLSErrorLog(@"Data collection disabled and report will not be submitted"); - return NO; - } - - if (!self.dataSource.settings.orgID && !self.dataSource.settings.shouldUseNewReportEndpoint) { - FIRCLSDebugLog( - @"Skipping report with id '%@' this run of the app because Organization ID was " - @"nil. Report via the legacy endpoint will upload once settings are download successfully", - report.identifier); - return YES; - } - - FIRCLSApplicationActivity( - FIRCLSApplicationActivityDefault, @"Crashlytics Crash Report Processing", ^{ - if (shouldProcess) { - if (![self.fileManager moveItemAtPath:report.path - toDirectory:self.fileManager.processingPath]) { - FIRCLSErrorLog(@"Unable to move report for processing"); - return; - } - - // adjust the report's path, and process it - [report setPath:[self.fileManager.processingPath - stringByAppendingPathComponent:report.directoryName]]; - - FIRCLSSymbolResolver *resolver = [[FIRCLSSymbolResolver alloc] init]; - - FIRCLSProcessReportOperation *processOperation = - [[FIRCLSProcessReportOperation alloc] initWithReport:report resolver:resolver]; - - [processOperation start]; - } - - NSString *packagedPath; - - FIRCLSDebugLog(@"Preparing the report for the new endpoint: %d", - self.dataSource.settings.shouldUseNewReportEndpoint); - - // With the new report endpoint, the report is deleted once it is written to GDT - // Check if the report has a crash file before the report is moved or deleted - BOOL isCrash = report.isCrash; - - if (self.dataSource.settings.shouldUseNewReportEndpoint) { - // For the new endpoint, just move the .clsrecords from "processing" -> "prepared" - if (![self.fileManager moveItemAtPath:report.path - toDirectory:self.fileManager.preparedPath]) { - FIRCLSErrorLog(@"Unable to move report to prepared"); - return; - } - - packagedPath = [self.fileManager.preparedPath - stringByAppendingPathComponent:report.path.lastPathComponent]; - } else { - // For the legacy endpoint, continue generate the multipartmime file in "prepared-legacy" - FIRCLSPackageReportOperation *packageOperation = - [[FIRCLSPackageReportOperation alloc] initWithReport:report - fileManager:self.fileManager - settings:self.dataSource.settings]; - - [packageOperation start]; - packagedPath = packageOperation.finalPath; - if (!packagedPath) { - FIRCLSErrorLog(@"Unable to package report"); - return; - } - - if (![self.fileManager removeItemAtPath:report.path]) { - FIRCLSErrorLog(@"Unable to remove a processing item"); - } - } - - NSLog(@"[Firebase/Crashlytics] Packaged report with id '%@' for submission", - report.identifier); - - success = [self uploadPackagedReportAtPath:packagedPath - dataCollectionToken:dataCollectionToken - asUrgent:urgent]; - - // If the upload was successful and the report contained a crash forward it to Google - // Analytics. - if (success && isCrash) { - [FIRCLSFCRAnalytics logCrashWithTimeStamp:report.crashedOnDate.timeIntervalSince1970 - toAnalytics:self->_analytics]; - } - }); - - return success; -} - -- (BOOL)submitPackageMultipartMimeAtPath:(NSString *)multipartmimePath - dataCollectionToken:(FIRCLSDataCollectionToken *)dataCollectionToken - synchronously:(BOOL)synchronous { - FIRCLSDeveloperLog(@"Crashlytics:Crash:Reports", "Submitting %@ %@", - synchronous ? @"sync" : @"async", multipartmimePath); - - if ([[[self fileManager] fileSizeAtPath:multipartmimePath] unsignedIntegerValue] == 0) { - FIRCLSDeveloperLog("Crashlytics:Crash:Reports", @"Already-submitted report being ignored"); - return NO; - } - - NSTimeInterval timeout = 10.0; - - // If we are submitting synchronously, be more aggressive with the timeout. However, - // we only need this if the client does not support background requests. - if (synchronous && ![[self networkClient] supportsBackgroundRequests]) { - timeout = 2.0; - } - - NSMutableURLRequest *request = [self mutableRequestWithURL:[self reportURL] timeout:timeout]; - - [request setHTTPMethod:@"POST"]; - - if (![self fillInRequest:request forMultipartMimeDataAtPath:multipartmimePath]) { - return NO; - } - - [[self networkClient] startUploadRequest:request - filePath:multipartmimePath - dataCollectionToken:dataCollectionToken - immediately:synchronous]; - - return YES; -} - -- (BOOL)uploadPackagedReportAtPath:(NSString *)path - dataCollectionToken:(FIRCLSDataCollectionToken *)dataCollectionToken - asUrgent:(BOOL)urgent { - FIRCLSDeveloperLog("Crashlytics:Crash:Reports", @"Submitting report%@", - urgent ? @" as urgent" : @""); - - // Check with the legacy path as the new path will always be contained in the legacy path - BOOL isNewPreparedPath = ![path containsString:self.fileManager.legacyPreparedPath]; - - if (isNewPreparedPath && self.dataSource.settings.shouldUseNewReportEndpoint) { - if (![dataCollectionToken isValid]) { - FIRCLSErrorLog(@"A report upload was requested with an invalid data collection token."); - return NO; - } - - FIRCLSReportAdapter *adapter = - [[FIRCLSReportAdapter alloc] initWithPath:path googleAppId:self.dataSource.googleAppID]; - - GDTCOREvent *event = [self.dataSource.googleTransport eventForTransport]; - event.dataObject = adapter; - event.qosTier = GDTCOREventQoSFast; // Bypass batching, send immediately - - dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); - - __block BOOL success = YES; - - [self.dataSource.googleTransport - sendDataEvent:event - onComplete:^(BOOL wasWritten, NSError *error) { - if (!wasWritten) { - FIRCLSDeveloperLog("Crashlytics:Crash:Reports", - @"Failed to send crash report due to gdt write failure."); - success = NO; - return; - } - - if (error) { - FIRCLSDeveloperLog("Crashlytics:Crash:Reports", - @"Failed to send crash report due to gdt error: %@", - error.localizedDescription); - success = NO; - return; - } - - FIRCLSDeveloperLog("Crashlytics:Crash:Reports", - @"Completed report submission with id: %@", path.lastPathComponent); - - if (urgent) { - dispatch_semaphore_signal(semaphore); - } - - [self cleanUpSubmittedReportAtPath:path]; - }]; - - if (urgent) { - dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); - } - - return success; - - } else if (!isNewPreparedPath && !self.dataSource.settings.shouldUseNewReportEndpoint) { - return [self submitPackageMultipartMimeAtPath:path - dataCollectionToken:dataCollectionToken - synchronously:urgent]; - } - - // Unsupported state - return NO; -} - -- (BOOL)cleanUpSubmittedReportAtPath:(NSString *)path { - if (![[self fileManager] removeItemAtPath:path]) { - FIRCLSErrorLog(@"Unable to remove packaged submission"); - return NO; - } - - return YES; -} - -- (void)reportUploadAtPath:(NSString *)path - dataCollectionToken:(FIRCLSDataCollectionToken *)dataCollectionToken - completedWithError:(NSError *)error { - FIRCLSDeveloperLog("Crashlytics:Crash:Reports", @"completed submission of %@", path); - - if (!error) { - [self cleanUpSubmittedReportAtPath:path]; - } - - [[self delegate] didCompletePackageSubmission:path - dataCollectionToken:dataCollectionToken - error:error]; -} - -#pragma mark - Properties (TODO: Can delete once the experiment is over) - -- (NSURL *)reportURL { - FIRCLSURLBuilder *url = [FIRCLSURLBuilder URLWithBase:FIRCLSReportsEndpoint]; - - [url appendComponent:@"/sdk-api/v1/platforms/"]; - [url appendComponent:FIRCLSApplicationGetPlatform()]; - [url appendComponent:@"/apps/"]; - [url appendComponent:self.dataSource.settings.fetchedBundleID]; - [url appendComponent:@"/reports"]; - - return [url URL]; -} - -- (NSString *)localeIdentifier { - return [[NSLocale currentLocale] localeIdentifier]; -} - -#pragma mark - URL Requests -- (NSMutableURLRequest *)mutableRequestWithURL:(NSURL *)url timeout:(NSTimeInterval)timeout { - NSMutableURLRequest *request = - [NSMutableURLRequest requestWithURL:url - cachePolicy:NSURLRequestReloadIgnoringLocalCacheData - timeoutInterval:timeout]; - - NSString *localeId = [self localeIdentifier]; - - [request setValue:@CLS_SDK_GENERATOR_NAME forHTTPHeaderField:FIRCLSNetworkUserAgent]; - [request setValue:FIRCLSNetworkApplicationJson forHTTPHeaderField:FIRCLSNetworkAccept]; - [request setValue:FIRCLSNetworkUTF8 forHTTPHeaderField:FIRCLSNetworkAcceptCharset]; - [request setValue:localeId forHTTPHeaderField:FIRCLSNetworkAcceptLanguage]; - [request setValue:localeId forHTTPHeaderField:FIRCLSNetworkContentLanguage]; - [request setValue:FIRCLSDeveloperToken forHTTPHeaderField:FIRCLSNetworkCrashlyticsDeveloperToken]; - [request setValue:FIRCLSApplicationGetSDKBundleID() - forHTTPHeaderField:FIRCLSNetworkCrashlyticsAPIClientId]; - [request setValue:@CLS_SDK_DISPLAY_VERSION - forHTTPHeaderField:FIRCLSNetworkCrashlyticsAPIClientDisplayVersion]; - [request setValue:[[self dataSource] googleAppID] - forHTTPHeaderField:FIRCLSNetworkCrashlyticsGoogleAppId]; - - return request; -} - -- (BOOL)fillInRequest:(NSMutableURLRequest *)request forMultipartMimeDataAtPath:(NSString *)path { - NSString *boundary = [[path lastPathComponent] stringByDeletingPathExtension]; - - [request setValue:[FIRCLSMultipartMimeStreamEncoder - contentTypeHTTPHeaderValueWithBoundary:boundary] - forHTTPHeaderField:@"Content-Type"]; - - NSNumber *fileSize = [[self fileManager] fileSizeAtPath:path]; - if (fileSize == nil) { - FIRCLSErrorLog(@"Could not determine size of multipart mime file"); - return NO; - } - - [request setValue:[fileSize stringValue] forHTTPHeaderField:@"Content-Length"]; - - return YES; -} - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Controllers/FIRCLSReportUploader_Private.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Controllers/FIRCLSReportUploader_Private.h deleted file mode 100644 index f54dc16733..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Controllers/FIRCLSReportUploader_Private.h +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSReportUploader.h" - -@interface FIRCLSReportUploader (PrivateMethods) - -@property(nonatomic, readonly) NSURL *reportURL; - -- (NSMutableURLRequest *)mutableRequestWithURL:(NSURL *)url timeout:(NSTimeInterval)timeout; - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/DataCollection/FIRCLSDataCollectionArbiter.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/DataCollection/FIRCLSDataCollectionArbiter.h deleted file mode 100644 index 147bc7bbce..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/DataCollection/FIRCLSDataCollectionArbiter.h +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import - -@class FIRApp; -@class FBLPromise; - -NS_ASSUME_NONNULL_BEGIN - -@interface FIRCLSDataCollectionArbiter : NSObject - -- (instancetype)init NS_UNAVAILABLE; - -- (instancetype)initWithApp:(FIRApp *)app withAppInfo:(NSDictionary *)dict; - -- (BOOL)isLegacyDataCollectionKeyInPlist; - -- (BOOL)isCrashlyticsCollectionEnabled; - -- (void)setCrashlyticsCollectionEnabled:(BOOL)enabled; - -// Returns a promise that is fulfilled once data collection is enabled. -- (FBLPromise *)waitForCrashlyticsCollectionEnabled; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/DataCollection/FIRCLSDataCollectionArbiter.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/DataCollection/FIRCLSDataCollectionArbiter.m deleted file mode 100644 index 3d40af2e54..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/DataCollection/FIRCLSDataCollectionArbiter.m +++ /dev/null @@ -1,148 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSDataCollectionArbiter.h" - -#if __has_include() -#import -#else -#import "FBLPromises.h" -#endif - -#import - -#import "FIRCLSUserDefaults.h" - -// The legacy data collection setting allows Fabric customers to turn off auto- -// initialization, but can be overridden by calling [Fabric with:]. -// -// While we support Fabric, we must have two different versions, because -// they require these slightly different semantics. -NSString *const FIRCLSLegacyCrashlyticsCollectionKey = @"firebase_crashlytics_collection_enabled"; - -// The new data collection setting can be set by an API that is stored in FIRCLSUserDefaults -NSString *const FIRCLSDataCollectionEnabledKey = @"com.crashlytics.data_collection"; - -// The new data collection setting also allows Firebase customers to turn off data -// collection in their Info.plist, and can be overridden by setting it to true using -// the setCrashlyticsCollectionEnabled API. -NSString *const FIRCLSCrashlyticsCollectionKey = @"FirebaseCrashlyticsCollectionEnabled"; - -typedef NS_ENUM(NSInteger, FIRCLSDataCollectionSetting) { - FIRCLSDataCollectionSettingNotSet = 0, - FIRCLSDataCollectionSettingEnabled = 1, - FIRCLSDataCollectionSettingDisabled = 2, -}; - -@interface FIRCLSDataCollectionArbiter () { - NSLock *_mutex; - FBLPromise *_dataCollectionEnabled; - BOOL _promiseResolved; - FIRApp *_app; - NSDictionary *_appInfo; -} -@end - -@implementation FIRCLSDataCollectionArbiter - -- (instancetype)initWithApp:(FIRApp *)app withAppInfo:(NSDictionary *)dict { - self = [super init]; - if (self) { - _mutex = [[NSLock alloc] init]; - _appInfo = dict; - _app = app; - if ([FIRCLSDataCollectionArbiter isCrashlyticsCollectionEnabledWithApp:app withAppInfo:dict]) { - _dataCollectionEnabled = [FBLPromise resolvedWith:nil]; - _promiseResolved = YES; - } else { - _dataCollectionEnabled = [FBLPromise pendingPromise]; - _promiseResolved = NO; - } - } - - return self; -} - -/* - * Legacy collection key that we provide for customers to disable Crash reporting. - * Customers can later turn on Crashlytics using Fabric.with if they choose to do so. - * - * This flag is unsupported for the "New SDK" - */ -- (BOOL)isLegacyDataCollectionKeyInPlist { - if ([_appInfo objectForKey:FIRCLSLegacyCrashlyticsCollectionKey]) { - return true; - } - - return false; -} - -// This functionality is called in the initializer before self is fully initialized, -// so a class method is used. The instance method below allows for a consistent clean API. -+ (BOOL)isCrashlyticsCollectionEnabledWithApp:(FIRApp *)app withAppInfo:(NSDictionary *)dict { - FIRCLSDataCollectionSetting stickySetting = [FIRCLSDataCollectionArbiter stickySetting]; - if (stickySetting != FIRCLSDataCollectionSettingNotSet) { - return stickySetting == FIRCLSDataCollectionSettingEnabled; - } - - id firebaseCrashlyticsCollectionEnabled = [dict objectForKey:FIRCLSCrashlyticsCollectionKey]; - if ([firebaseCrashlyticsCollectionEnabled isKindOfClass:[NSString class]] || - [firebaseCrashlyticsCollectionEnabled isKindOfClass:[NSNumber class]]) { - return [firebaseCrashlyticsCollectionEnabled boolValue]; - } - - return [app isDataCollectionDefaultEnabled]; -} - -- (BOOL)isCrashlyticsCollectionEnabled { - return [FIRCLSDataCollectionArbiter isCrashlyticsCollectionEnabledWithApp:_app - withAppInfo:_appInfo]; -} - -- (void)setCrashlyticsCollectionEnabled:(BOOL)enabled { - FIRCLSUserDefaults *userDefaults = [FIRCLSUserDefaults standardUserDefaults]; - FIRCLSDataCollectionSetting setting = - enabled ? FIRCLSDataCollectionSettingEnabled : FIRCLSDataCollectionSettingDisabled; - [userDefaults setInteger:setting forKey:FIRCLSDataCollectionEnabledKey]; - [userDefaults synchronize]; - - [_mutex lock]; - if (enabled) { - if (!_promiseResolved) { - [_dataCollectionEnabled fulfill:nil]; - _promiseResolved = YES; - } - } else { - if (_promiseResolved) { - _dataCollectionEnabled = [FBLPromise pendingPromise]; - _promiseResolved = NO; - } - } - [_mutex unlock]; -} - -+ (FIRCLSDataCollectionSetting)stickySetting { - FIRCLSUserDefaults *userDefaults = [FIRCLSUserDefaults standardUserDefaults]; - return [userDefaults integerForKey:FIRCLSDataCollectionEnabledKey]; -} - -- (FBLPromise *)waitForCrashlyticsCollectionEnabled { - FBLPromise *result = nil; - [_mutex lock]; - result = _dataCollectionEnabled; - [_mutex unlock]; - return result; -} - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/DataCollection/FIRCLSDataCollectionToken.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/DataCollection/FIRCLSDataCollectionToken.h deleted file mode 100644 index 4ab2bb6615..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/DataCollection/FIRCLSDataCollectionToken.h +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - * A FIRCLSDataCollectionToken represents having permission to upload data. A data collection token - * is either valid or nil. Every function that directly initiates a network operation that will - * result in data collection must check to make sure it has been passed a valid token. Tokens should - * only be created when either (1) automatic data collection is enabled, or (2) the user has - * explicitly given permission to collect data for a particular purpose, using the API. For all the - * functions in between, the data collection token getting passed as an argument helps to document - * and enforce the flow of data collection permission through the SDK. - */ -@interface FIRCLSDataCollectionToken : NSObject - -/** - * Creates a valid token. Only call this method when either (1) automatic data collection is - * enabled, or (2) the user has explicitly given permission to collect data for a particular - * purpose, using the API. - */ -+ (instancetype)validToken; - -/** - * Use this to verify that a token is valid. If this is called on a nil instance, it will return NO. - * @return YES. - */ -- (BOOL)isValid; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/DataCollection/FIRCLSDataCollectionToken.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/DataCollection/FIRCLSDataCollectionToken.m deleted file mode 100644 index 1a41ee1df8..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/DataCollection/FIRCLSDataCollectionToken.m +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSDataCollectionToken.h" - -@implementation FIRCLSDataCollectionToken - -+ (instancetype)validToken { - return [[FIRCLSDataCollectionToken alloc] init]; -} - -- (BOOL)isValid { - return YES; -} - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCLSURLSession/FIRCLSURLSession.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCLSURLSession/FIRCLSURLSession.h deleted file mode 100644 index fa53468c14..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCLSURLSession/FIRCLSURLSession.h +++ /dev/null @@ -1,84 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSURLSessionAvailability.h" - -#if FIRCLSURLSESSION_REQUIRED - -#import "FIRCLSURLSessionConfiguration.h" - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface FIRCLSURLSession : NSObject { - id _delegate; - NSOperationQueue *_delegateQueue; - NSURLSessionConfiguration *_configuration; - NSMutableSet *_taskSet; - dispatch_queue_t _queue; - - NSString *_sessionDescription; -} - -+ (BOOL)NSURLSessionShouldBeUsed; - -+ (NSURLSession *)sessionWithConfiguration:(NSURLSessionConfiguration *)configuration; -+ (NSURLSession *)sessionWithConfiguration:(NSURLSessionConfiguration *)configuration - delegate:(nullable id)delegate - delegateQueue:(nullable NSOperationQueue *)queue; - -@property(nonatomic, readonly, retain) NSOperationQueue *delegateQueue; -@property(nonatomic, readonly, retain) id delegate; -@property(nonatomic, readonly, copy) NSURLSessionConfiguration *configuration; - -@property(nonatomic, copy) NSString *sessionDescription; - -- (void)getTasksWithCompletionHandler: - (void (^)(NSArray *dataTasks, NSArray *uploadTasks, NSArray *downloadTasks))completionHandler; - -// task creation - suitable for background operations -- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request fromFile:(NSURL *)fileURL; - -- (NSURLSessionDownloadTask *)downloadTaskWithRequest:(NSURLRequest *)request; -- (NSURLSessionDownloadTask *)downloadTaskWithURL:(NSURL *)url; - -// convenience methods (that are not available for background sessions -- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request - completionHandler:(nullable void (^)(NSData *data, - NSURLResponse *response, - NSError *error))completionHandler; -- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request; - -- (NSURLSessionDownloadTask *)downloadTaskWithRequest:(NSURLRequest *)request - completionHandler: - (nullable void (^)(NSURL *targetPath, - NSURLResponse *response, - NSError *error))completionHandler; - -- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request - fromFile:(NSURL *)fileURL - completionHandler: - (nullable void (^)(NSData *data, - NSURLResponse *response, - NSError *error))completionHandler; - -- (void)invalidateAndCancel; -- (void)finishTasksAndInvalidate; - -@end - -NS_ASSUME_NONNULL_END - -#endif diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCLSURLSession/FIRCLSURLSession.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCLSURLSession/FIRCLSURLSession.m deleted file mode 100644 index 9815423683..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCLSURLSession/FIRCLSURLSession.m +++ /dev/null @@ -1,346 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSURLSessionAvailability.h" - -#if FIRCLSURLSESSION_REQUIRED -#import "FIRCLSURLSession.h" - -#import "FIRCLSURLSessionDataTask.h" -#import "FIRCLSURLSessionDataTask_PrivateMethods.h" -#import "FIRCLSURLSessionDownloadTask.h" -#import "FIRCLSURLSessionDownloadTask_PrivateMethods.h" -#import "FIRCLSURLSessionTask_PrivateMethods.h" -#import "FIRCLSURLSessionUploadTask.h" - -#define DELEGATE ((id)self->_delegate) - -@interface FIRCLSURLSession () - -@property(nonatomic, retain) NSOperationQueue *delegateQueue; -@property(nonatomic, retain) id delegate; -@property(nonatomic, copy) NSURLSessionConfiguration *configuration; - -@end - -@implementation FIRCLSURLSession - -@synthesize delegate = _delegate; -@synthesize delegateQueue = _delegateQueue; -@synthesize configuration = _configuration; -@synthesize sessionDescription = _sessionDescription; - -+ (BOOL)NSURLSessionShouldBeUsed { - if (!NSClassFromString(@"NSURLSession")) { - return NO; - } - - // We use this as a proxy to verify that we are on at least iOS 8 or 10.10. The first OSes that - // has NSURLSession were fairly unstable. - return [[NSURLSessionConfiguration class] - respondsToSelector:@selector(backgroundSessionConfigurationWithIdentifier:)]; -} - -+ (NSURLSession *)sessionWithConfiguration:(NSURLSessionConfiguration *)configuration { - return [self sessionWithConfiguration:configuration delegate:nil delegateQueue:nil]; -} - -+ (NSURLSession *)sessionWithConfiguration:(NSURLSessionConfiguration *)configuration - delegate:(nullable id)delegate - delegateQueue:(nullable NSOperationQueue *)queue { - if ([self NSURLSessionShouldBeUsed]) { - return [NSURLSession sessionWithConfiguration:configuration - delegate:delegate - delegateQueue:queue]; - } - - if (!configuration) { - return nil; - } - -#if __has_feature(objc_arc) - FIRCLSURLSession *session = [self new]; -#else - FIRCLSURLSession *session = [[self new] autorelease]; -#endif - [session setDelegate:delegate]; - // When delegate exists, but delegateQueue is nil, create a serial queue like NSURLSession - // documents. - if (delegate && !queue) { - queue = [self newDefaultDelegateQueue]; - } - session.delegateQueue = queue; - session.configuration = configuration; - return (NSURLSession *)session; -} - -+ (NSOperationQueue *)newDefaultDelegateQueue { - NSOperationQueue *delegateQueue = [[NSOperationQueue alloc] init]; - delegateQueue.name = [NSString stringWithFormat:@"%@ %p", NSStringFromClass(self), self]; - delegateQueue.maxConcurrentOperationCount = 1; - return delegateQueue; -} - -- (instancetype)init { - self = [super init]; - if (!self) { - return nil; - } - - _queue = dispatch_queue_create("com.crashlytics.URLSession", 0); - - return self; -} - -#if !__has_feature(objc_arc) -- (void)dealloc { - [_taskSet release]; - [_delegate release]; - [_delegateQueue release]; - [_configuration release]; - -#if !OS_OBJECT_USE_OBJC - dispatch_release(_queue); -#endif - - [super dealloc]; -} -#endif - -#pragma mark - Managing the Session - -- (void)invalidateAndCancel { - dispatch_sync(_queue, ^{ - for (FIRCLSURLSessionTask *task in self->_taskSet) { - [task cancel]; - } - }); - - self.delegate = nil; -} - -- (void)finishTasksAndInvalidate { - self.delegate = nil; -} - -#pragma mark - - -- (void)getTasksWithCompletionHandler: - (void (^)(NSArray *dataTasks, NSArray *uploadTasks, NSArray *downloadTasks))completionHandler { - [[self delegateQueue] addOperationWithBlock:^{ - // TODO - this is totally wrong, but better than not calling back at all - completionHandler(@[], @[], @[]); - }]; -} - -- (void)removeTaskFromSet:(FIRCLSURLSessionTask *)task { - dispatch_async(_queue, ^{ - [self->_taskSet removeObject:task]; - }); -} - -- (void)configureTask:(FIRCLSURLSessionTask *)task - withRequest:(NSURLRequest *)request - block:(void (^)(NSMutableURLRequest *mutableRequest))block { - NSMutableURLRequest *modifiedRequest = [request mutableCopy]; - - dispatch_sync(_queue, ^{ - [self->_taskSet addObject:task]; - - // TODO: this isn't allowed to overwrite existing headers - for (NSString *key in [self->_configuration HTTPAdditionalHeaders]) { - [modifiedRequest addValue:[[self->_configuration HTTPAdditionalHeaders] objectForKey:key] - forHTTPHeaderField:key]; - } - }); - - if (block) { - block(modifiedRequest); - } - - [task setOriginalRequest:modifiedRequest]; - [task setDelegate:self]; - -#if !__has_feature(objc_arc) - [modifiedRequest release]; -#endif -} - -- (BOOL)shouldInvokeDelegateSelector:(SEL)selector forTask:(FIRCLSURLSessionTask *)task { - return [task invokesDelegate] && [_delegate respondsToSelector:selector]; -} - -#pragma mark Task Creation -- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request - fromFile:(NSURL *)fileURL { - return [self uploadTaskWithRequest:request fromFile:fileURL completionHandler:nil]; -} - -- (NSURLSessionDownloadTask *)downloadTaskWithRequest:(NSURLRequest *)request { - return [self downloadTaskWithRequest:request completionHandler:nil]; -} - -- (NSURLSessionDownloadTask *)downloadTaskWithURL:(NSURL *)url { - return [self downloadTaskWithRequest:[NSURLRequest requestWithURL:url]]; -} - -#pragma mark Async Convenience Methods -- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request - completionHandler:(nullable void (^)(NSData *data, - NSURLResponse *response, - NSError *error))completionHandler { - FIRCLSURLSessionDataTask *task = [FIRCLSURLSessionDataTask task]; - - if (completionHandler) { - [task setCompletionHandler:completionHandler]; - [task setInvokesDelegate:NO]; - } - - [self configureTask:task withRequest:request block:nil]; - - return (NSURLSessionDataTask *)task; -} - -- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request { - return [self dataTaskWithRequest:request completionHandler:nil]; -} - -- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request - fromFile:(NSURL *)fileURL - completionHandler: - (nullable void (^)(NSData *data, - NSURLResponse *response, - NSError *error))completionHandler { - FIRCLSURLSessionUploadTask *task = [FIRCLSURLSessionUploadTask task]; - - if (completionHandler) { - [task setCompletionHandler:completionHandler]; - [task setInvokesDelegate:NO]; - } - - [self configureTask:task - withRequest:request - block:^(NSMutableURLRequest *mutableRequest) { - // you cannot set up both of these, and we'll be using the stream here - [mutableRequest setHTTPBody:nil]; - [mutableRequest setHTTPBodyStream:[NSInputStream inputStreamWithURL:fileURL]]; - }]; - - return (NSURLSessionUploadTask *)task; -} - -- (NSURLSessionDownloadTask *)downloadTaskWithRequest:(NSURLRequest *)request - completionHandler: - (nullable void (^)(NSURL *targetPath, - NSURLResponse *response, - NSError *error))completionHandler { - FIRCLSURLSessionDownloadTask *task = [FIRCLSURLSessionDownloadTask task]; - - if (completionHandler) { - [task setDownloadCompletionHandler:completionHandler]; - [task setInvokesDelegate:NO]; - } - - [self configureTask:task withRequest:request block:nil]; - - return (NSURLSessionDownloadTask *)task; -} - -#pragma mark FIRCLSURLSessionTaskDelegate -- (NSURLRequest *)task:(FIRCLSURLSessionTask *)task - willPerformHTTPRedirection:(NSHTTPURLResponse *)response - newRequest:(NSURLRequest *)request { - // just accept the proposed redirection - return request; -} - -- (void)task:(FIRCLSURLSessionTask *)task didCompleteWithError:(NSError *)error { - if (![self shouldInvokeDelegateSelector:@selector(URLSession:task:didCompleteWithError:) - forTask:task]) { - [self removeTaskFromSet:task]; - return; - } - - [_delegateQueue addOperationWithBlock:^{ - [DELEGATE URLSession:(NSURLSession *)self - task:(NSURLSessionTask *)task - didCompleteWithError:error]; - - // Note that you *cannot* clean up here, because this method could be run asynchronously with - // the delegate methods that care about the state of the task - [self removeTaskFromSet:task]; - }]; -} - -#pragma mark FIRCLSURLSessionDataTask -- (void)task:(FIRCLSURLSessionDataTask *)task didReceiveResponse:(NSURLResponse *)response { - if (![self shouldInvokeDelegateSelector:@selector - (URLSession:dataTask:didReceiveResponse:completionHandler:) - forTask:task]) { - return; - } - - [_delegateQueue addOperationWithBlock:^{ - [DELEGATE URLSession:(NSURLSession *)self - dataTask:(NSURLSessionDataTask *)task - didReceiveResponse:response - completionHandler:^(NSURLSessionResponseDisposition disposition){ - // nothing to do here - }]; - }]; -} - -- (void)task:(FIRCLSURLSessionDataTask *)task didReceiveData:(NSData *)data { - if (![self shouldInvokeDelegateSelector:@selector(URLSession:dataTask:didReceiveData:) - forTask:task]) { - return; - } - - [_delegateQueue addOperationWithBlock:^{ - [DELEGATE URLSession:(NSURLSession *)self - dataTask:(NSURLSessionDataTask *)task - didReceiveData:data]; - }]; -} - -#pragma mark FIRCLSURLSessionDownloadDelegate -- (void)downloadTask:(FIRCLSURLSessionDownloadTask *)task didFinishDownloadingToURL:(NSURL *)url { - if (![self shouldInvokeDelegateSelector:@selector(URLSession: - downloadTask:didFinishDownloadingToURL:) - forTask:task]) { - // We have to be certain that we cleanup only once the delegate no longer cares about the state - // of the task being changed. In the case of download, this is either after the delegate method - // has been invoked, or here, if the delegate doesn't care. - [task cleanup]; - return; - } - - [_delegateQueue addOperationWithBlock:^{ - [DELEGATE URLSession:(NSURLSession *)self - downloadTask:(NSURLSessionDownloadTask *)task - didFinishDownloadingToURL:url]; - - // Cleanup for the download tasks is a little complex. As long as we do it only after - // the delegate has been informed of the completed download, we are ok. - [task cleanup]; - }]; -} - -@end - -#else - -INJECT_STRIP_SYMBOL(clsurlsession) - -#endif diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCLSURLSession/FIRCLSURLSessionAvailability.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCLSURLSession/FIRCLSURLSessionAvailability.h deleted file mode 100644 index 9f3ead01b4..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCLSURLSession/FIRCLSURLSessionAvailability.h +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#pragma once - -#include - -#define FIRCLSURLSESSION_REQUIRED (!TARGET_OS_WATCH && !TARGET_OS_TV) - -// These macros generate a function to force a symbol for the containing .o, to work around an issue -// where strip will not strip debug information without a symbol to strip. -#define CONCAT_EXPANDED(a, b) a##b -#define CONCAT(a, b) CONCAT_EXPANDED(a, b) -#define DUMMY_FUNCTION_NAME(x) CONCAT(fircls_strip_this_, x) -#define INJECT_STRIP_SYMBOL(x) \ - void DUMMY_FUNCTION_NAME(x)(void) { \ - } diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCLSURLSession/FIRCLSURLSessionConfiguration.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCLSURLSession/FIRCLSURLSessionConfiguration.h deleted file mode 100644 index bda0f7083d..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCLSURLSession/FIRCLSURLSessionConfiguration.h +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSURLSessionAvailability.h" - -#if FIRCLSURLSESSION_REQUIRED - -#import - -@interface FIRCLSURLSessionConfiguration : NSObject { - NSDictionary *_additionalHeaders; - NSURLCache *_URLCache; - NSHTTPCookieAcceptPolicy _cookiePolicy; -} - -+ (NSURLSessionConfiguration *)defaultSessionConfiguration; -+ (NSURLSessionConfiguration *)ephemeralSessionConfiguration; -+ (NSURLSessionConfiguration *)backgroundSessionConfiguration:(NSString *)identifier; -+ (NSURLSessionConfiguration *)backgroundSessionConfigurationWithIdentifier:(NSString *)identifier; - -@property(nonatomic, copy) NSDictionary *HTTPAdditionalHeaders; -@property(nonatomic, retain) NSURLCache *URLCache; -@property(nonatomic, assign) NSHTTPCookieAcceptPolicy HTTPCookieAcceptPolicy; -@property(nonatomic, assign) BOOL sessionSendsLaunchEvents; -@property(nonatomic, assign) NSTimeInterval timeoutIntervalForRequest; -@property(nonatomic, assign) NSTimeInterval timeoutIntervalForResource; -@property(nonatomic, assign) BOOL allowsCellularAccess; - -@end - -#endif diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCLSURLSession/FIRCLSURLSessionConfiguration.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCLSURLSession/FIRCLSURLSessionConfiguration.m deleted file mode 100644 index 177e7a6bfd..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCLSURLSession/FIRCLSURLSessionConfiguration.m +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSURLSessionAvailability.h" - -#import "FIRCLSURLSession.h" - -#if FIRCLSURLSESSION_REQUIRED -#import "FIRCLSURLSessionConfiguration.h" - -@implementation FIRCLSURLSessionConfiguration - -@synthesize URLCache = _URLCache; -@synthesize HTTPAdditionalHeaders = _additionalHeaders; -@synthesize HTTPCookieAcceptPolicy = _cookiePolicy; - -+ (NSURLSessionConfiguration *)defaultSessionConfiguration { - if ([FIRCLSURLSession NSURLSessionShouldBeUsed]) { - return [NSURLSessionConfiguration defaultSessionConfiguration]; - } - -#if __has_feature(objc_arc) - return [self new]; -#else - return [[self new] autorelease]; -#endif -} - -+ (NSURLSessionConfiguration *)ephemeralSessionConfiguration { - if ([FIRCLSURLSession NSURLSessionShouldBeUsed]) { - return [NSURLSessionConfiguration ephemeralSessionConfiguration]; - } - -#if __has_feature(objc_arc) - return [self new]; -#else - return [[self new] autorelease]; -#endif -} - -+ (NSURLSessionConfiguration *)backgroundSessionConfiguration:(NSString *)identifier { - return [self backgroundSessionConfigurationWithIdentifier:identifier]; -} - -+ (NSURLSessionConfiguration *)backgroundSessionConfigurationWithIdentifier:(NSString *)identifier { - if (![FIRCLSURLSession NSURLSessionShouldBeUsed]) { - return nil; - } - - if ([[NSURLSessionConfiguration class] - respondsToSelector:@selector(backgroundSessionConfigurationWithIdentifier:)]) { - return [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:identifier]; - } - - return [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:identifier]; -} - -- (id)copyWithZone:(NSZone *)zone { - FIRCLSURLSessionConfiguration *configuration; - - configuration = [FIRCLSURLSessionConfiguration new]; - [configuration setHTTPAdditionalHeaders:[self HTTPAdditionalHeaders]]; - - return configuration; -} - -// This functionality is not supported by the wrapper, so we just stub it out -- (BOOL)sessionSendsLaunchEvents { - return NO; -} - -- (void)setSessionSendsLaunchEvents:(BOOL)sessionSendsLaunchEvents { -} - -@end - -#else - -INJECT_STRIP_SYMBOL(clsurlsessionconfiguration) - -#endif diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCLSURLSession/FIRCLSURLSession_PrivateMethods.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCLSURLSession/FIRCLSURLSession_PrivateMethods.h deleted file mode 100644 index 84885e1d69..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCLSURLSession/FIRCLSURLSession_PrivateMethods.h +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSURLSessionAvailability.h" - -#if FIRCLSURLSESSION_REQUIRED - -#import - -@interface FIRCLSURLSession (PrivateMethods) - -- (void)runOnDelegateQueue:(void (^)(void))block; - -@end - -#endif diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionDataTask.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionDataTask.h deleted file mode 100644 index 22099584ef..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionDataTask.h +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSURLSessionAvailability.h" - -#if FIRCLSURLSESSION_REQUIRED - -#import "FIRCLSURLSessionTask.h" - -@interface FIRCLSURLSessionDataTask : FIRCLSURLSessionTask { - void (^_completionHandler)(NSData *data, NSURLResponse *response, NSError *error); - NSURLConnection *_connection; - NSMutableData *_data; - NSString *_taskDescription; -} - -@property(nonatomic, copy) NSString *taskDescription; - -@end - -#endif diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionDataTask.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionDataTask.m deleted file mode 100644 index be40ab753f..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionDataTask.m +++ /dev/null @@ -1,124 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSURLSessionAvailability.h" - -#if FIRCLSURLSESSION_REQUIRED -#import "FIRCLSURLSessionDataTask.h" - -#import "FIRCLSURLSessionDataTask_PrivateMethods.h" - -#define DELEGATE ((id)[self delegate]) - -@interface FIRCLSURLSessionDataTask () -@end - -@implementation FIRCLSURLSessionDataTask - -@synthesize connection = _connection; -@synthesize completionHandler = _completionHandler; -@synthesize taskDescription = _taskDescription; - -#if !__has_feature(objc_arc) -- (void)dealloc { - [_connection release]; - [_completionHandler release]; - [_taskDescription release]; - [_data release]; - - [super dealloc]; -} -#endif - -- (void)resume { - dispatch_async([self queue], ^{ - NSURLConnection *connection; - - if ([self connection]) { - return; - } - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - connection = [[NSURLConnection alloc] initWithRequest:[self originalRequest] - delegate:self - startImmediately:NO]; -#pragma clang diagnostic pop - - [self setConnection:connection]; - - // bummer we have to do this on a runloop, but other mechanisms require iOS 5 or 10.7 - [connection scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes]; -#if !__has_feature(objc_arc) - [connection release]; -#endif - [connection start]; - }); -} - -- (void)complete { - // call completion handler first - if (_completionHandler) { - // this should go to another queue - _completionHandler(_data, [self response], [self error]); - } - - // and then finally, call the session delegate completion - [DELEGATE task:self didCompleteWithError:[self error]]; -} - -- (void)cancel { - [self.connection cancel]; -} - -#pragma mark NSURLConnectionDelegate -- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { - dispatch_async([self queue], ^{ - [DELEGATE task:self didReceiveResponse:response]; - - [self setResponse:response]; - }); -} - -- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { - dispatch_async([self queue], ^{ - if (!self->_data) { - self->_data = [NSMutableData new]; - } - - [self->_data appendData:data]; - [DELEGATE task:self didReceiveData:data]; - }); -} - -- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { - dispatch_async([self queue], ^{ - [self setError:error]; - [self complete]; - }); -} - -- (void)connectionDidFinishLoading:(NSURLConnection *)connection { - dispatch_async([self queue], ^{ - [self complete]; - }); -} - -@end - -#else - -INJECT_STRIP_SYMBOL(clsurlsessiondatatask) - -#endif diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionDataTask_PrivateMethods.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionDataTask_PrivateMethods.h deleted file mode 100644 index f85a3776ff..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionDataTask_PrivateMethods.h +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSURLSessionAvailability.h" - -#if FIRCLSURLSESSION_REQUIRED - -#import - -#import "FIRCLSURLSessionTask_PrivateMethods.h" - -@protocol FIRCLSURLSessionDataDelegate; - -@interface FIRCLSURLSessionDataTask () - -@property(nonatomic, retain) NSURLConnection *connection; -@property(nonatomic, copy) void (^completionHandler) - (NSData *data, NSURLResponse *response, NSError *error); - -- (void)complete; - -@end - -@protocol FIRCLSURLSessionDataDelegate -@required - -- (void)task:(FIRCLSURLSessionDataTask *)task didReceiveResponse:(NSURLResponse *)response; -- (void)task:(FIRCLSURLSessionDataTask *)task didReceiveData:(NSData *)data; - -@end - -#endif diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionDownloadTask.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionDownloadTask.h deleted file mode 100644 index 314180f7dc..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionDownloadTask.h +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSURLSessionAvailability.h" - -#if FIRCLSURLSESSION_REQUIRED - -#import "FIRCLSURLSessionDataTask.h" - -@protocol FIRCLSURLSessionDownloadDelegate; - -@interface FIRCLSURLSessionDownloadTask : FIRCLSURLSessionDataTask { - void (^_downloadCompletionHandler)(NSURL *targetPath, NSURLResponse *response, NSError *error); - NSOutputStream *_outputStream; - NSURL *_targetURL; -} - -@end - -#endif diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionDownloadTask.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionDownloadTask.m deleted file mode 100644 index a0c9b2a846..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionDownloadTask.m +++ /dev/null @@ -1,157 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSURLSessionAvailability.h" - -#if FIRCLSURLSESSION_REQUIRED -#import "FIRCLSURLSessionDownloadTask.h" - -#import "FIRCLSURLSessionDownloadTask_PrivateMethods.h" - -#define DELEGATE ((id)[self delegate]) - -@interface FIRCLSURLSessionDownloadTask () -@end - -@implementation FIRCLSURLSessionDownloadTask - -@synthesize downloadCompletionHandler = _downloadCompletionHandler; - -- (id)init { - self = [super init]; - if (!self) { - return nil; - } - -#if __has_feature(objc_arc) - _targetURL = [self temporaryFileURL]; - _outputStream = [NSOutputStream outputStreamWithURL:_targetURL append:NO]; -#else - _targetURL = [[self temporaryFileURL] retain]; - _outputStream = [[NSOutputStream outputStreamWithURL:_targetURL append:NO] retain]; -#endif - - [_outputStream scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes]; - [_outputStream setDelegate:self]; - - return self; -} - -#if !__has_feature(objc_arc) -- (void)dealloc { - [_downloadCompletionHandler release]; - [_targetURL release]; - [_outputStream release]; - - [super dealloc]; -} -#else -- (void)dealloc { - [_outputStream close]; - _outputStream.delegate = nil; -} -#endif - -- (NSURL *)temporaryFileURL { - NSString *tmpPath; - - tmpPath = [NSTemporaryDirectory() - stringByAppendingPathComponent:[[NSProcessInfo processInfo] globallyUniqueString]]; - - // TODO: make this actually unique - return [NSURL fileURLWithPath:tmpPath isDirectory:NO]; -} - -- (void)cleanup { - // now, remove the temporary file - [[NSFileManager defaultManager] removeItemAtURL:_targetURL error:nil]; -} - -- (void)complete { - // This is an override of FIRCLSURLSessionDataTask's cleanup method - - // call completion handler first - if (_downloadCompletionHandler) { - _downloadCompletionHandler(_targetURL, [self response], [self error]); - } - - // followed by the session delegate, if there was no error - if (![self error]) { - [DELEGATE downloadTask:self didFinishDownloadingToURL:_targetURL]; - } - - // and then finally, call the session delegate completion - [DELEGATE task:self didCompleteWithError:[self error]]; -} - -- (void)writeDataToStream:(NSData *)data { - // open the stream first - if ([_outputStream streamStatus] == NSStreamStatusNotOpen) { - [_outputStream open]; - } - - if ([data respondsToSelector:@selector(enumerateByteRangesUsingBlock:)]) { - [data enumerateByteRangesUsingBlock:^(const void *bytes, NSRange byteRange, BOOL *stop) { - [self->_outputStream write:bytes maxLength:byteRange.length]; - }]; - - return; - } - - // fall back to the less-efficient mechanism for older OSes - [_outputStream write:[data bytes] maxLength:[data length]]; -} - -#pragma mark NSURLConnectionDelegate -- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { - dispatch_async([self queue], ^{ - [self writeDataToStream:data]; - }); -} - -- (void)completeForError { - dispatch_async([self queue], ^{ - [self->_outputStream close]; - [self->_connection cancel]; - if (![self error]) { - [self setError:[NSError errorWithDomain:@"FIRCLSURLSessionDownloadTaskError" - code:-1 - userInfo:nil]]; - } - [self complete]; - }); -} - -#pragma mark NSStreamDelegate -- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode { - switch (eventCode) { - case NSStreamEventHasSpaceAvailable: - break; - case NSStreamEventErrorOccurred: - [self completeForError]; - break; - case NSStreamEventEndEncountered: - break; - default: - break; - } -} - -@end - -#else - -INJECT_STRIP_SYMBOL(clsurlsessiondownloadtask) - -#endif diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionDownloadTask_PrivateMethods.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionDownloadTask_PrivateMethods.h deleted file mode 100644 index 7e8ee9d9f9..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionDownloadTask_PrivateMethods.h +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSURLSessionAvailability.h" - -#if FIRCLSURLSESSION_REQUIRED - -#import - -#import "FIRCLSURLSessionDataTask_PrivateMethods.h" - -@protocol FIRCLSURLSessionDownloadDelegate; - -@interface FIRCLSURLSessionDownloadTask () - -@property(nonatomic, copy) void (^downloadCompletionHandler) - (NSURL *targetPath, NSURLResponse *response, NSError *error); - -@end - -@protocol FIRCLSURLSessionDownloadDelegate -@required - -- (void)downloadTask:(FIRCLSURLSessionDownloadTask *)task didFinishDownloadingToURL:(NSURL *)url; - -@end - -#endif diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionTask.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionTask.h deleted file mode 100644 index 92316464d1..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionTask.h +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import - -@protocol FIRCLSURLSessionTaskDelegate; - -@interface FIRCLSURLSessionTask : NSObject { - __unsafe_unretained id _delegate; - - NSURLRequest* _originalRequest; - NSURLRequest* _currentRequest; - NSURLResponse* _response; - NSError* _error; - dispatch_queue_t _queue; - BOOL _invokesDelegate; -} - -@property(nonatomic, readonly, copy) NSURLRequest* originalRequest; -@property(nonatomic, readonly, copy) NSURLRequest* currentRequest; -@property(nonatomic, readonly, copy) NSURLResponse* response; - -@property(nonatomic, readonly, copy) NSError* error; - -- (void)resume; - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionTask.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionTask.m deleted file mode 100644 index 8eba2c185a..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionTask.m +++ /dev/null @@ -1,95 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSURLSessionAvailability.h" - -#if FIRCLSURLSESSION_REQUIRED -#import "FIRCLSURLSession.h" - -#import "FIRCLSURLSessionTask.h" - -#import "FIRCLSURLSessionTask_PrivateMethods.h" -#import "FIRCLSURLSession_PrivateMethods.h" - -@implementation FIRCLSURLSessionTask - -+ (instancetype)task { -#if __has_feature(objc_arc) - return [[self class] new]; - -#else - return [[[self class] new] autorelease]; -#endif -} - -@synthesize currentRequest = _currentRequest; -@synthesize originalRequest = _originalRequest; -@synthesize response = _response; -@synthesize error = _error; -@synthesize queue = _queue; -@synthesize invokesDelegate = _invokesDelegate; - -- (instancetype)init { - self = [super init]; - if (!self) { - return self; - } - - _queue = dispatch_queue_create("com.crashlytics.URLSessionTask", 0); - - _invokesDelegate = YES; - - return self; -} - -#if !__has_feature(objc_arc) -- (void)dealloc { - [_originalRequest release]; - [_currentRequest release]; - [_response release]; - [_error release]; - -#if !OS_OBJECT_USE_OBJC - dispatch_release(_queue); -#endif - - [super dealloc]; -} -#endif - -- (void)start { -#if DEBUG - assert(0 && "Must be implemented by FIRCLSURLSessionTask subclasses"); -#endif -} - -- (void)cancel { -#if DEBUG - assert(0 && "Must be implemented by FIRCLSURLSessionTask subclasses"); -#endif -} - -- (void)resume { -} - -- (void)cleanup { -} - -@end - -#else - -INJECT_STRIP_SYMBOL(clsurlsessiontask) - -#endif diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionTask_PrivateMethods.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionTask_PrivateMethods.h deleted file mode 100644 index 784b3a3ce6..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionTask_PrivateMethods.h +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSURLSessionAvailability.h" - -#if FIRCLSURLSESSION_REQUIRED - -#import - -@protocol FIRCLSURLSessionTaskDelegate; - -@interface FIRCLSURLSessionTask () - -+ (instancetype)task; - -@property(nonatomic, assign) id delegate; - -@property(nonatomic, copy) NSURLRequest *originalRequest; -@property(nonatomic, copy) NSURLRequest *currentRequest; -@property(nonatomic, copy) NSURLResponse *response; - -@property(nonatomic, readonly) dispatch_queue_t queue; -@property(nonatomic, assign) BOOL invokesDelegate; - -- (void)cancel; - -@property(nonatomic, copy) NSError *error; - -- (void)cleanup; - -@end - -@protocol FIRCLSURLSessionTaskDelegate -@required - -- (NSURLRequest *)task:(FIRCLSURLSessionTask *)task - willPerformHTTPRedirection:(NSHTTPURLResponse *)response - newRequest:(NSURLRequest *)request; - -- (void)task:(FIRCLSURLSessionTask *)task didCompleteWithError:(NSError *)error; - -@end - -#endif diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionUploadTask.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionUploadTask.h deleted file mode 100644 index 6c5ed8b4bf..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionUploadTask.h +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSURLSessionAvailability.h" - -#if FIRCLSURLSESSION_REQUIRED - -#import "FIRCLSURLSessionDataTask.h" - -@interface FIRCLSURLSessionUploadTask : FIRCLSURLSessionDataTask - -@end - -#endif diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionUploadTask.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionUploadTask.m deleted file mode 100644 index df3df8382b..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionUploadTask.m +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSURLSessionAvailability.h" - -#if FIRCLSURLSESSION_REQUIRED -#import "FIRCLSURLSessionUploadTask.h" - -@implementation FIRCLSURLSessionUploadTask - -@end - -#else - -INJECT_STRIP_SYMBOL(clsurlsessionuploadtask) - -#endif diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCLSUserDefaults/FIRCLSUserDefaults.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCLSUserDefaults/FIRCLSUserDefaults.h deleted file mode 100644 index 6df153268c..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCLSUserDefaults/FIRCLSUserDefaults.h +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import - -extern NSString *const FIRCLSUserDefaultsPathComponent; - -@interface FIRCLSUserDefaults : NSObject - -+ (instancetype)standardUserDefaults; - -- (id)objectForKey:(NSString *)key; -- (NSString *)stringForKey:(NSString *)key; -- (BOOL)boolForKey:(NSString *)key; -- (NSInteger)integerForKey:(NSString *)key; - -- (void)setObject:(id)object forKey:(NSString *)key; -- (void)setString:(NSString *)string forKey:(NSString *)key; -- (void)setBool:(BOOL)boolean forKey:(NSString *)key; -- (void)setInteger:(NSInteger)integer forKey:(NSString *)key; - -- (void)removeObjectForKey:(NSString *)key; -- (void)removeAllObjects; - -- (NSDictionary *)dictionaryRepresentation; - -- (void)migrateFromNSUserDefaults:(NSArray *)keysToMigrate; -- (id)objectForKeyByMigratingFromNSUserDefaults:(NSString *)keyToMigrateOrNil; -- (void)synchronize; - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCLSUserDefaults/FIRCLSUserDefaults.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCLSUserDefaults/FIRCLSUserDefaults.m deleted file mode 100644 index 244dbe169a..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCLSUserDefaults/FIRCLSUserDefaults.m +++ /dev/null @@ -1,372 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSUserDefaults.h" - -#import "FIRCLSApplication.h" -#import "FIRCLSLogger.h" - -#define CLS_USER_DEFAULTS_SERIAL_DISPATCH_QUEUE "com.crashlytics.CLSUserDefaults.access" -#define CLS_USER_DEFAULTS_SYNC_QUEUE "com.crashlytics.CLSUserDefaults.io" - -#define CLS_TARGET_CAN_WRITE_TO_DISK !TARGET_OS_TV - -// These values are required to stay the same between versions of the SDK so -// that when end users upgrade, their crashlytics data is still saved on disk. -#if !CLS_TARGET_CAN_WRITE_TO_DISK -static NSString *const FIRCLSNSUserDefaultsDataDictionaryKey = - @"com.crashlytics.CLSUserDefaults.user-default-key.data-dictionary"; -#endif - -NSString *const FIRCLSUserDefaultsPathComponent = @"CLSUserDefaults"; - -/** - * This class is an isolated re-implementation of NSUserDefaults which isolates our storage - * from that of our customers. This solves a number of issues we have seen in production, firstly - * that customers often delete or clear NSUserDefaults, unintentionally deleting our data. - * Further, we have seen thread safety issues in production with NSUserDefaults, as well as a number - * of bugs related to accessing NSUserDefaults before the device has been unlocked due to the - * NSFileProtection of NSUserDefaults. - */ -@interface FIRCLSUserDefaults () -@property(nonatomic, readwrite) BOOL synchronizeWroteToDisk; -#if CLS_TARGET_CAN_WRITE_TO_DISK -@property(nonatomic, copy, readonly) NSURL *directoryURL; -@property(nonatomic, copy, readonly) NSURL *fileURL; -#endif -@property(nonatomic, copy, readonly) - NSDictionary *persistedDataDictionary; // May only be safely accessed on the DictionaryQueue -@property(nonatomic, copy, readonly) - NSMutableDictionary *dataDictionary; // May only be safely accessed on the DictionaryQueue -@property(nonatomic, readonly) dispatch_queue_t - serialDictionaryQueue; // The queue on which all access to the dataDictionary occurs. -@property(nonatomic, readonly) - dispatch_queue_t synchronizationQueue; // The queue on which all disk access occurs. - -@end - -@implementation FIRCLSUserDefaults - -#pragma mark - singleton - -+ (instancetype)standardUserDefaults { - static FIRCLSUserDefaults *standardUserDefaults = nil; - static dispatch_once_t onceToken; - - dispatch_once(&onceToken, ^{ - standardUserDefaults = [[super allocWithZone:NULL] init]; - }); - - return standardUserDefaults; -} - -- (id)copyWithZone:(NSZone *)zone { - return self; -} - -- (id)init { - if (self = [super init]) { - _serialDictionaryQueue = - dispatch_queue_create(CLS_USER_DEFAULTS_SERIAL_DISPATCH_QUEUE, DISPATCH_QUEUE_SERIAL); - _synchronizationQueue = - dispatch_queue_create(CLS_USER_DEFAULTS_SYNC_QUEUE, DISPATCH_QUEUE_SERIAL); - - dispatch_sync(self.serialDictionaryQueue, ^{ -#if CLS_TARGET_CAN_WRITE_TO_DISK - self->_directoryURL = [self generateDirectoryURL]; - self->_fileURL = [[self->_directoryURL - URLByAppendingPathComponent:FIRCLSUserDefaultsPathComponent - isDirectory:NO] URLByAppendingPathExtension:@"plist"]; -#endif - self->_persistedDataDictionary = [self loadDefaults]; - if (!self->_persistedDataDictionary) { - self->_persistedDataDictionary = [NSDictionary dictionary]; - } - self->_dataDictionary = [self->_persistedDataDictionary mutableCopy]; - }); - } - return self; -} - -- (NSURL *)generateDirectoryURL { - NSURL *directoryBaseURL = - [[[NSFileManager defaultManager] URLsForDirectory:NSApplicationSupportDirectory - inDomains:NSUserDomainMask] lastObject]; - NSString *hostAppBundleIdentifier = [self getEscapedAppBundleIdentifier]; - return [self generateDirectoryURLForBaseURL:directoryBaseURL - hostAppBundleIdentifier:hostAppBundleIdentifier]; -} - -- (NSURL *)generateDirectoryURLForBaseURL:(NSURL *)directoryBaseURL - hostAppBundleIdentifier:(NSString *)hostAppBundleIdentifier { - NSURL *directoryURL = directoryBaseURL; - // On iOS NSApplicationSupportDirectory is contained in the app's bundle. On OSX, it is not (it is - // ~/Library/Application Support/). On OSX we create a directory - // ~/Library/Application Support//com.crashlytics/ for storing files. - // Mac App Store review process requires files to be written to - // ~/Library/Application Support//, - // so ~/Library/Application Support/com.crashlytics// cannot be used. -#if !TARGET_OS_SIMULATOR && !TARGET_OS_EMBEDDED - if (hostAppBundleIdentifier) { - directoryURL = [directoryURL URLByAppendingPathComponent:hostAppBundleIdentifier]; - } -#endif - directoryURL = [directoryURL URLByAppendingPathComponent:@"com.crashlytics"]; - return directoryURL; -} - -- (NSString *)getEscapedAppBundleIdentifier { - return FIRCLSApplicationGetBundleIdentifier(); -} - -#pragma mark - fetch object - -- (id)objectForKey:(NSString *)key { - __block id result; - - dispatch_sync(self.serialDictionaryQueue, ^{ - result = [self->_dataDictionary objectForKey:key]; - }); - - return result; -} - -- (NSString *)stringForKey:(NSString *)key { - id result = [self objectForKey:key]; - - if (result != nil && [result isKindOfClass:[NSString class]]) { - return (NSString *)result; - } else { - return nil; - } -} - -- (BOOL)boolForKey:(NSString *)key { - id result = [self objectForKey:key]; - if (result != nil && [result isKindOfClass:[NSNumber class]]) { - return [(NSNumber *)result boolValue]; - } else { - return NO; - } -} - -// Defaults to 0 -- (NSInteger)integerForKey:(NSString *)key { - id result = [self objectForKey:key]; - if (result && [result isKindOfClass:[NSNumber class]]) { - return [(NSNumber *)result integerValue]; - } else { - return 0; - } -} - -#pragma mark - set object - -- (void)setObject:(id)object forKey:(NSString *)key { - dispatch_sync(self.serialDictionaryQueue, ^{ - [self->_dataDictionary setValue:object forKey:key]; - }); -} - -- (void)setString:(NSString *)string forKey:(NSString *)key { - [self setObject:string forKey:key]; -} - -- (void)setBool:(BOOL)boolean forKey:(NSString *)key { - [self setObject:[NSNumber numberWithBool:boolean] forKey:key]; -} - -- (void)setInteger:(NSInteger)integer forKey:(NSString *)key { - [self setObject:[NSNumber numberWithInteger:integer] forKey:key]; -} - -#pragma mark - removing objects - -- (void)removeObjectForKey:(NSString *)key { - dispatch_sync(self.serialDictionaryQueue, ^{ - [self->_dataDictionary removeObjectForKey:key]; - }); -} - -- (void)removeAllObjects { - dispatch_sync(self.serialDictionaryQueue, ^{ - [self->_dataDictionary removeAllObjects]; - }); -} - -#pragma mark - dictionary representation - -- (NSDictionary *)dictionaryRepresentation { - __block NSDictionary *result; - - dispatch_sync(self.serialDictionaryQueue, ^{ - result = [self->_dataDictionary copy]; - }); - - return result; -} - -#pragma mark - synchronization - -- (void)synchronize { - __block BOOL dirty = NO; - - // only write to the disk if the dictionaries have changed - dispatch_sync(self.serialDictionaryQueue, ^{ - dirty = ![self->_persistedDataDictionary isEqualToDictionary:self->_dataDictionary]; - }); - - _synchronizeWroteToDisk = dirty; - if (!dirty) { - return; - } - - NSDictionary *state = [self dictionaryRepresentation]; - dispatch_sync(self.synchronizationQueue, ^{ -#if CLS_TARGET_CAN_WRITE_TO_DISK - BOOL isDirectory = NO; - BOOL pathExists = [[NSFileManager defaultManager] fileExistsAtPath:[self->_directoryURL path] - isDirectory:&isDirectory]; - - if (!pathExists) { - NSError *error; - if (![[NSFileManager defaultManager] createDirectoryAtURL:self->_directoryURL - withIntermediateDirectories:YES - attributes:nil - error:&error]) { - FIRCLSErrorLog(@"Failed to create directory with error: %@", error); - } - } - - if (![state writeToURL:self->_fileURL atomically:YES]) { - FIRCLSErrorLog(@"Unable to open file for writing at path %@", [self->_fileURL path]); - } else { -#if TARGET_OS_IOS - // We disable NSFileProtection on our file in order to allow us to access it even if the - // device is locked. - NSError *error; - if (![[NSFileManager defaultManager] - setAttributes:@{NSFileProtectionKey : NSFileProtectionNone} - ofItemAtPath:[self->_fileURL path] - error:&error]) { - FIRCLSErrorLog(@"Error setting NSFileProtection: %@", error); - } -#endif - } -#else - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - [defaults setObject:state forKey:FIRCLSNSUserDefaultsDataDictionaryKey]; - [defaults synchronize]; -#endif - }); - - dispatch_sync(self.serialDictionaryQueue, ^{ - self->_persistedDataDictionary = [self->_dataDictionary copy]; - }); -} - -- (NSDictionary *)loadDefaults { - __block NSDictionary *state = nil; - dispatch_sync(self.synchronizationQueue, ^{ -#if CLS_TARGET_CAN_WRITE_TO_DISK - BOOL isDirectory = NO; - BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:[self->_fileURL path] - isDirectory:&isDirectory]; - - if (fileExists && !isDirectory) { - state = [NSDictionary dictionaryWithContentsOfURL:self->_fileURL]; - if (nil == state) { - FIRCLSErrorLog(@"Failed to read existing UserDefaults file"); - } - } else if (!fileExists) { - // No file found. This is expected on first launch. - } else if (fileExists && isDirectory) { - FIRCLSErrorLog(@"Found directory where file expected. Removing conflicting directory"); - - NSError *error; - if (![[NSFileManager defaultManager] removeItemAtURL:self->_fileURL error:&error]) { - FIRCLSErrorLog(@"Error removing conflicting directory: %@", error); - } - } -#else - state = [[NSUserDefaults standardUserDefaults] dictionaryForKey:FIRCLSNSUserDefaultsDataDictionaryKey]; -#endif - }); - return state; -} - -#pragma mark - migration - -// This method migrates all keys specified from NSUserDefaults to FIRCLSUserDefaults -// To do so, we copy all known key-value pairs into FIRCLSUserDefaults, synchronize it, then -// remove the keys from NSUserDefaults and synchronize it. -- (void)migrateFromNSUserDefaults:(NSArray *)keysToMigrate { - BOOL didFindKeys = NO; - - // First, copy all of the keysToMigrate which are stored NSUserDefaults - for (NSString *key in keysToMigrate) { - id oldValue = [[NSUserDefaults standardUserDefaults] objectForKey:(NSString *)key]; - if (nil != oldValue) { - didFindKeys = YES; - [self setObject:oldValue forKey:key]; - } - } - - if (didFindKeys) { - // First synchronize FIRCLSUserDefaults such that all keysToMigrate in NSUserDefaults are stored - // in FIRCLSUserDefaults. At this point, data is duplicated. - [[FIRCLSUserDefaults standardUserDefaults] synchronize]; - - for (NSString *key in keysToMigrate) { - [[NSUserDefaults standardUserDefaults] removeObjectForKey:(NSString *)key]; - } - - // This should be our last interaction with NSUserDefaults. All data is migrated into - // FIRCLSUserDefaults - [[NSUserDefaults standardUserDefaults] synchronize]; - } -} - -// This method first queries FIRCLSUserDefaults to see if the key exist, and upon failure, -// searches for the key in NSUserDefaults, and migrates it if found. -- (id)objectForKeyByMigratingFromNSUserDefaults:(NSString *)keyToMigrateOrNil { - if (!keyToMigrateOrNil) { - return nil; - } - - id clsUserDefaultsValue = [self objectForKey:keyToMigrateOrNil]; - if (clsUserDefaultsValue != nil) { - return clsUserDefaultsValue; // if the value exists in FIRCLSUserDefaults, return it. - } - - id oldNSUserDefaultsValue = - [[NSUserDefaults standardUserDefaults] objectForKey:keyToMigrateOrNil]; - if (!oldNSUserDefaultsValue) { - return nil; // if the value also does not exist in NSUserDefaults, return nil. - } - - // Otherwise, the key exists in NSUserDefaults. Migrate it to FIRCLSUserDefaults - // and then return the associated value. - - // First store it in FIRCLSUserDefaults so in the event of a crash, data is not lost. - [self setObject:oldNSUserDefaultsValue forKey:keyToMigrateOrNil]; - [[FIRCLSUserDefaults standardUserDefaults] synchronize]; - - [[NSUserDefaults standardUserDefaults] removeObjectForKey:keyToMigrateOrNil]; - [[NSUserDefaults standardUserDefaults] synchronize]; - - return oldNSUserDefaultsValue; -} - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCLSUserDefaults/FIRCLSUserDefaults_private.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCLSUserDefaults/FIRCLSUserDefaults_private.h deleted file mode 100644 index 775bca24a2..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCLSUserDefaults/FIRCLSUserDefaults_private.h +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import -#import "FIRCLSUserDefaults.h" - -@interface FIRCLSUserDefaults (Private) -- (BOOL)synchronizeWroteToDisk; -- (NSDictionary *)loadDefaults; -- (NSURL *)generateDirectoryURLForBaseURL:(NSURL *)directoryBaseURL - hostAppBundleIdentifier:(NSString *)hostAppBundleIdentifer; -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCrashlytics.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCrashlytics.m deleted file mode 100644 index 0b2738b7e7..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRCrashlytics.m +++ /dev/null @@ -1,323 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include - -#if __has_include() -#import -#else -#import "FBLPromises.h" -#endif - -#import "FIRCLSApplicationIdentifierModel.h" -#include "FIRCLSCrashedMarkerFile.h" -#import "FIRCLSDataCollectionArbiter.h" -#import "FIRCLSDefines.h" -#include "FIRCLSException.h" -#import "FIRCLSFileManager.h" -#include "FIRCLSGlobals.h" -#import "FIRCLSHost.h" -#include "FIRCLSProfiling.h" -#import "FIRCLSReport_Private.h" -#import "FIRCLSSettings.h" -#import "FIRCLSUserDefaults.h" -#include "FIRCLSUserLogging.h" -#include "FIRCLSUtility.h" - -#import "FIRCLSByteUtility.h" -#import "FIRCLSFABHost.h" -#import "FIRCLSLogger.h" - -#import "FIRCLSReportManager.h" - -#import -#import -#import -#import -#import -#import -#import -#import - -#import -#import - -#if TARGET_OS_IPHONE -#import -#endif - -FIRCLSContext _firclsContext; -dispatch_queue_t _firclsLoggingQueue; -dispatch_queue_t _firclsBinaryImageQueue; -dispatch_queue_t _firclsExceptionQueue; - -static atomic_bool _hasInitializedInstance; - -NSString *const FIRCLSGoogleTransportMappingID = @"1206"; - -/// Empty protocol to register with FirebaseCore's component system. -@protocol FIRCrashlyticsInstanceProvider -@end - -@interface FIRCrashlytics () - -@property(nonatomic) BOOL didPreviouslyCrash; -@property(nonatomic, copy) NSString *googleAppID; -@property(nonatomic) FIRCLSDataCollectionArbiter *dataArbiter; -@property(nonatomic) FIRCLSFileManager *fileManager; -@property(nonatomic) FIRCLSReportManager *reportManager; -@property(nonatomic) GDTCORTransport *googleTransport; - -@end - -@implementation FIRCrashlytics - -#pragma mark - Singleton Support - -- (instancetype)initWithApp:(FIRApp *)app - appInfo:(NSDictionary *)appInfo - installations:(FIRInstallations *)installations - analytics:(id)analytics { - self = [super init]; - - if (self) { - bool expectedCalled = NO; - if (!atomic_compare_exchange_strong(&_hasInitializedInstance, &expectedCalled, YES)) { - FIRCLSErrorLog(@"Cannot instantiate more than one instance of Crashlytics."); - return nil; - } - - FIRCLSProfileMark mark = FIRCLSProfilingStart(); - - NSLog(@"[Firebase/Crashlytics] Version %@", @CLS_SDK_DISPLAY_VERSION); - - FIRCLSDeveloperLog("Crashlytics", @"Running on %@, %@ (%@)", FIRCLSHostModelInfo(), - FIRCLSHostOSDisplayVersion(), FIRCLSHostOSBuildVersion()); - - _googleTransport = [[GDTCORTransport alloc] initWithMappingID:FIRCLSGoogleTransportMappingID - transformers:nil - target:kGDTCORTargetCSH]; - - _fileManager = [[FIRCLSFileManager alloc] init]; - _googleAppID = app.options.googleAppID; - _dataArbiter = [[FIRCLSDataCollectionArbiter alloc] initWithApp:app withAppInfo:appInfo]; - - FIRCLSApplicationIdentifierModel *appModel = [[FIRCLSApplicationIdentifierModel alloc] init]; - FIRCLSSettings *settings = [[FIRCLSSettings alloc] initWithFileManager:_fileManager - appIDModel:appModel]; - - _reportManager = [[FIRCLSReportManager alloc] initWithFileManager:_fileManager - installations:installations - analytics:analytics - googleAppID:_googleAppID - dataArbiter:_dataArbiter - googleTransport:_googleTransport - appIDModel:appModel - settings:settings]; - - // Process did crash during previous execution - NSString *crashedMarkerFileName = [NSString stringWithUTF8String:FIRCLSCrashedMarkerFileName]; - NSString *crashedMarkerFileFullPath = - [[_fileManager rootPath] stringByAppendingPathComponent:crashedMarkerFileName]; - _didPreviouslyCrash = [_fileManager fileExistsAtPath:crashedMarkerFileFullPath]; - - if (_didPreviouslyCrash) { - // Delete the crash file marker in the background ensure start up is as fast as possible - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{ - [self.fileManager removeItemAtPath:crashedMarkerFileFullPath]; - }); - } - - [[[_reportManager startWithProfilingMark:mark] then:^id _Nullable(NSNumber *_Nullable value) { - if (![value boolValue]) { - FIRCLSErrorLog(@"Crash reporting could not be initialized"); - } - return value; - }] catch:^void(NSError *error) { - FIRCLSErrorLog(@"Crash reporting failed to initialize with error: %@", error); - }]; - } - - return self; -} - -+ (void)load { - [FIRApp registerInternalLibrary:(Class)self - withName:@"firebase-crashlytics" - withVersion:@CLS_SDK_DISPLAY_VERSION]; -} - -+ (NSArray *)componentsToRegister { - FIRDependency *analyticsDep = - [FIRDependency dependencyWithProtocol:@protocol(FIRAnalyticsInterop)]; - - FIRComponentCreationBlock creationBlock = - ^id _Nullable(FIRComponentContainer *container, BOOL *isCacheable) { - if (!container.app.isDefaultApp) { - FIRCLSErrorLog(@"Crashlytics must be used with the default Firebase app."); - return nil; - } - - id analytics = FIR_COMPONENT(FIRAnalyticsInterop, container); - - FIRInstallations *installations = [FIRInstallations installationsWithApp:container.app]; - - *isCacheable = YES; - - return [[FIRCrashlytics alloc] initWithApp:container.app - appInfo:NSBundle.mainBundle.infoDictionary - installations:installations - analytics:analytics]; - }; - - FIRComponent *component = - [FIRComponent componentWithProtocol:@protocol(FIRCrashlyticsInstanceProvider) - instantiationTiming:FIRInstantiationTimingEagerInDefaultApp - dependencies:@[ analyticsDep ] - creationBlock:creationBlock]; - return @[ component ]; -} - -+ (instancetype)crashlytics { - // The container will return the same instance since isCacheable is set - - FIRApp *defaultApp = [FIRApp defaultApp]; // Missing configure will be logged here. - - // Get the instance from the `FIRApp`'s container. This will create a new instance the - // first time it is called, and since `isCacheable` is set in the component creation - // block, it will return the existing instance on subsequent calls. - id instance = - FIR_COMPONENT(FIRCrashlyticsInstanceProvider, defaultApp.container); - - // In the component creation block, we return an instance of `FIRCrashlytics`. Cast it and - // return it. - return (FIRCrashlytics *)instance; -} - -- (void)setCrashlyticsCollectionEnabled:(BOOL)enabled { - [self.dataArbiter setCrashlyticsCollectionEnabled:enabled]; -} - -- (BOOL)isCrashlyticsCollectionEnabled { - return [self.dataArbiter isCrashlyticsCollectionEnabled]; -} - -#pragma mark - API: didCrashDuringPreviousExecution - -- (BOOL)didCrashDuringPreviousExecution { - return self.didPreviouslyCrash; -} - -- (void)processDidCrashDuringPreviousExecution { - NSString *crashedMarkerFileName = [NSString stringWithUTF8String:FIRCLSCrashedMarkerFileName]; - NSString *crashedMarkerFileFullPath = - [[self.fileManager rootPath] stringByAppendingPathComponent:crashedMarkerFileName]; - self.didPreviouslyCrash = [self.fileManager fileExistsAtPath:crashedMarkerFileFullPath]; - - if (self.didPreviouslyCrash) { - // Delete the crash file marker in the background ensure start up is as fast as possible - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{ - [self.fileManager removeItemAtPath:crashedMarkerFileFullPath]; - }); - } -} - -#pragma mark - API: Logging -- (void)log:(NSString *)msg { - FIRCLSLog(@"%@", msg); -} - -- (void)logWithFormat:(NSString *)format, ... { - va_list args; - va_start(args, format); - [self logWithFormat:format arguments:args]; - va_end(args); -} - -- (void)logWithFormat:(NSString *)format arguments:(va_list)args { - [self log:[[NSString alloc] initWithFormat:format arguments:args]]; -} - -#pragma mark - API: Accessors - -- (void)checkForUnsentReportsWithCompletion:(void (^)(BOOL))completion { - [[self.reportManager checkForUnsentReports] then:^id _Nullable(NSNumber *_Nullable value) { - completion([value boolValue]); - return nil; - }]; -} - -- (void)sendUnsentReports { - [self.reportManager sendUnsentReports]; -} - -- (void)deleteUnsentReports { - [self.reportManager deleteUnsentReports]; -} - -#pragma mark - API: setUserID -- (void)setUserID:(NSString *)userID { - FIRCLSUserLoggingRecordInternalKeyValue(FIRCLSUserIdentifierKey, userID); -} - -#pragma mark - API: setCustomValue - -- (void)setCustomValue:(id)value forKey:(NSString *)key { - FIRCLSUserLoggingRecordUserKeyValue(key, value); -} - -#pragma mark - API: Development Platform -// These two methods are depercated by our own API, so -// its ok to implement them -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-implementations" -+ (void)setDevelopmentPlatformName:(NSString *)name { - [[self crashlytics] setDevelopmentPlatformName:name]; -} - -+ (void)setDevelopmentPlatformVersion:(NSString *)version { - [[self crashlytics] setDevelopmentPlatformVersion:version]; -} -#pragma clang diagnostic pop - -- (NSString *)developmentPlatformName { - FIRCLSErrorLog(@"developmentPlatformName is write-only"); - return nil; -} - -- (void)setDevelopmentPlatformName:(NSString *)developmentPlatformName { - FIRCLSUserLoggingRecordInternalKeyValue(FIRCLSDevelopmentPlatformNameKey, - developmentPlatformName); -} - -- (NSString *)developmentPlatformVersion { - FIRCLSErrorLog(@"developmentPlatformVersion is write-only"); - return nil; -} - -- (void)setDevelopmentPlatformVersion:(NSString *)developmentPlatformVersion { - FIRCLSUserLoggingRecordInternalKeyValue(FIRCLSDevelopmentPlatformVersionKey, - developmentPlatformVersion); -} - -#pragma mark - API: Errors and Exceptions -- (void)recordError:(NSError *)error { - FIRCLSUserLoggingRecordError(error, nil); -} - -- (void)recordExceptionModel:(FIRExceptionModel *)exceptionModel { - FIRCLSExceptionRecordModel(exceptionModel); -} - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRExceptionModel.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRExceptionModel.m deleted file mode 100644 index f0c4697a86..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRExceptionModel.m +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2020 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRExceptionModel.h" - -@interface FIRExceptionModel () - -@property(nonatomic, copy) NSString *name; -@property(nonatomic, copy) NSString *reason; - -@end - -@implementation FIRExceptionModel - -- (instancetype)initWithName:(NSString *)name reason:(NSString *)reason { - self = [super init]; - if (!self) { - return nil; - } - - _name = [name copy]; - _reason = [reason copy]; - - return self; -} - -+ (instancetype)exceptionModelWithName:(NSString *)name reason:(NSString *)reason { - return [[FIRExceptionModel alloc] initWithName:name reason:reason]; -} - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRStackFrame.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRStackFrame.m deleted file mode 100644 index 3044914650..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/FIRStackFrame.m +++ /dev/null @@ -1,94 +0,0 @@ -// Copyright 2020 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRStackFrame_Private.h" - -@interface FIRStackFrame () - -@property(nonatomic, copy, nullable) NSString *symbol; -@property(nonatomic, copy, nullable) NSString *rawSymbol; -@property(nonatomic, copy, nullable) NSString *library; -@property(nonatomic, copy, nullable) NSString *fileName; -@property(nonatomic, assign) uint32_t lineNumber; -@property(nonatomic, assign) uint64_t offset; -@property(nonatomic, assign) uint64_t address; - -@property(nonatomic, assign) BOOL isSymbolicated; - -@end - -@implementation FIRStackFrame - -#pragma mark - Public Methods - -- (instancetype)initWithSymbol:(NSString *)symbol file:(NSString *)file line:(NSInteger)line { - self = [super init]; - if (!self) { - return nil; - } - - _symbol = [symbol copy]; - _fileName = [file copy]; - _lineNumber = (uint32_t)line; - - _isSymbolicated = true; - - return self; -} - -+ (instancetype)stackFrameWithSymbol:(NSString *)symbol file:(NSString *)file line:(NSInteger)line { - return [[FIRStackFrame alloc] initWithSymbol:symbol file:file line:line]; -} - -#pragma mark - Internal Methods - -+ (instancetype)stackFrame { - return [[self alloc] init]; -} - -+ (instancetype)stackFrameWithAddress:(NSUInteger)address { - FIRStackFrame *frame = [self stackFrame]; - - [frame setAddress:address]; - - return frame; -} - -+ (instancetype)stackFrameWithSymbol:(NSString *)symbol { - FIRStackFrame *frame = [self stackFrame]; - - frame.symbol = symbol; - frame.rawSymbol = symbol; - - return frame; -} - -#pragma mark - Overrides - -- (NSString *)description { - if (self.isSymbolicated) { - return [NSString - stringWithFormat:@"{%@ - %@:%u}", [self fileName], [self symbol], [self lineNumber]]; - } - - if (self.fileName) { - return [NSString stringWithFormat:@"{[0x%llx] %@ - %@:%u}", [self address], [self fileName], - [self symbol], [self lineNumber]]; - } - - return [NSString - stringWithFormat:@"{[0x%llx + %u] %@}", [self address], [self lineNumber], [self symbol]]; -} - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Handlers/FIRCLSException.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Handlers/FIRCLSException.h deleted file mode 100644 index 61dac77c32..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Handlers/FIRCLSException.h +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#pragma once - -#include -#include - -#ifdef __OBJC__ -#import -@class FIRStackFrame; -@class FIRExceptionModel; -#endif - -#define CLS_EXCEPTION_STRING_LENGTH_MAX (1024 * 16) - -typedef enum { - FIRCLSExceptionTypeUnknown = 0, - FIRCLSExceptionTypeObjectiveC = 1, - FIRCLSExceptionTypeCpp = 2, - // 3 was FIRCLSExceptionTypeJavascript - // Keeping these numbers the same just to be safe - FIRCLSExceptionTypeCustom = 4 -} FIRCLSExceptionType; - -typedef struct { - const char* path; - - void (*originalTerminateHandler)(void); - -#if !TARGET_OS_IPHONE - void* originalNSApplicationReportException; -#endif - - uint32_t maxCustomExceptions; -} FIRCLSExceptionReadOnlyContext; - -typedef struct { - uint32_t customExceptionCount; -} FIRCLSExceptionWritableContext; - -__BEGIN_DECLS - -void FIRCLSExceptionInitialize(FIRCLSExceptionReadOnlyContext* roContext, - FIRCLSExceptionWritableContext* rwContext, - void* delegate); -void FIRCLSExceptionCheckHandlers(void* delegate); - -void FIRCLSExceptionRaiseTestObjCException(void) __attribute((noreturn)); -void FIRCLSExceptionRaiseTestCppException(void) __attribute((noreturn)); - -#ifdef __OBJC__ -void FIRCLSExceptionRecordModel(FIRExceptionModel* exceptionModel); -void FIRCLSExceptionRecordNSException(NSException* exception); -void FIRCLSExceptionRecord(FIRCLSExceptionType type, - const char* name, - const char* reason, - NSArray* frames, - BOOL attemptDelivery); -#endif - -__END_DECLS diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Handlers/FIRCLSException.mm b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Handlers/FIRCLSException.mm deleted file mode 100644 index 6f20990457..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Handlers/FIRCLSException.mm +++ /dev/null @@ -1,410 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import - -#include "FIRCLSException.h" - -#import "FIRExceptionModel_Private.h" -#import "FIRStackFrame_Private.h" - -#include "FIRCLSApplication.h" -#include "FIRCLSFile.h" -#include "FIRCLSGlobals.h" -#include "FIRCLSHandler.h" -#import "FIRCLSLogger.h" -#include "FIRCLSProcess.h" -#import "FIRCLSUserLogging.h" -#import "FIRCLSUtility.h" - -#include "FIRCLSDemangleOperation.h" -#import "FIRCLSReportManager_Private.h" - -// C++/Objective-C exception handling -#include -#include -#include -#include - -#if !TARGET_OS_IPHONE -#import -#import -#endif - -#pragma mark Prototypes -static void FIRCLSTerminateHandler(void); -#if !TARGET_OS_IPHONE -void FIRCLSNSApplicationReportException(id self, SEL cmd, NSException *exception); - -typedef void (*NSApplicationReportExceptionFunction)(id, SEL, NSException *); - -static BOOL FIRCLSIsNSApplicationCrashOnExceptionsEnabled(void); -static NSApplicationReportExceptionFunction FIRCLSOriginalNSExceptionReportExceptionFunction(void); -static Method FIRCLSGetNSApplicationReportExceptionMethod(void); - -#endif - -#pragma mark - API -void FIRCLSExceptionInitialize(FIRCLSExceptionReadOnlyContext *roContext, - FIRCLSExceptionWritableContext *rwContext, - void *delegate) { - if (!FIRCLSUnlinkIfExists(roContext->path)) { - FIRCLSSDKLog("Unable to reset the exception file %s\n", strerror(errno)); - } - - roContext->originalTerminateHandler = std::set_terminate(FIRCLSTerminateHandler); - -#if !TARGET_OS_IPHONE - // If FIRCLSApplicationSharedInstance is null, we don't need this - if (FIRCLSIsNSApplicationCrashOnExceptionsEnabled() && FIRCLSApplicationSharedInstance()) { - Method m = FIRCLSGetNSApplicationReportExceptionMethod(); - - roContext->originalNSApplicationReportException = - (void *)method_setImplementation(m, (IMP)FIRCLSNSApplicationReportException); - } -#endif - - rwContext->customExceptionCount = 0; -} - -void FIRCLSExceptionRecordModel(FIRExceptionModel *exceptionModel) { - const char *name = [[exceptionModel.name copy] UTF8String]; - const char *reason = [[exceptionModel.reason copy] UTF8String]; - - FIRCLSExceptionRecord(FIRCLSExceptionTypeCustom, name, reason, [exceptionModel.stackTrace copy], - NO); -} - -void FIRCLSExceptionRecordNSException(NSException *exception) { - FIRCLSSDKLog("Recording an NSException\n"); - - NSArray *returnAddresses = [exception callStackReturnAddresses]; - - NSString *name = [exception name]; - NSString *reason = [exception reason]; - - // It's tempting to try to make use of callStackSymbols here. But, the output - // of that function is not intended to be machine-readible. We could parse it, - // but that isn't really worthwhile, considering that address-based symbolication - // needs to work anyways. - - // package our frames up into the appropriate format - NSMutableArray *frames = [NSMutableArray new]; - - for (NSNumber *address in returnAddresses) { - [frames addObject:[FIRStackFrame stackFrameWithAddress:[address unsignedIntegerValue]]]; - } - - FIRCLSExceptionRecord(FIRCLSExceptionTypeObjectiveC, [name UTF8String], [reason UTF8String], - frames, YES); -} - -static void FIRCLSExceptionRecordFrame(FIRCLSFile *file, FIRStackFrame *frame) { - FIRCLSFileWriteHashStart(file); - - FIRCLSFileWriteHashEntryUint64(file, "pc", [frame address]); - - NSString *string = [frame symbol]; - if (string) { - FIRCLSFileWriteHashEntryHexEncodedString(file, "symbol", [string UTF8String]); - } - - FIRCLSFileWriteHashEntryUint64(file, "offset", [frame offset]); - - string = [frame library]; - if (string) { - FIRCLSFileWriteHashEntryHexEncodedString(file, "library", [string UTF8String]); - } - - string = [frame fileName]; - if (string) { - FIRCLSFileWriteHashEntryHexEncodedString(file, "file", [string UTF8String]); - } - - FIRCLSFileWriteHashEntryUint64(file, "line", [frame lineNumber]); - - FIRCLSFileWriteHashEnd(file); -} - -static bool FIRCLSExceptionIsNative(FIRCLSExceptionType type) { - return type == FIRCLSExceptionTypeObjectiveC || type == FIRCLSExceptionTypeCpp; -} - -static const char *FIRCLSExceptionNameForType(FIRCLSExceptionType type) { - switch (type) { - case FIRCLSExceptionTypeObjectiveC: - return "objective-c"; - case FIRCLSExceptionTypeCpp: - return "c++"; - case FIRCLSExceptionTypeCustom: - return "custom"; - default: - break; - } - - return "unknown"; -} - -void FIRCLSExceptionWrite(FIRCLSFile *file, - FIRCLSExceptionType type, - const char *name, - const char *reason, - NSArray *frames) { - FIRCLSFileWriteSectionStart(file, "exception"); - - FIRCLSFileWriteHashStart(file); - - FIRCLSFileWriteHashEntryString(file, "type", FIRCLSExceptionNameForType(type)); - FIRCLSFileWriteHashEntryHexEncodedString(file, "name", name); - FIRCLSFileWriteHashEntryHexEncodedString(file, "reason", reason); - FIRCLSFileWriteHashEntryUint64(file, "time", time(NULL)); - - if ([frames count]) { - FIRCLSFileWriteHashKey(file, "frames"); - FIRCLSFileWriteArrayStart(file); - - for (FIRStackFrame *frame in frames) { - FIRCLSExceptionRecordFrame(file, frame); - } - - FIRCLSFileWriteArrayEnd(file); - } - - FIRCLSFileWriteHashEnd(file); - - FIRCLSFileWriteSectionEnd(file); -} - -void FIRCLSExceptionRecord(FIRCLSExceptionType type, - const char *name, - const char *reason, - NSArray *frames, - BOOL attemptDelivery) { - if (!FIRCLSContextIsInitialized()) { - return; - } - - bool native = FIRCLSExceptionIsNative(type); - - FIRCLSSDKLog("Recording an exception structure (%d, %d)\n", attemptDelivery, native); - - // exceptions can happen on multiple threads at the same time - if (native) { - dispatch_sync(_firclsExceptionQueue, ^{ - const char *path = _firclsContext.readonly->exception.path; - FIRCLSFile file; - - if (!FIRCLSFileInitWithPath(&file, path, false)) { - FIRCLSSDKLog("Unable to open exception file\n"); - return; - } - - FIRCLSExceptionWrite(&file, type, name, reason, frames); - - // We only want to do this work if we have the expectation that we'll actually crash - FIRCLSHandler(&file, mach_thread_self(), NULL); - - FIRCLSFileClose(&file); - - // disallow immediate delivery for non-native exceptions - if (attemptDelivery) { - FIRCLSHandlerAttemptImmediateDelivery(); - } - }); - } else { - FIRCLSUserLoggingWriteAndCheckABFiles( - &_firclsContext.readonly->logging.customExceptionStorage, - &_firclsContext.writable->logging.activeCustomExceptionPath, ^(FIRCLSFile *file) { - FIRCLSExceptionWrite(file, type, name, reason, frames); - }); - } - - FIRCLSSDKLog("Finished recording an exception structure\n"); -} - -// Ignore this message here, because we know that this call will not leak. -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Winvalid-noreturn" -void FIRCLSExceptionRaiseTestObjCException(void) { - [NSException raise:@"CrashlyticsTestException" - format:@"This is an Objective-C exception using for testing."]; -} - -void FIRCLSExceptionRaiseTestCppException(void) { - throw "Crashlytics C++ Test Exception"; -} -#pragma clang diagnostic pop - -static const char *FIRCLSExceptionDemangle(const char *symbol) { - return [[FIRCLSDemangleOperation demangleCppSymbol:symbol] UTF8String]; -} - -static void FIRCLSCatchAndRecordActiveException(std::type_info *typeInfo) { - if (!FIRCLSIsValidPointer(typeInfo)) { - FIRCLSSDKLog("Error: invalid parameter\n"); - return; - } - - const char *name = typeInfo->name(); - FIRCLSSDKLog("Recording exception of type '%s'\n", name); - - // This is a funny technique to get the exception object. The inner @try - // has the ability to capture NSException-derived objects. It seems that - // c++ trys can do that in some cases, but I was warned by the WWDC labs - // that there are cases where that will not work (like for NSException subclasses). - try { - @try { - // This could potentially cause a call to std::terminate() if there is actually no active - // exception. - throw; - } @catch (NSException *exception) { -#if TARGET_OS_IPHONE - FIRCLSExceptionRecordNSException(exception); -#else - // There's no need to record this here, because we're going to get - // the value forward to us by AppKit - FIRCLSSDKLog("Skipping ObjC exception at this point\n"); -#endif - } - } catch (const char *exc) { - FIRCLSExceptionRecord(FIRCLSExceptionTypeCpp, "const char *", exc, nil, YES); - } catch (const std::string &exc) { - FIRCLSExceptionRecord(FIRCLSExceptionTypeCpp, "std::string", exc.c_str(), nil, YES); - } catch (const std::exception &exc) { - FIRCLSExceptionRecord(FIRCLSExceptionTypeCpp, FIRCLSExceptionDemangle(name), exc.what(), nil, - YES); - } catch (const std::exception *exc) { - FIRCLSExceptionRecord(FIRCLSExceptionTypeCpp, FIRCLSExceptionDemangle(name), exc->what(), nil, - YES); - } catch (const std::bad_alloc &exc) { - // it is especially important to avoid demangling in this case, because the expetation at this - // point is that all allocations could fail - FIRCLSExceptionRecord(FIRCLSExceptionTypeCpp, "std::bad_alloc", exc.what(), nil, YES); - } catch (...) { - FIRCLSExceptionRecord(FIRCLSExceptionTypeCpp, FIRCLSExceptionDemangle(name), "", nil, YES); - } -} - -#pragma mark - Handlers -static void FIRCLSTerminateHandler(void) { - FIRCLSSDKLog("C++ terminate handler invoked\n"); - - void (*handler)(void) = _firclsContext.readonly->exception.originalTerminateHandler; - if (handler == FIRCLSTerminateHandler) { - FIRCLSSDKLog("Error: original handler was set recursively\n"); - handler = NULL; - } - - // Restore pre-existing handler, if any. Do this early, so that - // if std::terminate is called while we are executing here, we do not recurse. - if (handler) { - FIRCLSSDKLog("restoring pre-existing handler\n"); - - // To prevent infinite recursion in this function, check that we aren't resetting the terminate - // handler to the same function again, which would be this function in the event that we can't - // actually change the handler during a terminate. - if (std::set_terminate(handler) == handler) { - FIRCLSSDKLog("handler has already been restored, aborting\n"); - abort(); - } - } - - // we can use typeInfo to record the type of the exception, - // but we must use a catch to get the value - std::type_info *typeInfo = __cxxabiv1::__cxa_current_exception_type(); - if (typeInfo) { - FIRCLSCatchAndRecordActiveException(typeInfo); - } else { - FIRCLSSDKLog("no active exception\n"); - } - - // only do this if there was a pre-existing handler - if (handler) { - FIRCLSSDKLog("invoking pre-existing handler\n"); - handler(); - } - - FIRCLSSDKLog("aborting\n"); - abort(); -} - -void FIRCLSExceptionCheckHandlers(void *delegate) { -#if !TARGET_OS_IPHONE - // Check this on OS X all the time, even if the debugger is attached. This is a common - // source of errors, so we want to be extra verbose in this case. - if (FIRCLSApplicationSharedInstance()) { - if (!FIRCLSIsNSApplicationCrashOnExceptionsEnabled()) { - FIRCLSWarningLog(@"Warning: NSApplicationCrashOnExceptions is not set. This will " - @"result in poor top-level uncaught exception reporting."); - } - } -#endif - - if (_firclsContext.readonly->debuggerAttached) { - return; - } - - void *ptr = NULL; - - ptr = (void *)std::get_terminate(); - if (ptr != FIRCLSTerminateHandler) { - FIRCLSLookupFunctionPointer(ptr, ^(const char *name, const char *lib) { - FIRCLSWarningLog(@"Warning: std::get_terminate is '%s' in '%s'", name, lib); - }); - } - -#if TARGET_OS_IPHONE - ptr = (void *)NSGetUncaughtExceptionHandler(); - if (ptr) { - FIRCLSLookupFunctionPointer(ptr, ^(const char *name, const char *lib) { - FIRCLSWarningLog(@"Warning: NSUncaughtExceptionHandler is '%s' in '%s'", name, lib); - }); - } -#else - if (FIRCLSApplicationSharedInstance() && FIRCLSIsNSApplicationCrashOnExceptionsEnabled()) { - // In this case, we *might* be able to intercept exceptions. But, verify we've still - // swizzled the method. - Method m = FIRCLSGetNSApplicationReportExceptionMethod(); - - if (method_getImplementation(m) != (IMP)FIRCLSNSApplicationReportException) { - FIRCLSWarningLog( - @"Warning: top-level NSApplication-reported exceptions cannot be intercepted"); - } - } -#endif -} - -#pragma mark - AppKit Handling -#if !TARGET_OS_IPHONE -static BOOL FIRCLSIsNSApplicationCrashOnExceptionsEnabled(void) { - return [[NSUserDefaults standardUserDefaults] boolForKey:@"NSApplicationCrashOnExceptions"]; -} - -static Method FIRCLSGetNSApplicationReportExceptionMethod(void) { - return class_getInstanceMethod(NSClassFromString(@"NSApplication"), @selector(reportException:)); -} - -static NSApplicationReportExceptionFunction FIRCLSOriginalNSExceptionReportExceptionFunction(void) { - return (NSApplicationReportExceptionFunction) - _firclsContext.readonly->exception.originalNSApplicationReportException; -} - -void FIRCLSNSApplicationReportException(id self, SEL cmd, NSException *exception) { - FIRCLSExceptionRecordNSException(exception); - - // Call the original implementation - FIRCLSOriginalNSExceptionReportExceptionFunction()(self, cmd, exception); -} - -#endif diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Handlers/FIRCLSHandler.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Handlers/FIRCLSHandler.h deleted file mode 100644 index 7ce03e4164..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Handlers/FIRCLSHandler.h +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#pragma once - -#include - -#include "FIRCLSFile.h" - -__BEGIN_DECLS - -void FIRCLSHandler(FIRCLSFile* file, thread_t crashedThread, void* uapVoid); -void FIRCLSHandlerAttemptImmediateDelivery(void); - -__END_DECLS diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Handlers/FIRCLSHandler.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Handlers/FIRCLSHandler.m deleted file mode 100644 index 918e4265e6..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Handlers/FIRCLSHandler.m +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "FIRCLSHandler.h" - -#include "FIRCLSCrashedMarkerFile.h" -#include "FIRCLSGlobals.h" -#include "FIRCLSHost.h" -#include "FIRCLSProcess.h" -#include "FIRCLSUtility.h" - -#import "FIRCLSReportManager_Private.h" - -void FIRCLSHandler(FIRCLSFile* file, thread_t crashedThread, void* uapVoid) { - FIRCLSProcess process; - - FIRCLSProcessInit(&process, crashedThread, uapVoid); - - FIRCLSProcessSuspendAllOtherThreads(&process); - - FIRCLSProcessRecordAllThreads(&process, file); - - FIRCLSProcessRecordRuntimeInfo(&process, file); - // Get dispatch queue and thread names. Note that getting the thread names - // can hang, so let's do that last - FIRCLSProcessRecordDispatchQueueNames(&process, file); - FIRCLSProcessRecordThreadNames(&process, file); - - // this stuff isn't super important, but we can try - FIRCLSProcessRecordStats(&process, file); - FIRCLSHostWriteDiskUsage(file); - - // This is the first common point where various crash handlers call into - // Store a crash file marker to indicate that a crash has occured - FIRCLSCreateCrashedMarkerFile(); - - FIRCLSProcessResumeAllOtherThreads(&process); - - // clean up after ourselves - FIRCLSProcessDestroy(&process); -} - -void FIRCLSHandlerAttemptImmediateDelivery(void) { - // now, attempt to relay the event to the delegate - FIRCLSReportManager* manager = (__bridge id)_firclsContext.readonly->delegate; - - if ([manager respondsToSelector:@selector(potentiallySubmittableCrashOccurred)]) { - [manager potentiallySubmittableCrashOccurred]; - } -} diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Handlers/FIRCLSMachException.c b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Handlers/FIRCLSMachException.c deleted file mode 100644 index 3ec4e9790e..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Handlers/FIRCLSMachException.c +++ /dev/null @@ -1,533 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "FIRCLSDefines.h" -#include "FIRCLSFeatures.h" - -#if CLS_MACH_EXCEPTION_SUPPORTED - -#include "FIRCLSGlobals.h" -#include "FIRCLSHandler.h" -#include "FIRCLSMachException.h" -#include "FIRCLSProcess.h" -#include "FIRCLSSignal.h" -#include "FIRCLSUtility.h" - -#include -#include -#include -#include - -#pragma mark Prototypes -static exception_mask_t FIRCLSMachExceptionMask(void); -static void* FIRCLSMachExceptionServer(void* argument); -static bool FIRCLSMachExceptionThreadStart(FIRCLSMachExceptionReadContext* context); -static bool FIRCLSMachExceptionReadMessage(FIRCLSMachExceptionReadContext* context, - MachExceptionMessage* message); -static kern_return_t FIRCLSMachExceptionDispatchMessage(FIRCLSMachExceptionReadContext* context, - MachExceptionMessage* message); -static bool FIRCLSMachExceptionReply(FIRCLSMachExceptionReadContext* context, - MachExceptionMessage* message, - kern_return_t result); -static bool FIRCLSMachExceptionRegister(FIRCLSMachExceptionReadContext* context, - exception_mask_t ignoreMask); -static bool FIRCLSMachExceptionUnregister(FIRCLSMachExceptionOriginalPorts* originalPorts, - exception_mask_t mask); -static bool FIRCLSMachExceptionRecord(FIRCLSMachExceptionReadContext* context, - MachExceptionMessage* message); - -#pragma mark - Initialization -void FIRCLSMachExceptionInit(FIRCLSMachExceptionReadContext* context, exception_mask_t ignoreMask) { - if (!FIRCLSUnlinkIfExists(context->path)) { - FIRCLSSDKLog("Unable to reset the mach exception file %s\n", strerror(errno)); - } - - if (!FIRCLSMachExceptionRegister(context, ignoreMask)) { - FIRCLSSDKLog("Unable to register mach exception handler\n"); - return; - } - - if (!FIRCLSMachExceptionThreadStart(context)) { - FIRCLSSDKLog("Unable to start thread\n"); - FIRCLSMachExceptionUnregister(&context->originalPorts, context->mask); - } -} - -void FIRCLSMachExceptionCheckHandlers(void) { - if (_firclsContext.readonly->debuggerAttached) { - return; - } - - // It isn't really critical that this be done, as its extremely uncommon to run into - // preexisting handlers. - // Can use task_get_exception_ports for this. -} - -static exception_mask_t FIRCLSMachExceptionMask(void) { - exception_mask_t mask; - - // EXC_BAD_ACCESS - // EXC_BAD_INSTRUCTION - // EXC_ARITHMETIC - // EXC_EMULATION - non-failure - // EXC_SOFTWARE - non-failure - // EXC_BREAKPOINT - trap instructions, from the debugger and code. Needs special treatment. - // EXC_SYSCALL - non-failure - // EXC_MACH_SYSCALL - non-failure - // EXC_RPC_ALERT - non-failure - // EXC_CRASH - see below - // EXC_RESOURCE - non-failure, happens when a process exceeds a resource limit - // EXC_GUARD - see below - // - // EXC_CRASH is a special kind of exception. It is handled by launchd, and treated special by - // the kernel. Seems that we cannot safely catch it - our handler will never be called. This - // is a confirmed kernel bug. Lacking access to EXC_CRASH means we must use signal handlers to - // cover all types of crashes. - // EXC_GUARD is relatively new, and isn't available on all OS versions. You have to be careful, - // becuase you cannot succesfully register hanlders if there are any unrecognized masks. We've - // dropped support for old OS versions that didn't have EXC_GUARD (iOS 5 and below, macOS 10.6 and - // below) so we always add it now - - mask = EXC_MASK_BAD_ACCESS | EXC_MASK_BAD_INSTRUCTION | EXC_MASK_ARITHMETIC | - EXC_MASK_BREAKPOINT | EXC_MASK_GUARD; - - return mask; -} - -static bool FIRCLSMachExceptionThreadStart(FIRCLSMachExceptionReadContext* context) { - pthread_attr_t attr; - - if (pthread_attr_init(&attr) != 0) { - FIRCLSSDKLog("pthread_attr_init %s\n", strerror(errno)); - return false; - } - - if (pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED) != 0) { - FIRCLSSDKLog("pthread_attr_setdetachstate %s\n", strerror(errno)); - return false; - } - - // Use to pre-allocate a stack for this thread - // The stack must be page-aligned - if (pthread_attr_setstack(&attr, _firclsContext.readonly->machStack, - CLS_MACH_EXCEPTION_HANDLER_STACK_SIZE) != 0) { - FIRCLSSDKLog("pthread_attr_setstack %s\n", strerror(errno)); - return false; - } - - if (pthread_create(&context->thread, &attr, FIRCLSMachExceptionServer, context) != 0) { - FIRCLSSDKLog("pthread_create %s\n", strerror(errno)); - return false; - } - - pthread_attr_destroy(&attr); - - return true; -} - -exception_mask_t FIRCLSMachExceptionMaskForSignal(int signal) { - switch (signal) { - case SIGTRAP: - return EXC_MASK_BREAKPOINT; - case SIGSEGV: - return EXC_MASK_BAD_ACCESS; - case SIGBUS: - return EXC_MASK_BAD_ACCESS; - case SIGILL: - return EXC_MASK_BAD_INSTRUCTION; - case SIGABRT: - return EXC_MASK_CRASH; - case SIGSYS: - return EXC_MASK_CRASH; - case SIGFPE: - return EXC_MASK_ARITHMETIC; - } - - return 0; -} - -#pragma mark - Message Handling -static void* FIRCLSMachExceptionServer(void* argument) { - FIRCLSMachExceptionReadContext* context = argument; - - pthread_setname_np("com.google.firebase.crashlytics.MachExceptionServer"); - - while (1) { - MachExceptionMessage message; - - // read the exception message - if (!FIRCLSMachExceptionReadMessage(context, &message)) { - break; - } - - // handle it, and possibly forward - kern_return_t result = FIRCLSMachExceptionDispatchMessage(context, &message); - - // and now, reply - if (!FIRCLSMachExceptionReply(context, &message, result)) { - break; - } - } - - FIRCLSSDKLog("Mach exception server thread exiting\n"); - - return NULL; -} - -static bool FIRCLSMachExceptionReadMessage(FIRCLSMachExceptionReadContext* context, - MachExceptionMessage* message) { - mach_msg_return_t r; - - memset(message, 0, sizeof(MachExceptionMessage)); - - r = mach_msg(&message->head, MACH_RCV_MSG | MACH_RCV_LARGE, 0, sizeof(MachExceptionMessage), - context->port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL); - if (r != MACH_MSG_SUCCESS) { - FIRCLSSDKLog("Error receving mach_msg (%d)\n", r); - return false; - } - - FIRCLSSDKLog("Accepted mach exception message\n"); - - return true; -} - -static kern_return_t FIRCLSMachExceptionDispatchMessage(FIRCLSMachExceptionReadContext* context, - MachExceptionMessage* message) { - FIRCLSSDKLog("Mach exception: 0x%x, count: %d, code: 0x%llx 0x%llx\n", message->exception, - message->codeCnt, message->codeCnt > 0 ? message->code[0] : -1, - message->codeCnt > 1 ? message->code[1] : -1); - - // This will happen if a child process raises an exception, as the exception ports are - // inherited. - if (message->task.name != mach_task_self()) { - FIRCLSSDKLog("Mach exception task mis-match, returning failure\n"); - return KERN_FAILURE; - } - - FIRCLSSDKLog("Unregistering handler\n"); - if (!FIRCLSMachExceptionUnregister(&context->originalPorts, context->mask)) { - FIRCLSSDKLog("Failed to unregister\n"); - return KERN_FAILURE; - } - - FIRCLSSDKLog("Restoring original signal handlers\n"); - if (!FIRCLSSignalSafeInstallPreexistingHandlers(&_firclsContext.readonly->signal)) { - FIRCLSSDKLog("Failed to restore signal handlers\n"); - return KERN_FAILURE; - } - - FIRCLSSDKLog("Recording mach exception\n"); - if (!FIRCLSMachExceptionRecord(context, message)) { - FIRCLSSDKLog("Failed to record mach exception\n"); - return KERN_FAILURE; - } - - return KERN_SUCCESS; -} - -static bool FIRCLSMachExceptionReply(FIRCLSMachExceptionReadContext* context, - MachExceptionMessage* message, - kern_return_t result) { - MachExceptionReply reply; - mach_msg_return_t r; - - // prepare the reply - reply.head.msgh_bits = MACH_MSGH_BITS(MACH_MSGH_BITS_REMOTE(message->head.msgh_bits), 0); - reply.head.msgh_remote_port = message->head.msgh_remote_port; - reply.head.msgh_size = (mach_msg_size_t)sizeof(MachExceptionReply); - reply.head.msgh_local_port = MACH_PORT_NULL; - reply.head.msgh_id = message->head.msgh_id + 100; - - reply.NDR = NDR_record; - - reply.retCode = result; - - FIRCLSSDKLog("Sending exception reply\n"); - - // send it - r = mach_msg(&reply.head, MACH_SEND_MSG, reply.head.msgh_size, 0, MACH_PORT_NULL, - MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL); - if (r != MACH_MSG_SUCCESS) { - FIRCLSSDKLog("mach_msg reply failed (%d)\n", r); - return false; - } - - FIRCLSSDKLog("Exception reply delivered\n"); - - return true; -} - -#pragma mark - Registration -static bool FIRCLSMachExceptionRegister(FIRCLSMachExceptionReadContext* context, - exception_mask_t ignoreMask) { - mach_port_t task = mach_task_self(); - - kern_return_t kr = mach_port_allocate(task, MACH_PORT_RIGHT_RECEIVE, &context->port); - if (kr != KERN_SUCCESS) { - FIRCLSSDKLog("Error: mach_port_allocate failed %d\n", kr); - return false; - } - - kr = mach_port_insert_right(task, context->port, context->port, MACH_MSG_TYPE_MAKE_SEND); - if (kr != KERN_SUCCESS) { - FIRCLSSDKLog("Error: mach_port_insert_right failed %d\n", kr); - mach_port_deallocate(task, context->port); - return false; - } - - // Get the desired mask, which covers all the mach exceptions we are capable of handling, - // but clear out any that are in our ignore list. We do this by ANDing with the bitwise - // negation. Because we are only clearing bits, there's no way to set an incorrect mask - // using ignoreMask. - context->mask = FIRCLSMachExceptionMask() & ~ignoreMask; - - // ORing with MACH_EXCEPTION_CODES will produce 64-bit exception data - kr = task_swap_exception_ports(task, context->mask, context->port, - EXCEPTION_DEFAULT | MACH_EXCEPTION_CODES, THREAD_STATE_NONE, - context->originalPorts.masks, &context->originalPorts.count, - context->originalPorts.ports, context->originalPorts.behaviors, - context->originalPorts.flavors); - if (kr != KERN_SUCCESS) { - FIRCLSSDKLog("Error: task_swap_exception_ports %d\n", kr); - return false; - } - - for (int i = 0; i < context->originalPorts.count; ++i) { - FIRCLSSDKLog("original 0x%x 0x%x 0x%x 0x%x\n", context->originalPorts.ports[i], - context->originalPorts.masks[i], context->originalPorts.behaviors[i], - context->originalPorts.flavors[i]); - } - - return true; -} - -static bool FIRCLSMachExceptionUnregister(FIRCLSMachExceptionOriginalPorts* originalPorts, - exception_mask_t mask) { - kern_return_t kr; - - // Re-register all the old ports. - for (mach_msg_type_number_t i = 0; i < originalPorts->count; ++i) { - // clear the bits from this original mask - mask &= ~originalPorts->masks[i]; - - kr = - task_set_exception_ports(mach_task_self(), originalPorts->masks[i], originalPorts->ports[i], - originalPorts->behaviors[i], originalPorts->flavors[i]); - if (kr != KERN_SUCCESS) { - FIRCLSSDKLog("unable to restore original port: %d", originalPorts->ports[i]); - } - } - - // Finally, mark any masks we registered for that do not have an original port as unused. - kr = task_set_exception_ports(mach_task_self(), mask, MACH_PORT_NULL, - EXCEPTION_DEFAULT | MACH_EXCEPTION_CODES, THREAD_STATE_NONE); - if (kr != KERN_SUCCESS) { - FIRCLSSDKLog("unable to unset unregistered mask: 0x%x", mask); - return false; - } - - return true; -} - -#pragma mark - Recording -static void FIRCLSMachExceptionNameLookup(exception_type_t number, - mach_exception_data_type_t code, - const char** name, - const char** codeName) { - if (!name || !codeName) { - return; - } - - *name = NULL; - *codeName = NULL; - - switch (number) { - case EXC_BAD_ACCESS: - *name = "EXC_BAD_ACCESS"; - switch (code) { - case KERN_INVALID_ADDRESS: - *codeName = "KERN_INVALID_ADDRESS"; - break; - case KERN_PROTECTION_FAILURE: - *codeName = "KERN_PROTECTION_FAILURE"; - break; - } - - break; - case EXC_BAD_INSTRUCTION: - *name = "EXC_BAD_INSTRUCTION"; -#if CLS_CPU_X86 - *codeName = "EXC_I386_INVOP"; -#endif - break; - case EXC_ARITHMETIC: - *name = "EXC_ARITHMETIC"; -#if CLS_CPU_X86 - switch (code) { - case EXC_I386_DIV: - *codeName = "EXC_I386_DIV"; - break; - case EXC_I386_INTO: - *codeName = "EXC_I386_INTO"; - break; - case EXC_I386_NOEXT: - *codeName = "EXC_I386_NOEXT"; - break; - case EXC_I386_EXTOVR: - *codeName = "EXC_I386_EXTOVR"; - break; - case EXC_I386_EXTERR: - *codeName = "EXC_I386_EXTERR"; - break; - case EXC_I386_EMERR: - *codeName = "EXC_I386_EMERR"; - break; - case EXC_I386_BOUND: - *codeName = "EXC_I386_BOUND"; - break; - case EXC_I386_SSEEXTERR: - *codeName = "EXC_I386_SSEEXTERR"; - break; - } -#endif - break; - case EXC_BREAKPOINT: - *name = "EXC_BREAKPOINT"; -#if CLS_CPU_X86 - switch (code) { - case EXC_I386_DIVERR: - *codeName = "EXC_I386_DIVERR"; - break; - case EXC_I386_SGLSTP: - *codeName = "EXC_I386_SGLSTP"; - break; - case EXC_I386_NMIFLT: - *codeName = "EXC_I386_NMIFLT"; - break; - case EXC_I386_BPTFLT: - *codeName = "EXC_I386_BPTFLT"; - break; - case EXC_I386_INTOFLT: - *codeName = "EXC_I386_INTOFLT"; - break; - case EXC_I386_BOUNDFLT: - *codeName = "EXC_I386_BOUNDFLT"; - break; - case EXC_I386_INVOPFLT: - *codeName = "EXC_I386_INVOPFLT"; - break; - case EXC_I386_NOEXTFLT: - *codeName = "EXC_I386_NOEXTFLT"; - break; - case EXC_I386_EXTOVRFLT: - *codeName = "EXC_I386_EXTOVRFLT"; - break; - case EXC_I386_INVTSSFLT: - *codeName = "EXC_I386_INVTSSFLT"; - break; - case EXC_I386_SEGNPFLT: - *codeName = "EXC_I386_SEGNPFLT"; - break; - case EXC_I386_STKFLT: - *codeName = "EXC_I386_STKFLT"; - break; - case EXC_I386_GPFLT: - *codeName = "EXC_I386_GPFLT"; - break; - case EXC_I386_PGFLT: - *codeName = "EXC_I386_PGFLT"; - break; - case EXC_I386_EXTERRFLT: - *codeName = "EXC_I386_EXTERRFLT"; - break; - case EXC_I386_ALIGNFLT: - *codeName = "EXC_I386_ALIGNFLT"; - break; - case EXC_I386_ENDPERR: - *codeName = "EXC_I386_ENDPERR"; - break; - case EXC_I386_ENOEXTFLT: - *codeName = "EXC_I386_ENOEXTFLT"; - break; - } -#endif - break; - case EXC_GUARD: - *name = "EXC_GUARD"; - break; - } -} - -static bool FIRCLSMachExceptionRecord(FIRCLSMachExceptionReadContext* context, - MachExceptionMessage* message) { - if (!context || !message) { - return false; - } - - if (FIRCLSContextMarkAndCheckIfCrashed()) { - FIRCLSSDKLog("Error: aborting mach exception handler because crash has already occurred\n"); - exit(1); - return false; - } - - FIRCLSFile file; - - if (!FIRCLSFileInitWithPath(&file, context->path, false)) { - FIRCLSSDKLog("Unable to open mach exception file\n"); - return false; - } - - FIRCLSFileWriteSectionStart(&file, "mach_exception"); - - FIRCLSFileWriteHashStart(&file); - - FIRCLSFileWriteHashEntryUint64(&file, "exception", message->exception); - - // record the codes - FIRCLSFileWriteHashKey(&file, "codes"); - FIRCLSFileWriteArrayStart(&file); - for (mach_msg_type_number_t i = 0; i < message->codeCnt; ++i) { - FIRCLSFileWriteArrayEntryUint64(&file, message->code[i]); - } - FIRCLSFileWriteArrayEnd(&file); - - const char* name = NULL; - const char* codeName = NULL; - - FIRCLSMachExceptionNameLookup(message->exception, message->codeCnt > 0 ? message->code[0] : 0, - &name, &codeName); - - FIRCLSFileWriteHashEntryString(&file, "name", name); - FIRCLSFileWriteHashEntryString(&file, "code_name", codeName); - - FIRCLSFileWriteHashEntryUint64(&file, "original_ports", context->originalPorts.count); - FIRCLSFileWriteHashEntryUint64(&file, "time", time(NULL)); - - FIRCLSFileWriteHashEnd(&file); - - FIRCLSFileWriteSectionEnd(&file); - - FIRCLSHandler(&file, message->thread.name, NULL); - - FIRCLSFileClose(&file); - - return true; -} - -#else - -INJECT_STRIP_SYMBOL(cls_mach_exception) - -#endif diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Handlers/FIRCLSMachException.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Handlers/FIRCLSMachException.h deleted file mode 100644 index b19881a7a5..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Handlers/FIRCLSMachException.h +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "FIRCLSFeatures.h" - -#pragma once - -#if CLS_MACH_EXCEPTION_SUPPORTED - -#include -#include -#include - -// must be at least PTHREAD_STACK_MIN size -#define CLS_MACH_EXCEPTION_HANDLER_STACK_SIZE (256 * 1024) - -#pragma mark Structures -#pragma pack(push, 4) -typedef struct { - mach_msg_header_t head; - /* start of the kernel processed data */ - mach_msg_body_t msgh_body; - mach_msg_port_descriptor_t thread; - mach_msg_port_descriptor_t task; - /* end of the kernel processed data */ - NDR_record_t NDR; - exception_type_t exception; - mach_msg_type_number_t codeCnt; - mach_exception_data_type_t code[EXCEPTION_CODE_MAX]; - mach_msg_trailer_t trailer; -} MachExceptionMessage; - -typedef struct { - mach_msg_header_t head; - NDR_record_t NDR; - kern_return_t retCode; -} MachExceptionReply; -#pragma pack(pop) - -typedef struct { - mach_msg_type_number_t count; - exception_mask_t masks[EXC_TYPES_COUNT]; - exception_handler_t ports[EXC_TYPES_COUNT]; - exception_behavior_t behaviors[EXC_TYPES_COUNT]; - thread_state_flavor_t flavors[EXC_TYPES_COUNT]; -} FIRCLSMachExceptionOriginalPorts; - -typedef struct { - mach_port_t port; - pthread_t thread; - const char* path; - - exception_mask_t mask; - FIRCLSMachExceptionOriginalPorts originalPorts; -} FIRCLSMachExceptionReadContext; - -#pragma mark - API -void FIRCLSMachExceptionInit(FIRCLSMachExceptionReadContext* context, exception_mask_t ignoreMask); -exception_mask_t FIRCLSMachExceptionMaskForSignal(int signal); - -void FIRCLSMachExceptionCheckHandlers(void); - -#else - -#define CLS_MACH_EXCEPTION_HANDLER_STACK_SIZE 0 - -#endif diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Handlers/FIRCLSSignal.c b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Handlers/FIRCLSSignal.c deleted file mode 100644 index 5fa302d7c6..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Handlers/FIRCLSSignal.c +++ /dev/null @@ -1,318 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "FIRCLSSignal.h" -#include "FIRCLSGlobals.h" -#include "FIRCLSHandler.h" -#include "FIRCLSUtility.h" - -#include -#include - -static const int FIRCLSFatalSignals[FIRCLSSignalCount] = {SIGABRT, SIGBUS, SIGFPE, SIGILL, - SIGSEGV, SIGSYS, SIGTRAP}; - -#if CLS_USE_SIGALTSTACK -static void FIRCLSSignalInstallAltStack(FIRCLSSignalReadContext *roContext); -#endif -static void FIRCLSSignalInstallHandlers(FIRCLSSignalReadContext *roContext); -static void FIRCLSSignalHandler(int signal, siginfo_t *info, void *uapVoid); - -void FIRCLSSignalInitialize(FIRCLSSignalReadContext *roContext) { - if (!FIRCLSUnlinkIfExists(roContext->path)) { - FIRCLSSDKLog("Unable to reset the signal log file %s\n", strerror(errno)); - } - -#if CLS_USE_SIGALTSTACK - FIRCLSSignalInstallAltStack(roContext); -#endif - FIRCLSSignalInstallHandlers(roContext); -#if TARGET_IPHONE_SIMULATOR - // prevent the OpenGL stack (by way of OpenGLES.framework/libLLVMContainer.dylib) from installing - // signal handlers that do not chain back - // TODO: I don't believe this is necessary as of recent iOS releases - bool *ptr = dlsym(RTLD_DEFAULT, "_ZN4llvm23DisablePrettyStackTraceE"); - if (ptr) { - *ptr = true; - } -#endif -} - -void FIRCLSSignalEnumerateHandledSignals(void (^block)(int idx, int signal)) { - for (int i = 0; i < FIRCLSSignalCount; ++i) { - block(i, FIRCLSFatalSignals[i]); - } -} - -#if CLS_USE_SIGALTSTACK - -static void FIRCLSSignalInstallAltStack(FIRCLSSignalReadContext *roContext) { - stack_t signalStack; - stack_t originalStack; - - signalStack.ss_sp = _firclsContext.readonly->signalStack; - signalStack.ss_size = CLS_SIGNAL_HANDLER_STACK_SIZE; - signalStack.ss_flags = 0; - - if (sigaltstack(&signalStack, &originalStack) != 0) { - FIRCLSSDKLog("Unable to setup stack %s\n", strerror(errno)); - - return; - } - - roContext->originalStack.ss_sp = NULL; - roContext->originalStack = originalStack; -} - -#endif - -static void FIRCLSSignalInstallHandlers(FIRCLSSignalReadContext *roContext) { - FIRCLSSignalEnumerateHandledSignals(^(int idx, int signal) { - struct sigaction action; - struct sigaction previousAction; - - action.sa_sigaction = FIRCLSSignalHandler; - // SA_RESETHAND seems like it would be great, but it doesn't appear to - // work correctly. After taking a signal, causing another identical signal in - // the handler will *not* cause the default handler to be invokved (which should - // terminate the process). I've found some evidence that others have seen this - // behavior on MAC OS X. - action.sa_flags = SA_SIGINFO | SA_ONSTACK; - - sigemptyset(&action.sa_mask); - - previousAction.sa_sigaction = NULL; - if (sigaction(signal, &action, &previousAction) != 0) { - FIRCLSSDKLog("Unable to install handler for %d (%s)\n", signal, strerror(errno)); - } - - // store the last action, so it can be recalled - roContext->originalActions[idx].sa_sigaction = NULL; - - if (previousAction.sa_sigaction) { - roContext->originalActions[idx] = previousAction; - } - }); -} - -void FIRCLSSignalCheckHandlers(void) { - if (_firclsContext.readonly->debuggerAttached) { - return; - } - - FIRCLSSignalEnumerateHandledSignals(^(int idx, int signal) { - struct sigaction previousAction; - Dl_info info; - void *ptr; - - if (sigaction(signal, 0, &previousAction) != 0) { - fprintf(stderr, "Unable to read signal handler\n"); - return; - } - - ptr = previousAction.__sigaction_u.__sa_handler; - const char *signalName = NULL; - const char *codeName = NULL; - - FIRCLSSignalNameLookup(signal, 0, &signalName, &codeName); - - if (ptr == FIRCLSSignalHandler) { - return; - } - - const char *name = NULL; - if (dladdr(ptr, &info) != 0) { - name = info.dli_sname; - } - - fprintf(stderr, - "[Crashlytics] The signal %s has a non-Crashlytics handler (%s). This will interfere " - "with reporting.\n", - signalName, name); - }); -} - -void FIRCLSSignalSafeRemoveHandlers(bool includingAbort) { - for (int i = 0; i < FIRCLSSignalCount; ++i) { - struct sigaction sa; - - if (!includingAbort && (FIRCLSFatalSignals[i] == SIGABRT)) { - continue; - } - - sa.sa_handler = SIG_DFL; - sigemptyset(&sa.sa_mask); - - if (sigaction(FIRCLSFatalSignals[i], &sa, NULL) != 0) - FIRCLSSDKLog("Unable to set default handler for %d (%s)\n", i, strerror(errno)); - } -} - -bool FIRCLSSignalSafeInstallPreexistingHandlers(FIRCLSSignalReadContext *roContext) { - bool success; - - FIRCLSSignalSafeRemoveHandlers(true); - -#if CLS_USE_SIGALTSTACK - - // re-install the original stack, if needed - if (roContext->originalStack.ss_sp) { - if (sigaltstack(&roContext->originalStack, 0) != 0) { - FIRCLSSDKLog("Unable to setup stack %s\n", strerror(errno)); - - return false; - } - } - -#endif - - // re-install the original handlers, if any - success = true; - for (int i = 0; i < FIRCLSSignalCount; ++i) { - if (roContext->originalActions[i].sa_sigaction == NULL) { - continue; - } - - if (sigaction(FIRCLSFatalSignals[i], &roContext->originalActions[i], 0) != 0) { - FIRCLSSDKLog("Unable to install handler for %d (%s)\n", i, strerror(errno)); - success = false; - } - } - - return success; -} - -void FIRCLSSignalNameLookup(int number, int code, const char **name, const char **codeName) { - if (!name || !codeName) { - return; - } - - *codeName = NULL; - - switch (number) { - case SIGABRT: - *name = "SIGABRT"; - *codeName = "ABORT"; - break; - case SIGBUS: - *name = "SIGBUS"; - break; - case SIGFPE: - *name = "SIGFPE"; - break; - case SIGILL: - *name = "SIGILL"; - break; - case SIGSEGV: - *name = "SIGSEGV"; - break; - case SIGSYS: - *name = "SIGSYS"; - break; - case SIGTRAP: - *name = "SIGTRAP"; - break; - default: - *name = "UNKNOWN"; - break; - } -} - -static void FIRCLSSignalRecordSignal(int savedErrno, siginfo_t *info, void *uapVoid) { - if (!_firclsContext.readonly) { - return; - } - - if (FIRCLSContextMarkAndCheckIfCrashed()) { - FIRCLSSDKLog("Error: aborting signal handler because crash has already occurred"); - exit(1); - return; - } - - FIRCLSFile file; - - if (!FIRCLSFileInitWithPath(&file, _firclsContext.readonly->signal.path, false)) { - FIRCLSSDKLog("Unable to open signal file\n"); - return; - } - - FIRCLSFileWriteSectionStart(&file, "signal"); - - FIRCLSFileWriteHashStart(&file); - - if (FIRCLSIsValidPointer(info)) { - FIRCLSFileWriteHashEntryUint64(&file, "number", info->si_signo); - FIRCLSFileWriteHashEntryUint64(&file, "code", info->si_code); - FIRCLSFileWriteHashEntryUint64(&file, "address", (uint64_t)info->si_addr); - - const char *name = NULL; - const char *codeName = NULL; - - FIRCLSSignalNameLookup(info->si_signo, info->si_code, &name, &codeName); - - FIRCLSFileWriteHashEntryString(&file, "name", name); - FIRCLSFileWriteHashEntryString(&file, "code_name", codeName); - } - - FIRCLSFileWriteHashEntryUint64(&file, "errno", savedErrno); - FIRCLSFileWriteHashEntryUint64(&file, "time", time(NULL)); - - FIRCLSFileWriteHashEnd(&file); - - FIRCLSFileWriteSectionEnd(&file); - - FIRCLSHandler(&file, mach_thread_self(), uapVoid); - - FIRCLSFileClose(&file); -} - -static void FIRCLSSignalHandler(int signal, siginfo_t *info, void *uapVoid) { - int savedErrno; - sigset_t set; - - // save errno, both because it is interesting, and so we can restore it afterwards - savedErrno = errno; - errno = 0; - - FIRCLSSDKLog("Signal: %d\n", signal); - - // it is important to do this before unmasking signals, otherwise we can get - // called in a loop - FIRCLSSignalSafeRemoveHandlers(true); - - sigfillset(&set); - if (sigprocmask(SIG_UNBLOCK, &set, NULL) != 0) { - FIRCLSSDKLog("Unable to unmask signals - we risk infinite recursion here\n"); - } - - // check info and uapVoid, and set them to appropriate values if invalid. This can happen - // if we have been called without the SA_SIGINFO flag set - if (!FIRCLSIsValidPointer(info)) { - info = NULL; - } - - if (!FIRCLSIsValidPointer(uapVoid)) { - uapVoid = NULL; - } - - FIRCLSSignalRecordSignal(savedErrno, info, uapVoid); - - // re-install original handlers - if (_firclsContext.readonly) { - FIRCLSSignalSafeInstallPreexistingHandlers(&_firclsContext.readonly->signal); - } - - // restore errno - errno = savedErrno; -} diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Handlers/FIRCLSSignal.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Handlers/FIRCLSSignal.h deleted file mode 100644 index 3b6b1b4e2c..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Handlers/FIRCLSSignal.h +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#pragma once - -#include "FIRCLSFeatures.h" -#include "FIRCLSFile.h" - -#include -#include - -#define FIRCLSSignalCount (7) - -// per man sigaltstack, MINSIGSTKSZ is the minimum *overhead* needed to support -// a signal stack. The actual stack size must be larger. Let's pick the recommended -// size. -#if CLS_USE_SIGALTSTACK -#define CLS_SIGNAL_HANDLER_STACK_SIZE (SIGSTKSZ * 2) -#else -#define CLS_SIGNAL_HANDLER_STACK_SIZE 0 -#endif - -typedef struct { - const char* path; - struct sigaction originalActions[FIRCLSSignalCount]; - -#if CLS_USE_SIGALTSTACK - stack_t originalStack; -#endif -} FIRCLSSignalReadContext; - -void FIRCLSSignalInitialize(FIRCLSSignalReadContext* roContext); -void FIRCLSSignalCheckHandlers(void); - -void FIRCLSSignalSafeRemoveHandlers(bool includingAbort); -bool FIRCLSSignalSafeInstallPreexistingHandlers(FIRCLSSignalReadContext* roContext); - -void FIRCLSSignalNameLookup(int number, int code, const char** name, const char** codeName); - -void FIRCLSSignalEnumerateHandledSignals(void (^block)(int idx, int signal)); diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRAEvent+Internal.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRAEvent+Internal.h deleted file mode 100644 index f0de9fed90..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRAEvent+Internal.h +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef FIRAEvent_Internal_h -#define FIRAEvent_Internal_h - -#import "FIRAEvent.h" -#import "FIRAValue.h" - -NSString* FIRCLSFIRAEventDictionaryToJSON(NSDictionary* eventAsDictionary); - -#endif /* FIRAEvent_Internal_h */ diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRAEvent+Internal.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRAEvent+Internal.m deleted file mode 100644 index 4591e29f17..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRAEvent+Internal.m +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRAEvent+Internal.h" - -#import "FIRCLSUtility.h" - -NSString* FIRCLSFIRAEventDictionaryToJSON(NSDictionary* eventAsDictionary) { - NSError* error = nil; - - if (eventAsDictionary == nil) { - return nil; - } - - if (![NSJSONSerialization isValidJSONObject:eventAsDictionary]) { - FIRCLSSDKLog("Firebase Analytics event is not valid JSON"); - return nil; - } - - NSData* jsonData = [NSJSONSerialization dataWithJSONObject:eventAsDictionary - options:0 - error:&error]; - - if (error == nil) { - NSString* json = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; - return json; - } else { - FIRCLSSDKLog("Unable to convert Firebase Analytics event to json"); - return nil; - } -} diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRAEvent.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRAEvent.h deleted file mode 100644 index 9fcbd6602c..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRAEvent.h +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import - -@class FIRAPBEvent; - -/// An application event. -@interface FIRAEvent : NSObject - -/// Origin of this event (eg "app" or "auto"). -@property(nonatomic, readonly) NSString *origin; - -/// Name of this event. -@property(nonatomic, readonly) NSString *name; - -/// Timestamp of when this event was fired. -@property(nonatomic, readonly) NSTimeInterval timestamp; - -/// Timestamp of the previous time an event with this name was fired, if any. -@property(nonatomic, readonly) NSTimeInterval previousTimestamp; - -/// The event's parameters as {NSString : NSString} or {NSString : NSNumber}. -@property(nonatomic, readonly) NSDictionary *parameters; - -/// Indicates whether the event has the conversion parameter. Setting to YES adds the conversion -/// parameter if not already present. Setting to NO removes the conversion parameter and adds an -/// error. -@property(nonatomic, getter=isConversion) BOOL conversion; - -/// Indicates whether the event has the real-time parameter. Setting to YES adds the real-time -/// parameter if not already present. Setting to NO removes the real-time parameter. -@property(nonatomic, getter=isRealtime) BOOL realtime; - -/// Indicates whether the event has debug parameter. Setting to YES adds the debug parameter if -/// not already present. Setting to NO removes the debug parameter. -@property(nonatomic, getter=isDebug) BOOL debug; - -/// The populated FIRAPBEvent for proto. -@property(nonatomic, readonly) FIRAPBEvent *protoEvent; - -/// Creates an event with the given parameters. Parameters will be copied and normalized. Returns -/// nil if the name does not meet length requirements. -/// If |parameters| contains the "_o" parameter, its value will be overwritten with the value of -/// |origin|. -- (instancetype)initWithOrigin:(NSString *)origin - isPublic:(BOOL)isPublic - name:(NSString *)name - timestamp:(NSTimeInterval)timestamp - previousTimestamp:(NSTimeInterval)previousTimestamp - parameters:(NSDictionary *)parameters NS_DESIGNATED_INITIALIZER; - -- (instancetype)init NS_UNAVAILABLE; - -/// Returns a new event object with the given previousTimestamp. -- (instancetype)copyWithPreviousTimestamp:(NSTimeInterval)previousTimestamp; - -/// Returns a new event object with the new parameters. -- (instancetype)copyWithParameters:(NSDictionary *)parameters; - -/// Returns YES if all parameters in screenParameters were added to the event object. Returns NO if -/// screenParameters is nil/empty or the event already contains any of the screen parameter keys. -/// Performs internal validation on the screen parameter values and converts them to FIRAValue -/// objects if they aren't already. screenParameters should be a dictionary of -/// { NSString : NSString | NSNumber } or { NSString : FIRAValue }. -- (BOOL)addScreenParameters:(NSDictionary *)screenParameters; - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRAValue.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRAValue.h deleted file mode 100644 index 7d10ec3088..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRAValue.h +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import - -typedef NS_ENUM(NSInteger, FIRAValueType) { - kFIRAValueTypeDouble = 0, - kFIRAValueTypeInteger, - kFIRAValueTypeString, -}; - -@interface FIRAValue : NSObject - -/// The type of the value. -@property(nonatomic, readonly) FIRAValueType valueType; - -#pragma mark - Double type. - -/// Indicates whether the FIRAValue instance is a floating point. -@property(nonatomic, readonly) BOOL isDouble; - -/// Float value. Check valueType to see if this attribute has float value. -@property(nonatomic, readonly) double doubleValue; - -#pragma mark - Integer type. - -/// Indicates whether the FIRAValue instance is an integer. -@property(nonatomic, readonly) BOOL isInt64; - -/// Int64 value. Check valueType to see if this attribute has int64 value. -@property(nonatomic, readonly) int64_t int64Value; - -#pragma mark - String type. - -/// Indicates whether the FIRAValue instance is a string. -@property(nonatomic, readonly) BOOL isString; - -/// String value. Check valueType to see if this attribute has string value. -@property(nonatomic, readonly) NSString *stringValue; - -#pragma mark - Initializers. - -/// Creates a @c FIRAValue if |object| is of type NSString or NSNumber. Returns |object| if it's -/// already a FIRAValue. Returns nil otherwise. -+ (instancetype)valueFromObject:(id)object; - -/// Creates a @c FIRAValue with double value. -- (instancetype)initWithDouble:(double)value; - -/// Creates a @c FIRAValue with int64 value. -- (instancetype)initWithInt64:(int64_t)value; - -/// Creates a @c FIRAValue with string value. -- (instancetype)initWithString:(NSString *)stringValue; - -- (instancetype)init NS_UNAVAILABLE; - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRCLSAllocate.c b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRCLSAllocate.c deleted file mode 100644 index febafd2ab9..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRCLSAllocate.c +++ /dev/null @@ -1,238 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include - -#include "FIRCLSAllocate.h" -#include "FIRCLSHost.h" -#include "FIRCLSUtility.h" - -#include -#include -#include -#include -#include -#include -#include - -void* FIRCLSAllocatorSafeAllocateFromRegion(FIRCLSAllocationRegion* region, size_t size); - -FIRCLSAllocatorRef FIRCLSAllocatorCreate(size_t writableSpace, size_t readableSpace) { - FIRCLSAllocatorRef allocator; - FIRCLSAllocationRegion writableRegion; - FIRCLSAllocationRegion readableRegion; - size_t allocationSize; - vm_size_t pageSize; - void* buffer; - - // | GUARD | WRITABLE_REGION | GUARD | READABLE_REGION | GUARD | - - pageSize = FIRCLSHostGetPageSize(); - - readableSpace += sizeof(FIRCLSAllocator); // add the space for our allocator itself - - // we can only protect at the page level, so we need all of our regions to be - // exact multples of pages. But, we don't need anything in the special-case of zero. - - writableRegion.size = 0; - if (writableSpace > 0) { - writableRegion.size = ((writableSpace / pageSize) + 1) * pageSize; - } - - readableRegion.size = 0; - if (readableSpace > 0) { - readableRegion.size = ((readableSpace / pageSize) + 1) * pageSize; - } - - // Make one big, continous allocation, adding additional pages for our guards. Note - // that we cannot use malloc (or valloc) in this case, because we need to assert full - // ownership over these allocations. mmap is a much better choice. We also mark these - // pages as MAP_NOCACHE. - allocationSize = writableRegion.size + readableRegion.size + pageSize * 3; - buffer = - mmap(0, allocationSize, PROT_READ | PROT_WRITE, MAP_ANON | MAP_PRIVATE | MAP_NOCACHE, -1, 0); - if (buffer == MAP_FAILED) { - FIRCLSSDKLogError("Mapping failed %s\n", strerror(errno)); - return NULL; - } - - // move our cursors into position - writableRegion.cursor = (void*)((uintptr_t)buffer + pageSize); - readableRegion.cursor = (void*)((uintptr_t)buffer + pageSize + writableRegion.size + pageSize); - writableRegion.start = writableRegion.cursor; - readableRegion.start = readableRegion.cursor; - - FIRCLSSDKLogInfo("Mapping: %p %p %p, total: %zu K\n", buffer, writableRegion.start, - readableRegion.start, allocationSize / 1024); - - // protect first guard page - if (mprotect(buffer, pageSize, PROT_NONE) != 0) { - FIRCLSSDKLogError("First guard protection failed %s\n", strerror(errno)); - return NULL; - } - - // middle guard - if (mprotect((void*)((uintptr_t)buffer + pageSize + writableRegion.size), pageSize, PROT_NONE) != - 0) { - FIRCLSSDKLogError("Middle guard protection failed %s\n", strerror(errno)); - return NULL; - } - - // end guard - if (mprotect((void*)((uintptr_t)buffer + pageSize + writableRegion.size + pageSize + - readableRegion.size), - pageSize, PROT_NONE) != 0) { - FIRCLSSDKLogError("Last guard protection failed %s\n", strerror(errno)); - return NULL; - } - - // now, perform our first "allocation", which is to place our allocator into the read-only region - allocator = FIRCLSAllocatorSafeAllocateFromRegion(&readableRegion, sizeof(FIRCLSAllocator)); - - // set up its data structure - allocator->buffer = buffer; - allocator->protectionEnabled = false; - allocator->readableRegion = readableRegion; - allocator->writeableRegion = writableRegion; - - FIRCLSSDKLogDebug("Allocator successfully created %p", allocator); - - return allocator; -} - -void FIRCLSAllocatorDestroy(FIRCLSAllocatorRef allocator) { - if (allocator) { - } -} - -bool FIRCLSAllocatorProtect(FIRCLSAllocatorRef allocator) { - void* address; - - if (!FIRCLSIsValidPointer(allocator)) { - FIRCLSSDKLogError("Invalid allocator"); - return false; - } - - if (allocator->protectionEnabled) { - FIRCLSSDKLogWarn("Write protection already enabled"); - return true; - } - - // This has to be done first - allocator->protectionEnabled = true; - - vm_size_t pageSize = FIRCLSHostGetPageSize(); - - // readable region - address = - (void*)((uintptr_t)allocator->buffer + pageSize + allocator->writeableRegion.size + pageSize); - - return mprotect(address, allocator->readableRegion.size, PROT_READ) == 0; -} - -bool FIRCLSAllocatorUnprotect(FIRCLSAllocatorRef allocator) { - size_t bufferSize; - - if (!allocator) { - return false; - } - - vm_size_t pageSize = FIRCLSHostGetPageSize(); - - bufferSize = (uintptr_t)allocator->buffer + pageSize + allocator->writeableRegion.size + - pageSize + allocator->readableRegion.size + pageSize; - - allocator->protectionEnabled = - !(mprotect(allocator->buffer, bufferSize, PROT_READ | PROT_WRITE) == 0); - - return allocator->protectionEnabled; -} - -void* FIRCLSAllocatorSafeAllocateFromRegion(FIRCLSAllocationRegion* region, size_t size) { - void* newCursor; - void* originalCursor; - - // Here's the idea - // - read the current cursor - // - compute what our new cursor should be - // - attempt a swap - // if the swap fails, some other thread has modified stuff, and we have to start again - // if the swap works, everything has been updated correctly and we are done - do { - originalCursor = region->cursor; - - // this shouldn't happen unless we make a mistake with our size pre-computations - if ((uintptr_t)originalCursor - (uintptr_t)region->start + size > region->size) { - FIRCLSSDKLog("Unable to allocate sufficient memory, falling back to malloc\n"); - void* ptr = malloc(size); - if (!ptr) { - FIRCLSSDKLog("Unable to malloc in FIRCLSAllocatorSafeAllocateFromRegion\n"); - return NULL; - } - return ptr; - } - - newCursor = (void*)((uintptr_t)originalCursor + size); - } while (!atomic_compare_exchange_strong(®ion->cursor, &originalCursor, newCursor)); - - return originalCursor; -} - -void* FIRCLSAllocatorSafeAllocate(FIRCLSAllocatorRef allocator, - size_t size, - FIRCLSAllocationType type) { - FIRCLSAllocationRegion* region; - - if (!allocator) { - // fall back to malloc in this case - FIRCLSSDKLog("Allocator invalid, falling back to malloc\n"); - void* ptr = malloc(size); - if (!ptr) { - FIRCLSSDKLog("Unable to malloc in FIRCLSAllocatorSafeAllocate\n"); - return NULL; - } - return ptr; - } - - if (allocator->protectionEnabled) { - FIRCLSSDKLog("Allocator already protected, falling back to malloc\n"); - void* ptr = malloc(size); - if (!ptr) { - FIRCLSSDKLog("Unable to malloc in FIRCLSAllocatorSafeAllocate\n"); - return NULL; - } - return ptr; - } - - switch (type) { - case CLS_READONLY: - region = &allocator->readableRegion; - break; - case CLS_READWRITE: - region = &allocator->writeableRegion; - break; - default: - return NULL; - } - - return FIRCLSAllocatorSafeAllocateFromRegion(region, size); -} - -void FIRCLSAllocatorFree(FIRCLSAllocatorRef allocator, void* ptr) { - if (!allocator) { - free(ptr); - } - - // how do we do deallocations? -} diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRCLSAllocate.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRCLSAllocate.h deleted file mode 100644 index 02b526a870..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRCLSAllocate.h +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "FIRCLSFeatures.h" - -#pragma once - -#include -#include - -typedef enum { CLS_READONLY = 0, CLS_READWRITE = 1 } FIRCLSAllocationType; - -typedef struct { - size_t size; - void* start; - _Atomic(void*) volatile cursor; -} FIRCLSAllocationRegion; - -typedef struct { - void* buffer; - bool protectionEnabled; - FIRCLSAllocationRegion writeableRegion; - FIRCLSAllocationRegion readableRegion; -} FIRCLSAllocator; -typedef FIRCLSAllocator* FIRCLSAllocatorRef; - -FIRCLSAllocatorRef FIRCLSAllocatorCreate(size_t writableSpace, size_t readableSpace); -void FIRCLSAllocatorDestroy(FIRCLSAllocatorRef allocator); - -bool FIRCLSAllocatorProtect(FIRCLSAllocatorRef allocator); -bool FIRCLSAllocatorUnprotect(FIRCLSAllocatorRef allocator); - -void* FIRCLSAllocatorSafeAllocate(FIRCLSAllocatorRef allocator, - size_t size, - FIRCLSAllocationType type); -const char* FIRCLSAllocatorSafeStrdup(FIRCLSAllocatorRef allocator, const char* string); -void FIRCLSAllocatorFree(FIRCLSAllocatorRef allocator, void* ptr); diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRCLSDefines.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRCLSDefines.h deleted file mode 100644 index f309ae07a0..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRCLSDefines.h +++ /dev/null @@ -1,81 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#pragma once - -#include "TargetConditionals.h" - -// macro trickiness -#define STR_HELPER(x) #x -#define STR(x) STR_HELPER(x) -#define CONCAT_EXPANDED(a, b) a##b -#define CONCAT(a, b) CONCAT_EXPANDED(a, b) - -// These macros generate a function to force a symbol for the containing .o, to work around an issue -// where strip will not strip debug information without a symbol to strip. -#define DUMMY_FUNCTION_NAME(x) CONCAT(fircls_strip_this_, x) -#define INJECT_STRIP_SYMBOL(x) \ - void DUMMY_FUNCTION_NAME(x)(void) { \ - } - -// These make some target os types available to previous versions of xcode that do not yet have them -// in their SDKs -#ifndef TARGET_OS_IOS -#define TARGET_OS_IOS TARGET_OS_IPHONE -#endif - -#ifndef TARGET_OS_WATCH -#define TARGET_OS_WATCH 0 -#endif - -#ifndef TARGET_OS_TV -#define TARGET_OS_TV 0 -#endif - -// These help compile based on availability of technologies/frameworks. -#define CLS_TARGET_OS_OSX (TARGET_OS_MAC && !TARGET_OS_IPHONE) -#define CLS_TARGET_OS_HAS_UIKIT (TARGET_OS_IOS || TARGET_OS_TV) - -#define CLS_SDK_DISPLAY_VERSION STR(DISPLAY_VERSION) - -#define CLS_SDK_GENERATOR_NAME (STR(CLS_SDK_NAME) "/" CLS_SDK_DISPLAY_VERSION) - -// arch definitions -#if defined(__arm__) || defined(__arm64__) || defined(__arm64e__) -#include -#endif - -#if defined(__arm__) -#define CLS_CPU_ARM 1 -#endif -#if defined(__arm64__) || defined(__arm64e__) -#define CLS_CPU_ARM64 1 -#endif -#if defined(__ARM_ARCH_7S__) -#define CLS_CPU_ARMV7S 1 -#endif -#if defined(_ARM_ARCH_7) -#define CLS_CPU_ARMV7 1 -#endif -#if defined(_ARM_ARCH_6) -#define CLS_CPU_ARMV6 1 -#endif -#if defined(__i386__) -#define CLS_CPU_I386 1 -#endif -#if defined(__x86_64__) -#define CLS_CPU_X86_64 1 -#endif -#define CLS_CPU_X86 (CLS_CPU_I386 || CLS_CPU_X86_64) -#define CLS_CPU_64BIT (CLS_CPU_X86_64 || CLS_CPU_ARM64) diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRCLSFCRAnalytics.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRCLSFCRAnalytics.h deleted file mode 100644 index 098833f616..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRCLSFCRAnalytics.h +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import - -@class FIRCLSSettings; -@protocol FIRAnalyticsInterop; -@protocol FIRAnalyticsInteropListener; - -@interface FIRCLSFCRAnalytics : NSObject - -/** Logs a Crashlytics crash session in Firebase Analytics. - * @param crashTimeStamp The time stamp of the crash to be logged. - */ -+ (void)logCrashWithTimeStamp:(NSTimeInterval)crashTimeStamp - toAnalytics:(id)analytics; - -+ (void)registerEventListener:(id)eventListener - toAnalytics:(id)analytics; - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRCLSFCRAnalytics.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRCLSFCRAnalytics.m deleted file mode 100644 index 6e3ab77cb8..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRCLSFCRAnalytics.m +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSFCRAnalytics.h" - -#import "FIRCLSInternalLogging.h" -#import "FIRCLSSettings.h" - -#import - -// Origin for events and user properties generated by Crashlytics. -static NSString *const kFIREventOriginCrash = @"clx"; - -// App exception event name. -static NSString *const kFIREventAppException = @"_ae"; - -// Timestamp key for the event payload. -static NSString *const kFIRParameterTimestamp = @"timestamp"; - -// Fatal key for the event payload. -static NSString *const kFIRParameterFatal = @"fatal"; - -FOUNDATION_STATIC_INLINE NSNumber *timeIntervalInMillis(NSTimeInterval timeInterval) { - return @(llrint(timeInterval * 1000.0)); -} - -@implementation FIRCLSFCRAnalytics - -+ (void)logCrashWithTimeStamp:(NSTimeInterval)crashTimeStamp - toAnalytics:(id)analytics { - if (analytics == nil) { - return; - } - - FIRCLSDeveloperLog(@"Crashlytics:Crash:Reports:Event", "Sending event."); - NSDictionary *params = [self buildLogParamsFromCrash:crashTimeStamp]; - [analytics logEventWithOrigin:kFIREventOriginCrash name:kFIREventAppException parameters:params]; -} - -+ (void)registerEventListener:(id)eventListener - toAnalytics:(id)analytics { - if (analytics == nil) { - return; - } - - [analytics registerAnalyticsListener:eventListener withOrigin:kFIREventOriginCrash]; - - FIRCLSDeveloperLog(@"Crashlytics:Crash:Reports:Event", - "Registered Firebase Analytics event listener"); -} - -/** - * Builds a dictionary of params to be sent to Analytics using the crash object. - * - * @param crashTimeStamp The time stamp of the crash to be logged. - * - * @return An NSDictionary containing the time the crash occured and the fatal - * flag to be fed into Firebase Analytics. - */ -+ (NSDictionary *)buildLogParamsFromCrash:(NSTimeInterval)crashTimeStamp { - return @{ - kFIRParameterTimestamp : timeIntervalInMillis(crashTimeStamp), - kFIRParameterFatal : @(INT64_C(1)) - }; -} - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRCLSFeatures.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRCLSFeatures.h deleted file mode 100644 index 4810a5d9b1..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRCLSFeatures.h +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#pragma once - -#include "FIRCLSDefines.h" - -#define CLS_MEMORY_PROTECTION_ENABLED 1 -#define CLS_COMPACT_UNWINDED_ENABLED 1 -#define CLS_DWARF_UNWINDING_ENABLED 1 - -#define CLS_USE_SIGALTSTACK (!TARGET_OS_WATCH && !TARGET_OS_TV) -#define CLS_CAN_SUSPEND_THREADS !TARGET_OS_WATCH -#define CLS_MACH_EXCEPTION_SUPPORTED (!TARGET_OS_WATCH && !TARGET_OS_TV) - -#define CLS_COMPACT_UNWINDING_SUPPORTED \ - ((CLS_CPU_I386 || CLS_CPU_X86_64 || CLS_CPU_ARM64) && CLS_COMPACT_UNWINDED_ENABLED) - -#define CLS_DWARF_UNWINDING_SUPPORTED \ - (CLS_COMPACT_UNWINDING_SUPPORTED && CLS_DWARF_UNWINDING_ENABLED) diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRCLSFile.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRCLSFile.h deleted file mode 100644 index ad2e54dd9c..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRCLSFile.h +++ /dev/null @@ -1,104 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#pragma once - -#include -#include -#include - -#if defined(__OBJC__) -#import -#endif - -__BEGIN_DECLS - -typedef struct { - int fd; - int collectionDepth; - bool needComma; - - bool bufferWrites; - char* writeBuffer; - size_t writeBufferLength; - - off_t writtenLength; -} FIRCLSFile; -typedef FIRCLSFile* FIRCLSFileRef; - -#define CLS_FILE_MAX_STRING_LENGTH (10240) -#define CLS_FILE_HEX_BUFFER \ - (32) // must be at least 2, and should be even (to account for 2 chars per hex value) -#define CLS_FILE_MAX_WRITE_ATTEMPTS (50) - -extern const size_t FIRCLSWriteBufferLength; - -// make sure to stop work if either FIRCLSFileInit... method returns false, because the FIRCLSFile -// struct will contain garbage data! -bool FIRCLSFileInitWithPath(FIRCLSFile* file, const char* path, bool bufferWrites); -bool FIRCLSFileInitWithPathMode(FIRCLSFile* file, - const char* path, - bool appendMode, - bool bufferWrites); - -void FIRCLSFileFlushWriteBuffer(FIRCLSFile* file); -bool FIRCLSFileClose(FIRCLSFile* file); -bool FIRCLSFileCloseWithOffset(FIRCLSFile* file, off_t* finalSize); -bool FIRCLSFileIsOpen(FIRCLSFile* file); - -bool FIRCLSFileLoopWithWriteBlock(const void* buffer, - size_t length, - ssize_t (^writeBlock)(const void* partialBuffer, - size_t partialLength)); -bool FIRCLSFileWriteWithRetries(int fd, const void* buffer, size_t length); - -// writing -void FIRCLSFileWriteSectionStart(FIRCLSFile* file, const char* name); -void FIRCLSFileWriteSectionEnd(FIRCLSFile* file); - -void FIRCLSFileWriteHashStart(FIRCLSFile* file); -void FIRCLSFileWriteHashEnd(FIRCLSFile* file); -void FIRCLSFileWriteHashKey(FIRCLSFile* file, const char* key); -void FIRCLSFileWriteHashEntryUint64(FIRCLSFile* file, const char* key, uint64_t value); -void FIRCLSFileWriteHashEntryInt64(FIRCLSFile* file, const char* key, int64_t value); -void FIRCLSFileWriteHashEntryString(FIRCLSFile* file, const char* key, const char* value); -#if defined(__OBJC__) -void FIRCLSFileWriteHashEntryNSString(FIRCLSFile* file, const char* key, NSString* string); -void FIRCLSFileWriteHashEntryNSStringUnlessNilOrEmpty(FIRCLSFile* file, - const char* key, - NSString* string); -#endif -void FIRCLSFileWriteHashEntryHexEncodedString(FIRCLSFile* file, const char* key, const char* value); -void FIRCLSFileWriteHashEntryBoolean(FIRCLSFile* file, const char* key, bool value); - -void FIRCLSFileWriteArrayStart(FIRCLSFile* file); -void FIRCLSFileWriteArrayEnd(FIRCLSFile* file); -void FIRCLSFileWriteArrayEntryUint64(FIRCLSFile* file, uint64_t value); -void FIRCLSFileWriteArrayEntryString(FIRCLSFile* file, const char* value); -void FIRCLSFileWriteArrayEntryHexEncodedString(FIRCLSFile* file, const char* value); - -void FIRCLSFileFDWriteUInt64(int fd, uint64_t number, bool hex); -void FIRCLSFileFDWriteInt64(int fd, int64_t number); -void FIRCLSFileWriteUInt64(FIRCLSFile* file, uint64_t number, bool hex); -void FIRCLSFileWriteInt64(FIRCLSFile* file, int64_t number); - -#if defined(__OBJC__) && TARGET_OS_MAC -NSArray* FIRCLSFileReadSections(const char* path, - bool deleteOnFailure, - NSObject* (^transformer)(id obj)); -NSString* FIRCLSFileHexEncodeString(const char* string); -NSString* FIRCLSFileHexDecodeString(const char* string); -#endif - -__END_DECLS diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRCLSFile.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRCLSFile.m deleted file mode 100644 index 10b96d3392..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRCLSFile.m +++ /dev/null @@ -1,702 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "FIRCLSFile.h" - -#include "FIRCLSByteUtility.h" -#include "FIRCLSUtility.h" - -#if TARGET_OS_MAC -#include -#endif - -#include - -#include -#include - -#include - -// uint64_t should only have max 19 chars in base 10, and less in base 16 -static const size_t FIRCLSUInt64StringBufferLength = 21; -static const size_t FIRCLSStringBufferLength = 16; -const size_t FIRCLSWriteBufferLength = 1000; - -static bool FIRCLSFileInit(FIRCLSFile* file, int fdm, bool appendMode, bool bufferWrites); - -static void FIRCLSFileWriteToFileDescriptorOrBuffer(FIRCLSFile* file, - const char* string, - size_t length); -static void FIRCLSFileWriteToBuffer(FIRCLSFile* file, const char* string, size_t length); -static void FIRCLSFileWriteToFileDescriptor(FIRCLSFile* file, const char* string, size_t length); - -short FIRCLSFilePrepareUInt64(char* buffer, uint64_t number, bool hex); - -static void FIRCLSFileWriteString(FIRCLSFile* file, const char* string); -static void FIRCLSFileWriteHexEncodedString(FIRCLSFile* file, const char* string); -static void FIRCLSFileWriteBool(FIRCLSFile* file, bool value); - -static void FIRCLSFileWriteCollectionStart(FIRCLSFile* file, const char openingChar); -static void FIRCLSFileWriteCollectionEnd(FIRCLSFile* file, const char closingChar); -static void FIRCLSFileWriteColletionEntryProlog(FIRCLSFile* file); -static void FIRCLSFileWriteColletionEntryEpilog(FIRCLSFile* file); - -#define CLS_FILE_DEBUG_LOGGING 0 - -#pragma mark - File Structure -static bool FIRCLSFileInit(FIRCLSFile* file, int fd, bool appendMode, bool bufferWrites) { - if (!file) { - FIRCLSSDKLog("Error: file is null\n"); - return false; - } - - if (fd < 0) { - FIRCLSSDKLog("Error: file descriptor invalid\n"); - return false; - } - - memset(file, 0, sizeof(FIRCLSFile)); - - file->fd = fd; - - file->bufferWrites = bufferWrites; - if (bufferWrites) { - file->writeBuffer = malloc(FIRCLSWriteBufferLength * sizeof(char)); - if (!file->writeBuffer) { - FIRCLSErrorLog(@"Unable to malloc in FIRCLSFileInit"); - return false; - } - - file->writeBufferLength = 0; - } - - file->writtenLength = 0; - if (appendMode) { - struct stat fileStats; - fstat(fd, &fileStats); - off_t currentFileSize = fileStats.st_size; - if (currentFileSize > 0) { - file->writtenLength += currentFileSize; - } - } - - return true; -} - -bool FIRCLSFileInitWithPath(FIRCLSFile* file, const char* path, bool bufferWrites) { - return FIRCLSFileInitWithPathMode(file, path, true, bufferWrites); -} - -bool FIRCLSFileInitWithPathMode(FIRCLSFile* file, - const char* path, - bool appendMode, - bool bufferWrites) { - if (!file) { - FIRCLSSDKLog("Error: file is null\n"); - return false; - } - - int mask = O_WRONLY | O_CREAT; - - if (appendMode) { - mask |= O_APPEND; - } else { - mask |= O_TRUNC; - } - - // make sure to call FIRCLSFileInit no matter what - int fd = -1; - if (path) { -#if TARGET_OS_IPHONE - /* - * data-protected non-portable open(2) : - * int open_dprotected_np(user_addr_t path, int flags, int class, int dpflags, int mode) - */ - fd = open_dprotected_np(path, mask, 4, 0, 0644); -#else - fd = open(path, mask, 0644); -#endif - - if (fd < 0) { - FIRCLSSDKLog("Error: Unable to open file %s\n", strerror(errno)); - } - } - - return FIRCLSFileInit(file, fd, appendMode, bufferWrites); -} - -bool FIRCLSFileClose(FIRCLSFile* file) { - return FIRCLSFileCloseWithOffset(file, NULL); -} - -bool FIRCLSFileCloseWithOffset(FIRCLSFile* file, off_t* finalSize) { - if (!FIRCLSIsValidPointer(file)) { - return false; - } - - if (file->bufferWrites && FIRCLSIsValidPointer(file->writeBuffer)) { - if (file->writeBufferLength > 0) { - FIRCLSFileFlushWriteBuffer(file); - } - free(file->writeBuffer); - } - - if (FIRCLSIsValidPointer(finalSize)) { - *finalSize = file->writtenLength; - } - - if (close(file->fd) != 0) { - FIRCLSSDKLog("Error: Unable to close file %s\n", strerror(errno)); - return false; - } - - memset(file, 0, sizeof(FIRCLSFile)); - file->fd = -1; - - return true; -} - -bool FIRCLSFileIsOpen(FIRCLSFile* file) { - if (!FIRCLSIsValidPointer(file)) { - return false; - } - - return file->fd > -1; -} - -#pragma mark - Core Writing API -void FIRCLSFileFlushWriteBuffer(FIRCLSFile* file) { - if (!FIRCLSIsValidPointer(file)) { - return; - } - - if (!file->bufferWrites) { - return; - } - - FIRCLSFileWriteToFileDescriptor(file, file->writeBuffer, file->writeBufferLength); - file->writeBufferLength = 0; -} - -static void FIRCLSFileWriteToFileDescriptorOrBuffer(FIRCLSFile* file, - const char* string, - size_t length) { - if (file->bufferWrites) { - if (file->writeBufferLength + length > FIRCLSWriteBufferLength - 1) { - // fill remaining space in buffer - size_t remainingSpace = FIRCLSWriteBufferLength - file->writeBufferLength - 1; - FIRCLSFileWriteToBuffer(file, string, remainingSpace); - FIRCLSFileFlushWriteBuffer(file); - - // write remainder of string to newly-emptied buffer - size_t remainingLength = length - remainingSpace; - FIRCLSFileWriteToFileDescriptorOrBuffer(file, string + remainingSpace, remainingLength); - } else { - FIRCLSFileWriteToBuffer(file, string, length); - } - } else { - FIRCLSFileWriteToFileDescriptor(file, string, length); - } -} - -static void FIRCLSFileWriteToFileDescriptor(FIRCLSFile* file, const char* string, size_t length) { - if (!FIRCLSFileWriteWithRetries(file->fd, string, length)) { - return; - } - - file->writtenLength += length; -} - -// Beware calling this method directly: it will truncate the input string if it's longer -// than the remaining space in the buffer. It's safer to call through -// FIRCLSFileWriteToFileDescriptorOrBuffer. -static void FIRCLSFileWriteToBuffer(FIRCLSFile* file, const char* string, size_t length) { - size_t writeLength = length; - if (file->writeBufferLength + writeLength > FIRCLSWriteBufferLength - 1) { - writeLength = FIRCLSWriteBufferLength - file->writeBufferLength - 1; - } - strncpy(file->writeBuffer + file->writeBufferLength, string, writeLength); - file->writeBufferLength += writeLength; - file->writeBuffer[file->writeBufferLength] = '\0'; -} - -bool FIRCLSFileLoopWithWriteBlock(const void* buffer, - size_t length, - ssize_t (^writeBlock)(const void* buf, size_t len)) { - for (size_t count = 0; length > 0 && count < CLS_FILE_MAX_WRITE_ATTEMPTS; ++count) { - // try to write all that is left - ssize_t ret = writeBlock(buffer, length); - if (ret >= 0 && ret == length) { - return true; - } - - // Write was unsuccessful (out of space, etc) - if (ret < 0) { - return false; - } - - // We wrote more bytes than we expected, abort - if (ret > length) { - return false; - } - - // wrote a portion of the data, adjust and keep trying - if (ret > 0) { - length -= ret; - buffer += ret; - continue; - } - - // return value is <= 0, which is an error - break; - } - - return false; -} - -bool FIRCLSFileWriteWithRetries(int fd, const void* buffer, size_t length) { - return FIRCLSFileLoopWithWriteBlock(buffer, length, - ^ssize_t(const void* partialBuffer, size_t partialLength) { - return write(fd, partialBuffer, partialLength); - }); -} - -#pragma mark - Strings - -static void FIRCLSFileWriteUnbufferedStringWithSuffix(FIRCLSFile* file, - const char* string, - size_t length, - char suffix) { - char suffixBuffer[2]; - - // collaspe the quote + suffix into one single write call, for a small performance win - suffixBuffer[0] = '"'; - suffixBuffer[1] = suffix; - - FIRCLSFileWriteToFileDescriptorOrBuffer(file, "\"", 1); - FIRCLSFileWriteToFileDescriptorOrBuffer(file, string, length); - FIRCLSFileWriteToFileDescriptorOrBuffer(file, suffixBuffer, suffix == 0 ? 1 : 2); -} - -static void FIRCLSFileWriteStringWithSuffix(FIRCLSFile* file, - const char* string, - size_t length, - char suffix) { - // 2 for quotes, 1 for suffix (if present) and 1 more for null character - const size_t maxStringSize = FIRCLSStringBufferLength - (suffix == 0 ? 3 : 4); - - if (length >= maxStringSize) { - FIRCLSFileWriteUnbufferedStringWithSuffix(file, string, length, suffix); - return; - } - - // we are trying to achieve this in one write call - // <"><"> - - char buffer[FIRCLSStringBufferLength]; - - buffer[0] = '"'; - - strncpy(buffer + 1, string, length); - - buffer[length + 1] = '"'; - length += 2; - - if (suffix) { - buffer[length] = suffix; - length += 1; - } - - // Always add the terminator. strncpy above would copy the terminator, if we supplied length + 1, - // but since we do this suffix adjustment here, it's easier to just fix it up in both cases. - buffer[length + 1] = 0; - - FIRCLSFileWriteToFileDescriptorOrBuffer(file, buffer, length); -} - -void FIRCLSFileWriteString(FIRCLSFile* file, const char* string) { - if (!string) { - FIRCLSFileWriteToFileDescriptorOrBuffer(file, "null", 4); - return; - } - - FIRCLSFileWriteStringWithSuffix(file, string, strlen(string), 0); -} - -void FIRCLSFileWriteHexEncodedString(FIRCLSFile* file, const char* string) { - if (!file) { - return; - } - - if (!string) { - FIRCLSFileWriteToFileDescriptorOrBuffer(file, "null", 4); - return; - } - - char buffer[CLS_FILE_HEX_BUFFER]; - - memset(buffer, 0, sizeof(buffer)); - - size_t length = strlen(string); - - FIRCLSFileWriteToFileDescriptorOrBuffer(file, "\"", 1); - - int bufferIndex = 0; - for (int i = 0; i < length; ++i) { - FIRCLSHexFromByte(string[i], &buffer[bufferIndex]); - - bufferIndex += 2; // 1 char => 2 hex values at a time - - // we can continue only if we have enough space for two more hex - // characters *and* a terminator. So, we need three total chars - // of space - if (bufferIndex >= CLS_FILE_HEX_BUFFER) { - FIRCLSFileWriteToFileDescriptorOrBuffer(file, buffer, CLS_FILE_HEX_BUFFER); - bufferIndex = 0; - } - } - - // Copy the remainder, which could even be the entire string, if it - // fit into the buffer completely. Be careful with bounds checking here. - // The string needs to be non-empty, and we have to have copied at least - // one pair of hex characters in. - if (bufferIndex > 0 && length > 0) { - FIRCLSFileWriteToFileDescriptorOrBuffer(file, buffer, bufferIndex); - } - - FIRCLSFileWriteToFileDescriptorOrBuffer(file, "\"", 1); -} - -#pragma mark - Integers -void FIRCLSFileWriteUInt64(FIRCLSFile* file, uint64_t number, bool hex) { - char buffer[FIRCLSUInt64StringBufferLength]; - short i = FIRCLSFilePrepareUInt64(buffer, number, hex); - char* beginning = &buffer[i]; // Write from a pointer to the begining of the string. - FIRCLSFileWriteToFileDescriptorOrBuffer(file, beginning, strlen(beginning)); -} - -void FIRCLSFileFDWriteUInt64(int fd, uint64_t number, bool hex) { - char buffer[FIRCLSUInt64StringBufferLength]; - short i = FIRCLSFilePrepareUInt64(buffer, number, hex); - char* beginning = &buffer[i]; // Write from a pointer to the begining of the string. - FIRCLSFileWriteWithRetries(fd, beginning, strlen(beginning)); -} - -void FIRCLSFileWriteInt64(FIRCLSFile* file, int64_t number) { - if (number < 0) { - FIRCLSFileWriteToFileDescriptorOrBuffer(file, "-", 1); - number *= -1; // make it positive - } - - FIRCLSFileWriteUInt64(file, number, false); -} - -void FIRCLSFileFDWriteInt64(int fd, int64_t number) { - if (number < 0) { - FIRCLSFileWriteWithRetries(fd, "-", 1); - number *= -1; // make it positive - } - - FIRCLSFileFDWriteUInt64(fd, number, false); -} - -short FIRCLSFilePrepareUInt64(char* buffer, uint64_t number, bool hex) { - uint32_t base = hex ? 16 : 10; - - // zero it out, which will add a terminator - memset(buffer, 0, FIRCLSUInt64StringBufferLength); - - // TODO: look at this closer - // I'm pretty sure there is a bug in this code that - // can result in numbers with leading zeros. Technically, - // those are not valid json. - - // Set current index. - short i = FIRCLSUInt64StringBufferLength - 1; - - // Loop through filling in the chars from the end. - do { - char value = number % base + '0'; - if (value > '9') { - value += 'a' - '9' - 1; - } - - buffer[--i] = value; - } while ((number /= base) > 0 && i > 0); - - // returns index pointing to the beginning of the string. - return i; -} - -void FIRCLSFileWriteBool(FIRCLSFile* file, bool value) { - if (value) { - FIRCLSFileWriteToFileDescriptorOrBuffer(file, "true", 4); - } else { - FIRCLSFileWriteToFileDescriptorOrBuffer(file, "false", 5); - } -} - -void FIRCLSFileWriteSectionStart(FIRCLSFile* file, const char* name) { - FIRCLSFileWriteHashStart(file); - FIRCLSFileWriteHashKey(file, name); -} - -void FIRCLSFileWriteSectionEnd(FIRCLSFile* file) { - FIRCLSFileWriteHashEnd(file); - FIRCLSFileWriteToFileDescriptorOrBuffer(file, "\n", 1); -} - -void FIRCLSFileWriteCollectionStart(FIRCLSFile* file, const char openingChar) { - char string[2]; - - string[0] = ','; - string[1] = openingChar; - - if (file->needComma) { - FIRCLSFileWriteToFileDescriptorOrBuffer(file, string, 2); // write the seperator + opening char - } else { - FIRCLSFileWriteToFileDescriptorOrBuffer(file, &string[1], 1); // write only the opening char - } - - file->collectionDepth++; - - file->needComma = false; -} - -void FIRCLSFileWriteCollectionEnd(FIRCLSFile* file, const char closingChar) { - FIRCLSFileWriteToFileDescriptorOrBuffer(file, &closingChar, 1); - - if (file->collectionDepth <= 0) { - // FIRCLSSafeLog("Collection depth invariant violated\n"); - return; - } - - file->collectionDepth--; - - file->needComma = file->collectionDepth > 0; -} - -void FIRCLSFileWriteColletionEntryProlog(FIRCLSFile* file) { - if (file->needComma) { - FIRCLSFileWriteToFileDescriptorOrBuffer(file, ",", 1); - } -} - -void FIRCLSFileWriteColletionEntryEpilog(FIRCLSFile* file) { - file->needComma = true; -} - -void FIRCLSFileWriteHashStart(FIRCLSFile* file) { - FIRCLSFileWriteCollectionStart(file, '{'); -} - -void FIRCLSFileWriteHashEnd(FIRCLSFile* file) { - FIRCLSFileWriteCollectionEnd(file, '}'); -} - -void FIRCLSFileWriteHashKey(FIRCLSFile* file, const char* key) { - FIRCLSFileWriteColletionEntryProlog(file); - - FIRCLSFileWriteStringWithSuffix(file, key, strlen(key), ':'); - - file->needComma = false; -} - -void FIRCLSFileWriteHashEntryUint64(FIRCLSFile* file, const char* key, uint64_t value) { - // no prolog needed because it comes from the key - - FIRCLSFileWriteHashKey(file, key); - FIRCLSFileWriteUInt64(file, value, false); - - FIRCLSFileWriteColletionEntryEpilog(file); -} - -void FIRCLSFileWriteHashEntryInt64(FIRCLSFile* file, const char* key, int64_t value) { - // prolog from key - FIRCLSFileWriteHashKey(file, key); - FIRCLSFileWriteInt64(file, value); - - FIRCLSFileWriteColletionEntryEpilog(file); -} - -void FIRCLSFileWriteHashEntryString(FIRCLSFile* file, const char* key, const char* value) { - FIRCLSFileWriteHashKey(file, key); - FIRCLSFileWriteString(file, value); - - FIRCLSFileWriteColletionEntryEpilog(file); -} - -void FIRCLSFileWriteHashEntryNSString(FIRCLSFile* file, const char* key, NSString* string) { - FIRCLSFileWriteHashEntryString(file, key, [string UTF8String]); -} - -void FIRCLSFileWriteHashEntryNSStringUnlessNilOrEmpty(FIRCLSFile* file, - const char* key, - NSString* string) { - if ([string length] > 0) { - FIRCLSFileWriteHashEntryString(file, key, [string UTF8String]); - } -} - -void FIRCLSFileWriteHashEntryHexEncodedString(FIRCLSFile* file, - const char* key, - const char* value) { - FIRCLSFileWriteHashKey(file, key); - FIRCLSFileWriteHexEncodedString(file, value); - - FIRCLSFileWriteColletionEntryEpilog(file); -} - -void FIRCLSFileWriteHashEntryBoolean(FIRCLSFile* file, const char* key, bool value) { - FIRCLSFileWriteHashKey(file, key); - FIRCLSFileWriteBool(file, value); - - FIRCLSFileWriteColletionEntryEpilog(file); -} - -void FIRCLSFileWriteArrayStart(FIRCLSFile* file) { - FIRCLSFileWriteCollectionStart(file, '['); -} - -void FIRCLSFileWriteArrayEnd(FIRCLSFile* file) { - FIRCLSFileWriteCollectionEnd(file, ']'); -} - -void FIRCLSFileWriteArrayEntryUint64(FIRCLSFile* file, uint64_t value) { - FIRCLSFileWriteColletionEntryProlog(file); - - FIRCLSFileWriteUInt64(file, value, false); - - FIRCLSFileWriteColletionEntryEpilog(file); -} - -void FIRCLSFileWriteArrayEntryString(FIRCLSFile* file, const char* value) { - FIRCLSFileWriteColletionEntryProlog(file); - - FIRCLSFileWriteString(file, value); - - FIRCLSFileWriteColletionEntryEpilog(file); -} - -void FIRCLSFileWriteArrayEntryHexEncodedString(FIRCLSFile* file, const char* value) { - FIRCLSFileWriteColletionEntryProlog(file); - - FIRCLSFileWriteHexEncodedString(file, value); - - FIRCLSFileWriteColletionEntryEpilog(file); -} - -NSArray* FIRCLSFileReadSections(const char* path, - bool deleteOnFailure, - NSObject* (^transformer)(id obj)) { - if (!FIRCLSIsValidPointer(path)) { - FIRCLSSDKLogError("Error: input path is invalid\n"); - return nil; - } - - NSString* pathString = [NSString stringWithUTF8String:path]; - NSString* contents = [NSString stringWithContentsOfFile:pathString - encoding:NSUTF8StringEncoding - error:nil]; - NSArray* components = [contents componentsSeparatedByString:@"\n"]; - - if (!components) { - if (deleteOnFailure) { - unlink(path); - } - - FIRCLSSDKLog("Unable to read file %s\n", path); - return nil; - } - - NSMutableArray* array = [NSMutableArray array]; - - // loop through all the entires, and - for (NSString* component in components) { - NSData* data = [component dataUsingEncoding:NSUTF8StringEncoding]; - - id obj = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; - if (!obj) { - continue; - } - - if (transformer) { - obj = transformer(obj); - } - - if (!obj) { - continue; - } - - [array addObject:obj]; - } - - return array; -} - -NSString* FIRCLSFileHexEncodeString(const char* string) { - size_t length = strlen(string); - char* encodedBuffer = malloc(length * 2 + 1); - - if (!encodedBuffer) { - FIRCLSErrorLog(@"Unable to malloc in FIRCLSFileHexEncodeString"); - return nil; - } - - memset(encodedBuffer, 0, length * 2 + 1); - - int bufferIndex = 0; - for (int i = 0; i < length; ++i) { - FIRCLSHexFromByte(string[i], &encodedBuffer[bufferIndex]); - - bufferIndex += 2; // 1 char => 2 hex values at a time - } - - NSString* stringObject = [NSString stringWithUTF8String:encodedBuffer]; - - free(encodedBuffer); - - return stringObject; -} - -NSString* FIRCLSFileHexDecodeString(const char* string) { - size_t length = strlen(string); - char* decodedBuffer = malloc(length); // too long, but safe - if (!decodedBuffer) { - FIRCLSErrorLog(@"Unable to malloc in FIRCLSFileHexDecodeString"); - return nil; - } - - memset(decodedBuffer, 0, length); - - for (int i = 0; i < length / 2; ++i) { - size_t index = i * 2; - - uint8_t hiNybble = FIRCLSNybbleFromChar(string[index]); - uint8_t lowNybble = FIRCLSNybbleFromChar(string[index + 1]); - - if (hiNybble == FIRCLSInvalidCharNybble || lowNybble == FIRCLSInvalidCharNybble) { - // char is invalid, abort loop - break; - } - - decodedBuffer[i] = (hiNybble << 4) | lowNybble; - } - - NSString* strObject = [NSString stringWithUTF8String:decodedBuffer]; - - free(decodedBuffer); - - return strObject; -} diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRCLSInternalLogging.c b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRCLSInternalLogging.c deleted file mode 100644 index d9e3daa092..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRCLSInternalLogging.c +++ /dev/null @@ -1,96 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "FIRCLSInternalLogging.h" -#include "FIRCLSContext.h" -#include "FIRCLSGlobals.h" -#include "FIRCLSUtility.h" - -void FIRCLSSDKFileLog(FIRCLSInternalLogLevel level, const char* format, ...) { - if (!_firclsContext.readonly || !_firclsContext.writable) { - return; - } - - const char* path = _firclsContext.readonly->logPath; - if (!FIRCLSIsValidPointer(path)) { - return; - } - - if (_firclsContext.writable->internalLogging.logLevel > level) { - return; - } - - if (_firclsContext.writable->internalLogging.logFd == -1) { - _firclsContext.writable->internalLogging.logFd = open(path, O_WRONLY | O_CREAT | O_APPEND, 0644); - } - - const int fd = _firclsContext.writable->internalLogging.logFd; - if (fd < 0) { - return; - } - - va_list args; - va_start(args, format); - -#if DEBUG && 0 - // It's nice to use printf here, so all the formatting works. However, its possible to hit a - // deadlock if you call vfprintf in a crash handler. So, this code is handy to keep, just in case, - // if there's a really tough thing to debug. - FILE* file = fopen(path, "a+"); - vfprintf(file, format, args); - fclose(file); -#else - size_t formatLength = strlen(format); - for (size_t idx = 0; idx < formatLength; ++idx) { - if (format[idx] != '%') { - write(fd, &format[idx], 1); - continue; - } - - idx++; // move to the format char - switch (format[idx]) { - case 'd': { - int value = va_arg(args, int); - FIRCLSFileFDWriteInt64(fd, value); - } break; - case 'u': { - uint32_t value = va_arg(args, uint32_t); - FIRCLSFileFDWriteUInt64(fd, value, false); - } break; - case 'p': { - uintptr_t value = va_arg(args, uintptr_t); - write(fd, "0x", 2); - FIRCLSFileFDWriteUInt64(fd, value, true); - } break; - case 's': { - const char* string = va_arg(args, const char*); - if (!string) { - string = "(null)"; - } - - write(fd, string, strlen(string)); - } break; - case 'x': { - unsigned int value = va_arg(args, unsigned int); - FIRCLSFileFDWriteUInt64(fd, value, true); - } break; - default: - // unhandled, back up to write out the percent + the format char - write(fd, &format[idx - 1], 2); - break; - } - } -#endif - va_end(args); -} diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRCLSInternalLogging.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRCLSInternalLogging.h deleted file mode 100644 index 4ff1644539..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRCLSInternalLogging.h +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#pragma once - -#include - -#if __OBJC__ -#import "FIRCLSLogger.h" -#define FIRCLSDeveloperLog(label, __FORMAT__, ...) \ - FIRCLSDebugLog(@"[" label "] " __FORMAT__, ##__VA_ARGS__); -#endif - -typedef enum { - FIRCLSInternalLogLevelUnknown = 0, - FIRCLSInternalLogLevelDebug = 1, - FIRCLSInternalLogLevelInfo = 2, - FIRCLSInternalLogLevelWarn = 3, - FIRCLSInternalLogLevelError = 4 -} FIRCLSInternalLogLevel; - -typedef struct { - int logFd; - FIRCLSInternalLogLevel logLevel; -} FIRCLSInternalLoggingWritableContext; - -#define FIRCLSSDKLogDebug(__FORMAT__, ...) \ - FIRCLSSDKFileLog(FIRCLSInternalLogLevelDebug, "DEBUG [%s:%d] " __FORMAT__, __FUNCTION__, \ - __LINE__, ##__VA_ARGS__) -#define FIRCLSSDKLogInfo(__FORMAT__, ...) \ - FIRCLSSDKFileLog(FIRCLSInternalLogLevelInfo, "INFO [%s:%d] " __FORMAT__, __FUNCTION__, \ - __LINE__, ##__VA_ARGS__) -#define FIRCLSSDKLogWarn(__FORMAT__, ...) \ - FIRCLSSDKFileLog(FIRCLSInternalLogLevelWarn, "WARN [%s:%d] " __FORMAT__, __FUNCTION__, \ - __LINE__, ##__VA_ARGS__) -#define FIRCLSSDKLogError(__FORMAT__, ...) \ - FIRCLSSDKFileLog(FIRCLSInternalLogLevelError, "ERROR [%s:%d] " __FORMAT__, __FUNCTION__, \ - __LINE__, ##__VA_ARGS__) - -#define FIRCLSSDKLog FIRCLSSDKLogWarn - -__BEGIN_DECLS - -void FIRCLSSDKFileLog(FIRCLSInternalLogLevel level, const char* format, ...) __printflike(2, 3); - -__END_DECLS diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRCLSLogger.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRCLSLogger.h deleted file mode 100644 index e03d99a9e8..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRCLSLogger.h +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import - -__BEGIN_DECLS - -void FIRCLSDebugLog(NSString *message, ...); -void FIRCLSInfoLog(NSString *message, ...); -void FIRCLSWarningLog(NSString *message, ...); -void FIRCLSErrorLog(NSString *message, ...); - -__END_DECLS diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRCLSLogger.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRCLSLogger.m deleted file mode 100644 index 0bef6087a2..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRCLSLogger.m +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSLogger.h" - -#import - -FIRLoggerService kFIRLoggerCrashlytics = @"[Firebase/Crashlytics]"; - -NSString *const CrashlyticsMessageCode = @"I-CLS000000"; - -void FIRCLSDebugLog(NSString *message, ...) { - va_list args_ptr; - va_start(args_ptr, message); - FIRLogBasic(FIRLoggerLevelDebug, kFIRLoggerCrashlytics, CrashlyticsMessageCode, message, - args_ptr); - va_end(args_ptr); -} - -void FIRCLSInfoLog(NSString *message, ...) { - va_list args_ptr; - va_start(args_ptr, message); - FIRLogBasic(FIRLoggerLevelInfo, kFIRLoggerCrashlytics, CrashlyticsMessageCode, message, args_ptr); - va_end(args_ptr); -} - -void FIRCLSWarningLog(NSString *message, ...) { - va_list args_ptr; - va_start(args_ptr, message); - FIRLogBasic(FIRLoggerLevelWarning, kFIRLoggerCrashlytics, CrashlyticsMessageCode, message, - args_ptr); - va_end(args_ptr); -} - -void FIRCLSErrorLog(NSString *message, ...) { - va_list args_ptr; - va_start(args_ptr, message); - FIRLogBasic(FIRLoggerLevelError, kFIRLoggerCrashlytics, CrashlyticsMessageCode, message, - args_ptr); - va_end(args_ptr); -} diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRCLSProfiling.c b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRCLSProfiling.c deleted file mode 100644 index df50080234..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRCLSProfiling.c +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "FIRCLSProfiling.h" - -#include -#include - -FIRCLSProfileMark FIRCLSProfilingStart(void) { - return mach_absolute_time(); -} - -double FIRCLSProfileEnd(FIRCLSProfileMark mark) { - uint64_t duration = mach_absolute_time() - mark; - - mach_timebase_info_data_t info; - mach_timebase_info(&info); - - if (info.denom == 0) { - return 0.0; - } - - // Convert to nanoseconds - duration *= info.numer; - duration /= info.denom; - - return (double)duration / (double)NSEC_PER_MSEC; // return time in milliseconds -} - -void FIRCLSProfileBlock(const char* label, void (^block)(void)) { - FIRCLSProfileMark mark = FIRCLSProfilingStart(); - - block(); - - fprintf(stderr, "[Profile] %s: %f ms\n", label, FIRCLSProfileEnd(mark)); -} diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRCLSProfiling.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRCLSProfiling.h deleted file mode 100644 index 5cc312f4e9..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRCLSProfiling.h +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#pragma once - -#include - -typedef uint64_t FIRCLSProfileMark; - -__BEGIN_DECLS - -// high-resolution timing, returning the results in seconds -FIRCLSProfileMark FIRCLSProfilingStart(void); -double FIRCLSProfileEnd(FIRCLSProfileMark mark); - -void FIRCLSProfileBlock(const char* label, void (^block)(void)); - -__END_DECLS diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRCLSThreadState.c b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRCLSThreadState.c deleted file mode 100644 index 44a300282f..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRCLSThreadState.c +++ /dev/null @@ -1,147 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "FIRCLSThreadState.h" -#include "FIRCLSDefines.h" -#include "FIRCLSUtility.h" - -#if defined(__arm__) || defined(__arm64__) -#include -#include -#endif - -#if CLS_CPU_X86_64 -#define GET_IP_REGISTER(r) (r->__ss.__rip) -#define GET_FP_REGISTER(r) (r->__ss.__rbp) -#define GET_SP_REGISTER(r) (r->__ss.__rsp) -#define GET_LR_REGISTER(r) 0 -#define SET_IP_REGISTER(r, v) (r->__ss.__rip = v) -#define SET_FP_REGISTER(r, v) (r->__ss.__rbp = v) -#define SET_SP_REGISTER(r, v) (r->__ss.__rsp = v) -#define SET_LR_REGISTER(r, v) -#elif CLS_CPU_I386 -#define GET_IP_REGISTER(r) (r->__ss.__eip) -#define GET_FP_REGISTER(r) (r->__ss.__ebp) -#define GET_SP_REGISTER(r) (r->__ss.__esp) -#define GET_LR_REGISTER(r) 0 -#define SET_IP_REGISTER(r, v) (r->__ss.__eip = v) -#define SET_FP_REGISTER(r, v) (r->__ss.__ebp = v) -#define SET_SP_REGISTER(r, v) (r->__ss.__esp = v) -#define SET_LR_REGISTER(r, v) -#elif CLS_CPU_ARM64 -// The arm_thread_state64_get_* macros translate down to the AUTIA and AUTIB instructions which -// authenticate the address, but don't clear the upper bits. From the docs: -// "If the authentication passes, the upper bits of the address are restored to enable -// subsequent use of the address. the authentication fails, the upper bits are corrupted and -// any subsequent use of the address results in a Translation fault." -// Since we only want the address (with the metadata in the upper bits masked out), we used the -// ptrauth_strip macro to clear the upper bits. -// -// We found later that ptrauth_strip doesn't seem to do anything. In many cases, the upper bits were -// already stripped, so for most non-system-library code, Crashlytics would still symbolicate. But -// for system libraries, the upper bits were being left in even when we called ptrauth_strip. -// Instead, we're bit masking and only allowing the latter 36 bits. -#define CLS_PTRAUTH_STRIP(pointer) ((uintptr_t)pointer & 0x0000000FFFFFFFFF) -#define GET_IP_REGISTER(r) (CLS_PTRAUTH_STRIP(arm_thread_state64_get_pc(r->__ss))) -#define GET_FP_REGISTER(r) (CLS_PTRAUTH_STRIP(arm_thread_state64_get_fp(r->__ss))) -#define GET_SP_REGISTER(r) (CLS_PTRAUTH_STRIP(arm_thread_state64_get_sp(r->__ss))) -#define GET_LR_REGISTER(r) (CLS_PTRAUTH_STRIP(arm_thread_state64_get_lr(r->__ss))) -#define SET_IP_REGISTER(r, v) arm_thread_state64_set_pc_fptr(r->__ss, (void*)v) -#define SET_FP_REGISTER(r, v) arm_thread_state64_set_fp(r->__ss, v) -#define SET_SP_REGISTER(r, v) arm_thread_state64_set_sp(r->__ss, v) -#define SET_LR_REGISTER(r, v) arm_thread_state64_set_lr_fptr(r->__ss, (void*)v) -#elif CLS_CPU_ARM -#define GET_IP_REGISTER(r) (r->__ss.__pc) -#define GET_FP_REGISTER(r) (r->__ss.__r[7]) -#define GET_SP_REGISTER(r) (r->__ss.__sp) -#define GET_LR_REGISTER(r) (r->__ss.__lr) -#define SET_IP_REGISTER(r, v) (r->__ss.__pc = v) -#define SET_FP_REGISTER(r, v) (r->__ss.__r[7] = v) -#define SET_SP_REGISTER(r, v) (r->__ss.__sp = v) -#define SET_LR_REGISTER(r, v) (r->__ss.__lr = v) -#else -#error "Architecture Unsupported" -#endif - -uintptr_t FIRCLSThreadContextGetPC(FIRCLSThreadContext* registers) { - if (!registers) { - return 0; - } - - return GET_IP_REGISTER(registers); -} - -uintptr_t FIRCLSThreadContextGetStackPointer(const FIRCLSThreadContext* registers) { - if (!registers) { - return 0; - } - - return GET_SP_REGISTER(registers); -} - -bool FIRCLSThreadContextSetStackPointer(FIRCLSThreadContext* registers, uintptr_t value) { - if (!FIRCLSIsValidPointer(registers)) { - return false; - } - - SET_SP_REGISTER(registers, value); - - return true; -} - -uintptr_t FIRCLSThreadContextGetLinkRegister(const FIRCLSThreadContext* registers) { - if (!FIRCLSIsValidPointer(registers)) { - return 0; - } - - return GET_LR_REGISTER(registers); -} - -bool FIRCLSThreadContextSetLinkRegister(FIRCLSThreadContext* registers, uintptr_t value) { - if (!FIRCLSIsValidPointer(registers)) { - return false; - } - - SET_LR_REGISTER(registers, value); - - return true; -} - -bool FIRCLSThreadContextSetPC(FIRCLSThreadContext* registers, uintptr_t value) { - if (!registers) { - return false; - } - - SET_IP_REGISTER(registers, value); - - return true; -} - -uintptr_t FIRCLSThreadContextGetFramePointer(const FIRCLSThreadContext* registers) { - if (!FIRCLSIsValidPointer(registers)) { - return 0; - } - - return GET_FP_REGISTER(registers); -} - -bool FIRCLSThreadContextSetFramePointer(FIRCLSThreadContext* registers, uintptr_t value) { - if (!FIRCLSIsValidPointer(registers)) { - return false; - } - - SET_FP_REGISTER(registers, value); - - return true; -} diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRCLSThreadState.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRCLSThreadState.h deleted file mode 100644 index f281f665c9..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRCLSThreadState.h +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#pragma once - -#include -#include - -#if CLS_CPU_ARM -#define FIRCLSThreadStateCount ARM_THREAD_STATE_COUNT -#define FIRCLSThreadState ARM_THREAD_STATE -#elif CLS_CPU_ARM64 -#define FIRCLSThreadStateCount ARM_THREAD_STATE64_COUNT -#define FIRCLSThreadState ARM_THREAD_STATE64 -#elif CLS_CPU_I386 -#define FIRCLSThreadStateCount x86_THREAD_STATE32_COUNT -#define FIRCLSThreadState x86_THREAD_STATE32 -#elif CLS_CPU_X86_64 -#define FIRCLSThreadStateCount x86_THREAD_STATE64_COUNT -#define FIRCLSThreadState x86_THREAD_STATE64 -#endif - -// _STRUCT_MCONTEXT was fixed to point to the right thing on ARM in the iOS 7.1 SDK -typedef _STRUCT_MCONTEXT FIRCLSThreadContext; - -// I'm not entirely sure what happened when, but this appears to have disappeared from -// the SDKs... -#if !defined(_STRUCT_UCONTEXT64) -typedef _STRUCT_UCONTEXT _STRUCT_UCONTEXT64; -#endif - -#pragma mark Register Access - -uintptr_t FIRCLSThreadContextGetPC(FIRCLSThreadContext* registers); -uintptr_t FIRCLSThreadContextGetStackPointer(const FIRCLSThreadContext* registers); -uintptr_t FIRCLSThreadContextGetFramePointer(const FIRCLSThreadContext* registers); - -bool FIRCLSThreadContextSetPC(FIRCLSThreadContext* registers, uintptr_t value); -bool FIRCLSThreadContextSetStackPointer(FIRCLSThreadContext* registers, uintptr_t value); -bool FIRCLSThreadContextSetFramePointer(FIRCLSThreadContext* registers, uintptr_t value); - -// The link register only exists on ARM platforms. -#if CLS_CPU_ARM || CLS_CPU_ARM64 -uintptr_t FIRCLSThreadContextGetLinkRegister(const FIRCLSThreadContext* registers); -bool FIRCLSThreadContextSetLinkRegister(FIRCLSThreadContext* registers, uintptr_t value); -#endif diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRCLSUtility.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRCLSUtility.h deleted file mode 100644 index 5a50f0fd31..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRCLSUtility.h +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#pragma once - -#include -#include -#include -#include "FIRCLSGlobals.h" - -#define FIRCLSIsValidPointer(x) ((uintptr_t)x >= 4096) -#define FIRCLSInvalidCharNybble (255) - -__BEGIN_DECLS - -void FIRCLSLookupFunctionPointer(void* ptr, void (^block)(const char* name, const char* lib)); - -void FIRCLSHexFromByte(uint8_t c, char output[]); -uint8_t FIRCLSNybbleFromChar(char c); - -bool FIRCLSReadMemory(vm_address_t src, void* dest, size_t len); -bool FIRCLSReadString(vm_address_t src, char** dest, size_t maxlen); - -const char* FIRCLSDupString(const char* string); - -bool FIRCLSUnlinkIfExists(const char* path); - -#if __OBJC__ -void FIRCLSDispatchAfter(float timeInSeconds, dispatch_queue_t queue, dispatch_block_t block); - -NSString* FIRCLSNormalizeUUID(NSString* value); -NSString* FIRCLSGenerateNormalizedUUID(void); - -NSString* FIRCLSNSDataToNSString(NSData* data); - -void FIRCLSAddOperationAfter(float timeInSeconds, NSOperationQueue* queue, void (^block)(void)); -#endif - -#if DEBUG -void FIRCLSPrintAUUID(const uint8_t* value); -#endif - -__END_DECLS diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRCLSUtility.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRCLSUtility.m deleted file mode 100644 index 520640f3ca..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Helpers/FIRCLSUtility.m +++ /dev/null @@ -1,218 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "FIRCLSUtility.h" - -#include - -#include - -#include "FIRCLSFeatures.h" -#include "FIRCLSFile.h" -#include "FIRCLSGlobals.h" - -#import "FIRCLSByteUtility.h" -#import "FIRCLSUUID.h" - -#import - -void FIRCLSLookupFunctionPointer(void* ptr, void (^block)(const char* name, const char* lib)) { - Dl_info info; - - if (dladdr(ptr, &info) == 0) { - block(NULL, NULL); - return; - } - - const char* name = "unknown"; - const char* lib = "unknown"; - - if (info.dli_sname) { - name = info.dli_sname; - } - - if (info.dli_fname) { - lib = info.dli_fname; - } - - block(name, lib); -} - -uint8_t FIRCLSNybbleFromChar(char c) { - if (c >= '0' && c <= '9') { - return c - '0'; - } - - if (c >= 'a' && c <= 'f') { - return c - 'a' + 10; - } - - if (c >= 'A' && c <= 'F') { - return c - 'A' + 10; - } - - return FIRCLSInvalidCharNybble; -} - -bool FIRCLSReadMemory(vm_address_t src, void* dest, size_t len) { - if (!FIRCLSIsValidPointer(src)) { - return false; - } - - vm_size_t readSize = len; - - return vm_read_overwrite(mach_task_self(), src, len, (pointer_t)dest, &readSize) == KERN_SUCCESS; -} - -bool FIRCLSReadString(vm_address_t src, char** dest, size_t maxlen) { - char c; - vm_address_t address; - - if (!dest) { - return false; - } - - // Walk the entire string. Not certain this is perfect... - for (address = src; address < src + maxlen; ++address) { - if (!FIRCLSReadMemory(address, &c, 1)) { - return false; - } - - if (c == 0) { - break; - } - } - - *dest = (char*)src; - - return true; -} - -const char* FIRCLSDupString(const char* string) { -#if CLS_MEMORY_PROTECTION_ENABLED - char* buffer; - size_t length; - - if (!string) { - return NULL; - } - - length = strlen(string); - buffer = FIRCLSAllocatorSafeAllocate(_firclsContext.allocator, length + 1, CLS_READONLY); - - memcpy(buffer, string, length); - - buffer[length] = 0; // null-terminate - - return buffer; -#else - return strdup(string); -#endif -} - -void FIRCLSDispatchAfter(float timeInSeconds, dispatch_queue_t queue, dispatch_block_t block) { - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(timeInSeconds * NSEC_PER_SEC)), queue, - block); -} - -bool FIRCLSUnlinkIfExists(const char* path) { - if (unlink(path) != 0) { - if (errno != ENOENT) { - return false; - } - } - - return true; -} - -/* -NSString* FIRCLSGenerateUUID(void) { - NSString* string; - - CFUUIDRef uuid = CFUUIDCreate(kCFAllocatorDefault); - string = CFBridgingRelease(CFUUIDCreateString(kCFAllocatorDefault, uuid)); - CFRelease(uuid); - - return string; -} -*/ - -NSString* FIRCLSNormalizeUUID(NSString* value) { - return [[value stringByReplacingOccurrencesOfString:@"-" withString:@""] lowercaseString]; -} - -NSString* FIRCLSGenerateNormalizedUUID(void) { - return FIRCLSNormalizeUUID(FIRCLSGenerateUUID()); -} - -NSString* FIRCLSNSDataToNSString(NSData* data) { - NSString* string; - char* buffer; - size_t size; - NSUInteger length; - - // we need 2 hex char for every byte of data, plus one more spot for a - // null terminator - length = [data length]; - size = (length * 2) + 1; - buffer = malloc(sizeof(char) * size); - - if (!buffer) { - FIRCLSErrorLog(@"Unable to malloc in FIRCLSNSDataToNSString"); - return nil; - } - - FIRCLSSafeHexToString([data bytes], length, buffer); - - string = [NSString stringWithUTF8String:buffer]; - - free(buffer); - - return string; -} - -/* -NSString* FIRCLSHashBytes(const void* bytes, size_t length) { - uint8_t digest[CC_SHA1_DIGEST_LENGTH] = {0}; - CC_SHA1(bytes, (CC_LONG)length, digest); - - NSData* result = [NSData dataWithBytes:digest length:CC_SHA1_DIGEST_LENGTH]; - - return FIRCLSNSDataToNSString(result); -} - -NSString* FIRCLSHashNSData(NSData* data) { - return FIRCLSHashBytes([data bytes], [data length]); -} -*/ - -void FIRCLSAddOperationAfter(float timeInSeconds, NSOperationQueue* queue, void (^block)(void)) { - dispatch_queue_t afterQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); - FIRCLSDispatchAfter(timeInSeconds, afterQueue, ^{ - [queue addOperationWithBlock:block]; - }); -} - -#if DEBUG -void FIRCLSPrintAUUID(const uint8_t* value) { - CFUUIDRef uuid = CFUUIDCreateFromUUIDBytes(kCFAllocatorDefault, *(CFUUIDBytes*)value); - - NSString* string = CFBridgingRelease(CFUUIDCreateString(kCFAllocatorDefault, uuid)); - - CFRelease(uuid); - - FIRCLSDebugLog(@"%@", [[string stringByReplacingOccurrencesOfString:@"-" - withString:@""] lowercaseString]); -} -#endif diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/FIRCLSExecutionIdentifierModel.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/FIRCLSExecutionIdentifierModel.h deleted file mode 100644 index 41a489672f..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/FIRCLSExecutionIdentifierModel.h +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - * This class is a model to identify a single execution of the app - */ -@interface FIRCLSExecutionIdentifierModel : NSObject - -/** - * Returns the launch identifier. This is a unique id that will remain constant until this process - * is relaunched. This value is useful for correlating events across kits and/or across reports at - * the process-lifecycle level. - */ -@property(nonatomic, readonly) NSString *executionID; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/FIRCLSExecutionIdentifierModel.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/FIRCLSExecutionIdentifierModel.m deleted file mode 100644 index e312d46f8f..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/FIRCLSExecutionIdentifierModel.m +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSExecutionIdentifierModel.h" - -#import "FIRCLSUUID.h" - -@implementation FIRCLSExecutionIdentifierModel - -- (instancetype)init { - self = [super init]; - if (!self) { - return nil; - } - - _executionID = [[FIRCLSGenerateUUID() stringByReplacingOccurrencesOfString:@"-" - withString:@""] lowercaseString]; - - return self; -} - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/FIRCLSFileManager.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/FIRCLSFileManager.h deleted file mode 100644 index dd988a950b..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/FIRCLSFileManager.h +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import - -@class FIRCLSInternalReport; - -@interface FIRCLSFileManager : NSObject - -- (instancetype)init NS_DESIGNATED_INITIALIZER; - -@property(nonatomic, readonly) NSFileManager *underlyingFileManager; - -/** - * Returns the folder containing the settings file - */ -@property(nonatomic, readonly) NSString *settingsDirectoryPath; - -/** - * Returns the path to the settings file - */ -@property(nonatomic, readonly) NSString *settingsFilePath; - -/** - * Path to the file that holds the ttl and keys that invalidate settings - */ -@property(nonatomic, readonly) NSString *settingsCacheKeyPath; - -@property(nonatomic, readonly) NSString *rootPath; -@property(nonatomic, readonly) NSString *structurePath; -@property(nonatomic, readonly) NSString *activePath; -@property(nonatomic, readonly) NSString *processingPath; -@property(nonatomic, readonly) NSString *pendingPath; -@property(nonatomic, readonly) NSString *preparedPath; -@property(nonatomic, readonly) NSString *legacyPreparedPath; -@property(nonatomic, readonly) NSArray *activePathContents; -@property(nonatomic, readonly) NSArray *legacyPreparedPathContents; -@property(nonatomic, readonly) NSArray *preparedPathContents; -@property(nonatomic, readonly) NSArray *processingPathContents; - -- (BOOL)fileExistsAtPath:(NSString *)path; -- (BOOL)createFileAtPath:(NSString *)path - contents:(NSData *)data - attributes:(NSDictionary *)attr; -- (BOOL)createDirectoryAtPath:(NSString *)path; -- (BOOL)removeItemAtPath:(NSString *)path; -- (BOOL)removeContentsOfDirectoryAtPath:(NSString *)path; -- (BOOL)moveItemAtPath:(NSString *)path toDirectory:(NSString *)destDir; -- (void)enumerateFilesInDirectory:(NSString *)directory - usingBlock:(void (^)(NSString *filePath, NSString *extension))block; -- (NSNumber *)fileSizeAtPath:(NSString *)path; -- (NSArray *)contentsOfDirectory:(NSString *)path; - -// logic of managing files/directories -- (BOOL)createReportDirectories; -- (NSString *)setupNewPathForExecutionIdentifier:(NSString *)identifier; - -- (BOOL)moveItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error; - -- (NSData *)dataWithContentsOfFile:(NSString *)path; - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/FIRCLSFileManager.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/FIRCLSFileManager.m deleted file mode 100644 index 040dcf5b88..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/FIRCLSFileManager.m +++ /dev/null @@ -1,279 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSFileManager.h" - -#import "FIRCLSApplication.h" -#import "FIRCLSInternalReport.h" -#import "FIRCLSLogger.h" - -NSString *const FIRCLSCacheDirectoryName = @"com.crashlytics.data"; -NSString *const FIRCLSCacheVersion = @"v5"; - -@interface FIRCLSFileManager () { - NSString *_rootPath; -} - -@end - -@implementation FIRCLSFileManager - -- (instancetype)init { - self = [super init]; - if (!self) { - return nil; - } - - _underlyingFileManager = [NSFileManager defaultManager]; - - NSString *path = - [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject]; - path = [path stringByAppendingPathComponent:FIRCLSCacheDirectoryName]; - path = [path stringByAppendingPathComponent:[self pathNamespace]]; - _rootPath = [path copy]; - - return self; -} - -#pragma mark - Core API - -- (BOOL)fileExistsAtPath:(NSString *)path { - return [_underlyingFileManager fileExistsAtPath:path]; -} - -- (BOOL)createFileAtPath:(NSString *)path - contents:(nullable NSData *)data - attributes:(nullable NSDictionary *)attr { - return [_underlyingFileManager createFileAtPath:path contents:data attributes:attr]; -} - -- (BOOL)createDirectoryAtPath:(NSString *)path { - NSDictionary *attributes; - NSError *error; - - attributes = @{NSFilePosixPermissions : [NSNumber numberWithShort:0755]}; - error = nil; - - if (![[self underlyingFileManager] createDirectoryAtPath:path - withIntermediateDirectories:YES - attributes:attributes - error:&error]) { - FIRCLSErrorLog(@"Unable to create directory %@", error); - return NO; - } - - return YES; -} - -- (BOOL)removeItemAtPath:(NSString *)path { - NSError *error; - - error = nil; - if (![[self underlyingFileManager] removeItemAtPath:path error:&error] || !path) { - FIRCLSErrorLog(@"Failed to remove file %@: %@", path, error); - - return NO; - } - - return YES; -} - -- (BOOL)removeContentsOfDirectoryAtPath:(NSString *)path { - __block BOOL success = YES; - - // only return true if we were able to remove every item in the directory (or it was empty) - - [self enumerateFilesInDirectory:path - usingBlock:^(NSString *filePath, NSString *extension) { - success = [self removeItemAtPath:filePath] && success; - }]; - - return success; -} - -- (BOOL)moveItemAtPath:(NSString *)path toDirectory:(NSString *)destDir { - NSString *destPath; - NSError *error; - - destPath = [destDir stringByAppendingPathComponent:[path lastPathComponent]]; - error = nil; - - if (!path || !destPath) { - FIRCLSErrorLog(@"Failed to move file, inputs invalid"); - - return NO; - } - - if (![[self underlyingFileManager] moveItemAtPath:path toPath:destPath error:&error]) { - FIRCLSErrorLog(@"Failed to move file: %@", error); - - return NO; - } - - return YES; -} - -- (void)enumerateFilesInDirectory:(NSString *)directory - usingBlock:(void (^)(NSString *filePath, NSString *extension))block { - for (NSString *path in [[self underlyingFileManager] contentsOfDirectoryAtPath:directory - error:nil]) { - NSString *extension; - NSString *fullPath; - - // Skip files that start with a dot. This is important, because if you try to move a .DS_Store - // file, it will fail if the target directory also has a .DS_Store file in it. Plus, its - // wasteful, because we don't care about dot files. - if ([path hasPrefix:@"."]) { - continue; - } - - extension = [path pathExtension]; - fullPath = [directory stringByAppendingPathComponent:path]; - if (block) { - block(fullPath, extension); - } - } -} - -- (NSNumber *)fileSizeAtPath:(NSString *)path { - NSError *error = nil; - NSDictionary *attrs = [[self underlyingFileManager] attributesOfItemAtPath:path error:&error]; - - if (!attrs) { - FIRCLSErrorLog(@"Unable to read file size: %@", error); - return nil; - } - - return [attrs objectForKey:NSFileSize]; -} - -- (NSArray *)contentsOfDirectory:(NSString *)path { - NSMutableArray *array = [NSMutableArray array]; - - [self enumerateFilesInDirectory:path - usingBlock:^(NSString *filePath, NSString *extension) { - [array addObject:filePath]; - }]; - - return [array copy]; -} - -#pragma - Properties -- (NSString *)pathNamespace { - return FIRCLSApplicationGetBundleIdentifier(); -} - -- (NSString *)versionedPath { - return [[self rootPath] stringByAppendingPathComponent:FIRCLSCacheVersion]; -} - -#pragma - Settings Paths - -// This path should be different than the structurePath because the -// settings download operations will delete the settings directory, -// which would delete crash reports if these were the same -- (NSString *)settingsDirectoryPath { - return [[self versionedPath] stringByAppendingPathComponent:@"settings"]; -} - -- (NSString *)settingsFilePath { - return [[self settingsDirectoryPath] stringByAppendingPathComponent:@"settings.json"]; -} - -- (NSString *)settingsCacheKeyPath { - return [[self settingsDirectoryPath] stringByAppendingPathComponent:@"cache-key.json"]; -} - -#pragma - Report Paths -- (NSString *)structurePath { - return [[self versionedPath] stringByAppendingPathComponent:@"reports"]; -} - -- (NSString *)activePath { - return [[self structurePath] stringByAppendingPathComponent:@"active"]; -} - -- (NSString *)pendingPath { - return [[self structurePath] stringByAppendingPathComponent:@"pending"]; -} - -- (NSString *)processingPath { - return [[self structurePath] stringByAppendingPathComponent:@"processing"]; -} - -- (NSString *)legacyPreparedPath { - return [[self structurePath] stringByAppendingPathComponent:@"prepared-legacy"]; -} - -- (NSString *)preparedPath { - return [[self structurePath] stringByAppendingPathComponent:@"prepared"]; -} - -- (NSArray *)activePathContents { - return [self contentsOfDirectory:[self activePath]]; -} - -- (NSArray *)legacyPreparedPathContents { - return [self contentsOfDirectory:[self legacyPreparedPath]]; -} - -- (NSArray *)preparedPathContents { - return [self contentsOfDirectory:[self preparedPath]]; -} - -- (NSArray *)processingPathContents { - return [self contentsOfDirectory:[self processingPath]]; -} - -#pragma mark - Logic -- (BOOL)createReportDirectories { - if (![self createDirectoryAtPath:[self activePath]]) { - return NO; - } - - if (![self createDirectoryAtPath:[self processingPath]]) { - return NO; - } - - if (![self createDirectoryAtPath:[self legacyPreparedPath]]) { - return NO; - } - - if (![self createDirectoryAtPath:[self preparedPath]]) { - return NO; - } - - return YES; -} - -- (NSString *)setupNewPathForExecutionIdentifier:(NSString *)identifier { - NSString *path = [[self activePath] stringByAppendingPathComponent:identifier]; - - if (![self createDirectoryAtPath:path]) { - return nil; - } - - return path; -} - -- (BOOL)moveItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error { - return [self.underlyingFileManager moveItemAtPath:srcPath toPath:dstPath error:error]; -} - -// Wrapper over NSData so the method can be mocked for unit tests -- (NSData *)dataWithContentsOfFile:(NSString *)path { - return [NSData dataWithContentsOfFile:path]; -} - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/FIRCLSInstallIdentifierModel.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/FIRCLSInstallIdentifierModel.h deleted file mode 100644 index 6100c8a973..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/FIRCLSInstallIdentifierModel.h +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import - -@class FIRInstallations; - -NS_ASSUME_NONNULL_BEGIN - -/** - * This class is a model for identifying an installation of an app - */ -@interface FIRCLSInstallIdentifierModel : NSObject - -- (instancetype)init NS_UNAVAILABLE; - -- (instancetype)initWithInstallations:(FIRInstallations *)instanceID NS_DESIGNATED_INITIALIZER; - -/** - * Returns the backwards compatible Crashlytics Installation UUID - */ -@property(nonatomic, readonly) NSString *installID; - -/** - * To support end-users rotating Install IDs, this will check and rotate the Install ID, - * which is a costly operation performance-wise. To keep the startup time impact down, call this in - * a background thread. - * - * The block will be called on a background thread. - */ -- (void)regenerateInstallIDIfNeededWithBlock:(void (^)(BOOL didRotate))callback; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/FIRCLSInstallIdentifierModel.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/FIRCLSInstallIdentifierModel.m deleted file mode 100644 index 2af2d7dbc9..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/FIRCLSInstallIdentifierModel.m +++ /dev/null @@ -1,161 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSInstallIdentifierModel.h" - -#import - -#import "FIRCLSByteUtility.h" -#import "FIRCLSLogger.h" -#import "FIRCLSUUID.h" -#import "FIRCLSUserDefaults.h" - -static NSString *const FIRCLSInstallationUUIDKey = @"com.crashlytics.iuuid"; -static NSString *const FIRCLSInstallationIIDHashKey = @"com.crashlytics.install.iid"; - -// Legacy key that is automatically removed -static NSString *const FIRCLSInstallationADIDKey = @"com.crashlytics.install.adid"; - -@interface FIRCLSInstallIdentifierModel () - -@property(nonatomic, copy) NSString *installID; - -@property(nonatomic, readonly) FIRInstallations *installations; - -@end - -@implementation FIRCLSInstallIdentifierModel - -// This needs to be synthesized so we can set without using the setter in the constructor and -// overridden setters and getters -@synthesize installID = _installID; - -- (instancetype)initWithInstallations:(FIRInstallations *)installations { - self = [super init]; - if (!self) { - return nil; - } - - // capture the install ID information - _installID = [self readInstallationUUID].copy; - _installations = installations; - - if (!_installID) { - FIRCLSDebugLog(@"Generating Install ID"); - _installID = [self generateInstallationUUID].copy; - - FIRCLSUserDefaults *defaults = [FIRCLSUserDefaults standardUserDefaults]; - [defaults synchronize]; - } - - return self; -} - -- (NSString *)installID { - @synchronized(self) { - return _installID; - } -} - -- (void)setInstallID:(NSString *)installID { - @synchronized(self) { - _installID = installID; - } -} - -/** - * Reads installation UUID stored in persistent storage. - * If the installation UUID is stored in legacy key, migrates it over to the new key. - */ -- (NSString *)readInstallationUUID { - return [[FIRCLSUserDefaults standardUserDefaults] objectForKey:FIRCLSInstallationUUIDKey]; -} - -/** - * Generates a new UUID and saves it in persistent storage. - * Does not sychronize the user defaults (to allow optimized - * batching of user default synchronizing) - */ -- (NSString *)generateInstallationUUID { - NSString *UUID = FIRCLSGenerateUUID(); - FIRCLSUserDefaults *userDefaults = [FIRCLSUserDefaults standardUserDefaults]; - [userDefaults setObject:UUID forKey:FIRCLSInstallationUUIDKey]; - return UUID; -} - -#pragma mark Privacy Shield - -/** - * To support privacy shield we need to regenerate the install id when the IID changes. - * - * This is a blocking, slow call that must be called on a background thread. - */ -- (void)regenerateInstallIDIfNeededWithBlock:(void (^)(BOOL didRotate))callback { - // This callback is on the main thread - [self.installations - installationIDWithCompletion:^(NSString *_Nullable currentIID, NSError *_Nullable error) { - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ - BOOL didRotate = [self rotateCrashlyticsInstallUUIDWithIID:currentIID error:error]; - callback(didRotate); - }); - }]; -} - -- (BOOL)rotateCrashlyticsInstallUUIDWithIID:(NSString *_Nullable)currentIID - error:(NSError *_Nullable)error { - BOOL didRotate = NO; - - FIRCLSUserDefaults *defaults = [FIRCLSUserDefaults standardUserDefaults]; - - // Remove the legacy ID - NSString *adID = [defaults objectForKey:FIRCLSInstallationADIDKey]; - if (adID.length != 0) { - [defaults removeObjectForKey:FIRCLSInstallationADIDKey]; - [defaults synchronize]; - } - - if (error != nil) { - FIRCLSErrorLog(@"Failed to get Firebase Instance ID: %@", error); - return didRotate; - } - - if (currentIID.length == 0) { - FIRCLSErrorLog(@"Firebase Instance ID was empty when checked for changes"); - return didRotate; - } - - NSString *currentIIDHash = - FIRCLS256HashNSData([currentIID dataUsingEncoding:NSUTF8StringEncoding]); - NSString *lastIIDHash = [defaults objectForKey:FIRCLSInstallationIIDHashKey]; - - // If the IDs are the same, we never regenerate - if ([lastIIDHash isEqualToString:currentIIDHash]) { - return didRotate; - } - - // If we had an FIID saved, we know it's not an upgrade scenario, so we can regenerate - if (lastIIDHash.length != 0) { - FIRCLSDebugLog(@"Regenerating Install ID"); - self.installID = [self generateInstallationUUID].copy; - didRotate = YES; - } - - // Write the new FIID to UserDefaults - [defaults setObject:currentIIDHash forKey:FIRCLSInstallationIIDHashKey]; - [defaults synchronize]; - - return didRotate; -} - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/FIRCLSInternalReport.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/FIRCLSInternalReport.h deleted file mode 100644 index a02123ffdd..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/FIRCLSInternalReport.h +++ /dev/null @@ -1,117 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import - -#include "FIRCLSFeatures.h" - -extern NSString *const FIRCLSReportBinaryImageFile; -extern NSString *const FIRCLSReportExceptionFile; -extern NSString *const FIRCLSReportCustomExceptionAFile; -extern NSString *const FIRCLSReportCustomExceptionBFile; -extern NSString *const FIRCLSReportSignalFile; -#if CLS_MACH_EXCEPTION_SUPPORTED -extern NSString *const FIRCLSReportMachExceptionFile; -#endif -extern NSString *const FIRCLSReportErrorAFile; -extern NSString *const FIRCLSReportErrorBFile; -extern NSString *const FIRCLSReportLogAFile; -extern NSString *const FIRCLSReportLogBFile; -extern NSString *const FIRCLSReportMetadataFile; -extern NSString *const FIRCLSReportInternalIncrementalKVFile; -extern NSString *const FIRCLSReportInternalCompactedKVFile; -extern NSString *const FIRCLSReportUserIncrementalKVFile; -extern NSString *const FIRCLSReportUserCompactedKVFile; - -@class FIRCLSFileManager; - -@interface FIRCLSInternalReport : NSObject - -+ (instancetype)reportWithPath:(NSString *)path; -- (instancetype)initWithPath:(NSString *)path - executionIdentifier:(NSString *)identifier NS_DESIGNATED_INITIALIZER; -- (instancetype)initWithPath:(NSString *)path; -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; - -+ (NSArray *)crashFileNames; - -@property(nonatomic, copy, readonly) NSString *directoryName; -@property(nonatomic, copy) NSString *path; -@property(nonatomic, assign, readonly) BOOL needsToBeSubmitted; - -// content paths -@property(nonatomic, copy, readonly) NSString *binaryImagePath; -@property(nonatomic, copy, readonly) NSString *metadataPath; - -- (void)enumerateSymbolicatableFilesInContent:(void (^)(NSString *path))block; - -- (NSString *)pathForContentFile:(NSString *)name; - -// Metadata Helpers - -/** - * Returns the org id for the report. - **/ -@property(nonatomic, copy, readonly) NSString *orgID; - -/** - * Returns the Install UUID for the report. - **/ -@property(nonatomic, copy, readonly) NSString *installID; - -/** - * Returns YES if report contains a signal, mach exception or unhandled exception record, NO - * otherwise. - **/ -@property(nonatomic, assign, readonly) BOOL isCrash; - -/** - * Returns the session identifier for the report. - **/ -@property(nonatomic, copy, readonly) NSString *identifier; - -/** - * Returns the custom key value data for the report. - **/ -@property(nonatomic, copy, readonly) NSDictionary *customKeys; - -/** - * Returns the CFBundleVersion of the application that generated the report. - **/ -@property(nonatomic, copy, readonly) NSString *bundleVersion; - -/** - * Returns the CFBundleShortVersionString of the application that generated the report. - **/ -@property(nonatomic, copy, readonly) NSString *bundleShortVersionString; - -/** - * Returns the date that the report was created. - **/ -@property(nonatomic, copy, readonly) NSDate *dateCreated; - -@property(nonatomic, copy, readonly) NSDate *crashedOnDate; - -/** - * Returns the os version that the application crashed on. - **/ -@property(nonatomic, copy, readonly) NSString *OSVersion; - -/** - * Returns the os build version that the application crashed on. - **/ -@property(nonatomic, copy, readonly) NSString *OSBuildVersion; - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/FIRCLSInternalReport.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/FIRCLSInternalReport.m deleted file mode 100644 index 74ac9975b2..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/FIRCLSInternalReport.m +++ /dev/null @@ -1,253 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// TODO: Remove this class after the uploading of reports via GoogleDataTransport is no longer an -// experiment - -#import "FIRCLSInternalReport.h" - -#import "FIRCLSFile.h" -#import "FIRCLSFileManager.h" -#import "FIRCLSLogger.h" - -NSString *const FIRCLSReportBinaryImageFile = @"binary_images.clsrecord"; -NSString *const FIRCLSReportExceptionFile = @"exception.clsrecord"; -NSString *const FIRCLSReportCustomExceptionAFile = @"custom_exception_a.clsrecord"; -NSString *const FIRCLSReportCustomExceptionBFile = @"custom_exception_b.clsrecord"; -NSString *const FIRCLSReportSignalFile = @"signal.clsrecord"; -#if CLS_MACH_EXCEPTION_SUPPORTED -NSString *const FIRCLSReportMachExceptionFile = @"mach_exception.clsrecord"; -#endif -NSString *const FIRCLSReportMetadataFile = @"metadata.clsrecord"; -NSString *const FIRCLSReportErrorAFile = @"errors_a.clsrecord"; -NSString *const FIRCLSReportErrorBFile = @"errors_b.clsrecord"; -NSString *const FIRCLSReportLogAFile = @"log_a.clsrecord"; -NSString *const FIRCLSReportLogBFile = @"log_b.clsrecord"; -NSString *const FIRCLSReportInternalIncrementalKVFile = @"internal_incremental_kv.clsrecord"; -NSString *const FIRCLSReportInternalCompactedKVFile = @"internal_compacted_kv.clsrecord"; -NSString *const FIRCLSReportUserIncrementalKVFile = @"user_incremental_kv.clsrecord"; -NSString *const FIRCLSReportUserCompactedKVFile = @"user_compacted_kv.clsrecord"; - -@interface FIRCLSInternalReport () { - NSString *_identifier; - NSString *_path; - NSArray *_metadataSections; -} - -@end - -@implementation FIRCLSInternalReport - -+ (instancetype)reportWithPath:(NSString *)path { - return [[self alloc] initWithPath:path]; -} - -#pragma mark - Initialization -/** - * Initializes a new report, i.e. one without metadata on the file system yet. - */ -- (instancetype)initWithPath:(NSString *)path executionIdentifier:(NSString *)identifier { - self = [super init]; - if (!self) { - return self; - } - - if (!path || !identifier) { - return nil; - } - - [self setPath:path]; - - _identifier = [identifier copy]; - - return self; -} - -/** - * Initializes a pre-existing report, i.e. one with metadata on the file system. - */ -- (instancetype)initWithPath:(NSString *)path { - NSString *metadataPath = [path stringByAppendingPathComponent:FIRCLSReportMetadataFile]; - NSString *identifier = [[[[self.class readFIRCLSFileAtPath:metadataPath] objectAtIndex:0] - objectForKey:@"identity"] objectForKey:@"session_id"]; - if (!identifier) { - FIRCLSErrorLog(@"Unable to read identifier at path %@", path); - } - return [self initWithPath:path executionIdentifier:identifier]; -} - -#pragma mark - Path Helpers -- (NSString *)directoryName { - return self.path.lastPathComponent; -} - -- (NSString *)pathForContentFile:(NSString *)name { - return [[self path] stringByAppendingPathComponent:name]; -} - -- (NSString *)metadataPath { - return [[self path] stringByAppendingPathComponent:FIRCLSReportMetadataFile]; -} - -- (NSString *)binaryImagePath { - return [self pathForContentFile:FIRCLSReportBinaryImageFile]; -} - -#pragma mark - Processing Methods -- (BOOL)needsToBeSubmitted { - NSArray *reportFiles = @[ - FIRCLSReportExceptionFile, FIRCLSReportSignalFile, FIRCLSReportCustomExceptionAFile, - FIRCLSReportCustomExceptionBFile, -#if CLS_MACH_EXCEPTION_SUPPORTED - FIRCLSReportMachExceptionFile, -#endif - FIRCLSReportErrorAFile, FIRCLSReportErrorBFile - ]; - return [self checkExistenceOfAtLeastOnceFileInArray:reportFiles]; -} - -// These are purposefully in order of precedence. If duplicate data exists -// in any crash file, the exception file's contents take precedence over the -// rest, for example -// -// Do not change the order of this. -// -+ (NSArray *)crashFileNames { - static NSArray *files; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - files = @[ - FIRCLSReportExceptionFile, -#if CLS_MACH_EXCEPTION_SUPPORTED - FIRCLSReportMachExceptionFile, -#endif - FIRCLSReportSignalFile - ]; - }); - return files; -} - -- (BOOL)isCrash { - NSArray *crashFiles = [FIRCLSInternalReport crashFileNames]; - return [self checkExistenceOfAtLeastOnceFileInArray:crashFiles]; -} - -- (BOOL)checkExistenceOfAtLeastOnceFileInArray:(NSArray *)files { - NSFileManager *manager = [NSFileManager defaultManager]; - - for (NSString *fileName in files) { - NSString *path = [self pathForContentFile:fileName]; - - if ([manager fileExistsAtPath:path]) { - return YES; - } - } - - return NO; -} - -- (void)enumerateSymbolicatableFilesInContent:(void (^)(NSString *path))block { - for (NSString *fileName in [FIRCLSInternalReport crashFileNames]) { - NSString *path = [self pathForContentFile:fileName]; - - block(path); - } -} - -#pragma mark - Metadata helpers -+ (NSArray *)readFIRCLSFileAtPath:(NSString *)path { - NSArray *sections = FIRCLSFileReadSections([path fileSystemRepresentation], false, nil); - - if ([sections count] == 0) { - return nil; - } - - return sections; -} - -- (NSArray *)metadataSections { - if (!_metadataSections) { - _metadataSections = [self.class readFIRCLSFileAtPath:self.metadataPath]; - } - return _metadataSections; -} - -- (NSString *)orgID { - return - [[[self.metadataSections objectAtIndex:0] objectForKey:@"identity"] objectForKey:@"org_id"]; -} - -- (NSDictionary *)customKeys { - return nil; -} - -- (NSString *)bundleVersion { - return [[[self.metadataSections objectAtIndex:2] objectForKey:@"application"] - objectForKey:@"build_version"]; -} - -- (NSString *)bundleShortVersionString { - return [[[self.metadataSections objectAtIndex:2] objectForKey:@"application"] - objectForKey:@"display_version"]; -} - -- (NSDate *)dateCreated { - NSUInteger unixtime = [[[[self.metadataSections objectAtIndex:0] objectForKey:@"identity"] - objectForKey:@"started_at"] unsignedIntegerValue]; - - return [NSDate dateWithTimeIntervalSince1970:unixtime]; -} - -- (NSDate *)crashedOnDate { - if (!self.isCrash) { - return nil; - } - -#if CLS_MACH_EXCEPTION_SUPPORTED - // try the mach exception first, because it is more common - NSDate *date = [self timeFromCrashContentFile:FIRCLSReportMachExceptionFile - sectionName:@"mach_exception"]; - if (date) { - return date; - } -#endif - - return [self timeFromCrashContentFile:FIRCLSReportSignalFile sectionName:@"signal"]; -} - -- (NSDate *)timeFromCrashContentFile:(NSString *)fileName sectionName:(NSString *)sectionName { - // This works because both signal and mach exception files have the same structure to extract - // the "time" component - NSString *path = [self pathForContentFile:fileName]; - - NSNumber *timeValue = [[[[self.class readFIRCLSFileAtPath:path] objectAtIndex:0] - objectForKey:sectionName] objectForKey:@"time"]; - if (timeValue == nil) { - return nil; - } - - return [NSDate dateWithTimeIntervalSince1970:[timeValue unsignedIntegerValue]]; -} - -- (NSString *)OSVersion { - return [[[self.metadataSections objectAtIndex:1] objectForKey:@"host"] - objectForKey:@"os_display_version"]; -} - -- (NSString *)OSBuildVersion { - return [[[self.metadataSections objectAtIndex:1] objectForKey:@"host"] - objectForKey:@"os_build_version"]; -} - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/FIRCLSReport.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/FIRCLSReport.h deleted file mode 100644 index 464dff7366..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/FIRCLSReport.h +++ /dev/null @@ -1,110 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - * The CLSCrashReport protocol is deprecated. See the CLSReport class and the CrashyticsDelegate - * changes for details. - **/ -@protocol FIRCLSCrashReport - -@property(nonatomic, copy, readonly) NSString *identifier; -@property(nonatomic, copy, readonly) NSDictionary *customKeys; -@property(nonatomic, copy, readonly) NSString *bundleVersion; -@property(nonatomic, copy, readonly) NSString *bundleShortVersionString; -@property(nonatomic, readonly, nullable) NSDate *crashedOnDate; -@property(nonatomic, copy, readonly) NSString *OSVersion; -@property(nonatomic, copy, readonly) NSString *OSBuildVersion; - -@end - -/** - * The CLSReport exposes an interface to the phsyical report that Crashlytics has created. You can - * use this class to get information about the event, and can also set some values after the - * event has occurred. - **/ -@interface FIRCLSReport : NSObject - -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; - -/** - * Returns the session identifier for the report. - **/ -@property(nonatomic, copy, readonly) NSString *identifier; - -/** - * Returns the custom key value data for the report. - **/ -@property(nonatomic, copy, readonly) NSDictionary *customKeys; - -/** - * Returns the CFBundleVersion of the application that generated the report. - **/ -@property(nonatomic, copy, readonly) NSString *bundleVersion; - -/** - * Returns the CFBundleShortVersionString of the application that generated the report. - **/ -@property(nonatomic, copy, readonly) NSString *bundleShortVersionString; - -/** - * Returns the date that the report was created. - **/ -@property(nonatomic, copy, readonly) NSDate *dateCreated; - -/** - * Returns the os version that the application crashed on. - **/ -@property(nonatomic, copy, readonly) NSString *OSVersion; - -/** - * Returns the os build version that the application crashed on. - **/ -@property(nonatomic, copy, readonly) NSString *OSBuildVersion; - -/** - * Returns YES if the report contains any crash information, otherwise returns NO. - **/ -@property(nonatomic, assign, readonly) BOOL isCrash; - -/** - * You can use this method to set, after the event, additional custom keys. The rules - * and semantics for this method are the same as those documented in FIRCrashlytics.h. Be aware - * that the maximum size and count of custom keys is still enforced, and you can overwrite keys - * and/or cause excess keys to be deleted by using this method. - **/ -- (void)setObjectValue:(nullable id)value forKey:(NSString *)key; - -/** - * Record an application-specific user identifier. See FIRCrashlytics.h for details. - **/ -@property(nonatomic, copy, nullable) NSString *userIdentifier; - -/** - * Record a user name. See FIRCrashlytics.h for details. - **/ -@property(nonatomic, copy, nullable) NSString *userName; - -/** - * Record a user email. See FIRCrashlytics.h for details. - **/ -@property(nonatomic, copy, nullable) NSString *userEmail; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/FIRCLSReport.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/FIRCLSReport.m deleted file mode 100644 index 1b4bade649..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/FIRCLSReport.m +++ /dev/null @@ -1,241 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSContext.h" -#import "FIRCLSFile.h" -#import "FIRCLSGlobals.h" -#import "FIRCLSInternalReport.h" -#import "FIRCLSReport_Private.h" -#import "FIRCLSUserLogging.h" - -@interface FIRCLSReport () { - FIRCLSInternalReport *_internalReport; - uint32_t _internalKVCounter; - uint32_t _userKVCounter; - - NSString *_internalCompactedKVFile; - NSString *_internalIncrementalKVFile; - NSString *_userCompactedKVFile; - NSString *_userIncrementalKVFile; - - BOOL _readOnly; - - // cached values, to ensure that their contents remain valid - // even if the report is deleted - NSString *_identifer; - NSString *_bundleVersion; - NSString *_bundleShortVersionString; - NSDate *_dateCreated; - NSDate *_crashedOnDate; - NSString *_OSVersion; - NSString *_OSBuildVersion; - NSNumber *_isCrash; - NSDictionary *_customKeys; -} - -@end - -@implementation FIRCLSReport - -- (instancetype)initWithInternalReport:(FIRCLSInternalReport *)report - prefetchData:(BOOL)shouldPrefetch { - self = [super init]; - if (!self) { - return nil; - } - - _internalReport = report; - - // TODO: correct kv accounting - // The internal report will have non-zero compacted and incremental keys. The right thing to do - // is count them, so we can kick off compactions/pruning at the right times. By - // setting this value to zero, we're allowing more entries to be made than there really - // should be. Not the end of the world, but we should do better eventually. - _internalKVCounter = 0; - _userKVCounter = 0; - - _internalCompactedKVFile = - [self.internalReport pathForContentFile:FIRCLSReportInternalCompactedKVFile]; - _internalIncrementalKVFile = - [self.internalReport pathForContentFile:FIRCLSReportInternalIncrementalKVFile]; - _userCompactedKVFile = [self.internalReport pathForContentFile:FIRCLSReportUserCompactedKVFile]; - _userIncrementalKVFile = - [self.internalReport pathForContentFile:FIRCLSReportUserIncrementalKVFile]; - - _readOnly = shouldPrefetch; - - if (shouldPrefetch) { - _identifer = report.identifier; - _bundleVersion = report.bundleVersion; - _bundleShortVersionString = report.bundleShortVersionString; - _dateCreated = report.dateCreated; - _crashedOnDate = report.crashedOnDate; - _OSVersion = report.OSVersion; - _OSBuildVersion = report.OSBuildVersion; - _isCrash = [NSNumber numberWithBool:report.isCrash]; - - _customKeys = [self readCustomKeys]; - } - - return self; -} - -- (instancetype)initWithInternalReport:(FIRCLSInternalReport *)report { - return [self initWithInternalReport:report prefetchData:NO]; -} - -#pragma mark - Helpers -- (FIRCLSUserLoggingKVStorage)internalKVStorage { - FIRCLSUserLoggingKVStorage storage; - - storage.maxCount = _firclsContext.readonly->logging.internalKVStorage.maxCount; - storage.maxIncrementalCount = - _firclsContext.readonly->logging.internalKVStorage.maxIncrementalCount; - storage.compactedPath = [_internalCompactedKVFile fileSystemRepresentation]; - storage.incrementalPath = [_internalIncrementalKVFile fileSystemRepresentation]; - - return storage; -} - -- (FIRCLSUserLoggingKVStorage)userKVStorage { - FIRCLSUserLoggingKVStorage storage; - - storage.maxCount = _firclsContext.readonly->logging.userKVStorage.maxCount; - storage.maxIncrementalCount = _firclsContext.readonly->logging.userKVStorage.maxIncrementalCount; - storage.compactedPath = [_userCompactedKVFile fileSystemRepresentation]; - storage.incrementalPath = [_userIncrementalKVFile fileSystemRepresentation]; - - return storage; -} - -- (BOOL)canRecordNewValues { - return !_readOnly && FIRCLSContextIsInitialized(); -} - -- (void)recordValue:(id)value forInternalKey:(NSString *)key { - if (!self.canRecordNewValues) { - return; - } - - FIRCLSUserLoggingKVStorage storage = [self internalKVStorage]; - - FIRCLSUserLoggingRecordKeyValue(key, value, &storage, &_internalKVCounter); -} - -- (void)recordValue:(id)value forUserKey:(NSString *)key { - if (!self.canRecordNewValues) { - return; - } - - FIRCLSUserLoggingKVStorage storage = [self userKVStorage]; - - FIRCLSUserLoggingRecordKeyValue(key, value, &storage, &_userKVCounter); -} - -- (NSDictionary *)readCustomKeys { - FIRCLSUserLoggingKVStorage storage = [self userKVStorage]; - - // return decoded entries - return FIRCLSUserLoggingGetCompactedKVEntries(&storage, true); -} - -#pragma mark - Metadata helpers - -- (NSString *)identifier { - if (!_identifer) { - _identifer = self.internalReport.identifier; - } - - return _identifer; -} - -- (NSDictionary *)customKeys { - if (!_customKeys) { - _customKeys = [self readCustomKeys]; - } - - return _customKeys; -} - -- (NSString *)bundleVersion { - if (!_bundleVersion) { - _bundleVersion = self.internalReport.bundleVersion; - } - - return _bundleVersion; -} - -- (NSString *)bundleShortVersionString { - if (!_bundleShortVersionString) { - _bundleShortVersionString = self.internalReport.bundleShortVersionString; - } - - return _bundleShortVersionString; -} - -- (NSDate *)dateCreated { - if (!_dateCreated) { - _dateCreated = self.internalReport.dateCreated; - } - - return _dateCreated; -} - -// for compatibility with the CLSCrashReport Protocol -- (NSDate *)crashedOnDate { - if (!_crashedOnDate) { - _crashedOnDate = self.internalReport.crashedOnDate; - } - - return _crashedOnDate; -} - -- (NSString *)OSVersion { - if (!_OSVersion) { - _OSVersion = self.internalReport.OSVersion; - } - - return _OSVersion; -} - -- (NSString *)OSBuildVersion { - if (!_OSBuildVersion) { - _OSBuildVersion = self.internalReport.OSBuildVersion; - } - - return _OSBuildVersion; -} - -- (BOOL)isCrash { - if (_isCrash == nil) { - _isCrash = [NSNumber numberWithBool:self.internalReport.isCrash]; - } - - return [_isCrash boolValue]; -} - -#pragma mark - Public Read/Write Methods -- (void)setObjectValue:(id)value forKey:(NSString *)key { - [self recordValue:value forUserKey:key]; -} - -- (NSString *)userIdentifier { - return nil; -} - -- (void)setUserIdentifier:(NSString *)userIdentifier { - [self recordValue:userIdentifier forInternalKey:FIRCLSUserIdentifierKey]; -} - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/FIRCLSReport_Private.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/FIRCLSReport_Private.h deleted file mode 100644 index 0d8b67c6b7..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/FIRCLSReport_Private.h +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSReport.h" - -@class FIRCLSInternalReport; - -@interface FIRCLSReport () - -- (instancetype)initWithInternalReport:(FIRCLSInternalReport *)report - prefetchData:(BOOL)shouldPrefetch NS_DESIGNATED_INITIALIZER; -- (instancetype)initWithInternalReport:(FIRCLSInternalReport *)report; - -@property(nonatomic, strong, readonly) FIRCLSInternalReport *internalReport; - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/FIRCLSSettings.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/FIRCLSSettings.h deleted file mode 100644 index f45b45fd05..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/FIRCLSSettings.h +++ /dev/null @@ -1,134 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import - -#if __has_include() -#import -#else -#import "FBLPromises.h" -#endif - -@class FIRCLSApplicationIdentifierModel; -@class FIRCLSFileManager; - -NS_ASSUME_NONNULL_BEGIN - -@interface FIRCLSSettings : NSObject - -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; -- (instancetype)initWithFileManager:(FIRCLSFileManager *)fileManager - appIDModel:(FIRCLSApplicationIdentifierModel *)appIDModel - NS_DESIGNATED_INITIALIZER; - -/** - * Recreates the settings dictionary by re-reading the settings file from persistent storage. This - * should be called before any settings values are read, as it will populate the underlying - * settingsDictionary. If the Google App ID has changed or there is an error, delete the cache file - * and settingsDictionary. If the cache has expired, set `isCacheExpired` to true so that settings - * are re-fetched, but do not delete any values. - */ -- (void)reloadFromCacheWithGoogleAppID:(NSString *)googleAppID - currentTimestamp:(NSTimeInterval)currentTimestamp; - -/** - * Stores a separate file with the settings expiration and Google App ID it was saved with - * so that we can later determine that the settings have expired. - * - * This should be called in a background thread right after the settings.json file has been - * downloaded. - */ -- (void)cacheSettingsWithGoogleAppID:(NSString *)googleAppID - currentTimestamp:(NSTimeInterval)currentTimestamp; - -/** - * Returns true when Settings should be fetched from the server again - */ -@property(nonatomic, readonly) BOOL isCacheExpired; - -/** - * Determines how long these Settings should be respected until the SDK should fetch again - */ -@property(nonatomic, readonly) uint32_t cacheDurationSeconds; - -/** - * The Crashlytics Organization identifier of the app. Allows data continuity between - * old and new Crashlytics SDKs. - */ -@property(nonatomic, nullable, readonly) NSString *orgID; - -/** - * The backend bundle identifier of the app. Crashlytics can in some cases have - * a different bundle identifier than the app itself (eg. Crashlytics will always downcase - * the bundle ID). - */ -@property(nonatomic, nullable, readonly) NSString *fetchedBundleID; - -/** - * Indicates whether the app needs onboarding - */ -@property(nonatomic, readonly) BOOL appNeedsOnboarding; - -/** - * Indicates whether the app needs an update - */ -@property(nonatomic, readonly) BOOL appUpdateRequired; - -/** - * When this is false, Crashlytics will not start up - */ -@property(nonatomic, readonly) BOOL collectReportsEnabled; - -/** - * When this is false, Crashlytics will not collect non-fatal errors and errors - * from the custom exception / record error APIs - */ -@property(nonatomic, readonly) BOOL errorReportingEnabled; - -/** - * When this is false, Crashlytics will not collect custom exceptions from the API - */ -@property(nonatomic, readonly) BOOL customExceptionsEnabled; - -/** - * Determine if the SDK should use the new endpoint for uploading reports - */ -@property(nonatomic, readonly) BOOL shouldUseNewReportEndpoint; - -/** - * Returns the maximum number of custom exception events that will be - * recorded in a session. - */ -@property(nonatomic, readonly) uint32_t errorLogBufferSize; - -/** - * Returns the maximum size of the log buffer in bytes - */ -@property(nonatomic, readonly) uint32_t logBufferSize; - -/** - * Returns the maximum number of custom exceptions that will be collected - * in a session. - */ -@property(nonatomic, readonly) uint32_t maxCustomExceptions; - -/** - * Returns the maximum number of custom key-value pair keys (not bytes). - */ -@property(nonatomic, readonly) uint32_t maxCustomKeys; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/FIRCLSSettings.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/FIRCLSSettings.m deleted file mode 100644 index 7d1347f4e6..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/FIRCLSSettings.m +++ /dev/null @@ -1,357 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSSettings.h" - -#if __has_include() -#import -#else -#import "FBLPromises.h" -#endif - -#import "FIRCLSApplicationIdentifierModel.h" -#import "FIRCLSConstants.h" -#import "FIRCLSFileManager.h" -#import "FIRCLSLogger.h" -#import "FIRCLSURLBuilder.h" - -NSString *const CreatedAtKey = @"created_at"; -NSString *const GoogleAppIDKey = @"google_app_id"; -NSString *const BuildInstanceID = @"build_instance_id"; -NSString *const AppVersion = @"app_version"; - -@interface FIRCLSSettings () - -@property(nonatomic, strong) FIRCLSFileManager *fileManager; -@property(nonatomic, strong) FIRCLSApplicationIdentifierModel *appIDModel; - -@property(nonatomic, strong) NSDictionary *settingsDictionary; - -@property(nonatomic) BOOL isCacheKeyExpired; - -@end - -@implementation FIRCLSSettings - -- (instancetype)initWithFileManager:(FIRCLSFileManager *)fileManager - appIDModel:(FIRCLSApplicationIdentifierModel *)appIDModel { - self = [super init]; - if (!self) { - return nil; - } - - _fileManager = fileManager; - _appIDModel = appIDModel; - - _settingsDictionary = nil; - _isCacheKeyExpired = NO; - - return self; -} - -#pragma mark - Public Methods - -- (void)reloadFromCacheWithGoogleAppID:(NSString *)googleAppID - currentTimestamp:(NSTimeInterval)currentTimestamp { - NSString *settingsFilePath = self.fileManager.settingsFilePath; - - NSData *data = [self.fileManager dataWithContentsOfFile:settingsFilePath]; - - if (!data) { - FIRCLSDebugLog(@"[Crashlytics:Settings] No settings were cached"); - - return; - } - - NSError *error = nil; - @synchronized(self) { - _settingsDictionary = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error]; - } - - if (!_settingsDictionary) { - FIRCLSErrorLog(@"Could not load settings file data with error: %@", error.localizedDescription); - - // Attempt to remove it, in case it's messed up - [self deleteCachedSettings]; - return; - } - - NSDictionary *cacheKey = [self loadCacheKey]; - if (!cacheKey) { - FIRCLSErrorLog(@"Could not load settings cache key"); - - [self deleteCachedSettings]; - return; - } - - NSString *cachedGoogleAppID = cacheKey[GoogleAppIDKey]; - if (![cachedGoogleAppID isEqualToString:googleAppID]) { - FIRCLSDebugLog( - @"[Crashlytics:Settings] Invalidating settings cache because Google App ID changed"); - - [self deleteCachedSettings]; - return; - } - - NSTimeInterval cacheCreatedAt = [cacheKey[CreatedAtKey] unsignedIntValue]; - NSTimeInterval cacheDurationSeconds = self.cacheDurationSeconds; - if (currentTimestamp > (cacheCreatedAt + cacheDurationSeconds)) { - FIRCLSDebugLog(@"[Crashlytics:Settings] Settings TTL expired"); - - @synchronized(self) { - self.isCacheKeyExpired = YES; - } - } - - NSString *cacheBuildInstanceID = cacheKey[BuildInstanceID]; - if (![cacheBuildInstanceID isEqualToString:self.appIDModel.buildInstanceID]) { - FIRCLSDebugLog(@"[Crashlytics:Settings] Settings expired because build instance changed"); - - @synchronized(self) { - self.isCacheKeyExpired = YES; - } - } - - NSString *cacheAppVersion = cacheKey[AppVersion]; - if (![cacheAppVersion isEqualToString:self.appIDModel.synthesizedVersion]) { - FIRCLSDebugLog(@"[Crashlytics:Settings] Settings expired because app version changed"); - - @synchronized(self) { - self.isCacheKeyExpired = YES; - } - } -} - -- (void)cacheSettingsWithGoogleAppID:(NSString *)googleAppID - currentTimestamp:(NSTimeInterval)currentTimestamp { - NSNumber *createdAtTimestamp = [NSNumber numberWithDouble:currentTimestamp]; - NSDictionary *cacheKey = @{ - CreatedAtKey : createdAtTimestamp, - GoogleAppIDKey : googleAppID, - BuildInstanceID : self.appIDModel.buildInstanceID, - AppVersion : self.appIDModel.synthesizedVersion, - }; - - NSError *error = nil; - NSData *jsonData = [NSJSONSerialization dataWithJSONObject:cacheKey - options:kNilOptions - error:&error]; - - if (!jsonData) { - FIRCLSErrorLog(@"Could not create settings cache key with error: %@", - error.localizedDescription); - - return; - } - - if ([self.fileManager fileExistsAtPath:self.fileManager.settingsCacheKeyPath]) { - [self.fileManager removeItemAtPath:self.fileManager.settingsCacheKeyPath]; - } - [self.fileManager createFileAtPath:self.fileManager.settingsCacheKeyPath - contents:jsonData - attributes:nil]; - - // If Settings were expired before, they should no longer be expired after this. - // This may be set back to YES if reloading from the cache fails - @synchronized(self) { - self.isCacheKeyExpired = NO; - } - - [self reloadFromCacheWithGoogleAppID:googleAppID currentTimestamp:currentTimestamp]; -} - -#pragma mark - Convenience Methods - -- (NSDictionary *)loadCacheKey { - NSData *cacheKeyData = - [self.fileManager dataWithContentsOfFile:self.fileManager.settingsCacheKeyPath]; - - if (!cacheKeyData) { - return nil; - } - - NSError *error = nil; - NSDictionary *cacheKey = [NSJSONSerialization JSONObjectWithData:cacheKeyData - options:NSJSONReadingAllowFragments - error:&error]; - return cacheKey; -} - -- (void)deleteCachedSettings { - __weak FIRCLSSettings *weakSelf = self; - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{ - __strong FIRCLSSettings *strongSelf = weakSelf; - if ([strongSelf.fileManager fileExistsAtPath:strongSelf.fileManager.settingsFilePath]) { - [strongSelf.fileManager removeItemAtPath:strongSelf.fileManager.settingsFilePath]; - } - if ([strongSelf.fileManager fileExistsAtPath:strongSelf.fileManager.settingsCacheKeyPath]) { - [strongSelf.fileManager removeItemAtPath:strongSelf.fileManager.settingsCacheKeyPath]; - } - }); - - @synchronized(self) { - self.isCacheKeyExpired = YES; - _settingsDictionary = nil; - } -} - -- (NSDictionary *)settingsDictionary { - @synchronized(self) { - return _settingsDictionary; - } -} - -#pragma mark - Settings Groups - -- (NSDictionary *)appSettings { - return self.settingsDictionary[@"app"]; -} - -- (NSDictionary *)sessionSettings { - return self.settingsDictionary[@"session"]; -} - -- (NSDictionary *)featuresSettings { - return self.settingsDictionary[@"features"]; -} - -- (NSDictionary *)fabricSettings { - return self.settingsDictionary[@"fabric"]; -} - -#pragma mark - Caching - -- (BOOL)isCacheExpired { - if (!self.settingsDictionary) { - return YES; - } - - @synchronized(self) { - return self.isCacheKeyExpired; - } -} - -- (uint32_t)cacheDurationSeconds { - id fetchedCacheDuration = self.settingsDictionary[@"cache_duration"]; - if (fetchedCacheDuration) { - return [fetchedCacheDuration unsignedIntValue]; - } - - return 60 * 60; -} - -#pragma mark - Identifiers - -- (nullable NSString *)orgID { - return self.fabricSettings[@"org_id"]; -} - -- (nullable NSString *)fetchedBundleID { - return self.fabricSettings[@"bundle_id"]; -} - -#pragma mark - Onboarding / Update - -- (NSString *)appStatus { - return self.appSettings[@"status"]; -} - -- (BOOL)appNeedsOnboarding { - return [self.appStatus isEqualToString:@"new"]; -} - -- (BOOL)appUpdateRequired { - return [[self.appSettings objectForKey:@"update_required"] boolValue]; -} - -#pragma mark - On / Off Switches - -- (BOOL)errorReportingEnabled { - NSNumber *value = [self featuresSettings][@"collect_logged_exceptions"]; - - if (value != nil) { - return [value boolValue]; - } - - return YES; -} - -- (BOOL)customExceptionsEnabled { - // Right now, recording custom exceptions from the API and - // automatically capturing non-fatal errors go hand in hand - return [self errorReportingEnabled]; -} - -- (BOOL)collectReportsEnabled { - NSNumber *value = [self featuresSettings][@"collect_reports"]; - - if (value != nil) { - return value.boolValue; - } - - return YES; -} - -- (BOOL)shouldUseNewReportEndpoint { - NSNumber *value = [self appSettings][@"report_upload_variant"]; - - // Default to use the new endpoint when settings were not successfully fetched - // or there's an unexpected issue - if (value == nil) { - return YES; - } - - // 0 - Unknown - // 1 - Legacy - // 2 - New - return value.intValue == 2; -} - -#pragma mark - Optional Limit Overrides - -- (uint32_t)errorLogBufferSize { - return [self logBufferSize]; -} - -- (uint32_t)logBufferSize { - NSNumber *value = [self sessionSettings][@"log_buffer_size"]; - - if (value != nil) { - return value.unsignedIntValue; - } - - return 64 * 1000; -} - -- (uint32_t)maxCustomExceptions { - NSNumber *value = [self sessionSettings][@"max_custom_exception_events"]; - - if (value != nil) { - return value.unsignedIntValue; - } - - return 8; -} - -- (uint32_t)maxCustomKeys { - NSNumber *value = [self sessionSettings][@"max_custom_key_value_pairs"]; - - if (value != nil) { - return value.unsignedIntValue; - } - - return 64; -} - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/FIRCLSSymbolResolver.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/FIRCLSSymbolResolver.h deleted file mode 100644 index a18e60467e..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/FIRCLSSymbolResolver.h +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import - -@class FIRStackFrame; - -@interface FIRCLSSymbolResolver : NSObject - -- (BOOL)loadBinaryImagesFromFile:(NSString *)path; - -- (FIRStackFrame *)frameForAddress:(uint64_t)address; -- (BOOL)updateStackFrame:(FIRStackFrame *)frame; - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/FIRCLSSymbolResolver.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/FIRCLSSymbolResolver.m deleted file mode 100644 index 522a14ec59..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/FIRCLSSymbolResolver.m +++ /dev/null @@ -1,175 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSSymbolResolver.h" - -#include - -#include "FIRCLSBinaryImage.h" -#include "FIRCLSFile.h" -#import "FIRCLSLogger.h" -#import "FIRStackFrame_Private.h" - -@interface FIRCLSSymbolResolver () { - NSMutableArray* _binaryImages; -} - -@end - -@implementation FIRCLSSymbolResolver - -- (instancetype)init { - self = [super init]; - if (!self) { - return nil; - } - - _binaryImages = [NSMutableArray array]; - - return self; -} - -- (BOOL)loadBinaryImagesFromFile:(NSString*)path { - if ([path length] == 0) { - return NO; - } - - NSArray* sections = FIRCLSFileReadSections([path fileSystemRepresentation], false, nil); - - if ([sections count] == 0) { - FIRCLSErrorLog(@"Failed to read binary image file %@", path); - return NO; - } - - // filter out unloads, as well as loads with invalid entries - for (NSDictionary* entry in sections) { - NSDictionary* details = [entry objectForKey:@"load"]; - if (!details) { - continue; - } - - // This does happen occationally and causes a crash. I'm really not sure there - // is anything sane we can do in this case. - if (![details objectForKey:@"base"] || ![details objectForKey:@"size"]) { - continue; - } - - if ([details objectForKey:@"base"] == (id)[NSNull null] || - [details objectForKey:@"size"] == (id)[NSNull null]) { - continue; - } - - [_binaryImages addObject:details]; - } - - [_binaryImages sortUsingComparator:^NSComparisonResult(id obj1, id obj2) { - NSNumber* base1 = [obj1 objectForKey:@"base"]; - NSNumber* base2 = [obj2 objectForKey:@"base"]; - - return [base1 compare:base2]; - }]; - - return YES; -} - -- (NSDictionary*)loadedBinaryImageForPC:(uintptr_t)pc { - NSUInteger index = - [_binaryImages indexOfObjectPassingTest:^BOOL(id obj, NSUInteger idx, BOOL* stop) { - uintptr_t base = [[obj objectForKey:@"base"] unsignedIntegerValue]; - uintptr_t size = [[obj objectForKey:@"size"] unsignedIntegerValue]; - - return pc >= base && pc < (base + size); - }]; - - if (index == NSNotFound) { - return nil; - } - - return [_binaryImages objectAtIndex:index]; -} - -- (BOOL)fillInImageDetails:(FIRCLSBinaryImageDetails*)details forUUID:(NSString*)uuid { - if (!details || !uuid) { - return NO; - } - - return FIRCLSBinaryImageFindImageForUUID([uuid UTF8String], details); -} - -- (FIRStackFrame*)frameForAddress:(uint64_t)address { - FIRStackFrame* frame = [FIRStackFrame stackFrameWithAddress:(NSUInteger)address]; - - if (![self updateStackFrame:frame]) { - return nil; - } - - return frame; -} - -- (BOOL)updateStackFrame:(FIRStackFrame*)frame { - uint64_t address = [frame address]; - if (address == 0) { - return NO; - } - - NSDictionary* binaryImage = [self loadedBinaryImageForPC:(uintptr_t)address]; - - FIRCLSBinaryImageDetails imageDetails; - - if (![self fillInImageDetails:&imageDetails forUUID:[binaryImage objectForKey:@"uuid"]]) { -#if DEBUG - FIRCLSDebugLog(@"Image not found"); -#endif - return NO; - } - - uintptr_t addr = (uintptr_t)address - - (uintptr_t)[[binaryImage objectForKey:@"base"] unsignedIntegerValue] + - (uintptr_t)imageDetails.node.baseAddress; - Dl_info dlInfo; - - if (dladdr((void*)addr, &dlInfo) == 0) { -#if DEBUG - FIRCLSDebugLog(@"Could not look up address"); -#endif - return NO; - } - - if (addr - (uintptr_t)dlInfo.dli_saddr == 0) { - addr -= 2; - if (dladdr((void*)addr, &dlInfo) == 0) { -#if DEBUG - FIRCLSDebugLog(@"Could not look up address"); -#endif - return NO; - } - } - - if (dlInfo.dli_sname) { - NSString* symbol = [NSString stringWithUTF8String:dlInfo.dli_sname]; - - frame.symbol = symbol; - frame.rawSymbol = symbol; - } - - if (addr > (uintptr_t)dlInfo.dli_saddr) { - [frame setOffset:addr - (uintptr_t)dlInfo.dli_saddr]; - } - - [frame setLibrary:[[binaryImage objectForKey:@"path"] lastPathComponent]]; - - return YES; -} - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/Record/FIRCLSRecordApplication.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/Record/FIRCLSRecordApplication.h deleted file mode 100644 index d17bdce723..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/Record/FIRCLSRecordApplication.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright 2020 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIRCLSRecordBase.h" - -@interface FIRCLSRecordApplication : FIRCLSRecordBase - -@property(nonatomic, copy) NSString *build_version; -@property(nonatomic, copy) NSString *display_version; - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/Record/FIRCLSRecordApplication.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/Record/FIRCLSRecordApplication.m deleted file mode 100644 index f587e1014e..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/Record/FIRCLSRecordApplication.m +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright 2020 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIRCLSRecordApplication.h" - -@implementation FIRCLSRecordApplication - -- (instancetype)initWithDict:(NSDictionary *)dict { - self = [super initWithDict:dict]; - if (self) { - _display_version = dict[@"display_version"]; - _build_version = dict[@"build_version"]; - } - return self; -} - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/Record/FIRCLSRecordBase.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/Record/FIRCLSRecordBase.h deleted file mode 100644 index a3cb6e2f88..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/Record/FIRCLSRecordBase.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright 2020 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -/** - * This is the base class to represent the data in the persisted crash (.clsrecord) files. - * The properties these subclasses are nullable on purpose. If there is an issue reading values - * from the crash files, continue as if those fields are optional so a report can still be uploaded. - * That way the issue can potentially be monitored through the backend. - **/ -@interface FIRCLSRecordBase : NSObject - -/** - * Mark the default initializer as unavailable so the subclasses do not have to add the same line - **/ -- (instancetype)init NS_UNAVAILABLE; - -/** - * All subclasses should define an initializer taking in a dictionary - **/ -- (instancetype)initWithDict:(NSDictionary *)dict; - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/Record/FIRCLSRecordBase.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/Record/FIRCLSRecordBase.m deleted file mode 100644 index 7d591f5390..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/Record/FIRCLSRecordBase.m +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright 2020 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIRCLSRecordBase.h" - -@implementation FIRCLSRecordBase - -- (instancetype)initWithDict:(NSDictionary *)dict { - return [super init]; -} - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/Record/FIRCLSRecordHost.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/Record/FIRCLSRecordHost.h deleted file mode 100644 index 652d283c1c..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/Record/FIRCLSRecordHost.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright 2020 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIRCLSRecordBase.h" - -@interface FIRCLSRecordHost : FIRCLSRecordBase - -@property(nonatomic, copy) NSString *platform; - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/Record/FIRCLSRecordHost.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/Record/FIRCLSRecordHost.m deleted file mode 100644 index 67184ae689..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/Record/FIRCLSRecordHost.m +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright 2020 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIRCLSRecordHost.h" - -@implementation FIRCLSRecordHost - -- (instancetype)initWithDict:(NSDictionary *)dict { - self = [super initWithDict:dict]; - if (self) { - _platform = dict[@"platform"]; - } - return self; -} - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/Record/FIRCLSRecordIdentity.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/Record/FIRCLSRecordIdentity.h deleted file mode 100644 index 9f13fdd165..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/Record/FIRCLSRecordIdentity.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright 2020 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIRCLSRecordBase.h" - -@interface FIRCLSRecordIdentity : FIRCLSRecordBase - -@property(nonatomic, copy) NSString *build_version; -@property(nonatomic, copy) NSString *install_id; - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/Record/FIRCLSRecordIdentity.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/Record/FIRCLSRecordIdentity.m deleted file mode 100644 index b4b547e639..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/Record/FIRCLSRecordIdentity.m +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright 2020 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIRCLSRecordIdentity.h" - -@implementation FIRCLSRecordIdentity - -- (instancetype)initWithDict:(NSDictionary *)dict { - self = [super initWithDict:dict]; - if (self) { - _build_version = dict[@"build_version"]; - _install_id = dict[@"install_id"]; - } - return self; -} - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/Record/FIRCLSReportAdapter.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/Record/FIRCLSReportAdapter.h deleted file mode 100644 index eea8948146..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/Record/FIRCLSReportAdapter.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2020 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -#include "crashlytics.nanopb.h" - -#import - -/// This class is responsible for reading the persisted crash reports from disk and converting them -/// the information into the nanopb model to be used with GoogleDataTransport -@interface FIRCLSReportAdapter : NSObject - -- (instancetype)init NS_UNAVAILABLE; - -/// Initializer -/// @param folderPath Path where the persisted crash files reside -- (instancetype)initWithPath:(NSString *)folderPath googleAppId:(NSString *)googleAppID; - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/Record/FIRCLSReportAdapter.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/Record/FIRCLSReportAdapter.m deleted file mode 100644 index 3c74691b8f..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/Record/FIRCLSReportAdapter.m +++ /dev/null @@ -1,250 +0,0 @@ -/* - * Copyright 2020 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIRCLSReportAdapter.h" -#import "FIRCLSReportAdapter_Private.h" - -#import "FIRCLSInternalReport.h" -#import "FIRCLSLogger.h" - -#import "FIRCLSUserLogging.h" - -#import -#import -#import - -@implementation FIRCLSReportAdapter - -- (instancetype)initWithPath:(NSString *)folderPath googleAppId:(NSString *)googleAppID { - self = [super init]; - if (self) { - _folderPath = folderPath; - _googleAppID = googleAppID; - - [self loadMetaDataFile]; - - _report = [self protoReport]; - } - return self; -} - -- (void)dealloc { - pb_release(google_crashlytics_Report_fields, &_report); -} - -// -// MARK: Load from persisted crash files -// - -/// Reads from metadata.clsrecord -- (void)loadMetaDataFile { - NSString *path = [self.folderPath stringByAppendingPathComponent:FIRCLSReportMetadataFile]; - NSDictionary *dict = [FIRCLSReportAdapter combinedDictionariesFromFilePath:path]; - - self.identity = [[FIRCLSRecordIdentity alloc] initWithDict:dict[@"identity"]]; - self.host = [[FIRCLSRecordHost alloc] initWithDict:dict[@"host"]]; - self.application = [[FIRCLSRecordApplication alloc] initWithDict:dict[@"application"]]; -} - -/// Return the persisted crash file as a combined dictionary that way lookups can occur with a key -/// (to avoid ordering dependency) -/// @param filePath Persisted crash file path -+ (NSDictionary *)combinedDictionariesFromFilePath:(NSString *)filePath { - NSMutableDictionary *joinedDict = [[NSMutableDictionary alloc] init]; - for (NSDictionary *dict in [self dictionariesFromEachLineOfFile:filePath]) { - [joinedDict addEntriesFromDictionary:dict]; - } - return joinedDict; -} - -/// The persisted crash files contains JSON on separate lines. Read each line and return the JSON -/// data as a dictionary. -/// @param filePath Persisted crash file path -+ (NSArray *)dictionariesFromEachLineOfFile:(NSString *)filePath { - NSString *content = [[NSString alloc] initWithContentsOfFile:filePath - encoding:NSUTF8StringEncoding - error:nil]; - NSArray *lines = - [content componentsSeparatedByCharactersInSet:NSCharacterSet.newlineCharacterSet]; - - NSMutableArray *array = [[NSMutableArray alloc] init]; - - int lineNum = 0; - for (NSString *line in lines) { - lineNum++; - - if (line.length == 0) { - // Likely newline at the end of the file - continue; - } - - NSError *error; - NSDictionary *dict = - [NSJSONSerialization JSONObjectWithData:[line dataUsingEncoding:NSUTF8StringEncoding] - options:0 - error:&error]; - - if (error) { - FIRCLSErrorLog(@"Failed to read JSON from file (%@) line (%d) with error: %@", filePath, - lineNum, error); - } else { - [array addObject:dict]; - } - } - - return array; -} - -// -// MARK: GDTCOREventDataObject -// - -- (NSData *)transportBytes { - pb_ostream_t sizestream = PB_OSTREAM_SIZING; - - // Encode 1 time to determine the size. - if (!pb_encode(&sizestream, google_crashlytics_Report_fields, &_report)) { - FIRCLSErrorLog(@"Error in nanopb encoding for size: %s", PB_GET_ERROR(&sizestream)); - } - - // Encode a 2nd time to actually get the bytes from it. - size_t bufferSize = sizestream.bytes_written; - CFMutableDataRef dataRef = CFDataCreateMutable(CFAllocatorGetDefault(), bufferSize); - CFDataSetLength(dataRef, bufferSize); - pb_ostream_t ostream = pb_ostream_from_buffer((void *)CFDataGetBytePtr(dataRef), bufferSize); - if (!pb_encode(&ostream, google_crashlytics_Report_fields, &_report)) { - FIRCLSErrorLog(@"Error in nanopb encoding for bytes: %s", PB_GET_ERROR(&ostream)); - } - - return CFBridgingRelease(dataRef); -} - -// -// MARK: NanoPB conversions -// - -- (google_crashlytics_Report)protoReport { - google_crashlytics_Report report = google_crashlytics_Report_init_default; - report.sdk_version = FIRCLSEncodeString(self.identity.build_version); - report.gmp_app_id = FIRCLSEncodeString(self.googleAppID); - report.platform = [self protoPlatformFromString:self.host.platform]; - report.installation_uuid = FIRCLSEncodeString(self.identity.install_id); - report.build_version = FIRCLSEncodeString(self.application.build_version); - report.display_version = FIRCLSEncodeString(self.application.display_version); - report.apple_payload = [self protoFilesPayload]; - return report; -} - -- (google_crashlytics_FilesPayload)protoFilesPayload { - google_crashlytics_FilesPayload apple_payload = google_crashlytics_FilesPayload_init_default; - - NSArray *clsRecords = [self clsRecordFilePaths]; - google_crashlytics_FilesPayload_File *files = - malloc(sizeof(google_crashlytics_FilesPayload_File) * clsRecords.count); - - if (files == NULL) { - // files and files_count are initialized to NULL and 0 by default. - return apple_payload; - } - for (NSUInteger i = 0; i < clsRecords.count; i++) { - google_crashlytics_FilesPayload_File file = google_crashlytics_FilesPayload_File_init_default; - file.filename = FIRCLSEncodeString(clsRecords[i].lastPathComponent); - - NSError *error; - file.contents = FIRCLSEncodeData([NSData dataWithContentsOfFile:clsRecords[i] - options:0 - error:&error]); - if (error) { - FIRCLSErrorLog(@"Failed to read from %@ with error: %@", clsRecords[i], error); - } - - files[i] = file; - } - - apple_payload.files = files; - apple_payload.files_count = (pb_size_t)clsRecords.count; - - return apple_payload; -} - -- (NSArray *)clsRecordFilePaths { - NSMutableArray *clsRecords = [[NSMutableArray alloc] init]; - - NSError *error; - NSArray *files = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:self.folderPath - error:&error]; - - if (error) { - FIRCLSErrorLog(@"Failed to find .clsrecords from %@ with error: %@", self.folderPath, error); - return clsRecords; - } - - [files enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - NSString *filename = (NSString *)obj; - NSString *lowerExtension = filename.pathExtension.lowercaseString; - if ([lowerExtension isEqualToString:@"clsrecord"] || - [lowerExtension isEqualToString:@"symbolicated"]) { - [clsRecords addObject:[self.folderPath stringByAppendingPathComponent:filename]]; - } - }]; - - return [clsRecords sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)]; -} - -- (google_crashlytics_Platforms)protoPlatformFromString:(NSString *)str { - NSString *platform = str.lowercaseString; - - if ([platform isEqualToString:@"ios"]) { - return google_crashlytics_Platforms_IOS; - } else if ([platform isEqualToString:@"mac"]) { - return google_crashlytics_Platforms_MAC_OS_X; - } else if ([platform isEqualToString:@"tvos"]) { - return google_crashlytics_Platforms_TVOS; - } else { - return google_crashlytics_Platforms_UNKNOWN_PLATFORM; - } -} - -/** Mallocs a pb_bytes_array and copies the given NSString's bytes into the bytes array. - * @note Memory needs to be freed manually, through pb_free or pb_release. - * @param string The string to encode as pb_bytes. - */ -pb_bytes_array_t *FIRCLSEncodeString(NSString *string) { - if ([string isMemberOfClass:[NSNull class]]) { - FIRCLSErrorLog(@"Expected encodable string, but found NSNull instead. " - @"Set a symbolic breakpoint at FIRCLSEncodeString to debug."); - string = nil; - } - NSString *stringToEncode = string ? string : @""; - NSData *stringBytes = [stringToEncode dataUsingEncoding:NSUTF8StringEncoding]; - return FIRCLSEncodeData(stringBytes); -} - -/** Mallocs a pb_bytes_array and copies the given NSData bytes into the bytes array. - * @note Memory needs to be free manually, through pb_free or pb_release. - * @param data The data to copy into the new bytes array. - */ -pb_bytes_array_t *FIRCLSEncodeData(NSData *data) { - pb_bytes_array_t *pbBytes = malloc(PB_BYTES_ARRAY_T_ALLOCSIZE(data.length)); - if (pbBytes == NULL) { - return NULL; - } - memcpy(pbBytes->bytes, [data bytes], data.length); - pbBytes->size = (pb_size_t)data.length; - return pbBytes; -} - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/Record/FIRCLSReportAdapter_Private.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/Record/FIRCLSReportAdapter_Private.h deleted file mode 100644 index e9f2c16064..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Models/Record/FIRCLSReportAdapter_Private.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright 2020 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIRCLSReportAdapter.h" - -#import "FIRCLSRecordApplication.h" -#import "FIRCLSRecordHost.h" -#import "FIRCLSRecordIdentity.h" - -pb_bytes_array_t *FIRCLSEncodeString(NSString *string); -pb_bytes_array_t *FIRCLSEncodeData(NSData *data); - -@interface FIRCLSReportAdapter () - -@property(nonatomic, readonly) BOOL hasCrashed; - -@property(nonatomic, strong) NSString *folderPath; -@property(nonatomic, strong) NSString *googleAppID; - -// From metadata.clsrecord -@property(nonatomic, strong) FIRCLSRecordIdentity *identity; -@property(nonatomic, strong) FIRCLSRecordHost *host; -@property(nonatomic, strong) FIRCLSRecordApplication *application; - -@property(nonatomic) google_crashlytics_Report report; - -- (google_crashlytics_Report)protoReport; -- (NSArray *)clsRecordFilePaths; - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Operations/FIRCLSAsyncOperation.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Operations/FIRCLSAsyncOperation.h deleted file mode 100644 index 5636d3d09c..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Operations/FIRCLSAsyncOperation.h +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import - -typedef void (^FIRCLSAsyncOperationCompletionBlock)(NSError* error); - -@interface FIRCLSAsyncOperation : NSOperation - -@property(copy, nonatomic) FIRCLSAsyncOperationCompletionBlock asyncCompletion; - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Operations/FIRCLSAsyncOperation.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Operations/FIRCLSAsyncOperation.m deleted file mode 100644 index 94415f14ef..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Operations/FIRCLSAsyncOperation.m +++ /dev/null @@ -1,135 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSAsyncOperation.h" - -@interface FIRCLSAsyncOperation () { - BOOL _internalExecuting; - BOOL _internalFinished; -} - -@property(nonatomic, strong) NSRecursiveLock *lock; - -@end - -@implementation FIRCLSAsyncOperation - -- (instancetype)init { - self = [super init]; - if (!self) { - return nil; - } - - _internalExecuting = NO; - _internalFinished = NO; - - self.lock = [[NSRecursiveLock alloc] init]; - self.lock.name = @"com.crashlytics.async-operation-lock"; - - return self; -} - -#pragma mark - NSOperation Overrides -- (BOOL)isConcurrent { - return YES; -} - -- (BOOL)isAsynchronous { - return YES; -} - -- (BOOL)isExecuting { - [self.lock lock]; - BOOL result = _internalExecuting; - [self.lock unlock]; - - return result; -} - -- (BOOL)isFinished { - [self.lock lock]; - BOOL result = _internalFinished; - [self.lock unlock]; - - return result; -} - -- (void)start { - if ([self checkForCancellation]) { - return; - } - - [self markStarted]; - - [self main]; -} - -#pragma mark - Utilities -- (void)changeValueForKey:(NSString *)key inBlock:(void (^)(void))block { - [self willChangeValueForKey:key]; - block(); - [self didChangeValueForKey:key]; -} - -- (void)lock:(void (^)(void))block { - [self.lock lock]; - block(); - [self.lock unlock]; -} - -- (BOOL)checkForCancellation { - if ([self isCancelled]) { - [self markDone]; - return YES; - } - - return NO; -} - -#pragma mark - State Management -- (void)unlockedMarkFinished { - [self changeValueForKey:@"isFinished" - inBlock:^{ - self->_internalFinished = YES; - }]; -} - -- (void)unlockedMarkStarted { - [self changeValueForKey:@"isExecuting" - inBlock:^{ - self->_internalExecuting = YES; - }]; -} - -- (void)unlockedMarkComplete { - [self changeValueForKey:@"isExecuting" - inBlock:^{ - self->_internalExecuting = NO; - }]; -} - -- (void)markStarted { - [self lock:^{ - [self unlockedMarkStarted]; - }]; -} - -- (void)markDone { - [self lock:^{ - [self unlockedMarkComplete]; - [self unlockedMarkFinished]; - }]; -} - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Operations/FIRCLSAsyncOperation_Private.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Operations/FIRCLSAsyncOperation_Private.h deleted file mode 100644 index 1135ed75ba..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Operations/FIRCLSAsyncOperation_Private.h +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSAsyncOperation.h" - -@interface FIRCLSAsyncOperation (Private) - -- (void)markStarted; -- (void)markDone; - -- (BOOL)checkForCancellation; - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Operations/Reports/FIRCLSPackageReportOperation.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Operations/Reports/FIRCLSPackageReportOperation.h deleted file mode 100644 index 5822e75279..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Operations/Reports/FIRCLSPackageReportOperation.h +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import - -@class FIRCLSInternalReport; -@class FIRCLSFileManager; -@class FIRCLSSettings; - -@interface FIRCLSPackageReportOperation : NSOperation - -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; -- (instancetype)initWithReport:(FIRCLSInternalReport *)report - fileManager:(FIRCLSFileManager *)fileManager - settings:(FIRCLSSettings *)settings NS_DESIGNATED_INITIALIZER; - -@property(nonatomic, readonly) FIRCLSInternalReport *report; -@property(nonatomic, readonly) FIRCLSFileManager *fileManager; -@property(nonatomic, readonly) FIRCLSSettings *settings; - -@property(nonatomic, copy, readonly) NSString *finalPath; - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Operations/Reports/FIRCLSPackageReportOperation.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Operations/Reports/FIRCLSPackageReportOperation.m deleted file mode 100644 index aaf4c2a163..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Operations/Reports/FIRCLSPackageReportOperation.m +++ /dev/null @@ -1,210 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSPackageReportOperation.h" - -#include -#include - -#import "FIRCLSFileManager.h" -#import "FIRCLSInternalReport.h" - -#import "FIRCLSUtility.h" - -#import "FIRCLSByteUtility.h" -#import "FIRCLSMultipartMimeStreamEncoder.h" - -#import "FIRCLSSettings.h" - -@interface FIRCLSPackageReportOperation () - -@property(nonatomic, copy) NSString *finalPath; - -@end - -@implementation FIRCLSPackageReportOperation - -- (instancetype)initWithReport:(FIRCLSInternalReport *)report - fileManager:(FIRCLSFileManager *)fileManager - settings:(FIRCLSSettings *)settings { - self = [super init]; - if (!self) { - return nil; - } - - _report = report; - _fileManager = fileManager; - _settings = settings; - - return self; -} - -- (BOOL)compressData:(NSData *)data toPath:(NSString *)path { - gzFile file = gzopen([path fileSystemRepresentation], "w"); - if (file == Z_NULL) { - FIRCLSSDKLogError("Error: unable to open file for compression %s\n", strerror(errno)); - return NO; - } - - __block BOOL success = [data length] > 0; - - FIRCLSEnumerateByteRangesOfNSDataUsingBlock( - data, ^(const void *bytes, NSRange byteRange, BOOL *stop) { - size_t length = byteRange.length; - - if (![self writeBytes:bytes length:length toGZFile:file]) { - *stop = YES; - success = NO; - } - }); - - gzclose(file); - - return success; -} - -- (BOOL)writeBytes:(const void *)buffer length:(size_t)length toGZFile:(gzFile)file { - return FIRCLSFileLoopWithWriteBlock( - buffer, length, ^ssize_t(const void *partialBuffer, size_t partialLength) { - errno = 0; - int ret = gzwrite(file, buffer, (unsigned int)length); - - if (ret == 0) { - int zerror = 0; - const char *errorString = gzerror(file, &zerror); - - FIRCLSSDKLogError("Error: failed to write compressed bytes %d, %s, %s \n", zerror, - errorString, strerror(errno)); - } - - return ret; - }); -} - -- (NSString *)reportPath { - return [self.report path]; -} - -- (NSString *)destinationDirectory { - return [self.fileManager legacyPreparedPath]; -} - -- (NSString *)packagedPathWithName:(NSString *)name { - // the output file will use the boundary as the filename, and "multipartmime" as the extension - return [[self.destinationDirectory stringByAppendingPathComponent:name] - stringByAppendingPathExtension:@"multipartmime"]; -} - -- (void)main { - NSString *reportOrgID = self.settings.orgID; - if (!reportOrgID) { - FIRCLSDebugLog( - @"[Crashlytics:PackageReport] Skipping packaging of report with id '%@' this run of the " - @"app because Organization ID was nil. Report will upload once settings are download " - @"successfully", - self.report.identifier); - - return; - } - - self.finalPath = nil; - - NSString *boundary = [FIRCLSMultipartMimeStreamEncoder generateBoundary]; - NSString *destPath = [self packagedPathWithName:boundary]; - - // try to read the metadata file, which could always fail - NSString *reportSessionId = self.report.identifier; - - NSOutputStream *stream = [NSOutputStream outputStreamToFileAtPath:destPath append:NO]; - - FIRCLSMultipartMimeStreamEncoder *encoder = - [FIRCLSMultipartMimeStreamEncoder encoderWithStream:stream andBoundary:boundary]; - if (!encoder) { - return; - } - - [encoder encode:^{ - [encoder addValue:reportOrgID fieldName:@"org_id"]; - - if (reportSessionId) { - [encoder addValue:reportSessionId fieldName:@"report_id"]; - } - - [self.fileManager - enumerateFilesInDirectory:self.reportPath - usingBlock:^(NSString *filePath, NSString *extension) { - if (self.cancelled) { - return; - } - - // Do not package or include already gz'ed files. These can get left over - // from previously-submitted reports. There's an opportinity here to avoid - // compressed certain types of files that cannot be changed. - if ([extension isEqualToString:@"gz"]) { - return; - } - - NSData *data = [NSData dataWithContentsOfFile:filePath - options:0 - error:nil]; - if ([data length] == 0) { - const char *filename = [[filePath lastPathComponent] UTF8String]; - - FIRCLSSDKLogError("Error: unable to read data for compression: %s\n", - filename); - return; - } - - [self encode:encoder data:data fromPath:filePath]; - }]; - }]; - - if (self.cancelled) { - [self.fileManager removeItemAtPath:destPath]; - return; - } - - self.finalPath = destPath; -} - -- (void)encode:(FIRCLSMultipartMimeStreamEncoder *)encoder - data:(NSData *)data - fromPath:(NSString *)path { - // must be non-nil and > 0 length - if ([path length] == 0) { - FIRCLSSDKLogError("Error: path is invalid\n"); - return; - } - - NSString *uploadPath = [path stringByAppendingPathExtension:@"gz"]; - NSString *fieldname = [path lastPathComponent]; - NSString *filename = [uploadPath lastPathComponent]; - NSString *mimeType = @"application/x-gzip"; - - // first, attempt to compress - if (![self compressData:data toPath:uploadPath]) { - FIRCLSSDKLogError("Error: compression failed for %s\n", [filename UTF8String]); - - // attempt the upload without compression - mimeType = @"text/plain"; - uploadPath = path; - } - - [encoder addFile:[NSURL fileURLWithPath:uploadPath] - fileName:filename - mimeType:mimeType - fieldName:fieldname]; -} - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Operations/Reports/FIRCLSProcessReportOperation.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Operations/Reports/FIRCLSProcessReportOperation.h deleted file mode 100644 index 1e90286365..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Operations/Reports/FIRCLSProcessReportOperation.h +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import - -@class FIRCLSInternalReport; -@class FIRCLSSymbolResolver; - -@interface FIRCLSProcessReportOperation : NSOperation - -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; -- (instancetype)initWithReport:(FIRCLSInternalReport *)report - resolver:(FIRCLSSymbolResolver *)resolver NS_DESIGNATED_INITIALIZER; - -@property(nonatomic, readonly) FIRCLSSymbolResolver *symbolResolver; -@property(nonatomic, readonly) FIRCLSInternalReport *report; - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Operations/Reports/FIRCLSProcessReportOperation.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Operations/Reports/FIRCLSProcessReportOperation.m deleted file mode 100644 index 12ce601d68..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Operations/Reports/FIRCLSProcessReportOperation.m +++ /dev/null @@ -1,113 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSProcessReportOperation.h" - -#import "FIRCLSDemangleOperation.h" -#import "FIRCLSFile.h" -#import "FIRCLSInternalReport.h" -#import "FIRCLSSerializeSymbolicatedFramesOperation.h" -#import "FIRCLSSymbolResolver.h" -#import "FIRCLSSymbolicationOperation.h" -#import "FIRStackFrame_Private.h" - -@implementation FIRCLSProcessReportOperation - -- (instancetype)initWithReport:(FIRCLSInternalReport *)report - resolver:(FIRCLSSymbolResolver *)resolver { - self = [super init]; - if (!self) { - return nil; - } - - _report = report; - _symbolResolver = resolver; - - return self; -} - -- (NSString *)binaryImagePath { - return self.report.binaryImagePath; -} - -- (NSArray *)threadArrayFromFile:(NSString *)path { - NSArray *threads = - FIRCLSFileReadSections([path fileSystemRepresentation], false, ^NSObject *(id obj) { - // use this to select out the one entry that has a "threads" top-level entry - return [obj objectForKey:@"threads"]; - }); - - if ([threads count] == 0) { - return nil; - } - - // threads is actually an array of arrays - threads = [threads objectAtIndex:0]; - if (!threads) { - return nil; - } - - NSMutableArray *threadArray = [NSMutableArray array]; - - for (NSDictionary *threadDetails in threads) { - NSMutableArray *frameArray = [NSMutableArray array]; - - for (NSNumber *pc in [threadDetails objectForKey:@"stacktrace"]) { - FIRStackFrame *frame = [FIRStackFrame stackFrameWithAddress:[pc unsignedIntegerValue]]; - - [frameArray addObject:frame]; - } - - [threadArray addObject:frameArray]; - } - - return threadArray; -} - -- (BOOL)symbolicateFile:(NSString *)path withResolver:(FIRCLSSymbolResolver *)resolver { - NSArray *threadArray = [self threadArrayFromFile:path]; - if (!threadArray) { - return NO; - } - - FIRCLSSymbolicationOperation *symbolicationOp = [[FIRCLSSymbolicationOperation alloc] init]; - [symbolicationOp setThreadArray:threadArray]; - [symbolicationOp setSymbolResolver:resolver]; - - FIRCLSDemangleOperation *demangleOp = [[FIRCLSDemangleOperation alloc] init]; - [demangleOp setThreadArray:threadArray]; - - FIRCLSSerializeSymbolicatedFramesOperation *serializeOp = - [[FIRCLSSerializeSymbolicatedFramesOperation alloc] init]; - [serializeOp setThreadArray:threadArray]; - [serializeOp setOutputPath:[path stringByAppendingPathExtension:@"symbolicated"]]; - - [symbolicationOp start]; - [demangleOp start]; - [serializeOp start]; - - return YES; -} - -- (void)main { - if (![self.symbolResolver loadBinaryImagesFromFile:self.binaryImagePath]) { - return; - } - - [self.report enumerateSymbolicatableFilesInContent:^(NSString *path) { - [self symbolicateFile:path withResolver:self.symbolResolver]; - }]; -} - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSDemangleOperation.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSDemangleOperation.h deleted file mode 100644 index b26b87cd7a..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSDemangleOperation.h +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSThreadArrayOperation.h" - -@interface FIRCLSDemangleOperation : FIRCLSThreadArrayOperation - -+ (NSString *)demangleSymbol:(const char *)symbol; -+ (NSString *)demangleCppSymbol:(const char *)symbol; - -- (NSString *)demangleSymbol:(const char *)symbol; - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSDemangleOperation.mm b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSDemangleOperation.mm deleted file mode 100644 index 364a6ed6dd..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSDemangleOperation.mm +++ /dev/null @@ -1,96 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "FIRCLSDemangleOperation.h" -#include "FIRStackFrame_Private.h" - -#import - -@implementation FIRCLSDemangleOperation - -+ (NSString *)demangleSymbol:(const char *)symbol { - if (!symbol) { - return nil; - } - - if (strncmp(symbol, "_Z", 2) == 0) { - return [self demangleCppSymbol:symbol]; - } else if (strncmp(symbol, "__Z", 3) == 0) { - return [self demangleBlockInvokeCppSymbol:symbol]; - } - - return nil; -} - -+ (NSString *)demangleBlockInvokeCppSymbol:(const char *)symbol { - NSString *string = [NSString stringWithUTF8String:symbol]; - - // search backwards, because this string should be at the end - NSRange range = [string rangeOfString:@"_block_invoke" options:NSBackwardsSearch]; - - if (range.location == NSNotFound) { - return nil; - } - - // we need at least a "_Z..." for a valid C++ symbol, so make sure of that - if (range.location < 5) { - return nil; - } - - // extract the mangled C++ symbol from the string - NSString *cppSymbol = [string substringWithRange:NSMakeRange(1, range.location - 1)]; - cppSymbol = [self demangleSymbol:[cppSymbol UTF8String]]; - if (!cppSymbol) { - return nil; - } - - // extract out just the "_block_invoke..." part - string = - [string substringWithRange:NSMakeRange(range.location, [string length] - range.location)]; - - // and glue that onto the end - return [cppSymbol stringByAppendingString:string]; -} - -+ (NSString *)demangleCppSymbol:(const char *)symbol { - int status; - char *buffer = NULL; - - buffer = __cxxabiv1::__cxa_demangle(symbol, buffer, NULL, &status); - if (!buffer) { - return nil; - } - - NSString *result = [NSString stringWithUTF8String:buffer]; - - free(buffer); - - return result; -} - -- (NSString *)demangleSymbol:(const char *)symbol { - return [[self class] demangleSymbol:symbol]; -} - -- (void)main { - [self enumerateFramesWithBlock:^(FIRStackFrame *frame) { - NSString *demangedSymbol = [self demangleSymbol:[[frame rawSymbol] UTF8String]]; - - if (demangedSymbol) { - [frame setSymbol:demangedSymbol]; - } - }]; -} - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSSerializeSymbolicatedFramesOperation.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSSerializeSymbolicatedFramesOperation.h deleted file mode 100644 index b73c67cdc2..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSSerializeSymbolicatedFramesOperation.h +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSThreadArrayOperation.h" - -@interface FIRCLSSerializeSymbolicatedFramesOperation : FIRCLSThreadArrayOperation - -@property(nonatomic, copy) NSString *outputPath; - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSSerializeSymbolicatedFramesOperation.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSSerializeSymbolicatedFramesOperation.m deleted file mode 100644 index b8701d261a..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSSerializeSymbolicatedFramesOperation.m +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSSerializeSymbolicatedFramesOperation.h" - -#import "FIRCLSFile.h" -#import "FIRCLSLogger.h" -#import "FIRStackFrame_Private.h" - -@implementation FIRCLSSerializeSymbolicatedFramesOperation - -- (void)main { - FIRCLSFile file; - - // Make sure not to open in append mode, so we can overwrite any pre-existing symbolication - // files. - if (!FIRCLSFileInitWithPathMode(&file, [self.outputPath fileSystemRepresentation], false, - false)) { - FIRCLSErrorLog(@"Failed to create output file"); - return; - } - - FIRCLSFileWriteSectionStart(&file, "threads"); - FIRCLSFileWriteArrayStart(&file); - - for (NSArray *frameArray in self.threadArray) { - FIRCLSFileWriteArrayStart(&file); - - for (FIRStackFrame *frame in frameArray) { - FIRCLSFileWriteHashStart(&file); - FIRCLSFileWriteHashEntryString(&file, "symbol", [[frame symbol] UTF8String]); - - // only include this field if it is present and different - if (![[frame rawSymbol] isEqualToString:[frame symbol]]) { - FIRCLSFileWriteHashEntryString(&file, "raw_symbol", [[frame rawSymbol] UTF8String]); - } - - FIRCLSFileWriteHashEntryUint64(&file, "offset", [frame offset]); - FIRCLSFileWriteHashEntryString(&file, "library", [[frame library] UTF8String]); - - FIRCLSFileWriteHashEnd(&file); - } - - FIRCLSFileWriteArrayEnd(&file); - } - - FIRCLSFileWriteArrayEnd(&file); - FIRCLSFileWriteSectionEnd(&file); - FIRCLSFileClose(&file); -} - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSSymbolicationOperation.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSSymbolicationOperation.h deleted file mode 100644 index 7c63e20e9b..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSSymbolicationOperation.h +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSThreadArrayOperation.h" - -@class FIRCLSSymbolResolver; - -@interface FIRCLSSymbolicationOperation : FIRCLSThreadArrayOperation - -@property(nonatomic, strong) FIRCLSSymbolResolver *symbolResolver; - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSSymbolicationOperation.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSSymbolicationOperation.m deleted file mode 100644 index d15005bbee..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSSymbolicationOperation.m +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSSymbolicationOperation.h" - -#import "FIRCLSSymbolResolver.h" - -@implementation FIRCLSSymbolicationOperation - -- (void)main { - [self enumerateFramesWithBlock:^(FIRStackFrame *frame) { - [self.symbolResolver updateStackFrame:frame]; - }]; -} - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSThreadArrayOperation.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSThreadArrayOperation.h deleted file mode 100644 index 0c2a1df54b..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSThreadArrayOperation.h +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import - -@class FIRStackFrame; - -@interface FIRCLSThreadArrayOperation : NSOperation - -@property(nonatomic, strong) NSArray *threadArray; - -- (void)enumerateFramesWithBlock:(void (^)(FIRStackFrame *frame))block; - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSThreadArrayOperation.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSThreadArrayOperation.m deleted file mode 100644 index 3f7509e7e3..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSThreadArrayOperation.m +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSThreadArrayOperation.h" - -@implementation FIRCLSThreadArrayOperation - -- (void)enumerateFramesWithBlock:(void (^)(FIRStackFrame *frame))block { - for (NSArray *frameArray in self.threadArray) { - for (FIRStackFrame *frame in frameArray) { - block(frame); - - if ([self isCancelled]) { - break; - } - } - } -} - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Private/FIRExceptionModel_Private.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Private/FIRExceptionModel_Private.h deleted file mode 100644 index 7cd161a956..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Private/FIRExceptionModel_Private.h +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2020 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef FIRExceptionModel_Private_h -#define FIRExceptionModel_Private_h - -#import - -#import "FIRExceptionModel.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FIRExceptionModel (Private) - -@property(nonatomic, copy) NSString *name; -@property(nonatomic, copy) NSString *reason; - -@end - -NS_ASSUME_NONNULL_END - -#endif /* FIRExceptionModel_Private_h */ diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Private/FIRStackFrame_Private.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Private/FIRStackFrame_Private.h deleted file mode 100644 index d4c0a44c9b..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Private/FIRStackFrame_Private.h +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2020 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import - -#import "FIRStackFrame.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - * This class is used in conjunction with recordExceptionModel to record information about - * non-ObjC/C++ exceptions. All information included here will be displayed in the Crashlytics UI, - * and can influence crash grouping. Be particularly careful with the use of the address property. - *If set, Crashlytics will attempt symbolication and could overwrite other properities in the - *process. - **/ -@interface FIRStackFrame (Private) - -+ (instancetype)stackFrame; -+ (instancetype)stackFrameWithAddress:(NSUInteger)address; -+ (instancetype)stackFrameWithSymbol:(NSString *)symbol; - -@property(nonatomic, copy, nullable) NSString *symbol; -@property(nonatomic, copy, nullable) NSString *rawSymbol; -@property(nonatomic, copy, nullable) NSString *library; -@property(nonatomic, copy, nullable) NSString *fileName; -@property(nonatomic, assign) uint32_t lineNumber; -@property(nonatomic, assign) uint64_t offset; -@property(nonatomic, assign) uint64_t address; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Public/FIRCrashlytics.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Public/FIRCrashlytics.h deleted file mode 100644 index 9f651537b1..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Public/FIRCrashlytics.h +++ /dev/null @@ -1,192 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import - -#import "FIRExceptionModel.h" - -#if __has_include() -#warning "FirebaseCrashlytics and Crashlytics are not compatible \ -in the same app because including multiple crash reporters can \ -cause problems when registering exception handlers." -#endif - -NS_ASSUME_NONNULL_BEGIN - -/** - * The Firebase Crashlytics API provides methods to annotate and manage fatal and - * non-fatal reports captured and reported to Firebase Crashlytics. - * - * By default, Firebase Crashlytics is initialized with `[FIRApp configure]`. - * - * Note: The Crashlytics class cannot be subclassed. If this makes testing difficult, - * we suggest using a wrapper class or a protocol extension. - */ -NS_SWIFT_NAME(Crashlytics) -@interface FIRCrashlytics : NSObject - -/** :nodoc: */ -- (instancetype)init NS_UNAVAILABLE; - -/** - * Accesses the singleton Crashlytics instance. - * - * @return The singleton Crashlytics instance. - */ -+ (instancetype)crashlytics NS_SWIFT_NAME(crashlytics()); - -/** - * Adds logging that is sent with your crash data. The logging does not appear in the - * system.log and is only visible in the Crashlytics dashboard. - * - * @param msg Message to log - */ -- (void)log:(NSString *)msg; - -/** - * Adds logging that is sent with your crash data. The logging does not appear in the - * system.log and is only visible in the Crashlytics dashboard. - * - * @param format Format of string - * @param ... A comma-separated list of arguments to substitute into format - */ -- (void)logWithFormat:(NSString *)format, ... NS_FORMAT_FUNCTION(1, 2); - -/** - * Adds logging that is sent with your crash data. The logging does not appear in the - * system.log and is only visible in the Crashlytics dashboard. - * - * @param format Format of string - * @param args Arguments to substitute into format - */ -- (void)logWithFormat:(NSString *)format - arguments:(va_list)args NS_SWIFT_NAME(log(format:arguments:)); - -/** - * Sets a custom key and value to be associated with subsequent fatal and non-fatal reports. - * When setting an object value, the object is converted to a string. This is - * typically done by calling "-[NSObject description]". - * - * @param value The value to be associated with the key - * @param key A unique key - */ -- (void)setCustomValue:(id)value forKey:(NSString *)key; - -/** - * Records a user ID (identifier) that's associated with subsequent fatal and non-fatal reports. - * - * If you want to associate a crash with a specific user, we recommend specifying an arbitrary - * string (e.g., a database, ID, hash, or other value that you can index and query, but is - * meaningless to a third-party observer). This allows you to facilitate responses for support - * requests and reach out to users for more information. - * - * @param userID An arbitrary user identifier string that associates a user to a record in your - * system. - */ -- (void)setUserID:(NSString *)userID; - -/** - * Records a non-fatal event described by an NSError object. The events are - * grouped and displayed similarly to crashes. Keep in mind that this method can be expensive. - * The total number of NSErrors that can be recorded during your app's life-cycle is limited by a - * fixed-size circular buffer. If the buffer is overrun, the oldest data is dropped. Errors are - * relayed to Crashlytics on a subsequent launch of your application. - * - * @param error Non-fatal error to be recorded - */ -- (void)recordError:(NSError *)error NS_SWIFT_NAME(record(error:)); - -/** - * Records an Exception Model described by an FIRExceptionModel object. The events are - * grouped and displayed similarly to crashes. Keep in mind that this method can be expensive. - * The total number of FIRExceptionModels that can be recorded during your app's life-cycle is - * limited by a fixed-size circular buffer. If the buffer is overrun, the oldest data is dropped. - * Exception Models are relayed to Crashlytics on a subsequent launch of your application. - * - * @param exceptionModel Instance of the FIRExceptionModel to be recorded - */ -- (void)recordExceptionModel:(FIRExceptionModel *)exceptionModel - NS_SWIFT_NAME(record(exceptionModel:)); - -/** - * Returns whether the app crashed during the previous execution. - */ -- (BOOL)didCrashDuringPreviousExecution; - -/** - * Enables/disables automatic data collection. - * - * Calling this method overrides both the FirebaseCrashlyticsCollectionEnabled flag in your - * App's Info.plist and FIRApp's isDataCollectionDefaultEnabled flag. - * - * When you set a value for this method, it persists across runs of the app. - * - * The value does not apply until the next run of the app. If you want to disable data - * collection without rebooting, add the FirebaseCrashlyticsCollectionEnabled flag to your app's - * Info.plist. - * * - * @param enabled Determines whether automatic data collection is enabled - */ -- (void)setCrashlyticsCollectionEnabled:(BOOL)enabled; - -/** - * Indicates whether or not automatic data collection is enabled - * - * This method uses three ways to decide whether automatic data collection is enabled, - * in order of priority: - * - If setCrashlyticsCollectionEnabled iscalled with a value, use it - * - If the FirebaseCrashlyticsCollectionEnabled key is in your app's Info.plist, use it - * - Otherwise, use the default isDataCollectionDefaultEnabled in FIRApp - */ -- (BOOL)isCrashlyticsCollectionEnabled; - -/** - * Determines whether there are any unsent crash reports cached on the device, then calls the given - * callback. - * - * The callback only executes if automatic data collection is disabled. You can use - * the callback to get one-time consent from a user upon a crash, and then call - * sendUnsentReports or deleteUnsentReports, depending on whether or not the user gives consent. - * - * Disable automatic collection by: - * - Adding the FirebaseCrashlyticsCollectionEnabled: NO key to your App's Info.plist - * - Calling [[FIRCrashlytics crashlytics] setCrashlyticsCollectionEnabled:NO] in your app - * - Setting FIRApp's isDataCollectionDefaultEnabled to NO - * - * @param completion The callback that's executed once Crashlytics finishes checking for unsent - * reports. The callback is set to YES if there are unsent reports on disk. - */ -- (void)checkForUnsentReportsWithCompletion:(void (^)(BOOL))completion - NS_SWIFT_NAME(checkForUnsentReports(completion:)); - -/** - * Enqueues any unsent reports on the device to upload to Crashlytics. - * - * This method only applies if automatic data collection is disabled. - * - * When automatic data collection is enabled, Crashlytics automatically uploads and deletes reports - * at startup, so this method is ignored. - */ -- (void)sendUnsentReports; - -/** - * Deletes any unsent reports on the device. - * - * This method only applies if automatic data collection is disabled. - */ -- (void)deleteUnsentReports; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Public/FIRExceptionModel.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Public/FIRExceptionModel.h deleted file mode 100644 index a0ee1579ee..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Public/FIRExceptionModel.h +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2020 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import - -#import "FIRStackFrame.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - * The Firebase Crashlytics Exception Model provides a way to report custom exceptions - * to Crashlytics that came from a runtime environment outside of the native - * platform Crashlytics is running in. - */ -NS_SWIFT_NAME(ExceptionModel) -@interface FIRExceptionModel : NSObject - -/** :nodoc: */ -- (instancetype)init NS_UNAVAILABLE; - -/** - * Initializes an Exception Model model with the given required fields. - * - * @param name - typically the type of the Exception class - * @param reason - the human-readable reason the issue occurred - */ -- (instancetype)initWithName:(NSString *)name reason:(NSString *)reason; - -/** - * Creates an Exception Model model with the given required fields. - * - * @param name - typically the type of the Exception class - * @param reason - the human-readable reason the issue occurred - */ -+ (instancetype)exceptionModelWithName:(NSString *)name - reason:(NSString *)reason NS_SWIFT_UNAVAILABLE(""); - -/** - * A list of Stack Frames that make up the stack trace. The order of the stack trace is top-first, - * so typically the "main" function is the last element in this list. - */ -@property(nonatomic, copy) NSArray *stackTrace; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Public/FIRStackFrame.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Public/FIRStackFrame.h deleted file mode 100644 index ef9746fbb4..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Public/FIRStackFrame.h +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2020 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - * The Firebase Crashlytics Stack Frame provides a way to construct the lines of - * a stack trace for reporting along with a recorded Exception Model. - */ -NS_SWIFT_NAME(StackFrame) -@interface FIRStackFrame : NSObject - -/** :nodoc: */ -- (instancetype)init NS_UNAVAILABLE; - -/** - * Initializes a symbolicated Stack Frame with the given required fields. Symbolicated - * Stack Frames will appear in the Crashlytics dashboard as reported in these fields. - * - * @param symbol - The function or method name - * @param file - the file where the exception occurred - * @param line - the line number - */ -- (instancetype)initWithSymbol:(NSString *)symbol file:(NSString *)file line:(NSInteger)line; - -/** - * Creates a symbolicated Stack Frame with the given required fields. Symbolicated - * Stack Frames will appear in the Crashlytics dashboard as reported in these fields. * - * - * @param symbol - The function or method name - * @param file - the file where the exception occurred - * @param line - the line number - */ -+ (instancetype)stackFrameWithSymbol:(NSString *)symbol - file:(NSString *)file - line:(NSInteger)line NS_SWIFT_UNAVAILABLE(""); - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Public/FirebaseCrashlytics.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Public/FirebaseCrashlytics.h deleted file mode 100644 index 9022811ba1..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Public/FirebaseCrashlytics.h +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIRCrashlytics.h" -#import "FIRExceptionModel.h" -#import "FIRStackFrame.h" diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Settings/FIRCLSSettingsOnboardingManager.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Settings/FIRCLSSettingsOnboardingManager.h deleted file mode 100644 index 2708d09520..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Settings/FIRCLSSettingsOnboardingManager.h +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import - -#if __has_include() -#import -#else -#import "FBLPromises.h" -#endif - -@class FIRCLSApplicationIdentifierModel; -@class FIRCLSDataCollectionToken; -@class FIRCLSFileManager; -@class FIRCLSInstallIdentifierModel; -@class FIRCLSSettings; - -NS_ASSUME_NONNULL_BEGIN - -/** - * Use this class to retrieve remote settings for the application from crashlytics backend, and - * onboard the application on the server. - */ -@interface FIRCLSSettingsOnboardingManager : NSObject - -/** - * Designated Initializer. - */ -- (instancetype)initWithAppIDModel:(FIRCLSApplicationIdentifierModel *)appIDModel - installIDModel:(FIRCLSInstallIdentifierModel *)installIDModel - settings:(FIRCLSSettings *)settings - fileManager:(FIRCLSFileManager *)fileManager - googleAppID:(NSString *)googleAppID NS_DESIGNATED_INITIALIZER; -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; - -/** - * This method kicks off downloading settings and onboarding for the app. - * @param googleAppID (required) GMP id for the app. - * @param token (required) Data collection token signifying we can make network calls - */ -- (void)beginSettingsAndOnboardingWithGoogleAppId:(NSString *)googleAppID - token:(FIRCLSDataCollectionToken *)token - waitForCompletion:(BOOL)waitForCompletion; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Settings/FIRCLSSettingsOnboardingManager.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Settings/FIRCLSSettingsOnboardingManager.m deleted file mode 100644 index c820d2dcb0..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Settings/FIRCLSSettingsOnboardingManager.m +++ /dev/null @@ -1,243 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSSettingsOnboardingManager.h" - -#import "FIRCLSApplicationIdentifierModel.h" -#import "FIRCLSConstants.h" -#import "FIRCLSDataCollectionToken.h" -#import "FIRCLSDefines.h" -#import "FIRCLSDownloadAndSaveSettingsOperation.h" -#import "FIRCLSFABNetworkClient.h" -#import "FIRCLSFileManager.h" -#import "FIRCLSInstallIdentifierModel.h" -#import "FIRCLSLogger.h" -#import "FIRCLSOnboardingOperation.h" -#import "FIRCLSSettings.h" -#import "FIRCLSURLBuilder.h" - -@interface FIRCLSSettingsOnboardingManager () - -@property(nonatomic, strong) FIRCLSApplicationIdentifierModel *appIDModel; -@property(nonatomic, strong) FIRCLSInstallIdentifierModel *installIDModel; - -@property(nonatomic, strong) FIRCLSSettings *settings; - -@property(nonatomic, nullable, strong) FIRCLSOnboardingOperation *onboardingOperation; -@property(nonatomic, strong) FIRCLSFileManager *fileManager; - -// set to YES once onboarding call has been made. -@property(nonatomic) BOOL hasAttemptedAppConfigure; - -@property(nonatomic) NSDictionary *configuration; -@property(nonatomic) NSDictionary *defaultConfiguration; -@property(nonatomic, copy) NSString *googleAppID; -@property(nonatomic, copy) NSDictionary *kitVersionsByKitBundleIdentifier; -@property(nonatomic, readonly) FIRCLSFABNetworkClient *networkClient; - -@end - -@implementation FIRCLSSettingsOnboardingManager - -- (instancetype)initWithAppIDModel:(FIRCLSApplicationIdentifierModel *)appIDModel - installIDModel:(FIRCLSInstallIdentifierModel *)installIDModel - settings:(FIRCLSSettings *)settings - fileManager:(FIRCLSFileManager *)fileManager - googleAppID:(NSString *)googleAppID { - self = [super init]; - if (!self) { - return nil; - } - - _appIDModel = appIDModel; - _installIDModel = installIDModel; - _settings = settings; - _fileManager = fileManager; - _googleAppID = googleAppID; - - _networkClient = [[FIRCLSFABNetworkClient alloc] initWithQueue:nil]; - - return self; -} - -- (void)beginSettingsAndOnboardingWithGoogleAppId:(NSString *)googleAppID - token:(FIRCLSDataCollectionToken *)token - waitForCompletion:(BOOL)waitForCompletion { - NSParameterAssert(googleAppID); - - self.googleAppID = googleAppID; - - // This map helps us determine what versions of the SDK - // are out there. We're keeping the Fabric value in there for - // backwards compatibility - // TODO(b/141747635) - self.kitVersionsByKitBundleIdentifier = @{ - FIRCLSApplicationGetSDKBundleID() : @CLS_SDK_DISPLAY_VERSION, - }; - - [self beginSettingsDownload:token waitForCompletion:waitForCompletion]; -} - -#pragma mark Helper methods - -/** - * Makes a settings download request. If the request fails, the error is handled silently(with a log - * statement). If the server response indicates onboarding is needed, an onboarding request is sent - * to the server. If the onboarding request fails, the error is handled silently(with a log - * statement). - */ -- (void)beginSettingsDownload:(FIRCLSDataCollectionToken *)token - waitForCompletion:(BOOL)waitForCompletion { - dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); - - FIRCLSDownloadAndSaveSettingsOperation *operation = nil; - operation = [[FIRCLSDownloadAndSaveSettingsOperation alloc] - initWithGoogleAppID:self.googleAppID - delegate:self - settingsURL:self.settingsURL - settingsDirectoryPath:self.fileManager.settingsDirectoryPath - settingsFilePath:self.fileManager.settingsFilePath - installIDModel:self.installIDModel - networkClient:self.networkClient - token:token]; - - if (waitForCompletion) { - operation.asyncCompletion = ^(NSError *error) { - dispatch_semaphore_signal(semaphore); - }; - } - - [operation startWithToken:token]; - - if (waitForCompletion) { - dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); - } -} - -- (void)beginOnboarding:(BOOL)appCreate - endpointString:(NSString *)endpoint - token:(FIRCLSDataCollectionToken *)token { - [self.onboardingOperation cancel]; - - self.onboardingOperation = - [[FIRCLSOnboardingOperation alloc] initWithDelegate:self - shouldCreate:appCreate - googleAppID:self.googleAppID - kitVersionsByKitBundleIdentifier:self.kitVersionsByKitBundleIdentifier - appIdentifierModel:self.appIDModel - endpointString:endpoint - networkClient:self.networkClient - token:token - settings:self.settings]; - - [self.onboardingOperation startWithToken:token]; -} - -- (void)finishNetworkingSession { - [self.networkClient invalidateAndCancel]; -} - -#pragma mark FIRCLSOnboardingOperationDelegate methods - -- (void)onboardingOperation:(FIRCLSOnboardingOperation *)operation - didCompleteAppCreationWithError:(nullable NSError *)error { - if (error) { - FIRCLSErrorLog(@"Unable to complete application configure: %@", error); - [self finishNetworkingSession]; - return; - } - self.onboardingOperation = nil; - FIRCLSDebugLog(@"Completed configure"); - - // now, go get settings, as they can change (and it completes the onboarding process) - [self beginSettingsDownload:operation.token waitForCompletion:NO]; -} - -- (void)onboardingOperation:(FIRCLSOnboardingOperation *)operation - didCompleteAppUpdateWithError:(nullable NSError *)error { - [self finishNetworkingSession]; - if (error) { - FIRCLSErrorLog(@"Unable to complete application update: %@", error); - return; - } - self.onboardingOperation = nil; - FIRCLSDebugLog(@"Completed application update"); -} - -#pragma mark FIRCLSDownloadAndSaveSettingsOperationDelegate methods - -- (void)operation:(FIRCLSDownloadAndSaveSettingsOperation *)operation - didDownloadAndSaveSettingsWithError:(nullable NSError *)error { - if (error) { - FIRCLSErrorLog(@"Failed to download settings %@", error); - [self finishNetworkingSession]; - return; - } - - FIRCLSDebugLog(@"Settings downloaded successfully"); - - NSTimeInterval currentTimestamp = [NSDate timeIntervalSinceReferenceDate]; - [self.settings cacheSettingsWithGoogleAppID:self.googleAppID currentTimestamp:currentTimestamp]; - - // only try this once - if (self.hasAttemptedAppConfigure) { - FIRCLSDebugLog(@"App already onboarded in this run of the app"); - [self finishNetworkingSession]; - return; - } - - // Onboarding is still needed in Firebase, here are the backend app states - - // 1. When the app is created in the Firebase console, app state: built (client settings call - // returns app status: new) - // 2. After onboarding call is made, app state: build_configured - // 3. Another settings call is triggered after onboarding, app state: activated - if ([self.settings appNeedsOnboarding]) { - FIRCLSDebugLog(@"Starting onboarding with app create"); - self.hasAttemptedAppConfigure = YES; - [self beginOnboarding:YES endpointString:FIRCLSConfigureEndpoint token:operation.token]; - return; - } - - if ([self.settings appUpdateRequired]) { - FIRCLSDebugLog(@"Starting onboarding with app update"); - self.hasAttemptedAppConfigure = YES; - [self beginOnboarding:NO endpointString:FIRCLSConfigureEndpoint token:operation.token]; - return; - } - - // we're all set! - [self finishNetworkingSession]; -} - -- (NSURL *)settingsURL { - // GET - // /spi/v2/platforms/:platform/apps/:identifier/settings?build_version=1234&display_version=abc&instance=xyz&source=1 - FIRCLSURLBuilder *url = [FIRCLSURLBuilder URLWithBase:FIRCLSSettingsEndpoint]; - - [url appendComponent:@"/spi/v2/platforms/"]; - [url escapeAndAppendComponent:self.appIDModel.platform]; - [url appendComponent:@"/gmp/"]; - [url escapeAndAppendComponent:self.googleAppID]; - [url appendComponent:@"/settings"]; - - [url appendValue:self.appIDModel.buildVersion forQueryParam:@"build_version"]; - [url appendValue:self.appIDModel.displayVersion forQueryParam:@"display_version"]; - [url appendValue:self.appIDModel.buildInstanceID forQueryParam:@"instance"]; - [url appendValue:@(self.appIDModel.installSource) forQueryParam:@"source"]; - // TODO: find the right param name for KitVersions and add them here - return url.URL; -} - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Settings/Models/FIRCLSApplicationIdentifierModel.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Settings/Models/FIRCLSApplicationIdentifierModel.h deleted file mode 100644 index 3bc75630b2..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Settings/Models/FIRCLSApplicationIdentifierModel.h +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import - -#import "FIRCLSApplication.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - * This class is a model for identifiers related to the application binary. - * It is thread-safe. - */ -@interface FIRCLSApplicationIdentifierModel : NSObject - -@property(nonatomic, readonly, nullable) NSString* bundleID; - -/** - * Returns the user-facing app name - */ -@property(nonatomic, readonly, nullable) NSString* displayName; - -@property(nonatomic, readonly, nullable) NSString* platform; -@property(nonatomic, readonly, nullable) NSString* buildVersion; -@property(nonatomic, readonly, nullable) NSString* displayVersion; - -/** - * Returns the synthesized app version, similar to how the backend does it - * () - */ -@property(nonatomic, readonly, nullable) NSString* synthesizedVersion; - -@property(nonatomic, readonly) FIRCLSApplicationInstallationSourceType installSource; - -/** - * A mapping between all supported architectures and their UUIDs - */ -@property(nonatomic, readonly) NSDictionary* architectureUUIDMap; - -/** - * Returns the linked OS SDK - */ -@property(nonatomic, readonly) NSString* builtSDKString; - -/** - * Returns the min supported OS - */ -@property(nonatomic, readonly) NSString* minimumSDKString; - -/** - * The unique identifier for this instance of the version of app running Crashlytics. This is - * computed by hashing the app itself. - * - * On Android, this is called the Build ID - */ -@property(nonatomic, readonly) NSString* buildInstanceID; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Settings/Models/FIRCLSApplicationIdentifierModel.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Settings/Models/FIRCLSApplicationIdentifierModel.m deleted file mode 100644 index 3429df4d8d..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Settings/Models/FIRCLSApplicationIdentifierModel.m +++ /dev/null @@ -1,138 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSApplicationIdentifierModel.h" - -#import "FIRCLSApplication.h" -#import "FIRCLSByteUtility.h" -#import "FIRCLSDefines.h" -#import "FIRCLSMachO.h" -#import "FIRCLSUUID.h" - -@interface FIRCLSApplicationIdentifierModel () - -@property(nonatomic, copy, readwrite) NSDictionary *architectureUUIDMap; -@property(nonatomic, copy, readwrite) NSString *buildInstanceID; -@property(nonatomic, readonly) FIRCLSMachOVersion builtSDK; -@property(nonatomic, readonly) FIRCLSMachOVersion minimumSDK; - -@end - -@implementation FIRCLSApplicationIdentifierModel - -- (nullable instancetype)init { - self = [super init]; - if (!self) { - return nil; - } - - if (![self computeExecutableInfo]) { - return nil; - } - - [self computeInstanceIdentifier]; - - return self; -} - -- (NSString *)bundleID { - return FIRCLSApplicationGetBundleIdentifier(); -} - -- (NSString *)displayName { - return FIRCLSApplicationGetName(); -} - -- (NSString *)platform { - return FIRCLSApplicationGetPlatform(); -} - -- (NSString *)buildVersion { - return FIRCLSApplicationGetBundleVersion(); -} - -- (NSString *)displayVersion { - return FIRCLSApplicationGetShortBundleVersion(); -} - -- (NSString *)synthesizedVersion { - return [NSString stringWithFormat:@"%@ (%@)", self.displayVersion, self.buildVersion]; -} - -- (FIRCLSApplicationInstallationSourceType)installSource { - return FIRCLSApplicationInstallationSource(); -} - -- (NSString *)builtSDKString { - return FIRCLSMachOFormatVersion(&_builtSDK); -} - -- (NSString *)minimumSDKString { - return FIRCLSMachOFormatVersion(&_minimumSDK); -} - -- (BOOL)computeExecutableInfo { - struct FIRCLSMachOFile file; - - if (!FIRCLSMachOFileInitWithCurrent(&file)) { - return NO; - } - - NSMutableDictionary *executables = [NSMutableDictionary dictionary]; - - FIRCLSMachOFileEnumerateSlices(&file, ^(FIRCLSMachOSliceRef fileSlice) { - NSString *arch; - - arch = [NSString stringWithUTF8String:FIRCLSMachOSliceGetArchitectureName(fileSlice)]; - - FIRCLSMachOSliceEnumerateLoadCommands( - fileSlice, ^(uint32_t type, uint32_t size, const struct load_command *cmd) { - if (type == LC_UUID) { - const uint8_t *uuid; - - uuid = FIRCLSMachOGetUUID(cmd); - - [executables setObject:FIRCLSUUIDToNSString(uuid) forKey:arch]; - } else if (type == LC_VERSION_MIN_MACOSX || type == LC_VERSION_MIN_IPHONEOS) { - self->_minimumSDK = FIRCLSMachOGetMinimumOSVersion(cmd); - self->_builtSDK = FIRCLSMachOGetLinkedSDKVersion(cmd); - } - }); - }); - - FIRCLSMachOFileDestroy(&file); - - _architectureUUIDMap = executables; - - return YES; -} - -- (void)computeInstanceIdentifier { - // build up the components of the instance identifier - NSMutableString *string = [NSMutableString string]; - - // first, the uuids, sorted by architecture name - for (NSString *key in - [[_architectureUUIDMap allKeys] sortedArrayUsingSelector:@selector(compare:)]) { - [string appendString:[self.architectureUUIDMap objectForKey:key]]; - } - - // TODO: the instance identifier calculation needs to match Beta's expectation. So, we have to - // continue generating a less-correct value for now. One day, we should encorporate a hash of the - // Info.plist and icon data. - - _buildInstanceID = FIRCLSHashNSData([string dataUsingEncoding:NSUTF8StringEncoding]); -} - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Settings/Operations/FIRCLSDownloadAndSaveSettingsOperation.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Settings/Operations/FIRCLSDownloadAndSaveSettingsOperation.h deleted file mode 100644 index 318089ff93..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Settings/Operations/FIRCLSDownloadAndSaveSettingsOperation.h +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import -#import "FIRCLSNetworkOperation.h" - -@class FIRCLSDownloadAndSaveSettingsOperation; -@class FIRCLSFABNetworkClient; -@class FIRCLSInstallIdentifierModel; - -NS_ASSUME_NONNULL_BEGIN - -/** - * This is the protocol that a delegate of FIRCLSDownloadAndSaveSettingsOperation needs to follow. - */ -@protocol FIRCLSDownloadAndSaveSettingsOperationDelegate - -@required - -/** - * Method that is called when settings have been downloaded and saved, or an error has occurred - * during the operation. This method may be called on an arbitrary background thread. - */ -- (void)operation:(FIRCLSDownloadAndSaveSettingsOperation *)operation - didDownloadAndSaveSettingsWithError:(nullable NSError *)error; - -@end - -/** - * This operation downloads settings from the backend servers, and saves them in file on disk. - */ -@interface FIRCLSDownloadAndSaveSettingsOperation : FIRCLSNetworkOperation - -- (instancetype)initWithGoogleAppID:(NSString *)googleAppID - token:(FIRCLSDataCollectionToken *)token NS_UNAVAILABLE; - -/** - * @param googleAppID must NOT be nil - * @param delegate gets a callback after settings have been downloaded or an error occurs. - * @param settingsURL must NOT be nil. This is the URL to which a download request is made. - * @param settingsDirectoryPath must NOT be nil. This is the directory on disk where the settings - * are persisted. - * @param settingsFilePath must NOT be nil. It is the full file path(including file name) in which - * settings will be persisted on disk. - * @param installIDModel must NOT be nil. This value is sent back to the backend to uniquely - * identify the app install. - */ -- (instancetype)initWithGoogleAppID:(NSString *)googleAppID - delegate:(id)delegate - settingsURL:(NSURL *)settingsURL - settingsDirectoryPath:(NSString *)settingsDirectoryPath - settingsFilePath:(NSString *)settingsFilePath - installIDModel:(FIRCLSInstallIdentifierModel *)installIDModel - networkClient:(FIRCLSFABNetworkClient *)networkClient - token:(FIRCLSDataCollectionToken *)token NS_DESIGNATED_INITIALIZER; - -/** - * Delegate of this operation. - */ -@property(nonatomic, readonly, weak) id delegate; - -/** - * When an error occurs during this operation, it is made available in this property. - */ -@property(nonatomic, readonly) NSError *error; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Settings/Operations/FIRCLSDownloadAndSaveSettingsOperation.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Settings/Operations/FIRCLSDownloadAndSaveSettingsOperation.m deleted file mode 100644 index 9d32f91509..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Settings/Operations/FIRCLSDownloadAndSaveSettingsOperation.m +++ /dev/null @@ -1,132 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSDownloadAndSaveSettingsOperation.h" - -#import "FIRCLSConstants.h" -#import "FIRCLSFABHost.h" -#import "FIRCLSFABNetworkClient.h" -#import "FIRCLSInstallIdentifierModel.h" -#import "FIRCLSLogger.h" - -@interface FIRCLSDownloadAndSaveSettingsOperation () - -/** - * Method called to fetch the URL from where settings have to be downloaded. - */ -@property(readonly, nonatomic) NSURL *settingsURL; -/** - * File manager which will be used to save settings on disk. - */ -@property(readonly, nonatomic) NSFileManager *fileManager; - -/** - * Directory path on which settings file will be saved - */ -@property(readonly, nonatomic) NSString *settingsDirectoryPath; -/** - * Complete file path on which settings file will be saved - */ -@property(readonly, nonatomic) NSString *settingsFilePath; -/** - * App install identifier. - */ -@property(strong, readonly, nonatomic) FIRCLSInstallIdentifierModel *installIDModel; - -@property(weak, readonly, nonatomic) FIRCLSFABNetworkClient *networkClient; - -@end - -@implementation FIRCLSDownloadAndSaveSettingsOperation - -- (instancetype)initWithGoogleAppID:(NSString *)googleAppID - delegate:(id)delegate - settingsURL:(NSURL *)settingsURL - settingsDirectoryPath:(NSString *)settingsDirectoryPath - settingsFilePath:(NSString *)settingsFilePath - installIDModel:(FIRCLSInstallIdentifierModel *)installIDModel - networkClient:(FIRCLSFABNetworkClient *)networkClient - token:(FIRCLSDataCollectionToken *)token { - NSParameterAssert(settingsURL); - NSParameterAssert(settingsDirectoryPath); - NSParameterAssert(settingsFilePath); - NSParameterAssert(installIDModel); - - self = [super initWithGoogleAppID:googleAppID token:token]; - if (self) { - _delegate = delegate; - _settingsURL = settingsURL.copy; - _settingsDirectoryPath = settingsDirectoryPath.copy; - _settingsFilePath = settingsFilePath.copy; - _fileManager = [[NSFileManager alloc] init]; - _installIDModel = installIDModel; - _networkClient = networkClient; - } - return self; -} - -- (NSMutableURLRequest *)mutableRequestWithDefaultHTTPHeaderFieldsAndTimeoutForURL:(NSURL *)url { - NSMutableURLRequest *request = - [super mutableRequestWithDefaultHTTPHeaderFieldsAndTimeoutForURL:url]; - request.HTTPMethod = @"GET"; - [request setValue:@"application/json" forHTTPHeaderField:@"Accept"]; - [request setValue:self.installIDModel.installID - forHTTPHeaderField:@"X-Crashlytics-Installation-ID"]; - [request setValue:FIRCLSHostModelInfo() forHTTPHeaderField:@"X-Crashlytics-Device-Model"]; - [request setValue:FIRCLSHostOSBuildVersion() - forHTTPHeaderField:@"X-Crashlytics-OS-Build-Version"]; - [request setValue:FIRCLSHostOSDisplayVersion() - forHTTPHeaderField:@"X-Crashlytics-OS-Display-Version"]; - [request setValue:FIRCLSVersion forHTTPHeaderField:@"X-Crashlytics-API-Client-Version"]; - - return request; -} - -- (void)main { - NSMutableURLRequest *request = - [self mutableRequestWithDefaultHTTPHeaderFieldsAndTimeoutForURL:self.settingsURL]; - - [self.networkClient - startDownloadTaskWithRequest:request - retryLimit:1 - completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) { - if (error) { - self->_error = error; - [self.delegate operation:self didDownloadAndSaveSettingsWithError:self.error]; - [self finishWithError:error]; - return; - } - // This move needs to happen synchronously, because after this method completes, - // the file will not be available. - NSError *moveError = nil; - - // this removal will frequently fail, and we don't want the warning - [self.fileManager removeItemAtPath:self.settingsDirectoryPath error:nil]; - - [self.fileManager createDirectoryAtPath:self.settingsDirectoryPath - withIntermediateDirectories:YES - attributes:nil - error:nil]; - if (![self.fileManager moveItemAtPath:location.path - toPath:self.settingsFilePath - error:&moveError]) { - FIRCLSErrorLog(@"Unable to complete settings download %@", moveError); - self->_error = moveError; - } - [self.delegate operation:self didDownloadAndSaveSettingsWithError:self.error]; - [self finishWithError:self.error]; - }]; -} - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Settings/Operations/FIRCLSNetworkOperation.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Settings/Operations/FIRCLSNetworkOperation.h deleted file mode 100644 index a449903f7a..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Settings/Operations/FIRCLSNetworkOperation.h +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import -#import "FIRCLSOperation.h" - -NS_ASSUME_NONNULL_BEGIN - -@class FIRCLSDataCollectionToken; -@class FIRCLSSettings; - -/** - * This is a base class for network based operations. - */ -@interface FIRCLSNetworkOperation : FIRCLSFABAsyncOperation - -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; - -/** - * Designated initializer. All parameters are mandatory and must not be nil. - */ -- (instancetype)initWithGoogleAppID:(NSString *)googleAppID - token:(FIRCLSDataCollectionToken *)token NS_DESIGNATED_INITIALIZER; - -- (void)start NS_UNAVAILABLE; -- (void)startWithToken:(FIRCLSDataCollectionToken *)token; - -/** - * Creates a mutable request for posting to Crashlytics backend with a default timeout. - */ -- (NSMutableURLRequest *)mutableRequestWithDefaultHTTPHeaderFieldsAndTimeoutForURL:(NSURL *)url; - -/** - * Creates a mutable request for posting to Crashlytics backend with given timeout. - */ -- (NSMutableURLRequest *)mutableRequestWithDefaultHTTPHeadersForURL:(NSURL *)url - timeout:(NSTimeInterval)timeout; - -@property(nonatomic, strong, readonly) FIRCLSDataCollectionToken *token; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Settings/Operations/FIRCLSNetworkOperation.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Settings/Operations/FIRCLSNetworkOperation.m deleted file mode 100644 index 52b77c19c2..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Settings/Operations/FIRCLSNetworkOperation.m +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSNetworkOperation.h" - -#import "FIRCLSApplication.h" -#import "FIRCLSConstants.h" -#import "FIRCLSDataCollectionToken.h" -#import "FIRCLSDefines.h" -#import "FIRCLSLogger.h" - -@interface FIRCLSNetworkOperation () - -@property(nonatomic, strong, readonly) NSString *googleAppID; - -@end - -@implementation FIRCLSNetworkOperation - -- (instancetype)initWithGoogleAppID:(NSString *)googleAppID - token:(FIRCLSDataCollectionToken *)token { - NSParameterAssert(googleAppID); - if (!googleAppID) { - return nil; - } - - self = [super init]; - if (self) { - _googleAppID = googleAppID; - _token = token; - } - return self; -} - -- (void)startWithToken:(FIRCLSDataCollectionToken *)token { - // Settings and Onboarding are considered data collection, so we must only - // call this with a valid token - if (![token isValid]) { - FIRCLSErrorLog(@"Skipping network operation with invalid data collection token"); - return; - } - - [super start]; -} - -- (NSMutableURLRequest *)mutableRequestWithDefaultHTTPHeaderFieldsAndTimeoutForURL:(NSURL *)url { - return [self mutableRequestWithDefaultHTTPHeadersForURL:url timeout:10.0]; -} - -- (NSMutableURLRequest *)mutableRequestWithDefaultHTTPHeadersForURL:(NSURL *)url - timeout:(NSTimeInterval)timeout { - NSMutableURLRequest *request = - [NSMutableURLRequest requestWithURL:url - cachePolicy:NSURLRequestReloadIgnoringLocalCacheData - timeoutInterval:timeout]; - - NSString *localeId = self.localeIdentifier; - - [request setValue:self.userAgentString forHTTPHeaderField:FIRCLSNetworkUserAgent]; - [request setValue:FIRCLSNetworkUTF8 forHTTPHeaderField:FIRCLSNetworkAcceptCharset]; - [request setValue:localeId forHTTPHeaderField:FIRCLSNetworkAcceptLanguage]; - [request setValue:localeId forHTTPHeaderField:FIRCLSNetworkContentLanguage]; - [request setValue:FIRCLSDeveloperToken forHTTPHeaderField:FIRCLSNetworkCrashlyticsDeveloperToken]; - [request setValue:FIRCLSApplicationGetSDKBundleID() - forHTTPHeaderField:FIRCLSNetworkCrashlyticsAPIClientId]; - [request setValue:FIRCLSVersion - forHTTPHeaderField:FIRCLSNetworkCrashlyticsAPIClientDisplayVersion]; - [request setValue:self.googleAppID forHTTPHeaderField:FIRCLSNetworkCrashlyticsGoogleAppId]; - - return request; -} - -- (NSString *)userAgentString { - return [NSString stringWithFormat:@"%@/%@", FIRCLSApplicationGetSDKBundleID(), FIRCLSVersion]; -} - -- (NSString *)localeIdentifier { - return NSLocale.currentLocale.localeIdentifier; -} - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Settings/Operations/FIRCLSOnboardingOperation.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Settings/Operations/FIRCLSOnboardingOperation.h deleted file mode 100644 index 14d56ed645..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Settings/Operations/FIRCLSOnboardingOperation.h +++ /dev/null @@ -1,84 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import -#import "FIRCLSApplicationIdentifierModel.h" -#import "FIRCLSDataCollectionToken.h" -#import "FIRCLSNetworkOperation.h" - -NS_ASSUME_NONNULL_BEGIN - -extern NSString *const FIRCLSOnboardingErrorDomain; - -@class FIRCLSOnboardingOperation; -@class FIRCLSFABNetworkClient; -@class FIRCLSSettings; - -/** - * This is the protocol that a delegate of FIRCLSOnboardingOperation should follow. - */ -@protocol FIRCLSOnboardingOperationDelegate -@required - -/** - * This callback is for the delegate to know that app update has completed with/without an error. - */ -- (void)onboardingOperation:(FIRCLSOnboardingOperation *)operation - didCompleteAppUpdateWithError:(nullable NSError *)error; -/** - * This callback is for the delegate to know that app creation has completed with/without an error. - */ -- (void)onboardingOperation:(FIRCLSOnboardingOperation *)operation - didCompleteAppCreationWithError:(nullable NSError *)error; - -@end - -/** - * This class onboards the app, by making request to the backend servers. - */ -@interface FIRCLSOnboardingOperation : FIRCLSNetworkOperation - -/** - * When an error occurs during this operation, it is made available in this property. - */ -@property(nonatomic, readonly) NSError *error; - -- (instancetype)initWithGoogleAppID:(NSString *)googleAppID - token:(FIRCLSDataCollectionToken *)token NS_UNAVAILABLE; - -/** - * Designated initializer. - * @param delegate may be nil. Gets callbacks when app creation or updation succeeds or gets errored - * out. - * @param googleAppID must NOT be nil. - * @param kitVersionsByKitBundleIdentifier may be nil. Maps Kit bundle identifier to kit version - * being used in the app. - * @param appIdentifierModel must NOT be nil. Used to get information required in the onboarding - * network call. - * @param appEndPoint must NOT be nil. Endpoint which needs to be hit with the onboarding request. - * @param settings which are used to fetch the organization identifier. - */ -- (instancetype)initWithDelegate:(id)delegate - shouldCreate:(BOOL)shouldCreate - googleAppID:(NSString *)googleAppID - kitVersionsByKitBundleIdentifier:(NSDictionary *)kitVersionsByKitBundleIdentifier - appIdentifierModel:(FIRCLSApplicationIdentifierModel *)appIdentifierModel - endpointString:(NSString *)appEndPoint - networkClient:(FIRCLSFABNetworkClient *)networkClient - token:(FIRCLSDataCollectionToken *)token - settings:(FIRCLSSettings *)settings NS_DESIGNATED_INITIALIZER; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Settings/Operations/FIRCLSOnboardingOperation.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Settings/Operations/FIRCLSOnboardingOperation.m deleted file mode 100644 index ce2e58b5c0..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Settings/Operations/FIRCLSOnboardingOperation.m +++ /dev/null @@ -1,208 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSOnboardingOperation.h" - -#import "FIRCLSByteUtility.h" -#import "FIRCLSConstants.h" -#import "FIRCLSFABNetworkClient.h" -#import "FIRCLSLogger.h" -#import "FIRCLSMachO.h" -#import "FIRCLSMultipartMimeStreamEncoder.h" -#import "FIRCLSSettings.h" -#import "FIRCLSURLBuilder.h" - -// The SPIv1/v2 onboarding flow looks something like this: -// - get settings -// - settings says we're good, nothing to do -// - settings says update -// - do an update -// - settings says new -// - do a create -// - get settings again (and do *not* take action after that) - -NSString *const FIRCLSOnboardingErrorDomain = @"FIRCLSOnboardingErrorDomain"; - -typedef NS_ENUM(NSInteger, FIRCLSOnboardingError) { - FIRCLSOnboardingErrorMultipartMimeConfiguration -}; - -@interface FIRCLSOnboardingOperation () - -@property(nonatomic) BOOL shouldCreate; -@property(nonatomic, readonly) FIRCLSApplicationIdentifierModel *appIdentifierModel; -@property(nonatomic, readonly) NSString *appEndpoint; -@property(nonatomic, readonly, unsafe_unretained) id delegate; -@property(nonatomic, weak, readonly) FIRCLSFABNetworkClient *networkClient; -@property(nonatomic, readonly) NSDictionary *kitVersionsByKitBundleIdentifier; -@property(nonatomic, readonly) FIRCLSSettings *settings; -@end - -@implementation FIRCLSOnboardingOperation - -#pragma mark lifecycle methods - -- (instancetype)initWithDelegate:(id)delegate - shouldCreate:(BOOL)shouldCreate - googleAppID:(NSString *)googleAppID - kitVersionsByKitBundleIdentifier:(NSDictionary *)kitVersionsByKitBundleIdentifier - appIdentifierModel:(FIRCLSApplicationIdentifierModel *)appIdentifierModel - endpointString:(NSString *)appEndPoint - networkClient:(FIRCLSFABNetworkClient *)networkClient - token:(FIRCLSDataCollectionToken *)token - settings:(FIRCLSSettings *)settings { - NSParameterAssert(appIdentifierModel); - NSParameterAssert(appEndPoint); - - self = [super initWithGoogleAppID:googleAppID token:token]; - if (self) { - _shouldCreate = shouldCreate; - _delegate = delegate; - _appIdentifierModel = appIdentifierModel; - _appEndpoint = appEndPoint; - _networkClient = networkClient; - _kitVersionsByKitBundleIdentifier = kitVersionsByKitBundleIdentifier.copy; - _settings = settings; - } - return self; -} - -- (void)main { - [self beginAppConfigure]; -} - -- (void)beginAppConfigure { - NSOutputStream *stream = [[NSOutputStream alloc] initToMemory]; - NSString *boundary = [FIRCLSMultipartMimeStreamEncoder generateBoundary]; - - FIRCLSMultipartMimeStreamEncoder *encoder = - [FIRCLSMultipartMimeStreamEncoder encoderWithStream:stream andBoundary:boundary]; - if (!encoder) { - FIRCLSErrorLog(@"Configure failed during onboarding"); - [self finishWithError:[self errorForCode:FIRCLSOnboardingErrorMultipartMimeConfiguration - userInfo:@{ - NSLocalizedDescriptionKey : @"Multipart mime encoder was nil" - }]]; - return; - } - - NSString *orgID = [self.settings orgID]; - if (!orgID) { - FIRCLSErrorLog(@"Could not onboard app with missing Organization ID"); - [self finishWithError:[self errorForCode:FIRCLSOnboardingErrorMultipartMimeConfiguration - userInfo:@{ - NSLocalizedDescriptionKey : @"Organization ID was nil" - }]]; - return; - } - - [encoder encode:^{ - [encoder addValue:orgID fieldName:@"org_id"]; - - [encoder addValue:self.settings.fetchedBundleID fieldName:@"app[identifier]"]; - [encoder addValue:self.appIdentifierModel.buildInstanceID - fieldName:@"app[instance_identifier]"]; - [encoder addValue:self.appIdentifierModel.displayName fieldName:@"app[name]"]; - [encoder addValue:self.appIdentifierModel.buildVersion fieldName:@"app[build_version]"]; - [encoder addValue:self.appIdentifierModel.displayVersion fieldName:@"app[display_version]"]; - [encoder addValue:@(self.appIdentifierModel.installSource) fieldName:@"app[source]"]; - [encoder addValue:self.appIdentifierModel.minimumSDKString - fieldName:@"app[minimum_sdk_version]"]; - [encoder addValue:self.appIdentifierModel.builtSDKString fieldName:@"app[built_sdk_version]"]; - [self.kitVersionsByKitBundleIdentifier - enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { - NSString *formKey = [NSString stringWithFormat:@"%@[%@]", @"app[build][libraries]", key]; - [encoder addValue:obj fieldName:formKey]; - }]; - - [self.appIdentifierModel.architectureUUIDMap - enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { - [encoder addValue:key fieldName:@"app[slices][][arch]"]; - [encoder addValue:obj fieldName:@"app[slices][][uuid]"]; - }]; - }]; - - NSMutableURLRequest *request = [self onboardingRequestForAppCreate:self.shouldCreate]; - [request setValue:orgID forHTTPHeaderField:FIRCLSNetworkCrashlyticsOrgId]; - - [request setValue:encoder.contentTypeHTTPHeaderValue forHTTPHeaderField:@"Content-Type"]; - [request setValue:encoder.contentLengthHTTPHeaderValue forHTTPHeaderField:@"Content-Length"]; - [request setHTTPBody:[stream propertyForKey:NSStreamDataWrittenToMemoryStreamKey]]; - - // Retry only when onboarding an app for the first time, otherwise it'll overwhelm our servers - NSUInteger retryLimit = self.shouldCreate ? 10 : 1; - - [self.networkClient - startDataTaskWithRequest:request - retryLimit:retryLimit - completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { - self->_error = error; - if (!self.shouldCreate) { - [self.delegate onboardingOperation:self didCompleteAppUpdateWithError:error]; - } else { - [self.delegate onboardingOperation:self didCompleteAppCreationWithError:error]; - } - [self finishWithError:error]; - }]; -} - -#pragma mark private methods - -- (NSError *)errorForCode:(NSUInteger)code userInfo:(NSDictionary *)userInfo { - return [NSError errorWithDomain:FIRCLSOnboardingErrorDomain code:code userInfo:userInfo]; -} - -- (NSURL *)appCreateURL { - // https://update.crashlytics.com/spi/v1/platforms/mac/apps/com.crashlytics.mac - - FIRCLSURLBuilder *url = [FIRCLSURLBuilder URLWithBase:self.appEndpoint]; - - [url appendComponent:@"/spi/v1/platforms/"]; - [url escapeAndAppendComponent:self.appIdentifierModel.platform]; - [url appendComponent:@"/apps"]; - - return url.URL; -} - -- (NSURL *)appUpdateURL { - // https://update.crashlytics.com/spi/v1/platforms/mac/apps/com.crashlytics.mac - - FIRCLSURLBuilder *url = [FIRCLSURLBuilder URLWithBase:[self appEndpoint]]; - - [url appendComponent:@"/spi/v1/platforms/"]; - [url escapeAndAppendComponent:self.appIdentifierModel.platform]; - [url appendComponent:@"/apps/"]; - [url escapeAndAppendComponent:self.settings.fetchedBundleID]; - - return url.URL; -} - -- (NSMutableURLRequest *)onboardingRequestForAppCreate:(BOOL)shouldCreate { - const NSTimeInterval timeout = 10.0; - NSURL *url = nil; - NSString *httpVerb = nil; - if (shouldCreate) { - httpVerb = @"POST"; - url = self.appCreateURL; - } else { - httpVerb = @"PUT"; - url = self.appUpdateURL; - } - NSMutableURLRequest *request = [self mutableRequestWithDefaultHTTPHeadersForURL:url - timeout:timeout]; - request.HTTPMethod = httpVerb; - return request; -} - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Unwind/Compact/FIRCLSCompactUnwind.c b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Unwind/Compact/FIRCLSCompactUnwind.c deleted file mode 100644 index 1875f98120..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Unwind/Compact/FIRCLSCompactUnwind.c +++ /dev/null @@ -1,404 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "FIRCLSCompactUnwind_Private.h" -#include "FIRCLSDataParsing.h" -#include "FIRCLSDefines.h" -#include "FIRCLSDwarfUnwind.h" -#include "FIRCLSFeatures.h" -#include "FIRCLSUnwind.h" -#include "FIRCLSUtility.h" - -#include - -#if CLS_COMPACT_UNWINDING_SUPPORTED - -#pragma mark Parsing -bool FIRCLSCompactUnwindInit(FIRCLSCompactUnwindContext* context, - const void* unwindInfo, - const void* ehFrame, - uintptr_t loadAddress) { - if (!FIRCLSIsValidPointer(context)) { - FIRCLSSDKLog("Error: invalid context passed to compact unwind init"); - return false; - } - if (!FIRCLSIsValidPointer(unwindInfo)) { - FIRCLSSDKLog("Error: invalid unwind info passed to compact unwind init"); - return false; - } - if (!FIRCLSIsValidPointer(loadAddress)) { - FIRCLSSDKLog("Error: invalid load address passed to compact unwind init"); - return false; - } - - memset(context, 0, sizeof(FIRCLSCompactUnwindContext)); - - if (!FIRCLSReadMemory((vm_address_t)unwindInfo, &context->unwindHeader, - sizeof(struct unwind_info_section_header))) { - FIRCLSSDKLog("Error: could not read memory contents of unwindInfo\n"); - return false; - } - - if (context->unwindHeader.version != UNWIND_SECTION_VERSION) { - FIRCLSSDKLog("Error: bad unwind_info structure version (%d != %d)\n", - context->unwindHeader.version, UNWIND_SECTION_VERSION); - return false; - } - - // copy in the values - context->unwindInfo = unwindInfo; - context->ehFrame = ehFrame; - context->loadAddress = loadAddress; - - return true; -} - -void* FIRCLSCompactUnwindGetIndexData(FIRCLSCompactUnwindContext* context) { - return (void*)((uintptr_t)context->unwindInfo + - (uintptr_t)context->unwindHeader.indexSectionOffset); -} - -compact_unwind_encoding_t* FIRCLSCompactUnwindGetCommonEncodings( - FIRCLSCompactUnwindContext* context) { - return (compact_unwind_encoding_t*)((uintptr_t)context->unwindInfo + - (uintptr_t) - context->unwindHeader.commonEncodingsArraySectionOffset); -} - -void* FIRCLSCompactUnwindGetSecondLevelData(FIRCLSCompactUnwindContext* context) { - return (void*)((uintptr_t)context->unwindInfo + - context->indexHeader.secondLevelPagesSectionOffset); -} - -uintptr_t FIRCLSCompactUnwindGetIndexFunctionOffset(FIRCLSCompactUnwindContext* context) { - return context->loadAddress + context->indexHeader.functionOffset; -} -uintptr_t FIRCLSCompactUnwindGetTargetAddress(FIRCLSCompactUnwindContext* context, uintptr_t pc) { - uintptr_t offset = FIRCLSCompactUnwindGetIndexFunctionOffset(context); - - if (pc <= offset) { - FIRCLSSDKLog("Error: PC is invalid\n"); - return 0; - } - - return pc - offset; -} - -#pragma mark - Parsing and Lookup -bool FIRCLSCompactUnwindLookupFirstLevel(FIRCLSCompactUnwindContext* context, uintptr_t address) { - if (!context) { - return false; - } - - // In practice, it appears that there always one more first level entry - // than required. This actually makes sense, since we have to use this - // info to check if we are in range. This implies there must be - // at least 2 indices at a minimum. - - uint32_t indexCount = context->unwindHeader.indexCount; - if (indexCount < 2) { - return false; - } - - // make sure our address is valid - if (address < context->loadAddress) { - return false; - } - - struct unwind_info_section_header_index_entry* indexEntries = - FIRCLSCompactUnwindGetIndexData(context); - if (!indexEntries) { - return false; - } - - address -= context->loadAddress; // search relative to zero - - // minus one because of the extra entry - see comment above - for (uint32_t index = 0; index < indexCount - 1; ++index) { - uint32_t value = indexEntries[index].functionOffset; - uint32_t nextValue = indexEntries[index + 1].functionOffset; - - if (address >= value && address < nextValue) { - context->firstLevelNextFunctionOffset = nextValue; - context->indexHeader = indexEntries[index]; - return true; - } - } - - return false; -} - -uint32_t FIRCLSCompactUnwindGetSecondLevelPageKind(FIRCLSCompactUnwindContext* context) { - if (!context) { - return 0; - } - - return *(uint32_t*)FIRCLSCompactUnwindGetSecondLevelData(context); -} - -bool FIRCLSCompactUnwindLookupSecondLevelRegular(FIRCLSCompactUnwindContext* context, - uintptr_t pc, - FIRCLSCompactUnwindResult* result) { - FIRCLSSDKLog("Encountered a regular second-level page\n"); - return false; -} - -// this only works for compressed entries right now -bool FIRCLSCompactUnwindBinarySearchSecondLevel(uintptr_t address, - uint32_t* index, - uint16_t entryCount, - uint32_t* entryArray) { - if (!index || !entryArray) { - return false; - } - - if (entryCount == 0) { - return false; - } - - if (address == 0) { - return false; - } - - uint32_t highIndex = entryCount; - *index = 0; - - while (*index < highIndex) { - uint32_t midIndex = (*index + highIndex) / 2; - - // FIRCLSSDKLog("%u %u %u\n", *index, midIndex, highIndex); - - uintptr_t value = UNWIND_INFO_COMPRESSED_ENTRY_FUNC_OFFSET(entryArray[midIndex]); - - if (value > address) { - if (highIndex == midIndex) { - return false; - } - - highIndex = midIndex; - continue; - } - - *index = midIndex; - - // are we at the end of the array? - if (midIndex == entryCount - 1) { - return false; - } - - uintptr_t nextValue = UNWIND_INFO_COMPRESSED_ENTRY_FUNC_OFFSET(entryArray[midIndex + 1]); - if (nextValue > address) { - // we've found it - break; - } - - *index += 1; - } - - // check to make sure we're still within bounds - return *index < entryCount; -} - -bool FIRCLSCompactUnwindLookupSecondLevelCompressed(FIRCLSCompactUnwindContext* context, - uintptr_t pc, - FIRCLSCompactUnwindResult* result) { - if (!context || !result) { - return false; - } - - void* ptr = FIRCLSCompactUnwindGetSecondLevelData(context); - - if (!ptr) { - return false; - } - - memset(result, 0, sizeof(FIRCLSCompactUnwindResult)); - - struct unwind_info_compressed_second_level_page_header* header = - (struct unwind_info_compressed_second_level_page_header*)ptr; - - // adjust address - uintptr_t targetAddress = FIRCLSCompactUnwindGetTargetAddress(context, pc); - - uint32_t* entryArray = ptr + header->entryPageOffset; - - uint32_t index = 0; - - if (!FIRCLSCompactUnwindBinarySearchSecondLevel(targetAddress, &index, header->entryCount, - entryArray)) { - FIRCLSSDKLogInfo("Unable to find PC in second level\n"); - return false; - } - - uint32_t entry = entryArray[index]; - - // Computing the fuction start address is easy - result->functionStart = UNWIND_INFO_COMPRESSED_ENTRY_FUNC_OFFSET(entry) + - FIRCLSCompactUnwindGetIndexFunctionOffset(context); - - // Computing the end is more complex, because we could be on the last entry. In that case, we - // cannot use the next value as the end. - result->functionEnd = context->loadAddress; - if (index < header->entryCount - 1) { - result->functionEnd += UNWIND_INFO_COMPRESSED_ENTRY_FUNC_OFFSET(entryArray[index + 1]) + - context->indexHeader.functionOffset; - } else { - result->functionEnd += context->firstLevelNextFunctionOffset; - } - - // FIRCLSSDKLog("Located %lx => %lx %lx\n", pc, result->functionStart, result->functionEnd); - - if ((pc < result->functionStart) || (pc >= result->functionEnd)) { - FIRCLSSDKLog("PC does not match computed function range\n"); - return false; - } - - uint32_t encodingIndex = UNWIND_INFO_COMPRESSED_ENTRY_ENCODING_INDEX(entry); - - // encoding could be in the common array - if (encodingIndex < context->unwindHeader.commonEncodingsArrayCount) { - result->encoding = FIRCLSCompactUnwindGetCommonEncodings(context)[encodingIndex]; - - // FIRCLSSDKLog("Entry has common encoding: 0x%x\n", result->encoding); - } else { - encodingIndex = encodingIndex - context->unwindHeader.commonEncodingsArrayCount; - - compact_unwind_encoding_t* encodings = ptr + header->encodingsPageOffset; - - result->encoding = encodings[encodingIndex]; - - // FIRCLSSDKLog("Entry has compressed encoding: 0x%x\n", result->encoding); - } - - if (result->encoding == 0) { - FIRCLSSDKLogInfo("Entry has has no unwind info\n"); - return false; - } - - return true; -} - -bool FIRCLSCompactUnwindLookupSecondLevel(FIRCLSCompactUnwindContext* context, - uintptr_t pc, - FIRCLSCompactUnwindResult* result) { - switch (FIRCLSCompactUnwindGetSecondLevelPageKind(context)) { - case UNWIND_SECOND_LEVEL_REGULAR: - FIRCLSSDKLogInfo("Found a second level regular header\n"); - if (FIRCLSCompactUnwindLookupSecondLevelRegular(context, pc, result)) { - return true; - } - break; - case UNWIND_SECOND_LEVEL_COMPRESSED: - FIRCLSSDKLogInfo("Found a second level compressed header\n"); - if (FIRCLSCompactUnwindLookupSecondLevelCompressed(context, pc, result)) { - return true; - } - break; - default: - FIRCLSSDKLogError("Unrecognized header kind - unable to continue\n"); - break; - } - - return false; -} - -bool FIRCLSCompactUnwindLookup(FIRCLSCompactUnwindContext* context, - uintptr_t pc, - FIRCLSCompactUnwindResult* result) { - if (!context || !result) { - return false; - } - - // step 1 - find the pc in the first-level index - if (!FIRCLSCompactUnwindLookupFirstLevel(context, pc)) { - FIRCLSSDKLogWarn("Unable to find pc in first level\n"); - return false; - } - - FIRCLSSDKLogDebug("Found first level (second => %u)\n", - context->indexHeader.secondLevelPagesSectionOffset); - - // step 2 - use that info to find the second-level information - // that second actually has the encoding info we're looking for. - if (!FIRCLSCompactUnwindLookupSecondLevel(context, pc, result)) { - FIRCLSSDKLogInfo("Second-level PC lookup failed\n"); - return false; - } - - return true; -} - -#pragma mark - Unwinding -bool FIRCLSCompactUnwindLookupAndCompute(FIRCLSCompactUnwindContext* context, - FIRCLSThreadContext* registers) { - if (!context || !registers) { - return false; - } - - uintptr_t pc = FIRCLSThreadContextGetPC(registers); - - // little sanity check - if (pc < context->loadAddress) { - return false; - } - - FIRCLSCompactUnwindResult result; - - memset(&result, 0, sizeof(result)); - - if (!FIRCLSCompactUnwindLookup(context, pc, &result)) { - FIRCLSSDKLogInfo("Unable to lookup compact unwind for pc %p\n", (void*)pc); - return false; - } - - // Ok, armed with the encoding, we can actually attempt to modify the registers. Because - // the encoding is arch-specific, this function has to be defined per-arch. - if (!FIRCLSCompactUnwindComputeRegisters(context, &result, registers)) { - FIRCLSSDKLogError("Failed to compute registers\n"); - return false; - } - - return true; -} - -#if CLS_DWARF_UNWINDING_SUPPORTED -bool FIRCLSCompactUnwindDwarfFrame(FIRCLSCompactUnwindContext* context, - uintptr_t dwarfOffset, - FIRCLSThreadContext* registers) { - if (!context || !registers) { - return false; - } - - // Everyone's favorite! Dwarf unwinding! - FIRCLSSDKLogInfo("Trying to read dwarf data with offset %lx\n", dwarfOffset); - - FIRCLSDwarfCFIRecord record; - - if (!FIRCLSDwarfParseCFIFromFDERecordOffset(&record, context->ehFrame, dwarfOffset)) { - FIRCLSSDKLogError("Unable to init FDE\n"); - return false; - } - - if (!FIRCLSDwarfUnwindComputeRegisters(&record, registers)) { - FIRCLSSDKLogError("Failed to compute DWARF registers\n"); - return false; - } - - return true; -} -#endif - -#else -INJECT_STRIP_SYMBOL(compact_unwind) -#endif diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Unwind/Compact/FIRCLSCompactUnwind.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Unwind/Compact/FIRCLSCompactUnwind.h deleted file mode 100644 index 1698e75850..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Unwind/Compact/FIRCLSCompactUnwind.h +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#pragma once - -#include -#include - -#include "FIRCLSFeatures.h" -#include "FIRCLSThreadState.h" - -// We have to pack the arrays defined in this header, so -// we can reason about pointer math. -#pragma pack(push) -#pragma pack(1) -#include -#pragma pack(pop) - -// First masks out the value, and then shifts the value by the number -// of zeros in the mask. __builtin_ctz returns the number of trailing zeros. -// Its output is undefined if the input is zero. -#define GET_BITS_WITH_MASK(value, mask) ((value & mask) >> (mask == 0 ? 0 : __builtin_ctz(mask))) - -typedef struct { - const void* unwindInfo; - const void* ehFrame; - uintptr_t loadAddress; - - struct unwind_info_section_header unwindHeader; - struct unwind_info_section_header_index_entry indexHeader; - uint32_t firstLevelNextFunctionOffset; -} FIRCLSCompactUnwindContext; - -typedef struct { - compact_unwind_encoding_t encoding; - uintptr_t functionStart; - uintptr_t functionEnd; - uintptr_t lsda; - uintptr_t personality; - -} FIRCLSCompactUnwindResult; - -bool FIRCLSCompactUnwindInit(FIRCLSCompactUnwindContext* context, - const void* unwindInfo, - const void* ehFrame, - uintptr_t loadAddress); -void* FIRCLSCompactUnwindGetIndexData(FIRCLSCompactUnwindContext* context); -void* FIRCLSCompactUnwindGetSecondLevelData(FIRCLSCompactUnwindContext* context); -bool FIRCLSCompactUnwindFindFirstLevelIndex(FIRCLSCompactUnwindContext* context, - uintptr_t pc, - uint32_t* index); - -bool FIRCLSCompactUnwindDwarfFrame(FIRCLSCompactUnwindContext* context, - uintptr_t dwarfOffset, - FIRCLSThreadContext* registers); -bool FIRCLSCompactUnwindLookupAndCompute(FIRCLSCompactUnwindContext* context, - FIRCLSThreadContext* registers); diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Unwind/Compact/FIRCLSCompactUnwind_Private.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Unwind/Compact/FIRCLSCompactUnwind_Private.h deleted file mode 100644 index 1dd01562fd..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Unwind/Compact/FIRCLSCompactUnwind_Private.h +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#pragma once - -#include "FIRCLSCompactUnwind.h" -#pragma pack(push, 1) -#include -#pragma pack(pop) - -bool FIRCLSCompactUnwindLookup(FIRCLSCompactUnwindContext* context, - uintptr_t pc, - FIRCLSCompactUnwindResult* result); - -bool FIRCLSCompactUnwindComputeRegisters(FIRCLSCompactUnwindContext* context, - FIRCLSCompactUnwindResult* result, - FIRCLSThreadContext* registers); diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Unwind/Dwarf/FIRCLSDataParsing.c b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Unwind/Dwarf/FIRCLSDataParsing.c deleted file mode 100644 index 871fd30070..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Unwind/Dwarf/FIRCLSDataParsing.c +++ /dev/null @@ -1,238 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "FIRCLSDataParsing.h" -#include "FIRCLSDefines.h" -#include "FIRCLSUtility.h" -#include "dwarf.h" - -#include - -#if CLS_DWARF_UNWINDING_SUPPORTED - -uint8_t FIRCLSParseUint8AndAdvance(const void** cursor) { - uint8_t tmp = **(uint8_t**)cursor; - - *cursor += sizeof(uint8_t); - - return tmp; -} - -uint16_t FIRCLSParseUint16AndAdvance(const void** cursor) { - uint16_t tmp = **(uint16_t**)cursor; - - *cursor += sizeof(uint16_t); - - return tmp; -} - -int16_t FIRCLSParseInt16AndAdvance(const void** cursor) { - int16_t tmp = **(int16_t**)cursor; - - *cursor += sizeof(int16_t); - - return tmp; -} - -uint32_t FIRCLSParseUint32AndAdvance(const void** cursor) { - uint32_t tmp = **(uint32_t**)cursor; - - *cursor += sizeof(uint32_t); - - return tmp; -} - -int32_t FIRCLSParseInt32AndAdvance(const void** cursor) { - int32_t tmp = **(int32_t**)cursor; - - *cursor += sizeof(int32_t); - - return tmp; -} - -uint64_t FIRCLSParseUint64AndAdvance(const void** cursor) { - uint64_t tmp = **(uint64_t**)cursor; - - *cursor += sizeof(uint64_t); - - return tmp; -} - -int64_t FIRCLSParseInt64AndAdvance(const void** cursor) { - int64_t tmp = **(int64_t**)cursor; - - *cursor += sizeof(int64_t); - - return tmp; -} - -uintptr_t FIRCLSParsePointerAndAdvance(const void** cursor) { - uintptr_t tmp = **(uintptr_t**)cursor; - - *cursor += sizeof(uintptr_t); - - return tmp; -} - -// Signed and Unsigned LEB128 decoding algorithms taken from Wikipedia - -// http://en.wikipedia.org/wiki/LEB128 -uint64_t FIRCLSParseULEB128AndAdvance(const void** cursor) { - uint64_t result = 0; - char shift = 0; - - for (int i = 0; i < sizeof(uint64_t); ++i) { - char byte; - - byte = **(uint8_t**)cursor; - - *cursor += 1; - - result |= ((0x7F & byte) << shift); - if ((0x80 & byte) == 0) { - break; - } - - shift += 7; - } - - return result; -} - -int64_t FIRCLSParseLEB128AndAdvance(const void** cursor) { - uint64_t result = 0; - char shift = 0; - char size = sizeof(int64_t) * 8; - char byte = 0; - - for (int i = 0; i < sizeof(uint64_t); ++i) { - byte = **(uint8_t**)cursor; - - *cursor += 1; - - result |= ((0x7F & byte) << shift); - shift += 7; - - /* sign bit of byte is second high order bit (0x40) */ - if ((0x80 & byte) == 0) { - break; - } - } - - if ((shift < size) && (0x40 & byte)) { - // sign extend - result |= -(1 << shift); - } - - return result; -} - -const char* FIRCLSParseStringAndAdvance(const void** cursor) { - const char* string; - - string = (const char*)(*cursor); - - // strlen doesn't include the null character, which we need to advance past - *cursor += strlen(string) + 1; - - return string; -} - -uint64_t FIRCLSParseRecordLengthAndAdvance(const void** cursor) { - uint64_t length; - - length = FIRCLSParseUint32AndAdvance(cursor); - if (length == DWARF_EXTENDED_LENGTH_FLAG) { - length = FIRCLSParseUint64AndAdvance(cursor); - } - - return length; -} - -uintptr_t FIRCLSParseAddressWithEncodingAndAdvance(const void** cursor, uint8_t encoding) { - if (encoding == DW_EH_PE_omit) { - return 0; - } - - if (!cursor) { - return CLS_INVALID_ADDRESS; - } - - if (!*cursor) { - return CLS_INVALID_ADDRESS; - } - - intptr_t inputAddr = (intptr_t)*cursor; - intptr_t addr; - - switch (encoding & DW_EH_PE_VALUE_MASK) { - case DW_EH_PE_ptr: - // 32 or 64 bits - addr = FIRCLSParsePointerAndAdvance(cursor); - break; - case DW_EH_PE_uleb128: - addr = (intptr_t)FIRCLSParseULEB128AndAdvance(cursor); - break; - case DW_EH_PE_udata2: - addr = FIRCLSParseUint16AndAdvance(cursor); - break; - case DW_EH_PE_udata4: - addr = FIRCLSParseUint32AndAdvance(cursor); - break; - case DW_EH_PE_udata8: - addr = (intptr_t)FIRCLSParseUint64AndAdvance(cursor); - break; - case DW_EH_PE_sleb128: - addr = (intptr_t)FIRCLSParseLEB128AndAdvance(cursor); - break; - case DW_EH_PE_sdata2: - addr = FIRCLSParseInt16AndAdvance(cursor); - break; - case DW_EH_PE_sdata4: - addr = FIRCLSParseInt32AndAdvance(cursor); - break; - case DW_EH_PE_sdata8: - addr = (intptr_t)FIRCLSParseInt64AndAdvance(cursor); - break; - default: - FIRCLSSDKLog("Unhandled: encoding 0x%02x\n", encoding); - return CLS_INVALID_ADDRESS; - } - - // and now apply the relative offset - switch (encoding & DW_EH_PE_RELATIVE_OFFSET_MASK) { - case DW_EH_PE_absptr: - break; - case DW_EH_PE_pcrel: - addr += inputAddr; - break; - default: - FIRCLSSDKLog("Unhandled: relative encoding 0x%02x\n", encoding); - return CLS_INVALID_ADDRESS; - } - - // Here's a crazy one. It seems this encoding means you actually look up - // the value of the address using the result address itself - if (encoding & DW_EH_PE_indirect) { - if (!addr) { - return CLS_INVALID_ADDRESS; - } - - addr = *(uintptr_t*)addr; - } - - return addr; -} -#else -INJECT_STRIP_SYMBOL(data_parsing) -#endif diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Unwind/Dwarf/FIRCLSDataParsing.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Unwind/Dwarf/FIRCLSDataParsing.h deleted file mode 100644 index 8a6e966170..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Unwind/Dwarf/FIRCLSDataParsing.h +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#pragma once - -#include - -#include "FIRCLSFeatures.h" - -#if CLS_DWARF_UNWINDING_SUPPORTED - -#if CLS_CPU_64BIT -#define CLS_INVALID_ADDRESS (0xffffffffffffffff) -#else -#define CLS_INVALID_ADDRESS (0xffffffff) -#endif - -// basic data types -uint8_t FIRCLSParseUint8AndAdvance(const void** cursor); -uint16_t FIRCLSParseUint16AndAdvance(const void** cursor); -int16_t FIRCLSParseInt16AndAdvance(const void** cursor); -uint32_t FIRCLSParseUint32AndAdvance(const void** cursor); -int32_t FIRCLSParseInt32AndAdvance(const void** cursor); -uint64_t FIRCLSParseUint64AndAdvance(const void** cursor); -int64_t FIRCLSParseInt64AndAdvance(const void** cursor); -uintptr_t FIRCLSParsePointerAndAdvance(const void** cursor); -uint64_t FIRCLSParseULEB128AndAdvance(const void** cursor); -int64_t FIRCLSParseLEB128AndAdvance(const void** cursor); -const char* FIRCLSParseStringAndAdvance(const void** cursor); - -// FDE/CIE-specifc structures -uint64_t FIRCLSParseRecordLengthAndAdvance(const void** cursor); -uintptr_t FIRCLSParseAddressWithEncodingAndAdvance(const void** cursor, uint8_t encoding); - -#endif diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Unwind/Dwarf/FIRCLSDwarfExpressionMachine.c b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Unwind/Dwarf/FIRCLSDwarfExpressionMachine.c deleted file mode 100644 index ea308f13a1..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Unwind/Dwarf/FIRCLSDwarfExpressionMachine.c +++ /dev/null @@ -1,453 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "FIRCLSDwarfExpressionMachine.h" -#include "FIRCLSDataParsing.h" -#include "FIRCLSDefines.h" -#include "FIRCLSDwarfUnwindRegisters.h" -#include "FIRCLSUnwind_arch.h" -#include "FIRCLSUtility.h" -#include "dwarf.h" - -#if CLS_DWARF_UNWINDING_SUPPORTED - -static bool FIRCLSDwarfExpressionMachineExecute_bregN(FIRCLSDwarfExpressionMachine *machine, - uint8_t opcode); -static bool FIRCLSDwarfExpressionMachineExecute_deref(FIRCLSDwarfExpressionMachine *machine); -static bool FIRCLSDwarfExpressionMachineExecute_plus_uconst(FIRCLSDwarfExpressionMachine *machine); -static bool FIRCLSDwarfExpressionMachineExecute_and(FIRCLSDwarfExpressionMachine *machine); -static bool FIRCLSDwarfExpressionMachineExecute_plus(FIRCLSDwarfExpressionMachine *machine); -static bool FIRCLSDwarfExpressionMachineExecute_dup(FIRCLSDwarfExpressionMachine *machine); -static bool FIRCLSDwarfExpressionMachineExecute_swap(FIRCLSDwarfExpressionMachine *machine); -static bool FIRCLSDwarfExpressionMachineExecute_deref_size(FIRCLSDwarfExpressionMachine *machine); -static bool FIRCLSDwarfExpressionMachineExecute_ne(FIRCLSDwarfExpressionMachine *machine); -static bool FIRCLSDwarfExpressionMachineExecute_litN(FIRCLSDwarfExpressionMachine *machine, - uint8_t opcode); - -#pragma mark - -#pragma mark Stack Implementation -void FIRCLSDwarfExpressionStackInit(FIRCLSDwarfExpressionStack *stack) { - if (!FIRCLSIsValidPointer(stack)) { - return; - } - - memset(stack, 0, sizeof(FIRCLSDwarfExpressionStack)); - - stack->pointer = stack->buffer; -} - -bool FIRCLSDwarfExpressionStackIsValid(FIRCLSDwarfExpressionStack *stack) { - if (!FIRCLSIsValidPointer(stack)) { - return false; - } - - // check for valid stack pointer - if (stack->pointer < stack->buffer) { - return false; - } - - if (stack->pointer > stack->buffer + CLS_DWARF_EXPRESSION_STACK_SIZE) { - return false; - } - - return true; -} - -bool FIRCLSDwarfExpressionStackPush(FIRCLSDwarfExpressionStack *stack, intptr_t value) { - if (!FIRCLSDwarfExpressionStackIsValid(stack)) { - return false; - } - - if (stack->pointer == stack->buffer + CLS_DWARF_EXPRESSION_STACK_SIZE) { - // overflow - stack->pointer = NULL; - return false; - } - - *(stack->pointer) = value; - stack->pointer += 1; - - return true; -} - -intptr_t FIRCLSDwarfExpressionStackPeek(FIRCLSDwarfExpressionStack *stack) { - if (!FIRCLSDwarfExpressionStackIsValid(stack)) { - return 0; - } - - if (stack->pointer == stack->buffer) { - // underflow - stack->pointer = NULL; - return 0; - } - - return *(stack->pointer - 1); -} - -intptr_t FIRCLSDwarfExpressionStackPop(FIRCLSDwarfExpressionStack *stack) { - if (!FIRCLSDwarfExpressionStackIsValid(stack)) { - return 0; - } - - if (stack->pointer == stack->buffer) { - // underflow - stack->pointer = NULL; - return 0; - } - - stack->pointer -= 1; - - return *(stack->pointer); -} - -#pragma mark - -#pragma mark Machine API -bool FIRCLSDwarfExpressionMachineInit(FIRCLSDwarfExpressionMachine *machine, - const void *cursor, - const FIRCLSThreadContext *registers, - intptr_t stackValue) { - if (!FIRCLSIsValidPointer(machine)) { - return false; - } - - memset(machine, 0, sizeof(FIRCLSDwarfExpressionMachine)); - - if (!FIRCLSIsValidPointer(cursor)) { - return false; - } - - machine->dataCursor = cursor; - machine->registers = registers; - - FIRCLSDwarfExpressionStackInit(&machine->stack); - - return FIRCLSDwarfExpressionStackPush(&machine->stack, stackValue); -} - -bool FIRCLSDwarfExpressionMachinePrepareForExecution(FIRCLSDwarfExpressionMachine *machine) { - if (!FIRCLSIsValidPointer(machine)) { - FIRCLSSDKLog("Error: invalid inputs\n"); - return false; - } - - uint64_t expressionLength = FIRCLSParseULEB128AndAdvance(&machine->dataCursor); - - if (expressionLength == 0) { - FIRCLSSDKLog("Error: DWARF expression length is zero\n"); - return false; - } - - machine->endAddress = machine->dataCursor + expressionLength; - - return true; -} - -bool FIRCLSDwarfExpressionMachineIsFinished(FIRCLSDwarfExpressionMachine *machine) { - if (!FIRCLSIsValidPointer(machine)) { - FIRCLSSDKLog("Error: invalid inputs\n"); - return true; - } - - if (!FIRCLSIsValidPointer(machine->endAddress) || !FIRCLSIsValidPointer(machine->dataCursor)) { - FIRCLSSDKLog("Error: DWARF machine pointers invalid\n"); - return true; - } - - if (!FIRCLSDwarfExpressionStackIsValid(&machine->stack)) { - FIRCLSSDKLog("Error: DWARF machine stack invalid\n"); - return true; - } - - return machine->dataCursor >= machine->endAddress; -} - -bool FIRCLSDwarfExpressionMachineGetResult(FIRCLSDwarfExpressionMachine *machine, - intptr_t *result) { - if (!FIRCLSIsValidPointer(machine) || !FIRCLSIsValidPointer(result)) { - return false; - } - - if (machine->dataCursor != machine->endAddress) { - FIRCLSSDKLog("Error: DWARF expression hasn't completed execution\n"); - return false; - } - - *result = FIRCLSDwarfExpressionStackPeek(&machine->stack); - - return FIRCLSDwarfExpressionStackIsValid(&machine->stack); -} - -bool FIRCLSDwarfExpressionMachineExecuteNextOpcode(FIRCLSDwarfExpressionMachine *machine) { - if (!FIRCLSIsValidPointer(machine)) { - return false; - } - - const uint8_t opcode = FIRCLSParseUint8AndAdvance(&machine->dataCursor); - - bool success = false; - - switch (opcode) { - case DW_OP_deref: - success = FIRCLSDwarfExpressionMachineExecute_deref(machine); - break; - case DW_OP_dup: - success = FIRCLSDwarfExpressionMachineExecute_dup(machine); - break; - case DW_OP_and: - success = FIRCLSDwarfExpressionMachineExecute_and(machine); - break; - case DW_OP_plus: - success = FIRCLSDwarfExpressionMachineExecute_plus(machine); - break; - case DW_OP_swap: - success = FIRCLSDwarfExpressionMachineExecute_swap(machine); - break; - case DW_OP_plus_uconst: - success = FIRCLSDwarfExpressionMachineExecute_plus_uconst(machine); - break; - case DW_OP_ne: - success = FIRCLSDwarfExpressionMachineExecute_ne(machine); - break; - case DW_OP_lit0: - case DW_OP_lit1: - case DW_OP_lit2: - case DW_OP_lit3: - case DW_OP_lit4: - case DW_OP_lit5: - case DW_OP_lit6: - case DW_OP_lit7: - case DW_OP_lit8: - case DW_OP_lit9: - case DW_OP_lit10: - case DW_OP_lit11: - case DW_OP_lit12: - case DW_OP_lit13: - case DW_OP_lit14: - case DW_OP_lit15: - case DW_OP_lit16: - case DW_OP_lit17: - case DW_OP_lit18: - case DW_OP_lit19: - case DW_OP_lit20: - case DW_OP_lit21: - case DW_OP_lit22: - case DW_OP_lit23: - case DW_OP_lit24: - case DW_OP_lit25: - case DW_OP_lit26: - case DW_OP_lit27: - case DW_OP_lit28: - case DW_OP_lit29: - case DW_OP_lit30: - case DW_OP_lit31: - success = FIRCLSDwarfExpressionMachineExecute_litN(machine, opcode); - break; - case DW_OP_breg0: - case DW_OP_breg1: - case DW_OP_breg2: - case DW_OP_breg3: - case DW_OP_breg4: - case DW_OP_breg5: - case DW_OP_breg6: - case DW_OP_breg7: - case DW_OP_breg8: - case DW_OP_breg9: - case DW_OP_breg10: - case DW_OP_breg11: - case DW_OP_breg12: - case DW_OP_breg13: - case DW_OP_breg14: - case DW_OP_breg15: - case DW_OP_breg16: - case DW_OP_breg17: - case DW_OP_breg18: - case DW_OP_breg19: - case DW_OP_breg20: - case DW_OP_breg21: - case DW_OP_breg22: - case DW_OP_breg23: - case DW_OP_breg24: - case DW_OP_breg25: - case DW_OP_breg26: - case DW_OP_breg27: - case DW_OP_breg28: - case DW_OP_breg29: - case DW_OP_breg30: - case DW_OP_breg31: - success = FIRCLSDwarfExpressionMachineExecute_bregN(machine, opcode); - break; - case DW_OP_deref_size: - success = FIRCLSDwarfExpressionMachineExecute_deref_size(machine); - break; - default: - FIRCLSSDKLog("Error: Unrecognized DWARF expression opcode 0x%x\n", opcode); - return false; - } - - return success; -} - -#pragma mark - -#pragma mark Helpers -static intptr_t FIRCLSDwarfExpressionMachineStackPop(FIRCLSDwarfExpressionMachine *machine) { - return FIRCLSDwarfExpressionStackPop(&machine->stack); -} - -static bool FIRCLSDwarfExpressionMachineStackPush(FIRCLSDwarfExpressionMachine *machine, - intptr_t value) { - return FIRCLSDwarfExpressionStackPush(&machine->stack, value); -} - -#pragma mark - -#pragma mark Opcode Implementations -static bool FIRCLSDwarfExpressionMachineExecute_bregN(FIRCLSDwarfExpressionMachine *machine, - uint8_t opcode) { - // find the register number, compute offset value, push - const uint8_t regNum = opcode - DW_OP_breg0; - - if (regNum > CLS_DWARF_MAX_REGISTER_NUM) { - FIRCLSSDKLog("Error: DW_OP_breg invalid register number\n"); - return false; - } - - int64_t offset = FIRCLSParseLEB128AndAdvance(&machine->dataCursor); - - FIRCLSSDKLog("DW_OP_breg %d value %d\n", regNum, (int)offset); - - const intptr_t value = - FIRCLSDwarfUnwindGetRegisterValue(machine->registers, regNum) + (intptr_t)offset; - - return FIRCLSDwarfExpressionMachineStackPush(machine, value); -} - -static bool FIRCLSDwarfExpressionMachineExecute_deref(FIRCLSDwarfExpressionMachine *machine) { - // pop stack, dereference, push result - intptr_t value = FIRCLSDwarfExpressionMachineStackPop(machine); - - FIRCLSSDKLog("DW_OP_deref value %p\n", (void *)value); - - if (!FIRCLSReadMemory(value, &value, sizeof(value))) { - FIRCLSSDKLog("Error: DW_OP_deref failed to read memory\n"); - return false; - } - - return FIRCLSDwarfExpressionMachineStackPush(machine, value); -} - -static bool FIRCLSDwarfExpressionMachineExecute_plus_uconst(FIRCLSDwarfExpressionMachine *machine) { - // pop stack, add constant, push result - intptr_t value = FIRCLSDwarfExpressionMachineStackPop(machine); - - value += FIRCLSParseULEB128AndAdvance(&machine->dataCursor); - - FIRCLSSDKLog("DW_OP_plus_uconst value %lu\n", value); - - return FIRCLSDwarfExpressionMachineStackPush(machine, value); -} - -static bool FIRCLSDwarfExpressionMachineExecute_and(FIRCLSDwarfExpressionMachine *machine) { - FIRCLSSDKLog("DW_OP_plus_and\n"); - - intptr_t value = FIRCLSDwarfExpressionMachineStackPop(machine); - - value = value & FIRCLSDwarfExpressionMachineStackPop(machine); - - return FIRCLSDwarfExpressionMachineStackPush(machine, value); -} - -static bool FIRCLSDwarfExpressionMachineExecute_plus(FIRCLSDwarfExpressionMachine *machine) { - FIRCLSSDKLog("DW_OP_plus\n"); - - intptr_t value = FIRCLSDwarfExpressionMachineStackPop(machine); - - value = value + FIRCLSDwarfExpressionMachineStackPop(machine); - - return FIRCLSDwarfExpressionMachineStackPush(machine, value); -} - -static bool FIRCLSDwarfExpressionMachineExecute_dup(FIRCLSDwarfExpressionMachine *machine) { - // duplicate top of stack - intptr_t value = FIRCLSDwarfExpressionStackPeek(&machine->stack); - - FIRCLSSDKLog("DW_OP_dup value %lu\n", value); - - return FIRCLSDwarfExpressionMachineStackPush(machine, value); -} - -static bool FIRCLSDwarfExpressionMachineExecute_swap(FIRCLSDwarfExpressionMachine *machine) { - // swap top two values on the stack - intptr_t valueA = FIRCLSDwarfExpressionMachineStackPop(machine); - intptr_t valueB = FIRCLSDwarfExpressionMachineStackPop(machine); - - FIRCLSSDKLog("DW_OP_swap\n"); - - if (!FIRCLSDwarfExpressionMachineStackPush(machine, valueA)) { - return false; - } - - return FIRCLSDwarfExpressionMachineStackPush(machine, valueB); -} - -static bool FIRCLSDwarfExpressionMachineExecute_deref_size(FIRCLSDwarfExpressionMachine *machine) { - // pop stack, dereference variable sized value, push result - const void *address = (const void *)FIRCLSDwarfExpressionMachineStackPop(machine); - const uint8_t readSize = FIRCLSParseUint8AndAdvance(&machine->dataCursor); - intptr_t value = 0; - - FIRCLSSDKLog("DW_OP_deref_size %p size %u\n", address, readSize); - - switch (readSize) { - case 1: - value = FIRCLSParseUint8AndAdvance(&address); - break; - case 2: - value = FIRCLSParseUint16AndAdvance(&address); - break; - case 4: - value = FIRCLSParseUint32AndAdvance(&address); - break; - case 8: - // this is a little funky, as an 8 here really doesn't make sense for 32-bit platforms - value = (intptr_t)FIRCLSParseUint64AndAdvance(&address); - break; - default: - FIRCLSSDKLog("Error: unrecognized DW_OP_deref_size argument %x\n", readSize); - return false; - } - - return FIRCLSDwarfExpressionMachineStackPush(machine, value); -} - -static bool FIRCLSDwarfExpressionMachineExecute_ne(FIRCLSDwarfExpressionMachine *machine) { - FIRCLSSDKLog("DW_OP_ne\n"); - - intptr_t value = FIRCLSDwarfExpressionMachineStackPop(machine); - - value = value != FIRCLSDwarfExpressionMachineStackPop(machine); - - return FIRCLSDwarfExpressionMachineStackPush(machine, value); -} - -static bool FIRCLSDwarfExpressionMachineExecute_litN(FIRCLSDwarfExpressionMachine *machine, - uint8_t opcode) { - const uint8_t value = opcode - DW_OP_lit0; - - FIRCLSSDKLog("DW_OP_lit %u\n", value); - - return FIRCLSDwarfExpressionMachineStackPush(machine, value); -} - -#else -INJECT_STRIP_SYMBOL(dwarf_expression_machine) -#endif diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Unwind/Dwarf/FIRCLSDwarfExpressionMachine.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Unwind/Dwarf/FIRCLSDwarfExpressionMachine.h deleted file mode 100644 index 7dd70f847c..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Unwind/Dwarf/FIRCLSDwarfExpressionMachine.h +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#pragma once - -#include -#include - -#include "FIRCLSFeatures.h" -#include "FIRCLSThreadState.h" - -#define CLS_DWARF_EXPRESSION_STACK_SIZE (100) - -#if CLS_DWARF_UNWINDING_SUPPORTED - -typedef struct { - intptr_t buffer[CLS_DWARF_EXPRESSION_STACK_SIZE]; - intptr_t *pointer; -} FIRCLSDwarfExpressionStack; - -typedef struct { - FIRCLSDwarfExpressionStack stack; - const void *dataCursor; - const void *endAddress; - const FIRCLSThreadContext *registers; -} FIRCLSDwarfExpressionMachine; - -void FIRCLSDwarfExpressionStackInit(FIRCLSDwarfExpressionStack *stack); -bool FIRCLSDwarfExpressionStackIsValid(FIRCLSDwarfExpressionStack *stack); -bool FIRCLSDwarfExpressionStackPush(FIRCLSDwarfExpressionStack *stack, intptr_t value); -intptr_t FIRCLSDwarfExpressionStackPeek(FIRCLSDwarfExpressionStack *stack); -intptr_t FIRCLSDwarfExpressionStackPop(FIRCLSDwarfExpressionStack *stack); - -bool FIRCLSDwarfExpressionMachineInit(FIRCLSDwarfExpressionMachine *machine, - const void *cursor, - const FIRCLSThreadContext *registers, - intptr_t stackValue); -bool FIRCLSDwarfExpressionMachinePrepareForExecution(FIRCLSDwarfExpressionMachine *machine); -bool FIRCLSDwarfExpressionMachineIsFinished(FIRCLSDwarfExpressionMachine *machine); -bool FIRCLSDwarfExpressionMachineGetResult(FIRCLSDwarfExpressionMachine *machine, intptr_t *result); - -bool FIRCLSDwarfExpressionMachineExecuteNextOpcode(FIRCLSDwarfExpressionMachine *machine); - -#endif diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Unwind/Dwarf/FIRCLSDwarfUnwind.c b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Unwind/Dwarf/FIRCLSDwarfUnwind.c deleted file mode 100644 index 665e8aaa97..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Unwind/Dwarf/FIRCLSDwarfUnwind.c +++ /dev/null @@ -1,1002 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "FIRCLSDwarfUnwind.h" -#include "FIRCLSDataParsing.h" -#include "FIRCLSDefines.h" -#include "FIRCLSDwarfExpressionMachine.h" -#include "FIRCLSFeatures.h" -#include "FIRCLSUnwind_arch.h" -#include "FIRCLSUtility.h" -#include "dwarf.h" - -#include - -#if CLS_DWARF_UNWINDING_SUPPORTED - -#define FIRCLSDwarfLog(__FORMAT__, ...) FIRCLSSDKLog(__FORMAT__, ##__VA_ARGS__) - -#define CLS_DWARF_EXPRESSION_STACK_SIZE (100) - -#pragma mark Prototypes -static bool FIRCLSDwarfParseAndProcessAugmentation(DWARFCIERecord* record, const void** ptr); - -#pragma mark - Record Parsing -bool FIRCLSDwarfParseCIERecord(DWARFCIERecord* cie, const void* ptr) { - if (!cie || !ptr) { - return false; - } - - memset(cie, 0, sizeof(DWARFCIERecord)); - - cie->length = FIRCLSParseRecordLengthAndAdvance(&ptr); - if (cie->length == 0) { - FIRCLSSDKLog("Error: CIE length invalid\n"); - return false; - } - - // the length does not include the length field(s) themselves - const void* endAddress = ptr + cie->length; - - if (FIRCLSParseUint32AndAdvance(&ptr) != DWARF_CIE_ID_CIE_FLAG) { - FIRCLSSDKLog("Error: CIE flag not found\n"); - } - - cie->version = FIRCLSParseUint8AndAdvance(&ptr); - if (cie->version != 1 && cie->version != 3) { - FIRCLSSDKLog("Error: CIE version %u unsupported\n", cie->version); - } - - cie->pointerEncoding = DW_EH_PE_absptr; - cie->lsdaEncoding = DW_EH_PE_absptr; - - cie->augmentation = FIRCLSParseStringAndAdvance(&ptr); - cie->codeAlignFactor = FIRCLSParseULEB128AndAdvance(&ptr); - cie->dataAlignFactor = FIRCLSParseLEB128AndAdvance(&ptr); - - switch (cie->version) { - case 1: - cie->returnAddressRegister = FIRCLSParseUint8AndAdvance(&ptr); - break; - case 3: - cie->returnAddressRegister = FIRCLSParseULEB128AndAdvance(&ptr); - break; - default: - FIRCLSSDKLog("Error: CIE version %u unsupported\n", cie->version); - return false; - } - - if (!FIRCLSDwarfParseAndProcessAugmentation(cie, &ptr)) { - return false; - } - - cie->instructions.data = ptr; - cie->instructions.length = (uint32_t)(endAddress - ptr); - - return true; -} - -static bool FIRCLSDwarfParseAndProcessAugmentation(DWARFCIERecord* record, const void** ptr) { - if (!record || !ptr) { - return false; - } - - if (!record->augmentation) { - return false; - } - - if (record->augmentation[0] == 0) { - return true; - } - - if (record->augmentation[0] != 'z') { - FIRCLSSDKLog("Error: Unimplemented: augmentation string %s\n", record->augmentation); - return false; - } - - size_t stringLength = strlen(record->augmentation); - - uint64_t dataLength = FIRCLSParseULEB128AndAdvance(ptr); - const void* ending = *ptr + dataLength; - - // start at 1 because we know the first character is a 'z' - for (size_t i = 1; i < stringLength; ++i) { - switch (record->augmentation[i]) { - case 'L': - // There is an LSDA pointer encoding present. The actual address of the LSDA - // is in the FDE - record->lsdaEncoding = FIRCLSParseUint8AndAdvance(ptr); - break; - case 'R': - // There is a pointer encoding present, used for all addresses in an FDE. - record->pointerEncoding = FIRCLSParseUint8AndAdvance(ptr); - break; - case 'P': - // Two arguments. A pointer encoding, and a pointer to a personality function encoded - // with that value. - record->personalityEncoding = FIRCLSParseUint8AndAdvance(ptr); - record->personalityFunction = - FIRCLSParseAddressWithEncodingAndAdvance(ptr, record->personalityEncoding); - if (record->personalityFunction == CLS_INVALID_ADDRESS) { - FIRCLSSDKLog("Error: Found an invalid start address\n"); - return false; - } - break; - case 'S': - record->signalFrame = true; - break; - default: - FIRCLSSDKLog("Error: Unhandled augmentation string entry %c\n", record->augmentation[i]); - return false; - } - - // small sanity check - if (*ptr > ending) { - return false; - } - } - - return true; -} - -bool FIRCLSDwarfParseFDERecord(DWARFFDERecord* fdeRecord, - bool parseCIE, - DWARFCIERecord* cieRecord, - const void* ptr) { - if (!fdeRecord || !cieRecord || !ptr) { - return false; - } - - fdeRecord->length = FIRCLSParseRecordLengthAndAdvance(&ptr); - if (fdeRecord->length == 0) { - FIRCLSSDKLog("Error: FDE has zero length\n"); - return false; - } - - // length does not include length field - const void* endAddress = ptr + fdeRecord->length; - - // According to the spec, this is 32/64 bit value, but libunwind always - // parses this as a 32bit value. - fdeRecord->cieOffset = FIRCLSParseUint32AndAdvance(&ptr); - if (fdeRecord->cieOffset == 0) { - FIRCLSSDKLog("Error: CIE offset invalid\n"); - return false; - } - - if (parseCIE) { - // The CIE offset is really weird. It appears to be an offset from the - // beginning of its field. This isn't what the documentation says, but it is - // a little ambigious. This is what DwarfParser.hpp does. - // Note that we have to back up one sizeof(uint32_t), because we've advanced - // by parsing the offset - const void* ciePointer = ptr - fdeRecord->cieOffset - sizeof(uint32_t); - if (!FIRCLSDwarfParseCIERecord(cieRecord, ciePointer)) { - FIRCLSSDKLog("Error: Unable to parse CIE record\n"); - return false; - } - } - - if (!FIRCLSDwarfCIEIsValid(cieRecord)) { - FIRCLSSDKLog("Error: CIE invalid\n"); - return false; - } - - // the next field depends on the pointer encoding style used - fdeRecord->startAddress = - FIRCLSParseAddressWithEncodingAndAdvance(&ptr, cieRecord->pointerEncoding); - if (fdeRecord->startAddress == CLS_INVALID_ADDRESS) { - FIRCLSSDKLog("Error: Found an invalid start address\n"); - return false; - } - - // Here's something weird too. The range is encoded as a "special" address, where only the value - // is used, regardless of other pointer-encoding schemes. - fdeRecord->rangeSize = FIRCLSParseAddressWithEncodingAndAdvance( - &ptr, cieRecord->pointerEncoding & DW_EH_PE_VALUE_MASK); - if (fdeRecord->rangeSize == CLS_INVALID_ADDRESS) { - FIRCLSSDKLog("Error: Found an invalid address range\n"); - return false; - } - - // Just skip over the section for now. The data here is only needed for personality functions, - // which we don't need - if (FIRCLSDwarfCIEHasAugmentationData(cieRecord)) { - uintptr_t augmentationLength = (uintptr_t)FIRCLSParseULEB128AndAdvance(&ptr); - - ptr += augmentationLength; - } - - fdeRecord->instructions.data = ptr; - fdeRecord->instructions.length = (uint32_t)(endAddress - ptr); - - return true; -} - -bool FIRCLSDwarfParseCFIFromFDERecord(FIRCLSDwarfCFIRecord* record, const void* ptr) { - if (!record || !ptr) { - return false; - } - - return FIRCLSDwarfParseFDERecord(&record->fde, true, &record->cie, ptr); -} - -bool FIRCLSDwarfParseCFIFromFDERecordOffset(FIRCLSDwarfCFIRecord* record, - const void* ehFrame, - uintptr_t fdeOffset) { - if (!record || !ehFrame || (fdeOffset == 0)) { - return false; - } - - const void* ptr = ehFrame + fdeOffset; - - return FIRCLSDwarfParseCFIFromFDERecord(record, ptr); -} - -#pragma mark - Properties -bool FIRCLSDwarfCIEIsValid(DWARFCIERecord* cie) { - if (!cie) { - return false; - } - - if (cie->length == 0) { - return false; - } - - if (cie->version != 1 && cie->version != 3) { - return false; - } - - return true; -} - -bool FIRCLSDwarfCIEHasAugmentationData(DWARFCIERecord* cie) { - if (!cie) { - return false; - } - - if (!cie->augmentation) { - return false; - } - - return cie->augmentation[0] == 'z'; -} - -#pragma mark - Instructions - -static bool FIRCLSDwarfParseAndExecute_set_loc(const void** cursor, - DWARFCIERecord* cieRecord, - intptr_t* codeOffset) { - uintptr_t operand = FIRCLSParseAddressWithEncodingAndAdvance(cursor, cieRecord->pointerEncoding); - - *codeOffset = operand; - - FIRCLSDwarfLog("DW_CFA_set_loc %lu\n", operand); - - return true; -} - -static bool FIRCLSDwarfParseAndExecute_advance_loc1(const void** cursor, - DWARFCIERecord* cieRecord, - intptr_t* codeOffset) { - int64_t offset = FIRCLSParseUint8AndAdvance(cursor) * cieRecord->codeAlignFactor; - - *codeOffset += offset; - - FIRCLSDwarfLog("DW_CFA_advance_loc1 %lld\n", offset); - - return true; -} - -static bool FIRCLSDwarfParseAndExecute_advance_loc2(const void** cursor, - DWARFCIERecord* cieRecord, - intptr_t* codeOffset) { - int64_t offset = FIRCLSParseUint16AndAdvance(cursor) * cieRecord->codeAlignFactor; - - *codeOffset += offset; - - FIRCLSDwarfLog("DW_CFA_advance_loc2 %lld\n", offset); - - return true; -} - -static bool FIRCLSDwarfParseAndExecute_advance_loc4(const void** cursor, - DWARFCIERecord* cieRecord, - intptr_t* codeOffset) { - int64_t offset = FIRCLSParseUint32AndAdvance(cursor) * cieRecord->codeAlignFactor; - - *codeOffset += offset; - - FIRCLSDwarfLog("DW_CFA_advance_loc4 %lld\n", offset); - - return true; -} - -static bool FIRCLSDwarfParseAndExecute_def_cfa(const void** cursor, - DWARFCIERecord* cieRecord, - FIRCLSDwarfState* state) { - uint64_t regNum = FIRCLSParseULEB128AndAdvance(cursor); - - if (regNum > CLS_DWARF_MAX_REGISTER_NUM) { - FIRCLSSDKLog("Error: Found an invalid DW_CFA_def_cfa register number\n"); - return false; - } - - int64_t offset = FIRCLSParseULEB128AndAdvance(cursor); - - state->cfaRegister = regNum; - state->cfaRegisterOffset = offset; - - FIRCLSDwarfLog("DW_CFA_def_cfa %llu, %lld\n", regNum, offset); - - return true; -} - -static bool FIRCLSDwarfParseAndExecute_def_cfa_register(const void** cursor, - DWARFCIERecord* cieRecord, - FIRCLSDwarfState* state) { - uint64_t regNum = FIRCLSParseULEB128AndAdvance(cursor); - - if (regNum > CLS_DWARF_MAX_REGISTER_NUM) { - FIRCLSSDKLog("Error: Found an invalid DW_CFA_def_cfa_register register number\n"); - return false; - } - - state->cfaRegister = regNum; - - FIRCLSDwarfLog("DW_CFA_def_cfa_register %llu\n", regNum); - - return true; -} - -static bool FIRCLSDwarfParseAndExecute_def_cfa_offset(const void** cursor, - DWARFCIERecord* cieRecord, - FIRCLSDwarfState* state) { - uint64_t offset = FIRCLSParseULEB128AndAdvance(cursor); - - state->cfaRegisterOffset = offset; - - FIRCLSDwarfLog("DW_CFA_def_cfa_offset %lld\n", offset); - - return true; -} - -static bool FIRCLSDwarfParseAndExecute_same_value(const void** cursor, - DWARFCIERecord* cieRecord, - FIRCLSDwarfState* state) { - uint64_t regNum = FIRCLSParseULEB128AndAdvance(cursor); - - if (regNum > CLS_DWARF_MAX_REGISTER_NUM) { - FIRCLSSDKLog("Error: Found an invalid DW_CFA_same_value register number\n"); - return false; - } - - state->registers[regNum].location = FIRCLSDwarfRegisterUnused; - - FIRCLSDwarfLog("DW_CFA_same_value %llu\n", regNum); - - return true; -} - -static bool FIRCLSDwarfParseAndExecute_register(const void** cursor, - DWARFCIERecord* cieRecord, - FIRCLSDwarfState* state) { - uint64_t regNum = FIRCLSParseULEB128AndAdvance(cursor); - - if (regNum > CLS_DWARF_MAX_REGISTER_NUM) { - FIRCLSSDKLog("Error: Found an invalid DW_CFA_register number\n"); - return false; - } - - uint64_t regValue = FIRCLSParseULEB128AndAdvance(cursor); - - if (regValue > CLS_DWARF_MAX_REGISTER_NUM) { - FIRCLSSDKLog("Error: Found an invalid DW_CFA_register value\n"); - return false; - } - - state->registers[regNum].location = FIRCLSDwarfRegisterInRegister; - state->registers[regNum].value = regValue; - - FIRCLSDwarfLog("DW_CFA_register %llu %llu\n", regNum, regValue); - - return true; -} - -static bool FIRCLSDwarfParseAndExecute_expression(const void** cursor, - DWARFCIERecord* cieRecord, - FIRCLSDwarfState* state) { - uint64_t regNum = FIRCLSParseULEB128AndAdvance(cursor); - - if (regNum > CLS_DWARF_MAX_REGISTER_NUM) { - FIRCLSSDKLog("Error: Found an invalid DW_CFA_expression register number\n"); - return false; - } - - state->registers[regNum].location = FIRCLSDwarfRegisterAtExpression; - state->registers[regNum].value = (uintptr_t)*cursor; - - // read the length of the expression, and advance past it - uint64_t length = FIRCLSParseULEB128AndAdvance(cursor); - *cursor += length; - - FIRCLSDwarfLog("DW_CFA_expression %llu %llu\n", regNum, length); - - return true; -} - -static bool FIRCLSDwarfParseAndExecute_val_expression(const void** cursor, - DWARFCIERecord* cieRecord, - FIRCLSDwarfState* state) { - uint64_t regNum = FIRCLSParseULEB128AndAdvance(cursor); - - if (regNum > CLS_DWARF_MAX_REGISTER_NUM) { - FIRCLSSDKLog("Error: Found an invalid DW_CFA_val_expression register number\n"); - return false; - } - - state->registers[regNum].location = FIRCLSDwarfRegisterIsExpression; - state->registers[regNum].value = (uintptr_t)*cursor; - - // read the length of the expression, and advance past it - uint64_t length = FIRCLSParseULEB128AndAdvance(cursor); - *cursor += length; - - FIRCLSDwarfLog("DW_CFA_val_expression %llu %llu\n", regNum, length); - - return true; -} - -static bool FIRCLSDwarfParseAndExecute_def_cfa_expression(const void** cursor, - DWARFCIERecord* cieRecord, - FIRCLSDwarfState* state) { - state->cfaRegister = CLS_DWARF_INVALID_REGISTER_NUM; - state->cfaExpression = *cursor; - - // read the length of the expression, and advance past it - uint64_t length = FIRCLSParseULEB128AndAdvance(cursor); - *cursor += length; - - FIRCLSDwarfLog("DW_CFA_def_cfa_expression %llu\n", length); - - return true; -} - -static bool FIRCLSDwarfParseAndExecute_offset(const void** cursor, - DWARFCIERecord* cieRecord, - FIRCLSDwarfState* state, - uint8_t regNum) { - if (regNum > CLS_DWARF_MAX_REGISTER_NUM) { - FIRCLSSDKLog("Error: Found an invalid DW_CFA_offset register number\n"); - return false; - } - - int64_t offset = FIRCLSParseULEB128AndAdvance(cursor) * cieRecord->dataAlignFactor; - - state->registers[regNum].location = FIRCLSDwarfRegisterInCFA; - state->registers[regNum].value = offset; - - FIRCLSDwarfLog("DW_CFA_offset %u, %lld\n", regNum, offset); - - return true; -} - -static bool FIRCLSDwarfParseAndExecute_advance_loc(const void** cursor, - DWARFCIERecord* cieRecord, - FIRCLSDwarfState* state, - uint8_t delta, - intptr_t* codeOffset) { - if (!FIRCLSIsValidPointer(codeOffset) || !FIRCLSIsValidPointer(cieRecord)) { - FIRCLSSDKLog("Error: invalid inputs\n"); - return false; - } - - *codeOffset = delta * (intptr_t)cieRecord->codeAlignFactor; - - FIRCLSDwarfLog("DW_CFA_advance_loc %u\n", delta); - - return true; -} - -static bool FIRCLSDwarfParseAndExecuteInstructionWithOperand(const void** cursor, - uint8_t instruction, - DWARFCIERecord* cieRecord, - FIRCLSDwarfState* state, - intptr_t* codeOffset) { - uint8_t operand = instruction & DW_CFA_OPERAND_MASK; - bool success = false; - - switch (instruction & DW_CFA_OPCODE_MASK) { - case DW_CFA_offset: - success = FIRCLSDwarfParseAndExecute_offset(cursor, cieRecord, state, operand); - break; - case DW_CFA_advance_loc: - success = - FIRCLSDwarfParseAndExecute_advance_loc(cursor, cieRecord, state, operand, codeOffset); - break; - case DW_CFA_restore: - FIRCLSSDKLog("Error: Unimplemented DWARF instruction with operand 0x%x\n", instruction); - break; - default: - FIRCLSSDKLog("Error: Unrecognized DWARF instruction 0x%x\n", instruction); - break; - } - - return success; -} - -#pragma mark - Expressions -static bool FIRCLSDwarfEvalulateExpression(const void* cursor, - const FIRCLSThreadContext* registers, - intptr_t stackValue, - intptr_t* result) { - FIRCLSDwarfLog("starting at %p with initial value %lx\n", cursor, stackValue); - - if (!FIRCLSIsValidPointer(cursor) || !FIRCLSIsValidPointer(result)) { - FIRCLSSDKLog("Error: inputs invalid\n"); - return false; - } - - FIRCLSDwarfExpressionMachine machine; - - if (!FIRCLSDwarfExpressionMachineInit(&machine, cursor, registers, stackValue)) { - FIRCLSSDKLog("Error: unable to init DWARF expression machine\n"); - return false; - } - - if (!FIRCLSDwarfExpressionMachinePrepareForExecution(&machine)) { - FIRCLSSDKLog("Error: unable to prepare for execution\n"); - return false; - } - - while (!FIRCLSDwarfExpressionMachineIsFinished(&machine)) { - if (!FIRCLSDwarfExpressionMachineExecuteNextOpcode(&machine)) { - FIRCLSSDKLog("Error: failed to execute DWARF machine opcode\n"); - return false; - } - } - - if (!FIRCLSDwarfExpressionMachineGetResult(&machine, result)) { - FIRCLSSDKLog("Error: failed to get DWARF expression result\n"); - return false; - } - - FIRCLSDwarfLog("successfully computed expression result\n"); - - return true; -} - -#pragma mark - Execution -bool FIRCLSDwarfInstructionsEnumerate(DWARFInstructions* instructions, - DWARFCIERecord* cieRecord, - FIRCLSDwarfState* state, - intptr_t pcOffset) { - if (!instructions || !cieRecord || !state) { - FIRCLSSDKLog("Error: inputs invalid\n"); - return false; - } - - // This is a little bit of state that can't be put into the state structure, because - // it is possible for instructions to push/pop state that does not affect this value. - intptr_t codeOffset = 0; - - const void* cursor = instructions->data; - const void* endAddress = cursor + instructions->length; - - FIRCLSDwarfLog("Running instructions from %p to %p\n", cursor, endAddress); - - // parse the instructions, as long as: - // - our data pointer is still in range - // - the pc offset is within the range of instructions that apply - - while ((cursor < endAddress) && (codeOffset < pcOffset)) { - uint8_t instruction = FIRCLSParseUint8AndAdvance(&cursor); - bool success = false; - - switch (instruction) { - case DW_CFA_nop: - FIRCLSDwarfLog("DW_CFA_nop\n"); - continue; - case DW_CFA_set_loc: - success = FIRCLSDwarfParseAndExecute_set_loc(&cursor, cieRecord, &codeOffset); - break; - case DW_CFA_advance_loc1: - success = FIRCLSDwarfParseAndExecute_advance_loc1(&cursor, cieRecord, &codeOffset); - break; - case DW_CFA_advance_loc2: - success = FIRCLSDwarfParseAndExecute_advance_loc2(&cursor, cieRecord, &codeOffset); - break; - case DW_CFA_advance_loc4: - success = FIRCLSDwarfParseAndExecute_advance_loc4(&cursor, cieRecord, &codeOffset); - break; - case DW_CFA_def_cfa: - success = FIRCLSDwarfParseAndExecute_def_cfa(&cursor, cieRecord, state); - break; - case DW_CFA_def_cfa_register: - success = FIRCLSDwarfParseAndExecute_def_cfa_register(&cursor, cieRecord, state); - break; - case DW_CFA_def_cfa_offset: - success = FIRCLSDwarfParseAndExecute_def_cfa_offset(&cursor, cieRecord, state); - break; - case DW_CFA_same_value: - success = FIRCLSDwarfParseAndExecute_same_value(&cursor, cieRecord, state); - break; - case DW_CFA_register: - success = FIRCLSDwarfParseAndExecute_register(&cursor, cieRecord, state); - break; - case DW_CFA_def_cfa_expression: - success = FIRCLSDwarfParseAndExecute_def_cfa_expression(&cursor, cieRecord, state); - break; - case DW_CFA_expression: - success = FIRCLSDwarfParseAndExecute_expression(&cursor, cieRecord, state); - break; - case DW_CFA_val_expression: - success = FIRCLSDwarfParseAndExecute_val_expression(&cursor, cieRecord, state); - break; - case DW_CFA_offset_extended: - case DW_CFA_restore_extended: - case DW_CFA_undefined: - case DW_CFA_remember_state: - case DW_CFA_restore_state: - case DW_CFA_offset_extended_sf: - case DW_CFA_def_cfa_sf: - case DW_CFA_def_cfa_offset_sf: - case DW_CFA_val_offset: - case DW_CFA_val_offset_sf: - case DW_CFA_GNU_window_save: - case DW_CFA_GNU_args_size: - case DW_CFA_GNU_negative_offset_extended: - FIRCLSSDKLog("Error: Unimplemented DWARF instruction 0x%x\n", instruction); - return false; - default: - success = FIRCLSDwarfParseAndExecuteInstructionWithOperand(&cursor, instruction, cieRecord, - state, &codeOffset); - break; - } - - if (!success) { - FIRCLSSDKLog("Error: Failed to execute dwarf instruction 0x%x\n", instruction); - return false; - } - } - - return true; -} - -bool FIRCLSDwarfUnwindComputeRegisters(FIRCLSDwarfCFIRecord* record, - FIRCLSThreadContext* registers) { - if (!record || !registers) { - return false; - } - - // We need to run the dwarf instructions to compute our register values. - // - initialize state - // - run the CIE instructions - // - run the FDE instructions - // - grab the values - - FIRCLSDwarfState state; - - memset(&state, 0, sizeof(FIRCLSDwarfState)); - - // We need to run all the instructions in the CIE record. So, pass in a large value for the pc - // offset so we don't stop early. - if (!FIRCLSDwarfInstructionsEnumerate(&record->cie.instructions, &record->cie, &state, - INTPTR_MAX)) { - FIRCLSSDKLog("Error: Unable to run CIE instructions\n"); - return false; - } - - intptr_t pcOffset = FIRCLSThreadContextGetPC(registers) - record->fde.startAddress; - if (pcOffset < 0) { - FIRCLSSDKLog("Error: The FDE pcOffset value cannot be negative\n"); - return false; - } - - if (!FIRCLSDwarfInstructionsEnumerate(&record->fde.instructions, &record->cie, &state, - pcOffset)) { - FIRCLSSDKLog("Error: Unable to run FDE instructions\n"); - return false; - } - - uintptr_t cfaRegister = 0; - - if (!FIRCLSDwarfGetCFA(&state, registers, &cfaRegister)) { - FIRCLSSDKLog("Error: failed to get CFA\n"); - return false; - } - - if (!FIRCLSDwarfUnwindAssignRegisters(&state, registers, cfaRegister, registers)) { - FIRCLSSDKLogError("Error: Unable to assign DWARF registers\n"); - return false; - } - - return true; -} - -bool FIRCLSDwarfUnwindAssignRegisters(const FIRCLSDwarfState* state, - const FIRCLSThreadContext* registers, - uintptr_t cfaRegister, - FIRCLSThreadContext* outputRegisters) { - if (!FIRCLSIsValidPointer(state) || !FIRCLSIsValidPointer(registers)) { - FIRCLSSDKLogError("Error: input invalid\n"); - return false; - } - - // make a copy, which we'll be changing - FIRCLSThreadContext newThreadState = *registers; - - // loop through all the registers, so we can set their values - for (size_t i = 0; i <= CLS_DWARF_MAX_REGISTER_NUM; ++i) { - if (state->registers[i].location == FIRCLSDwarfRegisterUnused) { - continue; - } - - const uintptr_t value = - FIRCLSDwarfGetSavedRegister(registers, cfaRegister, state->registers[i]); - - if (!FIRCLSDwarfUnwindSetRegisterValue(&newThreadState, i, value)) { - FIRCLSSDKLog("Error: Unable to restore register value\n"); - return false; - } - } - - if (!FIRCLSDwarfUnwindSetRegisterValue(&newThreadState, CLS_DWARF_REG_SP, cfaRegister)) { - FIRCLSSDKLog("Error: Unable to restore SP value\n"); - return false; - } - - // sanity-check that things have changed - if (FIRCLSDwarfCompareRegisters(registers, &newThreadState, CLS_DWARF_REG_SP)) { - FIRCLSSDKLog("Error: Stack pointer hasn't changed\n"); - return false; - } - - if (FIRCLSDwarfCompareRegisters(registers, &newThreadState, CLS_DWARF_REG_RETURN)) { - FIRCLSSDKLog("Error: PC hasn't changed\n"); - return false; - } - - // set our new value - *outputRegisters = newThreadState; - - return true; -} - -#pragma mark - Register Operations -bool FIRCLSDwarfCompareRegisters(const FIRCLSThreadContext* a, - const FIRCLSThreadContext* b, - uint64_t registerNum) { - return FIRCLSDwarfUnwindGetRegisterValue(a, registerNum) == - FIRCLSDwarfUnwindGetRegisterValue(b, registerNum); -} - -bool FIRCLSDwarfGetCFA(FIRCLSDwarfState* state, - const FIRCLSThreadContext* registers, - uintptr_t* cfa) { - if (!FIRCLSIsValidPointer(state) || !FIRCLSIsValidPointer(registers) || - !FIRCLSIsValidPointer(cfa)) { - FIRCLSSDKLog("Error: invalid input\n"); - return false; - } - - if (state->cfaExpression) { - if (!FIRCLSDwarfEvalulateExpression(state->cfaExpression, registers, 0, (intptr_t*)cfa)) { - FIRCLSSDKLog("Error: failed to compute CFA expression\n"); - return false; - } - - return true; - } - - // libunwind checks that cfaRegister is not zero. This seems like a potential bug - why couldn't - // it be zero? - - *cfa = FIRCLSDwarfUnwindGetRegisterValue(registers, state->cfaRegister) + - (uintptr_t)state->cfaRegisterOffset; - - return true; -} - -uintptr_t FIRCLSDwarfGetSavedRegister(const FIRCLSThreadContext* registers, - uintptr_t cfaRegister, - FIRCLSDwarfRegister dRegister) { - intptr_t result = 0; - - FIRCLSDwarfLog("Getting register %x\n", dRegister.location); - - switch (dRegister.location) { - case FIRCLSDwarfRegisterInCFA: { - const uintptr_t address = cfaRegister + (uintptr_t)dRegister.value; - - if (!FIRCLSReadMemory(address, &result, sizeof(result))) { - FIRCLSSDKLog("Error: Unable to read CFA value\n"); - return 0; - } - } - return result; - case FIRCLSDwarfRegisterInRegister: - return FIRCLSDwarfUnwindGetRegisterValue(registers, dRegister.value); - case FIRCLSDwarfRegisterOffsetFromCFA: - FIRCLSSDKLog("Error: OffsetFromCFA unhandled\n"); - break; - case FIRCLSDwarfRegisterAtExpression: - if (!FIRCLSDwarfEvalulateExpression((void*)dRegister.value, registers, cfaRegister, - &result)) { - FIRCLSSDKLog("Error: unable to evaluate expression\n"); - return 0; - } - - if (!FIRCLSReadMemory(result, &result, sizeof(result))) { - FIRCLSSDKLog("Error: Unable to read memory computed from expression\n"); - return 0; - } - - return result; - case FIRCLSDwarfRegisterIsExpression: - if (!FIRCLSDwarfEvalulateExpression((void*)dRegister.value, registers, cfaRegister, - &result)) { - FIRCLSSDKLog("Error: unable to evaluate expression\n"); - return 0; - } - - return result; - default: - FIRCLSSDKLog("Error: Unrecognized register save location 0x%x\n", dRegister.location); - break; - } - - return 0; -} - -#if DEBUG -#pragma mark - Debugging -void FIRCLSCFIRecordShow(FIRCLSDwarfCFIRecord* record) { - if (!record) { - FIRCLSSDKLog("Error: CFI record: null\n"); - return; - } - - FIRCLSCIERecordShow(&record->cie); - FIRCLSFDERecordShow(&record->fde, &record->cie); -} - -void FIRCLSCIERecordShow(DWARFCIERecord* record) { - if (!record) { - FIRCLSSDKLog("Error: CIE: null\n"); - return; - } - - FIRCLSSDKLog("CIE:\n"); - FIRCLSSDKLog(" length: %llu\n", record->length); - FIRCLSSDKLog(" version: %u\n", record->version); - FIRCLSSDKLog(" augmentation: %s\n", record->augmentation); - FIRCLSSDKLog(" EH Data: 0x%04lx\n", record->ehData); - FIRCLSSDKLog("LSDA encoding: 0x%02x\n", record->lsdaEncoding); - FIRCLSSDKLog(" personality: 0x%lx\n", record->personalityFunction); - - FIRCLSDwarfPointerEncodingShow(" encoding", record->pointerEncoding); - FIRCLSDwarfPointerEncodingShow(" P encoding", record->personalityEncoding); - - FIRCLSSDKLog(" code align: %llu\n", record->codeAlignFactor); - FIRCLSSDKLog(" data align: %lld\n", record->dataAlignFactor); - FIRCLSSDKLog(" RA register: %llu\n", record->returnAddressRegister); - - FIRCLSDwarfInstructionsShow(&record->instructions, record); -} - -void FIRCLSFDERecordShow(DWARFFDERecord* record, DWARFCIERecord* cie) { - if (!record) { - FIRCLSSDKLog("FDE: null\n"); - return; - } - - FIRCLSSDKLog("FDE:\n"); - FIRCLSSDKLog(" length: %llu\n", record->length); - FIRCLSSDKLog(" CIE offset: %llu\n", record->cieOffset); - FIRCLSSDKLog(" start addr: 0x%lx\n", record->startAddress); - FIRCLSSDKLog(" range: %lu\n", record->rangeSize); - - FIRCLSDwarfInstructionsShow(&record->instructions, cie); -} - -void FIRCLSDwarfPointerEncodingShow(const char* leadString, uint8_t encoding) { - if (encoding == DW_EH_PE_omit) { - FIRCLSSDKLog("%s: 0x%02x (omit)\n", leadString, encoding); - } else { - const char* peValue = ""; - const char* peOffset = ""; - - switch (encoding & DW_EH_PE_VALUE_MASK) { - case DW_EH_PE_absptr: - peValue = "DW_EH_PE_absptr"; - break; - case DW_EH_PE_uleb128: - peValue = "DW_EH_PE_uleb128"; - break; - case DW_EH_PE_udata2: - peValue = "DW_EH_PE_udata2"; - break; - case DW_EH_PE_udata4: - peValue = "DW_EH_PE_udata4"; - break; - case DW_EH_PE_udata8: - peValue = "DW_EH_PE_udata8"; - break; - case DW_EH_PE_signed: - peValue = "DW_EH_PE_signed"; - break; - case DW_EH_PE_sleb128: - peValue = "DW_EH_PE_sleb128"; - break; - case DW_EH_PE_sdata2: - peValue = "DW_EH_PE_sdata2"; - break; - case DW_EH_PE_sdata4: - peValue = "DW_EH_PE_sdata4"; - break; - case DW_EH_PE_sdata8: - peValue = "DW_EH_PE_sdata8"; - break; - default: - peValue = "unknown"; - break; - } - - switch (encoding & DW_EH_PE_RELATIVE_OFFSET_MASK) { - case DW_EH_PE_absptr: - break; - case DW_EH_PE_pcrel: - peOffset = " + DW_EH_PE_pcrel"; - break; - case DW_EH_PE_textrel: - peOffset = " + DW_EH_PE_textrel"; - break; - case DW_EH_PE_datarel: - peOffset = " + DW_EH_PE_datarel"; - break; - case DW_EH_PE_funcrel: - peOffset = " + DW_EH_PE_funcrel"; - break; - case DW_EH_PE_aligned: - peOffset = " + DW_EH_PE_aligned"; - break; - case DW_EH_PE_indirect: - peOffset = " + DW_EH_PE_indirect"; - break; - default: - break; - } - - FIRCLSSDKLog("%s: 0x%02x (%s%s)\n", leadString, encoding, peValue, peOffset); - } -} - -void FIRCLSDwarfInstructionsShow(DWARFInstructions* instructions, DWARFCIERecord* cie) { - if (!instructions) { - FIRCLSSDKLog("Error: Instructions null\n"); - } - - FIRCLSDwarfState state; - - memset(&state, 0, sizeof(FIRCLSDwarfState)); - - FIRCLSDwarfInstructionsEnumerate(instructions, cie, &state, -1); -} - -#endif - -#else -INJECT_STRIP_SYMBOL(dwarf_unwind) -#endif diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Unwind/Dwarf/FIRCLSDwarfUnwind.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Unwind/Dwarf/FIRCLSDwarfUnwind.h deleted file mode 100644 index bbb28805bb..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Unwind/Dwarf/FIRCLSDwarfUnwind.h +++ /dev/null @@ -1,138 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#pragma once - -#include -#include -#include - -#include "FIRCLSDwarfUnwindRegisters.h" -#include "FIRCLSThreadState.h" - -#if CLS_DWARF_UNWINDING_SUPPORTED - -#pragma mark Structures -typedef struct { - uint32_t length; - const void* data; -} DWARFInstructions; - -typedef struct { - uint64_t length; - uint8_t version; - uintptr_t ehData; // 8 bytes for 64-bit architectures, 4 bytes for 32 - const char* augmentation; - uint8_t pointerEncoding; - uint8_t lsdaEncoding; - uint8_t personalityEncoding; - uintptr_t personalityFunction; - uint64_t codeAlignFactor; - int64_t dataAlignFactor; - uint64_t returnAddressRegister; // is 64 bits enough for this value? - bool signalFrame; - - DWARFInstructions instructions; -} DWARFCIERecord; - -typedef struct { - uint64_t length; - uint64_t cieOffset; // also an arch-specific size - uintptr_t startAddress; - uintptr_t rangeSize; - - DWARFInstructions instructions; -} DWARFFDERecord; - -typedef struct { - DWARFCIERecord cie; - DWARFFDERecord fde; -} FIRCLSDwarfCFIRecord; - -typedef enum { - FIRCLSDwarfRegisterUnused = 0, - FIRCLSDwarfRegisterInCFA, - FIRCLSDwarfRegisterOffsetFromCFA, - FIRCLSDwarfRegisterInRegister, - FIRCLSDwarfRegisterAtExpression, - FIRCLSDwarfRegisterIsExpression -} FIRCLSDwarfRegisterLocation; - -typedef struct { - FIRCLSDwarfRegisterLocation location; - uint64_t value; -} FIRCLSDwarfRegister; - -typedef struct { - uint64_t cfaRegister; - int64_t cfaRegisterOffset; - const void* cfaExpression; - uint32_t spArgSize; - - FIRCLSDwarfRegister registers[CLS_DWARF_MAX_REGISTER_NUM + 1]; -} FIRCLSDwarfState; - -__BEGIN_DECLS - -#pragma mark - Parsing -bool FIRCLSDwarfParseCIERecord(DWARFCIERecord* cie, const void* ptr); -bool FIRCLSDwarfParseFDERecord(DWARFFDERecord* fdeRecord, - bool parseCIE, - DWARFCIERecord* cieRecord, - const void* ptr); -bool FIRCLSDwarfParseCFIFromFDERecord(FIRCLSDwarfCFIRecord* record, const void* ptr); -bool FIRCLSDwarfParseCFIFromFDERecordOffset(FIRCLSDwarfCFIRecord* record, - const void* ehFrame, - uintptr_t fdeOffset); - -#pragma mark - Properties -bool FIRCLSDwarfCIEIsValid(DWARFCIERecord* cie); -bool FIRCLSDwarfCIEHasAugmentationData(DWARFCIERecord* cie); - -#pragma mark - Execution -bool FIRCLSDwarfInstructionsEnumerate(DWARFInstructions* instructions, - DWARFCIERecord* cieRecord, - FIRCLSDwarfState* state, - intptr_t pcOffset); -bool FIRCLSDwarfUnwindComputeRegisters(FIRCLSDwarfCFIRecord* record, - FIRCLSThreadContext* registers); -bool FIRCLSDwarfUnwindAssignRegisters(const FIRCLSDwarfState* state, - const FIRCLSThreadContext* registers, - uintptr_t cfaRegister, - FIRCLSThreadContext* outputRegisters); - -#pragma mark - Register Operations -bool FIRCLSDwarfCompareRegisters(const FIRCLSThreadContext* a, - const FIRCLSThreadContext* b, - uint64_t registerNum); - -bool FIRCLSDwarfGetCFA(FIRCLSDwarfState* state, - const FIRCLSThreadContext* registers, - uintptr_t* cfa); -uintptr_t FIRCLSDwarfGetSavedRegister(const FIRCLSThreadContext* registers, - uintptr_t cfaRegister, - FIRCLSDwarfRegister dRegister); - -#if DEBUG -#pragma mark - Debugging -void FIRCLSCFIRecordShow(FIRCLSDwarfCFIRecord* record); -void FIRCLSCIERecordShow(DWARFCIERecord* record); -void FIRCLSFDERecordShow(DWARFFDERecord* record, DWARFCIERecord* cie); -void FIRCLSDwarfPointerEncodingShow(const char* leadString, uint8_t encoding); -void FIRCLSDwarfInstructionsShow(DWARFInstructions* instructions, DWARFCIERecord* cie); -#endif - -__END_DECLS - -#endif diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Unwind/Dwarf/FIRCLSDwarfUnwindRegisters.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Unwind/Dwarf/FIRCLSDwarfUnwindRegisters.h deleted file mode 100644 index 1e37396925..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Unwind/Dwarf/FIRCLSDwarfUnwindRegisters.h +++ /dev/null @@ -1,152 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#pragma once - -#include - -#include "FIRCLSFeatures.h" - -#if CLS_CPU_X86_64 -enum { - CLS_DWARF_X86_64_RAX = 0, - CLS_DWARF_X86_64_RDX = 1, - CLS_DWARF_X86_64_RCX = 2, - CLS_DWARF_X86_64_RBX = 3, - CLS_DWARF_X86_64_RSI = 4, - CLS_DWARF_X86_64_RDI = 5, - CLS_DWARF_X86_64_RBP = 6, - CLS_DWARF_X86_64_RSP = 7, - CLS_DWARF_X86_64_R8 = 8, - CLS_DWARF_X86_64_R9 = 9, - CLS_DWARF_X86_64_R10 = 10, - CLS_DWARF_X86_64_R11 = 11, - CLS_DWARF_X86_64_R12 = 12, - CLS_DWARF_X86_64_R13 = 13, - CLS_DWARF_X86_64_R14 = 14, - CLS_DWARF_X86_64_R15 = 15, - - CLS_DWARF_X86_64_RET_ADDR = 16 -}; - -#define CLS_DWARF_REG_RETURN CLS_DWARF_X86_64_RET_ADDR -#define CLS_DWARF_REG_SP CLS_DWARF_X86_64_RSP -#define CLS_DWARF_REG_FP CLS_DWARF_X86_64_RBP - -#define CLS_DWARF_MAX_REGISTER_NUM (CLS_DWARF_X86_64_RET_ADDR) - -#elif CLS_CPU_I386 - -enum { - CLS_DWARF_X86_EAX = 0, - CLS_DWARF_X86_ECX = 1, - CLS_DWARF_X86_EDX = 2, - CLS_DWARF_X86_EBX = 3, - CLS_DWARF_X86_EBP = 4, - CLS_DWARF_X86_ESP = 5, - CLS_DWARF_X86_ESI = 6, - CLS_DWARF_X86_EDI = 7, - - CLS_DWARF_X86_RET_ADDR = 8 -}; - -#define CLS_DWARF_REG_RETURN CLS_DWARF_X86_RET_ADDR -#define CLS_DWARF_REG_SP CLS_DWARF_X86_ESP -#define CLS_DWARF_REG_FP CLS_DWARF_X86_EBP - -#define CLS_DWARF_MAX_REGISTER_NUM (CLS_DWARF_X86_RET_ADDR) - -#elif CLS_CPU_ARM64 - -// 64-bit ARM64 registers -enum { - CLS_DWARF_ARM64_X0 = 0, - CLS_DWARF_ARM64_X1 = 1, - CLS_DWARF_ARM64_X2 = 2, - CLS_DWARF_ARM64_X3 = 3, - CLS_DWARF_ARM64_X4 = 4, - CLS_DWARF_ARM64_X5 = 5, - CLS_DWARF_ARM64_X6 = 6, - CLS_DWARF_ARM64_X7 = 7, - CLS_DWARF_ARM64_X8 = 8, - CLS_DWARF_ARM64_X9 = 9, - CLS_DWARF_ARM64_X10 = 10, - CLS_DWARF_ARM64_X11 = 11, - CLS_DWARF_ARM64_X12 = 12, - CLS_DWARF_ARM64_X13 = 13, - CLS_DWARF_ARM64_X14 = 14, - CLS_DWARF_ARM64_X15 = 15, - CLS_DWARF_ARM64_X16 = 16, - CLS_DWARF_ARM64_X17 = 17, - CLS_DWARF_ARM64_X18 = 18, - CLS_DWARF_ARM64_X19 = 19, - CLS_DWARF_ARM64_X20 = 20, - CLS_DWARF_ARM64_X21 = 21, - CLS_DWARF_ARM64_X22 = 22, - CLS_DWARF_ARM64_X23 = 23, - CLS_DWARF_ARM64_X24 = 24, - CLS_DWARF_ARM64_X25 = 25, - CLS_DWARF_ARM64_X26 = 26, - CLS_DWARF_ARM64_X27 = 27, - CLS_DWARF_ARM64_X28 = 28, - CLS_DWARF_ARM64_X29 = 29, - CLS_DWARF_ARM64_FP = 29, - CLS_DWARF_ARM64_X30 = 30, - CLS_DWARF_ARM64_LR = 30, - CLS_DWARF_ARM64_X31 = 31, - CLS_DWARF_ARM64_SP = 31, - // reserved block - CLS_DWARF_ARM64_D0 = 64, - CLS_DWARF_ARM64_D1 = 65, - CLS_DWARF_ARM64_D2 = 66, - CLS_DWARF_ARM64_D3 = 67, - CLS_DWARF_ARM64_D4 = 68, - CLS_DWARF_ARM64_D5 = 69, - CLS_DWARF_ARM64_D6 = 70, - CLS_DWARF_ARM64_D7 = 71, - CLS_DWARF_ARM64_D8 = 72, - CLS_DWARF_ARM64_D9 = 73, - CLS_DWARF_ARM64_D10 = 74, - CLS_DWARF_ARM64_D11 = 75, - CLS_DWARF_ARM64_D12 = 76, - CLS_DWARF_ARM64_D13 = 77, - CLS_DWARF_ARM64_D14 = 78, - CLS_DWARF_ARM64_D15 = 79, - CLS_DWARF_ARM64_D16 = 80, - CLS_DWARF_ARM64_D17 = 81, - CLS_DWARF_ARM64_D18 = 82, - CLS_DWARF_ARM64_D19 = 83, - CLS_DWARF_ARM64_D20 = 84, - CLS_DWARF_ARM64_D21 = 85, - CLS_DWARF_ARM64_D22 = 86, - CLS_DWARF_ARM64_D23 = 87, - CLS_DWARF_ARM64_D24 = 88, - CLS_DWARF_ARM64_D25 = 89, - CLS_DWARF_ARM64_D26 = 90, - CLS_DWARF_ARM64_D27 = 91, - CLS_DWARF_ARM64_D28 = 92, - CLS_DWARF_ARM64_D29 = 93, - CLS_DWARF_ARM64_D30 = 94, - CLS_DWARF_ARM64_D31 = 95 -}; - -#define CLS_DWARF_MAX_REGISTER_NUM (CLS_DWARF_ARM64_SP) - -#define CLS_DWARF_REG_RETURN CLS_DWARF_ARM64_LR -#define CLS_DWARF_REG_SP CLS_DWARF_ARM64_SP -#define CLS_DWARF_REG_FP CLS_DWARF_ARM64_FP - -#endif - -#define CLS_DWARF_INVALID_REGISTER_NUM (CLS_DWARF_MAX_REGISTER_NUM + 1) diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Unwind/FIRCLSUnwind.c b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Unwind/FIRCLSUnwind.c deleted file mode 100644 index 7961071d25..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Unwind/FIRCLSUnwind.c +++ /dev/null @@ -1,319 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "FIRCLSUnwind.h" -#include "FIRCLSBinaryImage.h" -#include "FIRCLSCompactUnwind.h" -#include "FIRCLSFeatures.h" -#include "FIRCLSGlobals.h" -#include "FIRCLSUtility.h" - -#include -#include -#include - -// Without a limit on the number of frames we unwind, there's a real possibility -// we'll get stuck in an infinite loop. But, we still need pretty big limits, -// because stacks can get quite big. Also, the stacks are different on the platforms. -// These values were empirically determined (~525000 on OS X, ~65000 on iOS). -#if TARGET_OS_EMBEDDED -const uint32_t FIRCLSUnwindMaxFrames = 100000; -#else -const uint32_t FIRCLSUnwindMaxFrames = 600000; -#endif - -const uint32_t FIRCLSUnwindInfiniteRecursionCountThreshold = 10; - -#pragma mark Prototypes -static bool FIRCLSUnwindNextFrameUsingAllStrategies(FIRCLSUnwindContext* context); -#if CLS_COMPACT_UNWINDING_SUPPORTED -static bool FIRCLSUnwindWithCompactUnwindInfo(FIRCLSUnwindContext* context); -#endif -bool FIRCLSUnwindContextHasValidPCAndSP(FIRCLSUnwindContext* context); - -#pragma mark - API -bool FIRCLSUnwindInit(FIRCLSUnwindContext* context, FIRCLSThreadContext threadContext) { - if (!context) { - return false; - } - - memset(context, 0, sizeof(FIRCLSUnwindContext)); - - context->registers = threadContext; - - return true; -} - -bool FIRCLSUnwindNextFrame(FIRCLSUnwindContext* context) { - if (!FIRCLSIsValidPointer(context)) { - FIRCLSSDKLog("Error: invalid inputs\n"); - return false; - } - - if (!FIRCLSUnwindContextHasValidPCAndSP(context)) { - // This is a special-case. It is possible to try to unwind a thread that has no stack (ie, is - // executing zero functions. I believe this happens when a thread has exited, but before the - // kernel has actually cleaned it up. This situation can only apply to the first frame. So, in - // that case, we don't count it as an error. But, if it happens mid-unwind, it's a problem. - - if (context->frameCount == 0) { - FIRCLSSDKLog("Cancelling unwind for thread with invalid PC/SP\n"); - } else { - FIRCLSSDKLog("Error: thread PC/SP invalid before unwind\n"); - } - - return false; - } - - if (!FIRCLSUnwindNextFrameUsingAllStrategies(context)) { - FIRCLSSDKLogError("Failed to advance to the next frame\n"); - return false; - } - - uintptr_t pc = FIRCLSUnwindGetPC(context); - uintptr_t sp = FIRCLSUnwindGetStackPointer(context); - - // Unwinding will complete when this is no longer a valid value - if (!FIRCLSIsValidPointer(pc)) { - return false; - } - - // after unwinding, validate that we have a sane register value - if (!FIRCLSIsValidPointer(sp)) { - FIRCLSSDKLog("Error: SP (%p) isn't a valid pointer\n", (void*)sp); - return false; - } - - // track repeating frames - if (context->lastFramePC == pc) { - context->repeatCount += 1; - } else { - context->repeatCount = 0; - } - - context->frameCount += 1; - context->lastFramePC = pc; - - return true; -} - -#pragma mark - Register Accessors -uintptr_t FIRCLSUnwindGetPC(FIRCLSUnwindContext* context) { - if (!FIRCLSIsValidPointer(context)) { - return 0; - } - - return FIRCLSThreadContextGetPC(&context->registers); -} - -uintptr_t FIRCLSUnwindGetStackPointer(FIRCLSUnwindContext* context) { - if (!FIRCLSIsValidPointer(context)) { - return 0; - } - - return FIRCLSThreadContextGetStackPointer(&context->registers); -} - -static uintptr_t FIRCLSUnwindGetFramePointer(FIRCLSUnwindContext* context) { - if (!FIRCLSIsValidPointer(context)) { - return 0; - } - - return FIRCLSThreadContextGetFramePointer(&context->registers); -} - -uint32_t FIRCLSUnwindGetFrameRepeatCount(FIRCLSUnwindContext* context) { - if (!FIRCLSIsValidPointer(context)) { - return 0; - } - - return context->repeatCount; -} - -#pragma mark - Unwind Strategies -static bool FIRCLSUnwindNextFrameUsingAllStrategies(FIRCLSUnwindContext* context) { - if (!FIRCLSIsValidPointer(context)) { - FIRCLSSDKLogError("Arguments invalid\n"); - return false; - } - - if (context->frameCount >= FIRCLSUnwindMaxFrames) { - FIRCLSSDKLogWarn("Exceeded maximum number of frames\n"); - return false; - } - - uintptr_t pc = FIRCLSUnwindGetPC(context); - - // Ok, what's going on here? libunwind's UnwindCursor::setInfoBasedOnIPRegister has a - // parameter that, if true, does this subtraction. Despite the comments in the code - // (of 35.1), I found that the parameter was almost always set to true. - // - // I then ran into a problem when unwinding from _pthread_start -> thread_start. This - // is a common transition, which happens in pretty much every report. An extra frame - // was being generated, because the PC we get for _pthread_start was mapping to exactly - // one greater than the function's last byte, according to the compact unwind info. This - // resulted in using the wrong compact encoding, and picking the next function, which - // turned out to be dwarf instead of a frame pointer. - - // So, the moral is - do the subtraction for all frames except the first. I haven't found - // a case where it produces an incorrect result. Also note that at first, I thought this would - // subtract one from the final addresses too. But, the end of this function will *compute* PC, - // so this value is used only to look up unwinding data. - - if (context->frameCount > 0) { - --pc; - if (!FIRCLSThreadContextSetPC(&context->registers, pc)) { - FIRCLSSDKLogError("Unable to set PC\n"); - return false; - } - } - - if (!FIRCLSIsValidPointer(pc)) { - FIRCLSSDKLogError("PC is invalid\n"); - return false; - } - - // the first frame is special - as the registers we need - // are already loaded by definition - if (context->frameCount == 0) { - return true; - } - -#if CLS_COMPACT_UNWINDING_SUPPORTED - // attempt to advance to the next frame using compact unwinding, and - // only fall back to the frame pointer if that fails - if (FIRCLSUnwindWithCompactUnwindInfo(context)) { - return true; - } -#endif - - // If the frame pointer is zero, we cannot use an FP-based unwind and we can reasonably - // assume that we've just gotten to the end of the stack. - if (FIRCLSUnwindGetFramePointer(context) == 0) { - FIRCLSSDKLogWarn("FP is zero, aborting unwind\n"); - // make sure to set the PC to zero, to indicate the unwind is complete - return FIRCLSThreadContextSetPC(&context->registers, 0); - } - - // Only allow stack scanning (as a last resort) if we're on the first frame. All others - // are too likely to screw up. - if (FIRCLSUnwindWithFramePointer(&context->registers, context->frameCount == 1)) { - return true; - } - - FIRCLSSDKLogError("Unable to use frame pointer\n"); - - return false; -} - -#if CLS_COMPACT_UNWINDING_SUPPORTED -static bool FIRCLSUnwindWithCompactUnwindInfo(FIRCLSUnwindContext* context) { - if (!context) { - return false; - } - - // step one - find the image the current pc is within - FIRCLSBinaryImageRuntimeNode image; - - uintptr_t pc = FIRCLSUnwindGetPC(context); - - if (!FIRCLSBinaryImageSafeFindImageForAddress(pc, &image)) { - FIRCLSSDKLogWarn("Unable to find binary for %p\n", (void*)pc); - return false; - } - -#if CLS_BINARY_IMAGE_RUNTIME_NODE_RECORD_NAME - FIRCLSSDKLogDebug("Binary image for %p at %p => %s\n", (void*)pc, image.baseAddress, image.name); -#else - FIRCLSSDKLogDebug("Binary image for %p at %p\n", (void*)pc, image.baseAddress); -#endif - - if (!FIRCLSBinaryImageSafeHasUnwindInfo(&image)) { - FIRCLSSDKLogInfo("Binary image at %p has no unwind info\n", image.baseAddress); - return false; - } - - if (!FIRCLSCompactUnwindInit(&context->compactUnwindState, image.unwindInfo, image.ehFrame, - (uintptr_t)image.baseAddress)) { - FIRCLSSDKLogError("Unable to read unwind info\n"); - return false; - } - - // this function will actually attempt to find compact unwind info for the current PC, - // and use it to mutate the context register state - return FIRCLSCompactUnwindLookupAndCompute(&context->compactUnwindState, &context->registers); -} -#endif - -#pragma mark - Utility Functions -bool FIRCLSUnwindContextHasValidPCAndSP(FIRCLSUnwindContext* context) { - return FIRCLSIsValidPointer(FIRCLSUnwindGetPC(context)) && - FIRCLSIsValidPointer(FIRCLSUnwindGetStackPointer(context)); -} - -#if CLS_CPU_64BIT -#define BASIC_INFO_TYPE vm_region_basic_info_64_t -#define BASIC_INFO VM_REGION_BASIC_INFO_64 -#define BASIC_INFO_COUNT VM_REGION_BASIC_INFO_COUNT_64 -#define vm_region_query_fn vm_region_64 -#else -#define BASIC_INFO_TYPE vm_region_basic_info_t -#define BASIC_INFO VM_REGION_BASIC_INFO -#define BASIC_INFO_COUNT VM_REGION_BASIC_INFO_COUNT -#define vm_region_query_fn vm_region -#endif -bool FIRCLSUnwindIsAddressExecutable(vm_address_t address) { -#if CLS_COMPACT_UNWINDING_SUPPORTED - FIRCLSBinaryImageRuntimeNode unusedNode; - - return FIRCLSBinaryImageSafeFindImageForAddress(address, &unusedNode); -#else - return true; -#endif -} - -bool FIRCLSUnwindFirstExecutableAddress(vm_address_t start, - vm_address_t end, - vm_address_t* foundAddress) { - // This function walks up the data on the stack, looking for the first value that is an address on - // an exectuable page. This is a heurestic, and can hit false positives. - - *foundAddress = 0; // write in a 0 - - do { - vm_address_t address; - - FIRCLSSDKLogDebug("Checking address %p => %p\n", (void*)start, (void*)*(uintptr_t*)start); - - // if start isn't a valid pointer, don't even bother trying - if (FIRCLSIsValidPointer(start)) { - if (!FIRCLSReadMemory(start, &address, sizeof(void*))) { - // if we fail to read from the stack, we're done - return false; - } - - FIRCLSSDKLogDebug("Checking for executable %p\n", (void*)address); - // when we find an exectuable address, we're finished - if (FIRCLSUnwindIsAddressExecutable(address)) { - *foundAddress = address; - return true; - } - } - - start += sizeof(void*); // move back up the stack - - } while (start < end); - - return false; -} diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Unwind/FIRCLSUnwind.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Unwind/FIRCLSUnwind.h deleted file mode 100644 index a92a2871d7..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Unwind/FIRCLSUnwind.h +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#pragma once - -#include "FIRCLSThreadState.h" -#include "FIRCLSUtility.h" -#if CLS_COMPACT_UNWINDING_SUPPORTED -#include "FIRCLSCompactUnwind.h" -#endif -#include -#include - -#include "FIRCLSUnwind_arch.h" - -extern const uint32_t FIRCLSUnwindMaxFrames; - -extern const uint32_t FIRCLSUnwindInfiniteRecursionCountThreshold; - -typedef struct { - FIRCLSThreadContext registers; - uint32_t frameCount; -#if CLS_COMPACT_UNWINDING_SUPPORTED - FIRCLSCompactUnwindContext compactUnwindState; -#endif - uintptr_t lastFramePC; - uint32_t repeatCount; -} FIRCLSUnwindContext; - -// API -bool FIRCLSUnwindInit(FIRCLSUnwindContext* context, FIRCLSThreadContext threadContext); - -bool FIRCLSUnwindNextFrame(FIRCLSUnwindContext* context); -uintptr_t FIRCLSUnwindGetPC(FIRCLSUnwindContext* context); -uintptr_t FIRCLSUnwindGetStackPointer(FIRCLSUnwindContext* context); -uint32_t FIRCLSUnwindGetFrameRepeatCount(FIRCLSUnwindContext* context); - -// utility functions -bool FIRCLSUnwindIsAddressExecutable(vm_address_t address); -bool FIRCLSUnwindFirstExecutableAddress(vm_address_t start, - vm_address_t end, - vm_address_t* foundAddress); diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Unwind/FIRCLSUnwind_arch.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Unwind/FIRCLSUnwind_arch.h deleted file mode 100644 index 3accd40ea3..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Unwind/FIRCLSUnwind_arch.h +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#pragma once - -#include "FIRCLSFeatures.h" -#include "FIRCLSThreadState.h" -#if CLS_COMPACT_UNWINDING_SUPPORTED -#include "FIRCLSCompactUnwind.h" -#endif - -bool FIRCLSUnwindWithFramePointer(FIRCLSThreadContext *registers, bool allowScanning); -uintptr_t FIRCLSUnwindStackPointerFromFramePointer(uintptr_t framePtr); - -#if CLS_DWARF_UNWINDING_SUPPORTED -uintptr_t FIRCLSCompactUnwindDwarfOffset(compact_unwind_encoding_t encoding); -bool FIRCLSDwarfUnwindSetRegisterValue(FIRCLSThreadContext *registers, - uint64_t num, - uintptr_t value); -uintptr_t FIRCLSDwarfUnwindGetRegisterValue(const FIRCLSThreadContext *registers, uint64_t num); -#endif diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Unwind/FIRCLSUnwind_arm.c b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Unwind/FIRCLSUnwind_arm.c deleted file mode 100644 index ead1a29f45..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Unwind/FIRCLSUnwind_arm.c +++ /dev/null @@ -1,313 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "FIRCLSCompactUnwind.h" -#include "FIRCLSCompactUnwind_Private.h" -#include "FIRCLSDefines.h" -#include "FIRCLSDwarfUnwind.h" -#include "FIRCLSFeatures.h" -#include "FIRCLSUnwind.h" -#include "FIRCLSUnwind_arch.h" -#include "FIRCLSUtility.h" - -#if CLS_CPU_ARM || CLS_CPU_ARM64 - -static bool FIRCLSUnwindWithLRRegister(FIRCLSThreadContext* registers) { - if (!FIRCLSIsValidPointer(registers)) { - return false; - } - - // Return address is in LR, SP is pointing to the next frame. - uintptr_t value = FIRCLSThreadContextGetLinkRegister(registers); - - if (!FIRCLSIsValidPointer(value)) { - FIRCLSSDKLog("Error: LR value is invalid\n"); - return false; - } - - return FIRCLSThreadContextSetPC(registers, value); -} - -bool FIRCLSUnwindWithFramePointer(FIRCLSThreadContext* registers, bool allowScanning) { - if (allowScanning) { - // The LR register does have the return address here, but there are situations where - // this can produce false matches. Better backend rules can fix this up in many cases. - if (FIRCLSUnwindWithLRRegister(registers)) { - return true; - } else { - // In this case, we're unable to use the LR. We don't want to just stop unwinding, so - // proceed with the normal, non-scanning path - FIRCLSSDKLog("Unable to use LR, skipping\n"); - } - } - - // read the values from the stack - const uintptr_t framePointer = FIRCLSThreadContextGetFramePointer(registers); - uintptr_t stack[2]; - - if (!FIRCLSReadMemory((vm_address_t)framePointer, stack, sizeof(stack))) { - // unable to read the first stack frame - FIRCLSSDKLog("Error: failed to read memory at address %p\n", (void*)framePointer); - return false; - } - - if (!FIRCLSThreadContextSetPC(registers, stack[1])) { - return false; - } - - if (!FIRCLSThreadContextSetFramePointer(registers, stack[0])) { - return false; - } - - if (!FIRCLSThreadContextSetStackPointer(registers, - FIRCLSUnwindStackPointerFromFramePointer(framePointer))) { - return false; - } - - return true; -} - -uintptr_t FIRCLSUnwindStackPointerFromFramePointer(uintptr_t framePtr) { - // the stack pointer is the frame pointer plus the two saved pointers for the frame - return framePtr + 2 * sizeof(void*); -} - -#if CLS_COMPACT_UNWINDING_SUPPORTED -bool FIRCLSCompactUnwindComputeRegisters(FIRCLSCompactUnwindContext* context, - FIRCLSCompactUnwindResult* result, - FIRCLSThreadContext* registers) { - if (!context || !result || !registers) { - return false; - } - - // Note that compact_uwnind_encoding.h has a few bugs in it prior to iOS 8.0. - // Only refer to the >= 8.0 header. - switch (result->encoding & UNWIND_ARM64_MODE_MASK) { - case UNWIND_ARM64_MODE_FRAMELESS: - // Interestingly, we also know the size of the stack frame, by - // using UNWIND_ARM64_FRAMELESS_STACK_SIZE_MASK. Is that useful? - return FIRCLSUnwindWithLRRegister(registers); - break; - case UNWIND_ARM64_MODE_DWARF: - return FIRCLSCompactUnwindDwarfFrame( - context, result->encoding & UNWIND_ARM64_DWARF_SECTION_OFFSET, registers); - break; - case UNWIND_ARM64_MODE_FRAME: - return FIRCLSUnwindWithFramePointer(registers, false); - default: - FIRCLSSDKLog("Invalid encoding 0x%x\n", result->encoding); - break; - } - - return false; -} -#endif - -#if CLS_DWARF_UNWINDING_SUPPORTED -uintptr_t FIRCLSDwarfUnwindGetRegisterValue(const FIRCLSThreadContext* registers, uint64_t num) { - switch (num) { - case CLS_DWARF_ARM64_X0: - return registers->__ss.__x[0]; - case CLS_DWARF_ARM64_X1: - return registers->__ss.__x[1]; - case CLS_DWARF_ARM64_X2: - return registers->__ss.__x[2]; - case CLS_DWARF_ARM64_X3: - return registers->__ss.__x[3]; - case CLS_DWARF_ARM64_X4: - return registers->__ss.__x[4]; - case CLS_DWARF_ARM64_X5: - return registers->__ss.__x[5]; - case CLS_DWARF_ARM64_X6: - return registers->__ss.__x[6]; - case CLS_DWARF_ARM64_X7: - return registers->__ss.__x[7]; - case CLS_DWARF_ARM64_X8: - return registers->__ss.__x[8]; - case CLS_DWARF_ARM64_X9: - return registers->__ss.__x[9]; - case CLS_DWARF_ARM64_X10: - return registers->__ss.__x[10]; - case CLS_DWARF_ARM64_X11: - return registers->__ss.__x[11]; - case CLS_DWARF_ARM64_X12: - return registers->__ss.__x[12]; - case CLS_DWARF_ARM64_X13: - return registers->__ss.__x[13]; - case CLS_DWARF_ARM64_X14: - return registers->__ss.__x[14]; - case CLS_DWARF_ARM64_X15: - return registers->__ss.__x[15]; - case CLS_DWARF_ARM64_X16: - return registers->__ss.__x[16]; - case CLS_DWARF_ARM64_X17: - return registers->__ss.__x[17]; - case CLS_DWARF_ARM64_X18: - return registers->__ss.__x[18]; - case CLS_DWARF_ARM64_X19: - return registers->__ss.__x[19]; - case CLS_DWARF_ARM64_X20: - return registers->__ss.__x[20]; - case CLS_DWARF_ARM64_X21: - return registers->__ss.__x[21]; - case CLS_DWARF_ARM64_X22: - return registers->__ss.__x[22]; - case CLS_DWARF_ARM64_X23: - return registers->__ss.__x[23]; - case CLS_DWARF_ARM64_X24: - return registers->__ss.__x[24]; - case CLS_DWARF_ARM64_X25: - return registers->__ss.__x[25]; - case CLS_DWARF_ARM64_X26: - return registers->__ss.__x[26]; - case CLS_DWARF_ARM64_X27: - return registers->__ss.__x[27]; - case CLS_DWARF_ARM64_X28: - return registers->__ss.__x[28]; - case CLS_DWARF_ARM64_FP: - return FIRCLSThreadContextGetFramePointer(registers); - case CLS_DWARF_ARM64_LR: - return FIRCLSThreadContextGetLinkRegister(registers); - case CLS_DWARF_ARM64_SP: - return FIRCLSThreadContextGetStackPointer(registers); - default: - break; - } - - FIRCLSSDKLog("Error: Unrecognized get register number %llu\n", num); - - return 0; -} - -bool FIRCLSDwarfUnwindSetRegisterValue(FIRCLSThreadContext* registers, - uint64_t num, - uintptr_t value) { - switch (num) { - case CLS_DWARF_ARM64_X0: - registers->__ss.__x[0] = value; - return true; - case CLS_DWARF_ARM64_X1: - registers->__ss.__x[1] = value; - return true; - case CLS_DWARF_ARM64_X2: - registers->__ss.__x[2] = value; - return true; - case CLS_DWARF_ARM64_X3: - registers->__ss.__x[3] = value; - return true; - case CLS_DWARF_ARM64_X4: - registers->__ss.__x[4] = value; - return true; - case CLS_DWARF_ARM64_X5: - registers->__ss.__x[5] = value; - return true; - case CLS_DWARF_ARM64_X6: - registers->__ss.__x[6] = value; - return true; - case CLS_DWARF_ARM64_X7: - registers->__ss.__x[7] = value; - return true; - case CLS_DWARF_ARM64_X8: - registers->__ss.__x[8] = value; - return true; - case CLS_DWARF_ARM64_X9: - registers->__ss.__x[9] = value; - return true; - case CLS_DWARF_ARM64_X10: - registers->__ss.__x[10] = value; - return true; - case CLS_DWARF_ARM64_X11: - registers->__ss.__x[11] = value; - return true; - case CLS_DWARF_ARM64_X12: - registers->__ss.__x[12] = value; - return true; - case CLS_DWARF_ARM64_X13: - registers->__ss.__x[13] = value; - return true; - case CLS_DWARF_ARM64_X14: - registers->__ss.__x[14] = value; - return true; - case CLS_DWARF_ARM64_X15: - registers->__ss.__x[15] = value; - return true; - case CLS_DWARF_ARM64_X16: - registers->__ss.__x[16] = value; - return true; - case CLS_DWARF_ARM64_X17: - registers->__ss.__x[17] = value; - return true; - case CLS_DWARF_ARM64_X18: - registers->__ss.__x[18] = value; - return true; - case CLS_DWARF_ARM64_X19: - registers->__ss.__x[19] = value; - return true; - case CLS_DWARF_ARM64_X20: - registers->__ss.__x[20] = value; - return true; - case CLS_DWARF_ARM64_X21: - registers->__ss.__x[21] = value; - return true; - case CLS_DWARF_ARM64_X22: - registers->__ss.__x[22] = value; - return true; - case CLS_DWARF_ARM64_X23: - registers->__ss.__x[23] = value; - return true; - case CLS_DWARF_ARM64_X24: - registers->__ss.__x[24] = value; - return true; - case CLS_DWARF_ARM64_X25: - registers->__ss.__x[25] = value; - return true; - case CLS_DWARF_ARM64_X26: - registers->__ss.__x[26] = value; - return true; - case CLS_DWARF_ARM64_X27: - registers->__ss.__x[27] = value; - return true; - case CLS_DWARF_ARM64_X28: - registers->__ss.__x[28] = value; - return true; - case CLS_DWARF_ARM64_FP: - FIRCLSThreadContextSetFramePointer(registers, value); - return true; - case CLS_DWARF_ARM64_SP: - FIRCLSThreadContextSetStackPointer(registers, value); - return true; - case CLS_DWARF_ARM64_LR: - // Here's what's going on. For x86, the "return register" is virtual. The architecture - // doesn't actually have one, but DWARF does have the concept. So, when the system - // tries to set the return register, we set the PC. You can see this behavior - // in the FIRCLSDwarfUnwindSetRegisterValue implemenation for that architecture. In the - // case of ARM64, the register is real. So, we have to be extra careful to make sure - // we update the PC here. Otherwise, when a DWARF unwind completes, it won't have - // changed the PC to the right value. - FIRCLSThreadContextSetLinkRegister(registers, value); - FIRCLSThreadContextSetPC(registers, value); - return true; - default: - break; - } - - FIRCLSSDKLog("Unrecognized set register number %llu\n", num); - - return false; -} -#endif - -#else -INJECT_STRIP_SYMBOL(unwind_arm) -#endif diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Unwind/FIRCLSUnwind_x86.c b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Unwind/FIRCLSUnwind_x86.c deleted file mode 100644 index cc0655a929..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Unwind/FIRCLSUnwind_x86.c +++ /dev/null @@ -1,537 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "FIRCLSUnwind_x86.h" -#include "FIRCLSCompactUnwind_Private.h" -#include "FIRCLSDefines.h" -#include "FIRCLSDwarfUnwind.h" -#include "FIRCLSFeatures.h" -#include "FIRCLSUnwind.h" -#include "FIRCLSUnwind_arch.h" -#include "FIRCLSUtility.h" - -#if CLS_CPU_X86 - -static bool FIRCLSCompactUnwindBPFrame(compact_unwind_encoding_t encoding, - FIRCLSThreadContext* registers); -static bool FIRCLSCompactUnwindFrameless(compact_unwind_encoding_t encoding, - FIRCLSThreadContext* registers, - uintptr_t functionStart, - bool indirect); - -#if CLS_COMPACT_UNWINDING_SUPPORTED -bool FIRCLSCompactUnwindComputeRegisters(FIRCLSCompactUnwindContext* context, - FIRCLSCompactUnwindResult* result, - FIRCLSThreadContext* registers) { - if (!FIRCLSIsValidPointer(context) || !FIRCLSIsValidPointer(result) || - !FIRCLSIsValidPointer(registers)) { - FIRCLSSDKLogError("invalid inputs\n"); - return false; - } - - FIRCLSSDKLogDebug("Computing registers for encoding %x\n", result->encoding); - - switch (result->encoding & CLS_X86_MODE_MASK) { - case CLS_X86_MODE_BP_FRAME: - return FIRCLSCompactUnwindBPFrame(result->encoding, registers); - case CLS_X86_MODE_STACK_IMMD: - return FIRCLSCompactUnwindFrameless(result->encoding, registers, result->functionStart, - false); - case CLS_X86_MODE_STACK_IND: - return FIRCLSCompactUnwindFrameless(result->encoding, registers, result->functionStart, true); - case CLS_X86_MODE_DWARF: - return FIRCLSCompactUnwindDwarfFrame(context, result->encoding & CLS_X86_DWARF_SECTION_OFFSET, - registers); - default: - FIRCLSSDKLogError("Invalid encoding %x\n", result->encoding); - break; - } - - return false; -} -#endif - -static bool FIRCLSCompactUnwindBPFrame(compact_unwind_encoding_t encoding, - FIRCLSThreadContext* registers) { - // this is the plain-vanilla frame pointer process - - // uint32_t offset = GET_BITS_WITH_MASK(encoding, UNWIND_X86_EBP_FRAME_OFFSET); - // uint32_t locations = GET_BITS_WITH_MASK(encoding, UNWIND_X86_64_RBP_FRAME_REGISTERS); - - // TODO: pretty sure we do need to restore registers here, so that if a subsequent frame needs - // these results, they will be correct - - // Checkout CompactUnwinder.hpp in libunwind for how to do this. Since we don't make use of any of - // those registers for a stacktrace only, there's nothing we need do with them. - - // read the values from the stack - const uintptr_t framePointer = FIRCLSThreadContextGetFramePointer(registers); - uintptr_t stack[2]; - - if (!FIRCLSReadMemory((vm_address_t)framePointer, stack, sizeof(stack))) { - // unable to read the first stack frame - FIRCLSSDKLog("Error: failed to read memory at address %p\n", (void*)framePointer); - return false; - } - - if (!FIRCLSThreadContextSetPC(registers, stack[1])) { - return false; - } - - if (!FIRCLSThreadContextSetFramePointer(registers, stack[0])) { - return false; - } - - if (!FIRCLSThreadContextSetStackPointer(registers, - FIRCLSUnwindStackPointerFromFramePointer(framePointer))) { - return false; - } - - return true; -} - -bool FIRCLSUnwindWithStackScanning(FIRCLSThreadContext* registers) { - vm_address_t start = (vm_address_t)FIRCLSThreadContextGetStackPointer(registers); - vm_address_t end = (vm_address_t)FIRCLSThreadContextGetFramePointer(registers); - - uintptr_t newPC = 0; - - if (!FIRCLSUnwindFirstExecutableAddress(start, end, (vm_address_t*)&newPC)) { - return false; - } - - return FIRCLSThreadContextSetPC(registers, newPC); -} - -bool FIRCLSUnwindWithFramePointer(FIRCLSThreadContext* registers, bool allowScanning) { - // Here's an interesting case. We've just processed the first frame, and it did - // not have any unwind info. If that first function did not allocate - // a stack frame, we'll "skip" the caller. This might sound unlikely, but it actually - // happens a lot in practice. - - // Sooo, one thing we can do is try to stack the stack for things that look like return - // addresses. Normally, this technique will hit many false positives. But, if we do it - // only for the second frame, and only when we don't have other unwind info available. - - if (allowScanning) { - FIRCLSSDKLogInfo("Attempting stack scan\n"); - if (FIRCLSUnwindWithStackScanning(registers)) { - FIRCLSSDKLogInfo("Stack scan successful\n"); - return true; - } - } - - // If we ever do anything else with the encoding, we need to be sure - // to set it up right. - return FIRCLSCompactUnwindBPFrame(CLS_X86_MODE_BP_FRAME, registers); -} - -uintptr_t FIRCLSUnwindStackPointerFromFramePointer(uintptr_t framePtr) { - // the stack pointer is the frame pointer plus the two saved pointers for the frame - return framePtr + 2 * sizeof(void*); -} - -#if CLS_COMPACT_UNWINDING_SUPPORTED || CLS_DWARF_UNWINDING_SUPPORTED -uintptr_t FIRCLSDwarfUnwindGetRegisterValue(const FIRCLSThreadContext* registers, uint64_t num) { - switch (num) { -#if CLS_CPU_X86_64 - case CLS_DWARF_X86_64_RAX: - return registers->__ss.__rax; - case CLS_DWARF_X86_64_RDX: - return registers->__ss.__rdx; - case CLS_DWARF_X86_64_RCX: - return registers->__ss.__rcx; - case CLS_DWARF_X86_64_RBX: - return registers->__ss.__rbx; - case CLS_DWARF_X86_64_RSI: - return registers->__ss.__rsi; - case CLS_DWARF_X86_64_RDI: - return registers->__ss.__rdi; - case CLS_DWARF_X86_64_RBP: - return registers->__ss.__rbp; - case CLS_DWARF_X86_64_RSP: - return registers->__ss.__rsp; - case CLS_DWARF_X86_64_R8: - return registers->__ss.__r8; - case CLS_DWARF_X86_64_R9: - return registers->__ss.__r9; - case CLS_DWARF_X86_64_R10: - return registers->__ss.__r10; - case CLS_DWARF_X86_64_R11: - return registers->__ss.__r11; - case CLS_DWARF_X86_64_R12: - return registers->__ss.__r12; - case CLS_DWARF_X86_64_R13: - return registers->__ss.__r13; - case CLS_DWARF_X86_64_R14: - return registers->__ss.__r14; - case CLS_DWARF_X86_64_R15: - return registers->__ss.__r15; - case CLS_DWARF_X86_64_RET_ADDR: - return registers->__ss.__rip; -#elif CLS_CPU_I386 - case CLS_DWARF_X86_EAX: - return registers->__ss.__eax; - case CLS_DWARF_X86_ECX: - return registers->__ss.__ecx; - case CLS_DWARF_X86_EDX: - return registers->__ss.__edx; - case CLS_DWARF_X86_EBX: - return registers->__ss.__ebx; - case CLS_DWARF_X86_EBP: - return registers->__ss.__ebp; - case CLS_DWARF_X86_ESP: - return registers->__ss.__esp; - case CLS_DWARF_X86_ESI: - return registers->__ss.__esi; - case CLS_DWARF_X86_EDI: - return registers->__ss.__edi; - case CLS_DWARF_X86_RET_ADDR: - return registers->__ss.__eip; -#endif - default: - break; - } - - FIRCLSSDKLog("Error: Unrecognized get register number %llu\n", num); - - return 0; -} - -bool FIRCLSDwarfUnwindSetRegisterValue(FIRCLSThreadContext* registers, - uint64_t num, - uintptr_t value) { - switch (num) { -#if CLS_CPU_X86_64 - case CLS_DWARF_X86_64_RAX: - registers->__ss.__rax = value; - return true; - case CLS_DWARF_X86_64_RDX: - registers->__ss.__rdx = value; - return true; - case CLS_DWARF_X86_64_RCX: - registers->__ss.__rcx = value; - return true; - case CLS_DWARF_X86_64_RBX: - registers->__ss.__rbx = value; - return true; - case CLS_DWARF_X86_64_RSI: - registers->__ss.__rsi = value; - return true; - case CLS_DWARF_X86_64_RDI: - registers->__ss.__rdi = value; - return true; - case CLS_DWARF_X86_64_RBP: - registers->__ss.__rbp = value; - return true; - case CLS_DWARF_X86_64_RSP: - registers->__ss.__rsp = value; - return true; - case CLS_DWARF_X86_64_R8: - registers->__ss.__r8 = value; - return true; - case CLS_DWARF_X86_64_R9: - registers->__ss.__r9 = value; - return true; - case CLS_DWARF_X86_64_R10: - registers->__ss.__r10 = value; - return true; - case CLS_DWARF_X86_64_R11: - registers->__ss.__r11 = value; - return true; - case CLS_DWARF_X86_64_R12: - registers->__ss.__r12 = value; - return true; - case CLS_DWARF_X86_64_R13: - registers->__ss.__r13 = value; - return true; - case CLS_DWARF_X86_64_R14: - registers->__ss.__r14 = value; - return true; - case CLS_DWARF_X86_64_R15: - registers->__ss.__r15 = value; - return true; - case CLS_DWARF_X86_64_RET_ADDR: - registers->__ss.__rip = value; - return true; -#elif CLS_CPU_I386 - case CLS_DWARF_X86_EAX: - registers->__ss.__eax = value; - return true; - case CLS_DWARF_X86_ECX: - registers->__ss.__ecx = value; - return true; - case CLS_DWARF_X86_EDX: - registers->__ss.__edx = value; - return true; - case CLS_DWARF_X86_EBX: - registers->__ss.__ebx = value; - return true; - case CLS_DWARF_X86_EBP: - registers->__ss.__ebp = value; - return true; - case CLS_DWARF_X86_ESP: - registers->__ss.__esp = value; - return true; - case CLS_DWARF_X86_ESI: - registers->__ss.__esi = value; - return true; - case CLS_DWARF_X86_EDI: - registers->__ss.__edi = value; - return true; - case CLS_DWARF_X86_RET_ADDR: - registers->__ss.__eip = value; - return true; -#endif - default: - break; - } - - FIRCLSSDKLog("Unrecognized set register number %llu\n", num); - - return false; -} -#endif - -#if CLS_COMPACT_UNWINDING_SUPPORTED -bool FIRCLSCompactUnwindComputeStackSize(const compact_unwind_encoding_t encoding, - const uintptr_t functionStart, - const bool indirect, - uint32_t* const stackSize) { - if (!FIRCLSIsValidPointer(stackSize)) { - FIRCLSSDKLog("Error: invalid inputs\n"); - return false; - } - - const uint32_t stackSizeEncoded = GET_BITS_WITH_MASK(encoding, CLS_X86_FRAMELESS_STACK_SIZE); - - if (!indirect) { - *stackSize = stackSizeEncoded * sizeof(void*); - return true; - } - - const vm_address_t sublAddress = functionStart + stackSizeEncoded; - uint32_t sublValue = 0; - - if (!FIRCLSReadMemory(sublAddress, &sublValue, sizeof(uint32_t))) { - FIRCLSSDKLog("Error: unable to read subl value\n"); - return false; - } - - const uint32_t stackAdjust = GET_BITS_WITH_MASK(encoding, CLS_X86_FRAMELESS_STACK_ADJUST); - - *stackSize = sublValue + stackAdjust * sizeof(void*); - - return true; -} - -bool FIRCLSCompactUnwindDecompressPermutation(const compact_unwind_encoding_t encoding, - uintptr_t permutatedRegisters[const static 6]) { - const uint32_t regCount = GET_BITS_WITH_MASK(encoding, CLS_X86_FRAMELESS_STACK_REG_COUNT); - uint32_t permutation = GET_BITS_WITH_MASK(encoding, CLS_X86_FRAMELESS_STACK_REG_PERMUTATION); - - switch (regCount) { - case 6: - permutatedRegisters[0] = permutation / 120; - permutation -= (permutatedRegisters[0] * 120); - permutatedRegisters[1] = permutation / 24; - permutation -= (permutatedRegisters[1] * 24); - permutatedRegisters[2] = permutation / 6; - permutation -= (permutatedRegisters[2] * 6); - permutatedRegisters[3] = permutation / 2; - permutation -= (permutatedRegisters[3] * 2); - permutatedRegisters[4] = permutation; - permutatedRegisters[5] = 0; - break; - case 5: - permutatedRegisters[0] = permutation / 120; - permutation -= (permutatedRegisters[0] * 120); - permutatedRegisters[1] = permutation / 24; - permutation -= (permutatedRegisters[1] * 24); - permutatedRegisters[2] = permutation / 6; - permutation -= (permutatedRegisters[2] * 6); - permutatedRegisters[3] = permutation / 2; - permutation -= (permutatedRegisters[3] * 2); - permutatedRegisters[4] = permutation; - break; - case 4: - permutatedRegisters[0] = permutation / 60; - permutation -= (permutatedRegisters[0] * 60); - permutatedRegisters[1] = permutation / 12; - permutation -= (permutatedRegisters[1] * 12); - permutatedRegisters[2] = permutation / 3; - permutation -= (permutatedRegisters[2] * 3); - permutatedRegisters[3] = permutation; - break; - case 3: - permutatedRegisters[0] = permutation / 20; - permutation -= (permutatedRegisters[0] * 20); - permutatedRegisters[1] = permutation / 4; - permutation -= (permutatedRegisters[1] * 4); - permutatedRegisters[2] = permutation; - break; - case 2: - permutatedRegisters[0] = permutation / 5; - permutation -= (permutatedRegisters[0] * 5); - permutatedRegisters[1] = permutation; - break; - case 1: - permutatedRegisters[0] = permutation; - break; - case 0: - break; - default: - FIRCLSSDKLog("Error: unhandled number of register permutations for encoding %x\n", encoding); - return false; - } - - return true; -} - -bool FIRCLSCompactUnwindRemapRegisters(const compact_unwind_encoding_t encoding, - uintptr_t permutatedRegisters[const static 6], - uintptr_t savedRegisters[const static 6]) { - const uint32_t regCount = GET_BITS_WITH_MASK(encoding, CLS_X86_FRAMELESS_STACK_REG_COUNT); - - if (regCount > 6) { - FIRCLSSDKLog("Error: invalid register number count %d\n", regCount); - return false; - } - - // Re-number the registers - - // You are probably wondering, what the hell is this algorithm even doing? It is - // taken from libunwind's implemenation that does the same thing. - bool used[7] = {false, false, false, false, false, false, false}; - for (uint32_t i = 0; i < regCount; ++i) { - int renum = 0; - for (int u = 1; u < 7; ++u) { - if (!used[u]) { - if (renum == permutatedRegisters[i]) { - savedRegisters[i] = u; - used[u] = true; - break; - } - ++renum; - } - } - } - - return true; -} - -bool FIRCLSCompactUnwindRestoreRegisters(compact_unwind_encoding_t encoding, - FIRCLSThreadContext* registers, - uint32_t stackSize, - const uintptr_t savedRegisters[const static 6], - uintptr_t* address) { - if (!FIRCLSIsValidPointer(registers) || !FIRCLSIsValidPointer(address)) { - FIRCLSSDKLog("Error: invalid inputs\n"); - return false; - } - - const uint32_t regCount = GET_BITS_WITH_MASK(encoding, CLS_X86_FRAMELESS_STACK_REG_COUNT); - - // compute initial address of saved registers - *address = FIRCLSThreadContextGetStackPointer(registers) + stackSize - sizeof(void*) - - sizeof(void*) * regCount; - uintptr_t value = 0; - - for (uint32_t i = 0; i < regCount; ++i) { - value = 0; - - switch (savedRegisters[i]) { - case CLS_X86_REG_RBP: - if (!FIRCLSReadMemory((vm_address_t)*address, (void*)&value, sizeof(uintptr_t))) { - FIRCLSSDKLog("Error: unable to read memory to set register\n"); - return false; - } - - if (!FIRCLSThreadContextSetFramePointer(registers, value)) { - FIRCLSSDKLog("Error: unable to set FP\n"); - return false; - } - break; - default: - // here, we are restoring a register we don't need for unwinding - FIRCLSSDKLog("Error: skipping a restore of register %d at %p\n", (int)savedRegisters[i], - (void*)*address); - break; - } - - *address += sizeof(void*); - } - - return true; -} - -static bool FIRCLSCompactUnwindFrameless(compact_unwind_encoding_t encoding, - FIRCLSThreadContext* registers, - uintptr_t functionStart, - bool indirect) { - FIRCLSSDKLog("Frameless unwind encountered with encoding %x\n", encoding); - - uint32_t stackSize = 0; - if (!FIRCLSCompactUnwindComputeStackSize(encoding, functionStart, indirect, &stackSize)) { - FIRCLSSDKLog("Error: unable to compute stack size for encoding %x\n", encoding); - return false; - } - - uintptr_t permutatedRegisters[6]; - - memset(permutatedRegisters, 0, sizeof(permutatedRegisters)); - if (!FIRCLSCompactUnwindDecompressPermutation(encoding, permutatedRegisters)) { - FIRCLSSDKLog("Error: unable to decompress registers %x\n", encoding); - return false; - } - - uintptr_t savedRegisters[6]; - - memset(savedRegisters, 0, sizeof(savedRegisters)); - if (!FIRCLSCompactUnwindRemapRegisters(encoding, permutatedRegisters, savedRegisters)) { - FIRCLSSDKLog("Error: unable to remap registers %x\n", encoding); - return false; - } - - uintptr_t address = 0; - - if (!FIRCLSCompactUnwindRestoreRegisters(encoding, registers, stackSize, savedRegisters, - &address)) { - FIRCLSSDKLog("Error: unable to restore registers\n"); - return false; - } - - FIRCLSSDKLog("SP is %p and we are reading %p\n", - (void*)FIRCLSThreadContextGetStackPointer(registers), (void*)address); - // read the value from the stack, now that we know the address to read - uintptr_t value = 0; - if (!FIRCLSReadMemory((vm_address_t)address, (void*)&value, sizeof(uintptr_t))) { - FIRCLSSDKLog("Error: unable to read memory to set register\n"); - return false; - } - - FIRCLSSDKLog("Read PC to be %p\n", (void*)value); - if (!FIRCLSIsValidPointer(value)) { - FIRCLSSDKLog("Error: computed PC is invalid\n"); - return false; - } - - return FIRCLSThreadContextSetPC(registers, value) && - FIRCLSThreadContextSetStackPointer(registers, address + sizeof(void*)); -} -#endif - -#else -INJECT_STRIP_SYMBOL(unwind_x86) -#endif diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Unwind/FIRCLSUnwind_x86.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Unwind/FIRCLSUnwind_x86.h deleted file mode 100644 index 7c8010ec09..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Crashlytics/Unwind/FIRCLSUnwind_x86.h +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#pragma once - -#include "FIRCLSCompactUnwind.h" -#include "FIRCLSFeatures.h" - -// Add some abstraction to compact unwinding, because compact -// unwinding is nearly identical between 32 and 64 bit -#if CLS_CPU_X86_64 - -#define CLS_X86_MODE_MASK UNWIND_X86_64_MODE_MASK -#define CLS_X86_MODE_BP_FRAME UNWIND_X86_64_MODE_RBP_FRAME -#define CLS_X86_MODE_STACK_IMMD UNWIND_X86_64_MODE_STACK_IMMD -#define CLS_X86_MODE_STACK_IND UNWIND_X86_64_MODE_STACK_IND -#define CLS_X86_MODE_DWARF UNWIND_X86_64_MODE_DWARF - -#define CLS_X86_BP_FRAME_REGISTERS UNWIND_X86_64_RBP_FRAME_REGISTERS -#define CLS_X86_BP_FRAME_OFFSET UNWIND_X86_64_RBP_FRAME_OFFSET - -#define CLS_X86_FRAMELESS_STACK_SIZE UNWIND_X86_64_FRAMELESS_STACK_SIZE -#define CLS_X86_FRAMELESS_STACK_ADJUST UNWIND_X86_64_FRAMELESS_STACK_ADJUST -#define CLS_X86_FRAMELESS_STACK_REG_COUNT UNWIND_X86_64_FRAMELESS_STACK_REG_COUNT -#define CLS_X86_FRAMELESS_STACK_REG_PERMUTATION UNWIND_X86_64_FRAMELESS_STACK_REG_PERMUTATION - -#define CLS_X86_DWARF_SECTION_OFFSET UNWIND_X86_64_DWARF_SECTION_OFFSET - -#define CLS_X86_REG_RBP UNWIND_X86_64_REG_RBP - -#else - -#define CLS_X86_MODE_MASK UNWIND_X86_MODE_MASK -#define CLS_X86_MODE_BP_FRAME UNWIND_X86_MODE_EBP_FRAME -#define CLS_X86_MODE_STACK_IMMD UNWIND_X86_MODE_STACK_IMMD -#define CLS_X86_MODE_STACK_IND UNWIND_X86_MODE_STACK_IND -#define CLS_X86_MODE_DWARF UNWIND_X86_MODE_DWARF - -#define CLS_X86_BP_FRAME_REGISTERS UNWIND_X86_RBP_FRAME_REGISTERS -#define CLS_X86_BP_FRAME_OFFSET UNWIND_X86_RBP_FRAME_OFFSET - -#define CLS_X86_FRAMELESS_STACK_SIZE UNWIND_X86_FRAMELESS_STACK_SIZE -#define CLS_X86_FRAMELESS_STACK_ADJUST UNWIND_X86_FRAMELESS_STACK_ADJUST -#define CLS_X86_FRAMELESS_STACK_REG_COUNT UNWIND_X86_FRAMELESS_STACK_REG_COUNT -#define CLS_X86_FRAMELESS_STACK_REG_PERMUTATION UNWIND_X86_FRAMELESS_STACK_REG_PERMUTATION - -#define CLS_X86_DWARF_SECTION_OFFSET UNWIND_X86_DWARF_SECTION_OFFSET - -#define CLS_X86_REG_RBP UNWIND_X86_REG_EBP - -#endif - -#if CLS_COMPACT_UNWINDING_SUPPORTED -bool FIRCLSCompactUnwindComputeStackSize(const compact_unwind_encoding_t encoding, - const uintptr_t functionStart, - const bool indirect, - uint32_t* const stackSize); -bool FIRCLSCompactUnwindDecompressPermutation(const compact_unwind_encoding_t encoding, - uintptr_t permutatedRegisters[const static 6]); -bool FIRCLSCompactUnwindRestoreRegisters(compact_unwind_encoding_t encoding, - FIRCLSThreadContext* registers, - uint32_t stackSize, - const uintptr_t savedRegisters[const static 6], - uintptr_t* address); -#endif diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/LICENSE b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/LICENSE deleted file mode 100644 index 925bc57fc2..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/LICENSE +++ /dev/null @@ -1,230 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -================================================================================ - -The following copyright from Hewlett-Packard Development Company, L.P. -applies to the dwarf.h file in third_party/libunwind - - libunwind - a platform-independent unwind library - Copyright (c) 2003-2005 Hewlett-Packard Development Company, L.P. - Contributed by David Mosberger-Tang - -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/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Protogen/nanopb/crashlytics.nanopb.c b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Protogen/nanopb/crashlytics.nanopb.c deleted file mode 100644 index d2e9d04550..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Protogen/nanopb/crashlytics.nanopb.c +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* Automatically generated nanopb constant definitions */ -/* Generated by nanopb-0.3.9.5 */ - -#include "crashlytics.nanopb.h" - -/* @@protoc_insertion_point(includes) */ -#if PB_PROTO_HEADER_VERSION != 30 -#error Regenerate this file with the current version of nanopb generator. -#endif - - - -const pb_field_t google_crashlytics_Report_fields[8] = { - PB_FIELD( 1, BYTES , SINGULAR, POINTER , FIRST, google_crashlytics_Report, sdk_version, sdk_version, 0), - PB_FIELD( 3, BYTES , SINGULAR, POINTER , OTHER, google_crashlytics_Report, gmp_app_id, sdk_version, 0), - PB_FIELD( 4, UENUM , SINGULAR, STATIC , OTHER, google_crashlytics_Report, platform, gmp_app_id, 0), - PB_FIELD( 5, BYTES , SINGULAR, POINTER , OTHER, google_crashlytics_Report, installation_uuid, platform, 0), - PB_FIELD( 6, BYTES , SINGULAR, POINTER , OTHER, google_crashlytics_Report, build_version, installation_uuid, 0), - PB_FIELD( 7, BYTES , SINGULAR, POINTER , OTHER, google_crashlytics_Report, display_version, build_version, 0), - PB_FIELD( 10, MESSAGE , SINGULAR, STATIC , OTHER, google_crashlytics_Report, apple_payload, display_version, &google_crashlytics_FilesPayload_fields), - PB_LAST_FIELD -}; - -const pb_field_t google_crashlytics_FilesPayload_fields[2] = { - PB_FIELD( 1, MESSAGE , REPEATED, POINTER , FIRST, google_crashlytics_FilesPayload, files, files, &google_crashlytics_FilesPayload_File_fields), - PB_LAST_FIELD -}; - -const pb_field_t google_crashlytics_FilesPayload_File_fields[3] = { - PB_FIELD( 1, BYTES , SINGULAR, POINTER , FIRST, google_crashlytics_FilesPayload_File, filename, filename, 0), - PB_FIELD( 2, BYTES , SINGULAR, POINTER , OTHER, google_crashlytics_FilesPayload_File, contents, filename, 0), - PB_LAST_FIELD -}; - - - -/* Check that field information fits in pb_field_t */ -#if !defined(PB_FIELD_32BIT) -/* If you get an error here, it means that you need to define PB_FIELD_32BIT - * compile-time option. You can do that in pb.h or on compiler command line. - * The reason you need to do this is that some of your messages contain tag - * numbers or field sizes that are larger than what can fit in 8 or 16 bit - * field descriptors. - */ -PB_STATIC_ASSERT((pb_membersize(google_crashlytics_Report, apple_payload) < 65536), YOU_MUST_DEFINE_PB_FIELD_32BIT_FOR_MESSAGES_google_crashlytics_Report_google_crashlytics_FilesPayload_google_crashlytics_FilesPayload_File) -#endif - -#if !defined(PB_FIELD_16BIT) && !defined(PB_FIELD_32BIT) -/* If you get an error here, it means that you need to define PB_FIELD_16BIT - * compile-time option. You can do that in pb.h or on compiler command line. - * The reason you need to do this is that some of your messages contain tag - * numbers or field sizes that are larger than what can fit in the default - * 8 bit descriptors. - */ -PB_STATIC_ASSERT((pb_membersize(google_crashlytics_Report, apple_payload) < 256), YOU_MUST_DEFINE_PB_FIELD_16BIT_FOR_MESSAGES_google_crashlytics_Report_google_crashlytics_FilesPayload_google_crashlytics_FilesPayload_File) -#endif - - -/* @@protoc_insertion_point(eof) */ diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Protogen/nanopb/crashlytics.nanopb.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Protogen/nanopb/crashlytics.nanopb.h deleted file mode 100644 index c873fbcd89..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Protogen/nanopb/crashlytics.nanopb.h +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* Automatically generated nanopb header */ -/* Generated by nanopb-0.3.9.5 */ - -#ifndef PB_GOOGLE_CRASHLYTICS_CRASHLYTICS_NANOPB_H_INCLUDED -#define PB_GOOGLE_CRASHLYTICS_CRASHLYTICS_NANOPB_H_INCLUDED -#include - -/* @@protoc_insertion_point(includes) */ -#if PB_PROTO_HEADER_VERSION != 30 -#error Regenerate this file with the current version of nanopb generator. -#endif - - -/* Enum definitions */ -typedef enum _google_crashlytics_Platforms { - google_crashlytics_Platforms_UNKNOWN_PLATFORM = 0, - google_crashlytics_Platforms_IOS = 1, - google_crashlytics_Platforms_TVOS = 2, - google_crashlytics_Platforms_MAC_OS_X = 5 -} google_crashlytics_Platforms; -#define _google_crashlytics_Platforms_MIN google_crashlytics_Platforms_UNKNOWN_PLATFORM -#define _google_crashlytics_Platforms_MAX google_crashlytics_Platforms_MAC_OS_X -#define _google_crashlytics_Platforms_ARRAYSIZE ((google_crashlytics_Platforms)(google_crashlytics_Platforms_MAC_OS_X+1)) - -/* Struct definitions */ -typedef struct _google_crashlytics_FilesPayload { - pb_size_t files_count; - struct _google_crashlytics_FilesPayload_File *files; -/* @@protoc_insertion_point(struct:google_crashlytics_FilesPayload) */ -} google_crashlytics_FilesPayload; - -typedef struct _google_crashlytics_FilesPayload_File { - pb_bytes_array_t *filename; - pb_bytes_array_t *contents; -/* @@protoc_insertion_point(struct:google_crashlytics_FilesPayload_File) */ -} google_crashlytics_FilesPayload_File; - -typedef struct _google_crashlytics_Report { - pb_bytes_array_t *sdk_version; - pb_bytes_array_t *gmp_app_id; - google_crashlytics_Platforms platform; - pb_bytes_array_t *installation_uuid; - pb_bytes_array_t *build_version; - pb_bytes_array_t *display_version; - google_crashlytics_FilesPayload apple_payload; -/* @@protoc_insertion_point(struct:google_crashlytics_Report) */ -} google_crashlytics_Report; - -/* Default values for struct fields */ - -/* Initializer values for message structs */ -#define google_crashlytics_Report_init_default {NULL, NULL, _google_crashlytics_Platforms_MIN, NULL, NULL, NULL, google_crashlytics_FilesPayload_init_default} -#define google_crashlytics_FilesPayload_init_default {0, NULL} -#define google_crashlytics_FilesPayload_File_init_default {NULL, NULL} -#define google_crashlytics_Report_init_zero {NULL, NULL, _google_crashlytics_Platforms_MIN, NULL, NULL, NULL, google_crashlytics_FilesPayload_init_zero} -#define google_crashlytics_FilesPayload_init_zero {0, NULL} -#define google_crashlytics_FilesPayload_File_init_zero {NULL, NULL} - -/* Field tags (for use in manual encoding/decoding) */ -#define google_crashlytics_FilesPayload_files_tag 1 -#define google_crashlytics_FilesPayload_File_filename_tag 1 -#define google_crashlytics_FilesPayload_File_contents_tag 2 -#define google_crashlytics_Report_sdk_version_tag 1 -#define google_crashlytics_Report_gmp_app_id_tag 3 -#define google_crashlytics_Report_platform_tag 4 -#define google_crashlytics_Report_installation_uuid_tag 5 -#define google_crashlytics_Report_build_version_tag 6 -#define google_crashlytics_Report_display_version_tag 7 -#define google_crashlytics_Report_apple_payload_tag 10 - -/* Struct field encoding specification for nanopb */ -extern const pb_field_t google_crashlytics_Report_fields[8]; -extern const pb_field_t google_crashlytics_FilesPayload_fields[2]; -extern const pb_field_t google_crashlytics_FilesPayload_File_fields[3]; - -/* Maximum encoded size of messages (where known) */ -/* google_crashlytics_Report_size depends on runtime parameters */ -/* google_crashlytics_FilesPayload_size depends on runtime parameters */ -/* google_crashlytics_FilesPayload_File_size depends on runtime parameters */ - -/* Message IDs (where set with "msgid" option) */ -#ifdef PB_MSGID - -#define CRASHLYTICS_MESSAGES \ - - -#endif - -/* @@protoc_insertion_point(eof) */ - -#endif diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/README.md b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/README.md deleted file mode 100644 index 55d36e659c..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/README.md +++ /dev/null @@ -1,39 +0,0 @@ -# Firebase Crashlytics SDK - -## Development - -Follow the subsequent instructions to develop, debug, unit test, and -integration test FirebaseCrashlytics: - -### Prereqs - -- At least CocoaPods 1.6.0 -- Install [cocoapods-generate](https://github.com/square/cocoapods-generate) -- For nanopb and GDT: - - `brew install protobuf nanopb-generator` - - `easy_install protobuf python` - -### To Develop - -- Run `Crashlytics/generate_project.sh` -- `open gen/FirebaseCrashlytics/FirebaseCrashlytics.xcworkspace` - -You're now in an Xcode workspace generate for building, debugging and -testing the FirebaseCrashlytics CocoaPod. - -### Running Unit Tests - -Open the generated workspace, choose the FirebaseCrashlytics-Unit-unit scheme and press Command-u. - -### Changing crash report uploads (using GDT) - -#### Update report proto - -If the crash report proto needs to be updated, follow these instructions: - -- Update `ProtoSupport/Protos/crashlytics.proto` with the new changes -- Depending on the type of fields added/removed, also update `ProtoSupport/Protos/crashlytics.options`. - `CALLBACK` type fields in crashlytics.nanopb.c needs to be changed to `POINTER` - (through the options file). Known field types that require an entry in crashlytics.options are - `strings`, `repeated` and `bytes`. -- Run `generate_project.sh` to update the nanopb .c/.h files. \ No newline at end of file diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSByteUtility.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSByteUtility.h deleted file mode 100644 index ca2abb81de..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSByteUtility.h +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import - -/** - * Returns a SHA1 Hash of the input NSData - */ -NSString *FIRCLSHashNSData(NSData *data); -/** - * Returns a SHA256 Hash of the input NSData - */ -NSString *FIRCLS256HashNSData(NSData *data); -/** - * Returns a SHA1 Hash of the input bytes - */ -NSString *FIRCLSHashBytes(const void *bytes, size_t length); -/** - * Populates a Hex value conversion of value into outputBuffer. - * If value is nil, then outputBuffer is not modified. - */ -void FIRCLSSafeHexToString(const uint8_t *value, size_t length, char *outputBuffer); - -/** - * Iterates through the raw bytes of NSData in a way that is similar to - * -[NSData enumerateByteRangesUsingBlock:], but is safe to call from older - * OSes that do not support it. - */ -void FIRCLSEnumerateByteRangesOfNSDataUsingBlock( - NSData *data, void (^block)(const void *bytes, NSRange byteRange, BOOL *stop)); diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSByteUtility.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSByteUtility.m deleted file mode 100644 index 79f46f3f77..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSByteUtility.m +++ /dev/null @@ -1,120 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSByteUtility.h" - -#import -#import - -#pragma mark Private functions - -static const char FIRCLSHexMap[] = "0123456789abcdef"; - -void FIRCLSHexFromByte(uint8_t c, char output[]) { - if (!output) { - return; - } - - output[0] = FIRCLSHexMap[c >> 4]; - output[1] = FIRCLSHexMap[c & 0x0f]; -} - -void FIRCLSSafeHexToString(const uint8_t *value, size_t length, char *outputBuffer) { - if (!outputBuffer) { - return; - } - - memset(outputBuffer, 0, (length * 2) + 1); - - if (!value) { - return; - } - - for (size_t i = 0; i < length; ++i) { - uint8_t c = value[i]; - - FIRCLSHexFromByte(c, &outputBuffer[i * 2]); - } -} - -NSString *FIRCLSNSDataPrettyDescription(NSData *data) { - NSString *string; - char *buffer; - size_t size; - NSUInteger length; - - // we need 2 hex char for every byte of data, plus one more spot for a - // null terminator - length = data.length; - size = (length * 2) + 1; - buffer = malloc(sizeof(char) * size); - - if (!buffer) { - return nil; - } - - FIRCLSSafeHexToString(data.bytes, length, buffer); - - string = [NSString stringWithUTF8String:buffer]; - - free(buffer); - - return string; -} - -#pragma mark Public functions - -NSString *FIRCLSHashBytes(const void *bytes, size_t length) { - uint8_t digest[CC_SHA1_DIGEST_LENGTH] = {0}; - CC_SHA1(bytes, (CC_LONG)length, digest); - - NSData *result = [NSData dataWithBytes:digest length:CC_SHA1_DIGEST_LENGTH]; - - return FIRCLSNSDataPrettyDescription(result); -} - -NSString *FIRCLSHashNSData(NSData *data) { - return FIRCLSHashBytes(data.bytes, data.length); -} - -NSString *FIRCLS256HashBytes(const void *bytes, size_t length) { - uint8_t digest[CC_SHA256_DIGEST_LENGTH] = {0}; - CC_SHA256(bytes, (CC_LONG)length, digest); - - NSData *result = [NSData dataWithBytes:digest length:CC_SHA256_DIGEST_LENGTH]; - - return FIRCLSNSDataPrettyDescription(result); -} - -NSString *FIRCLS256HashNSData(NSData *data) { - return FIRCLS256HashBytes(data.bytes, data.length); -} - -void FIRCLSEnumerateByteRangesOfNSDataUsingBlock( - NSData *data, void (^block)(const void *bytes, NSRange byteRange, BOOL *stop)) { - if ([data respondsToSelector:@selector(enumerateByteRangesUsingBlock:)]) { - [data enumerateByteRangesUsingBlock:^(const void *bytes, NSRange byteRange, BOOL *stop) { - block(bytes, byteRange, stop); - }]; - - return; - } - - // Fall back to the less-efficient mechanism for older OSes. Safe - // to ignore the return value of stop, since we'll only ever - // call this once anyways - BOOL stop = NO; - - block(data.bytes, NSMakeRange(0, data.length), &stop); -} diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSConstants.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSConstants.h deleted file mode 100644 index c17ee02c5f..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSConstants.h +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import - -FOUNDATION_EXPORT NSString *const FIRCLSDeveloperToken; - -FOUNDATION_EXPORT NSString *const FIRCLSVersion; - -// User Messages -FOUNDATION_EXPORT NSString *const FIRCLSMissingConsumerKeyMsg; -FOUNDATION_EXPORT NSString *const FIRCLSMissingConsumerSecretMsg; - -// Exceptions -FOUNDATION_EXPORT NSString *const FIRCLSException; - -// Endpoints -FOUNDATION_EXPORT NSString *const FIRCLSSettingsEndpoint; -FOUNDATION_EXPORT NSString *const FIRCLSConfigureEndpoint; -FOUNDATION_EXPORT NSString *const FIRCLSReportsEndpoint; - -// Network requests -FOUNDATION_EXPORT NSString *const FIRCLSNetworkAccept; -FOUNDATION_EXPORT NSString *const FIRCLSNetworkAcceptCharset; -FOUNDATION_EXPORT NSString *const FIRCLSNetworkApplicationJson; -FOUNDATION_EXPORT NSString *const FIRCLSNetworkAcceptLanguage; -FOUNDATION_EXPORT NSString *const FIRCLSNetworkContentLanguage; -FOUNDATION_EXPORT NSString *const FIRCLSNetworkCrashlyticsAPIClientDisplayVersion; -FOUNDATION_EXPORT NSString *const FIRCLSNetworkCrashlyticsAPIClientId; -FOUNDATION_EXPORT NSString *const FIRCLSNetworkCrashlyticsDeveloperToken; -FOUNDATION_EXPORT NSString *const FIRCLSNetworkCrashlyticsGoogleAppId; -FOUNDATION_EXPORT NSString *const FIRCLSNetworkCrashlyticsOrgId; -FOUNDATION_EXPORT NSString *const FIRCLSNetworkUserAgent; -FOUNDATION_EXPORT NSString *const FIRCLSNetworkUTF8; diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSConstants.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSConstants.m deleted file mode 100644 index f733f0de72..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSConstants.m +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSConstants.h" - -#define STR_HELPER(x) #x -#define STR(x) STR_HELPER(x) - -NSString* const FIRCLSDeveloperToken = @"77f0789d8e230eccdb4b99b82dccd78d47f9b604"; - -NSString* const FIRCLSVersion = @STR(DISPLAY_VERSION); - -// User Messages -NSString* const FIRCLSMissingConsumerKeyMsg = @"consumer key is nil or zero length"; -NSString* const FIRCLSMissingConsumerSecretMsg = @"consumer secret is nil or zero length"; - -// Exceptions -NSString* const FIRCLSException = @"FIRCLSException"; - -// Endpoints -NSString* const FIRCLSSettingsEndpoint = @"https://firebase-settings.crashlytics.com"; -NSString* const FIRCLSConfigureEndpoint = @"https://update.crashlytics.com"; -NSString* const FIRCLSReportsEndpoint = @"https://reports.crashlytics.com"; - -// Network requests -NSString* const FIRCLSNetworkAccept = @"Accept"; -NSString* const FIRCLSNetworkAcceptCharset = @"Accept-Charset"; -NSString* const FIRCLSNetworkApplicationJson = @"application/json"; -NSString* const FIRCLSNetworkAcceptLanguage = @"Accept-Language"; -NSString* const FIRCLSNetworkContentLanguage = @"Content-Language"; -NSString* const FIRCLSNetworkCrashlyticsAPIClientDisplayVersion = - @"X-Crashlytics-API-Client-Display-Version"; -NSString* const FIRCLSNetworkCrashlyticsAPIClientId = @"X-Crashlytics-API-Client-Id"; -NSString* const FIRCLSNetworkCrashlyticsDeveloperToken = @"X-Crashlytics-Developer-Token"; -NSString* const FIRCLSNetworkCrashlyticsGoogleAppId = @"X-Crashlytics-Google-App-Id"; -NSString* const FIRCLSNetworkCrashlyticsOrgId = @"X-Crashlytics-Org-Id"; -NSString* const FIRCLSNetworkUserAgent = @"User-Agent"; -NSString* const FIRCLSNetworkUTF8 = @"utf-8"; diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSFABHost.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSFABHost.h deleted file mode 100644 index 82c8fccfde..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSFABHost.h +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import - -/** - * Returns the OS version of the host device - */ -NSOperatingSystemVersion FIRCLSHostGetOSVersion(void); - -/** - * Returns model info for the device on which app is running - */ -NSString *FIRCLSHostModelInfo(void); - -/** - * Returns a string representing the OS build - */ -NSString *FIRCLSHostOSBuildVersion(void); - -/** - * Returns a concatenated string of the OS version(majorVersion.minorVersion.patchVersion) - */ -NSString *FIRCLSHostOSDisplayVersion(void); diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSFABHost.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSFABHost.m deleted file mode 100644 index 4c3206c1e1..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSFABHost.m +++ /dev/null @@ -1,119 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "FIRCLSFABHost.h" - -#if TARGET_OS_WATCH -#import -#elif TARGET_OS_IPHONE -#import -#endif - -#include - -#define FIRCLS_HOST_SYSCTL_BUFFER_SIZE (128) - -#pragma mark - OS Versions - -#pragma mark Private - -static NSString *FIRCLSHostSysctlEntry(const char *sysctlKey) { - char buffer[FIRCLS_HOST_SYSCTL_BUFFER_SIZE]; - size_t bufferSize = FIRCLS_HOST_SYSCTL_BUFFER_SIZE; - if (sysctlbyname(sysctlKey, buffer, &bufferSize, NULL, 0) != 0) { - return nil; - } - return [NSString stringWithUTF8String:buffer]; -} - -#pragma mark Public - -NSOperatingSystemVersion FIRCLSHostGetOSVersion(void) { - // works on macos(10.10), ios(8.0), watchos(2.0), tvos(9.0) - if ([NSProcessInfo.processInfo respondsToSelector:@selector(operatingSystemVersion)]) { - return [NSProcessInfo.processInfo operatingSystemVersion]; - } - - NSOperatingSystemVersion version = {0, 0, 0}; - -#if TARGET_OS_IPHONE - -#if TARGET_OS_WATCH - NSString *versionString = [[WKInterfaceDevice currentDevice] systemVersion]; -#else - NSString *versionString = [[UIDevice currentDevice] systemVersion]; -#endif - - NSArray *parts = [versionString componentsSeparatedByString:@"."]; - - if (parts.count > 0) { - version.majorVersion = [[parts objectAtIndex:0] integerValue]; - } - - if ([parts count] > 1) { - version.minorVersion = [[parts objectAtIndex:1] integerValue]; - } - - if ([parts count] > 2) { - version.patchVersion = [[parts objectAtIndex:2] integerValue]; - } - -#endif - - return version; -} - -NSString *FIRCLSHostOSBuildVersion(void) { - return FIRCLSHostSysctlEntry("kern.osversion"); -} - -NSString *FIRCLSHostOSDisplayVersion(void) { - NSOperatingSystemVersion version = FIRCLSHostGetOSVersion(); - return [NSString stringWithFormat:@"%ld.%ld.%ld", (long)version.majorVersion, - (long)version.minorVersion, (long)version.patchVersion]; -} - -#pragma mark - Host Models - -#pragma mark Public - -NSString *FIRCLSHostModelInfo(void) { - NSString *model = nil; - -#if TARGET_OS_SIMULATOR -#if TARGET_OS_WATCH - model = @"watchOS Simulator"; -#elif TARGET_OS_TV - model = @"tvOS Simulator"; -#elif TARGET_OS_IPHONE - switch (UI_USER_INTERFACE_IDIOM()) { - case UIUserInterfaceIdiomPhone: - model = @"iOS Simulator (iPhone)"; - break; - case UIUserInterfaceIdiomPad: - model = @"iOS Simulator (iPad)"; - break; - default: - model = @"iOS Simulator (Unknown)"; - break; - } -#endif -#elif TARGET_OS_EMBEDDED - model = FIRCLSHostSysctlEntry("hw.machine"); -#else - model = FIRCLSHostSysctlEntry("hw.model"); -#endif - - return model; -} diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSMachO/FIRCLSCodeMapping.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSMachO/FIRCLSCodeMapping.h deleted file mode 100644 index ae80c46ad0..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSMachO/FIRCLSCodeMapping.h +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import - -typedef enum { - FIRCLSCodeMappingSourceUnknown, - FIRCLSCodeMappingSourceBuild, - FIRCLSCodeSourceCache, - FIRCLSCodeSourceSpotlight -} FIRCLSCodeMappingSource; - -@interface FIRCLSCodeMapping : NSObject - -+ (instancetype)mappingWithURL:(NSURL*)URL; - -- (instancetype)initWithURL:(NSURL*)URL; - -@property(nonatomic, copy, readonly) NSURL* URL; -@property(nonatomic, assign) FIRCLSCodeMappingSource source; -@property(nonatomic, copy, readonly) NSString* sourceName; - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSMachO/FIRCLSCodeMapping.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSMachO/FIRCLSCodeMapping.m deleted file mode 100644 index c212ce7d14..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSMachO/FIRCLSCodeMapping.m +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSCodeMapping.h" - -@interface FIRCLSCodeMapping () { - FIRCLSCodeMappingSource _source; -} - -@end - -@implementation FIRCLSCodeMapping - -+ (instancetype)mappingWithURL:(NSURL*)URL { - return [[self alloc] initWithURL:URL]; -} - -- (instancetype)initWithURL:(NSURL*)URL { - self = [super init]; - if (!self) { - return nil; - } - - _URL = [URL copy]; - - return self; -} - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSMachO/FIRCLSMachO.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSMachO/FIRCLSMachO.h deleted file mode 100644 index 59b4605562..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSMachO/FIRCLSMachO.h +++ /dev/null @@ -1,110 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#pragma once - -#include -#include -#include - -#include - -struct FIRCLSMachOFile { - int fd; - size_t mappedSize; - void* mappedFile; -}; -typedef struct FIRCLSMachOFile* FIRCLSMachOFileRef; - -struct FIRCLSMachOSlice { - const void* startAddress; - cpu_type_t cputype; - cpu_subtype_t cpusubtype; -}; -typedef struct FIRCLSMachOSlice* FIRCLSMachOSliceRef; - -typedef struct { - uint32_t major; - uint32_t minor; - uint32_t bugfix; -} FIRCLSMachOVersion; - -typedef struct { - uint64_t addr; - uint64_t size; - uint32_t offset; -} FIRCLSMachOSection; - -typedef struct { - char segname[16]; - uint64_t vmaddr; - uint64_t vmsize; -} FIRCLSMachOSegmentCommand; - -typedef void (^FIRCLSMachOSliceIterator)(FIRCLSMachOSliceRef slice); -typedef void (^FIRCLSMachOLoadCommandIterator)(uint32_t type, - uint32_t size, - const struct load_command* cmd); - -__BEGIN_DECLS - -bool FIRCLSMachOFileInitWithPath(FIRCLSMachOFileRef file, const char* path); -bool FIRCLSMachOFileInitWithCurrent(FIRCLSMachOFileRef file); -void FIRCLSMachOFileDestroy(FIRCLSMachOFileRef file); -void FIRCLSMachOFileEnumerateSlices(FIRCLSMachOFileRef file, FIRCLSMachOSliceIterator block); -struct FIRCLSMachOSlice FIRCLSMachOFileSliceWithArchitectureName(FIRCLSMachOFileRef file, - const char* name); - -void FIRCLSMachOEnumerateSlicesAtAddress(void* executableData, FIRCLSMachOSliceIterator block); -void FIRCLSMachOSliceEnumerateLoadCommands(FIRCLSMachOSliceRef slice, - FIRCLSMachOLoadCommandIterator block); -struct FIRCLSMachOSlice FIRCLSMachOSliceGetCurrent(void); -struct FIRCLSMachOSlice FIRCLSMachOSliceWithHeader(void* machHeader); - -const char* FIRCLSMachOSliceGetExecutablePath(FIRCLSMachOSliceRef slice); -const char* FIRCLSMachOSliceGetArchitectureName(FIRCLSMachOSliceRef slice); -bool FIRCLSMachOSliceIs64Bit(FIRCLSMachOSliceRef slice); -bool FIRCLSMachOSliceGetSectionByName(FIRCLSMachOSliceRef slice, - const char* segName, - const char* sectionName, - const void** ptr); -bool FIRCLSMachOSliceInitSectionByName(FIRCLSMachOSliceRef slice, - const char* segName, - const char* sectionName, - FIRCLSMachOSection* section); -void FIRCLSMachOSliceGetUnwindInformation(FIRCLSMachOSliceRef slice, - const void** ehFrame, - const void** unwindInfo); - -// load-command-specific calls for convenience - -// returns a pointer to the 16-byte UUID -uint8_t const* FIRCLSMachOGetUUID(const struct load_command* cmd); -const char* FIRCLSMachOGetDylibPath(const struct load_command* cmd); - -// return true if the header indicates the binary is encrypted -bool FIRCLSMachOGetEncrypted(const struct load_command* cmd); - -// SDK minimums -FIRCLSMachOVersion FIRCLSMachOGetMinimumOSVersion(const struct load_command* cmd); -FIRCLSMachOVersion FIRCLSMachOGetLinkedSDKVersion(const struct load_command* cmd); - -// Helpers -FIRCLSMachOSegmentCommand FIRCLSMachOGetSegmentCommand(const struct load_command* cmd); - -#ifdef __OBJC__ -NSString* FIRCLSMachONormalizeUUID(CFUUIDBytes* uuidBytes); -NSString* FIRCLSMachOFormatVersion(FIRCLSMachOVersion* version); -#endif -__END_DECLS diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSMachO/FIRCLSMachO.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSMachO/FIRCLSMachO.m deleted file mode 100644 index 386438c465..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSMachO/FIRCLSMachO.m +++ /dev/null @@ -1,509 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "FIRCLSMachO.h" - -#include - -#include -#include -#include -#include - -#include -#include - -#include -#include - -#include - -#include - -// This is defined in newer versions of iOS/macOS in usr/include/mach/machine.h -#define CLS_CPU_SUBTYPE_ARM64E ((cpu_subtype_t)2) - -static void FIRCLSMachOHeaderValues(FIRCLSMachOSliceRef slice, - const struct load_command** cmds, - uint32_t* cmdCount); -static bool FIRCLSMachOSliceIsValid(FIRCLSMachOSliceRef slice); - -bool FIRCLSMachOFileInitWithPath(FIRCLSMachOFileRef file, const char* path) { - struct stat statBuffer; - - if (!file || !path) { - return false; - } - - file->fd = 0; - file->mappedFile = NULL; - file->mappedSize = 0; - - file->fd = open(path, O_RDONLY); - if (file->fd < 0) { - // unable to open mach-o file - return false; - } - - if (fstat(file->fd, &statBuffer) == -1) { - close(file->fd); - return false; - } - - // We need some minimum size for this to even be a possible mach-o file. I believe - // its probably quite a bit bigger than this, but this at least covers something. - // We also need it to be a regular file. - file->mappedSize = (size_t)statBuffer.st_size; - if (statBuffer.st_size < 16 || !(statBuffer.st_mode & S_IFREG)) { - close(file->fd); - return false; - } - - // Map the file to memory. MAP_SHARED can potentially reduce the amount of actual private - // memory needed to do this mapping. Also, be sure to check for the correct failure result. - file->mappedFile = mmap(0, file->mappedSize, PROT_READ, MAP_FILE | MAP_SHARED, file->fd, 0); - if (!file->mappedFile || (file->mappedFile == MAP_FAILED)) { - close(file->fd); - return false; - } - - return true; -} - -bool FIRCLSMachOFileInitWithCurrent(FIRCLSMachOFileRef file) { - struct FIRCLSMachOSlice slice = FIRCLSMachOSliceGetCurrent(); - - const char* imagePath = FIRCLSMachOSliceGetExecutablePath(&slice); - - return FIRCLSMachOFileInitWithPath(file, imagePath); -} - -void FIRCLSMachOFileDestroy(FIRCLSMachOFileRef file) { - if (!file) { - return; - } - - if (file->mappedFile && file->mappedSize > 0) { - munmap(file->mappedFile, file->mappedSize); - } - - close(file->fd); -} - -void FIRCLSMachOFileEnumerateSlices(FIRCLSMachOFileRef file, FIRCLSMachOSliceIterator block) { - FIRCLSMachOEnumerateSlicesAtAddress(file->mappedFile, block); -} - -void FIRCLSMachOEnumerateSlicesAtAddress(void* executableData, FIRCLSMachOSliceIterator block) { - // check the magic value, to determine if we have a fat header or not - uint32_t magicValue; - uint32_t archCount; - const struct fat_arch* fatArch; - struct FIRCLSMachOSlice slice; - - memset(&slice, 0, sizeof(struct FIRCLSMachOSlice)); - - magicValue = ((struct fat_header*)executableData)->magic; - if ((magicValue != FAT_MAGIC) && (magicValue != FAT_CIGAM)) { - slice.startAddress = executableData; - - // use this to fill in the values - FIRCLSMachOHeaderValues(&slice, NULL, NULL); - - block(&slice); - - return; - } - - archCount = OSSwapBigToHostInt32(((struct fat_header*)executableData)->nfat_arch); - fatArch = executableData + sizeof(struct fat_header); - - for (uint32_t i = 0; i < archCount; ++i) { - slice.cputype = OSSwapBigToHostInt32(fatArch->cputype); - slice.cpusubtype = OSSwapBigToHostInt32(fatArch->cpusubtype); - slice.startAddress = executableData + OSSwapBigToHostInt32(fatArch->offset); - - block(&slice); - - // advance to the next fat_arch structure - fatArch = (struct fat_arch*)((uintptr_t)fatArch + sizeof(struct fat_arch)); - } -} - -struct FIRCLSMachOSlice FIRCLSMachOFileSliceWithArchitectureName(FIRCLSMachOFileRef file, - const char* name) { - __block struct FIRCLSMachOSlice value; - - memset(&value, 0, sizeof(struct FIRCLSMachOSlice)); - - FIRCLSMachOFileEnumerateSlices(file, ^(FIRCLSMachOSliceRef slice) { - if (strcmp(FIRCLSMachOSliceGetArchitectureName(slice), name) == 0) { - value = *slice; - } - }); - - return value; -} - -static void FIRCLSMachOHeaderValues(FIRCLSMachOSliceRef slice, - const struct load_command** cmds, - uint32_t* cmdCount) { - const struct mach_header* header32 = (const struct mach_header*)slice->startAddress; - const struct mach_header_64* header64 = (const struct mach_header_64*)slice->startAddress; - uint32_t commandCount; - const void* commandsAddress; - - if (cmds) { - *cmds = NULL; - } - - if (cmdCount) { - *cmdCount = 0; - } - - if (!slice->startAddress) { - return; - } - - // the 32 and 64 bit versions have an identical structures, so this will work - switch (header32->magic) { - case MH_MAGIC: // 32-bit - case MH_CIGAM: - slice->cputype = header32->cputype; - slice->cpusubtype = header32->cpusubtype; - commandCount = header32->ncmds; - commandsAddress = slice->startAddress + sizeof(struct mach_header); - break; - case MH_MAGIC_64: // 64-bit - case MH_CIGAM_64: - slice->cputype = header64->cputype; - slice->cpusubtype = header64->cpusubtype; - commandCount = header64->ncmds; - commandsAddress = slice->startAddress + sizeof(struct mach_header_64); - break; - default: - // not a valid header - return; - } - - // assign everything back by reference - if (cmds) { - *cmds = commandsAddress; - } - - if (cmdCount) { - *cmdCount = commandCount; - } -} - -static bool FIRCLSMachOSliceIsValid(FIRCLSMachOSliceRef slice) { - if (!slice) { - return false; - } - - if (!slice->startAddress) { - return false; - } - - return true; -} - -void FIRCLSMachOSliceEnumerateLoadCommands(FIRCLSMachOSliceRef slice, - FIRCLSMachOLoadCommandIterator block) { - const struct load_command* cmd; - uint32_t cmdCount; - - if (!block) { - return; - } - - if (!FIRCLSMachOSliceIsValid(slice)) { - return; - } - - FIRCLSMachOHeaderValues(slice, &cmd, &cmdCount); - - for (uint32_t i = 0; cmd != NULL && i < cmdCount; ++i) { - block(cmd->cmd, cmd->cmdsize, cmd); - - cmd = (struct load_command*)((uintptr_t)cmd + cmd->cmdsize); - } -} - -struct FIRCLSMachOSlice FIRCLSMachOSliceGetCurrent(void) { - const NXArchInfo* archInfo; - struct FIRCLSMachOSlice slice; - void* executableSymbol; - Dl_info dlinfo; - - archInfo = NXGetLocalArchInfo(); - if (archInfo) { - slice.cputype = archInfo->cputype; - slice.cpusubtype = archInfo->cpusubtype; - } - - slice.startAddress = NULL; - - // This call can fail when Exported Symbols File in Build Settings is missing the symbol value - // defined as _MH_EXECUTE_SYM (if you look in the header the underscored MH_EXECUTE_SYM define is - // there) - executableSymbol = dlsym(RTLD_MAIN_ONLY, MH_EXECUTE_SYM); - - // get the address of the main function - if (dladdr(executableSymbol, &dlinfo) != 0) { - slice.startAddress = dlinfo.dli_fbase; - } - - return slice; -} - -struct FIRCLSMachOSlice FIRCLSMachOSliceWithHeader(void* machHeader) { - struct FIRCLSMachOSlice slice; - - slice.startAddress = machHeader; - - return slice; -} - -const char* FIRCLSMachOSliceGetExecutablePath(FIRCLSMachOSliceRef slice) { - Dl_info info; - - if (!FIRCLSMachOSliceIsValid(slice)) { - return NULL; - } - - // use dladdr here to look up the information we need for a binary image - if (dladdr(slice->startAddress, &info) == 0) { - return NULL; - } - - return info.dli_fname; -} - -const char* FIRCLSMachOSliceGetArchitectureName(FIRCLSMachOSliceRef slice) { - const NXArchInfo* archInfo; - - // there are some special cases here for types not handled by earlier OSes - if (slice->cputype == CPU_TYPE_ARM && slice->cpusubtype == CPU_SUBTYPE_ARM_V7S) { - return "armv7s"; - } - - if (slice->cputype == (CPU_TYPE_ARM | CPU_ARCH_ABI64)) { - if (slice->cpusubtype == CLS_CPU_SUBTYPE_ARM64E) { - return "arm64e"; - } else if (slice->cpusubtype == CPU_SUBTYPE_ARM64_ALL) { - return "arm64"; - } - } - - if (slice->cputype == (CPU_TYPE_ARM) && slice->cpusubtype == CPU_SUBTYPE_ARM_V7K) { - return "armv7k"; - } - - archInfo = NXGetArchInfoFromCpuType(slice->cputype, slice->cpusubtype); - if (!archInfo) { - return "unknown"; - } - - return archInfo->name; -} - -bool FIRCLSMachOSliceIs64Bit(FIRCLSMachOSliceRef slice) { - // I'm pretty sure this is sufficient... - return (slice->cputype & CPU_ARCH_ABI64) == CPU_ARCH_ABI64; -} - -bool FIRCLSMachOSliceGetSectionByName(FIRCLSMachOSliceRef slice, - const char* segName, - const char* sectionName, - const void** ptr) { - if (!ptr) { - return false; - } - - *ptr = NULL; // make sure this is set before returning - - FIRCLSMachOSection section; - - if (!FIRCLSMachOSliceInitSectionByName(slice, segName, sectionName, §ion)) { - return false; - } - - // WARNING: this calculation isn't correct, but is here to maintain backwards - // compatibility for now with callers of FIRCLSMachOSliceGetSectionByName. All new - // users should be calling FIRCLSMachOSliceInitSectionByName - *ptr = (const void*)((uintptr_t)slice->startAddress + section.offset); - - return true; -} - -bool FIRCLSMachOSliceInitSectionByName(FIRCLSMachOSliceRef slice, - const char* segName, - const char* sectionName, - FIRCLSMachOSection* section) { - if (!FIRCLSMachOSliceIsValid(slice)) { - return false; - } - - if (!section) { - return false; - } - - memset(section, 0, sizeof(FIRCLSMachOSection)); - - if (FIRCLSMachOSliceIs64Bit(slice)) { - const struct section_64* sect = - getsectbynamefromheader_64(slice->startAddress, segName, sectionName); - if (!sect) { - return false; - } - - section->addr = sect->addr; - section->size = sect->size; - section->offset = sect->offset; - } else { - const struct section* sect = getsectbynamefromheader(slice->startAddress, segName, sectionName); - if (!sect) { - return false; - } - - section->addr = sect->addr; - section->size = sect->size; - section->offset = sect->offset; - } - - return true; -} - -// TODO: this is left in-place just to ensure that old crashltyics + new fabric are still compatible -// with each other. As a happy bonus, if that situation does come up, this will also fix the bug -// that was preventing compact unwind on arm64 + iOS 9 from working correctly. -void FIRCLSMachOSliceGetUnwindInformation(FIRCLSMachOSliceRef slice, - const void** ehFrame, - const void** unwindInfo) { - if (!unwindInfo && !ehFrame) { - return; - } - - bool found = false; - intptr_t slide = 0; - - // This is inefficient, but we have no other safe way to do this correctly. Modifying the - // FIRCLSMachOSlice structure is tempting, but could introduce weird binary-compatibility issues - // with version mis-matches. - for (uint32_t i = 0; i < _dyld_image_count(); ++i) { - const struct mach_header* header = _dyld_get_image_header(i); - - if (header == slice->startAddress) { - found = true; - slide = _dyld_get_image_vmaddr_slide(i); - break; - } - } - - // make sure we were able to find a matching value - if (!found) { - return; - } - - FIRCLSMachOSection section; - - if (unwindInfo) { - if (FIRCLSMachOSliceInitSectionByName(slice, SEG_TEXT, "__unwind_info", §ion)) { - *unwindInfo = (void*)(section.addr + slide); - } - } - - if (ehFrame) { - if (FIRCLSMachOSliceInitSectionByName(slice, SEG_TEXT, "__eh_frame", §ion)) { - *ehFrame = (void*)(section.addr + slide); - } - } -} - -uint8_t const* FIRCLSMachOGetUUID(const struct load_command* cmd) { - return ((const struct uuid_command*)cmd)->uuid; -} - -const char* FIRCLSMachOGetDylibPath(const struct load_command* cmd) { - const struct dylib_command* dylibcmd = (const struct dylib_command*)cmd; - - return (const char*)((uintptr_t)cmd + dylibcmd->dylib.name.offset); -} - -bool FIRCLSMachOGetEncrypted(const struct load_command* cmd) { - return ((struct encryption_info_command*)cmd)->cryptid > 0; -} - -static FIRCLSMachOVersion FIRCLSMachOVersionFromEncoded(uint32_t encoded) { - FIRCLSMachOVersion version; - - version.major = (encoded & 0xffff0000) >> 16; - version.minor = (encoded & 0x0000ff00) >> 8; - version.bugfix = encoded & 0x000000ff; - - return version; -} - -FIRCLSMachOVersion FIRCLSMachOGetMinimumOSVersion(const struct load_command* cmd) { - return FIRCLSMachOVersionFromEncoded(((const struct version_min_command*)cmd)->version); -} - -FIRCLSMachOVersion FIRCLSMachOGetLinkedSDKVersion(const struct load_command* cmd) { - return FIRCLSMachOVersionFromEncoded(((const struct version_min_command*)cmd)->sdk); -} - -FIRCLSMachOSegmentCommand FIRCLSMachOGetSegmentCommand(const struct load_command* cmd) { - FIRCLSMachOSegmentCommand segmentCommand; - - memset(&segmentCommand, 0, sizeof(FIRCLSMachOSegmentCommand)); - - if (!cmd) { - return segmentCommand; - } - - if (cmd->cmd == LC_SEGMENT) { - struct segment_command* segCmd = (struct segment_command*)cmd; - - memcpy(segmentCommand.segname, segCmd->segname, 16); - segmentCommand.vmaddr = segCmd->vmaddr; - segmentCommand.vmsize = segCmd->vmsize; - } else if (cmd->cmd == LC_SEGMENT_64) { - struct segment_command_64* segCmd = (struct segment_command_64*)cmd; - - memcpy(segmentCommand.segname, segCmd->segname, 16); - segmentCommand.vmaddr = segCmd->vmaddr; - segmentCommand.vmsize = segCmd->vmsize; - } - - return segmentCommand; -} - -NSString* FIRCLSMachONormalizeUUID(CFUUIDBytes* uuidBytes) { - CFUUIDRef uuid = CFUUIDCreateFromUUIDBytes(kCFAllocatorDefault, *uuidBytes); - - NSString* string = CFBridgingRelease(CFUUIDCreateString(kCFAllocatorDefault, uuid)); - - CFRelease(uuid); - - return [[string stringByReplacingOccurrencesOfString:@"-" withString:@""] lowercaseString]; -} - -NSString* FIRCLSMachOFormatVersion(FIRCLSMachOVersion* version) { - if (!version) { - return nil; - } - - return [NSString stringWithFormat:@"%d.%d.%d", version->major, version->minor, version->bugfix]; -} diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSMachO/FIRCLSMachOBinary.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSMachO/FIRCLSMachOBinary.h deleted file mode 100644 index 57d54988af..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSMachO/FIRCLSMachOBinary.h +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import -#import "FIRCLSMachO.h" - -@class FIRCLSMachOSlice; - -@interface FIRCLSMachOBinary : NSObject { - NSURL* _url; - - struct FIRCLSMachOFile _file; - NSMutableArray* _slices; - NSString* _instanceIdentifier; -} - -+ (id)MachOBinaryWithPath:(NSString*)path; - -- (id)initWithURL:(NSURL*)url; - -@property(nonatomic, copy, readonly) NSURL* URL; -@property(nonatomic, copy, readonly) NSString* path; -@property(nonatomic, strong, readonly) NSArray* slices; -@property(nonatomic, copy, readonly) NSString* instanceIdentifier; - -- (void)enumerateUUIDs:(void (^)(NSString* uuid, NSString* architecture))block; - -- (FIRCLSMachOSlice*)sliceForArchitecture:(NSString*)architecture; - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSMachO/FIRCLSMachOBinary.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSMachO/FIRCLSMachOBinary.m deleted file mode 100644 index 12598e3310..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSMachO/FIRCLSMachOBinary.m +++ /dev/null @@ -1,175 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSMachOBinary.h" - -#import "FIRCLSMachOSlice.h" - -#import - -static void FIRCLSSafeHexToString(const uint8_t* value, size_t length, char* outputBuffer); -static NSString* FIRCLSNSDataToNSString(NSData* data); -static NSString* FIRCLSHashBytes(const void* bytes, size_t length); -static NSString* FIRCLSHashNSString(NSString* value); - -@interface FIRCLSMachOBinary () - -+ (NSString*)hashNSString:(NSString*)value; - -@end - -@implementation FIRCLSMachOBinary - -+ (id)MachOBinaryWithPath:(NSString*)path { - return [[self alloc] initWithURL:[NSURL fileURLWithPath:path]]; -} - -@synthesize slices = _slices; - -- (id)initWithURL:(NSURL*)url { - self = [super init]; - if (self) { - _url = [url copy]; - - if (!FIRCLSMachOFileInitWithPath(&_file, [[_url path] fileSystemRepresentation])) { - return nil; - } - - _slices = [NSMutableArray new]; - FIRCLSMachOFileEnumerateSlices(&_file, ^(FIRCLSMachOSliceRef slice) { - FIRCLSMachOSlice* sliceObject; - - sliceObject = [[FIRCLSMachOSlice alloc] initWithSlice:slice]; - - [self->_slices addObject:sliceObject]; - }); - } - - return self; -} - -- (void)dealloc { - FIRCLSMachOFileDestroy(&_file); -} - -- (NSURL*)URL { - return _url; -} - -- (NSString*)path { - return [_url path]; -} - -- (NSString*)instanceIdentifier { - if (_instanceIdentifier) { - return _instanceIdentifier; - } - - NSMutableString* prehashedString = [NSMutableString new]; - - // sort the slices by architecture - NSArray* sortedSlices = - [_slices sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) { - return [[obj1 architectureName] compare:[obj2 architectureName]]; - }]; - - // append them all into a big string - for (FIRCLSMachOSlice* slice in sortedSlices) { - [prehashedString appendString:[slice uuid]]; - } - - _instanceIdentifier = [FIRCLSHashNSString(prehashedString) copy]; - - return _instanceIdentifier; -} - -- (void)enumerateUUIDs:(void (^)(NSString* uuid, NSString* architecture))block { - for (FIRCLSMachOSlice* slice in _slices) { - block([slice uuid], [slice architectureName]); - } -} - -- (FIRCLSMachOSlice*)sliceForArchitecture:(NSString*)architecture { - for (FIRCLSMachOSlice* slice in [self slices]) { - if ([[slice architectureName] isEqualToString:architecture]) { - return slice; - } - } - - return nil; -} - -+ (NSString*)hashNSString:(NSString*)value { - return FIRCLSHashNSString(value); -} - -@end - -// TODO: Functions copied from the SDK. We should figure out a way to share this. -static void FIRCLSSafeHexToString(const uint8_t* value, size_t length, char* outputBuffer) { - const char hex[] = "0123456789abcdef"; - - if (!value) { - outputBuffer[0] = '\0'; - return; - } - - for (size_t i = 0; i < length; ++i) { - unsigned char c = value[i]; - outputBuffer[i * 2] = hex[c >> 4]; - outputBuffer[i * 2 + 1] = hex[c & 0x0F]; - } - - outputBuffer[length * 2] = '\0'; // null terminate -} - -static NSString* FIRCLSNSDataToNSString(NSData* data) { - NSString* string; - char* buffer; - size_t size; - NSUInteger length; - - // we need 2 hex char for every byte of data, plus one more spot for a - // null terminator - length = [data length]; - size = (length * 2) + 1; - buffer = malloc(sizeof(char) * size); - - if (!buffer) { - return nil; - } - - FIRCLSSafeHexToString([data bytes], length, buffer); - - string = [NSString stringWithUTF8String:buffer]; - - free(buffer); - - return string; -} - -static NSString* FIRCLSHashBytes(const void* bytes, size_t length) { - uint8_t digest[CC_SHA1_DIGEST_LENGTH] = {0}; - CC_SHA1(bytes, (CC_LONG)length, digest); - - NSData* result = [NSData dataWithBytes:digest length:CC_SHA1_DIGEST_LENGTH]; - - return FIRCLSNSDataToNSString(result); -} - -static NSString* FIRCLSHashNSString(NSString* value) { - const char* s = [value cStringUsingEncoding:NSUTF8StringEncoding]; - - return FIRCLSHashBytes(s, strlen(s)); -} diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSMachO/FIRCLSMachOSlice.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSMachO/FIRCLSMachOSlice.h deleted file mode 100644 index 9f7bcb43f2..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSMachO/FIRCLSMachOSlice.h +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import -#import "FIRCLSMachO.h" - -@interface FIRCLSMachOSlice : NSObject { - struct FIRCLSMachOSlice _slice; - - NSString* _uuidString; - NSArray* _linkedDylibs; - FIRCLSMachOVersion _minimumOSVersion; - FIRCLSMachOVersion _linkedSDKVersion; -} - -+ (id)runningSlice; - -- (id)initWithSlice:(FIRCLSMachOSliceRef)sliceRef; - -@property(nonatomic, copy, readonly) NSString* uuid; -@property(nonatomic, copy, readonly) NSString* architectureName; -@property(nonatomic, strong, readonly) NSArray* linkedDylibs; -@property(nonatomic, assign, readonly) FIRCLSMachOVersion minimumOSVersion; -@property(nonatomic, assign, readonly) FIRCLSMachOVersion linkedSDKVersion; - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSMachO/FIRCLSMachOSlice.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSMachO/FIRCLSMachOSlice.m deleted file mode 100644 index 961e144a81..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSMachO/FIRCLSMachOSlice.m +++ /dev/null @@ -1,93 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSMachOSlice.h" - -#include - -// this is defined only if __OPEN_SOURCE__ is *not* defined in the TVOS SDK's mach-o/loader.h -// also, it has not yet made it back to the OSX SDKs, for example -#ifndef LC_VERSION_MIN_TVOS -#define LC_VERSION_MIN_TVOS 0x2F -#endif - -@implementation FIRCLSMachOSlice - -+ (id)runningSlice { - struct FIRCLSMachOSlice slice; - - slice = FIRCLSMachOSliceGetCurrent(); - - return [[self alloc] initWithSlice:&slice]; -} - -@synthesize minimumOSVersion = _minimumOSVersion; -@synthesize linkedSDKVersion = _linkedSDKVersion; - -- (id)initWithSlice:(FIRCLSMachOSliceRef)sliceRef { - self = [super init]; - if (self) { - NSMutableArray* dylibs; - - _slice = *sliceRef; - - _minimumOSVersion.major = 0; - _minimumOSVersion.minor = 0; - _minimumOSVersion.bugfix = 0; - - _linkedSDKVersion.major = 0; - _linkedSDKVersion.minor = 0; - _linkedSDKVersion.bugfix = 0; - - dylibs = [NSMutableArray array]; - - FIRCLSMachOSliceEnumerateLoadCommands( - &_slice, ^(uint32_t type, uint32_t size, const struct load_command* cmd) { - switch (type) { - case LC_UUID: - self->_uuidString = - [FIRCLSMachONormalizeUUID((CFUUIDBytes*)FIRCLSMachOGetUUID(cmd)) copy]; - break; - case LC_LOAD_DYLIB: - [dylibs addObject:[NSString stringWithUTF8String:FIRCLSMachOGetDylibPath(cmd)]]; - break; - case LC_VERSION_MIN_IPHONEOS: - case LC_VERSION_MIN_MACOSX: - case LC_VERSION_MIN_WATCHOS: - case LC_VERSION_MIN_TVOS: - self->_minimumOSVersion = FIRCLSMachOGetMinimumOSVersion(cmd); - self->_linkedSDKVersion = FIRCLSMachOGetLinkedSDKVersion(cmd); - break; - } - }); - - _linkedDylibs = [dylibs copy]; - } - - return self; -} - -- (NSString*)architectureName { - return [NSString stringWithUTF8String:FIRCLSMachOSliceGetArchitectureName(&_slice)]; -} - -- (NSString*)uuid { - return _uuidString; -} - -- (NSArray*)linkedDylibs { - return _linkedDylibs; -} - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSMachO/FIRCLSdSYM.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSMachO/FIRCLSdSYM.h deleted file mode 100644 index c80ac745ff..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSMachO/FIRCLSdSYM.h +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import - -@class FIRCLSMachOBinary; - -@interface FIRCLSdSYM : NSObject - -NS_ASSUME_NONNULL_BEGIN - -+ (id)dSYMWithURL:(NSURL*)url; - -- (id)initWithURL:(NSURL*)url; - -@property(nonatomic, readonly) FIRCLSMachOBinary* binary; -@property(nonatomic, copy, readonly, nullable) NSString* bundleIdentifier; -@property(nonatomic, copy, readonly) NSURL* executableURL; -@property(nonatomic, copy, readonly) NSString* executablePath; -@property(nonatomic, copy, readonly) NSString* bundleVersion; -@property(nonatomic, copy, readonly) NSString* shortBundleVersion; - -- (void)enumerateUUIDs:(void (^)(NSString* uuid, NSString* architecture))block; - -NS_ASSUME_NONNULL_END - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSMachO/FIRCLSdSYM.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSMachO/FIRCLSdSYM.m deleted file mode 100644 index cda787914a..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSMachO/FIRCLSdSYM.m +++ /dev/null @@ -1,109 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSdSYM.h" - -#import "FIRCLSMachOBinary.h" - -#define CLS_XCODE_DSYM_PREFIX (@"com.apple.xcode.dsym.") - -@interface FIRCLSdSYM () - -@property(nonatomic, readonly) NSBundle* bundle; - -@end - -@implementation FIRCLSdSYM - -+ (id)dSYMWithURL:(NSURL*)url { - return [[self alloc] initWithURL:url]; -} - -- (id)initWithURL:(NSURL*)url { - self = [super init]; - if (self) { - NSDirectoryEnumerator* enumerator; - NSString* path; - NSFileManager* fileManager; - BOOL isDirectory; - BOOL fileExistsAtPath; - NSArray* itemsInDWARFDir; - - fileManager = [NSFileManager defaultManager]; - - // Is there a file at this path? - if (![fileManager fileExistsAtPath:[url path]]) { - return nil; - } - - _bundle = [NSBundle bundleWithURL:url]; - if (!_bundle) { - return nil; - } - - path = [[url path] stringByAppendingPathComponent:@"Contents/Resources/DWARF"]; - - // Does this path exist and is it a directory? - fileExistsAtPath = [fileManager fileExistsAtPath:path isDirectory:&isDirectory]; - if (!fileExistsAtPath || !isDirectory) { - return nil; - } - - enumerator = [fileManager enumeratorAtPath:path]; - itemsInDWARFDir = [enumerator allObjects]; - // Do we have a Contents/Resources/DWARF dir but no contents? - if ([itemsInDWARFDir count] == 0) { - return nil; - } - - path = [path stringByAppendingPathComponent:[itemsInDWARFDir objectAtIndex:0]]; - - _binary = [[FIRCLSMachOBinary alloc] initWithURL:[NSURL fileURLWithPath:path]]; - } - - return self; -} - -- (NSString*)bundleIdentifier { - NSString* identifier; - - identifier = [_bundle bundleIdentifier]; - if ([identifier hasPrefix:CLS_XCODE_DSYM_PREFIX]) { - return [identifier substringFromIndex:[CLS_XCODE_DSYM_PREFIX length]]; - } - - return identifier; -} - -- (NSURL*)executableURL { - return [_binary URL]; -} - -- (NSString*)executablePath { - return [_binary path]; -} - -- (NSString*)bundleVersion { - return [[_bundle infoDictionary] objectForKey:@"CFBundleVersion"]; -} - -- (NSString*)shortBundleVersion { - return [[_bundle infoDictionary] objectForKey:@"CFBundleShortVersionString"]; -} - -- (void)enumerateUUIDs:(void (^)(NSString* uuid, NSString* architecture))block { - [_binary enumerateUUIDs:block]; -} - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSNetworking/FIRCLSFABNetworkClient.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSNetworking/FIRCLSFABNetworkClient.h deleted file mode 100644 index ebbd26c919..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSNetworking/FIRCLSFABNetworkClient.h +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import - -OBJC_EXTERN const NSUInteger FIRCLSNetworkMaximumRetryCount; - -NS_ASSUME_NONNULL_BEGIN - -typedef void (^FIRCLSNetworkDataTaskCompletionHandlerBlock)(NSData *__nullable data, - NSURLResponse *__nullable response, - NSError *__nullable error); -typedef void (^FIRCLSNetworkDownloadTaskCompletionHandlerBlock)(NSURL *__nullable location, - NSURLResponse *__nullable response, - NSError *__nullable error); - -@interface FIRCLSFABNetworkClient : NSObject - -- (instancetype)init; -- (instancetype)initWithQueue:(nullable NSOperationQueue *)operationQueue; -- (instancetype)initWithSessionConfiguration:(NSURLSessionConfiguration *)config - queue:(nullable NSOperationQueue *)operationQueue - NS_DESIGNATED_INITIALIZER; - -- (void)startDataTaskWithRequest:(NSURLRequest *)request - retryLimit:(NSUInteger)retryLimit - completionHandler:(FIRCLSNetworkDataTaskCompletionHandlerBlock)completionHandler; -- (void)startDownloadTaskWithRequest:(NSURLRequest *)request - retryLimit:(NSUInteger)retryLimit - completionHandler: - (FIRCLSNetworkDownloadTaskCompletionHandlerBlock)completionHandler; - -- (void)invalidateAndCancel; - -// Backwards compatibility (we cannot change an interface in Fabric Base that other kits rely on, -// since we have no control of versioning dependencies) -- (void)startDataTaskWithRequest:(NSURLRequest *)request - completionHandler:(FIRCLSNetworkDataTaskCompletionHandlerBlock)completionHandler; -- (void)startDownloadTaskWithRequest:(NSURLRequest *)request - completionHandler: - (FIRCLSNetworkDownloadTaskCompletionHandlerBlock)completionHandler; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSNetworking/FIRCLSFABNetworkClient.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSNetworking/FIRCLSFABNetworkClient.m deleted file mode 100644 index d11b3b6115..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSNetworking/FIRCLSFABNetworkClient.m +++ /dev/null @@ -1,280 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSFABNetworkClient.h" - -#if FIRCLSURLSESSION_REQUIRED -#import "FIRCLSURLSession.h" -#endif - -#import "FIRCLSNetworkResponseHandler.h" - -static const float FIRCLSNetworkMinimumRetryJitter = 0.90f; -static const float FIRCLSNetworkMaximumRetryJitter = 1.10f; -const NSUInteger FIRCLSNetworkMaximumRetryCount = 10; - -@interface FIRCLSFABNetworkClient () - -@property(nonatomic, strong, readonly) NSURLSession *session; - -@end - -@implementation FIRCLSFABNetworkClient - -- (instancetype)init { - return [self initWithQueue:nil]; -} - -- (instancetype)initWithQueue:(nullable NSOperationQueue *)operationQueue { -#if !FIRCLSURLSESSION_REQUIRED - NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration]; -#else - NSURLSessionConfiguration *config = [FIRCLSURLSessionConfiguration defaultSessionConfiguration]; -#endif - return [self initWithSessionConfiguration:config queue:operationQueue]; -} - -- (instancetype)initWithSessionConfiguration:(NSURLSessionConfiguration *)config - queue:(nullable NSOperationQueue *)operationQueue { - self = [super init]; - if (!self) { - return nil; - } - -#if !FIRCLSURLSESSION_REQUIRED - _session = [NSURLSession sessionWithConfiguration:config - delegate:self - delegateQueue:operationQueue]; -#else - _session = [FIRCLSURLSession sessionWithConfiguration:config - delegate:self - delegateQueue:operationQueue]; -#endif - if (!_session) { - return nil; - } - - return self; -} - -- (void)dealloc { - [_session finishTasksAndInvalidate]; -} - -#pragma mark - Delay Handling -- (double)randomDoubleWithMin:(double)min max:(double)max { - return min + ((max - min) * drand48()); -} - -- (double)generateRandomJitter { - return [self randomDoubleWithMin:FIRCLSNetworkMinimumRetryJitter - max:FIRCLSNetworkMaximumRetryJitter]; -} - -- (NSTimeInterval)computeDelayForResponse:(NSURLResponse *)response - withRetryCount:(NSUInteger)count { - NSTimeInterval initialValue = [FIRCLSNetworkResponseHandler retryValueForResponse:response]; - - // make sure count is > 0 - count = MAX(count, 1); - // make sure initialValue is >2 for exponential backoff to work reasonably with low count numbers - initialValue = MAX(initialValue, 2.0); - - const double jitter = [self generateRandomJitter]; - - return pow(initialValue, count) * jitter; // exponential backoff -} - -- (void)runAfterRetryValueFromResponse:(NSURLResponse *)response - attempts:(NSUInteger)count - onQueue:(dispatch_queue_t)queue - block:(void (^)(void))block { - const NSTimeInterval delay = [self computeDelayForResponse:response withRetryCount:count]; - - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (uint64_t)(delay * NSEC_PER_SEC)), queue, block); -} - -- (void)runAfterRetryValueFromResponse:(NSURLResponse *)response - attempts:(NSUInteger)count - block:(void (^)(void))block { - dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); - - [self runAfterRetryValueFromResponse:response attempts:count onQueue:queue block:block]; -} - -#pragma mark - Tasks - -- (void)startDataTaskWithRequest:(NSURLRequest *)request - retryLimit:(NSUInteger)retryLimit - tries:(NSUInteger)tries - completionHandler:(FIRCLSNetworkDataTaskCompletionHandlerBlock)completionHandler { - NSURLSessionTask *task = [self.session - dataTaskWithRequest:request - completionHandler:^(NSData *data, NSURLResponse *response, NSError *taskError) { - [FIRCLSNetworkResponseHandler - handleCompletedResponse:response - forOriginalRequest:request - error:taskError - block:^(BOOL retry, NSError *error) { - if (!retry) { - completionHandler(data, response, error); - return; - } - - if (tries >= retryLimit) { - NSDictionary *userInfo = @{ - @"retryLimit" : @(retryLimit), - NSURLErrorFailingURLStringErrorKey : request.URL - }; - completionHandler( - nil, nil, - [NSError - errorWithDomain:FIRCLSNetworkErrorDomain - code:FIRCLSNetworkErrorMaximumAttemptsReached - userInfo:userInfo]); - return; - } - - [self - runAfterRetryValueFromResponse:response - attempts:tries - block:^{ - [self - startDataTaskWithRequest: - request - retryLimit: - retryLimit - tries: - (tries + - 1) - completionHandler: - completionHandler]; - }]; - }]; - }]; - - [task resume]; - - if (!task) { - completionHandler(nil, nil, - [NSError errorWithDomain:FIRCLSNetworkErrorDomain - code:FIRCLSNetworkErrorFailedToStartOperation - userInfo:nil]); - } -} - -- (void)startDataTaskWithRequest:(NSURLRequest *)request - retryLimit:(NSUInteger)retryLimit - completionHandler:(FIRCLSNetworkDataTaskCompletionHandlerBlock)completionHandler { - [self startDataTaskWithRequest:request - retryLimit:retryLimit - tries:0 - completionHandler:completionHandler]; -} - -- (void)startDataTaskWithRequest:(NSURLRequest *)request - completionHandler:(FIRCLSNetworkDataTaskCompletionHandlerBlock)completionHandler { - [self startDataTaskWithRequest:request - retryLimit:FIRCLSNetworkMaximumRetryCount - completionHandler:completionHandler]; -} - -- (void)startDownloadTaskWithRequest:(NSURLRequest *)request - retryLimit:(NSUInteger)retryLimit - tries:(NSUInteger)tries - completionHandler: - (FIRCLSNetworkDownloadTaskCompletionHandlerBlock)completionHandler { - NSURLSessionTask *task = [self.session - downloadTaskWithRequest:request - completionHandler:^(NSURL *location, NSURLResponse *response, NSError *taskError) { - [FIRCLSNetworkResponseHandler - handleCompletedResponse:response - forOriginalRequest:request - error:taskError - block:^(BOOL retry, NSError *error) { - if (!retry) { - completionHandler(location, response, error); - return; - } - - if (tries >= retryLimit) { - NSDictionary *userInfo = @{ - @"retryLimit" : @(retryLimit), - NSURLErrorFailingURLStringErrorKey : request.URL - }; - completionHandler( - nil, nil, - [NSError - errorWithDomain:FIRCLSNetworkErrorDomain - code: - FIRCLSNetworkErrorMaximumAttemptsReached - userInfo:userInfo]); - return; - } - - [self - runAfterRetryValueFromResponse:response - attempts:tries - block:^{ - [self - startDownloadTaskWithRequest: - request - retryLimit: - retryLimit - tries: - (tries + - 1) - completionHandler: - completionHandler]; - }]; - }]; - }]; - - [task resume]; - - if (!task) { - completionHandler(nil, nil, - [NSError errorWithDomain:FIRCLSNetworkErrorDomain - code:FIRCLSNetworkErrorFailedToStartOperation - userInfo:nil]); - } -} - -- (void)startDownloadTaskWithRequest:(NSURLRequest *)request - retryLimit:(NSUInteger)retryLimit - completionHandler: - (FIRCLSNetworkDownloadTaskCompletionHandlerBlock)completionHandler { - [self startDownloadTaskWithRequest:request - retryLimit:retryLimit - tries:0 - completionHandler:completionHandler]; -} - -- (void)startDownloadTaskWithRequest:(NSURLRequest *)request - completionHandler: - (FIRCLSNetworkDownloadTaskCompletionHandlerBlock)completionHandler { - [self startDownloadTaskWithRequest:request - retryLimit:FIRCLSNetworkMaximumRetryCount - completionHandler:completionHandler]; -} - -- (void)invalidateAndCancel { - [self.session invalidateAndCancel]; -} - -#pragma mark - NSURLSession Delegate -- (void)URLSession:(NSURLSession *)session didBecomeInvalidWithError:(NSError *)error { -} - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSNetworking/FIRCLSMultipartMimeStreamEncoder.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSNetworking/FIRCLSMultipartMimeStreamEncoder.h deleted file mode 100644 index c3630a5b43..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSNetworking/FIRCLSMultipartMimeStreamEncoder.h +++ /dev/null @@ -1,88 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import - -/** - * This class is a helper class for generating Multipart requests, as described in - * http://www.w3.org/Protocols/rfc1341/7_2_Multipart.html. In the case of multiple part messages, in - * which one or more different sets of data are combined in a single body, a "multipart" - * Content-Type field must appear in the entity's header. The body must then contain one or more - * "body parts," each preceded by an encapsulation boundary, and the last one followed by a closing - * boundary. Each part starts with an encapsulation boundary, and then contains a body part - * consisting of header area, a blank line, and a body area. - */ -@interface FIRCLSMultipartMimeStreamEncoder : NSObject - -/** - * Convenience class method to populate a NSMutableURLRequest with data from a block that takes an - * instance of this class as input. - */ -+ (void)populateRequest:(NSMutableURLRequest *)request - withDataFromEncoder:(void (^)(FIRCLSMultipartMimeStreamEncoder *encoder))block; - -/** - * Returns a NSString instance with multipart/form-data appended to the boundary. - */ -+ (NSString *)contentTypeHTTPHeaderValueWithBoundary:(NSString *)boundary; -/** - * Convenience class method that returns an instance of this class - */ -+ (instancetype)encoderWithStream:(NSOutputStream *)stream andBoundary:(NSString *)boundary; -/** - * Returns a unique boundary string. - */ -+ (NSString *)generateBoundary; -/** - * Designated initializer - * @param stream NSOutputStream associated with the Multipart request - * @param boundary the unique Boundary string to be used - */ -- (instancetype)initWithStream:(NSOutputStream *)stream - andBoundary:(NSString *)boundary NS_DESIGNATED_INITIALIZER; -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; -/** - * Encodes this block within the boundary on the output stream - */ -- (void)encode:(void (^)(void))block; -/** - * Adds the contents of the file data with given Mime type anf fileName within the boundary in - * stream - */ -- (void)addFileData:(NSData *)data - fileName:(NSString *)fileName - mimeType:(NSString *)mimeType - fieldName:(NSString *)name; -/** - * Convenience method for the method above. Converts fileURL to data and calls the above method. - */ -- (void)addFile:(NSURL *)fileURL - fileName:(NSString *)fileName - mimeType:(NSString *)mimeType - fieldName:(NSString *)name; -/** - * Adds this field and value in the stream - */ -- (void)addValue:(id)value fieldName:(NSString *)name; -/** - * String referring to the multipart MIME type with boundary - */ -@property(nonatomic, copy, readonly) NSString *contentTypeHTTPHeaderValue; -/** - * Length of the data written to stream - */ -@property(nonatomic, copy, readonly) NSString *contentLengthHTTPHeaderValue; - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSNetworking/FIRCLSMultipartMimeStreamEncoder.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSNetworking/FIRCLSMultipartMimeStreamEncoder.m deleted file mode 100644 index 134b1cefb2..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSNetworking/FIRCLSMultipartMimeStreamEncoder.m +++ /dev/null @@ -1,208 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSMultipartMimeStreamEncoder.h" - -#import "FIRCLSByteUtility.h" -#import "FIRCLSLogger.h" -#import "FIRCLSUUID.h" - -@interface FIRCLSMultipartMimeStreamEncoder () - -@property(nonatomic) NSUInteger length; -@property(nonatomic, copy) NSString *boundary; -@property(nonatomic, copy, readonly) NSData *headerData; -@property(nonatomic, copy, readonly) NSData *footerData; -@property(nonatomic, strong) NSOutputStream *outputStream; - -@end - -@implementation FIRCLSMultipartMimeStreamEncoder - -+ (void)populateRequest:(NSMutableURLRequest *)request - withDataFromEncoder:(void (^)(FIRCLSMultipartMimeStreamEncoder *encoder))block { - NSString *boundary = [self generateBoundary]; - - NSOutputStream *stream = [NSOutputStream outputStreamToMemory]; - - FIRCLSMultipartMimeStreamEncoder *encoder = - [[FIRCLSMultipartMimeStreamEncoder alloc] initWithStream:stream andBoundary:boundary]; - - [encoder encode:^{ - block(encoder); - }]; - - [request setValue:encoder.contentTypeHTTPHeaderValue forHTTPHeaderField:@"Content-Type"]; - [request setValue:encoder.contentLengthHTTPHeaderValue forHTTPHeaderField:@"Content-Length"]; - - NSData *data = [stream propertyForKey:NSStreamDataWrittenToMemoryStreamKey]; - request.HTTPBody = data; -} - -+ (NSString *)contentTypeHTTPHeaderValueWithBoundary:(NSString *)boundary { - return [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary]; -} - -+ (instancetype)encoderWithStream:(NSOutputStream *)stream andBoundary:(NSString *)boundary { - return [[self alloc] initWithStream:stream andBoundary:boundary]; -} - -+ (NSString *)generateBoundary { - return FIRCLSGenerateUUID(); -} - -- (instancetype)initWithStream:(NSOutputStream *)stream andBoundary:(NSString *)boundary { - self = [super init]; - if (!self) { - return nil; - } - - self.outputStream = stream; - - if (!boundary) { - boundary = [FIRCLSMultipartMimeStreamEncoder generateBoundary]; - } - - _boundary = boundary; - - return self; -} - -- (void)encode:(void (^)(void))block { - [self beginEncoding]; - - block(); - - [self endEncoding]; -} - -- (NSString *)contentTypeHTTPHeaderValue { - return [[self class] contentTypeHTTPHeaderValueWithBoundary:self.boundary]; -} - -- (NSString *)contentLengthHTTPHeaderValue { - return [NSString stringWithFormat:@"%lu", (unsigned long)_length]; -} - -#pragma - mark MIME part API -- (void)beginEncoding { - _length = 0; - - [self.outputStream open]; - - [self writeData:self.headerData]; -} - -- (void)endEncoding { - [self writeData:self.footerData]; - - [self.outputStream close]; -} - -- (NSData *)headerData { - return [@"MIME-Version: 1.0\r\n" dataUsingEncoding:NSUTF8StringEncoding]; -} - -- (NSData *)footerData { - return [[NSString stringWithFormat:@"--%@--\r\n", self.boundary] - dataUsingEncoding:NSUTF8StringEncoding]; -} - -- (void)addFileData:(NSData *)data - fileName:(NSString *)fileName - mimeType:(NSString *)mimeType - fieldName:(NSString *)name { - if ([data length] == 0) { - FIRCLSErrorLog(@"Unable to MIME encode data with zero length (%@)", name); - return; - } - - if ([name length] == 0 || [fileName length] == 0) { - FIRCLSErrorLog(@"name (%@) or fieldname (%@) is invalid", name, fileName); - return; - } - - NSMutableString *string; - - string = [NSMutableString - stringWithFormat:@"--%@\r\nContent-Disposition: form-data; name=\"%@\"; filename=\"%@\"\r\n", - self.boundary, name, fileName]; - - if (mimeType) { - [string appendFormat:@"Content-Type: %@\r\n", mimeType]; - [string appendString:@"Content-Transfer-Encoding: binary\r\n\r\n"]; - } else { - [string appendString:@"Content-Type: application/octet-stream\r\n\r\n"]; - } - - [self writeData:[string dataUsingEncoding:NSUTF8StringEncoding]]; - - [self writeData:data]; - - [self writeData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; -} - -- (void)addValue:(id)value fieldName:(NSString *)name { - if ([name length] == 0 || !value || value == NSNull.null) { - FIRCLSErrorLog(@"name (%@) or value (%@) is invalid", name, value); - return; - } - - NSMutableString *string; - - string = - [NSMutableString stringWithFormat:@"--%@\r\nContent-Disposition: form-data; name=\"%@\"\r\n", - self.boundary, name]; - [string appendString:@"Content-Type: text/plain\r\n\r\n"]; - [string appendFormat:@"%@\r\n", value]; - - [self writeData:[string dataUsingEncoding:NSUTF8StringEncoding]]; -} - -- (void)addFile:(NSURL *)fileURL - fileName:(NSString *)fileName - mimeType:(NSString *)mimeType - fieldName:(NSString *)name { - NSData *data = [NSData dataWithContentsOfURL:fileURL]; - - [self addFileData:data fileName:fileName mimeType:mimeType fieldName:name]; -} - -- (BOOL)writeBytes:(const void *)bytes ofLength:(NSUInteger)length { - if ([self.outputStream write:bytes maxLength:length] != length) { - FIRCLSErrorLog(@"Failed to write bytes to stream"); - return NO; - } - - _length += length; - - return YES; -} - -- (void)writeData:(NSData *)data { - FIRCLSEnumerateByteRangesOfNSDataUsingBlock( - data, ^(const void *bytes, NSRange byteRange, BOOL *stop) { - NSUInteger length = byteRange.length; - - if ([self.outputStream write:bytes maxLength:length] != length) { - FIRCLSErrorLog(@"Failed to write data to stream"); - *stop = YES; - return; - } - - self->_length += length; - }); -} - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSNetworking/FIRCLSNetworkResponseHandler.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSNetworking/FIRCLSNetworkResponseHandler.h deleted file mode 100644 index 42f0bb4930..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSNetworking/FIRCLSNetworkResponseHandler.h +++ /dev/null @@ -1,87 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import - -/** - * Type to indicate response status - */ -typedef NS_ENUM(NSInteger, FIRCLSNetworkClientResponseType) { - FIRCLSNetworkClientResponseSuccess, - FIRCLSNetworkClientResponseInvalid, - FIRCLSNetworkClientResponseFailure, - FIRCLSNetworkClientResponseRetry, - FIRCLSNetworkClientResponseBackOff -}; - -typedef NS_ENUM(NSInteger, FIRCLSNetworkErrorType) { - FIRCLSNetworkErrorUnknown = -1, - FIRCLSNetworkErrorFailedToStartOperation = -3, - FIRCLSNetworkErrorResponseInvalid = -4, - FIRCLSNetworkErrorRequestFailed = -5, - FIRCLSNetworkErrorMaximumAttemptsReached = -6, -}; - -extern NSInteger const FIRCLSNetworkErrorUnknownURLCancelReason; - -/** - * This block is an input parameter to handleCompletedResponse: and handleCompletedTask: methods of - * this class. - * @param retryMightSucceed is YES if the request should be retried. - * @param error is the error received back in response. - */ -typedef void (^FIRCLSNetworkResponseCompletionHandlerBlock)(BOOL retryMightSucceed, NSError *error); - -/** - * Error domain for Crashlytics network errors - */ -extern NSString *const FIRCLSNetworkErrorDomain; -/** - * This class handles network responses. - */ -@interface FIRCLSNetworkResponseHandler : NSObject -/** - * Returns the header in the given NSURLResponse with name as key - */ -+ (NSString *)headerForResponse:(NSURLResponse *)response withKey:(NSString *)key; -/** - * Returns Retry-After header value in response, and if absent returns a default retry value - */ -+ (NSTimeInterval)retryValueForResponse:(NSURLResponse *)response; -/** - * Checks if the content type for response matches the request - */ -+ (BOOL)contentTypeForResponse:(NSURLResponse *)response matchesRequest:(NSURLRequest *)request; - -+ (NSInteger)cancelReasonFromURLError:(NSError *)error; - -+ (BOOL)retryableURLError:(NSError *)error; - -/** - * Convenience method that calls back the input block with FIRCLSNetworkClientResponseType after - * checking the response code in response - */ -+ (void)clientResponseType:(NSURLResponse *)response - handler:(void (^)(FIRCLSNetworkClientResponseType type, - NSInteger statusCode))responseTypeAndStatusCodeHandlerBlock; -/** - * Handles a completed response for request and calls back input block. Populates error even if - * error was nil, but response code indicated an error. - */ -+ (void)handleCompletedResponse:(NSURLResponse *)response - forOriginalRequest:(NSURLRequest *)originalRequest - error:(NSError *)error - block:(FIRCLSNetworkResponseCompletionHandlerBlock)completionHandlerBlock; - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSNetworking/FIRCLSNetworkResponseHandler.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSNetworking/FIRCLSNetworkResponseHandler.m deleted file mode 100644 index d82cdf69a8..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSNetworking/FIRCLSNetworkResponseHandler.m +++ /dev/null @@ -1,290 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSNetworkResponseHandler.h" - -@implementation FIRCLSNetworkResponseHandler - -static const NSTimeInterval kFIRCLSNetworkResponseHandlerDefaultRetryInterval = 2.0; -static NSString *const kFIRCLSNetworkResponseHandlerContentType = @"Content-Type"; -NSString *const FIRCLSNetworkErrorDomain = @"FIRCLSNetworkError"; - -NSInteger const FIRCLSNetworkErrorUnknownURLCancelReason = -1; - -#pragma mark - Header Handling -+ (NSString *)headerForResponse:(NSURLResponse *)response withKey:(NSString *)key { - if (![response respondsToSelector:@selector(allHeaderFields)]) { - return nil; - } - - return [((NSHTTPURLResponse *)response).allHeaderFields objectForKey:key]; -} - -+ (NSTimeInterval)retryValueForResponse:(NSURLResponse *)response { - NSString *retryValueString = [self headerForResponse:response withKey:@"Retry-After"]; - if (!retryValueString) { - return kFIRCLSNetworkResponseHandlerDefaultRetryInterval; - } - - NSTimeInterval value = retryValueString.doubleValue; - if (value < 0.0) { - return kFIRCLSNetworkResponseHandlerDefaultRetryInterval; - } - - return value; -} - -+ (NSString *)requestIdForResponse:(NSURLResponse *)response { - return [self headerForResponse:response withKey:@"X-Request-Id"]; -} - -+ (BOOL)contentTypeForResponse:(NSURLResponse *)response matchesRequest:(NSURLRequest *)request { - NSString *accept = [request.allHTTPHeaderFields objectForKey:@"Accept"]; - if (!accept) { - // An omitted accept header is defined to match everything - return YES; - } - - NSString *contentHeader = [self.class headerForResponse:response - withKey:kFIRCLSNetworkResponseHandlerContentType]; - if (!contentHeader) { - // FIRCLSDeveloperLog("Network", @"Content-Type not present in response"); - return NO; - } - - NSString *acceptCharset = request.allHTTPHeaderFields[@"Accept-Charset"]; - - NSArray *parts = [contentHeader componentsSeparatedByString:@"; charset="]; - if (!parts) { - parts = @[ contentHeader ]; - } - - if ([[parts objectAtIndex:0] caseInsensitiveCompare:accept] != NSOrderedSame) { - // FIRCLSDeveloperLog("Network", @"Content-Type does not match Accept"); - return NO; - } - - if (!acceptCharset) { - return YES; - } - - if (parts.count < 2) { - return YES; - } - - return [[parts objectAtIndex:1] caseInsensitiveCompare:acceptCharset] == NSOrderedSame; -} - -+ (NSInteger)cancelReasonFromURLError:(NSError *)error { - if (![[error domain] isEqualToString:NSURLErrorDomain]) { - return FIRCLSNetworkErrorUnknownURLCancelReason; - } - - if ([error code] != NSURLErrorCancelled) { - return FIRCLSNetworkErrorUnknownURLCancelReason; - } - - NSNumber *reason = [[error userInfo] objectForKey:NSURLErrorBackgroundTaskCancelledReasonKey]; - if (reason == nil) { - return FIRCLSNetworkErrorUnknownURLCancelReason; - } - - return [reason integerValue]; -} - -+ (BOOL)retryableURLError:(NSError *)error { - // So far, the only task errors seen are NSURLErrorDomain. For others, we're not - // sure what to do. - if (![[error domain] isEqualToString:NSURLErrorDomain]) { - return NO; - } - - // cases that we know are definitely not retryable - switch ([error code]) { - case NSURLErrorBadURL: - case NSURLErrorUnsupportedURL: - case NSURLErrorHTTPTooManyRedirects: - case NSURLErrorRedirectToNonExistentLocation: - case NSURLErrorUserCancelledAuthentication: - case NSURLErrorUserAuthenticationRequired: - case NSURLErrorAppTransportSecurityRequiresSecureConnection: - case NSURLErrorFileDoesNotExist: - case NSURLErrorFileIsDirectory: - case NSURLErrorDataLengthExceedsMaximum: - case NSURLErrorSecureConnectionFailed: - case NSURLErrorServerCertificateHasBadDate: - case NSURLErrorServerCertificateUntrusted: - case NSURLErrorServerCertificateHasUnknownRoot: - case NSURLErrorServerCertificateNotYetValid: - case NSURLErrorClientCertificateRejected: - case NSURLErrorClientCertificateRequired: - case NSURLErrorBackgroundSessionRequiresSharedContainer: - return NO; - } - - // All other errors, as far as I can tell, are things that could clear up - // without action on the part of the client. - - // NSURLErrorCancelled is a potential special-case. I believe there are - // situations where a cancelled request cannot be successfully restarted. But, - // until I can prove it, we'll retry. There are defnitely many cases where - // a cancelled request definitely can be restarted and will work. - - return YES; -} - -#pragma mark - Error Creation -+ (NSError *)errorForCode:(NSInteger)code userInfo:(NSDictionary *)userInfo { - return [NSError errorWithDomain:FIRCLSNetworkErrorDomain code:code userInfo:userInfo]; -} - -+ (NSError *)errorForResponse:(NSURLResponse *)response - ofType:(FIRCLSNetworkClientResponseType)type - status:(NSInteger)status { - if (type == FIRCLSNetworkClientResponseSuccess) { - return nil; - } - - NSString *requestId = [self requestIdForResponse:response]; - NSString *contentType = [self headerForResponse:response - withKey:kFIRCLSNetworkResponseHandlerContentType]; - - // this could be nil, so be careful - requestId = requestId ? requestId : @""; - contentType = contentType ? contentType : @""; - - NSDictionary *userInfo = @{ - @"type" : @(type), - @"status_code" : @(status), - @"request_id" : requestId, - @"content_type" : contentType - }; - - // compute a reasonable error code type - NSInteger errorCode = FIRCLSNetworkErrorUnknown; - switch (type) { - case FIRCLSNetworkClientResponseFailure: - errorCode = FIRCLSNetworkErrorRequestFailed; - break; - case FIRCLSNetworkClientResponseInvalid: - errorCode = FIRCLSNetworkErrorResponseInvalid; - break; - default: - break; - } - - return [self errorForCode:errorCode userInfo:userInfo]; -} - -+ (void)clientResponseType:(NSURLResponse *)response - handler:(void (^)(FIRCLSNetworkClientResponseType type, - NSInteger statusCode))responseTypeAndStatusCodeHandlerBlock { - if (![response respondsToSelector:@selector(statusCode)]) { - responseTypeAndStatusCodeHandlerBlock(FIRCLSNetworkClientResponseInvalid, 0); - return; - } - - NSInteger code = ((NSHTTPURLResponse *)response).statusCode; - - switch (code) { - case 200: - case 201: - case 202: - case 204: - case 304: - responseTypeAndStatusCodeHandlerBlock(FIRCLSNetworkClientResponseSuccess, code); - return; - case 420: - case 429: - responseTypeAndStatusCodeHandlerBlock(FIRCLSNetworkClientResponseBackOff, code); - return; - case 408: - responseTypeAndStatusCodeHandlerBlock(FIRCLSNetworkClientResponseRetry, code); - return; - case 400: - case 401: - case 403: - case 404: - case 406: - case 410: - case 411: - case 413: - case 419: - case 422: - case 431: - responseTypeAndStatusCodeHandlerBlock(FIRCLSNetworkClientResponseFailure, code); - return; - } - - // check for a 5xx - if (code >= 500 && code <= 599) { - responseTypeAndStatusCodeHandlerBlock(FIRCLSNetworkClientResponseRetry, code); - return; - } - - responseTypeAndStatusCodeHandlerBlock(FIRCLSNetworkClientResponseInvalid, code); -} - -+ (void)handleCompletedResponse:(NSURLResponse *)response - forOriginalRequest:(NSURLRequest *)originalRequest - error:(NSError *)originalError - block: - (FIRCLSNetworkResponseCompletionHandlerBlock)completionHandlerBlock { - // if we have an error, we can just continue - if (originalError) { - BOOL retryable = [self retryableURLError:originalError]; - - completionHandlerBlock(retryable, originalError); - return; - } - - [self.class clientResponseType:response - handler:^(FIRCLSNetworkClientResponseType type, NSInteger statusCode) { - NSError *error = nil; - - switch (type) { - case FIRCLSNetworkClientResponseInvalid: - error = [self errorForResponse:response - ofType:type - status:statusCode]; - break; - case FIRCLSNetworkClientResponseBackOff: - case FIRCLSNetworkClientResponseRetry: - error = [self errorForResponse:response - ofType:type - status:statusCode]; - completionHandlerBlock(YES, error); - return; - case FIRCLSNetworkClientResponseFailure: - error = [self errorForResponse:response - ofType:type - status:statusCode]; - break; - case FIRCLSNetworkClientResponseSuccess: - if (![self contentTypeForResponse:response - matchesRequest:originalRequest]) { - error = [self errorForResponse:response - ofType:FIRCLSNetworkClientResponseInvalid - status:statusCode]; - break; - } - - break; - } - - completionHandlerBlock(NO, error); - }]; -} - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSNetworking/FIRCLSURLBuilder.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSNetworking/FIRCLSURLBuilder.h deleted file mode 100644 index c8fbaa94a9..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSNetworking/FIRCLSURLBuilder.h +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import - -/** - * This is a convenience class to ease constructing NSURLs. - */ -@interface FIRCLSURLBuilder : NSObject - -/** - * Convenience method that returns a FIRCLSURLBuilder instance with the input base URL appended to - * it. - */ -+ (instancetype)URLWithBase:(NSString *)base; -/** - * Appends the component to the URL being built by FIRCLSURLBuilder instance - */ -- (void)appendComponent:(NSString *)component; -/** - * Escapes and appends the component to the URL being built by FIRCLSURLBuilder instance - */ -- (void)escapeAndAppendComponent:(NSString *)component; -/** - * Adds a query and value to the URL being built - */ -- (void)appendValue:(id)value forQueryParam:(NSString *)param; -/** - * Returns the built URL - */ -- (NSURL *)URL; - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSNetworking/FIRCLSURLBuilder.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSNetworking/FIRCLSURLBuilder.m deleted file mode 100644 index e832c89877..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSNetworking/FIRCLSURLBuilder.m +++ /dev/null @@ -1,103 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSURLBuilder.h" - -#import "FIRCLSLogger.h" - -@interface FIRCLSURLBuilder () - -@property(nonatomic) NSMutableString *URLString; -@property(nonatomic) NSUInteger queryParams; - -- (NSString *)escapeString:(NSString *)string; - -@end - -@implementation FIRCLSURLBuilder - -+ (instancetype)URLWithBase:(NSString *)base { - FIRCLSURLBuilder *url = [[FIRCLSURLBuilder alloc] init]; - - [url appendComponent:base]; - - return url; -} - -- (instancetype)init { - self = [super init]; - if (!self) { - return nil; - } - - _URLString = [[NSMutableString alloc] init]; - _queryParams = 0; - - return self; -} - -- (NSString *)escapeString:(NSString *)string { -#if TARGET_OS_WATCH - // TODO: Question - Why does watchOS use a different encoding from the other platforms and the - // Android SDK? - return - [string stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet - URLPathAllowedCharacterSet]]; -#else - return - [string stringByAddingPercentEncodingWithAllowedCharacters:NSCharacterSet - .URLQueryAllowedCharacterSet]; -#endif -} - -- (void)appendComponent:(NSString *)component { - if (component.length == 0) { - FIRCLSErrorLog(@"URLBuilder parameter component must not be empty"); - return; - } - - [self.URLString appendString:component]; -} - -- (void)escapeAndAppendComponent:(NSString *)component { - [self appendComponent:[self escapeString:component]]; -} - -- (void)appendValue:(id)value forQueryParam:(NSString *)param { - if (!value) { - return; - } - - if (self.queryParams == 0) { - [self appendComponent:@"?"]; - } else { - [self appendComponent:@"&"]; - } - - self.queryParams += 1; - - [self appendComponent:param]; - [self appendComponent:@"="]; - if ([value isKindOfClass:NSString.class]) { - [self escapeAndAppendComponent:value]; - } else { - [self escapeAndAppendComponent:[value description]]; - } -} - -- (NSURL *)URL { - return [NSURL URLWithString:self.URLString]; -} - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSOperation/FIRCLSCompoundOperation.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSOperation/FIRCLSCompoundOperation.h deleted file mode 100644 index 63b9362a94..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSOperation/FIRCLSCompoundOperation.h +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSFABAsyncOperation.h" - -/** - * If the compound operation is sent a @c -[cancel] message while executing, it will attempt to - * cancel all operations on its internal queue, and will return an error in its @c asyncCompletion - * block with this value as its code. - */ -FOUNDATION_EXPORT const NSUInteger FIRCLSCompoundOperationErrorCodeCancelled; - -/** - * If one or more of the operations on the @c compoundQueue fail, this operation returns an error - * in its @c asyncCompletion block with this code, and an array of @c NSErrors keyed on @c - * FIRCLSCompoundOperationErrorUserInfoKeyUnderlyingErrors in the @c userInfo dictionary. - */ -FOUNDATION_EXPORT const NSUInteger FIRCLSCompoundOperationErrorCodeSuboperationFailed; - -/** - * When all the operations complete, this @c FIRCLSCompoundOperation instance's @c asyncCompletion - * block is called. If any errors were passed by the suboperations' @c asyncCompletion blocks, they - * are put in an array which can be accessed in the @c userInfo dictionary in the error parameter - * for this instance's @c asyncCompletion block. - */ -FOUNDATION_EXPORT NSString *const FIRCLSCompoundOperationErrorUserInfoKeyUnderlyingErrors; - -/** - * An operation that executes a collection of suboperations on an internal private queue. Any - * instance of @c FIRCLSFABAsyncOperation passed into this instance's @c operations property has the - * potential to return an @c NSError in its @c asyncCompletion block. This instance's @c - * asyncCompletion block will put all such errors in an @c NSArray and return an @c NSError whose @c - * userInfo contains that array keyed by @c FIRCLSCompoundOperationErrorUserInfoKeyUnderlyingErrors. - */ -@interface FIRCLSCompoundOperation : FIRCLSFABAsyncOperation - -/** - * An array of @c NSOperations to execute, which can include instances of @c FIRCLSFABAsyncOperation - * or - * @c FIRCLSCompoundOperation. This operation will not be marked as finished until all suboperations - * are marked as finished. - */ -@property(copy, nonatomic) NSArray *operations; - -@property(strong, nonatomic, readonly) NSOperationQueue *compoundQueue; - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSOperation/FIRCLSCompoundOperation.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSOperation/FIRCLSCompoundOperation.m deleted file mode 100644 index 5dcf42885e..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSOperation/FIRCLSCompoundOperation.m +++ /dev/null @@ -1,165 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSCompoundOperation.h" - -#import "FIRCLSFABAsyncOperation_Private.h" - -#define FIRCLS_DISPATCH_QUEUES_AS_OBJECTS OS_OBJECT_USE_OBJC_RETAIN_RELEASE - -const NSUInteger FIRCLSCompoundOperationErrorCodeCancelled = UINT_MAX - 1; -const NSUInteger FIRCLSCompoundOperationErrorCodeSuboperationFailed = UINT_MAX - 2; - -NSString *const FIRCLSCompoundOperationErrorUserInfoKeyUnderlyingErrors = - @"com.google.firebase.crashlytics.FIRCLSCompoundOperation.error.user-info-key.underlying-" - @"errors"; - -static NSString *const FIRCLSCompoundOperationErrorDomain = - @"com.google.firebase.crashlytics.FIRCLSCompoundOperation.error"; -static char *const FIRCLSCompoundOperationCountingQueueLabel = - "com.google.firebase.crashlytics.FIRCLSCompoundOperation.dispatch-queue.counting-queue"; - -@interface FIRCLSCompoundOperation () - -@property(strong, nonatomic, readwrite) NSOperationQueue *compoundQueue; -@property(assign, nonatomic) NSUInteger completedOperations; -@property(strong, nonatomic) NSMutableArray *errors; -#if FIRCLS_DISPATCH_QUEUES_AS_OBJECTS -@property(strong, nonatomic) dispatch_queue_t countingQueue; -#else -@property(assign, nonatomic) dispatch_queue_t countingQueue; -#endif - -@end - -@implementation FIRCLSCompoundOperation - -- (instancetype)init { - self = [super init]; - if (!self) { - return nil; - } - - _compoundQueue = [[NSOperationQueue alloc] init]; - _completedOperations = 0; - _errors = [NSMutableArray array]; - _countingQueue = - dispatch_queue_create(FIRCLSCompoundOperationCountingQueueLabel, DISPATCH_QUEUE_SERIAL); - - return self; -} - -#if !FIRCLS_DISPATCH_QUEUES_AS_OBJECTS -- (void)dealloc { - if (_countingQueue) { - dispatch_release(_countingQueue); - } -} -#endif - -- (void)main { - for (FIRCLSFABAsyncOperation *operation in self.operations) { - [self injectCompoundAsyncCompletionInOperation:operation]; - [self injectCompoundSyncCompletionInOperation:operation]; - - [self.compoundQueue addOperation:operation]; - } -} - -- (void)cancel { - if (self.compoundQueue.operations.count > 0) { - [self.compoundQueue cancelAllOperations]; - dispatch_sync(self.countingQueue, ^{ - [self attemptCompoundCompletion]; - }); - } else { - for (NSOperation *operation in self.operations) { - [operation cancel]; - } - - // we have to add the operations to the queue in order for their isFinished property to be set - // to true. - [self.compoundQueue addOperations:self.operations waitUntilFinished:NO]; - } - [super cancel]; -} - -- (void)injectCompoundAsyncCompletionInOperation:(FIRCLSFABAsyncOperation *)operation { - __weak FIRCLSCompoundOperation *weakSelf = self; - FIRCLSFABAsyncOperationCompletionBlock originalAsyncCompletion = [operation.asyncCompletion copy]; - FIRCLSFABAsyncOperationCompletionBlock completion = ^(NSError *error) { - __strong FIRCLSCompoundOperation *strongSelf = weakSelf; - - if (originalAsyncCompletion) { - dispatch_sync(strongSelf.countingQueue, ^{ - originalAsyncCompletion(error); - }); - } - - [strongSelf updateCompletionCountsWithError:error]; - }; - operation.asyncCompletion = completion; -} - -- (void)injectCompoundSyncCompletionInOperation:(FIRCLSFABAsyncOperation *)operation { - __weak FIRCLSCompoundOperation *weakSelf = self; - void (^originalSyncCompletion)(void) = [operation.completionBlock copy]; - void (^completion)(void) = ^{ - __strong FIRCLSCompoundOperation *strongSelf = weakSelf; - - if (originalSyncCompletion) { - dispatch_sync(strongSelf.countingQueue, ^{ - originalSyncCompletion(); - }); - } - - dispatch_sync(strongSelf.countingQueue, ^{ - [strongSelf attemptCompoundCompletion]; - }); - }; - operation.completionBlock = completion; -} - -- (void)updateCompletionCountsWithError:(NSError *)error { - dispatch_sync(self.countingQueue, ^{ - if (!error) { - self.completedOperations += 1; - } else { - [self.errors addObject:error]; - } - }); -} - -- (void)attemptCompoundCompletion { - if (self.isCancelled) { - [self finishWithError:[NSError errorWithDomain:FIRCLSCompoundOperationErrorDomain - code:FIRCLSCompoundOperationErrorCodeCancelled - userInfo:@{ - NSLocalizedDescriptionKey : [NSString - stringWithFormat:@"%@ cancelled", self.name] - }]]; - self.asyncCompletion = nil; - } else if (self.completedOperations + self.errors.count == self.operations.count) { - NSError *error = nil; - if (self.errors.count > 0) { - error = [NSError - errorWithDomain:FIRCLSCompoundOperationErrorDomain - code:FIRCLSCompoundOperationErrorCodeSuboperationFailed - userInfo:@{FIRCLSCompoundOperationErrorUserInfoKeyUnderlyingErrors : self.errors}]; - } - [self finishWithError:error]; - } -} - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSOperation/FIRCLSFABAsyncOperation.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSOperation/FIRCLSFABAsyncOperation.h deleted file mode 100644 index e5d2c7ef4d..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSOperation/FIRCLSFABAsyncOperation.h +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import - -/** - * Completion block that can be called in your subclass implementation. It is up to you when you - * want to call it. - */ -typedef void (^FIRCLSFABAsyncOperationCompletionBlock)(NSError *__nullable error); - -/** - * FIRCLSFABAsyncOperation is a subclass of NSOperation that allows for asynchronous work to be - * performed, for things like networking, IPC or UI-driven logic. Create your own subclasses to - * encapsulate custom logic. - * @warning When subclassing to create your own operations, be sure to call -[finishWithError:] at - * some point, or program execution will hang. - * @see -[finishWithError:] in FIRCLSFABAsyncOperation_Private.h - */ -@interface FIRCLSFABAsyncOperation : NSOperation - -/** - * Add a callback method for consumers of your subclasses to set when the asynchronous work is - * marked as complete with -[finishWithError:]. - */ -@property(copy, nonatomic, nullable) FIRCLSFABAsyncOperationCompletionBlock asyncCompletion; - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSOperation/FIRCLSFABAsyncOperation.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSOperation/FIRCLSFABAsyncOperation.m deleted file mode 100644 index dcad16adfc..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSOperation/FIRCLSFABAsyncOperation.m +++ /dev/null @@ -1,146 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSFABAsyncOperation.h" - -#import "FIRCLSFABAsyncOperation_Private.h" - -@interface FIRCLSFABAsyncOperation () { - BOOL _internalExecuting; - BOOL _internalFinished; -} - -@property(nonatomic, strong) NSRecursiveLock *lock; - -@end - -@implementation FIRCLSFABAsyncOperation - -- (instancetype)init { - self = [super init]; - if (!self) { - return nil; - } - - _internalExecuting = NO; - _internalFinished = NO; - - _lock = [[NSRecursiveLock alloc] init]; - _lock.name = [NSString stringWithFormat:@"com.google.firebase.crashlytics.%@-lock", [self class]]; - ; - - return self; -} - -#pragma mark - NSOperation Overrides -- (BOOL)isConcurrent { - return YES; -} - -- (BOOL)isAsynchronous { - return YES; -} - -- (BOOL)isExecuting { - [self.lock lock]; - BOOL result = _internalExecuting; - [self.lock unlock]; - - return result; -} - -- (BOOL)isFinished { - [self.lock lock]; - BOOL result = _internalFinished; - [self.lock unlock]; - - return result; -} - -- (void)start { - if ([self checkForCancellation]) { - return; - } - - [self markStarted]; - - [self main]; -} - -#pragma mark - Utilities -- (void)changeValueForKey:(NSString *)key inBlock:(void (^)(void))block { - [self willChangeValueForKey:key]; - block(); - [self didChangeValueForKey:key]; -} - -- (void)lock:(void (^)(void))block { - [self.lock lock]; - block(); - [self.lock unlock]; -} - -- (BOOL)checkForCancellation { - if ([self isCancelled]) { - [self markDone]; - return YES; - } - - return NO; -} - -#pragma mark - State Management -- (void)unlockedMarkFinished { - [self changeValueForKey:@"isFinished" - inBlock:^{ - self->_internalFinished = YES; - }]; -} - -- (void)unlockedMarkStarted { - [self changeValueForKey:@"isExecuting" - inBlock:^{ - self->_internalExecuting = YES; - }]; -} - -- (void)unlockedMarkComplete { - [self changeValueForKey:@"isExecuting" - inBlock:^{ - self->_internalExecuting = NO; - }]; -} - -- (void)markStarted { - [self lock:^{ - [self unlockedMarkStarted]; - }]; -} - -- (void)markDone { - [self lock:^{ - [self unlockedMarkComplete]; - [self unlockedMarkFinished]; - }]; -} - -#pragma mark - Protected -- (void)finishWithError:(NSError *)error { - if (self.asyncCompletion) { - self.asyncCompletion(error); - } - [self markDone]; -} - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSOperation/FIRCLSFABAsyncOperation_Private.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSOperation/FIRCLSFABAsyncOperation_Private.h deleted file mode 100644 index d1e5797b3c..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSOperation/FIRCLSFABAsyncOperation_Private.h +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSFABAsyncOperation.h" - -@interface FIRCLSFABAsyncOperation (Private) - -/** - * Subclasses must call this method when they are done performing work. When it is called is up to - * you; it can be directly after kicking of a network request, say, or in the callback for its - * response. Once this method is called, the operation queue it is on will begin executing the next - * waiting operation. If you directly invoked -[start] on the instance, execution will proceed to - * the next code statement. - * @note as soon as this method is called, @c NSOperation's standard @c completionBlock will be - * executed if one exists, as a result of setting the operation's isFinished property to YES, and - * the asyncCompletion block is called. - * @param error Any error to pass to asyncCompletion, or nil if there is none. - */ -- (void)finishWithError:(NSError *__nullable)error; - -@end diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSOperation/FIRCLSOperation.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSOperation/FIRCLSOperation.h deleted file mode 100644 index 83fc694733..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSOperation/FIRCLSOperation.h +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import - -#import "FIRCLSCompoundOperation.h" -#import "FIRCLSFABAsyncOperation.h" -#import "FIRCLSFABAsyncOperation_Private.h" diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSUUID.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSUUID.h deleted file mode 100644 index dc3aedae27..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSUUID.h +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import -#import "FIRCLSConstants.h" - -/** - * Generates and returns a UUID - * This is also used by used by Answers to generate UUIDs. - */ -NSString *FIRCLSGenerateUUID(void); - -/** - * Converts the input uint8_t UUID to NSString - */ -NSString *FIRCLSUUIDToNSString(const uint8_t *uuid); diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSUUID.m b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSUUID.m deleted file mode 100644 index 6534d417fb..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/Shared/FIRCLSUUID.m +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "FIRCLSUUID.h" - -#import "FIRCLSByteUtility.h" - -static NSInteger const FIRCLSUUIDStringLength = 33; - -#pragma mark Public methods - -NSString *FIRCLSGenerateUUID(void) { - NSString *string; - - CFUUIDRef uuid = CFUUIDCreate(kCFAllocatorDefault); - string = CFBridgingRelease(CFUUIDCreateString(kCFAllocatorDefault, uuid)); - CFRelease(uuid); - - return string; -} - -NSString *FIRCLSUUIDToNSString(const uint8_t *uuid) { - char uuidString[FIRCLSUUIDStringLength]; - - FIRCLSSafeHexToString(uuid, 16, uuidString); - - return [NSString stringWithUTF8String:uuidString]; -} diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/third_party/libunwind/dwarf.h b/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/third_party/libunwind/dwarf.h deleted file mode 100644 index 9c81868a03..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/Crashlytics/third_party/libunwind/dwarf.h +++ /dev/null @@ -1,256 +0,0 @@ -/* libunwind - a platform-independent unwind library - Copyright (c) 2003-2005 Hewlett-Packard Development Company, L.P. - Contributed by David Mosberger-Tang - -This file is part of libunwind. - -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. */ - -#pragma once - -// -#define DWARF_EXTENDED_LENGTH_FLAG (0xffffffff) -#define DWARF_CIE_ID_CIE_FLAG (0) - -// Exception Handling Pointer Encoding constants -#define DW_EH_PE_VALUE_MASK (0x0F) -#define DW_EH_PE_RELATIVE_OFFSET_MASK (0x70) - -// Register Definitions -#define DW_EN_MAX_REGISTER_NUMBER (120) - -enum { - DW_EH_PE_ptr = 0x00, - DW_EH_PE_uleb128 = 0x01, - DW_EH_PE_udata2 = 0x02, - DW_EH_PE_udata4 = 0x03, - DW_EH_PE_udata8 = 0x04, - DW_EH_PE_signed = 0x08, - DW_EH_PE_sleb128 = 0x09, - DW_EH_PE_sdata2 = 0x0A, - DW_EH_PE_sdata4 = 0x0B, - DW_EH_PE_sdata8 = 0x0C, - - DW_EH_PE_absptr = 0x00, - DW_EH_PE_pcrel = 0x10, - DW_EH_PE_textrel = 0x20, - DW_EH_PE_datarel = 0x30, - DW_EH_PE_funcrel = 0x40, - DW_EH_PE_aligned = 0x50, - DW_EH_PE_indirect = 0x80, - DW_EH_PE_omit = 0xFF -}; - -// Unwind Instructions - -#define DW_CFA_OPCODE_MASK (0xC0) -#define DW_CFA_OPERAND_MASK (0x3F) - -enum { - DW_CFA_nop = 0x0, - DW_CFA_set_loc = 0x1, - DW_CFA_advance_loc1 = 0x2, - DW_CFA_advance_loc2 = 0x3, - DW_CFA_advance_loc4 = 0x4, - DW_CFA_offset_extended = 0x5, - DW_CFA_restore_extended = 0x6, - DW_CFA_undefined = 0x7, - DW_CFA_same_value = 0x8, - DW_CFA_register = 0x9, - DW_CFA_remember_state = 0xA, - DW_CFA_restore_state = 0xB, - DW_CFA_def_cfa = 0xC, - DW_CFA_def_cfa_register = 0xD, - DW_CFA_def_cfa_offset = 0xE, - DW_CFA_def_cfa_expression = 0xF, - DW_CFA_expression = 0x10, - DW_CFA_offset_extended_sf = 0x11, - DW_CFA_def_cfa_sf = 0x12, - DW_CFA_def_cfa_offset_sf = 0x13, - DW_CFA_val_offset = 0x14, - DW_CFA_val_offset_sf = 0x15, - DW_CFA_val_expression = 0x16, - - // opcode is in high 2 bits, operand in is lower 6 bits - DW_CFA_advance_loc = 0x40, // operand is delta - DW_CFA_offset = 0x80, // operand is register - DW_CFA_restore = 0xC0, // operand is register - - // GNU extensions - DW_CFA_GNU_window_save = 0x2D, - DW_CFA_GNU_args_size = 0x2E, - DW_CFA_GNU_negative_offset_extended = 0x2F -}; - -// Expression Instructions -enum { - DW_OP_addr = 0x03, - DW_OP_deref = 0x06, - DW_OP_const1u = 0x08, - DW_OP_const1s = 0x09, - DW_OP_const2u = 0x0A, - DW_OP_const2s = 0x0B, - DW_OP_const4u = 0x0C, - DW_OP_const4s = 0x0D, - DW_OP_const8u = 0x0E, - DW_OP_const8s = 0x0F, - DW_OP_constu = 0x10, - DW_OP_consts = 0x11, - DW_OP_dup = 0x12, - DW_OP_drop = 0x13, - DW_OP_over = 0x14, - DW_OP_pick = 0x15, - DW_OP_swap = 0x16, - DW_OP_rot = 0x17, - DW_OP_xderef = 0x18, - DW_OP_abs = 0x19, - DW_OP_and = 0x1A, - DW_OP_div = 0x1B, - DW_OP_minus = 0x1C, - DW_OP_mod = 0x1D, - DW_OP_mul = 0x1E, - DW_OP_neg = 0x1F, - DW_OP_not = 0x20, - DW_OP_or = 0x21, - DW_OP_plus = 0x22, - DW_OP_plus_uconst = 0x23, - DW_OP_shl = 0x24, - DW_OP_shr = 0x25, - DW_OP_shra = 0x26, - DW_OP_xor = 0x27, - DW_OP_skip = 0x2F, - DW_OP_bra = 0x28, - DW_OP_eq = 0x29, - DW_OP_ge = 0x2A, - DW_OP_gt = 0x2B, - DW_OP_le = 0x2C, - DW_OP_lt = 0x2D, - DW_OP_ne = 0x2E, - DW_OP_lit0 = 0x30, - DW_OP_lit1 = 0x31, - DW_OP_lit2 = 0x32, - DW_OP_lit3 = 0x33, - DW_OP_lit4 = 0x34, - DW_OP_lit5 = 0x35, - DW_OP_lit6 = 0x36, - DW_OP_lit7 = 0x37, - DW_OP_lit8 = 0x38, - DW_OP_lit9 = 0x39, - DW_OP_lit10 = 0x3A, - DW_OP_lit11 = 0x3B, - DW_OP_lit12 = 0x3C, - DW_OP_lit13 = 0x3D, - DW_OP_lit14 = 0x3E, - DW_OP_lit15 = 0x3F, - DW_OP_lit16 = 0x40, - DW_OP_lit17 = 0x41, - DW_OP_lit18 = 0x42, - DW_OP_lit19 = 0x43, - DW_OP_lit20 = 0x44, - DW_OP_lit21 = 0x45, - DW_OP_lit22 = 0x46, - DW_OP_lit23 = 0x47, - DW_OP_lit24 = 0x48, - DW_OP_lit25 = 0x49, - DW_OP_lit26 = 0x4A, - DW_OP_lit27 = 0x4B, - DW_OP_lit28 = 0x4C, - DW_OP_lit29 = 0x4D, - DW_OP_lit30 = 0x4E, - DW_OP_lit31 = 0x4F, - DW_OP_reg0 = 0x50, - DW_OP_reg1 = 0x51, - DW_OP_reg2 = 0x52, - DW_OP_reg3 = 0x53, - DW_OP_reg4 = 0x54, - DW_OP_reg5 = 0x55, - DW_OP_reg6 = 0x56, - DW_OP_reg7 = 0x57, - DW_OP_reg8 = 0x58, - DW_OP_reg9 = 0x59, - DW_OP_reg10 = 0x5A, - DW_OP_reg11 = 0x5B, - DW_OP_reg12 = 0x5C, - DW_OP_reg13 = 0x5D, - DW_OP_reg14 = 0x5E, - DW_OP_reg15 = 0x5F, - DW_OP_reg16 = 0x60, - DW_OP_reg17 = 0x61, - DW_OP_reg18 = 0x62, - DW_OP_reg19 = 0x63, - DW_OP_reg20 = 0x64, - DW_OP_reg21 = 0x65, - DW_OP_reg22 = 0x66, - DW_OP_reg23 = 0x67, - DW_OP_reg24 = 0x68, - DW_OP_reg25 = 0x69, - DW_OP_reg26 = 0x6A, - DW_OP_reg27 = 0x6B, - DW_OP_reg28 = 0x6C, - DW_OP_reg29 = 0x6D, - DW_OP_reg30 = 0x6E, - DW_OP_reg31 = 0x6F, - DW_OP_breg0 = 0x70, - DW_OP_breg1 = 0x71, - DW_OP_breg2 = 0x72, - DW_OP_breg3 = 0x73, - DW_OP_breg4 = 0x74, - DW_OP_breg5 = 0x75, - DW_OP_breg6 = 0x76, - DW_OP_breg7 = 0x77, - DW_OP_breg8 = 0x78, - DW_OP_breg9 = 0x79, - DW_OP_breg10 = 0x7A, - DW_OP_breg11 = 0x7B, - DW_OP_breg12 = 0x7C, - DW_OP_breg13 = 0x7D, - DW_OP_breg14 = 0x7E, - DW_OP_breg15 = 0x7F, - DW_OP_breg16 = 0x80, - DW_OP_breg17 = 0x81, - DW_OP_breg18 = 0x82, - DW_OP_breg19 = 0x83, - DW_OP_breg20 = 0x84, - DW_OP_breg21 = 0x85, - DW_OP_breg22 = 0x86, - DW_OP_breg23 = 0x87, - DW_OP_breg24 = 0x88, - DW_OP_breg25 = 0x89, - DW_OP_breg26 = 0x8A, - DW_OP_breg27 = 0x8B, - DW_OP_breg28 = 0x8C, - DW_OP_breg29 = 0x8D, - DW_OP_breg30 = 0x8E, - DW_OP_breg31 = 0x8F, - DW_OP_regx = 0x90, - DW_OP_fbreg = 0x91, - DW_OP_bregx = 0x92, - DW_OP_piece = 0x93, - DW_OP_deref_size = 0x94, - DW_OP_xderef_size = 0x95, - DW_OP_nop = 0x96, - DW_OP_push_object_addres = 0x97, - DW_OP_call2 = 0x98, - DW_OP_call4 = 0x99, - DW_OP_call_ref = 0x9A, - DW_OP_lo_user = 0xE0, - DW_OP_APPLE_uninit = 0xF0, - DW_OP_hi_user = 0xFF -}; diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/README.md b/iphone/Maps/Pods/FirebaseCrashlytics/README.md deleted file mode 100644 index a396a214d9..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/README.md +++ /dev/null @@ -1,307 +0,0 @@ -[![Version](https://img.shields.io/cocoapods/v/Firebase.svg?style=flat)](https://cocoapods.org/pods/Firebase) -[![License](https://img.shields.io/cocoapods/l/Firebase.svg?style=flat)](https://cocoapods.org/pods/Firebase) -[![Platform](https://img.shields.io/cocoapods/p/Firebase.svg?style=flat)](https://cocoapods.org/pods/Firebase) - -[![Actions Status][gh-abtesting-badge]][gh-actions] -[![Actions Status][gh-auth-badge]][gh-actions] -[![Actions Status][gh-core-badge]][gh-actions] -[![Actions Status][gh-crashlytics-badge]][gh-actions] -[![Actions Status][gh-database-badge]][gh-actions] -[![Actions Status][gh-datatransport-badge]][gh-actions] -[![Actions Status][gh-dynamiclinks-badge]][gh-actions] -[![Actions Status][gh-firebasepod-badge]][gh-actions] -[![Actions Status][gh-firestore-badge]][gh-actions] -[![Actions Status][gh-functions-badge]][gh-actions] -[![Actions Status][gh-inappmessaging-badge]][gh-actions] -[![Actions Status][gh-interop-badge]][gh-actions] -[![Actions Status][gh-messaging-badge]][gh-actions] -[![Actions Status][gh-remoteconfig-badge]][gh-actions] -[![Actions Status][gh-storage-badge]][gh-actions] -[![Actions Status][gh-symbolcollision-badge]][gh-actions] -[![Actions Status][gh-zip-badge]][gh-actions] -[![Travis](https://travis-ci.org/firebase/firebase-ios-sdk.svg?branch=master)](https://travis-ci.org/firebase/firebase-ios-sdk) - -# Firebase Apple Open Source Development - -This repository contains all Apple platform Firebase SDK source except FirebaseAnalytics, -FirebasePerformance, and FirebaseML. - -The repository also includes GoogleUtilities source. The -[GoogleUtilities](GoogleUtilities/README.md) pod is -a set of utilities used by Firebase and other Google products. - -Firebase is an app development platform with tools to help you build, grow and -monetize your app. More information about Firebase can be found at -[https://firebase.google.com](https://firebase.google.com). - -## Installation - -See the three subsections for details about three different installation methods. -1. [Standard pod install](README.md#standard-pod-install) -1. [Installing from the GitHub repo](README.md#installing-from-github) -1. [Experimental Carthage](README.md#carthage-ios-only) - -### Standard pod install - -Go to -[https://firebase.google.com/docs/ios/setup](https://firebase.google.com/docs/ios/setup). - -### Installing from GitHub - -For releases starting with 5.0.0, the source for each release is also deployed -to CocoaPods master and available via standard -[CocoaPods Podfile syntax](https://guides.cocoapods.org/syntax/podfile.html#pod). - -These instructions can be used to access the Firebase repo at other branches, -tags, or commits. - -#### Background - -See -[the Podfile Syntax Reference](https://guides.cocoapods.org/syntax/podfile.html#pod) -for instructions and options about overriding pod source locations. - -#### Accessing Firebase Source Snapshots - -All of the official releases are tagged in this repo and available via CocoaPods. To access a local -source snapshot or unreleased branch, use Podfile directives like the following: - -To access FirebaseFirestore via a branch: -``` -pod 'FirebaseCore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master' -pod 'FirebaseFirestore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master' -``` - -To access FirebaseMessaging via a checked out version of the firebase-ios-sdk repo do: - -``` -pod 'FirebaseCore', :path => '/path/to/firebase-ios-sdk' -pod 'FirebaseMessaging', :path => '/path/to/firebase-ios-sdk' -``` - -### Carthage (iOS only) - -Instructions for the experimental Carthage distribution are at -[Carthage](Carthage.md). - -### Rome - -Instructions for installing binary frameworks via -[Rome](https://github.com/CocoaPods/Rome) are at [Rome](Rome.md). - -### Using Firebase from a Framework or a library - -[Using Firebase from a Framework or a library](docs/firebase_in_libraries.md) - -## Development - -To develop Firebase software in this repository, ensure that you have at least -the following software: - - * Xcode 10.1 (or later) - * CocoaPods 1.7.2 (or later) - * [CocoaPods generate](https://github.com/square/cocoapods-generate) - -For the pod that you want to develop: - -`pod gen Firebase{name here}.podspec --local-sources=./ --auto-open --platforms=ios` - -Note: If the CocoaPods cache is out of date, you may need to run -`pod repo update` before the `pod gen` command. - -Note: Set the `--platforms` option to `macos` or `tvos` to develop/test for -those platforms. Since 10.2, Xcode does not properly handle multi-platform -CocoaPods workspaces. - -Firestore has a self contained Xcode project. See -[Firestore/README.md](Firestore/README.md). - -### Development for Catalyst -* `pod gen {name here}.podspec --local-sources=./ --auto-open --platforms=ios` -* Check the Mac box in the App-iOS Build Settings -* Sign the App in the Settings Signing & Capabilities tab -* Click Pods in the Project Manager -* Add Signing to the iOS host app and unit test targets -* Select the Unit-unit scheme -* Run it to build and test - -### Adding a New Firebase Pod - -See [AddNewPod.md](AddNewPod.md). - -### Code Formatting - -To ensure that the code is formatted consistently, run the script -[./scripts/style.sh](https://github.com/firebase/firebase-ios-sdk/blob/master/scripts/style.sh) -before creating a PR. - -Travis will verify that any code changes are done in a style compliant way. Install -`clang-format` and `swiftformat`. -These commands will get the right versions: - -``` -brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/c6f1cbd/Formula/clang-format.rb -brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/c13eda8/Formula/swiftformat.rb -``` - -Note: if you already have a newer version of these installed you may need to -`brew switch` to this version. - -To update this section, find the versions of clang-format and swiftformat.rb to -match the versions in the CI failure logs -[here](https://github.com/Homebrew/homebrew-core/tree/master/Formula). - -### Running Unit Tests - -Select a scheme and press Command-u to build a component and run its unit tests. - -#### Viewing Code Coverage (Deprecated) - -First, make sure that [xcov](https://github.com/nakiostudio/xcov) is installed with `gem install xcov`. - -After running the `AllUnitTests_iOS` scheme in Xcode, execute -`xcov --workspace Firebase.xcworkspace --scheme AllUnitTests_iOS --output_directory xcov_output` -at Example/ in the terminal. This will aggregate the coverage, and you can run `open xcov_output/index.html` to see the results. - -### Running Sample Apps -In order to run the sample apps and integration tests, you'll need valid -`GoogleService-Info.plist` files for those samples. The Firebase Xcode project contains dummy plist -files without real values, but can be replaced with real plist files. To get your own -`GoogleService-Info.plist` files: - -1. Go to the [Firebase Console](https://console.firebase.google.com/) -2. Create a new Firebase project, if you don't already have one -3. For each sample app you want to test, create a new Firebase app with the sample app's bundle -identifier (e.g. `com.google.Database-Example`) -4. Download the resulting `GoogleService-Info.plist` and replace the appropriate dummy plist file -(e.g. in [Example/Database/App/](Example/Database/App/)); - -Some sample apps like Firebase Messaging ([Example/Messaging/App](Example/Messaging/App)) require -special Apple capabilities, and you will have to change the sample app to use a unique bundle -identifier that you can control in your own Apple Developer account. - -## Specific Component Instructions -See the sections below for any special instructions for those components. - -### Firebase Auth - -If you're doing specific Firebase Auth development, see -[the Auth Sample README](FirebaseAuth/Tests/Sample/README.md) for instructions about -building and running the FirebaseAuth pod along with various samples and tests. - -### Firebase Database - -The Firebase Database Integration tests can be run against a locally running Database Emulator -or against a production instance. - -To run against a local emulator instance, invoke `./scripts/run_database_emulator.sh start` before -running the integration test. - -To run against a production instance, provide a valid GoogleServices-Info.plist and copy it to -`Example/Database/App/GoogleService-Info.plist`. Your Security Rule must be set to -[public](https://firebase.google.com/docs/database/security/quickstart) while your tests are -running. - -### Firebase Storage - -To run the Storage Integration tests, follow the instructions in -[FIRStorageIntegrationTests.m](FirebaseStorage/Tests/Integration/FIRStorageIntegrationTests.m). - -#### Push Notifications - -Push notifications can only be delivered to specially provisioned App IDs in the developer portal. -In order to actually test receiving push notifications, you will need to: - -1. Change the bundle identifier of the sample app to something you own in your Apple Developer -account, and enable that App ID for push notifications. -2. You'll also need to -[upload your APNs Provider Authentication Key or certificate to the Firebase Console](https://firebase.google.com/docs/cloud-messaging/ios/certs) -at **Project Settings > Cloud Messaging > [Your Firebase App]**. -3. Ensure your iOS device is added to your Apple Developer portal as a test device. - -#### iOS Simulator - -The iOS Simulator cannot register for remote notifications, and will not receive push notifications. -In order to receive push notifications, you'll have to follow the steps above and run the app on a -physical device. - -## Community Supported Efforts - -We've seen an amazing amount of interest and contributions to improve the Firebase SDKs, and we are -very grateful! We'd like to empower as many developers as we can to be able to use Firebase and -participate in the Firebase community. - -### tvOS, macOS, watchOS and Catalyst -Thanks to contributions from the community, many of Firebase SDKs now compile, run unit tests, and work on -tvOS, macOS, watchOS and Catalyst. - -For tvOS, checkout the [Sample](Example/tvOSSample). -For watchOS, currently only Messaging and Storage (and their dependencies) have limited support. Checkout the -[Independent Watch App Sample](Example/watchOSSample). - -Keep in mind that macOS, tvOS, watchOS and Catalyst are not officially supported by Firebase, and this -repository is actively developed primarily for iOS. While we can catch basic unit test issues with -Travis, there may be some changes where the SDK no longer works as expected on macOS, tvOS or watchOS. If you -encounter this, please [file an issue](https://github.com/firebase/firebase-ios-sdk/issues). - -During app setup in the console, you may get to a step that mentions something like "Checking if the app -has communicated with our servers". This relies on Analytics and will not work on macOS/tvOS/watchOS/Catalyst. -**It's safe to ignore the message and continue**, the rest of the SDKs will work as expected. - -To install, add a subset of the following to the Podfile: - -``` -pod 'Firebase/ABTesting' # No watchOS support yet -pod 'Firebase/Auth' # No watchOS support yet -pod 'Firebase/Crashlytics' # No watchOS support yet -pod 'Firebase/Database' # No watchOS support yet -pod 'Firebase/Firestore' # No watchOS support yet -pod 'Firebase/Functions' # No watchOS support yet -pod 'Firebase/Messaging' -pod 'Firebase/RemoteConfig' # No watchOS support yet -pod 'Firebase/Storage' -``` - -#### Additional Catalyst Notes - -* FirebaseAuth and FirebaseMessaging require adding `Keychain Sharing Capability` -to Build Settings. -* FirebaseFirestore requires signing the -[gRPC Resource target](https://github.com/firebase/firebase-ios-sdk/issues/3500#issuecomment-518741681). - -## Roadmap - -See [Roadmap](ROADMAP.md) for more about the Firebase iOS SDK Open Source -plans and directions. - -## Contributing - -See [Contributing](CONTRIBUTING.md) for more information on contributing to the Firebase -iOS SDK. - -## License - -The contents of this repository is licensed under the -[Apache License, version 2.0](http://www.apache.org/licenses/LICENSE-2.0). - -Your use of Firebase is governed by the -[Terms of Service for Firebase Services](https://firebase.google.com/terms/). - -[gh-actions]: https://github.com/firebase/firebase-ios-sdk/actions -[gh-abtesting-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/abtesting/badge.svg -[gh-auth-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/auth/badge.svg -[gh-core-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/core/badge.svg -[gh-crashlytics-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/crashlytics/badge.svg -[gh-database-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/database/badge.svg -[gh-datatransport-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/datatransport/badge.svg -[gh-dynamiclinks-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/dynamiclinks/badge.svg -[gh-firebasepod-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/firebasepod/badge.svg -[gh-firestore-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/firestore/badge.svg -[gh-functions-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/functions/badge.svg -[gh-inappmessaging-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/inappmessaging/badge.svg -[gh-interop-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/interop/badge.svg -[gh-messaging-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/messaging/badge.svg -[gh-remoteconfig-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/remoteconfig/badge.svg -[gh-storage-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/storage/badge.svg -[gh-symbolcollision-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/symbolcollision/badge.svg -[gh-zip-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/zip/badge.svg diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/run b/iphone/Maps/Pods/FirebaseCrashlytics/run deleted file mode 100755 index 9316eeaf76..0000000000 --- a/iphone/Maps/Pods/FirebaseCrashlytics/run +++ /dev/null @@ -1,76 +0,0 @@ -#!/bin/sh - -# Copyright 2019 Google -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -# run -# -# This script is meant to be run as a Run Script in the "Build Phases" section -# of your Xcode project. It sends debug symbols to symbolicate stacktraces, -# sends build events to track versions, and onboards apps for Crashlytics. -# -# This script calls upload-symbols twice: -# -# 1) First it calls upload-symbols synchronously in "validation" mode. If the -# script finds issues with the build environment, it will report errors to Xcode. -# In validation mode it exits before doing any time consuming work. -# -# 2) Then it calls upload-symbols in the background to actually send the build -# event and upload symbols. It does this in the background so that it doesn't -# slow down your builds. If an error happens here, you won't see it in Xcode. -# -# You can find the output for the background execution in Console.app, by -# searching for "upload-symbols". -# -# If you want verbose output, you can pass the --debug flag to this script -# - -# Figure out where we're being called from -DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) - -# If the first argument is specified without a dash, treat it as the Fabric API -# Key and add it as an argument. -if [ -z "$1" ] || [[ $1 == -* ]]; then - API_KEY_ARG="" -else - API_KEY_ARG="-a $1"; shift -fi - -# Build up the arguments list, passing through any flags added after the -# API Key -ARGUMENTS="$API_KEY_ARG $@" -VALIDATE_ARGUMENTS="$ARGUMENTS --build-phase --validate" -UPLOAD_ARGUMENTS="$ARGUMENTS --build-phase" - -# Quote the path to handle folders with special characters -COMMAND_PATH="\"$DIR/upload-symbols\" " - -# Ensure params are as expected, run in sync mode to validate, -# and cause a build error if validation fails -eval $COMMAND_PATH$VALIDATE_ARGUMENTS -return_code=$? - -if [[ $return_code != 0 ]]; then - exit $return_code -fi - -# Verification passed, convert and upload cSYMs in the background to prevent -# build delays -# -# Note: Validation is performed again at this step before upload -# -# Note: Output can still be found in Console.app, by searching for -# "upload-symbols" -# -eval $COMMAND_PATH$UPLOAD_ARGUMENTS > /dev/null 2>&1 & diff --git a/iphone/Maps/Pods/FirebaseCrashlytics/upload-symbols b/iphone/Maps/Pods/FirebaseCrashlytics/upload-symbols deleted file mode 100755 index 76738d0c42..0000000000 Binary files a/iphone/Maps/Pods/FirebaseCrashlytics/upload-symbols and /dev/null differ diff --git a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Errors/FIRInstallationsErrorUtil.h b/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Errors/FIRInstallationsErrorUtil.h deleted file mode 100644 index 5bc21a11c9..0000000000 --- a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Errors/FIRInstallationsErrorUtil.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -#import - -@class FIRInstallationsHTTPError; - -NS_ASSUME_NONNULL_BEGIN - -void FIRInstallationsItemSetErrorToPointer(NSError *error, NSError **pointer); - -@interface FIRInstallationsErrorUtil : NSObject - -+ (NSError *)keyedArchiverErrorWithException:(NSException *)exception; -+ (NSError *)keyedArchiverErrorWithError:(NSError *)error; - -+ (NSError *)keychainErrorWithFunction:(NSString *)keychainFunction status:(OSStatus)status; - -+ (NSError *)installationItemNotFoundForAppID:(NSString *)appID appName:(NSString *)appName; - -+ (NSError *)JSONSerializationError:(NSError *)error; - -+ (NSError *)networkErrorWithError:(NSError *)error; - -+ (NSError *)FIDRegistrationErrorWithResponseMissingField:(NSString *)missingFieldName; - -+ (NSError *)corruptedIIDTokenData; - -+ (FIRInstallationsHTTPError *)APIErrorWithHTTPResponse:(NSHTTPURLResponse *)HTTPResponse - data:(nullable NSData *)data; -+ (BOOL)isAPIError:(NSError *)error withHTTPCode:(NSInteger)HTTPCode; - -/** - * Returns the passed error if it is already in the public domain or a new error with the passed - * error at `NSUnderlyingErrorKey`. - */ -+ (NSError *)publicDomainErrorWithError:(NSError *)error; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Errors/FIRInstallationsErrorUtil.m b/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Errors/FIRInstallationsErrorUtil.m deleted file mode 100644 index f85923acef..0000000000 --- a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Errors/FIRInstallationsErrorUtil.m +++ /dev/null @@ -1,124 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIRInstallationsErrorUtil.h" - -#import "FIRInstallationsHTTPError.h" - -NSString *const kFirebaseInstallationsErrorDomain = @"com.firebase.installations"; - -void FIRInstallationsItemSetErrorToPointer(NSError *error, NSError **pointer) { - if (pointer != NULL) { - *pointer = error; - } -} - -@implementation FIRInstallationsErrorUtil - -+ (NSError *)keyedArchiverErrorWithException:(NSException *)exception { - NSString *failureReason = [NSString - stringWithFormat:@"NSKeyedArchiver exception with name: %@, reason: %@, userInfo: %@", - exception.name, exception.reason, exception.userInfo]; - return [self installationsErrorWithCode:FIRInstallationsErrorCodeUnknown - failureReason:failureReason - underlyingError:nil]; -} - -+ (NSError *)keyedArchiverErrorWithError:(NSError *)error { - NSString *failureReason = [NSString stringWithFormat:@"NSKeyedArchiver error."]; - return [self installationsErrorWithCode:FIRInstallationsErrorCodeUnknown - failureReason:failureReason - underlyingError:error]; -} - -+ (NSError *)keychainErrorWithFunction:(NSString *)keychainFunction status:(OSStatus)status { - NSString *failureReason = [NSString stringWithFormat:@"%@ (%li)", keychainFunction, (long)status]; - return [self installationsErrorWithCode:FIRInstallationsErrorCodeKeychain - failureReason:failureReason - underlyingError:nil]; -} - -+ (NSError *)installationItemNotFoundForAppID:(NSString *)appID appName:(NSString *)appName { - NSString *failureReason = - [NSString stringWithFormat:@"Installation for appID %@ appName %@ not found", appID, appName]; - return [self installationsErrorWithCode:FIRInstallationsErrorCodeUnknown - failureReason:failureReason - underlyingError:nil]; -} - -+ (NSError *)corruptedIIDTokenData { - NSString *failureReason = - @"IID token data stored in Keychain is corrupted or in an incompatible format."; - return [self installationsErrorWithCode:FIRInstallationsErrorCodeUnknown - failureReason:failureReason - underlyingError:nil]; -} - -+ (FIRInstallationsHTTPError *)APIErrorWithHTTPResponse:(NSHTTPURLResponse *)HTTPResponse - data:(nullable NSData *)data { - return [[FIRInstallationsHTTPError alloc] initWithHTTPResponse:HTTPResponse data:data]; -} - -+ (BOOL)isAPIError:(NSError *)error withHTTPCode:(NSInteger)HTTPCode { - if (![error isKindOfClass:[FIRInstallationsHTTPError class]]) { - return NO; - } - - return [(FIRInstallationsHTTPError *)error HTTPResponse].statusCode == HTTPCode; -} - -+ (NSError *)JSONSerializationError:(NSError *)error { - NSString *failureReason = [NSString stringWithFormat:@"Failed to serialize JSON data."]; - return [self installationsErrorWithCode:FIRInstallationsErrorCodeUnknown - failureReason:failureReason - underlyingError:nil]; -} - -+ (NSError *)FIDRegistrationErrorWithResponseMissingField:(NSString *)missingFieldName { - NSString *failureReason = [NSString - stringWithFormat:@"A required response field with name %@ is missing", missingFieldName]; - return [self installationsErrorWithCode:FIRInstallationsErrorCodeUnknown - failureReason:failureReason - underlyingError:nil]; -} - -+ (NSError *)networkErrorWithError:(NSError *)error { - return [self installationsErrorWithCode:FIRInstallationsErrorCodeServerUnreachable - failureReason:@"Network connection error." - underlyingError:error]; -} - -+ (NSError *)publicDomainErrorWithError:(NSError *)error { - if ([error.domain isEqualToString:kFirebaseInstallationsErrorDomain]) { - return error; - } - - return [self installationsErrorWithCode:FIRInstallationsErrorCodeUnknown - failureReason:nil - underlyingError:error]; -} - -+ (NSError *)installationsErrorWithCode:(FIRInstallationsErrorCode)code - failureReason:(nullable NSString *)failureReason - underlyingError:(nullable NSError *)underlyingError { - NSMutableDictionary *userInfo = [NSMutableDictionary dictionary]; - userInfo[NSUnderlyingErrorKey] = underlyingError; - userInfo[NSLocalizedFailureReasonErrorKey] = failureReason; - - return [NSError errorWithDomain:kFirebaseInstallationsErrorDomain code:code userInfo:userInfo]; -} - -@end diff --git a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Errors/FIRInstallationsHTTPError.h b/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Errors/FIRInstallationsHTTPError.h deleted file mode 100644 index ad0eb8c134..0000000000 --- a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Errors/FIRInstallationsHTTPError.h +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** Represents an error caused by an unexpected API response. */ -@interface FIRInstallationsHTTPError : NSError - -@property(nonatomic, readonly) NSHTTPURLResponse *HTTPResponse; -@property(nonatomic, readonly, nonnull) NSData *data; - -- (instancetype)init NS_UNAVAILABLE; - -- (instancetype)initWithHTTPResponse:(NSHTTPURLResponse *)HTTPResponse data:(nullable NSData *)data; - -@end - -NS_ASSUME_NONNULL_END - -typedef NS_ENUM(NSInteger, FIRInstallationsHTTPCodes) { - FIRInstallationsHTTPCodesTooManyRequests = 429, - FIRInstallationsHTTPCodesServerInternalError = 500, -}; - -/** Possible response HTTP codes for `CreateInstallation` API request. */ -typedef NS_ENUM(NSInteger, FIRInstallationsRegistrationHTTPCode) { - FIRInstallationsRegistrationHTTPCodeSuccess = 201, - FIRInstallationsRegistrationHTTPCodeInvalidArgument = 400, - FIRInstallationsRegistrationHTTPCodeInvalidAPIKey = 401, - FIRInstallationsRegistrationHTTPCodeAPIKeyToProjectIDMismatch = 403, - FIRInstallationsRegistrationHTTPCodeProjectNotFound = 404, - FIRInstallationsRegistrationHTTPCodeTooManyRequests = 429, - FIRInstallationsRegistrationHTTPCodeServerInternalError = 500 -}; - -typedef NS_ENUM(NSInteger, FIRInstallationsAuthTokenHTTPCode) { - FIRInstallationsAuthTokenHTTPCodeInvalidAuthentication = 401, - FIRInstallationsAuthTokenHTTPCodeFIDNotFound = 404, -}; diff --git a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Errors/FIRInstallationsHTTPError.m b/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Errors/FIRInstallationsHTTPError.m deleted file mode 100644 index 05256ea114..0000000000 --- a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Errors/FIRInstallationsHTTPError.m +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIRInstallationsHTTPError.h" -#import "FIRInstallationsErrorUtil.h" - -@implementation FIRInstallationsHTTPError - -- (instancetype)initWithHTTPResponse:(NSHTTPURLResponse *)HTTPResponse - data:(nullable NSData *)data { - NSDictionary *userInfo = [FIRInstallationsHTTPError userInfoWithHTTPResponse:HTTPResponse - data:data]; - self = [super - initWithDomain:kFirebaseInstallationsErrorDomain - code:[FIRInstallationsHTTPError errorCodeWithHTTPCode:HTTPResponse.statusCode] - userInfo:userInfo]; - if (self) { - _HTTPResponse = HTTPResponse; - _data = data; - } - return self; -} - -+ (FIRInstallationsErrorCode)errorCodeWithHTTPCode:(NSInteger)HTTPCode { - return FIRInstallationsErrorCodeUnknown; -} - -+ (NSDictionary *)userInfoWithHTTPResponse:(NSHTTPURLResponse *)HTTPResponse - data:(nullable NSData *)data { - NSString *responseString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; - NSString *failureReason = - [NSString stringWithFormat:@"The server responded with an error: \n - URL: %@ \n - HTTP " - @"status code: %ld \n - Response body: %@", - HTTPResponse.URL, (long)HTTPResponse.statusCode, responseString]; - return @{NSLocalizedFailureReasonErrorKey : failureReason}; -} - -#pragma mark - NSCopying - -- (id)copyWithZone:(NSZone *)zone { - return [[FIRInstallationsHTTPError alloc] initWithHTTPResponse:self.HTTPResponse data:self.data]; -} - -#pragma mark - NSSecureCoding - -- (nullable instancetype)initWithCoder:(NSCoder *)coder { - NSHTTPURLResponse *HTTPResponse = [coder decodeObjectOfClass:[NSHTTPURLResponse class] - forKey:@"HTTPResponse"]; - if (!HTTPResponse) { - return nil; - } - NSData *data = [coder decodeObjectOfClass:[NSData class] forKey:@"data"]; - - return [self initWithHTTPResponse:HTTPResponse data:data]; -} - -- (void)encodeWithCoder:(NSCoder *)coder { - [coder encodeObject:self.HTTPResponse forKey:@"HTTPResponse"]; - [coder encodeObject:self.data forKey:@"data"]; -} - -+ (BOOL)supportsSecureCoding { - return YES; -} - -@end diff --git a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallations.m b/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallations.m deleted file mode 100644 index a8a33c97ba..0000000000 --- a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallations.m +++ /dev/null @@ -1,250 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIRInstallations.h" - -#if __has_include() -#import -#else -#import "FBLPromises.h" -#endif - -#import -#import -#import -#import -#import -#import - -#import "FIRInstallationsAuthTokenResultInternal.h" - -#import "FIRInstallationsErrorUtil.h" -#import "FIRInstallationsIDController.h" -#import "FIRInstallationsItem.h" -#import "FIRInstallationsLogger.h" -#import "FIRInstallationsStoredAuthToken.h" -#import "FIRInstallationsVersion.h" - -NS_ASSUME_NONNULL_BEGIN - -@protocol FIRInstallationsInstanceProvider -@end - -@interface FIRInstallations () -@property(nonatomic, readonly) FIROptions *appOptions; -@property(nonatomic, readonly) NSString *appName; - -@property(nonatomic, readonly) FIRInstallationsIDController *installationsIDController; - -@end - -@implementation FIRInstallations - -#pragma mark - Firebase component - -+ (void)load { - [FIRApp registerInternalLibrary:(Class)self - withName:@"fire-install" - withVersion:[NSString stringWithUTF8String:FIRInstallationsVersionStr]]; -} - -+ (nonnull NSArray *)componentsToRegister { - FIRComponentCreationBlock creationBlock = - ^id _Nullable(FIRComponentContainer *container, BOOL *isCacheable) { - *isCacheable = YES; - FIRInstallations *installations = [[FIRInstallations alloc] initWithApp:container.app]; - return installations; - }; - - FIRComponent *installationsProvider = - [FIRComponent componentWithProtocol:@protocol(FIRInstallationsInstanceProvider) - instantiationTiming:FIRInstantiationTimingAlwaysEager - dependencies:@[] - creationBlock:creationBlock]; - return @[ installationsProvider ]; -} - -- (instancetype)initWithApp:(FIRApp *)app { - return [self initWitAppOptions:app.options appName:app.name]; -} - -- (instancetype)initWitAppOptions:(FIROptions *)appOptions appName:(NSString *)appName { - FIRInstallationsIDController *IDController = - [[FIRInstallationsIDController alloc] initWithGoogleAppID:appOptions.googleAppID - appName:appName - APIKey:appOptions.APIKey - projectID:appOptions.projectID - GCMSenderID:appOptions.GCMSenderID - accessGroup:appOptions.appGroupID]; - - // `prefetchAuthToken` is disabled due to b/156746574. - return [self initWithAppOptions:appOptions - appName:appName - installationsIDController:IDController - prefetchAuthToken:NO]; -} - -/// The initializer is supposed to be used by tests to inject `installationsStore`. -- (instancetype)initWithAppOptions:(FIROptions *)appOptions - appName:(NSString *)appName - installationsIDController:(FIRInstallationsIDController *)installationsIDController - prefetchAuthToken:(BOOL)prefetchAuthToken { - self = [super init]; - if (self) { - [[self class] validateAppOptions:appOptions appName:appName]; - [[self class] assertCompatibleIIDVersion]; - - _appOptions = [appOptions copy]; - _appName = [appName copy]; - _installationsIDController = installationsIDController; - - // Pre-fetch auth token. - if (prefetchAuthToken) { - [self authTokenWithCompletion:^(FIRInstallationsAuthTokenResult *_Nullable tokenResult, - NSError *_Nullable error){ - }]; - } - } - return self; -} - -+ (void)validateAppOptions:(FIROptions *)appOptions appName:(NSString *)appName { - NSMutableArray *missingFields = [NSMutableArray array]; - if (appName.length < 1) { - [missingFields addObject:@"`FirebaseApp.name`"]; - } - if (appOptions.APIKey.length < 1) { - [missingFields addObject:@"`FirebaseOptions.APIKey`"]; - } - if (appOptions.googleAppID.length < 1) { - [missingFields addObject:@"`FirebaseOptions.googleAppID`"]; - } - - // TODO(#4692): Check for `appOptions.projectID.length < 1` only. - // We can use `GCMSenderID` instead of `projectID` temporary. - if (appOptions.projectID.length < 1 && appOptions.GCMSenderID.length < 1) { - [missingFields addObject:@"`FirebaseOptions.projectID`"]; - } - - if (missingFields.count > 0) { - [NSException - raise:kFirebaseInstallationsErrorDomain - format: - @"%@[%@] Could not configure Firebase Installations due to invalid FirebaseApp " - @"options. The following parameters are nil or empty: %@. If you use " - @"GoogleServices-Info.plist please download the most recent version from the Firebase " - @"Console. If you configure Firebase in code, please make sure you specify all " - @"required parameters.", - kFIRLoggerInstallations, kFIRInstallationsMessageCodeInvalidFirebaseAppOptions, - [missingFields componentsJoinedByString:@", "]]; - } -} - -#pragma mark - Public - -+ (FIRInstallations *)installations { - FIRApp *defaultApp = [FIRApp defaultApp]; - if (!defaultApp) { - [NSException raise:kFirebaseInstallationsErrorDomain - format:@"The default FirebaseApp instance must be configured before the default" - @"FirebaseApp instance can be initialized. One way to ensure that is to " - @"call `[FIRApp configure];` (`FirebaseApp.configure()` in Swift) in the App" - @" Delegate's `application:didFinishLaunchingWithOptions:` " - @"(`application(_:didFinishLaunchingWithOptions:)` in Swift)."]; - } - - return [self installationsWithApp:defaultApp]; -} - -+ (FIRInstallations *)installationsWithApp:(FIRApp *)app { - id installations = - FIR_COMPONENT(FIRInstallationsInstanceProvider, app.container); - return (FIRInstallations *)installations; -} - -- (void)installationIDWithCompletion:(FIRInstallationsIDHandler)completion { - [self.installationsIDController getInstallationItem] - .then(^id(FIRInstallationsItem *installation) { - completion(installation.firebaseInstallationID, nil); - return nil; - }) - .catch(^(NSError *error) { - completion(nil, [FIRInstallationsErrorUtil publicDomainErrorWithError:error]); - }); -} - -- (void)authTokenWithCompletion:(FIRInstallationsTokenHandler)completion { - [self authTokenForcingRefresh:NO completion:completion]; -} - -- (void)authTokenForcingRefresh:(BOOL)forceRefresh - completion:(FIRInstallationsTokenHandler)completion { - [self.installationsIDController getAuthTokenForcingRefresh:forceRefresh] - .then(^FIRInstallationsAuthTokenResult *(FIRInstallationsItem *installation) { - FIRInstallationsAuthTokenResult *result = [[FIRInstallationsAuthTokenResult alloc] - initWithToken:installation.authToken.token - expirationDate:installation.authToken.expirationDate]; - return result; - }) - .then(^id(FIRInstallationsAuthTokenResult *token) { - completion(token, nil); - return nil; - }) - .catch(^void(NSError *error) { - completion(nil, [FIRInstallationsErrorUtil publicDomainErrorWithError:error]); - }); -} - -- (void)deleteWithCompletion:(void (^)(NSError *__nullable error))completion { - [self.installationsIDController deleteInstallation] - .then(^id(id result) { - completion(nil); - return nil; - }) - .catch(^void(NSError *error) { - completion([FIRInstallationsErrorUtil publicDomainErrorWithError:error]); - }); -} - -#pragma mark - IID version compatibility - -+ (void)assertCompatibleIIDVersion { - // We use this flag to disable IID compatibility exception for unit tests. -#ifdef FIR_INSTALLATIONS_ALLOWS_INCOMPATIBLE_IID_VERSION - return; -#else - if (![self isIIDVersionCompatible]) { - [NSException raise:kFirebaseInstallationsErrorDomain - format:@"FirebaseInstallations will not work correctly with current version of " - @"Firebase Instance ID. Please update your Firebase Instance ID version."]; - } -#endif -} - -+ (BOOL)isIIDVersionCompatible { - Class IIDClass = NSClassFromString(@"FIRInstanceID"); - if (IIDClass == nil) { - // It is OK if there is no IID at all. - return YES; - } - // We expect a compatible version having the method `+[FIRInstanceID usesFIS]` defined. - BOOL isCompatibleVersion = [IIDClass respondsToSelector:NSSelectorFromString(@"usesFIS")]; - return isCompatibleVersion; -} - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsAuthTokenResult.m b/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsAuthTokenResult.m deleted file mode 100644 index 92e5fab197..0000000000 --- a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsAuthTokenResult.m +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIRInstallationsAuthTokenResultInternal.h" - -@implementation FIRInstallationsAuthTokenResult - -- (instancetype)initWithToken:(NSString *)token expirationDate:(NSDate *)expirationDate { - self = [super init]; - if (self) { - _authToken = [token copy]; - _expirationDate = expirationDate; - } - return self; -} - -@end diff --git a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsAuthTokenResultInternal.h b/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsAuthTokenResultInternal.h deleted file mode 100644 index 0c959dba55..0000000000 --- a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsAuthTokenResultInternal.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface FIRInstallationsAuthTokenResult (Internal) - -- (instancetype)initWithToken:(NSString *)token expirationDate:(NSDate *)expirationTime; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsItem.h b/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsItem.h deleted file mode 100644 index 95fdf835fe..0000000000 --- a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsItem.h +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -#import "FIRInstallationsStatus.h" - -@class FIRInstallationsStoredItem; -@class FIRInstallationsStoredAuthToken; -@class FIRInstallationsStoredIIDCheckin; - -NS_ASSUME_NONNULL_BEGIN - -/** - * The class represents the required installation ID and auth token data including possible states. - * The data is stored to Keychain via `FIRInstallationsStoredItem` which has only the storage - * relevant data and does not contain any logic. `FIRInstallationsItem` must be used on the logic - * level (not `FIRInstallationsStoredItem`). - */ -@interface FIRInstallationsItem : NSObject - -/// A `FirebaseApp` identifier. -@property(nonatomic, readonly) NSString *appID; -/// A `FirebaseApp` name. -@property(nonatomic, readonly) NSString *firebaseAppName; -/// A stable identifier that uniquely identifies the app instance. -@property(nonatomic, copy, nullable) NSString *firebaseInstallationID; -/// The `refreshToken` is used to authorize the auth token requests. -@property(nonatomic, copy, nullable) NSString *refreshToken; - -@property(nonatomic, nullable) FIRInstallationsStoredAuthToken *authToken; -@property(nonatomic, assign) FIRInstallationsStatus registrationStatus; - -/// Instance ID default token imported from IID store as a part of IID migration. -@property(nonatomic, nullable) NSString *IIDDefaultToken; - -- (instancetype)initWithAppID:(NSString *)appID firebaseAppName:(NSString *)firebaseAppName; - -/** - * Populates `FIRInstallationsItem` properties with data from `FIRInstallationsStoredItem`. - * @param item An instance of `FIRInstallationsStoredItem` to get data from. - */ -- (void)updateWithStoredItem:(FIRInstallationsStoredItem *)item; - -/** - * Creates a stored item with data from the object. - * @return Returns a `FIRInstallationsStoredItem` instance with the data from the object. - */ -- (FIRInstallationsStoredItem *)storedItem; - -/** - * The installation identifier. - * @return Returns a string uniquely identifying the installation. - */ -- (NSString *)identifier; - -/** - * The installation identifier. - * @param appID A `FirebaseApp` identifier. - * @param appName A `FirebaseApp` name. - * @return Returns a string uniquely identifying the installation. - */ -+ (NSString *)identifierWithAppID:(NSString *)appID appName:(NSString *)appName; - -/** - * Generate a new Firebase Installation Identifier. - * @return Returns a 22 characters long globally unique string created based on UUID. - */ -+ (NSString *)generateFID; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsItem.m b/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsItem.m deleted file mode 100644 index bc819bf8a0..0000000000 --- a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsItem.m +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIRInstallationsItem.h" - -#import "FIRInstallationsStoredAuthToken.h" -#import "FIRInstallationsStoredItem.h" - -@implementation FIRInstallationsItem - -- (instancetype)initWithAppID:(NSString *)appID firebaseAppName:(NSString *)firebaseAppName { - self = [super init]; - if (self) { - _appID = [appID copy]; - _firebaseAppName = [firebaseAppName copy]; - } - return self; -} - -- (nonnull id)copyWithZone:(nullable NSZone *)zone { - FIRInstallationsItem *clone = [[FIRInstallationsItem alloc] initWithAppID:self.appID - firebaseAppName:self.firebaseAppName]; - clone.firebaseInstallationID = [self.firebaseInstallationID copy]; - clone.refreshToken = [self.refreshToken copy]; - clone.authToken = [self.authToken copy]; - clone.registrationStatus = self.registrationStatus; - - return clone; -} - -- (void)updateWithStoredItem:(FIRInstallationsStoredItem *)item { - self.firebaseInstallationID = item.firebaseInstallationID; - self.refreshToken = item.refreshToken; - self.authToken = item.authToken; - self.registrationStatus = item.registrationStatus; - self.IIDDefaultToken = item.IIDDefaultToken; -} - -- (FIRInstallationsStoredItem *)storedItem { - FIRInstallationsStoredItem *storedItem = [[FIRInstallationsStoredItem alloc] init]; - storedItem.firebaseInstallationID = self.firebaseInstallationID; - storedItem.refreshToken = self.refreshToken; - storedItem.authToken = self.authToken; - storedItem.registrationStatus = self.registrationStatus; - storedItem.IIDDefaultToken = self.IIDDefaultToken; - return storedItem; -} - -- (nonnull NSString *)identifier { - return [[self class] identifierWithAppID:self.appID appName:self.firebaseAppName]; -} - -+ (NSString *)identifierWithAppID:(NSString *)appID appName:(NSString *)appName { - return [appID stringByAppendingString:appName]; -} - -+ (NSString *)generateFID { - NSUUID *UUID = [NSUUID UUID]; - uuid_t UUIDBytes; - [UUID getUUIDBytes:UUIDBytes]; - - NSUInteger UUIDLength = sizeof(uuid_t); - NSData *UUIDData = [NSData dataWithBytes:UUIDBytes length:UUIDLength]; - - uint8_t UUIDLast4Bits = UUIDBytes[UUIDLength - 1] & 0b00001111; - - // FID first 4 bits must be `0111`. The last 4 UUID bits will be cut later to form a proper FID. - // To keep 16 random bytes we copy these last 4 UUID to the FID 1st byte after `0111` prefix. - uint8_t FIDPrefix = 0b01110000 | UUIDLast4Bits; - NSMutableData *FIDData = [NSMutableData dataWithBytes:&FIDPrefix length:1]; - - [FIDData appendData:UUIDData]; - NSString *FIDString = [self base64URLEncodedStringWithData:FIDData]; - - // A valid FID has exactly 22 base64 characters, which is 132 bits, or 16.5 bytes. - // Our generated ID has 16 bytes UUID + 1 byte prefix which after encoding with base64 will become - // 23 characters plus 1 character for "=" padding. - - // Remove the 23rd character that was added because of the extra 4 bits at the - // end of our 17 byte data and the '=' padding. - return [FIDString substringWithRange:NSMakeRange(0, 22)]; -} - -+ (NSString *)base64URLEncodedStringWithData:(NSData *)data { - NSString *string = [data base64EncodedStringWithOptions:0]; - string = [string stringByReplacingOccurrencesOfString:@"/" withString:@"_"]; - string = [string stringByReplacingOccurrencesOfString:@"+" withString:@"-"]; - return string; -} - -@end diff --git a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsLogger.h b/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsLogger.h deleted file mode 100644 index baeadb2e3a..0000000000 --- a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsLogger.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -#import - -extern FIRLoggerService kFIRLoggerInstallations; - -// FIRInstallationsAPIService.m -extern NSString *const kFIRInstallationsMessageCodeSendAPIRequest; -extern NSString *const kFIRInstallationsMessageCodeAPIRequestNetworkError; -extern NSString *const kFIRInstallationsMessageCodeAPIRequestResponse; -extern NSString *const kFIRInstallationsMessageCodeUnexpectedAPIRequestResponse; -extern NSString *const kFIRInstallationsMessageCodeParsingAPIResponse; -extern NSString *const kFIRInstallationsMessageCodeAPIResponseParsingInstallationFailed; -extern NSString *const kFIRInstallationsMessageCodeAPIResponseParsingInstallationSucceed; -extern NSString *const kFIRInstallationsMessageCodeAPIResponseParsingAuthTokenFailed; -extern NSString *const kFIRInstallationsMessageCodeAPIResponseParsingAuthTokenSucceed; - -// FIRInstallationsIDController.m -extern NSString *const kFIRInstallationsMessageCodeNewGetInstallationOperationCreated; -extern NSString *const kFIRInstallationsMessageCodeNewGetAuthTokenOperationCreated; -extern NSString *const kFIRInstallationsMessageCodeNewDeleteInstallationOperationCreated; -extern NSString *const kFIRInstallationsMessageCodeInvalidFirebaseConfiguration; - -// FIRInstallationsStoredItem.m -extern NSString *const kFIRInstallationsMessageCodeInstallationCoderVersionMismatch; - -// FIRInstallationsStoredAuthToken.m -extern NSString *const kFIRInstallationsMessageCodeAuthTokenCoderVersionMismatch; - -// FIRInstallationsStoredIIDCheckin.m -extern NSString *const kFIRInstallationsMessageCodeIIDCheckinCoderVersionMismatch; -extern NSString *const kFIRInstallationsMessageCodeIIDCheckinFailedToDecode; - -// FIRInstallations.m -extern NSString *const kFIRInstallationsMessageCodeInvalidFirebaseAppOptions; diff --git a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsLogger.m b/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsLogger.m deleted file mode 100644 index c2bdf37f1e..0000000000 --- a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsLogger.m +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIRInstallationsLogger.h" - -FIRLoggerService kFIRLoggerInstallations = @"[Firebase/Installations]"; - -// FIRInstallationsAPIService.m -NSString *const kFIRInstallationsMessageCodeSendAPIRequest = @"I-FIS001001"; -NSString *const kFIRInstallationsMessageCodeAPIRequestNetworkError = @"I-FIS001002"; -NSString *const kFIRInstallationsMessageCodeAPIRequestResponse = @"I-FIS001003"; -NSString *const kFIRInstallationsMessageCodeUnexpectedAPIRequestResponse = @"I-FIS001004"; -NSString *const kFIRInstallationsMessageCodeParsingAPIResponse = @"I-FIS001005"; -NSString *const kFIRInstallationsMessageCodeAPIResponseParsingInstallationFailed = @"I-FIS001006"; -NSString *const kFIRInstallationsMessageCodeAPIResponseParsingInstallationSucceed = @"I-FIS001007"; -NSString *const kFIRInstallationsMessageCodeAPIResponseParsingAuthTokenFailed = @"I-FIS001008"; -NSString *const kFIRInstallationsMessageCodeAPIResponseParsingAuthTokenSucceed = @"I-FIS001009"; - -// FIRInstallationsIDController.m -NSString *const kFIRInstallationsMessageCodeNewGetInstallationOperationCreated = @"I-FIS002000"; -NSString *const kFIRInstallationsMessageCodeNewGetAuthTokenOperationCreated = @"I-FIS002001"; -NSString *const kFIRInstallationsMessageCodeNewDeleteInstallationOperationCreated = @"I-FIS002002"; -NSString *const kFIRInstallationsMessageCodeInvalidFirebaseConfiguration = @"I-FIS002003"; - -// FIRInstallationsStoredItem.m -NSString *const kFIRInstallationsMessageCodeInstallationCoderVersionMismatch = @"I-FIS003000"; - -// FIRInstallationsStoredAuthToken.m -NSString *const kFIRInstallationsMessageCodeAuthTokenCoderVersionMismatch = @"I-FIS004000"; - -// FIRInstallationsStoredIIDCheckin.m -NSString *const kFIRInstallationsMessageCodeIIDCheckinCoderVersionMismatch = @"I-FIS007000"; -NSString *const kFIRInstallationsMessageCodeIIDCheckinFailedToDecode = @"I-FIS007001"; - -// FIRInstallations.m -NSString *const kFIRInstallationsMessageCodeInvalidFirebaseAppOptions = @"I-FIS008000"; diff --git a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsVersion.m b/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsVersion.m deleted file mode 100644 index a75e3f5bea..0000000000 --- a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsVersion.m +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIRInstallationsVersion.h" - -// Convert the macro to a string -#define STR(x) STR_EXPAND(x) -#define STR_EXPAND(x) #x - -const char *const FIRInstallationsVersionStr = (const char *const)STR(FIRInstallations_LIB_VERSION); diff --git a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/IIDMigration/FIRInstallationsIIDStore.h b/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/IIDMigration/FIRInstallationsIIDStore.h deleted file mode 100644 index e2408caa7e..0000000000 --- a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/IIDMigration/FIRInstallationsIIDStore.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -@class FBLPromise; - -NS_ASSUME_NONNULL_BEGIN - -/** The class encapsulates a port of a piece FirebaseInstanceID logic required to migrate IID. */ -@interface FIRInstallationsIIDStore : NSObject - -/** - * Retrieves existing IID if present. - * @return Returns a promise that is resolved with IID string if IID has been found or rejected with - * an error otherwise. - */ -- (FBLPromise *)existingIID; - -/** - * Deletes existing IID if present. - * @return Returns a promise that is resolved with `[NSNull null]` if the IID was successfully. - * deleted or was not found. The promise is rejected otherwise. - */ -- (FBLPromise *)deleteExistingIID; - -#if TARGET_OS_OSX -/// If not `nil`, then only this keychain will be used to save and read data (see -/// `kSecMatchSearchList` and `kSecUseKeychain`. It is mostly intended to be used by unit tests. -@property(nonatomic, nullable) SecKeychainRef keychainRef; -#endif // TARGET_OSX - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/IIDMigration/FIRInstallationsIIDStore.m b/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/IIDMigration/FIRInstallationsIIDStore.m deleted file mode 100644 index 1f3a82afa8..0000000000 --- a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/IIDMigration/FIRInstallationsIIDStore.m +++ /dev/null @@ -1,236 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIRInstallationsIIDStore.h" - -#if __has_include() -#import -#else -#import "FBLPromises.h" -#endif - -#import -#import "FIRInstallationsErrorUtil.h" - -static NSString *const kFIRInstallationsIIDKeyPairPublicTagPrefix = - @"com.google.iid.keypair.public-"; -static NSString *const kFIRInstallationsIIDKeyPairPrivateTagPrefix = - @"com.google.iid.keypair.private-"; -static NSString *const kFIRInstallationsIIDCreationTimePlistKey = @"|S|cre"; - -@implementation FIRInstallationsIIDStore - -- (FBLPromise *)existingIID { - return [FBLPromise onQueue:dispatch_get_global_queue(QOS_CLASS_UTILITY, 0) - do:^id _Nullable { - if (![self hasPlistIIDFlag]) { - return nil; - } - - NSData *IIDPublicKeyData = [self IIDPublicKeyData]; - return [self IIDWithPublicKeyData:IIDPublicKeyData]; - }] - .validate(^BOOL(NSString *_Nullable IID) { - return IID.length > 0; - }); -} - -- (FBLPromise *)deleteExistingIID { - return [FBLPromise onQueue:dispatch_get_global_queue(QOS_CLASS_UTILITY, 0) - do:^id _Nullable { - NSError *error; - if (![self deleteIIDFlagFromPlist:&error]) { - return error; - } - - if (![self deleteIID:&error]) { - return error; - } - - return [NSNull null]; - }]; -} - -#pragma mark - IID decoding - -- (NSString *)IIDWithPublicKeyData:(NSData *)publicKeyData { - NSData *publicKeySHA1 = [self sha1WithData:publicKeyData]; - - const uint8_t *bytes = publicKeySHA1.bytes; - NSMutableData *identityData = [NSMutableData dataWithData:publicKeySHA1]; - - uint8_t b0 = bytes[0]; - // Take the first byte and make the initial four 7 by initially making the initial 4 bits 0 - // and then adding 0x70 to it. - b0 = 0x70 + (0xF & b0); - // failsafe should give you back b0 itself - b0 = (b0 & 0xFF); - [identityData replaceBytesInRange:NSMakeRange(0, 1) withBytes:&b0]; - NSData *data = [identityData subdataWithRange:NSMakeRange(0, 8 * sizeof(Byte))]; - return [self base64URLEncodedStringWithData:data]; -} - -- (NSData *)sha1WithData:(NSData *)data { - unsigned char output[CC_SHA1_DIGEST_LENGTH]; - unsigned int length = (unsigned int)[data length]; - - CC_SHA1(data.bytes, length, output); - return [NSData dataWithBytes:output length:CC_SHA1_DIGEST_LENGTH]; -} - -- (NSString *)base64URLEncodedStringWithData:(NSData *)data { - NSString *string = [data base64EncodedStringWithOptions:0]; - string = [string stringByReplacingOccurrencesOfString:@"/" withString:@"_"]; - string = [string stringByReplacingOccurrencesOfString:@"+" withString:@"-"]; - string = [string stringByReplacingOccurrencesOfString:@"=" withString:@""]; - return string; -} - -#pragma mark - Keychain - -- (NSData *)IIDPublicKeyData { - NSString *tag = [self keychainKeyTagWithPrefix:kFIRInstallationsIIDKeyPairPublicTagPrefix]; - NSDictionary *query = [self keyPairQueryWithTag:tag returnData:YES]; - - CFTypeRef keyRef = NULL; - OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)query, (CFTypeRef *)&keyRef); - - if (status != noErr) { - if (keyRef) { - CFRelease(keyRef); - } - return nil; - } - - return (__bridge NSData *)keyRef; -} - -- (BOOL)deleteIID:(NSError **)outError { - if (![self deleteKeychainKeyWithTagPrefix:kFIRInstallationsIIDKeyPairPublicTagPrefix - error:outError]) { - return NO; - } - - if (![self deleteKeychainKeyWithTagPrefix:kFIRInstallationsIIDKeyPairPrivateTagPrefix - error:outError]) { - return NO; - } - - return YES; -} - -- (BOOL)deleteKeychainKeyWithTagPrefix:(NSString *)tagPrefix error:(NSError **)outError { - NSString *keyTag = [self keychainKeyTagWithPrefix:kFIRInstallationsIIDKeyPairPublicTagPrefix]; - NSDictionary *keyQuery = [self keyPairQueryWithTag:keyTag returnData:NO]; - - OSStatus status = SecItemDelete((__bridge CFDictionaryRef)keyQuery); - - // When item is not found, it should NOT be considered as an error. The operation should - // continue. - if (status != noErr && status != errSecItemNotFound) { - FIRInstallationsItemSetErrorToPointer( - [FIRInstallationsErrorUtil keychainErrorWithFunction:@"SecItemDelete" status:status], - outError); - return NO; - } - - return YES; -} - -- (NSDictionary *)keyPairQueryWithTag:(NSString *)tag returnData:(BOOL)shouldReturnData { - NSMutableDictionary *query = [NSMutableDictionary dictionary]; - NSData *tagData = [tag dataUsingEncoding:NSUTF8StringEncoding]; - - query[(__bridge id)kSecClass] = (__bridge id)kSecClassKey; - query[(__bridge id)kSecAttrApplicationTag] = tagData; - query[(__bridge id)kSecAttrKeyType] = (__bridge id)kSecAttrKeyTypeRSA; - if (shouldReturnData) { - query[(__bridge id)kSecReturnData] = @(YES); - } - -#if TARGET_OS_OSX - if (self.keychainRef) { - query[(__bridge NSString *)kSecMatchSearchList] = @[ (__bridge id)(self.keychainRef) ]; - } -#endif // TARGET_OSX - - return query; -} - -- (NSString *)keychainKeyTagWithPrefix:(NSString *)prefix { - NSString *mainAppBundleID = [[NSBundle mainBundle] bundleIdentifier]; - if (mainAppBundleID.length == 0) { - return nil; - } - return [NSString stringWithFormat:@"%@%@", prefix, mainAppBundleID]; -} - -- (NSString *)mainbundleIdentifier { - NSString *bundleIdentifier = [[NSBundle mainBundle] bundleIdentifier]; - if (!bundleIdentifier.length) { - return nil; - } - return bundleIdentifier; -} - -#pragma mark - Plist - -- (BOOL)deleteIIDFlagFromPlist:(NSError **)outError { - NSString *path = [self plistPath]; - if (![[NSFileManager defaultManager] fileExistsAtPath:path]) { - return YES; - } - - NSMutableDictionary *plistContent = [[NSMutableDictionary alloc] initWithContentsOfFile:path]; - plistContent[kFIRInstallationsIIDCreationTimePlistKey] = nil; - - if (@available(macOS 10.13, iOS 11.0, tvOS 11.0, *)) { - return [plistContent writeToURL:[NSURL fileURLWithPath:path] error:outError]; - } - - return [plistContent writeToFile:path atomically:YES]; -} - -- (BOOL)hasPlistIIDFlag { - NSString *path = [self plistPath]; - if (![[NSFileManager defaultManager] fileExistsAtPath:path]) { - return NO; - } - - NSDictionary *plistContent = [[NSDictionary alloc] initWithContentsOfFile:path]; - return plistContent[kFIRInstallationsIIDCreationTimePlistKey] != nil; -} - -- (NSString *)plistPath { - NSString *plistNameWithExtension = @"com.google.iid-keypair.plist"; - NSString *_subDirectoryName = @"Google/FirebaseInstanceID"; - - NSArray *directoryPaths = - NSSearchPathForDirectoriesInDomains([self supportedDirectory], NSUserDomainMask, YES); - NSArray *components = @[ directoryPaths.lastObject, _subDirectoryName, plistNameWithExtension ]; - - return [NSString pathWithComponents:components]; -} - -- (NSSearchPathDirectory)supportedDirectory { -#if TARGET_OS_TV - return NSCachesDirectory; -#else - return NSApplicationSupportDirectory; -#endif -} - -@end diff --git a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/IIDMigration/FIRInstallationsIIDTokenStore.h b/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/IIDMigration/FIRInstallationsIIDTokenStore.h deleted file mode 100644 index ed98e3d70e..0000000000 --- a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/IIDMigration/FIRInstallationsIIDTokenStore.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -@class FBLPromise; - -NS_ASSUME_NONNULL_BEGIN - -/** - * The class reads a default IID token from IID store if available. - */ -@interface FIRInstallationsIIDTokenStore : NSObject - -- (instancetype)init NS_UNAVAILABLE; - -- (instancetype)initWithGCMSenderID:(NSString *)GCMSenderID; - -- (FBLPromise *)existingIIDDefaultToken; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/IIDMigration/FIRInstallationsIIDTokenStore.m b/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/IIDMigration/FIRInstallationsIIDTokenStore.m deleted file mode 100644 index b2b69313eb..0000000000 --- a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/IIDMigration/FIRInstallationsIIDTokenStore.m +++ /dev/null @@ -1,158 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIRInstallationsIIDTokenStore.h" - -#if __has_include() -#import -#else -#import "FBLPromises.h" -#endif - -#import - -#import "FIRInstallationsErrorUtil.h" - -static NSString *const kFIRInstallationsIIDTokenKeychainId = @"com.google.iid-tokens"; - -@interface FIRInstallationsIIDTokenInfo : NSObject -@property(nonatomic, nullable, copy) NSString *token; -@end - -@implementation FIRInstallationsIIDTokenInfo - -+ (BOOL)supportsSecureCoding { - return YES; -} - -- (void)encodeWithCoder:(nonnull NSCoder *)coder { -} - -- (nullable instancetype)initWithCoder:(nonnull NSCoder *)coder { - self = [super init]; - if (self) { - _token = [coder decodeObjectOfClass:[NSString class] forKey:@"token"]; - } - return self; -} - -@end - -@interface FIRInstallationsIIDTokenStore () -@property(nonatomic, readonly) NSString *GCMSenderID; -@end - -@implementation FIRInstallationsIIDTokenStore - -- (instancetype)initWithGCMSenderID:(NSString *)GCMSenderID { - self = [super init]; - if (self) { - _GCMSenderID = GCMSenderID; - } - return self; -} - -- (FBLPromise *)existingIIDDefaultToken { - return [[FBLPromise onQueue:dispatch_get_global_queue(QOS_CLASS_UTILITY, 0) - do:^id _Nullable { - return [self IIDDefaultTokenData]; - }] onQueue:dispatch_get_global_queue(QOS_CLASS_UTILITY, 0) - then:^id _Nullable(NSData *_Nullable keychainData) { - return [self IIDCheckinWithData:keychainData]; - }]; -} - -- (FBLPromise *)IIDCheckinWithData:(NSData *)data { - FBLPromise *resultPromise = [FBLPromise pendingPromise]; - - NSError *archiverError; - NSKeyedUnarchiver *unarchiver; - if (@available(iOS 11.0, tvOS 11.0, macOS 10.13, *)) { - unarchiver = [[NSKeyedUnarchiver alloc] initForReadingFromData:data error:&archiverError]; - } else { - @try { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data]; -#pragma clang diagnostic pop - } @catch (NSException *exception) { - archiverError = [FIRInstallationsErrorUtil keyedArchiverErrorWithException:exception]; - } - } - - if (!unarchiver) { - NSError *error = archiverError ?: [FIRInstallationsErrorUtil corruptedIIDTokenData]; - [resultPromise reject:error]; - return resultPromise; - } - - [unarchiver setClass:[FIRInstallationsIIDTokenInfo class] forClassName:@"FIRInstanceIDTokenInfo"]; - FIRInstallationsIIDTokenInfo *IIDTokenInfo = - [unarchiver decodeObjectOfClass:[FIRInstallationsIIDTokenInfo class] - forKey:NSKeyedArchiveRootObjectKey]; - - if (IIDTokenInfo.token.length < 1) { - [resultPromise reject:[FIRInstallationsErrorUtil corruptedIIDTokenData]]; - return resultPromise; - } - - [resultPromise fulfill:IIDTokenInfo.token]; - - return resultPromise; -} - -- (FBLPromise *)IIDDefaultTokenData { - FBLPromise *resultPromise = [FBLPromise pendingPromise]; - - NSMutableDictionary *keychainQuery = [self IIDDefaultTokenDataKeychainQuery]; - NSError *error; - NSData *data = [GULKeychainUtils getItemWithQuery:keychainQuery error:&error]; - - if (data) { - [resultPromise fulfill:data]; - return resultPromise; - } else { - NSError *outError = error ?: [FIRInstallationsErrorUtil corruptedIIDTokenData]; - [resultPromise reject:outError]; - return resultPromise; - } -} - -- (NSMutableDictionary *)IIDDefaultTokenDataKeychainQuery { - NSDictionary *query = @{(__bridge id)kSecClass : (__bridge id)kSecClassGenericPassword}; - - NSMutableDictionary *finalQuery = [NSMutableDictionary dictionaryWithDictionary:query]; - finalQuery[(__bridge NSString *)kSecAttrGeneric] = kFIRInstallationsIIDTokenKeychainId; - - NSString *account = [self IIDAppIdentifier]; - if ([account length]) { - finalQuery[(__bridge NSString *)kSecAttrAccount] = account; - } - - finalQuery[(__bridge NSString *)kSecAttrService] = - [self serviceKeyForAuthorizedEntity:self.GCMSenderID scope:@"*"]; - return finalQuery; -} - -- (NSString *)IIDAppIdentifier { - return [[NSBundle mainBundle] bundleIdentifier] ?: @""; -} - -- (NSString *)serviceKeyForAuthorizedEntity:(NSString *)authorizedEntity scope:(NSString *)scope { - return [NSString stringWithFormat:@"%@:%@", authorizedEntity, scope]; -} - -@end diff --git a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsAPI/FIRInstallationsAPIService.h b/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsAPI/FIRInstallationsAPIService.h deleted file mode 100644 index b45475d1a1..0000000000 --- a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsAPI/FIRInstallationsAPIService.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -@class FBLPromise; -@class FIRInstallationsItem; - -NS_ASSUME_NONNULL_BEGIN - -FOUNDATION_EXPORT NSString *const kFIRInstallationsUserAgentKey; - -FOUNDATION_EXPORT NSString *const kFIRInstallationsHeartbeatKey; - -/** - * The class is responsible for interacting with HTTP REST API for Installations. - */ -@interface FIRInstallationsAPIService : NSObject - -/** - * The default initializer. - * @param APIKey The Firebase project API key (see `FIROptions.APIKey`). - * @param projectID The Firebase project ID (see `FIROptions.projectID`). - */ -- (instancetype)initWithAPIKey:(NSString *)APIKey projectID:(NSString *)projectID; - -/** - * Sends a request to register a new FID to get auth and refresh tokens. - * @param installation The `FIRInstallationsItem` instance with the FID to register. - * @return A promise that is resolved with a new `FIRInstallationsItem` instance with valid tokens. - * It is rejected with an error in case of a failure. - */ -- (FBLPromise *)registerInstallation:(FIRInstallationsItem *)installation; - -- (FBLPromise *)refreshAuthTokenForInstallation: - (FIRInstallationsItem *)installation; - -/** - * Sends a request to delete the installation, related auth tokens and all related data from the - * server. - * @param installation The installation to delete. - * @return Returns a promise that is resolved with the passed installation on successful deletion or - * is rejected with an error otherwise. - */ -- (FBLPromise *)deleteInstallation:(FIRInstallationsItem *)installation; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsAPI/FIRInstallationsAPIService.m b/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsAPI/FIRInstallationsAPIService.m deleted file mode 100644 index 6e74622031..0000000000 --- a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsAPI/FIRInstallationsAPIService.m +++ /dev/null @@ -1,362 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIRInstallationsAPIService.h" - -#import - -#if __has_include() -#import -#else -#import "FBLPromises.h" -#endif - -#import -#import -#import "FIRInstallationsErrorUtil.h" -#import "FIRInstallationsItem+RegisterInstallationAPI.h" -#import "FIRInstallationsLogger.h" - -NSString *const kFIRInstallationsAPIBaseURL = @"https://firebaseinstallations.googleapis.com"; -NSString *const kFIRInstallationsAPIKey = @"X-Goog-Api-Key"; -NSString *const kFIRInstallationsBundleId = @"X-Ios-Bundle-Identifier"; -NSString *const kFIRInstallationsIIDMigrationAuthHeader = @"x-goog-fis-ios-iid-migration-auth"; -NSString *const kFIRInstallationsHeartbeatKey = @"X-firebase-client-log-type"; -NSString *const kFIRInstallationsHeartbeatTag = @"fire-installations"; -NSString *const kFIRInstallationsUserAgentKey = @"X-firebase-client"; - -NS_ASSUME_NONNULL_BEGIN - -@interface FIRInstallationsURLSessionResponse : NSObject -@property(nonatomic) NSHTTPURLResponse *HTTPResponse; -@property(nonatomic) NSData *data; - -- (instancetype)initWithResponse:(NSHTTPURLResponse *)response data:(nullable NSData *)data; -@end - -@implementation FIRInstallationsURLSessionResponse - -- (instancetype)initWithResponse:(NSHTTPURLResponse *)response data:(nullable NSData *)data { - self = [super init]; - if (self) { - _HTTPResponse = response; - _data = data ?: [NSData data]; - } - return self; -} - -@end - -@interface FIRInstallationsAPIService () -@property(nonatomic, readonly) NSURLSession *URLSession; -@property(nonatomic, readonly) NSString *APIKey; -@property(nonatomic, readonly) NSString *projectID; -@end - -NS_ASSUME_NONNULL_END - -@implementation FIRInstallationsAPIService - -- (instancetype)initWithAPIKey:(NSString *)APIKey projectID:(NSString *)projectID { - NSURLSession *URLSession = [NSURLSession - sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]]; - return [self initWithURLSession:URLSession APIKey:APIKey projectID:projectID]; -} - -/// The initializer for tests. -- (instancetype)initWithURLSession:(NSURLSession *)URLSession - APIKey:(NSString *)APIKey - projectID:(NSString *)projectID { - self = [super init]; - if (self) { - _URLSession = URLSession; - _APIKey = [APIKey copy]; - _projectID = [projectID copy]; - } - return self; -} - -#pragma mark - Public - -- (FBLPromise *)registerInstallation:(FIRInstallationsItem *)installation { - return [self registerRequestWithInstallation:installation] - .then(^id _Nullable(NSURLRequest *_Nullable request) { - return [self sendURLRequest:request]; - }) - .then(^id _Nullable(FIRInstallationsURLSessionResponse *response) { - return [self registeredInstallationWithInstallation:installation serverResponse:response]; - }); -} - -- (FBLPromise *)refreshAuthTokenForInstallation: - (FIRInstallationsItem *)installation { - return [self authTokenRequestWithInstallation:installation] - .then(^id _Nullable(NSURLRequest *_Nullable request) { - return [self sendURLRequest:request]; - }) - .then(^FBLPromise *( - FIRInstallationsURLSessionResponse *response) { - return [self authTokenWithServerResponse:response]; - }) - .then(^FIRInstallationsItem *(FIRInstallationsStoredAuthToken *authToken) { - FIRInstallationsItem *updatedInstallation = [installation copy]; - updatedInstallation.authToken = authToken; - return updatedInstallation; - }); -} - -- (FBLPromise *)deleteInstallation:(FIRInstallationsItem *)installation { - return [self deleteInstallationRequestWithInstallation:installation] - .then(^id _Nullable(NSURLRequest *_Nullable request) { - return [self sendURLRequest:request]; - }) - .then(^id _Nullable(FIRInstallationsURLSessionResponse *_Nullable value) { - // Return the original installation on success. - return installation; - }); -} - -#pragma mark - Register Installation - -- (FBLPromise *)registerRequestWithInstallation: - (FIRInstallationsItem *)installation { - NSString *URLString = [NSString stringWithFormat:@"%@/v1/projects/%@/installations/", - kFIRInstallationsAPIBaseURL, self.projectID]; - NSURL *URL = [NSURL URLWithString:URLString]; - - NSDictionary *bodyDict = @{ - @"fid" : installation.firebaseInstallationID, - @"authVersion" : @"FIS_v2", - @"appId" : installation.appID, - @"sdkVersion" : [self SDKVersion] - }; - - NSDictionary *headers; - if (installation.IIDDefaultToken) { - headers = @{kFIRInstallationsIIDMigrationAuthHeader : installation.IIDDefaultToken}; - } - - return [self requestWithURL:URL - HTTPMethod:@"POST" - bodyDict:bodyDict - refreshToken:nil - additionalHeaders:headers]; -} - -- (FBLPromise *) - registeredInstallationWithInstallation:(FIRInstallationsItem *)installation - serverResponse:(FIRInstallationsURLSessionResponse *)response { - return [FBLPromise do:^id { - FIRLogDebug(kFIRLoggerInstallations, kFIRInstallationsMessageCodeParsingAPIResponse, - @"Parsing server response for %@.", response.HTTPResponse.URL); - NSError *error; - FIRInstallationsItem *registeredInstallation = - [installation registeredInstallationWithJSONData:response.data - date:[NSDate date] - error:&error]; - if (registeredInstallation == nil) { - FIRLogDebug(kFIRLoggerInstallations, - kFIRInstallationsMessageCodeAPIResponseParsingInstallationFailed, - @"Failed to parse FIRInstallationsItem: %@.", error); - return error; - } - - FIRLogDebug(kFIRLoggerInstallations, - kFIRInstallationsMessageCodeAPIResponseParsingInstallationSucceed, - @"FIRInstallationsItem parsed successfully."); - return registeredInstallation; - }]; -} - -#pragma mark - Auth token - -- (FBLPromise *)authTokenRequestWithInstallation: - (FIRInstallationsItem *)installation { - NSString *URLString = - [NSString stringWithFormat:@"%@/v1/projects/%@/installations/%@/authTokens:generate", - kFIRInstallationsAPIBaseURL, self.projectID, - installation.firebaseInstallationID]; - NSURL *URL = [NSURL URLWithString:URLString]; - - NSDictionary *bodyDict = @{@"installation" : @{@"sdkVersion" : [self SDKVersion]}}; - return [self requestWithURL:URL - HTTPMethod:@"POST" - bodyDict:bodyDict - refreshToken:installation.refreshToken]; -} - -- (FBLPromise *)authTokenWithServerResponse: - (FIRInstallationsURLSessionResponse *)response { - return [FBLPromise do:^id { - FIRLogDebug(kFIRLoggerInstallations, kFIRInstallationsMessageCodeParsingAPIResponse, - @"Parsing server response for %@.", response.HTTPResponse.URL); - NSError *error; - FIRInstallationsStoredAuthToken *token = - [FIRInstallationsItem authTokenWithGenerateTokenAPIJSONData:response.data - date:[NSDate date] - error:&error]; - if (token == nil) { - FIRLogDebug(kFIRLoggerInstallations, - kFIRInstallationsMessageCodeAPIResponseParsingAuthTokenFailed, - @"Failed to parse FIRInstallationsStoredAuthToken: %@.", error); - return error; - } - - FIRLogDebug(kFIRLoggerInstallations, - kFIRInstallationsMessageCodeAPIResponseParsingAuthTokenSucceed, - @"FIRInstallationsStoredAuthToken parsed successfully."); - return token; - }]; -} - -#pragma mark - Delete Installation - -- (FBLPromise *)deleteInstallationRequestWithInstallation: - (FIRInstallationsItem *)installation { - NSString *URLString = [NSString stringWithFormat:@"%@/v1/projects/%@/installations/%@/", - kFIRInstallationsAPIBaseURL, self.projectID, - installation.firebaseInstallationID]; - NSURL *URL = [NSURL URLWithString:URLString]; - - return [self requestWithURL:URL - HTTPMethod:@"DELETE" - bodyDict:@{} - refreshToken:installation.refreshToken]; -} - -#pragma mark - URL Request -- (FBLPromise *)requestWithURL:(NSURL *)requestURL - HTTPMethod:(NSString *)HTTPMethod - bodyDict:(NSDictionary *)bodyDict - refreshToken:(nullable NSString *)refreshToken { - return [self requestWithURL:requestURL - HTTPMethod:HTTPMethod - bodyDict:bodyDict - refreshToken:refreshToken - additionalHeaders:nil]; -} - -- (FBLPromise *)requestWithURL:(NSURL *)requestURL - HTTPMethod:(NSString *)HTTPMethod - bodyDict:(NSDictionary *)bodyDict - refreshToken:(nullable NSString *)refreshToken - additionalHeaders:(nullable NSDictionary *) - additionalHeaders { - return [FBLPromise - onQueue:dispatch_get_global_queue(QOS_CLASS_UTILITY, 0) - do:^id _Nullable { - __block NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:requestURL]; - request.HTTPMethod = HTTPMethod; - NSString *bundleIdentifier = [[NSBundle mainBundle] bundleIdentifier]; - [request addValue:self.APIKey forHTTPHeaderField:kFIRInstallationsAPIKey]; - [request addValue:bundleIdentifier forHTTPHeaderField:kFIRInstallationsBundleId]; - [self setJSONHTTPBody:bodyDict forRequest:request]; - if (refreshToken) { - NSString *authHeader = [NSString stringWithFormat:@"FIS_v2 %@", refreshToken]; - [request setValue:authHeader forHTTPHeaderField:@"Authorization"]; - } - // User agent Header. - [request setValue:[FIRApp firebaseUserAgent] - forHTTPHeaderField:kFIRInstallationsUserAgentKey]; - // Heartbeat Header. - [request setValue:@([FIRHeartbeatInfo - heartbeatCodeForTag:kFIRInstallationsHeartbeatTag]) - .stringValue - forHTTPHeaderField:kFIRInstallationsHeartbeatKey]; - [additionalHeaders - enumerateKeysAndObjectsUsingBlock:^(NSString *_Nonnull key, NSString *_Nonnull obj, - BOOL *_Nonnull stop) { - [request setValue:obj forHTTPHeaderField:key]; - }]; - - return [request copy]; - }]; -} - -- (FBLPromise *)URLRequestPromise:(NSURLRequest *)request { - return [[FBLPromise async:^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock reject) { - FIRLogDebug(kFIRLoggerInstallations, kFIRInstallationsMessageCodeSendAPIRequest, - @"Sending request: %@, body:%@, headers: %@.", request, - [[NSString alloc] initWithData:request.HTTPBody encoding:NSUTF8StringEncoding], - request.allHTTPHeaderFields); - [[self.URLSession - dataTaskWithRequest:request - completionHandler:^(NSData *_Nullable data, NSURLResponse *_Nullable response, - NSError *_Nullable error) { - if (error) { - FIRLogDebug(kFIRLoggerInstallations, - kFIRInstallationsMessageCodeAPIRequestNetworkError, - @"Request failed: %@, error: %@.", request, error); - reject(error); - } else { - FIRLogDebug(kFIRLoggerInstallations, kFIRInstallationsMessageCodeAPIRequestResponse, - @"Request response received: %@, error: %@, body: %@.", request, error, - [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]); - fulfill([[FIRInstallationsURLSessionResponse alloc] - initWithResponse:(NSHTTPURLResponse *)response - data:data]); - } - }] resume]; - }] then:^id _Nullable(FIRInstallationsURLSessionResponse *response) { - return [self validateHTTPResponseStatusCode:response]; - }]; -} - -- (FBLPromise *)validateHTTPResponseStatusCode: - (FIRInstallationsURLSessionResponse *)response { - NSInteger statusCode = response.HTTPResponse.statusCode; - return [FBLPromise do:^id _Nullable { - if (statusCode < 200 || statusCode >= 300) { - FIRLogDebug(kFIRLoggerInstallations, kFIRInstallationsMessageCodeUnexpectedAPIRequestResponse, - @"Unexpected API response: %@, body: %@.", response.HTTPResponse, - [[NSString alloc] initWithData:response.data encoding:NSUTF8StringEncoding]); - return [FIRInstallationsErrorUtil APIErrorWithHTTPResponse:response.HTTPResponse - data:response.data]; - } - return response; - }]; -} - -- (FBLPromise *)sendURLRequest:(NSURLRequest *)request { - return [FBLPromise attempts:1 - delay:1 - condition:^BOOL(NSInteger remainingAttempts, NSError *_Nonnull error) { - return [FIRInstallationsErrorUtil isAPIError:error withHTTPCode:500]; - } - retry:^id _Nullable { - return [self URLRequestPromise:request]; - }]; -} - -- (NSString *)SDKVersion { - return [NSString stringWithFormat:@"i:%s", FIRInstallationsVersionStr]; -} - -#pragma mark - JSON - -- (void)setJSONHTTPBody:(NSDictionary *)body - forRequest:(NSMutableURLRequest *)request { - [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; - - NSError *error; - NSData *JSONData = [NSJSONSerialization dataWithJSONObject:body options:0 error:&error]; - if (JSONData == nil) { - // TODO: Log or return an error. - } - request.HTTPBody = JSONData; -} - -@end diff --git a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsAPI/FIRInstallationsItem+RegisterInstallationAPI.h b/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsAPI/FIRInstallationsItem+RegisterInstallationAPI.h deleted file mode 100644 index cc6b543201..0000000000 --- a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsAPI/FIRInstallationsItem+RegisterInstallationAPI.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIRInstallationsItem.h" - -@class FIRInstallationsStoredAuthToken; - -NS_ASSUME_NONNULL_BEGIN - -@interface FIRInstallationsItem (RegisterInstallationAPI) - -/** - * Parses and validates the Register Installation API response and returns a corresponding - * `FIRInstallationsItem` instance on success. - * @param JSONData The data with JSON encoded API response. - * @param date The Auth Token expiration date will be calculated as `date` + - * `response.authToken.expiresIn`. For most of the cases `[NSDate date]` should be passed there. A - * different value may be passed e.g. for unit tests. - * @param outError A pointer to assign a specific `NSError` instance in case of failure. No error is - * assigned in case of success. - * @return Returns a new `FIRInstallationsItem` instance in the success case or `nil` otherwise. - */ -- (nullable FIRInstallationsItem *)registeredInstallationWithJSONData:(NSData *)JSONData - date:(NSDate *)date - error: - (NSError *_Nullable *)outError; - -+ (nullable FIRInstallationsStoredAuthToken *)authTokenWithGenerateTokenAPIJSONData:(NSData *)data - date:(NSDate *)date - error:(NSError **) - outError; - -+ (nullable FIRInstallationsStoredAuthToken *)authTokenWithJSONDict: - (NSDictionary *)dict - date:(NSDate *)date - error:(NSError **)outError; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsAPI/FIRInstallationsItem+RegisterInstallationAPI.m b/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsAPI/FIRInstallationsItem+RegisterInstallationAPI.m deleted file mode 100644 index 569e35b991..0000000000 --- a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsAPI/FIRInstallationsItem+RegisterInstallationAPI.m +++ /dev/null @@ -1,142 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIRInstallationsItem+RegisterInstallationAPI.h" - -#import "FIRInstallationsErrorUtil.h" -#import "FIRInstallationsStoredAuthToken.h" - -@implementation FIRInstallationsItem (RegisterInstallationAPI) - -- (nullable FIRInstallationsItem *) - registeredInstallationWithJSONData:(NSData *)data - date:(NSDate *)date - error:(NSError *__autoreleasing _Nullable *_Nullable)outError { - NSDictionary *responseJSON = [FIRInstallationsItem dictionaryFromJSONData:data error:outError]; - if (!responseJSON) { - return nil; - } - - NSString *refreshToken = [FIRInstallationsItem validStringOrNilForKey:@"refreshToken" - fromDict:responseJSON]; - if (refreshToken == nil) { - FIRInstallationsItemSetErrorToPointer( - [FIRInstallationsErrorUtil FIDRegistrationErrorWithResponseMissingField:@"refreshToken"], - outError); - return nil; - } - - NSDictionary *authTokenDict = responseJSON[@"authToken"]; - if (![authTokenDict isKindOfClass:[NSDictionary class]]) { - FIRInstallationsItemSetErrorToPointer( - [FIRInstallationsErrorUtil FIDRegistrationErrorWithResponseMissingField:@"authToken"], - outError); - return nil; - } - - FIRInstallationsStoredAuthToken *authToken = - [FIRInstallationsItem authTokenWithJSONDict:authTokenDict date:date error:outError]; - if (authToken == nil) { - return nil; - } - - FIRInstallationsItem *installation = - [[FIRInstallationsItem alloc] initWithAppID:self.appID firebaseAppName:self.firebaseAppName]; - NSString *installationID = [FIRInstallationsItem validStringOrNilForKey:@"fid" - fromDict:responseJSON]; - installation.firebaseInstallationID = installationID ?: self.firebaseInstallationID; - installation.refreshToken = refreshToken; - installation.authToken = authToken; - installation.registrationStatus = FIRInstallationStatusRegistered; - - return installation; -} - -#pragma mark - Auth token - -+ (nullable FIRInstallationsStoredAuthToken *)authTokenWithGenerateTokenAPIJSONData:(NSData *)data - date:(NSDate *)date - error:(NSError **) - outError { - NSDictionary *dict = [self dictionaryFromJSONData:data error:outError]; - if (!dict) { - return nil; - } - - return [self authTokenWithJSONDict:dict date:date error:outError]; -} - -+ (nullable FIRInstallationsStoredAuthToken *)authTokenWithJSONDict: - (NSDictionary *)dict - date:(NSDate *)date - error:(NSError **)outError { - NSString *token = [self validStringOrNilForKey:@"token" fromDict:dict]; - if (token == nil) { - FIRInstallationsItemSetErrorToPointer( - [FIRInstallationsErrorUtil FIDRegistrationErrorWithResponseMissingField:@"authToken.token"], - outError); - return nil; - } - - NSString *expiresInString = [self validStringOrNilForKey:@"expiresIn" fromDict:dict]; - if (expiresInString == nil) { - FIRInstallationsItemSetErrorToPointer( - [FIRInstallationsErrorUtil - FIDRegistrationErrorWithResponseMissingField:@"authToken.expiresIn"], - outError); - return nil; - } - - // The response should contain the string in format like "604800s". - // The server should never response with anything else except seconds. - // Just drop the last character and parse a number from string. - NSString *expiresInSeconds = [expiresInString substringToIndex:expiresInString.length - 1]; - NSTimeInterval expiresIn = [expiresInSeconds doubleValue]; - NSDate *expirationDate = [date dateByAddingTimeInterval:expiresIn]; - - FIRInstallationsStoredAuthToken *authToken = [[FIRInstallationsStoredAuthToken alloc] init]; - authToken.status = FIRInstallationsAuthTokenStatusTokenReceived; - authToken.token = token; - authToken.expirationDate = expirationDate; - - return authToken; -} - -#pragma mark - JSON - -+ (nullable NSDictionary *)dictionaryFromJSONData:(NSData *)data - error:(NSError **)outError { - NSError *error; - NSDictionary *responseJSON = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error]; - - if (![responseJSON isKindOfClass:[NSDictionary class]]) { - FIRInstallationsItemSetErrorToPointer([FIRInstallationsErrorUtil JSONSerializationError:error], - outError); - return nil; - } - - return responseJSON; -} - -+ (NSString *)validStringOrNilForKey:(NSString *)key fromDict:(NSDictionary *)dict { - NSString *string = dict[key]; - if ([string isKindOfClass:[NSString class]] && string.length > 0) { - return string; - } - return nil; -} - -@end diff --git a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsIDController.h b/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsIDController.h deleted file mode 100644 index ab2092d2b6..0000000000 --- a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsIDController.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -@class FBLPromise; -@class FIRInstallationsItem; - -/** - * The class is responsible for managing FID for a given `FIRApp`. - */ -@interface FIRInstallationsIDController : NSObject - -- (instancetype)initWithGoogleAppID:(NSString *)appID - appName:(NSString *)appName - APIKey:(NSString *)APIKey - projectID:(NSString *)projectID - GCMSenderID:(NSString *)GCMSenderID - accessGroup:(nullable NSString *)accessGroup; - -- (FBLPromise *)getInstallationItem; - -- (FBLPromise *)getAuthTokenForcingRefresh:(BOOL)forceRefresh; - -- (FBLPromise *)deleteInstallation; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsIDController.m b/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsIDController.m deleted file mode 100644 index c02cdc81d6..0000000000 --- a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsIDController.m +++ /dev/null @@ -1,480 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIRInstallationsIDController.h" - -#if __has_include() -#import -#else -#import "FBLPromises.h" -#endif - -#import -#import - -#import "FIRInstallationsAPIService.h" -#import "FIRInstallationsErrorUtil.h" -#import "FIRInstallationsIIDStore.h" -#import "FIRInstallationsIIDTokenStore.h" -#import "FIRInstallationsItem.h" -#import "FIRInstallationsLogger.h" -#import "FIRInstallationsSingleOperationPromiseCache.h" -#import "FIRInstallationsStore.h" - -#import "FIRInstallationsHTTPError.h" -#import "FIRInstallationsStoredAuthToken.h" - -const NSNotificationName FIRInstallationIDDidChangeNotification = - @"FIRInstallationIDDidChangeNotification"; -NSString *const kFIRInstallationIDDidChangeNotificationAppNameKey = - @"FIRInstallationIDDidChangeNotification"; - -NSTimeInterval const kFIRInstallationsTokenExpirationThreshold = 60 * 60; // 1 hour. - -static NSString *const kKeychainService = @"com.firebase.FIRInstallations.installations"; - -@interface FIRInstallationsIDController () -@property(nonatomic, readonly) NSString *appID; -@property(nonatomic, readonly) NSString *appName; - -@property(nonatomic, readonly) FIRInstallationsStore *installationsStore; -@property(nonatomic, readonly) FIRInstallationsIIDStore *IIDStore; -@property(nonatomic, readonly) FIRInstallationsIIDTokenStore *IIDTokenStore; - -@property(nonatomic, readonly) FIRInstallationsAPIService *APIService; - -@property(nonatomic, readonly) FIRInstallationsSingleOperationPromiseCache - *getInstallationPromiseCache; -@property(nonatomic, readonly) - FIRInstallationsSingleOperationPromiseCache *authTokenPromiseCache; -@property(nonatomic, readonly) FIRInstallationsSingleOperationPromiseCache - *authTokenForcingRefreshPromiseCache; -@property(nonatomic, readonly) - FIRInstallationsSingleOperationPromiseCache *deleteInstallationPromiseCache; -@end - -@implementation FIRInstallationsIDController - -- (instancetype)initWithGoogleAppID:(NSString *)appID - appName:(NSString *)appName - APIKey:(NSString *)APIKey - projectID:(NSString *)projectID - GCMSenderID:(NSString *)GCMSenderID - accessGroup:(nullable NSString *)accessGroup { - NSString *serviceName = [FIRInstallationsIDController keychainServiceWithAppID:appID]; - GULKeychainStorage *secureStorage = [[GULKeychainStorage alloc] initWithService:serviceName]; - FIRInstallationsStore *installationsStore = - [[FIRInstallationsStore alloc] initWithSecureStorage:secureStorage accessGroup:accessGroup]; - - // Use `GCMSenderID` as project identifier when `projectID` is not available. - NSString *APIServiceProjectID = (projectID.length > 0) ? projectID : GCMSenderID; - FIRInstallationsAPIService *apiService = - [[FIRInstallationsAPIService alloc] initWithAPIKey:APIKey projectID:APIServiceProjectID]; - - FIRInstallationsIIDStore *IIDStore = [[FIRInstallationsIIDStore alloc] init]; - FIRInstallationsIIDTokenStore *IIDCheckingStore = - [[FIRInstallationsIIDTokenStore alloc] initWithGCMSenderID:GCMSenderID]; - - return [self initWithGoogleAppID:appID - appName:appName - installationsStore:installationsStore - APIService:apiService - IIDStore:IIDStore - IIDTokenStore:IIDCheckingStore]; -} - -/// The initializer is supposed to be used by tests to inject `installationsStore`. -- (instancetype)initWithGoogleAppID:(NSString *)appID - appName:(NSString *)appName - installationsStore:(FIRInstallationsStore *)installationsStore - APIService:(FIRInstallationsAPIService *)APIService - IIDStore:(FIRInstallationsIIDStore *)IIDStore - IIDTokenStore:(FIRInstallationsIIDTokenStore *)IIDTokenStore { - self = [super init]; - if (self) { - _appID = appID; - _appName = appName; - _installationsStore = installationsStore; - _APIService = APIService; - _IIDStore = IIDStore; - _IIDTokenStore = IIDTokenStore; - - __weak FIRInstallationsIDController *weakSelf = self; - - _getInstallationPromiseCache = [[FIRInstallationsSingleOperationPromiseCache alloc] - initWithNewOperationHandler:^FBLPromise *_Nonnull { - FIRInstallationsIDController *strongSelf = weakSelf; - return [strongSelf createGetInstallationItemPromise]; - }]; - - _authTokenPromiseCache = [[FIRInstallationsSingleOperationPromiseCache alloc] - initWithNewOperationHandler:^FBLPromise *_Nonnull { - FIRInstallationsIDController *strongSelf = weakSelf; - return [strongSelf installationWithValidAuthTokenForcingRefresh:NO]; - }]; - - _authTokenForcingRefreshPromiseCache = [[FIRInstallationsSingleOperationPromiseCache alloc] - initWithNewOperationHandler:^FBLPromise *_Nonnull { - FIRInstallationsIDController *strongSelf = weakSelf; - return [strongSelf installationWithValidAuthTokenForcingRefresh:YES]; - }]; - - _deleteInstallationPromiseCache = [[FIRInstallationsSingleOperationPromiseCache alloc] - initWithNewOperationHandler:^FBLPromise *_Nonnull { - FIRInstallationsIDController *strongSelf = weakSelf; - return [strongSelf createDeleteInstallationPromise]; - }]; - } - return self; -} - -#pragma mark - Get Installation. - -- (FBLPromise *)getInstallationItem { - return [self.getInstallationPromiseCache getExistingPendingOrCreateNewPromise]; -} - -- (FBLPromise *)createGetInstallationItemPromise { - FIRLogDebug(kFIRLoggerInstallations, - kFIRInstallationsMessageCodeNewGetInstallationOperationCreated, @"%s, appName: %@", - __PRETTY_FUNCTION__, self.appName); - - FBLPromise *installationItemPromise = - [self getStoredInstallation].recover(^id(NSError *error) { - return [self createAndSaveFID]; - }); - - // Initiate registration process on success if needed, but return the installation without waiting - // for it. - installationItemPromise.then(^id(FIRInstallationsItem *installation) { - [self getAuthTokenForcingRefresh:NO]; - return nil; - }); - - return installationItemPromise; -} - -- (FBLPromise *)getStoredInstallation { - return [self.installationsStore installationForAppID:self.appID appName:self.appName].validate( - ^BOOL(FIRInstallationsItem *installation) { - BOOL isValid = NO; - switch (installation.registrationStatus) { - case FIRInstallationStatusUnregistered: - case FIRInstallationStatusRegistered: - isValid = YES; - break; - - case FIRInstallationStatusUnknown: - isValid = NO; - break; - } - - return isValid; - }); -} - -- (FBLPromise *)createAndSaveFID { - return [self migrateOrGenerateInstallation] - .then(^FBLPromise *(FIRInstallationsItem *installation) { - return [self saveInstallation:installation]; - }) - .then(^FIRInstallationsItem *(FIRInstallationsItem *installation) { - [self postFIDDidChangeNotification]; - return installation; - }); -} - -- (FBLPromise *)saveInstallation:(FIRInstallationsItem *)installation { - return [self.installationsStore saveInstallation:installation].then( - ^FIRInstallationsItem *(NSNull *result) { - return installation; - }); -} - -/** - * Tries to migrate IID data stored by FirebaseInstanceID SDK or generates a new Installation ID if - * not found. - */ -- (FBLPromise *)migrateOrGenerateInstallation { - if (![self isDefaultApp]) { - // Existing IID should be used only for default FirebaseApp. - FIRInstallationsItem *installation = - [self createInstallationWithFID:[FIRInstallationsItem generateFID] IIDDefaultToken:nil]; - return [FBLPromise resolvedWith:installation]; - } - - return [[[FBLPromise - all:@[ [self.IIDStore existingIID], [self.IIDTokenStore existingIIDDefaultToken] ]] - then:^id _Nullable(NSArray *_Nullable results) { - NSString *existingIID = results[0]; - NSString *IIDDefaultToken = results[1]; - - return [self createInstallationWithFID:existingIID IIDDefaultToken:IIDDefaultToken]; - }] recover:^id _Nullable(NSError *_Nonnull error) { - return [self createInstallationWithFID:[FIRInstallationsItem generateFID] IIDDefaultToken:nil]; - }]; -} - -- (FIRInstallationsItem *)createInstallationWithFID:(NSString *)FID - IIDDefaultToken:(nullable NSString *)IIDDefaultToken { - FIRInstallationsItem *installation = [[FIRInstallationsItem alloc] initWithAppID:self.appID - firebaseAppName:self.appName]; - installation.firebaseInstallationID = FID; - installation.IIDDefaultToken = IIDDefaultToken; - installation.registrationStatus = FIRInstallationStatusUnregistered; - return installation; -} - -#pragma mark - FID registration - -- (FBLPromise *)registerInstallationIfNeeded: - (FIRInstallationsItem *)installation { - switch (installation.registrationStatus) { - case FIRInstallationStatusRegistered: - // Already registered. Do nothing. - return [FBLPromise resolvedWith:installation]; - - case FIRInstallationStatusUnknown: - case FIRInstallationStatusUnregistered: - // Registration required. Proceed. - break; - } - - return [self.APIService registerInstallation:installation] - .catch(^(NSError *_Nonnull error) { - if ([self doesRegistrationErrorRequireConfigChange:error]) { - FIRLogError(kFIRLoggerInstallations, - kFIRInstallationsMessageCodeInvalidFirebaseConfiguration, - @"Firebase Installation registration failed for app with name: %@, error:\n" - @"%@\nPlease make sure you use valid GoogleService-Info.plist", - self.appName, error.userInfo[NSLocalizedFailureReasonErrorKey]); - } - }) - .then(^id(FIRInstallationsItem *registeredInstallation) { - return [self saveInstallation:registeredInstallation]; - }) - .then(^FIRInstallationsItem *(FIRInstallationsItem *registeredInstallation) { - // Server may respond with a different FID if the sent one cannot be accepted. - if (![registeredInstallation.firebaseInstallationID - isEqualToString:installation.firebaseInstallationID]) { - [self postFIDDidChangeNotification]; - } - return registeredInstallation; - }); -} - -- (BOOL)doesRegistrationErrorRequireConfigChange:(NSError *)error { - FIRInstallationsHTTPError *HTTPError = (FIRInstallationsHTTPError *)error; - if (![HTTPError isKindOfClass:[FIRInstallationsHTTPError class]]) { - return NO; - } - - switch (HTTPError.HTTPResponse.statusCode) { - // These are the errors that require Firebase configuration change. - case FIRInstallationsRegistrationHTTPCodeInvalidArgument: - case FIRInstallationsRegistrationHTTPCodeInvalidAPIKey: - case FIRInstallationsRegistrationHTTPCodeAPIKeyToProjectIDMismatch: - case FIRInstallationsRegistrationHTTPCodeProjectNotFound: - return YES; - - default: - return NO; - } -} - -#pragma mark - Auth Token - -- (FBLPromise *)getAuthTokenForcingRefresh:(BOOL)forceRefresh { - if (forceRefresh || [self.authTokenForcingRefreshPromiseCache getExistingPendingPromise] != nil) { - return [self.authTokenForcingRefreshPromiseCache getExistingPendingOrCreateNewPromise]; - } else { - return [self.authTokenPromiseCache getExistingPendingOrCreateNewPromise]; - } -} - -- (FBLPromise *)installationWithValidAuthTokenForcingRefresh: - (BOOL)forceRefresh { - FIRLogDebug(kFIRLoggerInstallations, kFIRInstallationsMessageCodeNewGetAuthTokenOperationCreated, - @"-[FIRInstallationsIDController installationWithValidAuthTokenForcingRefresh:%@], " - @"appName: %@", - @(forceRefresh), self.appName); - - return [self getInstallationItem] - .then(^FBLPromise *(FIRInstallationsItem *installation) { - return [self registerInstallationIfNeeded:installation]; - }) - .then(^id(FIRInstallationsItem *registeredInstallation) { - BOOL isTokenExpiredOrExpiresSoon = - [registeredInstallation.authToken.expirationDate timeIntervalSinceDate:[NSDate date]] < - kFIRInstallationsTokenExpirationThreshold; - if (forceRefresh || isTokenExpiredOrExpiresSoon) { - return [self refreshAuthTokenForInstallation:registeredInstallation]; - } else { - return registeredInstallation; - } - }) - .recover(^id(NSError *error) { - return [self regenerateFIDOnRefreshTokenErrorIfNeeded:error]; - }); -} - -- (FBLPromise *)refreshAuthTokenForInstallation: - (FIRInstallationsItem *)installation { - return [[self.APIService refreshAuthTokenForInstallation:installation] - then:^id _Nullable(FIRInstallationsItem *_Nullable refreshedInstallation) { - return [self saveInstallation:refreshedInstallation]; - }]; -} - -- (id)regenerateFIDOnRefreshTokenErrorIfNeeded:(NSError *)error { - if (![error isKindOfClass:[FIRInstallationsHTTPError class]]) { - // No recovery possible. Return the same error. - return error; - } - - FIRInstallationsHTTPError *HTTPError = (FIRInstallationsHTTPError *)error; - switch (HTTPError.HTTPResponse.statusCode) { - case FIRInstallationsAuthTokenHTTPCodeInvalidAuthentication: - case FIRInstallationsAuthTokenHTTPCodeFIDNotFound: - // The stored installation was damaged or blocked by the server. - // Delete the stored installation then generate and register a new one. - return [self getInstallationItem] - .then(^FBLPromise *(FIRInstallationsItem *installation) { - return [self deleteInstallationLocally:installation]; - }) - .then(^FBLPromise *(id result) { - return [self installationWithValidAuthTokenForcingRefresh:NO]; - }); - - default: - // No recovery possible. Return the same error. - return error; - } -} - -#pragma mark - Delete FID - -- (FBLPromise *)deleteInstallation { - return [self.deleteInstallationPromiseCache getExistingPendingOrCreateNewPromise]; -} - -- (FBLPromise *)createDeleteInstallationPromise { - FIRLogDebug(kFIRLoggerInstallations, - kFIRInstallationsMessageCodeNewDeleteInstallationOperationCreated, @"%s, appName: %@", - __PRETTY_FUNCTION__, self.appName); - - // Check for ongoing requests first, if there is no a request, then check local storage for - // existing installation. - FBLPromise *currentInstallationPromise = - [self mostRecentInstallationOperation] ?: [self getStoredInstallation]; - - return currentInstallationPromise - .then(^id(FIRInstallationsItem *installation) { - return [self sendDeleteInstallationRequestIfNeeded:installation]; - }) - .then(^id(FIRInstallationsItem *installation) { - // Remove the installation from the local storage. - return [self deleteInstallationLocally:installation]; - }); -} - -- (FBLPromise *)deleteInstallationLocally:(FIRInstallationsItem *)installation { - return [self.installationsStore removeInstallationForAppID:installation.appID - appName:installation.firebaseAppName] - .then(^FBLPromise *(NSNull *result) { - return [self deleteExistingIIDIfNeeded]; - }) - .then(^NSNull *(NSNull *result) { - [self postFIDDidChangeNotification]; - return result; - }); -} - -- (FBLPromise *)sendDeleteInstallationRequestIfNeeded: - (FIRInstallationsItem *)installation { - switch (installation.registrationStatus) { - case FIRInstallationStatusUnknown: - case FIRInstallationStatusUnregistered: - // The installation is not registered, so it is safe to be deleted as is, so return early. - return [FBLPromise resolvedWith:installation]; - break; - - case FIRInstallationStatusRegistered: - // Proceed to de-register the installation on the server. - break; - } - - return [self.APIService deleteInstallation:installation].recover(^id(NSError *APIError) { - if ([FIRInstallationsErrorUtil isAPIError:APIError withHTTPCode:404]) { - // The installation was not found on the server. - // Return success. - return installation; - } else { - // Re-throw the error otherwise. - return APIError; - } - }); -} - -- (FBLPromise *)deleteExistingIIDIfNeeded { - if ([self isDefaultApp]) { - return [self.IIDStore deleteExistingIID]; - } else { - return [FBLPromise resolvedWith:[NSNull null]]; - } -} - -- (nullable FBLPromise *)mostRecentInstallationOperation { - return [self.authTokenForcingRefreshPromiseCache getExistingPendingPromise] - ?: [self.authTokenPromiseCache getExistingPendingPromise] - ?: [self.getInstallationPromiseCache getExistingPendingPromise]; -} - -#pragma mark - Notifications - -- (void)postFIDDidChangeNotification { - [[NSNotificationCenter defaultCenter] - postNotificationName:FIRInstallationIDDidChangeNotification - object:nil - userInfo:@{kFIRInstallationIDDidChangeNotificationAppNameKey : self.appName}]; -} - -#pragma mark - Default App - -- (BOOL)isDefaultApp { - return [self.appName isEqualToString:kFIRDefaultAppName]; -} - -#pragma mark - Keychain - -+ (NSString *)keychainServiceWithAppID:(NSString *)appID { -#if TARGET_OS_MACCATALYST || TARGET_OS_OSX - // We need to keep service name unique per application on macOS. - // Applications on macOS may request access to Keychain items stored by other applications. It - // means that when the app looks up for a relevant Keychain item in the service scope it will - // request user password to grant access to the Keychain if there are other Keychain items from - // other applications stored under the same Keychain Service. - return [kKeychainService stringByAppendingFormat:@".%@", appID]; -#else - // Use a constant Keychain service for non-macOS because: - // 1. Keychain items cannot be shared between apps until configured specifically so the service - // name collisions are not a concern - // 2. We don't want to change the service name to avoid doing a migration. - return kKeychainService; -#endif -} - -@end diff --git a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsSingleOperationPromiseCache.h b/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsSingleOperationPromiseCache.h deleted file mode 100644 index aeb54e5043..0000000000 --- a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsSingleOperationPromiseCache.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -@class FBLPromise; - -NS_ASSUME_NONNULL_BEGIN - -/** - * The class makes sure the a single operation (represented by a promise) is performed at a time. If - * there is an ongoing operation, then its existing corresponding promise will be returned instead - * of starting a new operation. - */ -@interface FIRInstallationsSingleOperationPromiseCache<__covariant ResultType> : NSObject - -- (instancetype)init NS_UNAVAILABLE; - -/** - * The designated initializer. - * @param newOperationHandler The block that must return a new promise representing the - * single-at-a-time operation. The promise should be fulfilled when the operation is completed. The - * factory block will be used to create a new promise when needed. - */ -- (instancetype)initWithNewOperationHandler: - (FBLPromise *_Nonnull (^)(void))newOperationHandler NS_DESIGNATED_INITIALIZER; - -/** - * Creates a new promise or returns an existing pending one. - * @return Returns and existing pending promise if exists. If the pending promise does not exist - * then a new one will be created using the `factory` block passed in the initializer. Once the - * pending promise gets resolved, it is removed, so calling the method again will lead to creating - * and caching another promise. - */ -- (FBLPromise *)getExistingPendingOrCreateNewPromise; - -/** - * Returns an existing pending promise or `nil`. - * @return Returns an existing pending promise if there is one or `nil` otherwise. - */ -- (nullable FBLPromise *)getExistingPendingPromise; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsSingleOperationPromiseCache.m b/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsSingleOperationPromiseCache.m deleted file mode 100644 index dfccfe36dc..0000000000 --- a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsSingleOperationPromiseCache.m +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIRInstallationsSingleOperationPromiseCache.h" - -#if __has_include() -#import -#else -#import "FBLPromises.h" -#endif - -@interface FIRInstallationsSingleOperationPromiseCache () -@property(nonatomic, readonly) FBLPromise *_Nonnull (^newOperationHandler)(void); -@property(nonatomic, nullable) FBLPromise *pendingPromise; -@end - -@implementation FIRInstallationsSingleOperationPromiseCache - -- (instancetype)initWithNewOperationHandler: - (FBLPromise *_Nonnull (^)(void))newOperationHandler { - if (newOperationHandler == nil) { - [NSException raise:NSInvalidArgumentException - format:@"`newOperationHandler` must not be `nil`."]; - } - - self = [super init]; - if (self) { - _newOperationHandler = [newOperationHandler copy]; - } - return self; -} - -- (FBLPromise *)getExistingPendingOrCreateNewPromise { - @synchronized(self) { - if (!self.pendingPromise) { - self.pendingPromise = self.newOperationHandler(); - - self.pendingPromise - .then(^id(id result) { - @synchronized(self) { - self.pendingPromise = nil; - return nil; - } - }) - .catch(^void(NSError *error) { - @synchronized(self) { - self.pendingPromise = nil; - } - }); - } - - return self.pendingPromise; - } -} - -- (nullable FBLPromise *)getExistingPendingPromise { - @synchronized(self) { - return self.pendingPromise; - } -} - -@end diff --git a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsStatus.h b/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsStatus.h deleted file mode 100644 index 3edc692011..0000000000 --- a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsStatus.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -/** - * The enum represent possible states of the installation ID. - * - * WARNING: The enum is stored to Keychain as a part of `FIRInstallationsStoredItem`. Modification - * of it can lead to incompatibility with previous version. Any modification must be evaluated and, - * if it is really needed, the `storageVersion` must be bumped and proper migration code added. - */ -typedef NS_ENUM(NSInteger, FIRInstallationsStatus) { - /** Represents either an initial status when a FIRInstallationsItem instance was created but not - * stored to Keychain or an undefined status (e.g. when the status failed to deserialize). - */ - FIRInstallationStatusUnknown, - /// The Firebase Installation has not yet been registered with FIS. - FIRInstallationStatusUnregistered, - /// The Firebase Installation has successfully been registered with FIS. - FIRInstallationStatusRegistered, -}; diff --git a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStore.h b/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStore.h deleted file mode 100644 index b86fb39ad8..0000000000 --- a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStore.h +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -@class FBLPromise; -@class FIRInstallationsItem; -@class GULKeychainStorage; - -NS_ASSUME_NONNULL_BEGIN - -/// The user defaults suite name used to store data. -extern NSString *const kFIRInstallationsStoreUserDefaultsID; - -/// The class is responsible for storing and accessing the installations data. -@interface FIRInstallationsStore : NSObject - -/** - * The default initializer. - * @param storage The secure storage to save installations data. - * @param accessGroup The Keychain Access Group to store and request the installations data. - */ -- (instancetype)initWithSecureStorage:(GULKeychainStorage *)storage - accessGroup:(nullable NSString *)accessGroup; - -/** - * Retrieves existing installation ID if there is. - * @param appID The Firebase(Google) Application ID. - * @param appName The Firebase Application Name. - * - * @return Returns a `FBLPromise` instance. The promise is resolved with a FIRInstallationsItem - * instance if there is a valid installation stored for `appID` and `appName`. The promise is - * rejected with a specific error when the installation has not been found or with another possible - * error. - */ -- (FBLPromise *)installationForAppID:(NSString *)appID - appName:(NSString *)appName; - -/** - * Saves the given installation. - * - * @param installationItem The installation data. - * @return Returns a promise that is resolved with `[NSNull null]` on success. - */ -- (FBLPromise *)saveInstallation:(FIRInstallationsItem *)installationItem; - -/** - * Removes installation data for the given app parameters. - * @param appID The Firebase(Google) Application ID. - * @param appName The Firebase Application Name. - * - * @return Returns a promise that is resolved with `[NSNull null]` on success. - */ -- (FBLPromise *)removeInstallationForAppID:(NSString *)appID appName:(NSString *)appName; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStore.m b/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStore.m deleted file mode 100644 index 46f58dba78..0000000000 --- a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStore.m +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIRInstallationsStore.h" - -#import - -#if __has_include() -#import -#else -#import "FBLPromises.h" -#endif - -#import - -#import "FIRInstallationsErrorUtil.h" -#import "FIRInstallationsItem.h" -#import "FIRInstallationsStoredItem.h" - -NSString *const kFIRInstallationsStoreUserDefaultsID = @"com.firebase.FIRInstallations"; - -@interface FIRInstallationsStore () -@property(nonatomic, readonly) GULKeychainStorage *secureStorage; -@property(nonatomic, readonly, nullable) NSString *accessGroup; -@property(nonatomic, readonly) dispatch_queue_t queue; -@property(nonatomic, readonly) GULUserDefaults *userDefaults; -@end - -@implementation FIRInstallationsStore - -- (instancetype)initWithSecureStorage:(GULKeychainStorage *)storage - accessGroup:(NSString *)accessGroup { - self = [super init]; - if (self) { - _secureStorage = storage; - _accessGroup = [accessGroup copy]; - _queue = dispatch_queue_create("com.firebase.FIRInstallationsStore", DISPATCH_QUEUE_SERIAL); - - NSString *userDefaultsSuiteName = _accessGroup ?: kFIRInstallationsStoreUserDefaultsID; - _userDefaults = [[GULUserDefaults alloc] initWithSuiteName:userDefaultsSuiteName]; - } - return self; -} - -- (FBLPromise *)installationForAppID:(NSString *)appID - appName:(NSString *)appName { - NSString *itemID = [FIRInstallationsItem identifierWithAppID:appID appName:appName]; - return [self installationExistsForAppID:appID appName:appName] - .then(^id(id result) { - return [self.secureStorage getObjectForKey:itemID - objectClass:[FIRInstallationsStoredItem class] - accessGroup:self.accessGroup]; - }) - .then(^id(FIRInstallationsStoredItem *_Nullable storedItem) { - if (storedItem == nil) { - return [FIRInstallationsErrorUtil installationItemNotFoundForAppID:appID appName:appName]; - } - - FIRInstallationsItem *item = [[FIRInstallationsItem alloc] initWithAppID:appID - firebaseAppName:appName]; - [item updateWithStoredItem:storedItem]; - return item; - }); -} - -- (FBLPromise *)saveInstallation:(FIRInstallationsItem *)installationItem { - FIRInstallationsStoredItem *storedItem = [installationItem storedItem]; - NSString *identifier = [installationItem identifier]; - - return - [self.secureStorage setObject:storedItem forKey:identifier accessGroup:self.accessGroup].then( - ^id(id result) { - return [self setInstallationExists:YES forItemWithIdentifier:identifier]; - }); -} - -- (FBLPromise *)removeInstallationForAppID:(NSString *)appID appName:(NSString *)appName { - NSString *identifier = [FIRInstallationsItem identifierWithAppID:appID appName:appName]; - return [self.secureStorage removeObjectForKey:identifier accessGroup:self.accessGroup].then( - ^id(id result) { - return [self setInstallationExists:NO forItemWithIdentifier:identifier]; - }); -} - -#pragma mark - User defaults - -- (FBLPromise *)installationExistsForAppID:(NSString *)appID appName:(NSString *)appName { - NSString *identifier = [FIRInstallationsItem identifierWithAppID:appID appName:appName]; - return [FBLPromise onQueue:self.queue - do:^id _Nullable { - return [[self userDefaults] objectForKey:identifier] != nil - ? [NSNull null] - : [FIRInstallationsErrorUtil - installationItemNotFoundForAppID:appID - appName:appName]; - }]; -} - -- (FBLPromise *)setInstallationExists:(BOOL)exists - forItemWithIdentifier:(NSString *)identifier { - return [FBLPromise onQueue:self.queue - do:^id _Nullable { - if (exists) { - [[self userDefaults] setBool:YES forKey:identifier]; - } else { - [[self userDefaults] removeObjectForKey:identifier]; - } - - return [NSNull null]; - }]; -} - -@end diff --git a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStoredAuthToken.h b/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStoredAuthToken.h deleted file mode 100644 index f6e4282882..0000000000 --- a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStoredAuthToken.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - * The enum represent possible states of the installation auth token. - * - * WARNING: The enum is stored to Keychain as a part of `FIRInstallationsStoredAuthToken`. - * Modification of it can lead to incompatibility with previous version. Any modification must be - * evaluated and, if it is really needed, the `storageVersion` must be bumped and proper migration - * code added. - */ -typedef NS_ENUM(NSInteger, FIRInstallationsAuthTokenStatus) { - /// An initial status or an undefined value. - FIRInstallationsAuthTokenStatusUnknown, - /// The auth token has been received from the server. - FIRInstallationsAuthTokenStatusTokenReceived -}; - -/** - * This class serializes and deserializes the installation data into/from `NSData` to be stored in - * Keychain. This class is primarily used by `FIRInstallationsStore`. It is also used on the logic - * level as a data object (see `FIRInstallationsItem.authToken`). - * - * WARNING: Modification of the class properties can lead to incompatibility with the stored data - * encoded by the previous class versions. Any modification must be evaluated and, if it is really - * needed, the `storageVersion` must be bumped and proper migration code added. - */ -@interface FIRInstallationsStoredAuthToken : NSObject -@property FIRInstallationsAuthTokenStatus status; - -/// The token that can be used to authorize requests to Firebase backend. -@property(nullable, copy) NSString *token; -/// The date when the auth token expires. -@property(nullable, copy) NSDate *expirationDate; - -/// The version of local storage. -@property(nonatomic, readonly) NSInteger storageVersion; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStoredAuthToken.m b/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStoredAuthToken.m deleted file mode 100644 index b21f6dd235..0000000000 --- a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStoredAuthToken.m +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIRInstallationsStoredAuthToken.h" - -#import "FIRInstallationsLogger.h" - -NSString *const kFIRInstallationsStoredAuthTokenStatusKey = @"status"; -NSString *const kFIRInstallationsStoredAuthTokenTokenKey = @"token"; -NSString *const kFIRInstallationsStoredAuthTokenExpirationDateKey = @"expirationDate"; -NSString *const kFIRInstallationsStoredAuthTokenStorageVersionKey = @"storageVersion"; - -NSInteger const kFIRInstallationsStoredAuthTokenStorageVersion = 1; - -@implementation FIRInstallationsStoredAuthToken - -- (NSInteger)storageVersion { - return kFIRInstallationsStoredAuthTokenStorageVersion; -} - -- (nonnull id)copyWithZone:(nullable NSZone *)zone { - FIRInstallationsStoredAuthToken *clone = [[FIRInstallationsStoredAuthToken alloc] init]; - clone.status = self.status; - clone.token = [self.token copy]; - clone.expirationDate = self.expirationDate; - return clone; -} - -- (void)encodeWithCoder:(nonnull NSCoder *)aCoder { - [aCoder encodeInteger:self.status forKey:kFIRInstallationsStoredAuthTokenStatusKey]; - [aCoder encodeObject:self.token forKey:kFIRInstallationsStoredAuthTokenTokenKey]; - [aCoder encodeObject:self.expirationDate - forKey:kFIRInstallationsStoredAuthTokenExpirationDateKey]; - [aCoder encodeInteger:self.storageVersion - forKey:kFIRInstallationsStoredAuthTokenStorageVersionKey]; -} - -- (nullable instancetype)initWithCoder:(nonnull NSCoder *)aDecoder { - NSInteger storageVersion = - [aDecoder decodeIntegerForKey:kFIRInstallationsStoredAuthTokenStorageVersionKey]; - if (storageVersion > kFIRInstallationsStoredAuthTokenStorageVersion) { - FIRLogWarning(kFIRLoggerInstallations, - kFIRInstallationsMessageCodeAuthTokenCoderVersionMismatch, - @"FIRInstallationsStoredAuthToken was encoded by a newer coder version %ld. " - @"Current coder version is %ld. Some auth token data may be lost.", - (long)storageVersion, (long)kFIRInstallationsStoredAuthTokenStorageVersion); - } - - FIRInstallationsStoredAuthToken *object = [[FIRInstallationsStoredAuthToken alloc] init]; - object.status = [aDecoder decodeIntegerForKey:kFIRInstallationsStoredAuthTokenStatusKey]; - object.token = [aDecoder decodeObjectOfClass:[NSString class] - forKey:kFIRInstallationsStoredAuthTokenTokenKey]; - object.expirationDate = - [aDecoder decodeObjectOfClass:[NSDate class] - forKey:kFIRInstallationsStoredAuthTokenExpirationDateKey]; - - return object; -} - -+ (BOOL)supportsSecureCoding { - return YES; -} - -@end diff --git a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStoredItem.h b/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStoredItem.h deleted file mode 100644 index 4926588c29..0000000000 --- a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStoredItem.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -#import "FIRInstallationsStatus.h" - -@class FIRInstallationsStoredAuthToken; -@class FIRInstallationsStoredIIDCheckin; - -NS_ASSUME_NONNULL_BEGIN - -/** - * The class is supposed to be used by `FIRInstallationsStore` only. It is required to - * serialize/deserialize the installation data into/from `NSData` to be stored in Keychain. - * - * WARNING: Modification of the class properties can lead to incompatibility with the stored data - * encoded by the previous class versions. Any modification must be evaluated and, if it is really - * needed, the `storageVersion` must be bumped and proper migration code added. - */ -@interface FIRInstallationsStoredItem : NSObject - -/// A stable identifier that uniquely identifies the app instance. -@property(nonatomic, copy, nullable) NSString *firebaseInstallationID; -/// The `refreshToken` is used to authorize the auth token requests. -@property(nonatomic, copy, nullable) NSString *refreshToken; - -@property(nonatomic, nullable) FIRInstallationsStoredAuthToken *authToken; -@property(nonatomic) FIRInstallationsStatus registrationStatus; - -/// Instance ID default auth token imported from IID store as a part of IID migration. -@property(nonatomic, nullable) NSString *IIDDefaultToken; - -/// The version of local storage. -@property(nonatomic, readonly) NSInteger storageVersion; -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStoredItem.m b/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStoredItem.m deleted file mode 100644 index 0c7655c396..0000000000 --- a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStoredItem.m +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIRInstallationsStoredItem.h" - -#import "FIRInstallationsLogger.h" -#import "FIRInstallationsStoredAuthToken.h" - -NSString *const kFIRInstallationsStoredItemFirebaseInstallationIDKey = @"firebaseInstallationID"; -NSString *const kFIRInstallationsStoredItemRefreshTokenKey = @"refreshToken"; -NSString *const kFIRInstallationsStoredItemAuthTokenKey = @"authToken"; -NSString *const kFIRInstallationsStoredItemRegistrationStatusKey = @"registrationStatus"; -NSString *const kFIRInstallationsStoredItemIIDDefaultTokenKey = @"IIDDefaultToken"; -NSString *const kFIRInstallationsStoredItemStorageVersionKey = @"storageVersion"; - -NSInteger const kFIRInstallationsStoredItemStorageVersion = 1; - -@implementation FIRInstallationsStoredItem - -- (NSInteger)storageVersion { - return kFIRInstallationsStoredItemStorageVersion; -} - -- (void)encodeWithCoder:(nonnull NSCoder *)aCoder { - [aCoder encodeObject:self.firebaseInstallationID - forKey:kFIRInstallationsStoredItemFirebaseInstallationIDKey]; - [aCoder encodeObject:self.refreshToken forKey:kFIRInstallationsStoredItemRefreshTokenKey]; - [aCoder encodeObject:self.authToken forKey:kFIRInstallationsStoredItemAuthTokenKey]; - [aCoder encodeInteger:self.registrationStatus - forKey:kFIRInstallationsStoredItemRegistrationStatusKey]; - [aCoder encodeObject:self.IIDDefaultToken forKey:kFIRInstallationsStoredItemIIDDefaultTokenKey]; - [aCoder encodeInteger:self.storageVersion forKey:kFIRInstallationsStoredItemStorageVersionKey]; -} - -- (nullable instancetype)initWithCoder:(nonnull NSCoder *)aDecoder { - NSInteger storageVersion = - [aDecoder decodeIntegerForKey:kFIRInstallationsStoredItemStorageVersionKey]; - if (storageVersion > self.storageVersion) { - FIRLogWarning(kFIRLoggerInstallations, - kFIRInstallationsMessageCodeInstallationCoderVersionMismatch, - @"FIRInstallationsStoredItem was encoded by a newer coder version %ld. Current " - @"coder version is %ld. Some installation data may be lost.", - (long)storageVersion, (long)kFIRInstallationsStoredItemStorageVersion); - } - - FIRInstallationsStoredItem *item = [[FIRInstallationsStoredItem alloc] init]; - item.firebaseInstallationID = - [aDecoder decodeObjectOfClass:[NSString class] - forKey:kFIRInstallationsStoredItemFirebaseInstallationIDKey]; - item.refreshToken = [aDecoder decodeObjectOfClass:[NSString class] - forKey:kFIRInstallationsStoredItemRefreshTokenKey]; - item.authToken = [aDecoder decodeObjectOfClass:[FIRInstallationsStoredAuthToken class] - forKey:kFIRInstallationsStoredItemAuthTokenKey]; - item.registrationStatus = - [aDecoder decodeIntegerForKey:kFIRInstallationsStoredItemRegistrationStatusKey]; - item.IIDDefaultToken = - [aDecoder decodeObjectOfClass:[NSString class] - forKey:kFIRInstallationsStoredItemIIDDefaultTokenKey]; - - return item; -} - -+ (BOOL)supportsSecureCoding { - return YES; -} - -@end diff --git a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Public/FIRInstallations.h b/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Public/FIRInstallations.h deleted file mode 100644 index 4839b4e03c..0000000000 --- a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Public/FIRInstallations.h +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -@class FIRApp; -@class FIRInstallationsAuthTokenResult; - -NS_ASSUME_NONNULL_BEGIN - -/** A notification with this name is sent each time an installation is created or deleted. */ -FOUNDATION_EXPORT const NSNotificationName FIRInstallationIDDidChangeNotification; -/** `userInfo` key for the `FirebaseApp.name` in `FIRInstallationIDDidChangeNotification`. */ -FOUNDATION_EXPORT NSString *const kFIRInstallationIDDidChangeNotificationAppNameKey; - -/** - * An installation ID handler block. - * @param identifier The installation ID string if exists or `nil` otherwise. - * @param error The error when `identifier == nil` or `nil` otherwise. - */ -typedef void (^FIRInstallationsIDHandler)(NSString *__nullable identifier, - NSError *__nullable error) - NS_SWIFT_NAME(InstallationsIDHandler); - -/** - * An authorization token handler block. - * @param tokenResult An instance of `InstallationsAuthTokenResult` in case of success or `nil` - * otherwise. - * @param error The error when `tokenResult == nil` or `nil` otherwise. - */ -typedef void (^FIRInstallationsTokenHandler)( - FIRInstallationsAuthTokenResult *__nullable tokenResult, NSError *__nullable error) - NS_SWIFT_NAME(InstallationsTokenHandler); - -/** - * The class provides API for Firebase Installations. - * Each configured `FirebaseApp` has a corresponding single instance of `Installations`. - * An instance of the class provides access to the installation info for the `FirebaseApp` as well - * as the ability to delete it. A Firebase Installation is unique by `FirebaseApp.name` and - * `FirebaseApp.options.googleAppID` . - */ -NS_SWIFT_NAME(Installations) -@interface FIRInstallations : NSObject - -- (instancetype)init NS_UNAVAILABLE; - -/** - * Returns a default instance of `Installations`. - * @returns An instance of `Installations` for `FirebaseApp.defaultApp(). - * @throw Throws an exception if the default app is not configured yet or required `FirebaseApp` - * options are missing. - */ -+ (FIRInstallations *)installations NS_SWIFT_NAME(installations()); - -/** - * Returns an instance of `Installations` for an application. - * @param application A configured `FirebaseApp` instance. - * @returns An instance of `Installations` corresponding to the passed application. - * @throw Throws an exception if required `FirebaseApp` options are missing. - */ -+ (FIRInstallations *)installationsWithApp:(FIRApp *)application NS_SWIFT_NAME(installations(app:)); - -/** - * The method creates or retrieves an installation ID. The installation ID is a stable identifier - * that uniquely identifies the app instance. NOTE: If the application already has an existing - * FirebaseInstanceID then the InstanceID identifier will be used. - * @param completion A completion handler which is invoked when the operation completes. See - * `InstallationsIDHandler` for additional details. - */ -- (void)installationIDWithCompletion:(FIRInstallationsIDHandler)completion; - -/** - * Retrieves (locally if it exists or from the server) a valid authorization token. An existing - * token may be invalidated or expired, so it is recommended to fetch the auth token before each - * server request. The method does the same as `Installations.authTokenForcingRefresh(:, - * completion:)` with forcing refresh `NO`. - * @param completion A completion handler which is invoked when the operation completes. See - * `InstallationsTokenHandler` for additional details. - */ -- (void)authTokenWithCompletion:(FIRInstallationsTokenHandler)completion; - -/** - * Retrieves (locally or from the server depending on `forceRefresh` value) a valid authorization - * token. An existing token may be invalidated or expire, so it is recommended to fetch the auth - * token before each server request. This method should be used with `forceRefresh == YES` when e.g. - * a request with the previously fetched auth token failed with "Not Authorized" error. - * @param forceRefresh If `YES` then the locally cached auth token will be ignored and a new one - * will be requested from the server. If `NO`, then the locally cached auth token will be returned - * if exists and has not expired yet. - * @param completion A completion handler which is invoked when the operation completes. See - * `InstallationsTokenHandler` for additional details. - */ -- (void)authTokenForcingRefresh:(BOOL)forceRefresh - completion:(FIRInstallationsTokenHandler)completion; - -/** - * Deletes all the installation data including the unique identifier, auth tokens and - * all related data on the server side. A network connection is required for the method to - * succeed. If fails, the existing installation data remains untouched. - * @param completion A completion handler which is invoked when the operation completes. `error == - * nil` indicates success. - */ -- (void)deleteWithCompletion:(void (^)(NSError *__nullable error))completion; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Public/FIRInstallationsAuthTokenResult.h b/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Public/FIRInstallationsAuthTokenResult.h deleted file mode 100644 index 7753132d9b..0000000000 --- a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Public/FIRInstallationsAuthTokenResult.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** The class represents a result of the auth token request. */ -NS_SWIFT_NAME(InstallationsAuthTokenResult) -@interface FIRInstallationsAuthTokenResult : NSObject - -/** The authorization token string. */ -@property(nonatomic, readonly) NSString *authToken; - -/** The auth token expiration date. */ -@property(nonatomic, readonly) NSDate *expirationDate; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Public/FIRInstallationsErrors.h b/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Public/FIRInstallationsErrors.h deleted file mode 100644 index d0c3b9961f..0000000000 --- a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Public/FIRInstallationsErrors.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -extern NSString *const kFirebaseInstallationsErrorDomain; - -typedef NS_ENUM(NSUInteger, FIRInstallationsErrorCode) { - /** Unknown error. See `userInfo` for details. */ - FIRInstallationsErrorCodeUnknown = 0, - - /** Keychain error. See `userInfo` for details. */ - FIRInstallationsErrorCodeKeychain = 1, - - /** Server unreachable. A network error or server is unavailable. See `userInfo` for details. */ - FIRInstallationsErrorCodeServerUnreachable = 2, - - /** FirebaseApp configuration issues e.g. invalid GMP-App-ID, etc. See `userInfo` for details. */ - FIRInstallationsErrorCodeInvalidConfiguration = 3, - -} NS_SWIFT_NAME(InstallationsErrorCode); diff --git a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Public/FIRInstallationsVersion.h b/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Public/FIRInstallationsVersion.h deleted file mode 100644 index 8cdf6778b3..0000000000 --- a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Public/FIRInstallationsVersion.h +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -FOUNDATION_EXPORT const char *const FIRInstallationsVersionStr; diff --git a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Public/FirebaseInstallations.h b/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Public/FirebaseInstallations.h deleted file mode 100644 index accc9ac6b2..0000000000 --- a/iphone/Maps/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Public/FirebaseInstallations.h +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "FIRInstallations.h" -#import "FIRInstallationsAuthTokenResult.h" -#import "FIRInstallationsErrors.h" -#import "FIRInstallationsVersion.h" diff --git a/iphone/Maps/Pods/FirebaseInstallations/LICENSE b/iphone/Maps/Pods/FirebaseInstallations/LICENSE deleted file mode 100644 index d645695673..0000000000 --- a/iphone/Maps/Pods/FirebaseInstallations/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/iphone/Maps/Pods/FirebaseInstallations/README.md b/iphone/Maps/Pods/FirebaseInstallations/README.md deleted file mode 100644 index a396a214d9..0000000000 --- a/iphone/Maps/Pods/FirebaseInstallations/README.md +++ /dev/null @@ -1,307 +0,0 @@ -[![Version](https://img.shields.io/cocoapods/v/Firebase.svg?style=flat)](https://cocoapods.org/pods/Firebase) -[![License](https://img.shields.io/cocoapods/l/Firebase.svg?style=flat)](https://cocoapods.org/pods/Firebase) -[![Platform](https://img.shields.io/cocoapods/p/Firebase.svg?style=flat)](https://cocoapods.org/pods/Firebase) - -[![Actions Status][gh-abtesting-badge]][gh-actions] -[![Actions Status][gh-auth-badge]][gh-actions] -[![Actions Status][gh-core-badge]][gh-actions] -[![Actions Status][gh-crashlytics-badge]][gh-actions] -[![Actions Status][gh-database-badge]][gh-actions] -[![Actions Status][gh-datatransport-badge]][gh-actions] -[![Actions Status][gh-dynamiclinks-badge]][gh-actions] -[![Actions Status][gh-firebasepod-badge]][gh-actions] -[![Actions Status][gh-firestore-badge]][gh-actions] -[![Actions Status][gh-functions-badge]][gh-actions] -[![Actions Status][gh-inappmessaging-badge]][gh-actions] -[![Actions Status][gh-interop-badge]][gh-actions] -[![Actions Status][gh-messaging-badge]][gh-actions] -[![Actions Status][gh-remoteconfig-badge]][gh-actions] -[![Actions Status][gh-storage-badge]][gh-actions] -[![Actions Status][gh-symbolcollision-badge]][gh-actions] -[![Actions Status][gh-zip-badge]][gh-actions] -[![Travis](https://travis-ci.org/firebase/firebase-ios-sdk.svg?branch=master)](https://travis-ci.org/firebase/firebase-ios-sdk) - -# Firebase Apple Open Source Development - -This repository contains all Apple platform Firebase SDK source except FirebaseAnalytics, -FirebasePerformance, and FirebaseML. - -The repository also includes GoogleUtilities source. The -[GoogleUtilities](GoogleUtilities/README.md) pod is -a set of utilities used by Firebase and other Google products. - -Firebase is an app development platform with tools to help you build, grow and -monetize your app. More information about Firebase can be found at -[https://firebase.google.com](https://firebase.google.com). - -## Installation - -See the three subsections for details about three different installation methods. -1. [Standard pod install](README.md#standard-pod-install) -1. [Installing from the GitHub repo](README.md#installing-from-github) -1. [Experimental Carthage](README.md#carthage-ios-only) - -### Standard pod install - -Go to -[https://firebase.google.com/docs/ios/setup](https://firebase.google.com/docs/ios/setup). - -### Installing from GitHub - -For releases starting with 5.0.0, the source for each release is also deployed -to CocoaPods master and available via standard -[CocoaPods Podfile syntax](https://guides.cocoapods.org/syntax/podfile.html#pod). - -These instructions can be used to access the Firebase repo at other branches, -tags, or commits. - -#### Background - -See -[the Podfile Syntax Reference](https://guides.cocoapods.org/syntax/podfile.html#pod) -for instructions and options about overriding pod source locations. - -#### Accessing Firebase Source Snapshots - -All of the official releases are tagged in this repo and available via CocoaPods. To access a local -source snapshot or unreleased branch, use Podfile directives like the following: - -To access FirebaseFirestore via a branch: -``` -pod 'FirebaseCore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master' -pod 'FirebaseFirestore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master' -``` - -To access FirebaseMessaging via a checked out version of the firebase-ios-sdk repo do: - -``` -pod 'FirebaseCore', :path => '/path/to/firebase-ios-sdk' -pod 'FirebaseMessaging', :path => '/path/to/firebase-ios-sdk' -``` - -### Carthage (iOS only) - -Instructions for the experimental Carthage distribution are at -[Carthage](Carthage.md). - -### Rome - -Instructions for installing binary frameworks via -[Rome](https://github.com/CocoaPods/Rome) are at [Rome](Rome.md). - -### Using Firebase from a Framework or a library - -[Using Firebase from a Framework or a library](docs/firebase_in_libraries.md) - -## Development - -To develop Firebase software in this repository, ensure that you have at least -the following software: - - * Xcode 10.1 (or later) - * CocoaPods 1.7.2 (or later) - * [CocoaPods generate](https://github.com/square/cocoapods-generate) - -For the pod that you want to develop: - -`pod gen Firebase{name here}.podspec --local-sources=./ --auto-open --platforms=ios` - -Note: If the CocoaPods cache is out of date, you may need to run -`pod repo update` before the `pod gen` command. - -Note: Set the `--platforms` option to `macos` or `tvos` to develop/test for -those platforms. Since 10.2, Xcode does not properly handle multi-platform -CocoaPods workspaces. - -Firestore has a self contained Xcode project. See -[Firestore/README.md](Firestore/README.md). - -### Development for Catalyst -* `pod gen {name here}.podspec --local-sources=./ --auto-open --platforms=ios` -* Check the Mac box in the App-iOS Build Settings -* Sign the App in the Settings Signing & Capabilities tab -* Click Pods in the Project Manager -* Add Signing to the iOS host app and unit test targets -* Select the Unit-unit scheme -* Run it to build and test - -### Adding a New Firebase Pod - -See [AddNewPod.md](AddNewPod.md). - -### Code Formatting - -To ensure that the code is formatted consistently, run the script -[./scripts/style.sh](https://github.com/firebase/firebase-ios-sdk/blob/master/scripts/style.sh) -before creating a PR. - -Travis will verify that any code changes are done in a style compliant way. Install -`clang-format` and `swiftformat`. -These commands will get the right versions: - -``` -brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/c6f1cbd/Formula/clang-format.rb -brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/c13eda8/Formula/swiftformat.rb -``` - -Note: if you already have a newer version of these installed you may need to -`brew switch` to this version. - -To update this section, find the versions of clang-format and swiftformat.rb to -match the versions in the CI failure logs -[here](https://github.com/Homebrew/homebrew-core/tree/master/Formula). - -### Running Unit Tests - -Select a scheme and press Command-u to build a component and run its unit tests. - -#### Viewing Code Coverage (Deprecated) - -First, make sure that [xcov](https://github.com/nakiostudio/xcov) is installed with `gem install xcov`. - -After running the `AllUnitTests_iOS` scheme in Xcode, execute -`xcov --workspace Firebase.xcworkspace --scheme AllUnitTests_iOS --output_directory xcov_output` -at Example/ in the terminal. This will aggregate the coverage, and you can run `open xcov_output/index.html` to see the results. - -### Running Sample Apps -In order to run the sample apps and integration tests, you'll need valid -`GoogleService-Info.plist` files for those samples. The Firebase Xcode project contains dummy plist -files without real values, but can be replaced with real plist files. To get your own -`GoogleService-Info.plist` files: - -1. Go to the [Firebase Console](https://console.firebase.google.com/) -2. Create a new Firebase project, if you don't already have one -3. For each sample app you want to test, create a new Firebase app with the sample app's bundle -identifier (e.g. `com.google.Database-Example`) -4. Download the resulting `GoogleService-Info.plist` and replace the appropriate dummy plist file -(e.g. in [Example/Database/App/](Example/Database/App/)); - -Some sample apps like Firebase Messaging ([Example/Messaging/App](Example/Messaging/App)) require -special Apple capabilities, and you will have to change the sample app to use a unique bundle -identifier that you can control in your own Apple Developer account. - -## Specific Component Instructions -See the sections below for any special instructions for those components. - -### Firebase Auth - -If you're doing specific Firebase Auth development, see -[the Auth Sample README](FirebaseAuth/Tests/Sample/README.md) for instructions about -building and running the FirebaseAuth pod along with various samples and tests. - -### Firebase Database - -The Firebase Database Integration tests can be run against a locally running Database Emulator -or against a production instance. - -To run against a local emulator instance, invoke `./scripts/run_database_emulator.sh start` before -running the integration test. - -To run against a production instance, provide a valid GoogleServices-Info.plist and copy it to -`Example/Database/App/GoogleService-Info.plist`. Your Security Rule must be set to -[public](https://firebase.google.com/docs/database/security/quickstart) while your tests are -running. - -### Firebase Storage - -To run the Storage Integration tests, follow the instructions in -[FIRStorageIntegrationTests.m](FirebaseStorage/Tests/Integration/FIRStorageIntegrationTests.m). - -#### Push Notifications - -Push notifications can only be delivered to specially provisioned App IDs in the developer portal. -In order to actually test receiving push notifications, you will need to: - -1. Change the bundle identifier of the sample app to something you own in your Apple Developer -account, and enable that App ID for push notifications. -2. You'll also need to -[upload your APNs Provider Authentication Key or certificate to the Firebase Console](https://firebase.google.com/docs/cloud-messaging/ios/certs) -at **Project Settings > Cloud Messaging > [Your Firebase App]**. -3. Ensure your iOS device is added to your Apple Developer portal as a test device. - -#### iOS Simulator - -The iOS Simulator cannot register for remote notifications, and will not receive push notifications. -In order to receive push notifications, you'll have to follow the steps above and run the app on a -physical device. - -## Community Supported Efforts - -We've seen an amazing amount of interest and contributions to improve the Firebase SDKs, and we are -very grateful! We'd like to empower as many developers as we can to be able to use Firebase and -participate in the Firebase community. - -### tvOS, macOS, watchOS and Catalyst -Thanks to contributions from the community, many of Firebase SDKs now compile, run unit tests, and work on -tvOS, macOS, watchOS and Catalyst. - -For tvOS, checkout the [Sample](Example/tvOSSample). -For watchOS, currently only Messaging and Storage (and their dependencies) have limited support. Checkout the -[Independent Watch App Sample](Example/watchOSSample). - -Keep in mind that macOS, tvOS, watchOS and Catalyst are not officially supported by Firebase, and this -repository is actively developed primarily for iOS. While we can catch basic unit test issues with -Travis, there may be some changes where the SDK no longer works as expected on macOS, tvOS or watchOS. If you -encounter this, please [file an issue](https://github.com/firebase/firebase-ios-sdk/issues). - -During app setup in the console, you may get to a step that mentions something like "Checking if the app -has communicated with our servers". This relies on Analytics and will not work on macOS/tvOS/watchOS/Catalyst. -**It's safe to ignore the message and continue**, the rest of the SDKs will work as expected. - -To install, add a subset of the following to the Podfile: - -``` -pod 'Firebase/ABTesting' # No watchOS support yet -pod 'Firebase/Auth' # No watchOS support yet -pod 'Firebase/Crashlytics' # No watchOS support yet -pod 'Firebase/Database' # No watchOS support yet -pod 'Firebase/Firestore' # No watchOS support yet -pod 'Firebase/Functions' # No watchOS support yet -pod 'Firebase/Messaging' -pod 'Firebase/RemoteConfig' # No watchOS support yet -pod 'Firebase/Storage' -``` - -#### Additional Catalyst Notes - -* FirebaseAuth and FirebaseMessaging require adding `Keychain Sharing Capability` -to Build Settings. -* FirebaseFirestore requires signing the -[gRPC Resource target](https://github.com/firebase/firebase-ios-sdk/issues/3500#issuecomment-518741681). - -## Roadmap - -See [Roadmap](ROADMAP.md) for more about the Firebase iOS SDK Open Source -plans and directions. - -## Contributing - -See [Contributing](CONTRIBUTING.md) for more information on contributing to the Firebase -iOS SDK. - -## License - -The contents of this repository is licensed under the -[Apache License, version 2.0](http://www.apache.org/licenses/LICENSE-2.0). - -Your use of Firebase is governed by the -[Terms of Service for Firebase Services](https://firebase.google.com/terms/). - -[gh-actions]: https://github.com/firebase/firebase-ios-sdk/actions -[gh-abtesting-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/abtesting/badge.svg -[gh-auth-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/auth/badge.svg -[gh-core-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/core/badge.svg -[gh-crashlytics-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/crashlytics/badge.svg -[gh-database-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/database/badge.svg -[gh-datatransport-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/datatransport/badge.svg -[gh-dynamiclinks-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/dynamiclinks/badge.svg -[gh-firebasepod-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/firebasepod/badge.svg -[gh-firestore-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/firestore/badge.svg -[gh-functions-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/functions/badge.svg -[gh-inappmessaging-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/inappmessaging/badge.svg -[gh-interop-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/interop/badge.svg -[gh-messaging-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/messaging/badge.svg -[gh-remoteconfig-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/remoteconfig/badge.svg -[gh-storage-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/storage/badge.svg -[gh-symbolcollision-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/symbolcollision/badge.svg -[gh-zip-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/zip/badge.svg diff --git a/iphone/Maps/Pods/Flurry-iOS-SDK/Flurry/Flurry.h b/iphone/Maps/Pods/Flurry-iOS-SDK/Flurry/Flurry.h deleted file mode 100644 index ce928243cc..0000000000 --- a/iphone/Maps/Pods/Flurry-iOS-SDK/Flurry/Flurry.h +++ /dev/null @@ -1,1237 +0,0 @@ -// -// Flurry.h -// Flurry iOS Analytics Agent -// -// Copyright 2016 Flurry, Inc. All rights reserved. -// -// Methods in this header file are for use with Flurry Analytics - -#import -#if !TARGET_OS_WATCH -@class SKPaymentTransaction; -#endif -#if TARGET_OS_TV -@class JSContext; -#endif - -#import "FlurrySessionBuilder.h" - -/*! - * @brief Enum for payment transaction state - */ -typedef enum { - FlurryPaymentTransactionStatePurchasing = 0, - FlurryPaymentTransactionStateSuccess = 1, - FlurryPaymentTransactionStateFailure = 2, - FlurryPaymentTransactionStateRestored = 3, - FlurryPaymentTransactionStateDeferred = 4 -} FlurryPaymentTransactionState; - - -typedef enum { - FlurryEventFailed = 0, - FlurryEventRecorded, - FlurryEventUniqueCountExceeded, - FlurryEventParamsCountExceeded, - FlurryEventLogCountExceeded, - FlurryEventLoggingDelayed, - FlurryEventAnalyticsDisabled -} FlurryEventRecordStatus; - - -/*! - * @brief Enum for logging events that occur within a syndicated app - * @since 6.7.0 - * - */ - -typedef enum { - FlurrySyndicationReblog = 0, - FlurrySyndicationFastReblog = 1, - FlurrySyndicationSourceClick = 2, - FlurrySyndicationLike = 3, - FlurrySyndicationShareClick = 4, - FlurrySyndicationPostSend = 5 - -}FlurrySyndicationEvent; - -extern NSString* _Nonnull const kSyndicationiOSDeepLink; -extern NSString* _Nonnull const kSyndicationAndroidDeepLink; -extern NSString* _Nonnull const kSyndicationWebDeepLink; - - -typedef enum { - FlurryTransactionRecordFailed = 0, - FlurryTransactionRecorded, - FlurryTransactionRecordExceeded, - FlurryTransactionRecodingDisabled -} FlurryTransactionRecordStatus; - -#if !TARGET_OS_WATCH - -/*! - * @brief Provides all available delegates for receiving callbacks related to Flurry analytics. - * - * Set of methods that allow developers to manage and take actions within - * different phases of App. - * - * @note This class serves as a delegate for Flurry. \n - * For additional information on how to use Flurry's Ads SDK to - * attract high-quality users and monetize your user base see Support Center - Publisher. - * @author 2010 - 2014 Flurry, Inc. All Rights Reserved. - * @version 6.3.0 - * - */ -@protocol FlurryDelegate - -/*! - * @brief Invoked when analytics session is created - * @since 6.3.0 - * - * This method informs the app that an analytics session is created. - * - * @see Flurry#startSession for details on session. - * - * @param info A dictionary of session information: sessionID, apiKey - * @note By default the callback is received on the global_queue with default priority. Optionally users can choose to receive on a specific queue by using - * + (void)setDelegate:(nonnull id)delegate withCallbackQueue:(dispatch_queue_t)flurryCallbackQueue; - */ -- (void)flurrySessionDidCreateWithInfo:(nonnull NSDictionary*)info; - -@end - -/*! - * @brief Provides all available methods for defining and reporting Analytics from use - * of your app. - * - * Set of methods that allow developers to capture detailed, aggregate information - * regarding the use of their app by end users. - * - * @note This class provides methods necessary for correct function of Flurry.h. - * For information on how to use Flurry's Ads SDK to - * attract high-quality users and monetize your user base see Support Center - Publishers. - * - * @version 4.3.0 - * - */ - -@interface Flurry : NSObject { -} - -#pragma mark - Pre-Session Calls - -/** @name Pre-Session Calls - * Optional sdk settings that should be called before start session. - */ -//@{ - -/*! - * @brief Retrieves the Flurry Agent Build Version. - * @since 2.7 - * - * This is an optional method that retrieves the Flurry Agent Version the app is running under. - * It is most often used if reporting an unexpected behavior of the SDK to - * Flurry Support - * - * @see #setLogLevel: for information on how to view debugging information on your console. - * - * @return The agent version of the Flurry SDK. - * - */ -+ (nonnull NSString *)getFlurryAgentVersion; - -/*! - * @brief Displays an exception in the debug log if thrown during a Session. - * @since 2.7 - * - * This is an optional method that augments the debug logs with exceptions that occur during the session. - * You must both capture exceptions to Flurry and set debug logging to enabled for this method to - * display information to the console. The default setting for this method is @c NO. - * - * @note This method can be called at any point in the execution of your application and - * the setting will take effect for SDK activity after this call. - * - * @see #setLogLevel: for information on how to view debugging information on your console. \n - * #logError:message:exception: for details on logging exceptions. \n - * #logError:message:error: for details on logging errors. - * - * @param value @c YES to show errors in debug logs, @c NO to omit errors in debug logs. - */ -+ (void)setShowErrorInLogEnabled:(BOOL)value; - -/*! - * @brief Generates debug logs to console. - * @since 4.2.2 - * - * This is an optional method that displays debug information related to the Flurry SDK. - * display information to the console. The default setting for this method is @c FlurryLogLevelCriticalOnly. - * - * @note The log level can be changed at any point in the execution of your application and - * the level that is set will take effect for SDK activity after this call. - * - * @param value Log level - * - */ -+ (void)setLogLevel:(FlurryLogLevel)value; -//@} - - - -#pragma mark - Flurry Delegate setters - -/*! - * @brief Set Flurry delegate for callback on session creation. - * @since 6.3.0 - * - * @code - * - (BOOL) application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions - { - // Optional Flurry startup methods - // If self implements protocol, FlurryDelegate - [Flurry setDelegate:self]; - // .... - } - * @endcode - * - - */ -+ (void)setDelegate:(nonnull id)delegate; - -/*! - * @brief Set Flurry delegate for callback on session creation with a callback queue. - * @since 8.4.4 - * - * @code - * - (BOOL) application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions - { - // Optional Flurry startup methods - // If self implements protocol, FlurryDelegate - [Flurry setDelegate:self withCallbackQueue:queue]; - // .... - } - * @endcode - * - */ -+ (void)setDelegate:(nonnull id)delegate withCallbackQueue:(nonnull dispatch_queue_t)flurryCallbackQueue; - -#pragma mark - start session APIs' - -/** @name startSession APIs' - * API to start session by passing API key, optionally passing launchOptions and/or customizing the session settings/options - * Only one of the API must be called to start the session - */ -//@{ - -/*! - * @brief Start a Flurry session for the project denoted by @c apiKey. - * @since 2.6 - * - * This method serves as the entry point to Flurry Analytics collection. It must be - * called in the scope of @c applicationDidFinishLaunching. The session will continue - * for the period the app is in the foreground until your app is backgrounded for the - * time specified in #withSessionContinueSeconds:. If the app is resumed in that period - * the session will continue, otherwise a new session will begin. - * - * Crash reporting will not be enabled. See #withCrashReporting: in FlurrySessionBuilder for - * more information. - * - * @note If testing on a simulator, please be sure to send App to background via home - * button. Flurry depends on the iOS lifecycle to be complete for full reporting. - * - * @see #withSessionContinueSeconds: for details on setting a custom session timeout in FlurrySessionBuilder. - * - * @code - * - (void)applicationDidFinishLaunching:(UIApplication *)application - { - // Optional Flurry startup methods - [Flurry startSession:@"YOUR_API_KEY"]; - // .... - } - * @endcode - * - * @param apiKey The API key for this project. - */ - -+ (void)startSession:(nonnull NSString *)apiKey; - - -/*! - * @brief Start a Flurry session for the project denoted by @c apiKey. Gather more information by passing in the launchOptions. - * @since 4.0.8 - * - * This method overloads on the #startSession: and serves as the entry point to Flurry Analytics collection. It must be - * called in the scope of @c applicationDidFinishLaunching passing in the launchOptions param. - * The session will continue - * for the period the app is in the foreground until your app is backgrounded for the - * time specified in #withSessionContinueSeconds:. If the app is resumed in that period - * the session will continue, otherwise a new session will begin. - * - * Crash reporting will not be enabled. See #withCrashReporting: in FlurrySessionBuilder for - * more information. - * - * @note If testing on a simulator, please be sure to send App to background via home - * button. Flurry depends on the iOS lifecycle to be complete for full reporting. - * - * @see #withSessionContinueSeconds: for details on setting a custom session timeout in FlurrySessionBuilder. - * - * @code - * - (BOOL) application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions - { - // Optional Flurry startup methods - [Flurry startSession:@"YOUR_API_KEY" withOptions:launchOptions]; - // .... - } - * @endcode - * - * @param apiKey The API key for this project. - * @param options passed launchOptions from the applicatin's didFinishLaunchingWithOptions:(NSDictionary *)launchOptions - - */ -+ (void) startSession:(nonnull NSString *)apiKey withOptions:(nullable id)options; - - -/*! - * @brief Start a Flurry session for the project denoted by @c apiKey by specifying the desired session construction options. - * Gather more information by passing in the launchOptions. - * - * @since 7.7.0 - * - * This method overloads on the #startSession:withOptions: and serves as the entry point to Flurry Analytics collection. It must be - * called in the scope of @c applicationDidFinishLaunching passing in the launchOptions param. - * The session will continue - * for the period the app is in the foreground until your app is backgrounded for the - * time specified in #withSessionContinueSeconds:. If the app is resumed in that period - * the session will continue, otherwise a new session will begin. - * - * @note If testing on a simulator, please be sure to send App to background via home - * button. Flurry depends on the iOS lifecycle to be complete for full reporting. - * - * @see #withSessionContinueSeconds: for details on setting a custom session timeout in FlurrySessionBuilder. - * - * @code - * - (BOOL) application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions - { - // Optional Flurry startup methods - FlurrySessionBuilder* builder = [[[[[FlurrySessionBuilder new] withLogLevel:FlurryLogLevelDebug] - withCrashReporting:NO] - withSessionContinueSeconds:10] - withAppVersion:@"0.1.2"]; - - [Flurry startSession:@"YOUR_API_KEY" withOptions:launchOptions withSessionBuilder:sessionBuilder]; - // .... - } - * @endcode - * - * @param apiKey The API key for this project. - * @param options passed launchOptions from the applicatin's didFinishLaunchingWithOptions:(NSDictionary *)launchOptions - * @param sessionBuilder pass in the session builder object to specify that session construction options - - */ -+ (void) startSession:(nonnull NSString *)apiKey withOptions:(nullable id)options withSessionBuilder:(nullable FlurrySessionBuilder*) sessionBuilder; - - -/*! - * @brief Start a Flurry session for the project denoted by @c apiKey by specifying the desired session construction options. - * @since 7.7.0 - * - * This method overloads on the #startSession: and serves as the entry point to Flurry Analytics collection. It must be - * called in the scope of @c applicationDidFinishLaunching. - * The session will continue - * for the period the app is in the foreground until your app is backgrounded for the - * time specified in #withSessionContinueSeconds:. If the app is resumed in that period - * the session will continue, otherwise a new session will begin. - * - * @note If testing on a simulator, please be sure to send App to background via home - * button. Flurry depends on the iOS lifecycle to be complete for full reporting. - * - * @see #withSessionContinueSeconds: for details on setting a custom session timeout in FlurrySessionBuilder. - * - * @code - * - (BOOL) application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions - { - // Optional Flurry startup methods - FlurrySessionBuilder* builder = [[[[[FlurrySessionBuilder new] withLogLevel:FlurryLogLevelDebug] - withCrashReporting:NO] - withSessionContinueSeconds:10] - withAppVersion:@"0.1.2"]; - - [Flurry startSession:@"YOUR_API_KEY" withSessionBuilder:sessionBuilder]; - // .... - } - * @endcode - * - * @param apiKey The API key for this project. - * @param sessionBuilder pass in the session builder object to specify that session construction options - */ -+ (void) startSession:(nonnull NSString *)apiKey withSessionBuilder:(nullable FlurrySessionBuilder *)sessionBuilder; -//@} - -#pragma mark - Session Details - -/*! - * @brief Returns true if a session currently exists and is active. - * @since 6.0.0 - * - * @code - * - (BOOL) application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions - { - // Optional Flurry startup methods - [Flurry activeSessionExists]; - // .... - } - * @endcode - * - */ -+ (BOOL)activeSessionExists; - -/*! - * @brief Returns the session ID of the current active session. - * @since 6.3.0 - * - * @code - * - (BOOL) application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions - { - // Optional Flurry startup methods - [Flurry getSessionID]; - // .... - } - * @endcode - * - - */ -+ (nonnull NSString*)getSessionID; - -#pragma mark - Manual session pausing - -#if !TARGET_OS_TV -/*! - * @brief Pauses a Flurry session left running in background. - * @since 4.2.2 - * - * This method can be called when application finished all background tasks (such as playing music) to pause session. - * - * @code - * - (void)allBackgroundTasksFinished - { - // .... - [Flurry pauseBackgroundSession]; - // .... - } - * @endcode - * - */ -+ (void)pauseBackgroundSession; -#endif - -#pragma mark - User Info Setters and Getters - -/** @name User Info - * Methods to set user information. - */ -//@{ - -/*! - * @brief Assign a unique id for a user in your app. - * @since 2.7 - * - * @note Please be sure not to use this method to pass any private or confidential information - * about the user. - * - * @param userID The app id for a user. - */ -+ (void)setUserID:(nullable NSString *)userID; - -/*! - * @brief Set your user's age in years. - * @since 2.7 - * - * Use this method to capture the age of your user. Only use this method if you collect this - * information explictly from your user (i.e. - there is no need to set a default value). - * - * @note The age is aggregated across all users of your app and not available on a per user - * basis. - * - * @param age Reported age of user. - * - */ -+ (void)setAge:(int)age; - -/*! - * @brief Set your user's gender. - * @since 2.7 - * - * Use this method to capture the gender of your user. Only use this method if you collect this - * information explictly from your user (i.e. - there is no need to set a default value). Allowable - * values are @c @"m" or @c @"f" - * - * @note The gender is aggregated across all users of your app and not available on a per user - * basis. - * - * @param gender Reported gender of user. - * - */ -+ (void)setGender:(nonnull NSString *)gender; // user's gender m or f - -//@} - -/** @name Location Reporting - * Opt-out Methods for setting location information. - */ -//@{ -/*! - * @brief Turn on/off location information of the session (default is on). - * @since 8.4.0 - * - * Use CLLocationManager to start the location tracking of the session. Flurry does not - * prompt users for location permission, we fetch the available location in device daemon. - * - * @note Only the last location in cache is captured per session. \n - * Regardless of accuracy specified, the Flurry SDK will only report location at city level or higher. \n - * Location is aggregated across all users of your app and not available on a per user basis. \n - * This information should only be captured if it is germaine to the use of your app. - * - * @code - CLLocationManager *locationManager = [[CLLocationManager alloc] init]; - [locationManager startUpdatingLocation]; - * @endcode - * - * It is on by default. After starting the location manager, you can turn off - * opt-out location tracking by calling this method. - * - * @code - [Flurry trackPreciseLocation:NO]; - * @endcode - * @param state The boolean to switch on/off for location tracking - * @return a boolean, if the state is YES, it tests device/app permission. If permission - * is granted, it returns NO. If permission is valid, it returns YES. If the - * state is NO, it always returns NO. - */ -+ (BOOL)trackPreciseLocation:(BOOL)state; - -//@} - -/** @name Session Reporting Calls - * Optional methods that can be called at any point to control session reporting. - */ -//@{ - -/*! - * @brief Set session to report when app closes. - * @since 2.7 - * @deprecated since 10.0.2. - * - * Use this method report session data when the app is closed. The default value is @c YES. - * - * @note This method is rarely invoked in iOS >= 3.2 due to the updated iOS lifecycle. - * - * @see #setSessionReportsOnPauseEnabled: - * - * @param sendSessionReportsOnClose YES to send on close, NO to omit reporting on close. - * - */ -+ (void)setSessionReportsOnCloseEnabled:(BOOL)sendSessionReportsOnClose __attribute__ ((deprecated)); - -/*! - * @brief Set session to report when app is sent to the background. - * @since 2.7 - * @deprecated since 10.0.2. - * - * Use this method report session data when the app is paused. The default value is @c YES. - * - * @param setSessionReportsOnPauseEnabled YES to send on pause, NO to omit reporting on pause. - * - */ -+ (void)setSessionReportsOnPauseEnabled:(BOOL)setSessionReportsOnPauseEnabled __attribute__ ((deprecated)); - -/*! - * @brief Enables implicit recording of Apple Store transactions. - * @since 7.9.0 - * - * This method needs to be called before any transaction is finialized. - * @note: Needs a 'required' dependency on StoreKit for this API to function correctly. - * - * @param value YES to enable transaction logging, NO to stop transaction logging. - * - */ -+ (void) setIAPReportingEnabled:(BOOL)value; - - -#pragma mark - Add sessionOrigin, originAttributes and sessionProperties - -/*! - * @brief Adds an session origin attached to each session specified by @c sessionOriginName. - * @since 6.5.0 - * - * This method allows you to specify session origin for each session. This is different than #addOrigin:withVersion: (originAttributes) which is used for third party - * wrappers after every session start. - * - * @code - * - (void)interestingMethod - { - // ... after calling startSession - [Flurry addSessionOrigin:@"facebuk"]; - // more code ... - } - * @endcode - * - * @param sessionOriginName Name of the origin. - */ -+ (void)addSessionOrigin:(nonnull NSString *)sessionOriginName; - -/*! - * @brief Adds an session origin and deep link attached to each session specified by @c sessionOriginName and @c deepLink. - * @since 6.5.0 - * - * This method allows you to specify session origin and deep link for each session. This is different than addOrigin:withVersion: (originAttributes) which is used for third party - * wrappers after every session start. - * - * - * @code - * - (void)interestingMethod - { - // ... after calling startSession - [Flurry addSessionOrigin:@"facebuk" withDeepLink:@"https://www.facebuk.com/xyz/"]; - // more code ... - } - * @endcode - * - * @param sessionOriginName Name of the origin. - * @param deepLink Url of the deep Link. - */ -+ (void)addSessionOrigin:(nonnull NSString *)sessionOriginName - withDeepLink:(nonnull NSString *)deepLink; - -/*! - * @brief Adds a custom parameterized session parameters @c parameters. - * @since 6.5.0 - * - * This method allows you to associate parameters with a session. Parameters - * are valuable as they allow you to store characteristics of a session. - * - * @note You should not pass private or confidential information about your origin info in a - * custom origin. \n - * A maximum of 10 parameter names may be associated with any origin. Sending - * over 10 parameter names with a single origin will result in no parameters being logged - * for that origin. - * - * - * @code - * - (void)interestingMethod - { - // ... after calling startSession - NSDictionary *params = - [NSDictionary dictionaryWithObjectsAndKeys:@"Session Info Item", // Parameter Value - @"Session Info Item Key", // Parameter Name - nil]; - [Flurry sessionProperties:params]; - // more code ... - } - * @endcode - * - * @param parameters An immutable copy of map containing Name-Value pairs of parameters. - */ -+ (void)sessionProperties:(nonnull NSDictionary *)parameters; - -/*! - * @brief Adds an SDK origin specified by @c originName and @c originVersion. - * @since 5.0.0 - * - * This method allows you to specify origin within your Flurry SDK wrapper. As a general rule - * you should capture all the origin info related to your wrapper for Flurry SDK after every session start. - * - * @see #addOrigin:withVersion:withParameters: for details on reporting origin info with parameters. \n - * - * @code - * - (void)interestingSDKWrapperLibraryfunction - { - // ... after calling startSession - [Flurry addOrigin:@"Interesting_Wrapper" withVersion:@"1.0.0"]; - // more code ... - } - * @endcode - * - * @param originName Name of the origin. - * @param originVersion Version string of the origin wrapper - */ -+ (void)addOrigin:(nonnull NSString *)originName - withVersion:(nonnull NSString *)originVersion; - -/*! - * @brief Adds a custom parameterized origin specified by @c originName with @c originVersion and @c parameters. - * @since 5.0.0 - * - * This method overloads #addOrigin to allow you to associate parameters with an origin attribute. Parameters - * are valuable as they allow you to store characteristics of an origin. - * - * @note You should not pass private or confidential information about your origin info in a - * custom origin. \n - * A maximum of 9 parameter names may be associated with any origin. Sending - * over 10 parameter names with a single origin will result in no parameters being logged - * for that origin. - * - * - * @code - * - (void)userPurchasedSomethingCool - { - NSDictionary *params = - [NSDictionary dictionaryWithObjectsAndKeys:@"Origin Info Item", // Parameter Value - @"Origin Info Item Key", // Parameter Name - nil]; - // ... after calling startSession - [Flurry addOrigin:@"Interesting_Wrapper" withVersion:@"1.0.0" withParameters:params]; - // more code ... - } - * @endcode - * - * @param originName Name of the origin. - * @param originVersion Version string of the origin wrapper - * @param parameters An immutable copy of map containing Name-Value pairs of parameters. - */ -+ (void)addOrigin:(nonnull NSString *)originName - withVersion:(nonnull NSString*)originVersion - withParameters:(nullable NSDictionary *)parameters; - -#pragma mark - Event Logging - -/** @name Event and Error Logging - * Methods for reporting custom events and errors during the session. - */ -//@{ - -/*! - * @brief Records a custom event specified by @c eventName. - * @since 2.8.4 - * - * This method allows you to specify custom events within your app. As a general rule - * you should capture events related to user navigation within your app, any action - * around monetization, and other events as they are applicable to tracking progress - * towards your business goals. - * - * @note You should not pass private or confidential information about your users in a - * custom event. \n - * Where applicable, you should make a concerted effort to use timed events with - * parameters (#logEvent:withParameters:timed:) or events with parameters - * (#logEvent:withParameters:). This provides valuable information around the time the user - * spends within an action (e.g. - time spent on a level or viewing a page) or characteristics - * of an action (e.g. - Buy Event that has a Parameter of Widget with Value Golden Sword). - * - * @see #logEvent:withParameters: for details on storing events with parameters. \n - * #logEvent:timed: for details on storing timed events. \n - * #logEvent:withParameters:timed: for details on storing timed events with parameters. \n - * #endTimedEvent:withParameters: for details on stopping a timed event and (optionally) updating - * parameters. - * - * @code - * - (void)interestingAppAction - { - [Flurry logEvent:@"Interesting_Action"]; - // Perform interesting action - } - * @endcode - * - * @param eventName Name of the event. For maximum effectiveness, we recommend using a naming scheme - * that can be easily understood by non-technical people in your business domain. - * - * @return enum FlurryEventRecordStatus for the recording status of the logged event. - */ -+ (FlurryEventRecordStatus)logEvent:(nonnull NSString *)eventName; - -/*! - * @brief Records a custom parameterized event specified by @c eventName with @c parameters. - * @since 2.8.4 - * - * This method overloads #logEvent to allow you to associate parameters with an event. Parameters - * are extremely valuable as they allow you to store characteristics of an action. For example, - * if a user purchased an item it may be helpful to know what level that user was on. - * By setting this parameter you will be able to view a distribution of levels for the purcahsed - * event on the Flurrly Dev Portal. - * - * @note You should not pass private or confidential information about your users in a - * custom event. \n - * A maximum of 10 parameter names may be associated with any event. Sending - * over 10 parameter names with a single event will result in no parameters being logged - * for that event. You may specify an infinite number of Parameter values. For example, - * a Search Box would have 1 parameter name (e.g. - Search Box) and many values, which would - * allow you to see what values users look for the most in your app. \n - * Where applicable, you should make a concerted effort to use timed events with - * parameters (#logEvent:withParameters:timed:). This provides valuable information - * around the time the user spends within an action (e.g. - time spent on a level or - * viewing a page). - * - * @see #logEvent:withParameters:timed: for details on storing timed events with parameters. \n - * #endTimedEvent:withParameters: for details on stopping a timed event and (optionally) updating - * parameters. - * - * @code - * - (void)userPurchasedSomethingCool - { - NSDictionary *params = - [NSDictionary dictionaryWithObjectsAndKeys:@"Cool Item", // Parameter Value - @"Item Purchased", // Parameter Name - nil]; - [Flurry logEvent:@"Something Cool Purchased" withParameters:params]; - // Give user cool item - } - * @endcode - * - * @param eventName Name of the event. For maximum effectiveness, we recommend using a naming scheme - * that can be easily understood by non-technical people in your business domain. - * @param parameters An immutable copy of map containing Name-Value pairs of parameters. - * - * @return enum FlurryEventRecordStatus for the recording status of the logged event. - */ -+ (FlurryEventRecordStatus)logEvent:(nonnull NSString *)eventName - withParameters:(nullable NSDictionary *)parameters; - -/*! - * @brief Records a syndicated event specified by @c syndicationEvent. - * @since 6.7.0 - * - * This method is excusively for use by the Tumblr App, calls from others app will be ignored. - * - * @code - - (void) reblogButtonHandler - { - [Flurry logEvent:Reblog syndicationID:@"123", parameters:nil]; - // Perform - } - * @endcode - * - * @param syndicationEvent syndication event. - * @param syndicationID syndication ID that is associated with the event - * @param parameters use this to pass in syndication parameters such as - * kSyndicationiOSDeepLink, kSyndicationAndroidDeepLink, kSyndicationWebLinkDeepLink - * - * @return enum FlurryEventRecordStatus for the recording status of the logged event. - */ -+ (FlurryEventRecordStatus) logEvent:(FlurrySyndicationEvent) syndicationEvent - syndicationID:(nonnull NSString *) syndicationID - parameters:(nullable NSDictionary *) parameters; - -/*! - * @brief Records an Apple Store transaction. - * @since 7.8.0 - * - * This method needs to be called before a transaction is finished and finalized. - * @note: Needs a 'required' dependency on StoreKit for this API to function correctly. - * - * @param transaction an SKPaymentTransaction. - * @param statusCallback a callback gettign called when the status of ID that is associated with the event - * - */ -+ (void) logPaymentTransaction:(nonnull SKPaymentTransaction *)transaction - statusCallback:(nullable void(^)(FlurryTransactionRecordStatus))statusCallback; - - -/*! - * @brief Records Apple store IAP transaction params and user defined transaction params manually. - * @since 10.0.0 - * - * @deprecated since 11.0.0. - * @param transactionId a string Id for this IAP transaction - * @param productId a string Id for this IAP transaction product - * @param quantity a string representation of quantity of items purchased - * @param price a string representation of price of the item - * @param currency a string representation of currency of the transaction - * @param productName a string representation of product name - * @param transactionState a string representation of 0 - 4 representing transaction state: 0:Purchasing, 1:Success, 2:Failure, 3:Restored, 4:Deferred - * @param transactionParams a dictionary of user defined transaction params to record - * @param statusCallback a callback gettign called when the status of ID that is associated with the event - * - */ - -+ (void) logPaymentTransactionParamsWithTransactionId:(nonnull NSString *)transactionId - productId:(nonnull NSString *)productId - quantity:(nonnull NSString *)quantity - price:(nonnull NSString *)price - currency:(nonnull NSString *)currency - productName:(nonnull NSString *)productName - transactionState:(nonnull NSString *)transactionState - userDefinedParams:(nullable NSDictionary*)transactionParams - statusCallback:(nullable void(^)(FlurryTransactionRecordStatus))statusCallback __attribute__((deprecated("use +logFlurryPaymentTransactionParamsWithTransactionId:productId:quantity:price:currency:productName:transactionState:userDefinedParams:statusCallback:"))); - -/*! - * @brief Records Apple store IAP transaction params and user defined transaction params manually. - * @since 11.0.0 - * - * @param transactionId a string Id for this IAP transaction - * @param productId a string Id for this IAP transaction product - * @param quantity an integer representation of quantity of items purchased - * @param price a float representation of price of the item - * @param currency a string representation of currency of the transaction - * @param productName a string representation of product name - * @param transactionState an enum to convert transaction state to integer: 0:Purchasing, 1:Success, 2:Failure, 3:Restored, 4:Deferred - * @param transactionParams a dictionary of user defined transaction params to record - * @param statusCallback a callback gettign called when the status of ID that is associated with the event - * - */ - -+ (void) logFlurryPaymentTransactionParamsWithTransactionId:(nonnull NSString *)transactionId - productId:(nonnull NSString *)productId - quantity:(nonnull NSUInteger*)quantity - price:(nonnull NSDecimalNumber*)price - currency:(nonnull NSString *)currency - productName:(nonnull NSString *)productName - transactionState:(FlurryPaymentTransactionState)transactionState - userDefinedParams:(nullable NSDictionary *)transactionParams - statusCallback:(nullable void(^)(FlurryTransactionRecordStatus))statusCallback; - - -#pragma mark - Timed Event Logging - -/*! - * @brief Records a timed event specified by @c eventName. - * @since 2.8.4 - * - * This method overloads #logEvent to allow you to capture the length of an event. This can - * be extremely valuable to understand the level of engagement with a particular action. For - * example, you can capture how long a user spends on a level or reading an article. - * - * @note You should not pass private or confidential information about your users in a - * custom event. \n - * Where applicable, you should make a concerted effort to use parameters with your timed - * events (#logEvent:withParameters:timed:). This provides valuable information - * around the characteristics of an action (e.g. - Buy Event that has a Parameter of Widget with - * Value Golden Sword). - * - * @see #logEvent:withParameters:timed: for details on storing timed events with parameters. \n - * #endTimedEvent:withParameters: for details on stopping a timed event and (optionally) updating - * parameters. - * - * @code - * - (void)startLevel - { - [Flurry logEvent:@"Level Played" timed:YES]; - // Start user on level - } - - - (void)endLevel - { - [Flurry endTimedEvent:@"Level Played" withParameters:nil]; - // User done with level - } - * @endcode - * - * @param eventName Name of the event. For maximum effectiveness, we recommend using a naming scheme - * that can be easily understood by non-technical people in your business domain. - * @param timed Specifies the event will be timed.. - * - * @return enum FlurryEventRecordStatus for the recording status of the logged event. - */ -+ (FlurryEventRecordStatus)logEvent:(nonnull NSString *)eventName timed:(BOOL)timed; - -/*! - * @brief Records a custom parameterized timed event specified by @c eventName with @c parameters. - * @since 2.8.4 - * - * This method overloads #logEvent to allow you to capture the length of an event with parameters. - * This can be extremely valuable to understand the level of engagement with a particular action - * and the characteristics associated with that action. For example, you can capture how long a user - * spends on a level or reading an article. Parameters can be used to capture, for example, the - * author of an article or if something was purchased while on the level. - * - * @note You should not pass private or confidential information about your users in a - * custom event. - * - * @see #endTimedEvent:withParameters: for details on stopping a timed event and (optionally) updating - * parameters. - * - * @code - * - (void)startLevel - { - NSDictionary *params = - [NSDictionary dictionaryWithObjectsAndKeys:@"100", // Parameter Value - @"Current Points", // Parameter Name - nil]; - - [Flurry logEvent:@"Level Played" withParameters:params timed:YES]; - // Start user on level - } - - - (void)endLevel - { - // User gained additional 100 points in Level - NSDictionary *params = - [NSDictionary dictionaryWithObjectsAndKeys:@"200", // Parameter Value - @"Current Points", // Parameter Name - nil]; - [Flurry endTimedEvent:@"Level Played" withParameters:params]; - // User done with level - } - * @endcode - * - * @param eventName Name of the event. For maximum effectiveness, we recommend using a naming scheme - * that can be easily understood by non-technical people in your business domain. - * @param parameters An immutable copy of map containing Name-Value pairs of parameters. - * @param timed Specifies the event will be timed.. - * - * @return enum FlurryEventRecordStatus for the recording status of the logged event. - */ -+ (FlurryEventRecordStatus)logEvent:(nonnull NSString *)eventName withParameters:(nullable NSDictionary *)parameters timed:(BOOL)timed; - -/*! - * @brief Ends a timed event specified by @c eventName and optionally updates parameters with @c parameters. - * @since 2.8.4 - * - * This method ends an existing timed event. If parameters are provided, this will overwrite existing - * parameters with the same name or create new parameters if the name does not exist in the parameter - * map set by #logEvent:withParameters:timed:. - * - * @note You should not pass private or confidential information about your users in a - * custom event. \n - * If the app is backgrounded prior to ending a timed event, the Flurry SDK will automatically - * end the timer on the event. \n - * #endTimedEvent:withParameters: is ignored if called on a previously - * terminated event. - * - * @see #logEvent:withParameters:timed: for details on starting a timed event with parameters. - * - * @code - * - (void)startLevel - { - NSDictionary *params = - [NSDictionary dictionaryWithObjectsAndKeys:@"100", // Parameter Value - @"Current Points", // Parameter Name - nil]; - - [Flurry logEvent:@"Level Played" withParameters:params timed:YES]; - // Start user on level - } - - - (void)endLevel - { - // User gained additional 100 points in Level - NSDictionary *params = - [NSDictionary dictionaryWithObjectsAndKeys:@"200", // Parameter Value - @"Current Points", // Parameter Name - nil]; - [Flurry endTimedEvent:@"Level Played" withParameters:params]; - // User done with level - } - * @endcode - * - * @param eventName Name of the event. For maximum effectiveness, we recommend using a naming scheme - * that can be easily understood by non-technical people in your business domain. - * @param parameters An immutable copy of map containing Name-Value pairs of parameters. - */ -+ (void)endTimedEvent:(nonnull NSString *)eventName withParameters:(nullable NSDictionary *)parameters; // non-nil parameters will update the parameters - -#pragma mark - Exceptions Logging - -/*! - * @brief Records an app exception. Commonly used to catch unhandled exceptions. - * @since 2.7 - * - * This method captures an exception for reporting to Flurry. We recommend adding an uncaught - * exception listener to capture any exceptions that occur during usage that is not - * anticipated by your app. - * - * @see #logError:message:error: for details on capturing errors. - * - * @code - * - (void) uncaughtExceptionHandler(NSException *exception) - { - [Flurry logError:@"Uncaught" message:@"Crash!" exception:exception]; - } - - - (void)applicationDidFinishLaunching:(UIApplication *)application - { - NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler); - [Flurry startSession:@"YOUR_API_KEY"]; - // .... - } - * @endcode - * - * @param errorID Name of the error. - * @param message The message to associate with the error. - * @param exception The exception object to report. - */ -+ (void)logError:(nonnull NSString *)errorID - message:(nullable NSString *)message - exception:(nullable NSException *)exception; - -/*! - * @brief Records an app exception. Commonly used to catch unhandled exceptions. - * @since 8.4.0 - * - * This method overloads on logError:message:exception: to capture an exception with parameters for reporting to Flurry. We recommend adding an uncaught - * exception listener to capture any exceptions that occur during usage that is not - * anticipated by your app. - * - * @see #logError:message:error:withParameters: for details on capturing errors. - * - * @code - * - (void) uncaughtExceptionHandler(NSException *exception) - { - NSDictionary* crashParameters = [NSDictionary dictionaryWithObjectsAndKeys:@"AppVersion", @"3.2", nil]; - [Flurry logError:@"Uncaught" message:@"Crash!" exception:exception withParameters:crashParameters]; - } - - - (void)applicationDidFinishLaunching:(UIApplication *)application - { - NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler); - [Flurry startSession:@"YOUR_API_KEY"]; - // .... - } - * @endcode - * - * @param errorID Name of the error. - * @param message The message to associate with the error. - * @param exception The exception object to report. - * @param parameters Custom parameters associated with the exception - */ -+ (void)logError:(nonnull NSString *)errorID - message:(nullable NSString *)message - exception:(nullable NSException *)exception - withParameters:(nullable NSDictionary*)parameters; - -#pragma mark - Error Logging - -/*! - * @brief Records an app error for reporting to Flurry. - * @since 2.7 - * - * @see #logError:message:exception: for details on capturing exceptions. - * - * @code - * - (void)webView:(WKWebView *)webView didFailNavigation:(WKNavigation *)navigation withError:(NSError *)error; - * { - [Flurry logError:@"WebView No Load" message:[error localizedDescription] error:error]; - } - * @endcode - * - * @param errorID Name of the error. - * @param message The message to associate with the error. - * @param error The error object to report. - */ -+ (void)logError:(nonnull NSString *)errorID - message:(nullable NSString *)message - error:(nullable NSError *)error; - -/*! - * @brief Records an app error. - * @since 8.4.0 - * This method overloads on logError:message:error: to capture an error for reporting to Flurry. - * - * @see #logError:message:exception:withParameters: for details on capturing exceptions. - * - * @code - * - (void)webView:(WKWebView *)webView didFailNavigation:(WKNavigation *)navigation withError:(NSError *)error; - { - [Flurry logError:@"WebView No Load" message:[error localizedDescription] error:error]; - } - * @endcode - * - * @param errorID Name of the error. - * @param message The message to associate with the error. - * @param error The error object to report. - * @param parameters Custom parameters associated with the error - */ -+ (void)logError:(nonnull NSString *)errorID - message:(nullable NSString *)message - error:(nullable NSError *)error - withParameters:(nullable NSDictionary*)parameters; - -/*! - * @brief Leave a breadcrumb. - * @since 8.4.0 - * This method captures breadcrumbs of 250 characters. The last 207 recorded - * breadcrumbs are included in crash and error logs. - * Breadcrumbs are reset at every application launch. - * - * @code - * - (void)webView:(WKWebView *)webView didFailNavigation:(WKNavigation *)navigation withError:(NSError *)error; - { - [Flurry leaveBreadcrumb:@"WebView not loading"]; - } - * @endcode - * - * @param breadcrumb string. - * - */ -+ (void)leaveBreadcrumb:(nonnull NSString*)breadcrumb; -//@} - -#pragma mark - TVML JSContext - -#if TARGET_OS_TV -/*! - * @brief Registers the TVML's JSContext with the Flurry SDK. - * @since 1.0.0 - * - * - * appController The TVApplicationController object - * jsContext The JavaScript context object passed in - * - * This method is exclusively for use by the Client-Server TV apps. This method will internally register - * JavaScript APIs exposed on the TVJS domain with the Flurry SDK. The JavaScript methods available are: - * - * Flurry.logEvent(eventId: string); - * Flurry.logEvent(eventId: string, timed: boolean); - * Flurry.logEvent(eventId: string, parameters: object); - * Flurry.logEvent(eventId: string, parameters: object, timed: boolean); - * - * Flurry.endTimedEvent(eventId: string); - * Flurry.endTimedEvent(eventId: string, parameters: object); - * - * Flurry.onError(errorId: string, message: string, errorClass: string); - * Flurry.onError(errorId: string, message: string, errorClass: string, errorParams: object); - * - * Flurry.setAge(age: number); - * Flurry.setGender(gender: string); - * Flurry.setUserId(userId: string); - * - * Flurry.setSessionOrigin(originName: string, deepLink: string); - * Flurry.addOrigin(originName: string, originVersion: string); - * Flurry.addOrigin(originName: string, originVersion: string, originParameters: object); - * Flurry.addSessionProperty(name: string, value: string); - * - * Flurry.setIAPReportingEnabled(enableIAP: boolean); - * Flurry.getVersions(): object; - * - * Deprecated TVML JavaScript APIs: - * - * flurryLogEvent({String} eventName) - * flurryLogEvent({String} eventName, {object} params) - * flurryLogTimedEvent({String} eventName) - * flurryLogTimedEvent({String} eventName, {object} params) - * flurryEndTimedEvent({String} eventName, {object} params) - * flurryLogError({String} eventName, {String} message, {object} error) - * -> error : { - * errorDomain: {String}, - errorID: {Number}, - userInfo: {object} - * } - * flurrySetUserID({String} userID) - * flurrySetGender({String} gender) - * flurrySetAge({Number} age) - * - * @code - - (void)appController:(TVApplicationController *)appController evaluateAppJavaScriptInContext:(JSContext *)jsContext { - [Flurry registerJSContextWithContext:jsContext]; - } - * @endcode - * - * @param jscontext JavaScript context passed in by the -appController:evaluateAppJavaScriptInContext method - */ - -+ (void)registerJSContextWithContext:(JSContext * _Nonnull)jscontext; -#endif - -#pragma mark - Privacy dashboard - -/*! - * @brief Open privacy dashboard in Safari Browser async with a completion handler callback - * @since 8.5.0 - * - * This method is used to open a web page of privacy dashboard in external browser for user to access and edit their data under the scope of GDPR, in the callback, you are able to check whether privacy dashboard is successfully opened, and apply fallback logics. - * @note: Call this method after invoking #startSession: - * - * @param completionHandler a callback getting called when SDK finishes the attempt to openURL the privacy dashboard, the success boolean provided for checks and fallbacks. - * - */ -+ (void)openPrivacyDashboard:(nullable void(^)(BOOL success))completionHandler; - -@end - -#endif diff --git a/iphone/Maps/Pods/Flurry-iOS-SDK/Flurry/FlurryCCPA.h b/iphone/Maps/Pods/Flurry-iOS-SDK/Flurry/FlurryCCPA.h deleted file mode 100644 index 245f570a27..0000000000 --- a/iphone/Maps/Pods/Flurry-iOS-SDK/Flurry/FlurryCCPA.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// FlurryCCPA.h -// Flurry -// -// Created by Hunter Hays on 9/5/19. -// Copyright © 2019 Oath Inc. All rights reserved. -// - -#import - -@interface FlurryCCPA : NSObject - -/*! -*@brief An api to send ccpa compliance data to Flurry on the user's choice to opt out or opt in to data sale to third parties. -* @since 10.1.0 -* -* -* @param isOptOut boolean true if the user wants to opt out of data sale, the default value is false -*/ -+(void) setDataSaleOptOut: (BOOL) isOptOut; - -/*! -*@brief An api to allow the user to request Flurry delete their collected data from this app. -* @since 10.1.0 -* -*/ -+(void) setDelete; - -@end diff --git a/iphone/Maps/Pods/Flurry-iOS-SDK/Flurry/FlurryConsent.h b/iphone/Maps/Pods/Flurry-iOS-SDK/Flurry/FlurryConsent.h deleted file mode 100644 index 282725f1c3..0000000000 --- a/iphone/Maps/Pods/Flurry-iOS-SDK/Flurry/FlurryConsent.h +++ /dev/null @@ -1,60 +0,0 @@ -// -// FlurryConsent.h -// Flurry -// -// Created by Ishwarya Iyer on 4/2/18. -// Copyright © 2018 Flurry Inc. All rights reserved. -// - -#import - -@interface FlurryConsent : NSObject - -@property (nonatomic, assign, readonly) BOOL isGDPRScope; -@property (nonatomic, strong, readonly) NSDictionary* consentStrings; - -/*! - * @brief Use this api to initialize the FlurryConsent object. - * @since 8.5.0 - * - * This api initializes the consent object. This object needs to be registered with the SDK. - * - * @param isGDPRScope @c YES states that GDPR laws apply - * The default value is @c NO - * - * @param consentStrings NSDictionary* => . - * - * @note The values for ConsentStrings should be of correct base64url-encoded representation. - * @note ConsentStrings must be provided if "isGDPRScope" is set to YES for the consent information to be valid - * - */ -- (FlurryConsent*) initWithGDPRScope:(BOOL)isGDPRScope andConsentStrings:(NSDictionary*)consentStrings; - - -/*! - * @brief Use this api to register/update the consent information with the SDK. - * @since 8.5.0 - * - * This api can be called anytime to pass the consent information to the SDK. - * - * @see FlurrySessionBuilder#withConsent: to register the consent before starting Flurry. \n - * FlurryConsent#initWithGDPRScope:andConsentStrings to create the FlurryConsent object - * - * @param consent The FlurryConsent object which contains the GDPR scope flag and the consent strings - * - * @return indicates if the consent information provided is valid or not - * - */ -+ (BOOL) updateConsentInformation:(FlurryConsent*)consent; - -/*! - * @brief Use this api to get the consent information registered with the SDK. - * @since 8.5.0 - * - * This object is immutable. To update the consent a new FlurryConsent object must be created and passed on to the SDK - * - */ -+ (FlurryConsent*) getConsent; - -@end - diff --git a/iphone/Maps/Pods/Flurry-iOS-SDK/Flurry/FlurryEmpty.m b/iphone/Maps/Pods/Flurry-iOS-SDK/Flurry/FlurryEmpty.m deleted file mode 100644 index f38647f4e7..0000000000 --- a/iphone/Maps/Pods/Flurry-iOS-SDK/Flurry/FlurryEmpty.m +++ /dev/null @@ -1,6 +0,0 @@ - -#import "Flurry.h" - -@implementation Flurry (ForceLoad) - -@end \ No newline at end of file diff --git a/iphone/Maps/Pods/Flurry-iOS-SDK/Flurry/FlurrySKAdNetwork.h b/iphone/Maps/Pods/Flurry-iOS-SDK/Flurry/FlurrySKAdNetwork.h deleted file mode 100644 index 32e1cb3fe7..0000000000 --- a/iphone/Maps/Pods/Flurry-iOS-SDK/Flurry/FlurrySKAdNetwork.h +++ /dev/null @@ -1,50 +0,0 @@ -// -// FlurrySKAdNetwork.h -// SingularAdvertiserSampleApp -// -// Created by Hunter Hays on 7/22/20. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface FlurrySKAdNetwork : NSObject - -typedef NS_ENUM(NSUInteger, FlurryConversionValueEventType) { -NoEvent = 0, //0000 -Registration = 1, //0001 -Login, //0010 -Subscription, //0100 -InAppPurchase // 1000 - -}; - -/*! - *@brief Call this api to allow Flurry to set your conversion value. - * The final conversion value is a decimal number between 0-63. - * The conversion value is calculated from a 6 bit binary number. - * The first two bits represent days of user retention from 0-3 days - * The last four bits represent a true false state indicating if the user has completed the post install event. - * @since 11.0.0 - * - * - * @param event Event name using the FlurryConversionValueEventType defined above. - * - */ - -+ (void) flurryUpdateConversionValueWithEvent: (FlurryConversionValueEventType) event API_AVAILABLE(ios(14.0)); - -/*! - *@brief Call this api to send your conversion value to Flurry. You must calculate the conversion value yourself. - * - * @since 11.0.0 - * - * - * @param conversionValue The conversion value is a decimal number between 0-63. - */ - -+ (void) flurryUpdateConversionValue: (NSInteger) conversionValue API_AVAILABLE(ios(14.0)); -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/Flurry-iOS-SDK/Flurry/FlurrySessionBuilder.h b/iphone/Maps/Pods/Flurry-iOS-SDK/Flurry/FlurrySessionBuilder.h deleted file mode 100644 index a169b42abe..0000000000 --- a/iphone/Maps/Pods/Flurry-iOS-SDK/Flurry/FlurrySessionBuilder.h +++ /dev/null @@ -1,240 +0,0 @@ -// -// FlurrySessionBuilder.h -// Flurry -// -// Created by Akshay Bhandary on 7/14/16. -// Copyright © 2016 Flurry Inc. All rights reserved. -// - -#import -#import "FlurryConsent.h" -#import "FlurryCCPA.h" - - -/*! - * @brief Enum for setting up log output level. - * @since 4.2.0 - * - */ -typedef enum { - FlurryLogLevelNone = 0, //No output - FlurryLogLevelCriticalOnly, //Default, outputs only critical log events - FlurryLogLevelDebug, //Debug level, outputs critical and main log events - FlurryLogLevelAll //Highest level, outputs all log events -} FlurryLogLevel; - - -#if !TARGET_OS_WATCH - - -@interface FlurrySessionBuilder : NSObject - -/*! -*@brief An api to send ccpa compliance data to Flurry on the user's choice to opt out or opt in to data sale to third parties. -* @since 10.1.0 -* -* -* @param value boolean true if the user wants to opt out of data sale, the default value is false -*/ - -- (FlurrySessionBuilder*) withDataSaleOptOut:(BOOL)value; - - -/*! - * @brief Explicitly specifies the App Version that Flurry will use to group Analytics data. - * @since 7.7.0 - * - * This is an optional method that overrides the App Version Flurry uses for reporting. Flurry will - * use the CFBundleVersion in your info.plist file when this method is not invoked. - * - * @note There is a maximum of 605 versions allowed for a single app. - * - * @param value The custom version name. - */ -- (FlurrySessionBuilder*) withAppVersion:(NSString *)value; - - -/*! - * @brief Set the timeout for expiring a Flurry session. - * @since 7.7.0 - * - * This is an optional method that sets the time the app may be in the background before - * starting a new session upon resume. The default value for the session timeout is 10 - * seconds in the background. - * - * @param value The time in seconds to set the session timeout to. - */ -- (FlurrySessionBuilder*) withSessionContinueSeconds:(NSInteger)value; - - -/*! - * @brief Enable automatic collection of crash reports. - * @since 7.7.0 - * - * This is an optional method that collects crash reports when enabled. The - * default value is @c NO. - * - * @param value @c YES to enable collection of crash reports. - */ -- (FlurrySessionBuilder*) withCrashReporting:(BOOL)value; - -/*! - * @brief Generates debug logs to console. - * @since 7.7.0 - * - * This is an optional method that displays debug information related to the Flurry SDK. - * display information to the console. The default setting for this method is @c FlurryLogLevelCriticalOnly. - * - * @note The log level can be changed at any point in the execution of your application using the setLogLevel API defined in - * Flurry.h, see #setLogLevel for more info. - * - * @param value Log level - * - */ -- (FlurrySessionBuilder*) withLogLevel:(FlurryLogLevel) value; - - - -/*! - * @brief Displays an exception in the debug log if thrown during a Session. - * @since 7.7.0 - * - * This is an optional method that augments the debug logs with exceptions that occur during the session. - * You must both capture exceptions to Flurry and set the log level to Debug or All for this method to - * display information to the console. The default setting for this method is @c NO. - * - * @note This method can be called at any point in the execution of your application and - * the setting will take effect for SDK activity after this call. - * - * @see #setLogLevel: for information on how to view debugging information on your console. \n - * #logError:message:exception: for details on logging exceptions. \n - * #logError:message:error: for details on logging errors. - * - * @param value @c YES to show errors in debug logs, @c NO to omit errors in debug logs. - */ -- (FlurrySessionBuilder*) withShowErrorInLog:(BOOL) value; - - -/*! - * @brief Registers the consent information with the SDK. Consent information is used to determine if the gdpr laws are applicable - * @since 8.5.0 - * - * Use this method to pass the consent information to the SDK - * - * @note This method must be called prior to invoking #startSession: - * - * @param consent The consent information. - * @see (FlurryConsent#initWithGDPRScope:andConsentStrings:) - */ - -- (FlurrySessionBuilder*) withConsent:(FlurryConsent*)consent; - - -/*! - * @brief Enables implicit recording of Apple Store transactions. - * @since 7.9.0 - * - * @note This method needs to be called before any transaction is finialized. - * - * @param value @c YES to enable transaction logging with the default being @c NO. - * - */ - -- (FlurrySessionBuilder*) withIAPReportingEnabled:(BOOL) value; - -/*! - * @brief Enables opting out of background sessions being counted towards total sessions. - * @since 8.1.0-rc.1 - * - * @note This method must be called prior to invoking #startSession:. - * - * @param value @c NO to opt out of counting background sessions towards total sessions. - * The default value for the session is @c YES - * - */ - -- (FlurrySessionBuilder*) withIncludeBackgroundSessionsInMetrics:(BOOL) value; - -/*! - * @brief Set the Session Origin for the Flurry session. - * @since 10.0.0 - * - * This is an optional method that sets the session origin - * - * @param origin The session origin value. - */ -- (FlurrySessionBuilder*) withSessionOrigin:(NSString*) origin; - -/*! - * @brief Set the Session Origin Version for the Flurry session. - * @since 10.0.0 - * - * This is an optional method that sets the session origin version - * - * @param version The session origin version value. - */ -- (FlurrySessionBuilder*) withSessionOriginVerion:(NSString*) version; - -/*! - * @brief Set the Session OriginSets Paramters for the Flurry session. - * @since 10.0.0 - * - * This is an optional method that sets the session origin parameters for origin sets (max key value pairs = 10) - * - * @param parameters The session origin parameters. - */ -- (FlurrySessionBuilder*) withSessionOriginParameters:(NSDictionary*) parameters; - -/*! - * @brief Set the Deeplink for the Flurry session. - * @since 10.0.0 - * - * This is an optional method that sets the deeplink which started the app and Flurry Session - * - * @param deeplink The session deeplink value. - */ -- (FlurrySessionBuilder*) withSessionDeeplink:(NSString*) deeplink; - -/*! - * @brief Set the Session properties for the Flurry session. - * @since 10.0.0 - * - * This is an optional method that sets the session properties - * - * @param properties The session paramaters. - */ -- (FlurrySessionBuilder*) withSessionProperties:(NSDictionary*) properties; - - -#if TARGET_OS_TV - -/*! - * @brief Sets the minimum duration (in minutes) before a partial session report is sent to Flurry. - * @since 7.7.0 - * - * This is an optional method that sets the minimum duration (in minutes) before a partial session report is sent to Flurry. - * The acceptable values are between 5 and 60 minutes. - * - * @note This method must be called prior to invoking #startSession:. - * - * @param value The period after which a partial session report is sent to Flurry. - */ -- (FlurrySessionBuilder*) withTVSessionReportingInterval:(NSInteger) value; - -/*! - * @brief Sets the minimum number of events before a partial session report is sent to Flurry. - * @since 7.7.0 - * - * This is an optional method that sets the minimum number of events before a partial session report is sent to Flurry. - * The acceptable values are between 5 and 50. - * - * @note This method must be called prior to invoking #startSession:. - * - * @param value The number of events after which partial session report is sent to Flurry. - */ -- (FlurrySessionBuilder*) withTVEventCountThreshold:(NSInteger) value; -#endif - -@end - -#endif diff --git a/iphone/Maps/Pods/Flurry-iOS-SDK/Flurry/FlurryUserProperties.h b/iphone/Maps/Pods/Flurry-iOS-SDK/Flurry/FlurryUserProperties.h deleted file mode 100644 index 2203370b35..0000000000 --- a/iphone/Maps/Pods/Flurry-iOS-SDK/Flurry/FlurryUserProperties.h +++ /dev/null @@ -1,125 +0,0 @@ -// -// FlurryUserProperties.h -// Flurry -// -// Created by Hunter Hays on 4/11/19. -// Copyright © 2019 Oath Inc. All rights reserved. -// - -/* - * Standard User Property: Preferred Currency. - * Standard User Property: Currency Preference. - * Follow ISO 4217: https://en.wikipedia.org/wiki/ISO_4217 - * E.g., "USD", "EUR", "JPY", "CNY", ... - */ - -extern NSString * _Nonnull const FlurryPropertyCurrencyPreference; - -/* - * Standard User Property: Purchaser. - * E.g., "true" or "false" - */ -extern NSString * _Nonnull const FlurryPropertyPurchaser; - -/* - * Standard User Property: Registered user. - * E.g., "true" or "false" - */ -extern NSString * _Nonnull const FlurryPropertyRegisteredUser; - -/* - * Standard User Property: Subscriber. - * E.g., "true" or "false" - */ -extern NSString * _Nonnull const FlurryPropertySubscriber; - - -@interface FlurryUserProperties : NSObject - -/*! - *@brief Exactly set or replace any state for the property. - * An empty NSArray clears the property state. - * @since 10.0.0 - * - * - * @param propertyName property name - * @param propertyValues list of property values - */ - -+ (void) set:(nonnull NSString*) propertyName values:(nonnull NSArray*) propertyValues; - -/*! - *@brief Exactly set or replace any state for the property. - * This api allows passing in a single NSString value. - * @since 10.0.0 - * - * - * @param propertyName property name - * @param propertyValue single property value - */ -+ (void) set:(nonnull NSString*) propertyName value:(nonnull NSString*) propertyValue; - -/*! - * @brief Extend or create a property - * Adding values already included in the state has no effect and does not error. - * @since 10.0.0 - * - * - * @param propertyName property name - * @param propertyValues list of property values - */ -+ (void) add:(nonnull NSString*) propertyName values:(nonnull NSArray*) propertyValues; - -/*! - * @brief Extend or create a property - * Adding values already included in the state has no effect and does not error. - * @since 10.0.0 - * - * - * @param propertyName property name - * @param propertyValue single property value - */ -+ (void) add:(nonnull NSString*) propertyName value:(nonnull NSString*) propertyValue; - -/*! - * @brief Reduce any property. - * Removing values not already included in the state has no effect and does not error - * @since 10.0.0 - * - * - * @param propertyName property name - * @param propertyValues list of property values - */ -+ (void) remove:(nonnull NSString*) propertyName values:(nonnull NSArray*) propertyValues; - -/*! - * @brief Reduce any property. - * Removing values not already included in the state has no effect and does not error - * @since 10.0.0 - * - * - * @param propertyName property name - * @param propertyValue single property value - */ -+ (void) remove:(nonnull NSString*) propertyName value:(nonnull NSString*) propertyValue; - -/*! - * @brief Removes all property values for the property - * @since 10.0.0 - * - * - * @param propertyName property name - */ -+ (void) remove:(nonnull NSString*) propertyName; - -/*! - * @brief Exactly set, or replace if any previously exists, any state for the property to a single true state. - * Implies that value is boolean and should only be flagged or removed. - * @since 10.0.0 - * - * - * @param propertyName property name - */ -+ (void) flag:(nonnull NSString*) propertyName; - -@end diff --git a/iphone/Maps/Pods/Flurry-iOS-SDK/Flurry/libFlurry_11.1.0.a b/iphone/Maps/Pods/Flurry-iOS-SDK/Flurry/libFlurry_11.1.0.a deleted file mode 100644 index 16ebcfae17..0000000000 Binary files a/iphone/Maps/Pods/Flurry-iOS-SDK/Flurry/libFlurry_11.1.0.a and /dev/null differ diff --git a/iphone/Maps/Pods/Flurry-iOS-SDK/LICENSE b/iphone/Maps/Pods/Flurry-iOS-SDK/LICENSE deleted file mode 100644 index f433b1a53f..0000000000 --- a/iphone/Maps/Pods/Flurry-iOS-SDK/LICENSE +++ /dev/null @@ -1,177 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS diff --git a/iphone/Maps/Pods/Flurry-iOS-SDK/Licenses/Flurry-LICENSE.txt b/iphone/Maps/Pods/Flurry-iOS-SDK/Licenses/Flurry-LICENSE.txt deleted file mode 100755 index 1a47761b7f..0000000000 --- a/iphone/Maps/Pods/Flurry-iOS-SDK/Licenses/Flurry-LICENSE.txt +++ /dev/null @@ -1 +0,0 @@ -Developer's use of the SDK is governed by the license in the applicable Flurry Terms of Service. Some components of the SDK are governed by open source software licenses. In the event of any conflict between the license in the applicable Flurry Terms of Service and the applicable open source license, the terms of the open source license shall prevail with respect to those components. diff --git a/iphone/Maps/Pods/Flurry-iOS-SDK/README.md b/iphone/Maps/Pods/Flurry-iOS-SDK/README.md deleted file mode 100644 index f755e2b4a6..0000000000 --- a/iphone/Maps/Pods/Flurry-iOS-SDK/README.md +++ /dev/null @@ -1,178 +0,0 @@ -# Flurry SDK - -[![pod](https://img.shields.io/cocoapods/v/Flurry-iOS-SDK)](https://cocoapods.org/pods/Flurry-iOS-SDK) -[![platform](https://img.shields.io/cocoapods/p/Flurry-iOS-SDK)](https://cocoapods.org/pods/Flurry-iOS-SDK) -[![license](https://img.shields.io/github/license/flurry/flurry-ios-sdk)](https://github.com/flurry/Flurry-iOS-SDK) - -## Table of Contents - -- [Installation](#installation) - - [iOS](#ios) - - [watchOS](#watchos) - - [tvOS](#tvos) -- [Requirements](#requirements) -- [Examples](#examples) -- [Suppport](#support) -- [License](#license) - -## Installation - -To install FlurrySDK from CocoaPods, please follow the instructions below. Remember to include `use_frameworks!` if your app target is in Swift. - -### iOS - -To enable Flurry Analytics: - -```ruby -pod 'Flurry-iOS-SDK/FlurrySDK' -``` - -To enable Flurry Ad serving: - -```ruby -pod 'Flurry-iOS-SDK/FlurrySDK' -pod 'Flurry-iOS-SDK/FlurryAds' -``` - -To enable Flurry Config: - -```ruby -pod 'Flurry-iOS-SDK/FlurryConfig' -``` - -To enable Flurry Messaging: - -```ruby -pod 'Flurry-iOS-SDK/FlurryMessaging' -``` - -### watchOS - -To use FlurrySDK for Apple Watch 1.x Extension: - -```ruby -target 'Your Apple Watch 1.x Extension Target' do - pod 'Flurry-iOS-SDK/FlurryWatchSDK' -end -``` - -To use FlurrySDK for Apple Watch 2.x Extension: - -```ruby -target 'Your Apple Watch 2.x Extension Target' do - platform :watchos, '2.0' - pod 'Flurry-iOS-SDK/FlurryWatchOSSDK' -end -``` - -### tvOS - -To use FlurrySDK for tvOS apps: - -```ruby -target 'Your tvOS Application' do - platform :tvos, '9.0' - pod 'Flurry-iOS-SDK/FlurrySDK' -end -``` - -To enable Flurry Messaging for tvOS: - -```ruby -pod 'Flurry-iOS-SDK/FlurryMessaging' -``` - -## Requirements - -* iOS 8.0+ -* tvOS 9.0+ -* watchOS 1.0+ - -## Examples - -Listed below are brief examples of initializing and using Flurry in your project. For detailed instructions, please [check our documentation](https://developer.yahoo.com/flurry/docs/). - -### Initialize Flurry - -* iOS/tvOS - - To initialize Flurry, please import Flurry in your Application Delegate and start a Flurry session inside `applicationDidFinishLaunching`, as described below. - - ```swift - func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { - let sessionBuilder = FlurrySessionBuilder() - .withLogLevel(FlurryLogLevelAll) - .withCrashReporting(true) - .withAppVersion("1.0") - .withIAPReportingEnabled(true) - Flurry.startSession("Your API Key", with: sessionBuilder) - return true - } - ``` - -* watchOS - - Please follow [our instructions here](https://developer.yahoo.com/flurry/docs/integrateflurry/watchos/). - -### Log Events - -Use this to log normal events and timed events in your app. - -* iOS/tvOS - - ```swift - // Normal events - Flurry.logEvent("Event", withParameters: ["Key": "Value"]) - - // Timed events - Flurry.logEvent("Event", withParameters: ["Key": "Value"], timed: true) - Flurry.endTimedEvent("Event", withParameters: ["Key": "Value"]) - ``` - -* watchOS - - ```swift - FlurryWatch.logWatchEvent("Event", withParameters: ["Key": "Value"]) - ``` - -### Log Error (iOS/tvOS) - -Use this to log exceptions and/or errors that occur in your app. Flurry will report the first 10 errors that occur in each session. - -```swift -Flurry.logError("ERROR_NAME", message: "ERROR_MESSAGE", exception: e) -``` - -### Track User Demographics (iOS/tvOS) - -After identifying the user, use this to log the user’s assigned ID, username, age and gender in your system. - -```swift -Flurry.setUserID("USER_ID") -Flurry.setAge(20) -Flurry.setGender("f") // "f" for female and "m" for male -``` - -### Session Origins and Attributes (iOS/tvOS) - -This allows you to specify session origin and deep link attached to each session, or add a custom parameterized session parameters. You can also add an SDK origin specified by origin name and origin version. - -```swift -Flurry.addSessionOrigin("SESSION_ORIGIN") -Flurry.addSessionOrigin("SESSION_ORIGIN", withDeepLink: "DEEPLINK") -Flurry.sessionProperties(["key": "value"]) -Flurry.addOrigin("ORIGIN_NAME", withVersion: "ORIGIN_VERSION") -Flurry.addOrigin("ORIGIN_NAME", withVersion: "ORIGIN_VERSION", withParameters: ["key": "value"]) -``` - -## Support - -* [Flurry Documentation](https://developer.yahoo.com/flurry/docs/) -* [FAQs for Flurry](https://developer.yahoo.com/flurry/docs/faq/) -* [Flurry Support](https://developer.yahoo.com/support/flurry/) - -## License - -Copyright 2019 Flurry by Verizon Media - -This project is licensed under the terms of the [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0) open source license. Please refer to [LICENSE](LICENSE) for the full terms. Your use of Flurry is governed by [Flurry Terms of Service](https://developer.yahoo.com/flurry/legal-privacy/terms-service/). diff --git a/iphone/Maps/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.framework/GoogleAppMeasurement b/iphone/Maps/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.framework/GoogleAppMeasurement deleted file mode 100755 index e6e4f6eacc..0000000000 Binary files a/iphone/Maps/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.framework/GoogleAppMeasurement and /dev/null differ diff --git a/iphone/Maps/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.framework/Modules/module.modulemap b/iphone/Maps/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.framework/Modules/module.modulemap deleted file mode 100755 index de80e9eaeb..0000000000 --- a/iphone/Maps/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.framework/Modules/module.modulemap +++ /dev/null @@ -1,11 +0,0 @@ -framework module GoogleAppMeasurement { - export * - module * { export * } - link "sqlite3" - link "z" - link framework "CoreData" - link framework "Security" - link framework "StoreKit" - link framework "SystemConfiguration" - link framework "UIKit" -} diff --git a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORAssert.m b/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORAssert.m deleted file mode 100644 index 3e5f57b578..0000000000 --- a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORAssert.m +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "GDTCORLibrary/Public/GDTCORAssert.h" - -GDTCORAssertionBlock GDTCORAssertionBlockToRunInstead(void) { - // This class is only compiled in by unit tests, and this should fail quickly in optimized builds. - Class GDTCORAssertClass = NSClassFromString(@"GDTCORAssertHelper"); - if (__builtin_expect(!!GDTCORAssertClass, 0)) { - SEL assertionBlockSEL = NSSelectorFromString(@"assertionBlock"); - if (assertionBlockSEL) { - IMP assertionBlockIMP = [GDTCORAssertClass methodForSelector:assertionBlockSEL]; - if (assertionBlockIMP) { - GDTCORAssertionBlock assertionBlock = ((GDTCORAssertionBlock(*)(id, SEL))assertionBlockIMP)( - GDTCORAssertClass, assertionBlockSEL); - if (assertionBlock) { - return assertionBlock; - } - } - } - } - return NULL; -} diff --git a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORClock.m b/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORClock.m deleted file mode 100644 index f0ea8ab606..0000000000 --- a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORClock.m +++ /dev/null @@ -1,164 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "GDTCORLibrary/Public/GDTCORClock.h" - -#import - -// Using a monotonic clock is necessary because CFAbsoluteTimeGetCurrent(), NSDate, and related all -// are subject to drift. That it to say, multiple consecutive calls do not always result in a -// time that is in the future. Clocks may be adjusted by the user, NTP, or any number of external -// factors. This class attempts to determine the wall-clock time at the time of the event by -// capturing the kernel start and time since boot to determine a wallclock time in UTC. -// -// Timezone offsets at the time of a snapshot are also captured in order to provide local-time -// details. Other classes in this library depend on comparing times at some time in the future to -// a time captured in the past, and this class needs to provide a mechanism to do that. -// -// TL;DR: This class attempts to accomplish two things: 1. Provide accurate event times. 2. Provide -// a monotonic clock mechanism to accurately check if some clock snapshot was before or after -// by using a shared reference point (kernel boot time). -// -// Note: Much of the mach time stuff doesn't work properly in the simulator. So this class can be -// difficult to unit test. - -/** Returns the kernel boottime property from sysctl. - * - * Inspired by https://stackoverflow.com/a/40497811 - * - * @return The KERN_BOOTTIME property from sysctl, in nanoseconds. - */ -static int64_t KernelBootTimeInNanoseconds() { - // Caching the result is not possible because clock drift would not be accounted for. - struct timeval boottime; - int mib[2] = {CTL_KERN, KERN_BOOTTIME}; - size_t size = sizeof(boottime); - int rc = sysctl(mib, 2, &boottime, &size, NULL, 0); - if (rc != 0) { - return 0; - } - return (int64_t)boottime.tv_sec * NSEC_PER_MSEC + (int64_t)boottime.tv_usec; -} - -/** Returns value of gettimeofday, in nanoseconds. - * - * Inspired by https://stackoverflow.com/a/40497811 - * - * @return The value of gettimeofday, in nanoseconds. - */ -static int64_t UptimeInNanoseconds() { - int64_t before_now; - int64_t after_now; - struct timeval now; - - before_now = KernelBootTimeInNanoseconds(); - // Addresses a race condition in which the system time has updated, but the boottime has not. - do { - gettimeofday(&now, NULL); - after_now = KernelBootTimeInNanoseconds(); - } while (after_now != before_now); - return (int64_t)now.tv_sec * NSEC_PER_MSEC + (int64_t)now.tv_usec - before_now; -} - -// TODO: Consider adding a 'trustedTime' property that can be populated by the response from a BE. -@implementation GDTCORClock - -- (instancetype)init { - self = [super init]; - if (self) { - _kernelBootTime = KernelBootTimeInNanoseconds(); - _uptime = UptimeInNanoseconds(); - _timeMillis = - (int64_t)((CFAbsoluteTimeGetCurrent() + kCFAbsoluteTimeIntervalSince1970) * NSEC_PER_USEC); - CFTimeZoneRef timeZoneRef = CFTimeZoneCopySystem(); - _timezoneOffsetSeconds = CFTimeZoneGetSecondsFromGMT(timeZoneRef, 0); - CFRelease(timeZoneRef); - } - return self; -} - -+ (GDTCORClock *)snapshot { - return [[GDTCORClock alloc] init]; -} - -+ (instancetype)clockSnapshotInTheFuture:(uint64_t)millisInTheFuture { - GDTCORClock *snapshot = [self snapshot]; - snapshot->_timeMillis += millisInTheFuture; - return snapshot; -} - -- (BOOL)isAfter:(GDTCORClock *)otherClock { - // These clocks are trivially comparable when they share a kernel boot time. - if (_kernelBootTime == otherClock->_kernelBootTime) { - int64_t timeDiff = (_timeMillis + _timezoneOffsetSeconds) - - (otherClock->_timeMillis + otherClock->_timezoneOffsetSeconds); - return timeDiff > 0; - } else { - int64_t kernelBootTimeDiff = otherClock->_kernelBootTime - _kernelBootTime; - // This isn't a great solution, but essentially, if the other clock's boot time is 'later', NO - // is returned. This can be altered by changing the system time and rebooting. - return kernelBootTimeDiff < 0 ? YES : NO; - } -} - -- (NSUInteger)hash { - return [@(_kernelBootTime) hash] ^ [@(_uptime) hash] ^ [@(_timeMillis) hash] ^ - [@(_timezoneOffsetSeconds) hash]; -} - -- (BOOL)isEqual:(id)object { - return [self hash] == [object hash]; -} - -#pragma mark - NSSecureCoding - -/** NSKeyedCoder key for timeMillis property. */ -static NSString *const kGDTCORClockTimeMillisKey = @"GDTCORClockTimeMillis"; - -/** NSKeyedCoder key for timezoneOffsetMillis property. */ -static NSString *const kGDTCORClockTimezoneOffsetSeconds = @"GDTCORClockTimezoneOffsetSeconds"; - -/** NSKeyedCoder key for _kernelBootTime ivar. */ -static NSString *const kGDTCORClockKernelBootTime = @"GDTCORClockKernelBootTime"; - -/** NSKeyedCoder key for _uptime ivar. */ -static NSString *const kGDTCORClockUptime = @"GDTCORClockUptime"; - -+ (BOOL)supportsSecureCoding { - return YES; -} - -- (instancetype)initWithCoder:(NSCoder *)aDecoder { - self = [super init]; - if (self) { - // TODO: If the kernelBootTime is more recent, we need to change the kernel boot time and - // uptimeMillis ivars - _timeMillis = [aDecoder decodeInt64ForKey:kGDTCORClockTimeMillisKey]; - _timezoneOffsetSeconds = [aDecoder decodeInt64ForKey:kGDTCORClockTimezoneOffsetSeconds]; - _kernelBootTime = [aDecoder decodeInt64ForKey:kGDTCORClockKernelBootTime]; - _uptime = [aDecoder decodeInt64ForKey:kGDTCORClockUptime]; - } - return self; -} - -- (void)encodeWithCoder:(NSCoder *)aCoder { - [aCoder encodeInt64:_timeMillis forKey:kGDTCORClockTimeMillisKey]; - [aCoder encodeInt64:_timezoneOffsetSeconds forKey:kGDTCORClockTimezoneOffsetSeconds]; - [aCoder encodeInt64:_kernelBootTime forKey:kGDTCORClockKernelBootTime]; - [aCoder encodeInt64:_uptime forKey:kGDTCORClockUptime]; -} - -@end diff --git a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORConsoleLogger.m b/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORConsoleLogger.m deleted file mode 100644 index 0f5170d025..0000000000 --- a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORConsoleLogger.m +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "GDTCORLibrary/Public/GDTCORConsoleLogger.h" - -volatile NSInteger GDTCORConsoleLoggerLoggingLevel = GDTCORLoggingLevelErrors; - -/** The console logger prefix. */ -static NSString *kGDTCORConsoleLogger = @"[GoogleDataTransport]"; - -NSString *GDTCORMessageCodeEnumToString(GDTCORMessageCode code) { - return [[NSString alloc] initWithFormat:@"I-GDTCOR%06ld", (long)code]; -} - -void GDTCORLog(GDTCORMessageCode code, GDTCORLoggingLevel logLevel, NSString *format, ...) { -// Don't log anything in not debug builds. -#if !NDEBUG - if (logLevel >= GDTCORConsoleLoggerLoggingLevel) { - NSString *logFormat = [NSString stringWithFormat:@"%@[%@] %@", kGDTCORConsoleLogger, - GDTCORMessageCodeEnumToString(code), format]; - va_list args; - va_start(args, format); - NSLogv(logFormat, args); - va_end(args); - } -#endif // !NDEBUG -} - -void GDTCORLogAssert( - BOOL wasFatal, NSString *_Nonnull file, NSInteger line, NSString *_Nullable format, ...) { -// Don't log anything in not debug builds. -#if !NDEBUG - GDTCORMessageCode code = wasFatal ? GDTCORMCEFatalAssertion : GDTCORMCEGeneralError; - NSString *logFormat = - [NSString stringWithFormat:@"%@[%@] (%@:%ld) : %@", kGDTCORConsoleLogger, - GDTCORMessageCodeEnumToString(code), file, (long)line, format]; - va_list args; - va_start(args, format); - NSLogv(logFormat, args); - va_end(args); -#endif // !NDEBUG -} diff --git a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORDataFuture.m b/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORDataFuture.m deleted file mode 100644 index 04903d4722..0000000000 --- a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORDataFuture.m +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "GDTCORLibrary/Private/GDTCORDataFuture.h" - -@implementation GDTCORDataFuture - -- (instancetype)initWithFileURL:(NSURL *)fileURL { - self = [super init]; - if (self) { - _fileURL = fileURL; - } - return self; -} - -- (BOOL)isEqual:(id)object { - return [self hash] == [object hash]; -} - -- (NSUInteger)hash { - // In reality, only one of these should be populated. - return [_fileURL hash]; -} - -#pragma mark - NSSecureCoding - -/** Coding key for _fileURL ivar. */ -static NSString *kGDTCORDataFutureFileURLKey = @"GDTCORDataFutureFileURLKey"; - -+ (BOOL)supportsSecureCoding { - return YES; -} - -- (void)encodeWithCoder:(nonnull NSCoder *)aCoder { - [aCoder encodeObject:_fileURL forKey:kGDTCORDataFutureFileURLKey]; -} - -- (nullable instancetype)initWithCoder:(nonnull NSCoder *)aDecoder { - self = [self init]; - if (self) { - _fileURL = [aDecoder decodeObjectOfClass:[NSURL class] forKey:kGDTCORDataFutureFileURLKey]; - } - return self; -} - -@end diff --git a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCOREvent.m b/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCOREvent.m deleted file mode 100644 index 5c79a4bcee..0000000000 --- a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCOREvent.m +++ /dev/null @@ -1,258 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "GDTCORLibrary/Public/GDTCOREvent.h" - -#import -#import -#import -#import - -#import "GDTCORLibrary/Private/GDTCORDataFuture.h" -#import "GDTCORLibrary/Private/GDTCOREvent_Private.h" - -@implementation GDTCOREvent - -+ (NSNumber *)nextEventID { - static unsigned long long nextEventID = 0; - static NSString *counterPath; - static dispatch_queue_t eventIDQueue; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - eventIDQueue = dispatch_queue_create("com.google.GDTCOREventIDQueue", DISPATCH_QUEUE_SERIAL); - counterPath = GDTCORRootDirectory().path; - counterPath = [NSString stringWithFormat:@"%@/count", counterPath]; - NSError *error; - NSString *countText = [NSString stringWithContentsOfFile:counterPath - encoding:NSUTF8StringEncoding - error:&error]; - const char *countChars = [countText UTF8String]; - unsigned long long count = 0ULL; - if (countChars) { - count = strtoull([countText UTF8String], NULL, 10); - } - nextEventID = error ? 0 : count; - }); - - __block NSNumber *result; - dispatch_sync(eventIDQueue, ^{ - result = @(nextEventID); - nextEventID++; - NSError *error; - [[result stringValue] writeToFile:counterPath - atomically:YES - encoding:NSUTF8StringEncoding - error:&error]; - GDTCORAssert(error == nil, @"There was an error saving the new counter value to disk: %@", - error); - }); - return result; -} - -- (nullable instancetype)initWithMappingID:(NSString *)mappingID target:(NSInteger)target { - GDTCORAssert(mappingID.length > 0, @"Please give a valid mapping ID"); - GDTCORAssert(target > 0, @"A target cannot be negative or 0"); - if (mappingID == nil || mappingID.length == 0 || target <= 0) { - return nil; - } - self = [super init]; - if (self) { - _eventID = [GDTCOREvent nextEventID]; - _mappingID = mappingID; - _target = target; - _qosTier = GDTCOREventQosDefault; - } - GDTCORLogDebug(@"Event %@ created. mappingID: %@ target:%ld", self, mappingID, (long)target); - return self; -} - -- (instancetype)copy { - GDTCOREvent *copy = [[GDTCOREvent alloc] initWithMappingID:_mappingID target:_target]; - copy->_eventID = _eventID; - copy.dataObject = _dataObject; - copy.qosTier = _qosTier; - copy.clockSnapshot = _clockSnapshot; - copy.customBytes = _customBytes; - copy->_GDTFilePath = _GDTFilePath; - GDTCORLogDebug(@"Copying event %@ to event %@", self, copy); - return copy; -} - -- (NSUInteger)hash { - // This loses some precision, but it's probably fine. - NSUInteger eventIDHash = [_eventID hash]; - NSUInteger mappingIDHash = [_mappingID hash]; - NSUInteger timeHash = [_clockSnapshot hash]; - NSInteger dataObjectHash = [_dataObject hash]; - NSUInteger fileURL = [_GDTFilePath hash]; - - return eventIDHash ^ mappingIDHash ^ _target ^ _qosTier ^ timeHash ^ dataObjectHash ^ fileURL; -} - -- (BOOL)isEqual:(id)object { - return [self hash] == [object hash]; -} - -#pragma mark - Property overrides - -- (void)setDataObject:(id)dataObject { - // If you're looking here because of a performance issue in -transportBytes slowing the assignment - // of -dataObject, one way to address this is to add a queue to this class, - // dispatch_(barrier_ if concurrent)async here, and implement the getter with a dispatch_sync. - if (dataObject != _dataObject) { - _dataObject = dataObject; - } -} - -- (NSURL *)fileURL { - if (!_GDTFilePath) { - _GDTFilePath = [NSString stringWithFormat:@"event-%lu", (unsigned long)self.hash]; - } - return [GDTCORRootDirectory() URLByAppendingPathComponent:_GDTFilePath]; -} - -#pragma mark - Private methods - -- (BOOL)writeToGDTPath:(NSString *)filePath error:(NSError **)error { - NSData *dataTransportBytes = [_dataObject transportBytes]; - if (dataTransportBytes == nil) { - _GDTFilePath = nil; - _dataObject = nil; - return NO; - } - NSURL *fileURL = [GDTCORRootDirectory() URLByAppendingPathComponent:filePath]; - BOOL writingSuccess = [dataTransportBytes writeToURL:fileURL - options:NSDataWritingAtomic - error:error]; - if (!writingSuccess) { - GDTCORLogError(GDTCORMCEFileWriteError, @"An event file could not be written: %@", fileURL); - return NO; - } - _GDTFilePath = filePath; - _dataObject = nil; - return YES; -} - -#pragma mark - NSSecureCoding and NSCoding Protocols - -/** NSCoding key for eventID property. */ -static NSString *eventIDKey = @"_eventID"; - -/** NSCoding key for mappingID property. */ -static NSString *mappingIDKey = @"_mappingID"; - -/** NSCoding key for target property. */ -static NSString *targetKey = @"_target"; - -/** NSCoding key for qosTier property. */ -static NSString *qosTierKey = @"_qosTier"; - -/** NSCoding key for clockSnapshot property. */ -static NSString *clockSnapshotKey = @"_clockSnapshot"; - -/** NSCoding key for fileURL property. */ -static NSString *fileURLKey = @"_fileURL"; - -/** NSCoding key for GDTFilePath property. */ -static NSString *kGDTFilePathKey = @"_GDTFilePath"; - -/** NSCoding key for backwards compatibility of GDTCORStoredEvent mappingID property.*/ -static NSString *kStoredEventMappingIDKey = @"GDTCORStoredEventMappingIDKey"; - -/** NSCoding key for backwards compatibility of GDTCORStoredEvent target property.*/ -static NSString *kStoredEventTargetKey = @"GDTCORStoredEventTargetKey"; - -/** NSCoding key for backwards compatibility of GDTCORStoredEvent qosTier property.*/ -static NSString *kStoredEventQosTierKey = @"GDTCORStoredEventQosTierKey"; - -/** NSCoding key for backwards compatibility of GDTCORStoredEvent clockSnapshot property.*/ -static NSString *kStoredEventClockSnapshotKey = @"GDTCORStoredEventClockSnapshotKey"; - -/** NSCoding key for backwards compatibility of GDTCORStoredEvent dataFuture property.*/ -static NSString *kStoredEventDataFutureKey = @"GDTCORStoredEventDataFutureKey"; - -/** NSCoding key for customData property. */ -static NSString *kCustomDataKey = @"GDTCOREventCustomDataKey"; - -+ (BOOL)supportsSecureCoding { - return YES; -} - -- (id)initWithCoder:(NSCoder *)aDecoder { - GDTCORDataFuture *dataFuture = [aDecoder decodeObjectOfClass:[GDTCORDataFuture class] - forKey:kStoredEventDataFutureKey]; - if (dataFuture) { - return [self initWithCoderForStoredEventBackwardCompatibility:aDecoder - fileURL:dataFuture.fileURL]; - } - NSString *mappingID = [aDecoder decodeObjectOfClass:[NSString class] forKey:mappingIDKey]; - NSInteger target = [aDecoder decodeIntegerForKey:targetKey]; - self = [self initWithMappingID:mappingID target:target]; - if (self) { - _eventID = [aDecoder decodeObjectOfClass:[NSNumber class] forKey:eventIDKey]; - if (_eventID == nil) { - _eventID = [GDTCOREvent nextEventID]; - } - _qosTier = [aDecoder decodeIntegerForKey:qosTierKey]; - _clockSnapshot = [aDecoder decodeObjectOfClass:[GDTCORClock class] forKey:clockSnapshotKey]; - NSURL *fileURL = [aDecoder decodeObjectOfClass:[NSURL class] forKey:fileURLKey]; - if (fileURL) { - _GDTFilePath = [fileURL lastPathComponent]; - } else { - _GDTFilePath = [aDecoder decodeObjectOfClass:[NSString class] forKey:kGDTFilePathKey]; - } - _customBytes = [aDecoder decodeObjectOfClass:[NSData class] forKey:kCustomDataKey]; - } - return self; -} - -- (id)initWithCoderForStoredEventBackwardCompatibility:(NSCoder *)aDecoder - fileURL:(NSURL *)fileURL { - NSString *mappingID = [aDecoder decodeObjectOfClass:[NSString class] - forKey:kStoredEventMappingIDKey]; - NSInteger target = [[aDecoder decodeObjectOfClass:[NSNumber class] - forKey:kStoredEventTargetKey] integerValue]; - self = [self initWithMappingID:mappingID target:target]; - if (self) { - _eventID = [aDecoder decodeObjectOfClass:[NSNumber class] forKey:eventIDKey]; - if (_eventID == nil) { - _eventID = [GDTCOREvent nextEventID]; - } - _qosTier = [[aDecoder decodeObjectOfClass:[NSNumber class] - forKey:kStoredEventQosTierKey] integerValue]; - _clockSnapshot = [aDecoder decodeObjectOfClass:[GDTCORClock class] - forKey:kStoredEventClockSnapshotKey]; - if (fileURL) { - _GDTFilePath = [fileURL lastPathComponent]; - } else { - _GDTFilePath = [aDecoder decodeObjectOfClass:[NSString class] forKey:kGDTFilePathKey]; - } - _customBytes = [aDecoder decodeObjectOfClass:[NSData class] forKey:kCustomDataKey]; - } - return self; -} - -- (void)encodeWithCoder:(NSCoder *)aCoder { - [aCoder encodeObject:_eventID forKey:eventIDKey]; - [aCoder encodeObject:_mappingID forKey:mappingIDKey]; - [aCoder encodeInteger:_target forKey:targetKey]; - [aCoder encodeInteger:_qosTier forKey:qosTierKey]; - [aCoder encodeObject:_clockSnapshot forKey:clockSnapshotKey]; - [aCoder encodeObject:_GDTFilePath forKey:kGDTFilePathKey]; - [aCoder encodeObject:_customBytes forKey:kCustomDataKey]; -} - -@end diff --git a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORFlatFileStorage.m b/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORFlatFileStorage.m deleted file mode 100644 index d50cf0aa3e..0000000000 --- a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORFlatFileStorage.m +++ /dev/null @@ -1,411 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "GDTCORLibrary/Private/GDTCORFlatFileStorage.h" - -#import -#import -#import -#import -#import - -#import "GDTCORLibrary/Private/GDTCOREvent_Private.h" -#import "GDTCORLibrary/Private/GDTCORRegistrar_Private.h" -#import "GDTCORLibrary/Private/GDTCORUploadCoordinator.h" - -@implementation GDTCORFlatFileStorage - -+ (void)load { - [[GDTCORRegistrar sharedInstance] registerStorage:[self sharedInstance] target:kGDTCORTargetCCT]; - [[GDTCORRegistrar sharedInstance] registerStorage:[self sharedInstance] target:kGDTCORTargetFLL]; - [[GDTCORRegistrar sharedInstance] registerStorage:[self sharedInstance] target:kGDTCORTargetCSH]; - - // Sets a global translation mapping to decode GDTCORStoredEvent objects encoded as instances of - // GDTCOREvent instead. Then we do the same thing with GDTCORStorage. This must be done in load - // because there are no direct references to this class and the NSCoding methods won't be called - // unless the class name is mapped early. - [NSKeyedUnarchiver setClass:[GDTCOREvent class] forClassName:@"GDTCORStoredEvent"]; - [NSKeyedUnarchiver setClass:[GDTCORFlatFileStorage class] forClassName:@"GDTCORStorage"]; -} - -+ (NSString *)archivePath { - static NSString *archivePath; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - archivePath = - [GDTCORRootDirectory() URLByAppendingPathComponent:@"GDTCORFlatFileStorageArchive"].path; - }); - return archivePath; -} - -+ (NSString *)libraryDataPath { - static NSString *libraryDataPath; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - libraryDataPath = - [GDTCORRootDirectory() URLByAppendingPathComponent:NSStringFromClass([self class]) - isDirectory:YES] - .path; - libraryDataPath = [libraryDataPath stringByAppendingPathComponent:@"gdt_library_data"]; - if (![[NSFileManager defaultManager] fileExistsAtPath:libraryDataPath isDirectory:NULL]) { - NSError *error; - [[NSFileManager defaultManager] createDirectoryAtPath:libraryDataPath - withIntermediateDirectories:YES - attributes:0 - error:&error]; - GDTCORAssert(error == nil, @"Creating the library data path failed: %@", error); - } - }); - return libraryDataPath; -} - -+ (instancetype)sharedInstance { - static GDTCORFlatFileStorage *sharedStorage; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - sharedStorage = [[GDTCORFlatFileStorage alloc] init]; - }); - return sharedStorage; -} - -- (instancetype)init { - self = [super init]; - if (self) { - _storageQueue = - dispatch_queue_create("com.google.GDTCORFlatFileStorage", DISPATCH_QUEUE_SERIAL); - _targetToEventSet = [[NSMutableDictionary alloc] init]; - _storedEvents = [[NSMutableDictionary alloc] init]; - _uploadCoordinator = [GDTCORUploadCoordinator sharedInstance]; - } - return self; -} - -- (void)storeEvent:(GDTCOREvent *)event - onComplete:(void (^_Nullable)(BOOL wasWritten, NSError *_Nullable error))completion { - GDTCORLogDebug(@"Saving event: %@", event); - if (event == nil) { - GDTCORLogDebug(@"%@", @"The event was nil, so it was not saved."); - return; - } - BOOL hadOriginalCompletion = completion != nil; - if (!completion) { - completion = ^(BOOL wasWritten, NSError *_Nullable error) { - GDTCORLogDebug(@"event %@ stored. success:%@ error:%@", event, wasWritten ? @"YES" : @"NO", - error); - }; - } - - __block GDTCORBackgroundIdentifier bgID = GDTCORBackgroundIdentifierInvalid; - bgID = [[GDTCORApplication sharedApplication] - beginBackgroundTaskWithName:@"GDTStorage" - expirationHandler:^{ - // End the background task if it's still valid. - [[GDTCORApplication sharedApplication] endBackgroundTask:bgID]; - bgID = GDTCORBackgroundIdentifierInvalid; - }]; - - dispatch_async(_storageQueue, ^{ - // Check that a backend implementation is available for this target. - NSInteger target = event.target; - - // Check that a prioritizer is available for this target. - id prioritizer = - [GDTCORRegistrar sharedInstance].targetToPrioritizer[@(target)]; - GDTCORAssert(prioritizer, @"There's no prioritizer registered for the given target. Are you " - @"sure you've added the support library for the backend you need?"); - - // Write the transport bytes to disk, get a filename. - GDTCORAssert([event.dataObject transportBytes], - @"The event should have been serialized to bytes"); - NSError *error = nil; - NSURL *eventFile = [self saveEventBytesToDisk:event eventHash:event.hash error:&error]; - if (!eventFile || error) { - GDTCORLogError(GDTCORMCEFileWriteError, @"Event failed to save to disk: %@", error); - completion(NO, error); - return; - } else { - GDTCORLogDebug(@"Event saved to disk: %@", eventFile); - completion(YES, error); - } - - // Add event to tracking collections. - [self addEventToTrackingCollections:event]; - - // Have the prioritizer prioritize the event and save state if there was an onComplete block. - [prioritizer prioritizeEvent:event]; - if (hadOriginalCompletion && [prioritizer respondsToSelector:@selector(saveState)]) { - [prioritizer saveState]; - GDTCORLogDebug(@"Prioritizer %@ has saved state due to an event's onComplete block.", - prioritizer); - } - - // Check the QoS, if it's high priority, notify the target that it has a high priority event. - if (event.qosTier == GDTCOREventQoSFast) { - [self.uploadCoordinator forceUploadForTarget:target]; - } - - // Write state to disk if there was an onComplete block or if we're in the background. - if (hadOriginalCompletion || [[GDTCORApplication sharedApplication] isRunningInBackground]) { - if (hadOriginalCompletion) { - GDTCORLogDebug(@"%@", - @"Saving flat file storage state because a completion block was passed."); - } else { - GDTCORLogDebug( - @"%@", @"Saving flat file storage state because the app is running in the background"); - } - NSError *error; - GDTCOREncodeArchive(self, [GDTCORFlatFileStorage archivePath], &error); - if (error) { - GDTCORLogDebug(@"Serializing GDTCORFlatFileStorage to an archive failed: %@", error); - } - } - - // Cancel or end the associated background task if it's still valid. - [[GDTCORApplication sharedApplication] endBackgroundTask:bgID]; - bgID = GDTCORBackgroundIdentifierInvalid; - GDTCORLogDebug(@"Event %@ is stored. There are %ld events stored on disk", event, - (unsigned long)self->_storedEvents.count); - }); -} - -- (void)removeEvents:(NSSet *)eventIDs { - NSSet *eventsToRemove = [eventIDs copy]; - dispatch_async(_storageQueue, ^{ - for (NSNumber *eventID in eventsToRemove) { - // Remove from disk, first and foremost. - GDTCOREvent *event = self->_storedEvents[eventID]; - if (event) { - NSError *error; - if (event.fileURL) { - NSURL *fileURL = event.fileURL; - BOOL result = [[NSFileManager defaultManager] removeItemAtPath:fileURL.path error:&error]; - if (!result || error) { - GDTCORLogWarning(GDTCORMCWFileReadError, - @"There was an error removing an event file: %@", error); - } else { - GDTCORLogDebug(@"Removed event from disk: %@", fileURL); - } - } - - // Remove from the tracking collections. - [self.storedEvents removeObjectForKey:event.eventID]; - [self.targetToEventSet[@(event.target)] removeObject:event]; - } - } - }); -} - -#pragma mark - GDTCORStorageProtocol - -- (void)libraryDataForKey:(nonnull NSString *)key - onComplete: - (nonnull void (^)(NSData *_Nullable, NSError *_Nullable error))onComplete { - dispatch_async(_storageQueue, ^{ - NSString *dataPath = [[[self class] libraryDataPath] stringByAppendingPathComponent:key]; - NSError *error; - NSData *data = [NSData dataWithContentsOfFile:dataPath options:0 error:&error]; - if (onComplete) { - onComplete(data, error); - } - }); -} - -- (void)storeLibraryData:(NSData *)data - forKey:(nonnull NSString *)key - onComplete:(nonnull void (^)(NSError *_Nullable error))onComplete { - if (!data || data.length <= 0) { - if (onComplete) { - onComplete([NSError errorWithDomain:NSInternalInconsistencyException code:-1 userInfo:nil]); - } - return; - } - dispatch_async(_storageQueue, ^{ - NSError *error; - NSString *dataPath = [[[self class] libraryDataPath] stringByAppendingPathComponent:key]; - [data writeToFile:dataPath options:NSDataWritingAtomic error:&error]; - if (onComplete) { - onComplete(error); - } - }); -} - -- (void)removeLibraryDataForKey:(nonnull NSString *)key - onComplete:(nonnull void (^)(NSError *_Nullable error))onComplete { - dispatch_async(_storageQueue, ^{ - NSError *error; - NSString *dataPath = [[[self class] libraryDataPath] stringByAppendingPathComponent:key]; - if ([[NSFileManager defaultManager] fileExistsAtPath:dataPath]) { - [[NSFileManager defaultManager] removeItemAtPath:dataPath error:&error]; - if (onComplete) { - onComplete(error); - } - } - }); -} - -#pragma mark - Private helper methods - -/** Saves the event's dataObject to a file using NSData mechanisms. - * - * @note This method should only be called from a method within a block on _storageQueue to maintain - * thread safety. - * - * @param event The event. - * @param eventHash The hash value of the event. - * @return The filename - */ -- (NSURL *)saveEventBytesToDisk:(GDTCOREvent *)event - eventHash:(NSUInteger)eventHash - error:(NSError **)error { - NSString *eventFileName = [NSString stringWithFormat:@"event-%lu", (unsigned long)eventHash]; - NSError *writingError; - [event writeToGDTPath:eventFileName error:&writingError]; - if (writingError) { - GDTCORLogDebug(@"There was an error saving an event to disk: %@", writingError); - } - return event.fileURL; -} - -/** Adds the event to internal tracking collections. - * - * @note This method should only be called from a method within a block on _storageQueue to maintain - * thread safety. - * - * @param event The event to track. - */ -- (void)addEventToTrackingCollections:(GDTCOREvent *)event { - _storedEvents[event.eventID] = event; - NSNumber *target = @(event.target); - NSMutableSet *events = self.targetToEventSet[target]; - events = events ? events : [[NSMutableSet alloc] init]; - [events addObject:event]; - _targetToEventSet[target] = events; -} - -#pragma mark - GDTCORLifecycleProtocol - -- (void)appWillForeground:(GDTCORApplication *)app { - dispatch_async(_storageQueue, ^{ - NSError *error; - GDTCORDecodeArchive([GDTCORFlatFileStorage class], [GDTCORFlatFileStorage archivePath], nil, - &error); - if (error) { - GDTCORLogDebug(@"Deserializing GDTCORFlatFileStorage from an archive failed: %@", error); - } - }); -} - -- (void)appWillBackground:(GDTCORApplication *)app { - dispatch_async(_storageQueue, ^{ - // Immediately request a background task to run until the end of the current queue of work, and - // cancel it once the work is done. - __block GDTCORBackgroundIdentifier bgID = - [app beginBackgroundTaskWithName:@"GDTStorage" - expirationHandler:^{ - [app endBackgroundTask:bgID]; - bgID = GDTCORBackgroundIdentifierInvalid; - }]; - NSError *error; - GDTCOREncodeArchive(self, [GDTCORFlatFileStorage archivePath], &error); - if (error) { - GDTCORLogDebug(@"Serializing GDTCORFlatFileStorage to an archive failed: %@", error); - } else { - GDTCORLogDebug(@"Serialized GDTCORFlatFileStorage to %@", - [GDTCORFlatFileStorage archivePath]); - } - - // End the background task if it's still valid. - [app endBackgroundTask:bgID]; - bgID = GDTCORBackgroundIdentifierInvalid; - }); -} - -- (void)appWillTerminate:(GDTCORApplication *)application { - dispatch_sync(_storageQueue, ^{ - NSError *error; - GDTCOREncodeArchive(self, [GDTCORFlatFileStorage archivePath], &error); - if (error) { - GDTCORLogDebug(@"Serializing GDTCORFlatFileStorage to an archive failed: %@", error); - } else { - GDTCORLogDebug(@"Serialized GDTCORFlatFileStorage to %@", - [GDTCORFlatFileStorage archivePath]); - } - }); -} - -#pragma mark - NSSecureCoding - -/** The NSKeyedCoder key for the storedEvents property. */ -static NSString *const kGDTCORFlatFileStorageStoredEventsKey = @"GDTCORStorageStoredEventsKey"; - -/** The NSKeyedCoder key for the targetToEventSet property. */ -static NSString *const kGDTCORFlatFileStorageTargetToEventSetKey = - @"GDTCORStorageTargetToEventSetKey"; - -/** The NSKeyedCoder key for the uploadCoordinator property. */ -static NSString *const kGDTCORFlatFileStorageUploadCoordinatorKey = - @"GDTCORStorageUploadCoordinatorKey"; - -+ (BOOL)supportsSecureCoding { - return YES; -} - -- (instancetype)initWithCoder:(NSCoder *)aDecoder { - // Create the singleton and populate its ivars. - GDTCORFlatFileStorage *sharedInstance = [self.class sharedInstance]; - NSSet *classes = [NSSet setWithObjects:[NSMutableOrderedSet class], [NSMutableDictionary class], - [GDTCOREvent class], nil]; - id storedEvents = [aDecoder decodeObjectOfClasses:classes - forKey:kGDTCORFlatFileStorageStoredEventsKey]; - NSMutableDictionary *events = [[NSMutableDictionary alloc] init]; - if ([storedEvents isKindOfClass:[NSMutableOrderedSet class]]) { - [(NSMutableOrderedSet *)storedEvents - enumerateObjectsUsingBlock:^(GDTCOREvent *_Nonnull obj, NSUInteger idx, - BOOL *_Nonnull stop) { - events[obj.eventID] = obj; - }]; - } else if ([storedEvents isKindOfClass:[NSMutableDictionary class]]) { - events = (NSMutableDictionary *)storedEvents; - } - sharedInstance->_storedEvents = events; - classes = [NSSet - setWithObjects:[NSMutableDictionary class], [NSMutableSet class], [GDTCOREvent class], nil]; - sharedInstance->_targetToEventSet = - [aDecoder decodeObjectOfClasses:classes forKey:kGDTCORFlatFileStorageTargetToEventSetKey]; - sharedInstance->_uploadCoordinator = - [aDecoder decodeObjectOfClass:[GDTCORUploadCoordinator class] - forKey:kGDTCORFlatFileStorageUploadCoordinatorKey]; - return sharedInstance; -} - -- (void)encodeWithCoder:(NSCoder *)aCoder { - GDTCORFlatFileStorage *sharedInstance = [self.class sharedInstance]; - NSMutableDictionary *storedEvents = sharedInstance->_storedEvents; - if (storedEvents) { - [aCoder encodeObject:storedEvents forKey:kGDTCORFlatFileStorageStoredEventsKey]; - } - NSMutableDictionary *> *targetToEventSet = - sharedInstance->_targetToEventSet; - if (targetToEventSet) { - [aCoder encodeObject:targetToEventSet forKey:kGDTCORFlatFileStorageTargetToEventSetKey]; - } - GDTCORUploadCoordinator *uploadCoordinator = sharedInstance->_uploadCoordinator; - if (uploadCoordinator) { - [aCoder encodeObject:uploadCoordinator forKey:kGDTCORFlatFileStorageUploadCoordinatorKey]; - } -} - -@end diff --git a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORLifecycle.m b/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORLifecycle.m deleted file mode 100644 index 9228c346d1..0000000000 --- a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORLifecycle.m +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "GDTCORLibrary/Public/GDTCORLifecycle.h" - -#import -#import - -#import "GDTCORLibrary/Private/GDTCORRegistrar_Private.h" -#import "GDTCORLibrary/Private/GDTCORTransformer_Private.h" -#import "GDTCORLibrary/Private/GDTCORUploadCoordinator.h" - -@implementation GDTCORLifecycle - -+ (void)load { - [self sharedInstance]; -} - -/** Creates/returns the singleton instance of this class. - * - * @return The singleton instance of this class. - */ -+ (instancetype)sharedInstance { - static GDTCORLifecycle *sharedInstance; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - sharedInstance = [[GDTCORLifecycle alloc] init]; - }); - return sharedInstance; -} - -- (instancetype)init { - self = [super init]; - if (self) { - NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; - [notificationCenter addObserver:self - selector:@selector(applicationDidEnterBackground:) - name:kGDTCORApplicationDidEnterBackgroundNotification - object:nil]; - [notificationCenter addObserver:self - selector:@selector(applicationWillEnterForeground:) - name:kGDTCORApplicationWillEnterForegroundNotification - object:nil]; - - NSString *name = kGDTCORApplicationWillTerminateNotification; - [notificationCenter addObserver:self - selector:@selector(applicationWillTerminate:) - name:name - object:nil]; - } - return self; -} - -- (void)dealloc { - [[NSNotificationCenter defaultCenter] removeObserver:self]; -} - -- (void)applicationDidEnterBackground:(NSNotification *)notification { - GDTCORApplication *application = [GDTCORApplication sharedApplication]; - if ([[GDTCORTransformer sharedInstance] respondsToSelector:@selector(appWillBackground:)]) { - GDTCORLogDebug(@"%@", @"Signaling GDTCORTransformer that the app is backgrounding."); - [[GDTCORTransformer sharedInstance] appWillBackground:application]; - } - if ([[GDTCORUploadCoordinator sharedInstance] respondsToSelector:@selector(appWillBackground:)]) { - GDTCORLogDebug(@"%@", @"Signaling GDTCORUploadCoordinator that the app is backgrounding."); - [[GDTCORUploadCoordinator sharedInstance] appWillBackground:application]; - } - if ([[GDTCORRegistrar sharedInstance] respondsToSelector:@selector(appWillBackground:)]) { - GDTCORLogDebug(@"%@", @"Signaling GDTCORRegistrar that the app is backgrounding."); - [[GDTCORRegistrar sharedInstance] appWillBackground:application]; - } -} - -- (void)applicationWillEnterForeground:(NSNotification *)notification { - GDTCORApplication *application = [GDTCORApplication sharedApplication]; - if ([[GDTCORTransformer sharedInstance] respondsToSelector:@selector(appWillForeground:)]) { - GDTCORLogDebug(@"%@", @"Signaling GDTCORTransformer that the app is foregrounding."); - [[GDTCORTransformer sharedInstance] appWillForeground:application]; - } - if ([[GDTCORUploadCoordinator sharedInstance] respondsToSelector:@selector(appWillForeground:)]) { - GDTCORLogDebug(@"%@", @"Signaling GDTCORUploadCoordinator that the app is foregrounding."); - [[GDTCORUploadCoordinator sharedInstance] appWillForeground:application]; - } - if ([[GDTCORRegistrar sharedInstance] respondsToSelector:@selector(appWillForeground:)]) { - GDTCORLogDebug(@"%@", @"Signaling GDTCORRegistrar that the app is foregrounding."); - [[GDTCORRegistrar sharedInstance] appWillForeground:application]; - } -} - -- (void)applicationWillTerminate:(NSNotification *)notification { - GDTCORApplication *application = [GDTCORApplication sharedApplication]; - if ([[GDTCORTransformer sharedInstance] respondsToSelector:@selector(appWillTerminate:)]) { - GDTCORLogDebug(@"%@", @"Signaling GDTCORTransformer that the app is terminating."); - [[GDTCORTransformer sharedInstance] appWillTerminate:application]; - } - if ([[GDTCORUploadCoordinator sharedInstance] respondsToSelector:@selector(appWillTerminate:)]) { - GDTCORLogDebug(@"%@", @"Signaling GDTCORUploadCoordinator that the app is terminating."); - [[GDTCORUploadCoordinator sharedInstance] appWillTerminate:application]; - } - if ([[GDTCORRegistrar sharedInstance] respondsToSelector:@selector(appWillTerminate:)]) { - GDTCORLogDebug(@"%@", @"Signaling GDTCORRegistrar that the app is terminating."); - [[GDTCORRegistrar sharedInstance] appWillTerminate:application]; - } -} - -@end diff --git a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORPlatform.m b/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORPlatform.m deleted file mode 100644 index d0fea4316a..0000000000 --- a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORPlatform.m +++ /dev/null @@ -1,555 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "GDTCORLibrary/Public/GDTCORPlatform.h" - -#import -#import -#import - -#import "GDTCORLibrary/Private/GDTCORRegistrar_Private.h" - -#ifdef GDTCOR_VERSION -#define STR(x) STR_EXPAND(x) -#define STR_EXPAND(x) #x -NSString *const kGDTCORVersion = @STR(GDTCOR_VERSION); -#else -NSString *const kGDTCORVersion = @"Unknown"; -#endif // GDTCOR_VERSION - -const GDTCORBackgroundIdentifier GDTCORBackgroundIdentifierInvalid = 0; - -NSString *const kGDTCORApplicationDidEnterBackgroundNotification = - @"GDTCORApplicationDidEnterBackgroundNotification"; - -NSString *const kGDTCORApplicationWillEnterForegroundNotification = - @"GDTCORApplicationWillEnterForegroundNotification"; - -NSString *const kGDTCORApplicationWillTerminateNotification = - @"GDTCORApplicationWillTerminateNotification"; - -NSURL *GDTCORRootDirectory(void) { - static NSURL *GDTPath; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - NSString *cachePath = - NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0]; - GDTPath = - [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/google-sdks-events", cachePath]]; - GDTCORLogDebug(@"GDT's state will be saved to: %@", GDTPath); - if (![[NSFileManager defaultManager] fileExistsAtPath:GDTPath.path]) { - NSError *error; - [[NSFileManager defaultManager] createDirectoryAtPath:GDTPath.path - withIntermediateDirectories:YES - attributes:nil - error:&error]; - GDTCORAssert(error == nil, @"There was an error creating GDT's path"); - } - }); - return GDTPath; -} - -BOOL GDTCORReachabilityFlagsReachable(GDTCORNetworkReachabilityFlags flags) { -#if !TARGET_OS_WATCH - BOOL reachable = - (flags & kSCNetworkReachabilityFlagsReachable) == kSCNetworkReachabilityFlagsReachable; - BOOL connectionRequired = (flags & kSCNetworkReachabilityFlagsConnectionRequired) == - kSCNetworkReachabilityFlagsConnectionRequired; - return reachable && !connectionRequired; -#else - return (flags & kGDTCORNetworkReachabilityFlagsReachable) == - kGDTCORNetworkReachabilityFlagsReachable; -#endif -} - -BOOL GDTCORReachabilityFlagsContainWWAN(GDTCORNetworkReachabilityFlags flags) { -#if TARGET_OS_IOS - return (flags & kSCNetworkReachabilityFlagsIsWWAN) == kSCNetworkReachabilityFlagsIsWWAN; -#else - // Assume network connection not WWAN on macOS, tvOS, watchOS. - return NO; -#endif // TARGET_OS_IOS -} - -GDTCORNetworkType GDTCORNetworkTypeMessage() { -#if !TARGET_OS_WATCH - SCNetworkReachabilityFlags reachabilityFlags = [GDTCORReachability currentFlags]; - if ((reachabilityFlags & kSCNetworkReachabilityFlagsReachable) == - kSCNetworkReachabilityFlagsReachable) { - if (GDTCORReachabilityFlagsContainWWAN(reachabilityFlags)) { - return GDTCORNetworkTypeMobile; - } else { - return GDTCORNetworkTypeWIFI; - } - } -#endif - return GDTCORNetworkTypeUNKNOWN; -} - -GDTCORNetworkMobileSubtype GDTCORNetworkMobileSubTypeMessage() { -#if TARGET_OS_IOS - static NSDictionary *CTRadioAccessTechnologyToNetworkSubTypeMessage; - static CTTelephonyNetworkInfo *networkInfo; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - CTRadioAccessTechnologyToNetworkSubTypeMessage = @{ - CTRadioAccessTechnologyGPRS : @(GDTCORNetworkMobileSubtypeGPRS), - CTRadioAccessTechnologyEdge : @(GDTCORNetworkMobileSubtypeEdge), - CTRadioAccessTechnologyWCDMA : @(GDTCORNetworkMobileSubtypeWCDMA), - CTRadioAccessTechnologyHSDPA : @(GDTCORNetworkMobileSubtypeHSDPA), - CTRadioAccessTechnologyHSUPA : @(GDTCORNetworkMobileSubtypeHSUPA), - CTRadioAccessTechnologyCDMA1x : @(GDTCORNetworkMobileSubtypeCDMA1x), - CTRadioAccessTechnologyCDMAEVDORev0 : @(GDTCORNetworkMobileSubtypeCDMAEVDORev0), - CTRadioAccessTechnologyCDMAEVDORevA : @(GDTCORNetworkMobileSubtypeCDMAEVDORevA), - CTRadioAccessTechnologyCDMAEVDORevB : @(GDTCORNetworkMobileSubtypeCDMAEVDORevB), - CTRadioAccessTechnologyeHRPD : @(GDTCORNetworkMobileSubtypeHRPD), - CTRadioAccessTechnologyLTE : @(GDTCORNetworkMobileSubtypeLTE), - }; - networkInfo = [[CTTelephonyNetworkInfo alloc] init]; - }); - NSString *networkCurrentRadioAccessTechnology; -#if TARGET_OS_MACCATALYST - NSDictionary *networkCurrentRadioAccessTechnologyDict = - networkInfo.serviceCurrentRadioAccessTechnology; - if (networkCurrentRadioAccessTechnologyDict.count) { - networkCurrentRadioAccessTechnology = networkCurrentRadioAccessTechnologyDict.allValues[0]; - } -#else // TARGET_OS_MACCATALYST -#if defined(__IPHONE_12_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 120000 - if (@available(iOS 12.0, *)) { - NSDictionary *networkCurrentRadioAccessTechnologyDict = - networkInfo.serviceCurrentRadioAccessTechnology; - if (networkCurrentRadioAccessTechnologyDict.count) { - // In iOS 12, multiple radio technologies can be captured. We prefer not particular radio - // tech to another, so we'll just return the first value in the dictionary. - networkCurrentRadioAccessTechnology = networkCurrentRadioAccessTechnologyDict.allValues[0]; - } - } else { -#else // defined(__IPHONE_12_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 120000 - networkCurrentRadioAccessTechnology = networkInfo.currentRadioAccessTechnology; -#endif // // defined(__IPHONE_12_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 120000 - } -#endif // TARGET_OS_MACCATALYST - if (networkCurrentRadioAccessTechnology) { - NSNumber *networkMobileSubtype = - CTRadioAccessTechnologyToNetworkSubTypeMessage[networkCurrentRadioAccessTechnology]; - return networkMobileSubtype.intValue; - } else { - return GDTCORNetworkMobileSubtypeUNKNOWN; - } -#else - return GDTCORNetworkMobileSubtypeUNKNOWN; -#endif -} - -NSData *_Nullable GDTCOREncodeArchive(id obj, - NSString *archivePath, - NSError *_Nullable *error) { - NSData *resultData; -#if (defined(__IPHONE_11_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 110000) || \ - (defined(__MAC_10_13) && MAC_OS_X_VERSION_MAX_ALLOWED >= 101300) || \ - (defined(__TVOS_11_0) && __TV_OS_VERSION_MAX_ALLOWED >= 110000) || \ - (defined(__WATCHOS_4_0) && __WATCH_OS_VERSION_MAX_ALLOWED >= 040000) || \ - (defined(TARGET_OS_MACCATALYST) && TARGET_OS_MACCATALYST) - if (@available(macOS 10.13, iOS 11.0, tvOS 11.0, watchOS 4, *)) { - resultData = [NSKeyedArchiver archivedDataWithRootObject:obj - requiringSecureCoding:YES - error:error]; - if (*error) { - GDTCORLogDebug(@"Encoding an object failed: %@", *error); - return nil; - } - if (archivePath) { - BOOL result = [resultData writeToFile:archivePath options:NSDataWritingAtomic error:error]; - if (result == NO || *error) { - GDTCORLogDebug(@"Attempt to write archive failed: URL:%@ error:%@", archivePath, *error); - } else { - GDTCORLogDebug(@"Writing archive succeeded: %@", archivePath); - } - } - } else { -#endif - BOOL result = NO; - @try { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - resultData = [NSKeyedArchiver archivedDataWithRootObject:obj]; -#pragma clang diagnostic pop - if (archivePath) { - result = [resultData writeToFile:archivePath options:NSDataWritingAtomic error:error]; - if (result == NO || *error) { - GDTCORLogDebug(@"Attempt to write archive failed: URL:%@ error:%@", archivePath, *error); - } else { - GDTCORLogDebug(@"Writing archive succeeded: %@", archivePath); - } - } - } @catch (NSException *exception) { - NSString *errorString = - [NSString stringWithFormat:@"An exception was thrown during encoding: %@", exception]; - *error = [NSError errorWithDomain:NSCocoaErrorDomain - code:-1 - userInfo:@{NSLocalizedFailureReasonErrorKey : errorString}]; - } - GDTCORLogDebug(@"Attempt to write archive. successful:%@ URL:%@ error:%@", - result ? @"YES" : @"NO", archivePath, *error); - } - return resultData; -} - -id _Nullable GDTCORDecodeArchive(Class archiveClass, - NSString *_Nullable archivePath, - NSData *_Nullable archiveData, - NSError *_Nullable *error) { - id unarchivedObject = nil; -#if (defined(__IPHONE_11_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 110000) || \ - (defined(__MAC_10_13) && MAC_OS_X_VERSION_MAX_ALLOWED >= 101300) || \ - (defined(__TVOS_11_0) && __TV_OS_VERSION_MAX_ALLOWED >= 110000) || \ - (defined(__WATCHOS_4_0) && __WATCH_OS_VERSION_MAX_ALLOWED >= 040000) || \ - (defined(TARGET_OS_MACCATALYST) && TARGET_OS_MACCATALYST) - if (@available(macOS 10.13, iOS 11.0, tvOS 11.0, watchOS 4, *)) { - NSData *data = archiveData ? archiveData : [NSData dataWithContentsOfFile:archivePath]; - if (data) { - unarchivedObject = [NSKeyedUnarchiver unarchivedObjectOfClass:archiveClass - fromData:data - error:error]; - } - } else { -#endif - @try { - NSData *archivedData = - archiveData ? archiveData : [NSData dataWithContentsOfFile:archivePath]; -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - unarchivedObject = [NSKeyedUnarchiver unarchiveObjectWithData:archivedData]; -#pragma clang diagnostic pop - } @catch (NSException *exception) { - NSString *errorString = - [NSString stringWithFormat:@"An exception was thrown during encoding: %@", exception]; - *error = [NSError errorWithDomain:NSCocoaErrorDomain - code:-1 - userInfo:@{NSLocalizedFailureReasonErrorKey : errorString}]; - } - } - return unarchivedObject; -} - -@interface GDTCORApplication () -/** - Private flag to match the existing `readonly` public flag. This will be accurate for all platforms, - since we handle each platform's lifecycle notifications separately. - */ -@property(atomic, readwrite) BOOL isRunningInBackground; - -@end - -@implementation GDTCORApplication - -#if TARGET_OS_WATCH -/** A dispatch queue on which all task semaphores will populate and remove from - * gBackgroundIdentifierToSemaphoreMap. - */ -static dispatch_queue_t gSemaphoreQueue; - -/** For mapping backgroundIdentifier to task semaphore. */ -static NSMutableDictionary *gBackgroundIdentifierToSemaphoreMap; -#endif - -+ (void)load { - GDTCORLogDebug( - @"%@", @"GDT is initializing. Please note that if you quit the app via the " - "debugger and not through a lifecycle event, event data will remain on disk but " - "storage won't have a reference to them since the singleton wasn't saved to disk."); -#if TARGET_OS_IOS || TARGET_OS_TV - // If this asserts, please file a bug at https://github.com/firebase/firebase-ios-sdk/issues. - GDTCORFatalAssert( - GDTCORBackgroundIdentifierInvalid == UIBackgroundTaskInvalid, - @"GDTCORBackgroundIdentifierInvalid and UIBackgroundTaskInvalid should be the same."); -#endif - [self sharedApplication]; -} - -+ (void)initialize { -#if TARGET_OS_WATCH - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - gSemaphoreQueue = dispatch_queue_create("com.google.GDTCORApplication", DISPATCH_QUEUE_SERIAL); - GDTCORLogDebug( - @"%@", - @"GDTCORApplication is initializing on watchOS, gSemaphoreQueue has been initialized."); - gBackgroundIdentifierToSemaphoreMap = [[NSMutableDictionary alloc] init]; - GDTCORLogDebug(@"%@", @"GDTCORApplication is initializing on watchOS, " - @"gBackgroundIdentifierToSemaphoreMap has been initialized."); - }); -#endif -} - -+ (nullable GDTCORApplication *)sharedApplication { - static GDTCORApplication *application; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - application = [[GDTCORApplication alloc] init]; - }); - return application; -} - -- (instancetype)init { - self = [super init]; - if (self) { - // This class will be instantiated in the foreground. - _isRunningInBackground = NO; - -#if TARGET_OS_IOS || TARGET_OS_TV - NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; - [notificationCenter addObserver:self - selector:@selector(iOSApplicationDidEnterBackground:) - name:UIApplicationDidEnterBackgroundNotification - object:nil]; - [notificationCenter addObserver:self - selector:@selector(iOSApplicationWillEnterForeground:) - name:UIApplicationWillEnterForegroundNotification - object:nil]; - - NSString *name = UIApplicationWillTerminateNotification; - [notificationCenter addObserver:self - selector:@selector(iOSApplicationWillTerminate:) - name:name - object:nil]; - -#if defined(__IPHONE_13_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000 - if (@available(iOS 13, tvOS 13.0, *)) { - [notificationCenter addObserver:self - selector:@selector(iOSApplicationWillEnterForeground:) - name:UISceneWillEnterForegroundNotification - object:nil]; - [notificationCenter addObserver:self - selector:@selector(iOSApplicationDidEnterBackground:) - name:UISceneWillDeactivateNotification - object:nil]; - } -#endif // defined(__IPHONE_13_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000 - -#elif TARGET_OS_OSX - NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; - [notificationCenter addObserver:self - selector:@selector(macOSApplicationWillTerminate:) - name:NSApplicationWillTerminateNotification - object:nil]; - -#elif TARGET_OS_WATCH - // TODO: Notification on watchOS platform is currently posted by strings which are frangible. - // TODO: Needs improvements here. - NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; - [notificationCenter addObserver:self - selector:@selector(iOSApplicationDidEnterBackground:) - name:@"UIApplicationDidEnterBackgroundNotification" - object:nil]; - [notificationCenter addObserver:self - selector:@selector(iOSApplicationWillEnterForeground:) - name:@"UIApplicationWillEnterForegroundNotification" - object:nil]; - - // Adds observers for app extension on watchOS platform - [notificationCenter addObserver:self - selector:@selector(iOSApplicationDidEnterBackground:) - name:NSExtensionHostDidEnterBackgroundNotification - object:nil]; - [notificationCenter addObserver:self - selector:@selector(iOSApplicationWillEnterForeground:) - name:NSExtensionHostWillEnterForegroundNotification - object:nil]; -#endif - } - return self; -} - -#if TARGET_OS_WATCH -/** Generates and maps a unique background identifier to the given semaphore. - * - * @param semaphore The semaphore to map. - * @return A unique GDTCORBackgroundIdentifier mapped to the given semaphore. - */ -+ (GDTCORBackgroundIdentifier)createAndMapBackgroundIdentifierToSemaphore: - (dispatch_semaphore_t)semaphore { - __block GDTCORBackgroundIdentifier bgID = GDTCORBackgroundIdentifierInvalid; - dispatch_queue_t queue = gSemaphoreQueue; - NSMutableDictionary *map = gBackgroundIdentifierToSemaphoreMap; - if (queue && map) { - dispatch_sync(queue, ^{ - bgID = arc4random(); - NSNumber *bgIDNumber = @(bgID); - while (bgID == GDTCORBackgroundIdentifierInvalid || map[bgIDNumber]) { - bgID = arc4random(); - bgIDNumber = @(bgID); - } - map[bgIDNumber] = semaphore; - }); - } - return bgID; -} - -/** Returns the semaphore mapped to given bgID and removes the value from the map. - * - * @param bgID The unique NSUInteger as GDTCORBackgroundIdentifier. - * @return The semaphore mapped by given bgID. - */ -+ (dispatch_semaphore_t)semaphoreForBackgroundIdentifier:(GDTCORBackgroundIdentifier)bgID { - __block dispatch_semaphore_t semaphore; - dispatch_queue_t queue = gSemaphoreQueue; - NSMutableDictionary *map = gBackgroundIdentifierToSemaphoreMap; - NSNumber *bgIDNumber = @(bgID); - if (queue && map) { - dispatch_sync(queue, ^{ - semaphore = map[bgIDNumber]; - [map removeObjectForKey:bgIDNumber]; - }); - } - return semaphore; -} -#endif - -- (GDTCORBackgroundIdentifier)beginBackgroundTaskWithName:(NSString *)name - expirationHandler:(void (^)(void))handler { - __block GDTCORBackgroundIdentifier bgID = GDTCORBackgroundIdentifierInvalid; -#if !TARGET_OS_WATCH - bgID = [[self sharedApplicationForBackgroundTask] beginBackgroundTaskWithName:name - expirationHandler:handler]; -#if !NDEBUG - if (bgID != GDTCORBackgroundIdentifierInvalid) { - GDTCORLogDebug(@"Creating background task with name:%@ bgID:%ld", name, (long)bgID); - } -#endif // !NDEBUG -#elif TARGET_OS_WATCH - dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); - bgID = [GDTCORApplication createAndMapBackgroundIdentifierToSemaphore:semaphore]; - if (bgID != GDTCORBackgroundIdentifierInvalid) { - GDTCORLogDebug(@"Creating activity with name:%@ bgID:%ld on watchOS.", name, (long)bgID); - } - [[self sharedNSProcessInfoForBackgroundTask] - performExpiringActivityWithReason:name - usingBlock:^(BOOL expired) { - if (expired) { - if (handler) { - handler(); - } - dispatch_semaphore_signal(semaphore); - GDTCORLogDebug( - @"Activity with name:%@ bgID:%ld on watchOS is expiring.", - name, (long)bgID); - } else { - dispatch_semaphore_wait( - semaphore, - dispatch_time(DISPATCH_TIME_NOW, 30 * NSEC_PER_SEC)); - } - }]; -#endif - return bgID; -} - -- (void)endBackgroundTask:(GDTCORBackgroundIdentifier)bgID { -#if !TARGET_OS_WATCH - if (bgID != GDTCORBackgroundIdentifierInvalid) { - GDTCORLogDebug(@"Ending background task with ID:%ld was successful", (long)bgID); - [[self sharedApplicationForBackgroundTask] endBackgroundTask:bgID]; - return; - } -#elif TARGET_OS_WATCH - if (bgID != GDTCORBackgroundIdentifierInvalid) { - dispatch_semaphore_t semaphore = [GDTCORApplication semaphoreForBackgroundIdentifier:bgID]; - GDTCORLogDebug(@"Ending activity with bgID:%ld on watchOS.", (long)bgID); - if (semaphore) { - dispatch_semaphore_signal(semaphore); - GDTCORLogDebug(@"Signaling semaphore with bgID:%ld on watchOS.", (long)bgID); - } else { - GDTCORLogDebug(@"Semaphore with bgID:%ld is nil on watchOS.", (long)bgID); - } - } -#endif // !TARGET_OS_WATCH -} - -#pragma mark - App environment helpers - -- (BOOL)isAppExtension { - BOOL appExtension = [[[NSBundle mainBundle] bundlePath] hasSuffix:@".appex"]; - return appExtension; -} - -/** Returns a UIApplication or NSProcessInfo instance if on the appropriate platform. - * - * @return The shared UIApplication or NSProcessInfo if on the appropriate platform. - */ -#if TARGET_OS_IOS || TARGET_OS_TV -- (nullable UIApplication *)sharedApplicationForBackgroundTask { -#elif TARGET_OS_WATCH -- (nullable NSProcessInfo *)sharedNSProcessInfoForBackgroundTask { -#else -- (nullable id)sharedApplicationForBackgroundTask { -#endif - id sharedInstance = nil; -#if TARGET_OS_IOS || TARGET_OS_TV - if (![self isAppExtension]) { - Class uiApplicationClass = NSClassFromString(@"UIApplication"); - if (uiApplicationClass && - [uiApplicationClass respondsToSelector:(NSSelectorFromString(@"sharedApplication"))]) { - sharedInstance = [uiApplicationClass sharedApplication]; - } - } -#elif TARGET_OS_WATCH - sharedInstance = [NSProcessInfo processInfo]; -#endif - return sharedInstance; -} - -#pragma mark - UIApplicationDelegate and WKExtensionDelegate - -#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_WATCH -- (void)iOSApplicationDidEnterBackground:(NSNotification *)notif { - _isRunningInBackground = YES; - - NSNotificationCenter *notifCenter = [NSNotificationCenter defaultCenter]; - GDTCORLogDebug(@"%@", @"GDTCORPlatform is sending a notif that the app is backgrounding."); - [notifCenter postNotificationName:kGDTCORApplicationDidEnterBackgroundNotification object:nil]; -} - -- (void)iOSApplicationWillEnterForeground:(NSNotification *)notif { - _isRunningInBackground = NO; - - NSNotificationCenter *notifCenter = [NSNotificationCenter defaultCenter]; - GDTCORLogDebug(@"%@", @"GDTCORPlatform is sending a notif that the app is foregrounding."); - [notifCenter postNotificationName:kGDTCORApplicationWillEnterForegroundNotification object:nil]; -} -#endif // TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_WATCH - -#pragma mark - UIApplicationDelegate - -#if TARGET_OS_IOS || TARGET_OS_TV -- (void)iOSApplicationWillTerminate:(NSNotification *)notif { - NSNotificationCenter *notifCenter = [NSNotificationCenter defaultCenter]; - GDTCORLogDebug(@"%@", @"GDTCORPlatform is sending a notif that the app is terminating."); - [notifCenter postNotificationName:kGDTCORApplicationWillTerminateNotification object:nil]; -} -#endif // TARGET_OS_IOS || TARGET_OS_TV - -#pragma mark - NSApplicationDelegate - -#if TARGET_OS_OSX -- (void)macOSApplicationWillTerminate:(NSNotification *)notif { - NSNotificationCenter *notifCenter = [NSNotificationCenter defaultCenter]; - GDTCORLogDebug(@"%@", @"GDTCORPlatform is sending a notif that the app is terminating."); - [notifCenter postNotificationName:kGDTCORApplicationWillTerminateNotification object:nil]; -} -#endif // TARGET_OS_OSX - -@end diff --git a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORReachability.m b/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORReachability.m deleted file mode 100644 index 8e8bf38b2c..0000000000 --- a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORReachability.m +++ /dev/null @@ -1,125 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "GDTCORLibrary/Public/GDTCORReachability.h" -#import "GDTCORLibrary/Private/GDTCORReachability_Private.h" - -#import - -#import - -/** Sets the _callbackFlag ivar whenever the network changes. - * - * @param reachability The reachability object calling back. - * @param flags The new flag values. - * @param info Any data that might be passed in by the callback. - */ -static void GDTCORReachabilityCallback(GDTCORNetworkReachabilityRef reachability, - GDTCORNetworkReachabilityFlags flags, - void *info); - -@implementation GDTCORReachability { - /** The reachability object. */ - GDTCORNetworkReachabilityRef _reachabilityRef; - - /** The queue on which callbacks and all work will occur. */ - dispatch_queue_t _reachabilityQueue; - - /** Flags specified by reachability callbacks. */ - GDTCORNetworkReachabilityFlags _callbackFlags; -} - -+ (void)initialize { - [self sharedInstance]; -} - -+ (instancetype)sharedInstance { - static GDTCORReachability *sharedInstance; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - sharedInstance = [[GDTCORReachability alloc] init]; - }); - return sharedInstance; -} - -+ (GDTCORNetworkReachabilityFlags)currentFlags { - __block GDTCORNetworkReachabilityFlags currentFlags; -#if !TARGET_OS_WATCH - dispatch_sync([GDTCORReachability sharedInstance] -> _reachabilityQueue, ^{ - GDTCORReachability *reachability = [GDTCORReachability sharedInstance]; - currentFlags = - reachability->_callbackFlags ? reachability->_callbackFlags : reachability->_flags; - GDTCORLogDebug(@"Initial reachability flags determined: %d", currentFlags); - }); -#else - currentFlags = kGDTCORNetworkReachabilityFlagsReachable; -#endif - return currentFlags; -} - -- (instancetype)init { - self = [super init]; -#if !TARGET_OS_WATCH - if (self) { - struct sockaddr_in zeroAddress; - bzero(&zeroAddress, sizeof(zeroAddress)); - zeroAddress.sin_len = sizeof(zeroAddress); - zeroAddress.sin_family = AF_INET; - - _reachabilityQueue = - dispatch_queue_create("com.google.GDTCORReachability", DISPATCH_QUEUE_SERIAL); - _reachabilityRef = SCNetworkReachabilityCreateWithAddress( - kCFAllocatorDefault, (const struct sockaddr *)&zeroAddress); - Boolean success = SCNetworkReachabilitySetDispatchQueue(_reachabilityRef, _reachabilityQueue); - if (!success) { - GDTCORLogWarning(GDTCORMCWReachabilityFailed, @"%@", @"The reachability queue wasn't set."); - } - success = SCNetworkReachabilitySetCallback(_reachabilityRef, GDTCORReachabilityCallback, NULL); - if (!success) { - GDTCORLogWarning(GDTCORMCWReachabilityFailed, @"%@", - @"The reachability callback wasn't set."); - } - - // Get the initial set of flags. - dispatch_async(_reachabilityQueue, ^{ - Boolean valid = SCNetworkReachabilityGetFlags(self->_reachabilityRef, &self->_flags); - if (!valid) { - GDTCORLogDebug(@"%@", @"Determining reachability failed."); - self->_flags = 0; - } - }); - } -#endif - return self; -} - -- (void)setCallbackFlags:(GDTCORNetworkReachabilityFlags)flags { - if (_callbackFlags != flags) { - self->_callbackFlags = flags; - } -} - -@end - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wunused-function" -static void GDTCORReachabilityCallback(GDTCORNetworkReachabilityRef reachability, - GDTCORNetworkReachabilityFlags flags, - void *info) { -#pragma clang diagnostic pop - GDTCORLogDebug(@"Reachability changed, new flags: %d", flags); - [[GDTCORReachability sharedInstance] setCallbackFlags:flags]; -} diff --git a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORRegistrar.m b/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORRegistrar.m deleted file mode 100644 index 8f7cacb96f..0000000000 --- a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORRegistrar.m +++ /dev/null @@ -1,191 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "GDTCORLibrary/Public/GDTCORRegistrar.h" -#import "GDTCORLibrary/Private/GDTCORRegistrar_Private.h" - -#import "GDTCORLibrary/Public/GDTCORConsoleLogger.h" - -id _Nullable GDTCORStorageInstanceForTarget(GDTCORTarget target) { - return [GDTCORRegistrar sharedInstance].targetToStorage[@(target)]; -} - -@implementation GDTCORRegistrar { - /** Backing ivar for targetToUploader property. */ - NSMutableDictionary> *_targetToUploader; - - /** Backing ivar for targetToPrioritizer property. */ - NSMutableDictionary> *_targetToPrioritizer; - - /** Backing ivar for targetToStorage property. */ - NSMutableDictionary> *_targetToStorage; -} - -+ (instancetype)sharedInstance { - static GDTCORRegistrar *sharedInstance; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - sharedInstance = [[GDTCORRegistrar alloc] init]; - }); - return sharedInstance; -} - -- (instancetype)init { - self = [super init]; - if (self) { - _registrarQueue = dispatch_queue_create("com.google.GDTCORRegistrar", DISPATCH_QUEUE_SERIAL); - _targetToPrioritizer = [[NSMutableDictionary alloc] init]; - _targetToUploader = [[NSMutableDictionary alloc] init]; - _targetToStorage = [[NSMutableDictionary alloc] init]; - } - return self; -} - -- (void)registerUploader:(id)backend target:(GDTCORTarget)target { - __weak GDTCORRegistrar *weakSelf = self; - dispatch_async(_registrarQueue, ^{ - GDTCORRegistrar *strongSelf = weakSelf; - if (strongSelf) { - GDTCORLogDebug(@"Registered an uploader: %@ for target:%ld", backend, (long)target); - strongSelf->_targetToUploader[@(target)] = backend; - } - }); -} - -- (void)registerStorage:(id)storage target:(GDTCORTarget)target { - __weak GDTCORRegistrar *weakSelf = self; - dispatch_async(_registrarQueue, ^{ - GDTCORRegistrar *strongSelf = weakSelf; - if (strongSelf) { - GDTCORLogDebug(@"Registered storage: %@ for target:%ld", storage, (long)target); - strongSelf->_targetToStorage[@(target)] = storage; - } - }); -} - -- (void)registerPrioritizer:(id)prioritizer target:(GDTCORTarget)target { - __weak GDTCORRegistrar *weakSelf = self; - dispatch_async(_registrarQueue, ^{ - GDTCORRegistrar *strongSelf = weakSelf; - if (strongSelf) { - GDTCORLogDebug(@"Registered a prioritizer: %@ for target:%ld", prioritizer, (long)target); - strongSelf->_targetToPrioritizer[@(target)] = prioritizer; - } - }); -} - -- (NSMutableDictionary> *)targetToUploader { - __block NSMutableDictionary> *targetToUploader; - __weak GDTCORRegistrar *weakSelf = self; - dispatch_sync(_registrarQueue, ^{ - GDTCORRegistrar *strongSelf = weakSelf; - if (strongSelf) { - targetToUploader = strongSelf->_targetToUploader; - } - }); - return targetToUploader; -} - -- (NSMutableDictionary> *)targetToPrioritizer { - __block NSMutableDictionary> *targetToPrioritizer; - __weak GDTCORRegistrar *weakSelf = self; - dispatch_sync(_registrarQueue, ^{ - GDTCORRegistrar *strongSelf = weakSelf; - if (strongSelf) { - targetToPrioritizer = strongSelf->_targetToPrioritizer; - } - }); - return targetToPrioritizer; -} - -- (NSMutableDictionary> *)targetToStorage { - __block NSMutableDictionary> *targetToStorage; - __weak GDTCORRegistrar *weakSelf = self; - dispatch_sync(_registrarQueue, ^{ - GDTCORRegistrar *strongSelf = weakSelf; - if (strongSelf) { - targetToStorage = strongSelf->_targetToStorage; - } - }); - return targetToStorage; -} - -#pragma mark - GDTCORLifecycleProtocol - -- (void)appWillBackground:(nonnull GDTCORApplication *)app { - NSArray> *uploaders = [self.targetToUploader allValues]; - for (id uploader in uploaders) { - if ([uploader respondsToSelector:@selector(appWillBackground:)]) { - [uploader appWillBackground:app]; - } - } - NSArray> *prioritizers = [self.targetToPrioritizer allValues]; - for (id prioritizer in prioritizers) { - if ([prioritizer respondsToSelector:@selector(appWillBackground:)]) { - [prioritizer appWillBackground:app]; - } - } - NSArray> *storages = [self.targetToStorage allValues]; - for (id storage in storages) { - if ([storage respondsToSelector:@selector(appWillBackground:)]) { - [storage appWillBackground:app]; - } - } -} - -- (void)appWillForeground:(nonnull GDTCORApplication *)app { - NSArray> *uploaders = [self.targetToUploader allValues]; - for (id uploader in uploaders) { - if ([uploader respondsToSelector:@selector(appWillForeground:)]) { - [uploader appWillForeground:app]; - } - } - NSArray> *prioritizers = [self.targetToPrioritizer allValues]; - for (id prioritizer in prioritizers) { - if ([prioritizer respondsToSelector:@selector(appWillForeground:)]) { - [prioritizer appWillForeground:app]; - } - } - NSArray> *storages = [self.targetToStorage allValues]; - for (id storage in storages) { - if ([storage respondsToSelector:@selector(appWillForeground:)]) { - [storage appWillForeground:app]; - } - } -} - -- (void)appWillTerminate:(nonnull GDTCORApplication *)app { - NSArray> *uploaders = [self.targetToUploader allValues]; - for (id uploader in uploaders) { - if ([uploader respondsToSelector:@selector(appWillTerminate:)]) { - [uploader appWillTerminate:app]; - } - } - NSArray> *prioritizers = [self.targetToPrioritizer allValues]; - for (id prioritizer in prioritizers) { - if ([prioritizer respondsToSelector:@selector(appWillTerminate:)]) { - [prioritizer appWillTerminate:app]; - } - } - NSArray> *storages = [self.targetToStorage allValues]; - for (id storage in storages) { - if ([storage respondsToSelector:@selector(appWillTerminate:)]) { - [storage appWillTerminate:app]; - } - } -} - -@end diff --git a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORTransformer.m b/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORTransformer.m deleted file mode 100644 index 35f456e098..0000000000 --- a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORTransformer.m +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "GDTCORLibrary/Private/GDTCORTransformer.h" -#import "GDTCORLibrary/Private/GDTCORTransformer_Private.h" - -#import -#import -#import -#import -#import -#import - -#import "GDTCORLibrary/Private/GDTCOREvent_Private.h" -#import "GDTCORLibrary/Private/GDTCORRegistrar_Private.h" - -@implementation GDTCORTransformer - -+ (instancetype)sharedInstance { - static GDTCORTransformer *eventTransformer; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - eventTransformer = [[self alloc] init]; - }); - return eventTransformer; -} - -- (instancetype)init { - self = [super init]; - if (self) { - _eventWritingQueue = - dispatch_queue_create("com.google.GDTCORTransformer", DISPATCH_QUEUE_SERIAL); - } - return self; -} - -- (void)transformEvent:(GDTCOREvent *)event - withTransformers:(NSArray> *)transformers - onComplete:(void (^_Nullable)(BOOL wasWritten, NSError *_Nullable error))completion { - GDTCORAssert(event, @"You can't write a nil event"); - BOOL hadOriginalCompletion = completion != nil; - if (!completion) { - completion = ^(BOOL wasWritten, NSError *_Nullable error) { - }; - } - - __block GDTCORBackgroundIdentifier bgID = GDTCORBackgroundIdentifierInvalid; - bgID = [[GDTCORApplication sharedApplication] - beginBackgroundTaskWithName:@"GDTTransformer" - expirationHandler:^{ - [[GDTCORApplication sharedApplication] endBackgroundTask:bgID]; - bgID = GDTCORBackgroundIdentifierInvalid; - }]; - dispatch_async(_eventWritingQueue, ^{ - GDTCOREvent *transformedEvent = event; - for (id transformer in transformers) { - if ([transformer respondsToSelector:@selector(transform:)]) { - GDTCORLogDebug(@"Applying a transformer to event %@", event); - transformedEvent = [transformer transform:transformedEvent]; - if (!transformedEvent) { - completion(NO, nil); - return; - } - } else { - GDTCORLogError(GDTCORMCETransformerDoesntImplementTransform, - @"Transformer doesn't implement transform: %@", transformer); - completion(NO, nil); - return; - } - } - - id storage = - [GDTCORRegistrar sharedInstance].targetToStorage[@(event.target)]; - - [storage storeEvent:transformedEvent onComplete:hadOriginalCompletion ? completion : nil]; - - // The work is done, cancel the background task if it's valid. - [[GDTCORApplication sharedApplication] endBackgroundTask:bgID]; - bgID = GDTCORBackgroundIdentifierInvalid; - }); -} - -#pragma mark - GDTCORLifecycleProtocol - -- (void)appWillTerminate:(GDTCORApplication *)application { - // Flush the queue immediately. - dispatch_sync(_eventWritingQueue, ^{ - }); -} - -@end diff --git a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORTransport.m b/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORTransport.m deleted file mode 100644 index 6c6af23fef..0000000000 --- a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORTransport.m +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "GDTCORLibrary/Public/GDTCORTransport.h" -#import "GDTCORLibrary/Private/GDTCORTransport_Private.h" - -#import -#import -#import - -#import "GDTCORLibrary/Private/GDTCORTransformer.h" - -@implementation GDTCORTransport - -- (nullable instancetype)initWithMappingID:(NSString *)mappingID - transformers: - (nullable NSArray> *)transformers - target:(NSInteger)target { - GDTCORAssert(mappingID.length > 0, @"A mapping ID cannot be nil or empty"); - GDTCORAssert(target > 0, @"A target cannot be negative or 0"); - if (mappingID == nil || mappingID.length == 0 || target <= 0) { - return nil; - } - self = [super init]; - if (self) { - _mappingID = mappingID; - _transformers = transformers; - _target = target; - _transformerInstance = [GDTCORTransformer sharedInstance]; - } - GDTCORLogDebug(@"Transport object created. mappingID:%@ transformers:%@ target:%ld", mappingID, - transformers, (long)target); - return self; -} - -- (void)sendTelemetryEvent:(GDTCOREvent *)event - onComplete: - (void (^_Nullable)(BOOL wasWritten, NSError *_Nullable error))completion { - event.qosTier = GDTCOREventQoSTelemetry; - [self sendEvent:event onComplete:completion]; -} - -- (void)sendDataEvent:(GDTCOREvent *)event - onComplete:(void (^_Nullable)(BOOL wasWritten, NSError *_Nullable error))completion { - GDTCORAssert(event.qosTier != GDTCOREventQoSTelemetry, @"Use -sendTelemetryEvent, please."); - [self sendEvent:event onComplete:completion]; -} - -- (void)sendTelemetryEvent:(GDTCOREvent *)event { - [self sendTelemetryEvent:event onComplete:nil]; -} - -- (void)sendDataEvent:(GDTCOREvent *)event { - [self sendDataEvent:event onComplete:nil]; -} - -- (GDTCOREvent *)eventForTransport { - return [[GDTCOREvent alloc] initWithMappingID:_mappingID target:_target]; -} - -#pragma mark - Private helper methods - -/** Sends the given event through the transport pipeline. - * - * @param event The event to send. - * @param completion A block that will be called when the event has been written or dropped. - */ -- (void)sendEvent:(GDTCOREvent *)event - onComplete:(void (^_Nullable)(BOOL wasWritten, NSError *_Nullable error))completion { - // TODO: Determine if sending an event before registration is allowed. - GDTCORAssert(event, @"You can't send a nil event"); - GDTCOREvent *copiedEvent = [event copy]; - copiedEvent.clockSnapshot = [GDTCORClock snapshot]; - [self.transformerInstance transformEvent:copiedEvent - withTransformers:_transformers - onComplete:completion]; -} - -@end diff --git a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORUploadCoordinator.m b/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORUploadCoordinator.m deleted file mode 100644 index c712e5e668..0000000000 --- a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORUploadCoordinator.m +++ /dev/null @@ -1,275 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "GDTCORLibrary/Private/GDTCORUploadCoordinator.h" - -#import -#import -#import -#import - -#import "GDTCORLibrary/Private/GDTCORRegistrar_Private.h" - -@implementation GDTCORUploadCoordinator - -+ (instancetype)sharedInstance { - static GDTCORUploadCoordinator *sharedUploader; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - sharedUploader = [[GDTCORUploadCoordinator alloc] init]; - [sharedUploader startTimer]; - }); - return sharedUploader; -} - -- (instancetype)init { - self = [super init]; - if (self) { - _coordinationQueue = - dispatch_queue_create("com.google.GDTCORUploadCoordinator", DISPATCH_QUEUE_SERIAL); - _registrar = [GDTCORRegistrar sharedInstance]; - _timerInterval = 30 * NSEC_PER_SEC; - _timerLeeway = 5 * NSEC_PER_SEC; - _targetToInFlightPackages = [[NSMutableDictionary alloc] init]; - } - return self; -} - -- (void)forceUploadForTarget:(GDTCORTarget)target { - dispatch_async(_coordinationQueue, ^{ - GDTCORLogDebug(@"Forcing an upload of target %ld", (long)target); - GDTCORUploadConditions conditions = [self uploadConditions]; - conditions |= GDTCORUploadConditionHighPriority; - [self uploadTargets:@[ @(target) ] conditions:conditions]; - }); -} - -#pragma mark - Private helper methods - -/** Starts a timer that checks whether or not events can be uploaded at regular intervals. It will - * check the next-upload clocks of all targets to determine if an upload attempt can be made. - */ -- (void)startTimer { - dispatch_async(_coordinationQueue, ^{ - self->_timer = - dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, self->_coordinationQueue); - dispatch_source_set_timer(self->_timer, DISPATCH_TIME_NOW, self->_timerInterval, - self->_timerLeeway); - dispatch_source_set_event_handler(self->_timer, ^{ - if (![[GDTCORApplication sharedApplication] isRunningInBackground]) { - GDTCORUploadConditions conditions = [self uploadConditions]; - GDTCORLogDebug(@"%@", @"Upload timer fired"); - [self uploadTargets:[self.registrar.targetToUploader allKeys] conditions:conditions]; - } - }); - GDTCORLogDebug(@"%@", @"Upload timer started"); - dispatch_resume(self->_timer); - }); -} - -/** Stops the currently running timer. */ -- (void)stopTimer { - if (_timer) { - dispatch_source_cancel(_timer); - } -} - -/** Triggers the uploader implementations for the given targets to upload. - * - * @param targets An array of targets to trigger. - * @param conditions The set of upload conditions. - */ -- (void)uploadTargets:(NSArray *)targets conditions:(GDTCORUploadConditions)conditions { - dispatch_async(_coordinationQueue, ^{ - if ((conditions & GDTCORUploadConditionNoNetwork) == GDTCORUploadConditionNoNetwork) { - return; - } - for (NSNumber *target in targets) { - // Don't trigger uploads for targets that have an in-flight package already. - if (self->_targetToInFlightPackages[target]) { - GDTCORLogDebug(@"Target %@ will not upload, there's an upload in flight", target); - continue; - } - // Ask the uploader if they can upload and do so, if it can. - id uploader = self.registrar.targetToUploader[target]; - if ([uploader readyToUploadTarget:target.intValue conditions:conditions]) { - id prioritizer = self.registrar.targetToPrioritizer[target]; - GDTCORUploadPackage *package = [prioritizer uploadPackageWithTarget:target.intValue - conditions:conditions]; - if (package.events.count) { - self->_targetToInFlightPackages[target] = package; - GDTCORLogDebug(@"Package of %ld events is being handed over to an uploader", - (long)package.events.count); - [uploader uploadPackage:package]; - } else { - [package completeDelivery]; - } - } - GDTCORLogDebug(@"Target %@ is not ready to upload", target); - } - }); -} - -/** Returns the registered storage for the given NSNumber wrapped GDTCORTarget. - * - * @param target The NSNumber wrapping of a GDTCORTarget to find the storage instance of. - * @return The storage instance for the given target. - */ -- (nullable id)storageForTarget:(NSNumber *)target { - id storage = [GDTCORRegistrar sharedInstance].targetToStorage[target]; - GDTCORAssert(storage, @"A storage must be registered for target %@", target); - return storage; -} - -/** Returns the current upload conditions after making determinations about the network connection. - * - * @return The current upload conditions. - */ -- (GDTCORUploadConditions)uploadConditions { - GDTCORNetworkReachabilityFlags currentFlags = [GDTCORReachability currentFlags]; - BOOL networkConnected = GDTCORReachabilityFlagsReachable(currentFlags); - if (!networkConnected) { - return GDTCORUploadConditionNoNetwork; - } - BOOL isWWAN = GDTCORReachabilityFlagsContainWWAN(currentFlags); - if (isWWAN) { - return GDTCORUploadConditionMobileData; - } else { - return GDTCORUploadConditionWifiData; - } -} - -#pragma mark - NSSecureCoding support - -/** The NSKeyedCoder key for the targetToInFlightPackages property. */ -static NSString *const ktargetToInFlightPackagesKey = - @"GDTCORUploadCoordinatortargetToInFlightPackages"; - -+ (BOOL)supportsSecureCoding { - return YES; -} - -- (instancetype)initWithCoder:(NSCoder *)aDecoder { - GDTCORUploadCoordinator *sharedCoordinator = [GDTCORUploadCoordinator sharedInstance]; - dispatch_sync(sharedCoordinator->_coordinationQueue, ^{ - @try { - NSSet *classes = - [NSSet setWithObjects:[NSMutableDictionary class], [GDTCORUploadPackage class], nil]; - sharedCoordinator->_targetToInFlightPackages = - [aDecoder decodeObjectOfClasses:classes forKey:ktargetToInFlightPackagesKey]; - - } @catch (NSException *exception) { - sharedCoordinator->_targetToInFlightPackages = [NSMutableDictionary dictionary]; - } - }); - return sharedCoordinator; -} - -- (void)encodeWithCoder:(NSCoder *)aCoder { - dispatch_sync(_coordinationQueue, ^{ - // All packages that have been given to uploaders need to be tracked so that their expiration - // timers can be called. - if (self->_targetToInFlightPackages.count > 0) { - [aCoder encodeObject:self->_targetToInFlightPackages forKey:ktargetToInFlightPackagesKey]; - } - }); -} - -#pragma mark - GDTCORLifecycleProtocol - -- (void)appWillForeground:(GDTCORApplication *)app { - // -startTimer is thread-safe. - [self startTimer]; -} - -- (void)appWillBackground:(GDTCORApplication *)app { - dispatch_async(_coordinationQueue, ^{ - [self stopTimer]; - }); -} - -- (void)appWillTerminate:(GDTCORApplication *)application { - dispatch_sync(_coordinationQueue, ^{ - [self stopTimer]; - }); -} - -#pragma mark - GDTCORUploadPackageProtocol - -- (void)packageDelivered:(GDTCORUploadPackage *)package successful:(BOOL)successful { - if (!_coordinationQueue) { - return; - } - dispatch_async(_coordinationQueue, ^{ - NSNumber *targetNumber = @(package.target); - NSMutableDictionary *targetToInFlightPackages = - self->_targetToInFlightPackages; - GDTCORRegistrar *registrar = self->_registrar; - if (targetToInFlightPackages) { - [targetToInFlightPackages removeObjectForKey:targetNumber]; - } - NSSet *packageEvents = [package.events copy]; - if (registrar) { - id prioritizer = registrar.targetToPrioritizer[targetNumber]; - if (!prioritizer) { - GDTCORLogError(GDTCORMCEPrioritizerError, - @"A prioritizer should be registered for this target: %@", targetNumber); - } - if ([prioritizer respondsToSelector:@selector(packageDelivered:successful:)]) { - [prioritizer packageDelivered:[package copy] successful:successful]; - } - } - if (successful && packageEvents.count) { - NSMutableSet *eventIDs = [[NSMutableSet alloc] init]; - for (GDTCOREvent *event in packageEvents) { - NSNumber *eventID = event.eventID; - if (eventID != nil) { - [eventIDs addObject:eventID]; - } else { - GDTCORLogDebug(@"An event was missing its ID: %@", event); - } - } - [[self storageForTarget:@(package.target)] removeEvents:eventIDs]; - } - }); -} - -- (void)packageExpired:(GDTCORUploadPackage *)package { - if (!_coordinationQueue) { - return; - } - dispatch_async(_coordinationQueue, ^{ - NSNumber *targetNumber = @(package.target); - NSMutableDictionary *targetToInFlightPackages = - self->_targetToInFlightPackages; - GDTCORRegistrar *registrar = self->_registrar; - if (targetToInFlightPackages) { - [targetToInFlightPackages removeObjectForKey:targetNumber]; - } - if (registrar) { - id prioritizer = registrar.targetToPrioritizer[targetNumber]; - id uploader = registrar.targetToUploader[targetNumber]; - if ([prioritizer respondsToSelector:@selector(packageExpired:)]) { - [prioritizer packageExpired:package]; - } - if ([uploader respondsToSelector:@selector(packageExpired:)]) { - [uploader packageExpired:package]; - } - } - }); -} - -@end diff --git a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORUploadPackage.m b/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORUploadPackage.m deleted file mode 100644 index 38b7a7c59a..0000000000 --- a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORUploadPackage.m +++ /dev/null @@ -1,193 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "GDTCORLibrary/Public/GDTCORUploadPackage.h" - -#import -#import - -#import "GDTCORLibrary/Private/GDTCORRegistrar_Private.h" -#import "GDTCORLibrary/Private/GDTCORUploadCoordinator.h" -#import "GDTCORLibrary/Private/GDTCORUploadPackage_Private.h" - -/** A class that holds a weak reference to an upload package, for use by the package's NSTimer. */ -@interface GDTCORUploadPackageTimerHolder : NSObject - -/** The upload package. */ -@property(weak, nonatomic) GDTCORUploadPackage *package; - -@end - -@implementation GDTCORUploadPackageTimerHolder - -/** Calls checkIfPackageIsExpired on the package if non-nil. Invalidates if the package is nil. - * - * @param timer The timer instance calling this method. - */ -- (void)timerFired:(NSTimer *)timer { - if (_package) { - [_package checkIfPackageIsExpired]; - } else { - [timer invalidate]; - } -} - -@end - -@implementation GDTCORUploadPackage { - /** If YES, the package's -completeDelivery method has been called. */ - BOOL _isDelivered; - - /** If YES, is being handled by the handler. */ - BOOL _isHandled; - - /** A timer that will regularly check to see whether this package has expired or not. */ - NSTimer *_expirationTimer; -} - -- (instancetype)initWithTarget:(GDTCORTarget)target { - self = [super init]; - if (self) { - _target = target; - _storage = [GDTCORRegistrar sharedInstance].targetToStorage[@(target)]; - _deliverByTime = [GDTCORClock clockSnapshotInTheFuture:180000]; - _handler = [GDTCORUploadCoordinator sharedInstance]; - GDTCORUploadPackageTimerHolder *holder = [[GDTCORUploadPackageTimerHolder alloc] init]; - holder.package = self; - _expirationTimer = [NSTimer scheduledTimerWithTimeInterval:5.0 - target:holder - selector:@selector(timerFired:) - userInfo:nil - repeats:YES]; - } - GDTCORLogDebug(@"Upload package created %@", self); - return self; -} - -- (instancetype)copy { - GDTCORUploadPackage *newPackage = [[GDTCORUploadPackage alloc] init]; - newPackage->_target = _target; - newPackage->_storage = _storage; - newPackage->_deliverByTime = _deliverByTime; - newPackage->_handler = _handler; - GDTCORUploadPackageTimerHolder *holder = [[GDTCORUploadPackageTimerHolder alloc] init]; - holder.package = newPackage; - newPackage->_expirationTimer = [NSTimer scheduledTimerWithTimeInterval:5.0 - target:holder - selector:@selector(timerFired:) - userInfo:nil - repeats:YES]; - newPackage->_events = [_events copy]; - GDTCORLogDebug(@"Copying UploadPackage %@ to %@", self, newPackage); - return newPackage; -} - -- (NSUInteger)hash { - return [_events hash]; -} - -- (BOOL)isEqual:(id)object { - return [self hash] == [object hash]; -} - -- (void)dealloc { - [_expirationTimer invalidate]; -} - -- (void)completeDelivery { - if (_isDelivered) { - GDTCORLogError(GDTCORMCEDeliverTwice, @"%@", - @"It's an API violation to call -completeDelivery twice."); - } - _isDelivered = YES; - [_expirationTimer invalidate]; - if (!_isHandled && _handler && - [_handler respondsToSelector:@selector(packageDelivered:successful:)]) { - _isHandled = YES; - [_handler packageDelivered:[self copy] successful:YES]; - } - GDTCORLogDebug(@"Upload package delivered: %@", self); -} - -- (void)retryDeliveryInTheFuture { - [_expirationTimer invalidate]; - if (!_isHandled && _handler && - [_handler respondsToSelector:@selector(packageDelivered:successful:)]) { - _isHandled = YES; - [_handler packageDelivered:[self copy] successful:NO]; - } - GDTCORLogDebug(@"Upload package will retry in the future: %@", self); -} - -- (void)checkIfPackageIsExpired { - if ([[GDTCORClock snapshot] isAfter:_deliverByTime]) { - [_expirationTimer invalidate]; - if (_handler && [_handler respondsToSelector:@selector(packageExpired:)]) { - _isHandled = YES; - GDTCORLogDebug(@"Upload package expired: %@", self); - [_handler packageExpired:self]; - } - } -} - -#pragma mark - NSSecureCoding - -/** The keyed archiver key for the events property. */ -static NSString *const kEventsKey = @"GDTCORUploadPackageEventsKey"; - -/** The keyed archiver key for the _isHandled property. */ -static NSString *const kDeliverByTimeKey = @"GDTCORUploadPackageDeliveryByTimeKey"; - -/** The keyed archiver key for the _isHandled ivar. */ -static NSString *const kIsHandledKey = @"GDTCORUploadPackageIsHandledKey"; - -/** The keyed archiver key for the handler property. */ -static NSString *const kHandlerKey = @"GDTCORUploadPackageHandlerKey"; - -/** The keyed archiver key for the target property. */ -static NSString *const kTargetKey = @"GDTCORUploadPackageTargetKey"; - -+ (BOOL)supportsSecureCoding { - return YES; -} - -- (void)encodeWithCoder:(nonnull NSCoder *)aCoder { - [aCoder encodeObject:_events forKey:kEventsKey]; - [aCoder encodeObject:_deliverByTime forKey:kDeliverByTimeKey]; - [aCoder encodeBool:_isHandled forKey:kIsHandledKey]; - [aCoder encodeObject:_handler forKey:kHandlerKey]; - [aCoder encodeInteger:_target forKey:kTargetKey]; -} - -- (nullable instancetype)initWithCoder:(nonnull NSCoder *)aDecoder { - // Sets a global translation mapping to decode GDTCORStoredEvent objects encoded as instances of - // GDTCOREvent instead. - [NSKeyedUnarchiver setClass:[GDTCOREvent class] forClassName:@"GDTCORStoredEvent"]; - - GDTCORTarget target = [aDecoder decodeIntegerForKey:kTargetKey]; - self = [self initWithTarget:target]; - if (self) { - NSSet *classes = [NSSet setWithObjects:[NSSet class], [GDTCOREvent class], nil]; - _events = [aDecoder decodeObjectOfClasses:classes forKey:kEventsKey]; - _deliverByTime = [aDecoder decodeObjectOfClass:[GDTCORClock class] forKey:kDeliverByTimeKey]; - _isHandled = [aDecoder decodeBoolForKey:kIsHandledKey]; - // _handler isn't technically NSSecureCoding, because we don't know the class of this object. - // but it gets decoded anyway. - } - return self; -} - -@end diff --git a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORDataFuture.h b/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORDataFuture.h deleted file mode 100644 index 685cf2bac8..0000000000 --- a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORDataFuture.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** This class represents a future data object, determined at instantiation time. */ -@interface GDTCORDataFuture : NSObject - -/** If not nil, this data future was instantiated with this file URL. */ -@property(nullable, readonly, nonatomic) NSURL *fileURL; - -/** Initializes an instance with the given the fileURL. - * - * @param fileURL The fileURL containing the data to return in -data. - * @return An instance of this class. - */ -- (instancetype)initWithFileURL:(NSURL *)fileURL; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCOREvent_Private.h b/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCOREvent_Private.h deleted file mode 100644 index 485d6bb8e8..0000000000 --- a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCOREvent_Private.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface GDTCOREvent () - -/** The unique ID of the event. This property is for testing only. */ -@property(nonatomic, readwrite) NSNumber *eventID; - -/** The GDT relative file path of the event. */ -@property(nullable, nonatomic, readonly) NSString *GDTFilePath; - -/** Writes [dataObject transportBytes] to the given URL, populates fileURL with the filename, then - * nils the dataObject property. This method should not be called twice on the same event. - * - * @param filePath The GDTCORRootDirectory-relative path that dataObject will be written to. - * @param error If populated, the error encountered during writing to disk. - * @return YES if writing dataObject to disk was successful, NO otherwise. - */ -- (BOOL)writeToGDTPath:(NSString *)filePath error:(NSError **)error; - -/** Generates incrementing event IDs, stored in a file in the app's cache. - * - * @return An event ID that is incremented based on a number in a file stored in the app cache. - */ -+ (NSNumber *)nextEventID; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORFlatFileStorage.h b/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORFlatFileStorage.h deleted file mode 100644 index 837c3ea085..0000000000 --- a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORFlatFileStorage.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -#import -#import - -@class GDTCOREvent; -@class GDTCORUploadCoordinator; - -NS_ASSUME_NONNULL_BEGIN - -/** Manages the storage of events. This class is thread-safe. */ -@interface GDTCORFlatFileStorage - : NSObject - -/** The queue on which all storage work will occur. */ -@property(nonatomic) dispatch_queue_t storageQueue; - -/** A map of targets to a set of stored events. */ -@property(nonatomic) - NSMutableDictionary *> *targetToEventSet; - -/** All the events that have been stored. */ -@property(readonly, nonatomic) NSMutableDictionary *storedEvents; - -/** The upload coordinator instance used by this storage instance. */ -@property(nonatomic) GDTCORUploadCoordinator *uploadCoordinator; - -/** Creates and/or returns the storage singleton. - * - * @return The storage singleton. - */ -+ (instancetype)sharedInstance; - -/** Returns the path to the keyed archive of the singleton. This is where the singleton is saved - * to disk during certain app lifecycle events. - * - * @return File path to serialized singleton. - */ -+ (NSString *)archivePath; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORReachability_Private.h b/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORReachability_Private.h deleted file mode 100644 index c5ca191a0f..0000000000 --- a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORReachability_Private.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "GDTCORLibrary/Public/GDTCORReachability.h" - -@interface GDTCORReachability () - -/** Allows manually setting the flags for testing purposes. */ -@property(nonatomic, readwrite) GDTCORNetworkReachabilityFlags flags; - -/** Creates/returns the singleton instance of this class. - * - * @return The singleton instance of this class. - */ -+ (instancetype)sharedInstance; - -@end diff --git a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORRegistrar_Private.h b/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORRegistrar_Private.h deleted file mode 100644 index 8b298397a5..0000000000 --- a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORRegistrar_Private.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -@interface GDTCORRegistrar () - -NS_ASSUME_NONNULL_BEGIN - -/** The concurrent queue on which all registration occurs. */ -@property(nonatomic, readonly) dispatch_queue_t registrarQueue; - -/** A map of targets to backend implementations. */ -@property(atomic, readonly) NSMutableDictionary> *targetToUploader; - -/** A map of targets to prioritizer implementations. */ -@property(atomic, readonly) - NSMutableDictionary> *targetToPrioritizer; - -/** A map of targets to storage instances. */ -@property(atomic, readonly) - NSMutableDictionary> *targetToStorage; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransformer.h b/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransformer.h deleted file mode 100644 index e2dbff1265..0000000000 --- a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransformer.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -#import - -@class GDTCOREvent; - -@protocol GDTCOREventTransformer; - -NS_ASSUME_NONNULL_BEGIN - -/** Manages the transforming of events. It's desirable for this to be its own class - * because running all events through a single instance ensures that transformers are thread-safe. - * Having a per-transport queue to run on isn't sufficient because transformer objects could - * maintain state (or at least, there's nothing to stop them from doing that) and the same instances - * may be used across multiple instances. - */ -@interface GDTCORTransformer : NSObject - -/** Instantiates or returns the event transformer singleton. - * - * @return The singleton instance of the event transformer. - */ -+ (instancetype)sharedInstance; - -/** Writes the result of applying the given transformers' -transform method on the given event. - * - * @note If the app is suspended, a background task will be created to complete work in-progress, - * but this method will not send any further events until the app is resumed. - * - * @param event The event to apply transformers on. - * @param transformers The list of transformers to apply. - * @param completion A block to run when an event was written to disk or dropped. - */ -- (void)transformEvent:(GDTCOREvent *)event - withTransformers:(nullable NSArray> *)transformers - onComplete:(void (^_Nullable)(BOOL wasWritten, NSError *_Nullable error))completion; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransformer_Private.h b/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransformer_Private.h deleted file mode 100644 index 4adcf93e06..0000000000 --- a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransformer_Private.h +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "GDTCORLibrary/Private/GDTCORTransformer.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface GDTCORTransformer () - -/** The queue on which all work will occur. */ -@property(nonatomic) dispatch_queue_t eventWritingQueue; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransport_Private.h b/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransport_Private.h deleted file mode 100644 index 71f73a6f43..0000000000 --- a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransport_Private.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -@class GDTCORTransformer; - -NS_ASSUME_NONNULL_BEGIN - -@interface GDTCORTransport () - -/** The mapping identifier that the target backend will use to map the transport bytes to proto. */ -@property(nonatomic) NSString *mappingID; - -/** The transformers that will operate on events sent by this transport. */ -@property(nonatomic) NSArray> *transformers; - -/** The target backend of this transport. */ -@property(nonatomic) NSInteger target; - -/** The transformer instance to used to transform events. Allows injecting a fake during testing. */ -@property(nonatomic) GDTCORTransformer *transformerInstance; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORUploadCoordinator.h b/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORUploadCoordinator.h deleted file mode 100644 index b678ef258a..0000000000 --- a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORUploadCoordinator.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -#import -#import - -#import "GDTCORLibrary/Private/GDTCORUploadPackage_Private.h" - -@class GDTCORClock; - -NS_ASSUME_NONNULL_BEGIN - -/** This class connects storage and uploader implementations, providing events to an uploader - * and informing the storage what events were successfully uploaded or not. - */ -@interface GDTCORUploadCoordinator - : NSObject - -/** The queue on which all upload coordination will occur. Also used by a dispatch timer. */ -/** Creates and/or returrns the singleton. - * - * @return The singleton instance of this class. - */ -+ (instancetype)sharedInstance; - -/** The queue on which all upload coordination will occur. */ -@property(nonatomic, readonly) dispatch_queue_t coordinationQueue; - -/** A timer that will causes regular checks for events to upload. */ -@property(nonatomic, readonly) dispatch_source_t timer; - -/** The interval the timer will fire. */ -@property(nonatomic, readonly) uint64_t timerInterval; - -/** Some leeway given to libdispatch for the timer interval event. */ -@property(nonatomic, readonly) uint64_t timerLeeway; - -/** The map of targets to in-flight packages. */ -@property(nonatomic, readonly) - NSMutableDictionary *targetToInFlightPackages; - -/** The registrar object the coordinator will use. Generally used for testing. */ -@property(nonatomic) GDTCORRegistrar *registrar; - -/** Forces the backend specified by the target to upload the provided set of events. This should - * only ever happen when the QoS tier of an event requires it. - * - * @param target The target that should force an upload. - */ -- (void)forceUploadForTarget:(GDTCORTarget)target; - -/** Starts the upload timer. */ -- (void)startTimer; - -/** Stops the upload timer from running. */ -- (void)stopTimer; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORUploadPackage_Private.h b/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORUploadPackage_Private.h deleted file mode 100644 index 1ab643258f..0000000000 --- a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORUploadPackage_Private.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -@interface GDTCORUploadPackage () - -/** The storage object this upload package will use to resolve event hashes to files. */ -@property(nonatomic) id storage; - -/** A handler that will receive callbacks for certain events. */ -@property(nonatomic) id handler; - -/** Checks if the package is expired and calls -packageExpired: on the handler if necessary. */ -- (void)checkIfPackageIsExpired; - -@end diff --git a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORAssert.h b/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORAssert.h deleted file mode 100644 index c0f9712cef..0000000000 --- a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORAssert.h +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** A block type that could be run instead of normal assertion logging. No return type, no params. - */ -typedef void (^GDTCORAssertionBlock)(void); - -/** Returns the result of executing a soft-linked method present in unit tests that allows a block - * to be run instead of normal assertion logging. This helps ameliorate issues with catching - * exceptions that occur on a dispatch_queue. - * - * @return A block that can be run instead of normal assert printing. - */ -FOUNDATION_EXPORT GDTCORAssertionBlock _Nullable GDTCORAssertionBlockToRunInstead(void); - -#if defined(NS_BLOCK_ASSERTIONS) - -#define GDTCORAssert(condition, ...) \ - do { \ - } while (0); - -#define GDTCORFatalAssert(condition, ...) \ - do { \ - } while (0); - -#else // defined(NS_BLOCK_ASSERTIONS) - -/** Asserts using a console log, unless a block was specified to be run instead. - * - * @param condition The condition you'd expect to be YES. - */ -#define GDTCORAssert(condition, format, ...) \ - do { \ - __PRAGMA_PUSH_NO_EXTRA_ARG_WARNINGS \ - if (__builtin_expect(!(condition), 0)) { \ - GDTCORAssertionBlock assertionBlock = GDTCORAssertionBlockToRunInstead(); \ - if (assertionBlock) { \ - assertionBlock(); \ - } else { \ - NSString *__assert_file__ = [NSString stringWithUTF8String:__FILE__]; \ - __assert_file__ = __assert_file__ ? __assert_file__ : @""; \ - GDTCORLogAssert(NO, __assert_file__, __LINE__, format, ##__VA_ARGS__); \ - __PRAGMA_POP_NO_EXTRA_ARG_WARNINGS \ - } \ - } \ - } while (0); - -/** Asserts by logging to the console and throwing an exception if NS_BLOCK_ASSERTIONS is not - * defined. - * - * @param condition The condition you'd expect to be YES. - */ -#define GDTCORFatalAssert(condition, format, ...) \ - do { \ - __PRAGMA_PUSH_NO_EXTRA_ARG_WARNINGS \ - if (__builtin_expect(!(condition), 0)) { \ - GDTCORAssertionBlock assertionBlock = GDTCORAssertionBlockToRunInstead(); \ - if (assertionBlock) { \ - assertionBlock(); \ - } else { \ - NSString *__assert_file__ = [NSString stringWithUTF8String:__FILE__]; \ - __assert_file__ = __assert_file__ ? __assert_file__ : @""; \ - GDTCORLogAssert(YES, __assert_file__, __LINE__, format, ##__VA_ARGS__); \ - [[NSAssertionHandler currentHandler] handleFailureInMethod:_cmd \ - object:self \ - file:__assert_file__ \ - lineNumber:__LINE__ \ - description:format, ##__VA_ARGS__]; \ - __PRAGMA_POP_NO_EXTRA_ARG_WARNINGS \ - } \ - } \ - } while (0); - -#endif // defined(NS_BLOCK_ASSERTIONS) - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORClock.h b/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORClock.h deleted file mode 100644 index 01de21ae09..0000000000 --- a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORClock.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** This class manages the device clock and produces snapshots of the current time. */ -@interface GDTCORClock : NSObject - -/** The wallclock time, UTC, in milliseconds. */ -@property(nonatomic, readonly) int64_t timeMillis; - -/** The offset from UTC in seconds. */ -@property(nonatomic, readonly) int64_t timezoneOffsetSeconds; - -/** The kernel boot time when this clock was created. */ -@property(nonatomic, readonly) int64_t kernelBootTime; - -/** The device uptime when this clock was created. */ -@property(nonatomic, readonly) int64_t uptime; - -/** Creates a GDTCORClock object using the current time and offsets. - * - * @return A new GDTCORClock object representing the current time state. - */ -+ (instancetype)snapshot; - -/** Creates a GDTCORClock object representing a time in the future, relative to now. - * - * @param millisInTheFuture The millis in the future from now this clock should represent. - * @return An instance representing a future time. - */ -+ (instancetype)clockSnapshotInTheFuture:(uint64_t)millisInTheFuture; - -/** Compares one clock with another, returns YES if the caller is after the parameter. - * - * @return YES if the calling clock's time is after the given clock's time. - */ -- (BOOL)isAfter:(GDTCORClock *)otherClock; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORConsoleLogger.h b/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORConsoleLogger.h deleted file mode 100644 index d306f18266..0000000000 --- a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORConsoleLogger.h +++ /dev/null @@ -1,143 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -/** The current logging level. This value and higher will be printed. Declared as volatile to make - * getting and setting atomic. - */ -FOUNDATION_EXPORT volatile NSInteger GDTCORConsoleLoggerLoggingLevel; - -/** A list of logging levels that GDT supports. */ -typedef NS_ENUM(NSInteger, GDTCORLoggingLevel) { - - /** Causes all logs to be printed. */ - GDTCORLoggingLevelDebug = 1, - - /** Causes all non-debug logs to be printed. */ - GDTCORLoggingLevelVerbose = 2, - - /** Causes warnings and errors to be printed. */ - GDTCORLoggingLevelWarnings = 3, - - /** Causes errors to be printed. This is the default value. */ - GDTCORLoggingLevelErrors = 4 -}; - -/** A list of message codes to print in the logger that help to correspond printed messages with - * code locations. - * - * Prefixes: - * - MCD => MessageCodeDebug - * - MCW => MessageCodeWarning - * - MCE => MessageCodeError - */ -typedef NS_ENUM(NSInteger, GDTCORMessageCode) { - - /** For debug logs. */ - GDTCORMCDDebugLog = 0, - - /** For warning messages concerning transportBytes: not being implemented by a data object. */ - GDTCORMCWDataObjectMissingBytesImpl = 1, - - /** For warning messages concerning a failed event upload. */ - GDTCORMCWUploadFailed = 2, - - /** For warning messages concerning a forced event upload. */ - GDTCORMCWForcedUpload = 3, - - /** For warning messages concerning a failed reachability call. */ - GDTCORMCWReachabilityFailed = 4, - - /** For warning messages concerning a database warning. */ - GDTCORMCWDatabaseWarning = 5, - - /** For warning messages concerning the reading of a event file. */ - GDTCORMCWFileReadError = 6, - - /** For error messages concerning transform: not being implemented by an event transformer. */ - GDTCORMCETransformerDoesntImplementTransform = 1000, - - /** For error messages concerning the creation of a directory failing. */ - GDTCORMCEDirectoryCreationError = 1001, - - /** For error messages concerning the writing of a event file. */ - GDTCORMCEFileWriteError = 1002, - - /** For error messages concerning the lack of a prioritizer for a given backend. */ - GDTCORMCEPrioritizerError = 1003, - - /** For error messages concerning a package delivery API violation. */ - GDTCORMCEDeliverTwice = 1004, - - /** For error messages concerning an error in an implementation of -transportBytes. */ - GDTCORMCETransportBytesError = 1005, - - /** For general purpose error messages in a dependency. */ - GDTCORMCEGeneralError = 1006, - - /** For fatal errors. Please go to https://github.com/firebase/firebase-ios-sdk/issues and open - * an issue if you encounter an error with this code. - */ - GDTCORMCEFatalAssertion = 1007, - - /** For error messages concerning the reading of a event file. */ - GDTCORMCEFileReadError = 1008, - - /** For errors related to running sqlite. */ - GDTCORMCEDatabaseError = 1009, -}; - -/** Prints the given code and format string to the console. - * - * @param code The message code describing the nature of the log. - * @param logLevel The log level of this log. - * @param format The format string. - */ -FOUNDATION_EXPORT -void GDTCORLog(GDTCORMessageCode code, GDTCORLoggingLevel logLevel, NSString *_Nonnull format, ...) - NS_FORMAT_FUNCTION(3, 4); - -/** Prints an assert log to the console. - * - * @param wasFatal Send YES if the assertion should be fatal, NO otherwise. - * @param file The file in which the failure occurred. - * @param line The line number of the failure. - * @param format The format string. - */ -FOUNDATION_EXPORT void GDTCORLogAssert(BOOL wasFatal, - NSString *_Nonnull file, - NSInteger line, - NSString *_Nullable format, - ...) NS_FORMAT_FUNCTION(4, 5); - -/** Returns the string that represents some message code. - * - * @param code The code to convert to a string. - * @return The string representing the message code. - */ -FOUNDATION_EXPORT NSString *_Nonnull GDTCORMessageCodeEnumToString(GDTCORMessageCode code); - -#define GDTCORLogDebug(MESSAGE_FORMAT, ...) \ - GDTCORLog(GDTCORMCDDebugLog, GDTCORLoggingLevelDebug, MESSAGE_FORMAT, __VA_ARGS__); - -// A define to wrap GULLogWarning with slightly more convenient usage. -#define GDTCORLogWarning(MESSAGE_CODE, MESSAGE_FORMAT, ...) \ - GDTCORLog(MESSAGE_CODE, GDTCORLoggingLevelWarnings, MESSAGE_FORMAT, __VA_ARGS__); - -// A define to wrap GULLogError with slightly more convenient usage and a failing assert. -#define GDTCORLogError(MESSAGE_CODE, MESSAGE_FORMAT, ...) \ - GDTCORLog(MESSAGE_CODE, GDTCORLoggingLevelErrors, MESSAGE_FORMAT, __VA_ARGS__); diff --git a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCOREvent.h b/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCOREvent.h deleted file mode 100644 index 4d6ffce6f6..0000000000 --- a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCOREvent.h +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -#import - -@class GDTCORClock; - -NS_ASSUME_NONNULL_BEGIN - -/** The different possible quality of service specifiers. High values indicate high priority. */ -typedef NS_ENUM(NSInteger, GDTCOREventQoS) { - /** The QoS tier wasn't set, and won't ever be sent. */ - GDTCOREventQoSUnknown = 0, - - /** This event is internal telemetry data that should not be sent on its own if possible. */ - GDTCOREventQoSTelemetry = 1, - - /** This event should be sent, but in a batch only roughly once per day. */ - GDTCOREventQoSDaily = 2, - - /** This event should be sent when requested by the uploader. */ - GDTCOREventQosDefault = 3, - - /** This event should be sent immediately along with any other data that can be batched. */ - GDTCOREventQoSFast = 4, - - /** This event should only be uploaded on wifi. */ - GDTCOREventQoSWifiOnly = 5, -}; - -@interface GDTCOREvent : NSObject - -/** The unique ID of the event. */ -@property(nonatomic, readonly) NSNumber *eventID; - -/** The mapping identifier, to allow backends to map the transport bytes to a proto. */ -@property(readonly, nonatomic) NSString *mappingID; - -/** The identifier for the backend this event will eventually be sent to. */ -@property(readonly, nonatomic) NSInteger target; - -/** The data object encapsulated in the transport of your choice, as long as it implements - * the GDTCOREventDataObject protocol. */ -@property(nullable, nonatomic) id dataObject; - -/** The quality of service tier this event belongs to. */ -@property(nonatomic) GDTCOREventQoS qosTier; - -/** The clock snapshot at the time of the event. */ -@property(nonatomic) GDTCORClock *clockSnapshot; - -/** The resulting file URL when [dataObject -transportBytes] has been saved to disk.*/ -@property(nullable, readonly, nonatomic) NSURL *fileURL; - -/** Bytes that can be used by a prioritizer or uploader later on. It's the prioritizer or uploader's - * responsibility to serialize and deserialize these bytes. - */ -@property(nullable, nonatomic) NSData *customBytes; - -// Please use the designated initializer. -- (instancetype)init NS_UNAVAILABLE; - -/** Initializes an instance using the given mappingID. - * - * @param mappingID The mapping identifier. - * @param target The event's target identifier. - * @return An instance of this class. - */ -- (nullable instancetype)initWithMappingID:(NSString *)mappingID - target:(NSInteger)target NS_DESIGNATED_INITIALIZER; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCOREventDataObject.h b/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCOREventDataObject.h deleted file mode 100644 index 34ef62424d..0000000000 --- a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCOREventDataObject.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** This protocol defines the common interface that event protos should implement regardless of the - * underlying transport technology (protobuf, nanopb, etc). - */ -@protocol GDTCOREventDataObject - -@required - -/** Returns the serialized proto bytes of the implementing event proto. - * - * @return the serialized proto bytes of the implementing event proto. - */ -- (NSData *)transportBytes; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCOREventTransformer.h b/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCOREventTransformer.h deleted file mode 100644 index 29f95924fa..0000000000 --- a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCOREventTransformer.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -@class GDTCOREvent; - -NS_ASSUME_NONNULL_BEGIN - -/** Defines the API that event transformers must adopt. */ -@protocol GDTCOREventTransformer - -@required - -/** Transforms an event by applying some logic to it. Events returned can be nil, for example, in - * instances where the event should be sampled. - * - * @param event The event to transform. - * @return A transformed event, or nil if the transformation dropped the event. - */ -- (nullable GDTCOREvent *)transform:(GDTCOREvent *)event; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORLifecycle.h b/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORLifecycle.h deleted file mode 100644 index a08a45694e..0000000000 --- a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORLifecycle.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -#import - -@class GDTCOREvent; - -NS_ASSUME_NONNULL_BEGIN - -/** A protocol defining the lifecycle events objects in the library must respond to immediately. */ -@protocol GDTCORLifecycleProtocol - -@optional - -/** Indicates an imminent app termination in the rare occurrence when -applicationWillTerminate: has - * been called. - * - * @param app The GDTCORApplication instance. - */ -- (void)appWillTerminate:(GDTCORApplication *)app; - -/** Indicates that the app is moving to background and eventual suspension or the current UIScene is - * deactivating. - * - * @param app The GDTCORApplication instance. - */ -- (void)appWillBackground:(GDTCORApplication *)app; - -/** Indicates that the app is resuming operation or a UIScene is activating. - * - * @param app The GDTCORApplication instance. - */ -- (void)appWillForeground:(GDTCORApplication *)app; - -@end - -/** This class manages the library's response to app lifecycle events. - * - * When backgrounding, the library doesn't stop processing events, it's just that several background - * tasks will end up being created for every event that's sent, and the stateful objects of the - * library (GDTCORStorage and GDTCORUploadCoordinator instances) will deserialize themselves from - * and to disk before and after every operation, respectively. - */ -@interface GDTCORLifecycle : NSObject - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORPlatform.h b/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORPlatform.h deleted file mode 100644 index 97bd083544..0000000000 --- a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORPlatform.h +++ /dev/null @@ -1,204 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -#if !TARGET_OS_WATCH -#import -#endif - -#if TARGET_OS_IOS || TARGET_OS_TV -#import -#elif TARGET_OS_OSX -#import -#elif TARGET_OS_WATCH -#import -#endif // TARGET_OS_IOS || TARGET_OS_TV - -#if TARGET_OS_IOS -#import -#endif - -NS_ASSUME_NONNULL_BEGIN - -/** The GoogleDataTransport library version. */ -FOUNDATION_EXPORT NSString *const kGDTCORVersion; - -/** A notification sent out if the app is backgrounding. */ -FOUNDATION_EXPORT NSString *const kGDTCORApplicationDidEnterBackgroundNotification; - -/** A notification sent out if the app is foregrounding. */ -FOUNDATION_EXPORT NSString *const kGDTCORApplicationWillEnterForegroundNotification; - -/** A notification sent out if the app is terminating. */ -FOUNDATION_EXPORT NSString *const kGDTCORApplicationWillTerminateNotification; - -/** The different possible network connection type. */ -typedef NS_ENUM(NSInteger, GDTCORNetworkType) { - GDTCORNetworkTypeUNKNOWN = 0, - GDTCORNetworkTypeWIFI = 1, - GDTCORNetworkTypeMobile = 2, -}; - -/** The different possible network connection mobile subtype. */ -typedef NS_ENUM(NSInteger, GDTCORNetworkMobileSubtype) { - GDTCORNetworkMobileSubtypeUNKNOWN = 0, - GDTCORNetworkMobileSubtypeGPRS = 1, - GDTCORNetworkMobileSubtypeEdge = 2, - GDTCORNetworkMobileSubtypeWCDMA = 3, - GDTCORNetworkMobileSubtypeHSDPA = 4, - GDTCORNetworkMobileSubtypeHSUPA = 5, - GDTCORNetworkMobileSubtypeCDMA1x = 6, - GDTCORNetworkMobileSubtypeCDMAEVDORev0 = 7, - GDTCORNetworkMobileSubtypeCDMAEVDORevA = 8, - GDTCORNetworkMobileSubtypeCDMAEVDORevB = 9, - GDTCORNetworkMobileSubtypeHRPD = 10, - GDTCORNetworkMobileSubtypeLTE = 11, -}; - -#if !TARGET_OS_WATCH -/** Define SCNetworkReachabilityFlags as GDTCORNetworkReachabilityFlags on non-watchOS. */ -typedef SCNetworkReachabilityFlags GDTCORNetworkReachabilityFlags; - -/** Define SCNetworkReachabilityRef as GDTCORNetworkReachabilityRef on non-watchOS. */ -typedef SCNetworkReachabilityRef GDTCORNetworkReachabilityRef; - -#else -/** The different possible reachabilityFlags option on watchOS. */ -typedef NS_OPTIONS(uint32_t, GDTCORNetworkReachabilityFlags) { - kGDTCORNetworkReachabilityFlagsReachable = 1 << 1, - // TODO(doudounan): Add more options on watchOS if watchOS network connection information relative - // APIs available in the future. -}; - -/** Define a struct as GDTCORNetworkReachabilityRef on watchOS to store network connection - * information. */ -typedef struct { - // TODO(doudounan): Store network connection information on watchOS if watchOS network connection - // information relative APIs available in the future. -} GDTCORNetworkReachabilityRef; -#endif - -/** Returns a URL to the root directory under which all GDT-associated data must be saved. - * - * @return A URL to the root directory under which all GDT-associated data must be saved. - */ -NSURL *GDTCORRootDirectory(void); - -/** Compares flags with the reachable flag (on non-watchos with both reachable and - * connectionRequired flags), if available, and returns YES if network reachable. - * - * @param flags The set of reachability flags. - * @return YES if the network is reachable, NO otherwise. - */ -BOOL GDTCORReachabilityFlagsReachable(GDTCORNetworkReachabilityFlags flags); - -/** Compares flags with the WWAN reachability flag, if available, and returns YES if present. - * - * @param flags The set of reachability flags. - * @return YES if the WWAN flag is set, NO otherwise. - */ -BOOL GDTCORReachabilityFlagsContainWWAN(GDTCORNetworkReachabilityFlags flags); - -/** Generates an enum message GDTCORNetworkType representing network connection type. - * - * @return A GDTCORNetworkType representing network connection type. - */ -GDTCORNetworkType GDTCORNetworkTypeMessage(void); - -/** Generates an enum message GDTCORNetworkMobileSubtype representing network connection mobile - * subtype. - * - * @return A GDTCORNetworkMobileSubtype representing network connection mobile subtype. - */ -GDTCORNetworkMobileSubtype GDTCORNetworkMobileSubTypeMessage(void); - -/** Writes the given object to the given fileURL and populates the given error if it fails. - * - * @param obj The object to encode. - * @param filePath The path to write the object to. Can be nil if you just need the data. - * @param error The error to populate if something goes wrong. - * @return The data of the archive. If error is nil, it's been written to disk. - */ -NSData *_Nullable GDTCOREncodeArchive(id obj, - NSString *_Nullable filePath, - NSError *_Nullable *error); - -/** Decodes an object of the given class from the given archive path or data and populates the given - * error if it fails. - * - * @param archiveClass The class of the archive's root object. - * @param archivePath The path to the archived data. Don't use with the archiveData param. - * @param archiveData The data to decode. Don't use with the archivePath param. - * @param error The error to populate if something goes wrong. - */ -id _Nullable GDTCORDecodeArchive(Class archiveClass, - NSString *_Nullable archivePath, - NSData *_Nullable archiveData, - NSError *_Nullable *error); - -/** A typedef identify background identifiers. */ -typedef volatile NSUInteger GDTCORBackgroundIdentifier; - -/** A background task's invalid sentinel value. */ -FOUNDATION_EXPORT const GDTCORBackgroundIdentifier GDTCORBackgroundIdentifierInvalid; - -#if TARGET_OS_IOS || TARGET_OS_TV -/** A protocol that wraps UIApplicationDelegate, WKExtensionDelegate or NSObject protocol, depending - * on the platform. - */ -@protocol GDTCORApplicationDelegate -#elif TARGET_OS_OSX -@protocol GDTCORApplicationDelegate -#elif TARGET_OS_WATCH -@protocol GDTCORApplicationDelegate -#else -@protocol GDTCORApplicationDelegate -#endif // TARGET_OS_IOS || TARGET_OS_TV - -@end - -/** A cross-platform application class. */ -@interface GDTCORApplication : NSObject - -/** Flag to determine if the application is running in the background. */ -@property(atomic, readonly) BOOL isRunningInBackground; - -/** Creates and/or returns the shared application instance. - * - * @return The shared application instance. - */ -+ (nullable GDTCORApplication *)sharedApplication; - -/** Creates a background task with the returned identifier if on a suitable platform. - * - * @name name The name of the task, useful for debugging which background tasks are running. - * @param handler The handler block that is called if the background task expires. - * @return An identifier for the background task, or GDTCORBackgroundIdentifierInvalid if one - * couldn't be created. - */ -- (GDTCORBackgroundIdentifier)beginBackgroundTaskWithName:(NSString *)name - expirationHandler:(void (^__nullable)(void))handler; - -/** Ends the background task if the identifier is valid. - * - * @param bgID The background task to end. - */ -- (void)endBackgroundTask:(GDTCORBackgroundIdentifier)bgID; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORPrioritizer.h b/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORPrioritizer.h deleted file mode 100644 index d1f675494d..0000000000 --- a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORPrioritizer.h +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -#import -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/** Options that define a set of upload conditions. This is used to help minimize end user data - * consumption impact. - */ -typedef NS_OPTIONS(NSInteger, GDTCORUploadConditions) { - - /** An upload shouldn't be attempted, because there's no network. */ - GDTCORUploadConditionNoNetwork = 1 << 0, - - /** An upload would likely use mobile data. */ - GDTCORUploadConditionMobileData = 1 << 1, - - /** An upload would likely use wifi data. */ - GDTCORUploadConditionWifiData = 1 << 2, - - /** An upload uses some sort of network connection, but it's unclear which. */ - GDTCORUploadConditionUnclearConnection = 1 << 3, - - /** A high priority event has occurred. */ - GDTCORUploadConditionHighPriority = 1 << 4, -}; - -/** This protocol defines the common interface of event prioritization. Prioritizers are - * stateful objects that prioritize events upon insertion into storage and remain prepared to return - * a set of filenames to the storage system. - */ -@protocol GDTCORPrioritizer - -@required - -/** Accepts an event and uses the event metadata to make choices on how to prioritize the event. - * This method exists as a way to help prioritize which events should be sent, which is dependent on - * the request proto structure of your backend. - * - * @param event The event to prioritize. - */ -- (void)prioritizeEvent:(GDTCOREvent *)event; - -/** Returns a set of events to upload given a set of conditions. - * - * @param target The target to create an upload package for. - * @param conditions A bit mask specifying the current upload conditions. - * @return An object to be used by the uploader to determine file URLs to upload with respect to the - * current conditions. - */ -- (GDTCORUploadPackage *)uploadPackageWithTarget:(GDTCORTarget)target - conditions:(GDTCORUploadConditions)conditions; - -@optional - -/** Saves the state of the prioritizer. */ -- (void)saveState; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORReachability.h b/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORReachability.h deleted file mode 100644 index a74e311be0..0000000000 --- a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORReachability.h +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** This class helps determine upload conditions by determining connectivity. */ -@interface GDTCORReachability : NSObject - -/** The current set flags indicating network conditions */ -+ (GDTCORNetworkReachabilityFlags)currentFlags; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORRegistrar.h b/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORRegistrar.h deleted file mode 100644 index 63f82a7264..0000000000 --- a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORRegistrar.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -#import -#import -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/** Manages the registration of targets with the transport SDK. */ -@interface GDTCORRegistrar : NSObject - -/** Creates and/or returns the singleton instance. - * - * @return The singleton instance of this class. - */ -+ (instancetype)sharedInstance; - -/** Registers a backend implementation with the GoogleDataTransport infrastructure. - * - * @param backend The backend object to register. - * @param target The target this backend object will be responsible for. - */ -- (void)registerUploader:(id)backend target:(GDTCORTarget)target; - -/** Registers a storage implementation with the GoogleDataTransport infrastructure. - * - * @param storage The storage instance to be associated with this uploader and target. - * @param target The target this backend object will be responsible for. - */ -- (void)registerStorage:(id)storage target:(GDTCORTarget)target; - -/** Registers a event prioritizer implementation with the GoogleDataTransport infrastructure. - * - * @param prioritizer The prioritizer object to register. - * @param target The target this prioritizer object will be responsible for. - */ -- (void)registerPrioritizer:(id)prioritizer target:(GDTCORTarget)target; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORStorageProtocol.h b/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORStorageProtocol.h deleted file mode 100644 index 3cc175e4ee..0000000000 --- a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORStorageProtocol.h +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright 2020 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -#import -#import - -@class GDTCOREvent; - -NS_ASSUME_NONNULL_BEGIN - -/** Defines the interface a storage subsystem is expected to implement. */ -@protocol GDTCORStorageProtocol - -@required - -/** Stores an event and calls onComplete with a non-nil error if anything went wrong. - * - * @param event The event to store - * @param completion The completion block to call after an attempt to store the event has been made. - */ -- (void)storeEvent:(GDTCOREvent *)event - onComplete:(void (^_Nullable)(BOOL wasWritten, NSError *_Nullable error))completion; - -/** Removes the events from storage. */ -- (void)removeEvents:(NSSet *)eventIDs; - -/** Persists the given data with the given key. - * - * @param data The data to store. - * @param key The unique key to store it to. - * @param onComplete An block to be run when storage of the data is complete. - */ -- (void)storeLibraryData:(NSData *)data - forKey:(NSString *)key - onComplete:(void (^)(NSError *_Nullable error))onComplete; - -/** Retrieves the stored data for the given key. - * - * @param key The key corresponding to the desired data. - * @param onComplete The callback to invoke with the data once it's retrieved. - */ -- (void)libraryDataForKey:(NSString *)key - onComplete:(void (^)(NSData *_Nullable data, NSError *_Nullable error))onComplete; - -/** Removes data from storage and calls the callback when complete. - * - * @param key The key of the data to remove. - * @param onComplete The callback that will be invoked when removing the data is complete. - */ -- (void)removeLibraryDataForKey:(NSString *)key - onComplete:(void (^)(NSError *_Nullable error))onComplete; - -@end - -/** Retrieves the storage instance for the given target. - * - * @param target The target. - * * @return The storage instance registered for the target, or nil if there is none. - */ -FOUNDATION_EXPORT -id _Nullable GDTCORStorageInstanceForTarget(GDTCORTarget target); - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORTargets.h b/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORTargets.h deleted file mode 100644 index 5db8852e72..0000000000 --- a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORTargets.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -/** The list of targets supported by the shared transport infrastructure. If adding a new target, - * please use the previous value +1. - */ -typedef NS_ENUM(NSInteger, GDTCORTarget) { - - /** A target only used in testing. */ - kGDTCORTargetTest = 999, - - /** The CCT target. */ - kGDTCORTargetCCT = 1000, - - /** The FLL target. */ - kGDTCORTargetFLL = 1001, - - /** The CSH target. The CSH target is a special-purpose backend. Please do not use it without - * permission. - */ - kGDTCORTargetCSH = 1002 -}; diff --git a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORTransport.h b/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORTransport.h deleted file mode 100644 index 445ff72858..0000000000 --- a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORTransport.h +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -#import - -@class GDTCOREvent; - -NS_ASSUME_NONNULL_BEGIN - -@interface GDTCORTransport : NSObject - -// Please use the designated initializer. -- (instancetype)init NS_UNAVAILABLE; - -/** Initializes a new transport that will send events to the given target backend. - * - * @param mappingID The mapping identifier used by the backend to map the data object transport - * bytes to a proto. - * @param transformers A list of transformers to be applied to events that are sent. - * @param target The target backend of this transport. - * @return A transport that will send events. - */ -- (nullable instancetype)initWithMappingID:(NSString *)mappingID - transformers: - (nullable NSArray> *)transformers - target:(NSInteger)target NS_DESIGNATED_INITIALIZER; - -/** Copies and sends an internal telemetry event. Events sent using this API are lower in priority, - * and sometimes won't be sent on their own. - * - * @note This will convert the event's data object to data and release the original event. - * - * @param event The event to send. - * @param completion A block that will be called when the event has been written or dropped. - */ -- (void)sendTelemetryEvent:(GDTCOREvent *)event - onComplete:(void (^_Nullable)(BOOL wasWritten, NSError *_Nullable error))completion; - -/** Copies and sends an internal telemetry event. Events sent using this API are lower in priority, - * and sometimes won't be sent on their own. - * - * @note This will convert the event's data object to data and release the original event. - * - * @param event The event to send. - */ -- (void)sendTelemetryEvent:(GDTCOREvent *)event; - -/** Copies and sends an SDK service data event. Events send using this API are higher in priority, - * and will cause a network request at some point in the relative near future. - * - * @note This will convert the event's data object to data and release the original event. - * - * @param event The event to send. - * @param completion A block that will be called when the event has been written or dropped. - */ -- (void)sendDataEvent:(GDTCOREvent *)event - onComplete:(void (^_Nullable)(BOOL wasWritten, NSError *_Nullable error))completion; - -/** Copies and sends an SDK service data event. Events send using this API are higher in priority, - * and will cause a network request at some point in the relative near future. - * - * @note This will convert the event's data object to data and release the original event. - * - * @param event The event to send. - */ -- (void)sendDataEvent:(GDTCOREvent *)event; - -/** Creates an event for use by this transport. - * - * @return An event that is suited for use by this transport. - */ -- (GDTCOREvent *)eventForTransport; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORUploadPackage.h b/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORUploadPackage.h deleted file mode 100644 index 4f1d9daf1b..0000000000 --- a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORUploadPackage.h +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import -#import - -@class GDTCORClock; -@class GDTCOREvent; -@class GDTCORUploadPackage; - -/** A protocol that allows a handler to respond to package lifecycle events. */ -@protocol GDTCORUploadPackageProtocol - -@optional - -/** Indicates that the package has expired. - * - * @note Package expiration will only be checked every 5 seconds. - * - * @param package The package that has expired. - */ -- (void)packageExpired:(GDTCORUploadPackage *)package; - -/** Indicates that the package was successfully delivered. - * - * @param package The package that was delivered. - */ -- (void)packageDelivered:(GDTCORUploadPackage *)package successful:(BOOL)successful; - -@end - -/** This class is a container that's handed off to uploaders. */ -@interface GDTCORUploadPackage : NSObject - -/** The set of stored events in this upload package. */ -@property(nonatomic) NSSet *events; - -/** The expiration time. If [[GDTCORClock snapshot] isAfter:deliverByTime] this package has expired. - * - * @note By default, the expiration time will be 3 minutes from creation. - */ -@property(nonatomic) GDTCORClock *deliverByTime; - -/** The target of this package. */ -@property(nonatomic, readonly) GDTCORTarget target; - -/** Initializes a package instance. - * - * @param target The target/destination of this package. - * @return An instance of this class. - */ -- (instancetype)initWithTarget:(GDTCORTarget)target; - -/** Completes delivery of the package. - * - * @note This *needs* to be called by an uploader for the package to not expire. - */ -- (void)completeDelivery; - -/** Sends the package back, indicating that delivery should be attempted again in the future. */ -- (void)retryDeliveryInTheFuture; - -@end diff --git a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORUploader.h b/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORUploader.h deleted file mode 100644 index cadee4789c..0000000000 --- a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GDTCORUploader.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -#import -#import -#import -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/** This protocol defines the common interface for uploader implementations. */ -@protocol GDTCORUploader - -@required - -/** Returns YES if the uploader can make an upload attempt, NO otherwise. - * - * @param target The target being checked. - * @param conditions The conditions that the upload attempt is likely to occur under. - * @return YES if the uploader can make an upload attempt, NO otherwise. - */ -- (BOOL)readyToUploadTarget:(GDTCORTarget)target conditions:(GDTCORUploadConditions)conditions; - -/** Uploads events to the backend using this specific backend's chosen format. - * - * @param package The event package to upload. Make sure to call -completeDelivery. - */ -- (void)uploadPackage:(GDTCORUploadPackage *)package; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GoogleDataTransport.h b/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GoogleDataTransport.h deleted file mode 100644 index a02451addc..0000000000 --- a/iphone/Maps/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GoogleDataTransport.h +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "GDTCORClock.h" -#import "GDTCORConsoleLogger.h" -#import "GDTCOREvent.h" -#import "GDTCOREventDataObject.h" -#import "GDTCOREventTransformer.h" -#import "GDTCORLifecycle.h" -#import "GDTCORPrioritizer.h" -#import "GDTCORRegistrar.h" -#import "GDTCORTargets.h" -#import "GDTCORTransport.h" -#import "GDTCORUploadPackage.h" -#import "GDTCORUploader.h" diff --git a/iphone/Maps/Pods/GoogleDataTransport/LICENSE b/iphone/Maps/Pods/GoogleDataTransport/LICENSE deleted file mode 100644 index d645695673..0000000000 --- a/iphone/Maps/Pods/GoogleDataTransport/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/iphone/Maps/Pods/GoogleDataTransport/README.md b/iphone/Maps/Pods/GoogleDataTransport/README.md deleted file mode 100644 index a396a214d9..0000000000 --- a/iphone/Maps/Pods/GoogleDataTransport/README.md +++ /dev/null @@ -1,307 +0,0 @@ -[![Version](https://img.shields.io/cocoapods/v/Firebase.svg?style=flat)](https://cocoapods.org/pods/Firebase) -[![License](https://img.shields.io/cocoapods/l/Firebase.svg?style=flat)](https://cocoapods.org/pods/Firebase) -[![Platform](https://img.shields.io/cocoapods/p/Firebase.svg?style=flat)](https://cocoapods.org/pods/Firebase) - -[![Actions Status][gh-abtesting-badge]][gh-actions] -[![Actions Status][gh-auth-badge]][gh-actions] -[![Actions Status][gh-core-badge]][gh-actions] -[![Actions Status][gh-crashlytics-badge]][gh-actions] -[![Actions Status][gh-database-badge]][gh-actions] -[![Actions Status][gh-datatransport-badge]][gh-actions] -[![Actions Status][gh-dynamiclinks-badge]][gh-actions] -[![Actions Status][gh-firebasepod-badge]][gh-actions] -[![Actions Status][gh-firestore-badge]][gh-actions] -[![Actions Status][gh-functions-badge]][gh-actions] -[![Actions Status][gh-inappmessaging-badge]][gh-actions] -[![Actions Status][gh-interop-badge]][gh-actions] -[![Actions Status][gh-messaging-badge]][gh-actions] -[![Actions Status][gh-remoteconfig-badge]][gh-actions] -[![Actions Status][gh-storage-badge]][gh-actions] -[![Actions Status][gh-symbolcollision-badge]][gh-actions] -[![Actions Status][gh-zip-badge]][gh-actions] -[![Travis](https://travis-ci.org/firebase/firebase-ios-sdk.svg?branch=master)](https://travis-ci.org/firebase/firebase-ios-sdk) - -# Firebase Apple Open Source Development - -This repository contains all Apple platform Firebase SDK source except FirebaseAnalytics, -FirebasePerformance, and FirebaseML. - -The repository also includes GoogleUtilities source. The -[GoogleUtilities](GoogleUtilities/README.md) pod is -a set of utilities used by Firebase and other Google products. - -Firebase is an app development platform with tools to help you build, grow and -monetize your app. More information about Firebase can be found at -[https://firebase.google.com](https://firebase.google.com). - -## Installation - -See the three subsections for details about three different installation methods. -1. [Standard pod install](README.md#standard-pod-install) -1. [Installing from the GitHub repo](README.md#installing-from-github) -1. [Experimental Carthage](README.md#carthage-ios-only) - -### Standard pod install - -Go to -[https://firebase.google.com/docs/ios/setup](https://firebase.google.com/docs/ios/setup). - -### Installing from GitHub - -For releases starting with 5.0.0, the source for each release is also deployed -to CocoaPods master and available via standard -[CocoaPods Podfile syntax](https://guides.cocoapods.org/syntax/podfile.html#pod). - -These instructions can be used to access the Firebase repo at other branches, -tags, or commits. - -#### Background - -See -[the Podfile Syntax Reference](https://guides.cocoapods.org/syntax/podfile.html#pod) -for instructions and options about overriding pod source locations. - -#### Accessing Firebase Source Snapshots - -All of the official releases are tagged in this repo and available via CocoaPods. To access a local -source snapshot or unreleased branch, use Podfile directives like the following: - -To access FirebaseFirestore via a branch: -``` -pod 'FirebaseCore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master' -pod 'FirebaseFirestore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master' -``` - -To access FirebaseMessaging via a checked out version of the firebase-ios-sdk repo do: - -``` -pod 'FirebaseCore', :path => '/path/to/firebase-ios-sdk' -pod 'FirebaseMessaging', :path => '/path/to/firebase-ios-sdk' -``` - -### Carthage (iOS only) - -Instructions for the experimental Carthage distribution are at -[Carthage](Carthage.md). - -### Rome - -Instructions for installing binary frameworks via -[Rome](https://github.com/CocoaPods/Rome) are at [Rome](Rome.md). - -### Using Firebase from a Framework or a library - -[Using Firebase from a Framework or a library](docs/firebase_in_libraries.md) - -## Development - -To develop Firebase software in this repository, ensure that you have at least -the following software: - - * Xcode 10.1 (or later) - * CocoaPods 1.7.2 (or later) - * [CocoaPods generate](https://github.com/square/cocoapods-generate) - -For the pod that you want to develop: - -`pod gen Firebase{name here}.podspec --local-sources=./ --auto-open --platforms=ios` - -Note: If the CocoaPods cache is out of date, you may need to run -`pod repo update` before the `pod gen` command. - -Note: Set the `--platforms` option to `macos` or `tvos` to develop/test for -those platforms. Since 10.2, Xcode does not properly handle multi-platform -CocoaPods workspaces. - -Firestore has a self contained Xcode project. See -[Firestore/README.md](Firestore/README.md). - -### Development for Catalyst -* `pod gen {name here}.podspec --local-sources=./ --auto-open --platforms=ios` -* Check the Mac box in the App-iOS Build Settings -* Sign the App in the Settings Signing & Capabilities tab -* Click Pods in the Project Manager -* Add Signing to the iOS host app and unit test targets -* Select the Unit-unit scheme -* Run it to build and test - -### Adding a New Firebase Pod - -See [AddNewPod.md](AddNewPod.md). - -### Code Formatting - -To ensure that the code is formatted consistently, run the script -[./scripts/style.sh](https://github.com/firebase/firebase-ios-sdk/blob/master/scripts/style.sh) -before creating a PR. - -Travis will verify that any code changes are done in a style compliant way. Install -`clang-format` and `swiftformat`. -These commands will get the right versions: - -``` -brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/c6f1cbd/Formula/clang-format.rb -brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/c13eda8/Formula/swiftformat.rb -``` - -Note: if you already have a newer version of these installed you may need to -`brew switch` to this version. - -To update this section, find the versions of clang-format and swiftformat.rb to -match the versions in the CI failure logs -[here](https://github.com/Homebrew/homebrew-core/tree/master/Formula). - -### Running Unit Tests - -Select a scheme and press Command-u to build a component and run its unit tests. - -#### Viewing Code Coverage (Deprecated) - -First, make sure that [xcov](https://github.com/nakiostudio/xcov) is installed with `gem install xcov`. - -After running the `AllUnitTests_iOS` scheme in Xcode, execute -`xcov --workspace Firebase.xcworkspace --scheme AllUnitTests_iOS --output_directory xcov_output` -at Example/ in the terminal. This will aggregate the coverage, and you can run `open xcov_output/index.html` to see the results. - -### Running Sample Apps -In order to run the sample apps and integration tests, you'll need valid -`GoogleService-Info.plist` files for those samples. The Firebase Xcode project contains dummy plist -files without real values, but can be replaced with real plist files. To get your own -`GoogleService-Info.plist` files: - -1. Go to the [Firebase Console](https://console.firebase.google.com/) -2. Create a new Firebase project, if you don't already have one -3. For each sample app you want to test, create a new Firebase app with the sample app's bundle -identifier (e.g. `com.google.Database-Example`) -4. Download the resulting `GoogleService-Info.plist` and replace the appropriate dummy plist file -(e.g. in [Example/Database/App/](Example/Database/App/)); - -Some sample apps like Firebase Messaging ([Example/Messaging/App](Example/Messaging/App)) require -special Apple capabilities, and you will have to change the sample app to use a unique bundle -identifier that you can control in your own Apple Developer account. - -## Specific Component Instructions -See the sections below for any special instructions for those components. - -### Firebase Auth - -If you're doing specific Firebase Auth development, see -[the Auth Sample README](FirebaseAuth/Tests/Sample/README.md) for instructions about -building and running the FirebaseAuth pod along with various samples and tests. - -### Firebase Database - -The Firebase Database Integration tests can be run against a locally running Database Emulator -or against a production instance. - -To run against a local emulator instance, invoke `./scripts/run_database_emulator.sh start` before -running the integration test. - -To run against a production instance, provide a valid GoogleServices-Info.plist and copy it to -`Example/Database/App/GoogleService-Info.plist`. Your Security Rule must be set to -[public](https://firebase.google.com/docs/database/security/quickstart) while your tests are -running. - -### Firebase Storage - -To run the Storage Integration tests, follow the instructions in -[FIRStorageIntegrationTests.m](FirebaseStorage/Tests/Integration/FIRStorageIntegrationTests.m). - -#### Push Notifications - -Push notifications can only be delivered to specially provisioned App IDs in the developer portal. -In order to actually test receiving push notifications, you will need to: - -1. Change the bundle identifier of the sample app to something you own in your Apple Developer -account, and enable that App ID for push notifications. -2. You'll also need to -[upload your APNs Provider Authentication Key or certificate to the Firebase Console](https://firebase.google.com/docs/cloud-messaging/ios/certs) -at **Project Settings > Cloud Messaging > [Your Firebase App]**. -3. Ensure your iOS device is added to your Apple Developer portal as a test device. - -#### iOS Simulator - -The iOS Simulator cannot register for remote notifications, and will not receive push notifications. -In order to receive push notifications, you'll have to follow the steps above and run the app on a -physical device. - -## Community Supported Efforts - -We've seen an amazing amount of interest and contributions to improve the Firebase SDKs, and we are -very grateful! We'd like to empower as many developers as we can to be able to use Firebase and -participate in the Firebase community. - -### tvOS, macOS, watchOS and Catalyst -Thanks to contributions from the community, many of Firebase SDKs now compile, run unit tests, and work on -tvOS, macOS, watchOS and Catalyst. - -For tvOS, checkout the [Sample](Example/tvOSSample). -For watchOS, currently only Messaging and Storage (and their dependencies) have limited support. Checkout the -[Independent Watch App Sample](Example/watchOSSample). - -Keep in mind that macOS, tvOS, watchOS and Catalyst are not officially supported by Firebase, and this -repository is actively developed primarily for iOS. While we can catch basic unit test issues with -Travis, there may be some changes where the SDK no longer works as expected on macOS, tvOS or watchOS. If you -encounter this, please [file an issue](https://github.com/firebase/firebase-ios-sdk/issues). - -During app setup in the console, you may get to a step that mentions something like "Checking if the app -has communicated with our servers". This relies on Analytics and will not work on macOS/tvOS/watchOS/Catalyst. -**It's safe to ignore the message and continue**, the rest of the SDKs will work as expected. - -To install, add a subset of the following to the Podfile: - -``` -pod 'Firebase/ABTesting' # No watchOS support yet -pod 'Firebase/Auth' # No watchOS support yet -pod 'Firebase/Crashlytics' # No watchOS support yet -pod 'Firebase/Database' # No watchOS support yet -pod 'Firebase/Firestore' # No watchOS support yet -pod 'Firebase/Functions' # No watchOS support yet -pod 'Firebase/Messaging' -pod 'Firebase/RemoteConfig' # No watchOS support yet -pod 'Firebase/Storage' -``` - -#### Additional Catalyst Notes - -* FirebaseAuth and FirebaseMessaging require adding `Keychain Sharing Capability` -to Build Settings. -* FirebaseFirestore requires signing the -[gRPC Resource target](https://github.com/firebase/firebase-ios-sdk/issues/3500#issuecomment-518741681). - -## Roadmap - -See [Roadmap](ROADMAP.md) for more about the Firebase iOS SDK Open Source -plans and directions. - -## Contributing - -See [Contributing](CONTRIBUTING.md) for more information on contributing to the Firebase -iOS SDK. - -## License - -The contents of this repository is licensed under the -[Apache License, version 2.0](http://www.apache.org/licenses/LICENSE-2.0). - -Your use of Firebase is governed by the -[Terms of Service for Firebase Services](https://firebase.google.com/terms/). - -[gh-actions]: https://github.com/firebase/firebase-ios-sdk/actions -[gh-abtesting-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/abtesting/badge.svg -[gh-auth-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/auth/badge.svg -[gh-core-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/core/badge.svg -[gh-crashlytics-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/crashlytics/badge.svg -[gh-database-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/database/badge.svg -[gh-datatransport-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/datatransport/badge.svg -[gh-dynamiclinks-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/dynamiclinks/badge.svg -[gh-firebasepod-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/firebasepod/badge.svg -[gh-firestore-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/firestore/badge.svg -[gh-functions-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/functions/badge.svg -[gh-inappmessaging-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/inappmessaging/badge.svg -[gh-interop-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/interop/badge.svg -[gh-messaging-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/messaging/badge.svg -[gh-remoteconfig-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/remoteconfig/badge.svg -[gh-storage-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/storage/badge.svg -[gh-symbolcollision-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/symbolcollision/badge.svg -[gh-zip-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/zip/badge.svg diff --git a/iphone/Maps/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTCompressionHelper.m b/iphone/Maps/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTCompressionHelper.m deleted file mode 100644 index 9e3745f4a3..0000000000 --- a/iphone/Maps/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTCompressionHelper.m +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright 2020 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "GDTCCTLibrary/Private/GDTCCTCompressionHelper.h" - -#import - -@implementation GDTCCTCompressionHelper - -+ (nullable NSData *)gzippedData:(NSData *)data { -#if defined(__LP64__) && __LP64__ - // Don't support > 32bit length for 64 bit, see note in header. - if (data.length > UINT_MAX) { - return nil; - } -#endif - - const uint kChunkSize = 1024; - - const void *bytes = [data bytes]; - NSUInteger length = [data length]; - - int level = Z_DEFAULT_COMPRESSION; - if (!bytes || !length) { - return nil; - } - - z_stream strm; - bzero(&strm, sizeof(z_stream)); - - int memLevel = 8; // Default. - int windowBits = 15 + 16; // Enable gzip header instead of zlib header. - - int retCode; - if (deflateInit2(&strm, level, Z_DEFLATED, windowBits, memLevel, Z_DEFAULT_STRATEGY) != Z_OK) { - return nil; - } - - // Hint the size at 1/4 the input size. - NSMutableData *result = [NSMutableData dataWithCapacity:(length / 4)]; - unsigned char output[kChunkSize]; - - // Setup the input. - strm.avail_in = (unsigned int)length; - strm.next_in = (unsigned char *)bytes; - - // Collect the data. - do { - // update what we're passing in - strm.avail_out = kChunkSize; - strm.next_out = output; - retCode = deflate(&strm, Z_FINISH); - if ((retCode != Z_OK) && (retCode != Z_STREAM_END)) { - deflateEnd(&strm); - return nil; - } - // Collect what we got. - unsigned gotBack = kChunkSize - strm.avail_out; - if (gotBack > 0) { - [result appendBytes:output length:gotBack]; - } - - } while (retCode == Z_OK); - - // If the loop exits, it used all input and the stream ended. - NSAssert(strm.avail_in == 0, - @"Should have finished deflating without using all input, %u bytes left", strm.avail_in); - NSAssert(retCode == Z_STREAM_END, - @"thought we finished deflate w/o getting a result of stream end, code %d", retCode); - - // Clean up. - deflateEnd(&strm); - - return result; -} - -+ (BOOL)isGzipped:(NSData *)data { - const UInt8 *bytes = (const UInt8 *)data.bytes; - return (data.length >= 2 && bytes[0] == 0x1f && bytes[1] == 0x8b); -} - -@end diff --git a/iphone/Maps/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTNanopbHelpers.m b/iphone/Maps/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTNanopbHelpers.m deleted file mode 100644 index ba65913626..0000000000 --- a/iphone/Maps/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTNanopbHelpers.m +++ /dev/null @@ -1,275 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "GDTCCTLibrary/Private/GDTCCTNanopbHelpers.h" - -#if TARGET_OS_IOS || TARGET_OS_TV -#import -#elif TARGET_OS_OSX -#import -#endif // TARGET_OS_IOS || TARGET_OS_TV - -#import -#import -#import -#import - -#import -#import -#import - -#import "GDTCCTLibrary/Public/GDTCOREvent+GDTCCTSupport.h" - -#pragma mark - General purpose encoders - -pb_bytes_array_t *GDTCCTEncodeString(NSString *string) { - NSData *stringBytes = [string dataUsingEncoding:NSUTF8StringEncoding]; - return GDTCCTEncodeData(stringBytes); -} - -pb_bytes_array_t *GDTCCTEncodeData(NSData *data) { - pb_bytes_array_t *pbBytesArray = calloc(1, PB_BYTES_ARRAY_T_ALLOCSIZE(data.length)); - if (pbBytesArray != NULL) { - [data getBytes:pbBytesArray->bytes length:data.length]; - pbBytesArray->size = (pb_size_t)data.length; - } - return pbBytesArray; -} - -#pragma mark - CCT object constructors - -NSData *_Nullable GDTCCTEncodeBatchedLogRequest(gdt_cct_BatchedLogRequest *batchedLogRequest) { - pb_ostream_t sizestream = PB_OSTREAM_SIZING; - // Encode 1 time to determine the size. - if (!pb_encode(&sizestream, gdt_cct_BatchedLogRequest_fields, batchedLogRequest)) { - GDTCORLogError(GDTCORMCEGeneralError, @"Error in nanopb encoding for size: %s", - PB_GET_ERROR(&sizestream)); - } - - // Encode a 2nd time to actually get the bytes from it. - size_t bufferSize = sizestream.bytes_written; - CFMutableDataRef dataRef = CFDataCreateMutable(CFAllocatorGetDefault(), bufferSize); - CFDataSetLength(dataRef, bufferSize); - pb_ostream_t ostream = pb_ostream_from_buffer((void *)CFDataGetBytePtr(dataRef), bufferSize); - if (!pb_encode(&ostream, gdt_cct_BatchedLogRequest_fields, batchedLogRequest)) { - GDTCORLogError(GDTCORMCEGeneralError, @"Error in nanopb encoding for bytes: %s", - PB_GET_ERROR(&ostream)); - } - - return CFBridgingRelease(dataRef); -} - -gdt_cct_BatchedLogRequest GDTCCTConstructBatchedLogRequest( - NSDictionary *> *logMappingIDToLogSet) { - gdt_cct_BatchedLogRequest batchedLogRequest = gdt_cct_BatchedLogRequest_init_default; - NSUInteger numberOfLogRequests = logMappingIDToLogSet.count; - gdt_cct_LogRequest *logRequests = calloc(numberOfLogRequests, sizeof(gdt_cct_LogRequest)); - if (logRequests == NULL) { - return batchedLogRequest; - } - - __block int i = 0; - [logMappingIDToLogSet enumerateKeysAndObjectsUsingBlock:^(NSString *_Nonnull logMappingID, - NSSet *_Nonnull logSet, - BOOL *_Nonnull stop) { - int32_t logSource = [logMappingID intValue]; - gdt_cct_LogRequest logRequest = GDTCCTConstructLogRequest(logSource, logSet); - logRequests[i] = logRequest; - i++; - }]; - - batchedLogRequest.log_request = logRequests; - batchedLogRequest.log_request_count = (pb_size_t)numberOfLogRequests; - return batchedLogRequest; -} - -gdt_cct_LogRequest GDTCCTConstructLogRequest(int32_t logSource, - NSSet *_Nonnull logSet) { - if (logSet.count == 0) { - GDTCORLogError(GDTCORMCEGeneralError, @"%@", - @"An empty event set can't be serialized to proto."); - gdt_cct_LogRequest logRequest = gdt_cct_LogRequest_init_default; - return logRequest; - } - gdt_cct_LogRequest logRequest = gdt_cct_LogRequest_init_default; - logRequest.log_source = logSource; - logRequest.has_log_source = 1; - logRequest.client_info = GDTCCTConstructClientInfo(); - logRequest.has_client_info = 1; - logRequest.log_event = calloc(logSet.count, sizeof(gdt_cct_LogEvent)); - if (logRequest.log_event == NULL) { - return logRequest; - } - int i = 0; - for (GDTCOREvent *log in logSet) { - gdt_cct_LogEvent logEvent = GDTCCTConstructLogEvent(log); - logRequest.log_event[i] = logEvent; - i++; - } - logRequest.log_event_count = (pb_size_t)logSet.count; - - GDTCORClock *currentTime = [GDTCORClock snapshot]; - logRequest.request_time_ms = currentTime.timeMillis; - logRequest.has_request_time_ms = 1; - logRequest.request_uptime_ms = currentTime.uptime; - logRequest.has_request_uptime_ms = 1; - - return logRequest; -} - -gdt_cct_LogEvent GDTCCTConstructLogEvent(GDTCOREvent *event) { - gdt_cct_LogEvent logEvent = gdt_cct_LogEvent_init_default; - logEvent.event_time_ms = event.clockSnapshot.timeMillis; - logEvent.has_event_time_ms = 1; - logEvent.event_uptime_ms = event.clockSnapshot.uptime; - logEvent.has_event_uptime_ms = 1; - logEvent.timezone_offset_seconds = event.clockSnapshot.timezoneOffsetSeconds; - logEvent.has_timezone_offset_seconds = 1; - if (event.customBytes) { - NSData *networkConnectionInfoData = event.networkConnectionInfoData; - if (networkConnectionInfoData) { - [networkConnectionInfoData getBytes:&logEvent.network_connection_info - length:networkConnectionInfoData.length]; - logEvent.has_network_connection_info = 1; - } - NSNumber *eventCode = event.eventCode; - if (eventCode != nil) { - logEvent.has_event_code = 1; - logEvent.event_code = [eventCode intValue]; - } - } - NSError *error; - NSData *extensionBytes; - if (event.fileURL) { - extensionBytes = [NSData dataWithContentsOfFile:event.fileURL.path options:0 error:&error]; - } else { - GDTCORLogError(GDTCORMCEFileReadError, @"%@", @"An event's fileURL property was nil."); - return logEvent; - } - if (error) { - GDTCORLogWarning(GDTCORMCWFileReadError, - @"There was an error reading extension bytes from disk: %@", error); - return logEvent; - } - logEvent.source_extension = GDTCCTEncodeData(extensionBytes); // read bytes from the file. - return logEvent; -} - -gdt_cct_ClientInfo GDTCCTConstructClientInfo() { - gdt_cct_ClientInfo clientInfo = gdt_cct_ClientInfo_init_default; - clientInfo.client_type = gdt_cct_ClientInfo_ClientType_IOS_FIREBASE; - clientInfo.has_client_type = 1; -#if TARGET_OS_IOS || TARGET_OS_TV - clientInfo.ios_client_info = GDTCCTConstructiOSClientInfo(); - clientInfo.has_ios_client_info = 1; -#elif TARGET_OS_OSX - // TODO(mikehaney24): Expand the proto to include macOS client info. -#endif - return clientInfo; -} - -gdt_cct_IosClientInfo GDTCCTConstructiOSClientInfo() { - gdt_cct_IosClientInfo iOSClientInfo = gdt_cct_IosClientInfo_init_default; -#if TARGET_OS_IOS || TARGET_OS_TV - UIDevice *device = [UIDevice currentDevice]; - NSBundle *bundle = [NSBundle mainBundle]; - NSLocale *locale = [NSLocale currentLocale]; - iOSClientInfo.os_full_version = GDTCCTEncodeString(device.systemVersion); - NSArray *versionComponents = [device.systemVersion componentsSeparatedByString:@"."]; - iOSClientInfo.os_major_version = GDTCCTEncodeString(versionComponents[0]); - NSString *version = [bundle objectForInfoDictionaryKey:(NSString *)kCFBundleVersionKey]; - if (version) { - iOSClientInfo.application_build = GDTCCTEncodeString(version); - } - NSString *countryCode = [locale objectForKey:NSLocaleCountryCode]; - if (countryCode) { - iOSClientInfo.country = GDTCCTEncodeString([locale objectForKey:NSLocaleCountryCode]); - } - iOSClientInfo.model = GDTCCTEncodeString(device.model); - NSString *languageCode = bundle.preferredLocalizations.firstObject; - iOSClientInfo.language_code = - languageCode ? GDTCCTEncodeString(languageCode) : GDTCCTEncodeString(@"en"); - iOSClientInfo.application_bundle_id = GDTCCTEncodeString(bundle.bundleIdentifier); -#endif - return iOSClientInfo; -} - -NSData *GDTCCTConstructNetworkConnectionInfoData() { - gdt_cct_NetworkConnectionInfo networkConnectionInfo = gdt_cct_NetworkConnectionInfo_init_default; - NSInteger currentNetworkType = GDTCORNetworkTypeMessage(); - if (currentNetworkType) { - networkConnectionInfo.has_network_type = 1; - if (currentNetworkType == GDTCORNetworkTypeMobile) { - networkConnectionInfo.network_type = gdt_cct_NetworkConnectionInfo_NetworkType_MOBILE; - networkConnectionInfo.mobile_subtype = GDTCCTNetworkConnectionInfoNetworkMobileSubtype(); - if (networkConnectionInfo.mobile_subtype != - gdt_cct_NetworkConnectionInfo_MobileSubtype_UNKNOWN_MOBILE_SUBTYPE) { - networkConnectionInfo.has_mobile_subtype = 1; - } - } else { - networkConnectionInfo.network_type = gdt_cct_NetworkConnectionInfo_NetworkType_WIFI; - } - } - NSData *networkConnectionInfoData = [NSData dataWithBytes:&networkConnectionInfo - length:sizeof(networkConnectionInfo)]; - return networkConnectionInfoData; -} - -gdt_cct_NetworkConnectionInfo_MobileSubtype GDTCCTNetworkConnectionInfoNetworkMobileSubtype() { - NSNumber *networkMobileSubtypeMessage = @(GDTCORNetworkMobileSubTypeMessage()); - if (!networkMobileSubtypeMessage.intValue) { - return gdt_cct_NetworkConnectionInfo_MobileSubtype_UNKNOWN_MOBILE_SUBTYPE; - } - static NSDictionary *MessageToNetworkSubTypeMessage; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - MessageToNetworkSubTypeMessage = @{ - @(GDTCORNetworkMobileSubtypeGPRS) : @(gdt_cct_NetworkConnectionInfo_MobileSubtype_GPRS), - @(GDTCORNetworkMobileSubtypeEdge) : @(gdt_cct_NetworkConnectionInfo_MobileSubtype_EDGE), - @(GDTCORNetworkMobileSubtypeWCDMA) : - @(gdt_cct_NetworkConnectionInfo_MobileSubtype_UNKNOWN_MOBILE_SUBTYPE), - @(GDTCORNetworkMobileSubtypeHSDPA) : @(gdt_cct_NetworkConnectionInfo_MobileSubtype_HSDPA), - @(GDTCORNetworkMobileSubtypeHSUPA) : @(gdt_cct_NetworkConnectionInfo_MobileSubtype_HSUPA), - @(GDTCORNetworkMobileSubtypeCDMA1x) : @(gdt_cct_NetworkConnectionInfo_MobileSubtype_CDMA), - @(GDTCORNetworkMobileSubtypeCDMAEVDORev0) : - @(gdt_cct_NetworkConnectionInfo_MobileSubtype_EVDO_0), - @(GDTCORNetworkMobileSubtypeCDMAEVDORevA) : - @(gdt_cct_NetworkConnectionInfo_MobileSubtype_EVDO_A), - @(GDTCORNetworkMobileSubtypeCDMAEVDORevB) : - @(gdt_cct_NetworkConnectionInfo_MobileSubtype_EVDO_B), - @(GDTCORNetworkMobileSubtypeHRPD) : @(gdt_cct_NetworkConnectionInfo_MobileSubtype_EHRPD), - @(GDTCORNetworkMobileSubtypeLTE) : @(gdt_cct_NetworkConnectionInfo_MobileSubtype_LTE), - }; - }); - NSNumber *networkMobileSubtype = MessageToNetworkSubTypeMessage[networkMobileSubtypeMessage]; - return networkMobileSubtype.intValue; -} - -#pragma mark - CCT Object decoders - -gdt_cct_LogResponse GDTCCTDecodeLogResponse(NSData *data, NSError **error) { - gdt_cct_LogResponse response = gdt_cct_LogResponse_init_default; - pb_istream_t istream = pb_istream_from_buffer([data bytes], [data length]); - if (!pb_decode(&istream, gdt_cct_LogResponse_fields, &response)) { - NSString *nanopb_error = [NSString stringWithFormat:@"%s", PB_GET_ERROR(&istream)]; - NSDictionary *userInfo = @{@"nanopb error:" : nanopb_error}; - if (error != NULL) { - *error = [NSError errorWithDomain:NSURLErrorDomain code:-1 userInfo:userInfo]; - } - response = (gdt_cct_LogResponse)gdt_cct_LogResponse_init_default; - } - return response; -} diff --git a/iphone/Maps/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTPrioritizer.m b/iphone/Maps/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTPrioritizer.m deleted file mode 100644 index d0382cc262..0000000000 --- a/iphone/Maps/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTPrioritizer.m +++ /dev/null @@ -1,426 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "GDTCCTLibrary/Private/GDTCCTPrioritizer.h" - -#import -#import -#import -#import -#import - -#import "GDTCCTLibrary/Private/GDTCCTNanopbHelpers.h" -#import "GDTCCTLibrary/Public/GDTCOREvent+GDTCCTSupport.h" - -const static int64_t kMillisPerDay = 8.64e+7; - -/** Creates and/or returns a singleton NSString that is the NSCoding file location. - * - * @return The NSCoding file path. - */ -static NSString *ArchivePath() { - static NSString *archivePath; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - archivePath = [GDTCORRootDirectory() URLByAppendingPathComponent:@"GDTCCTPrioritizer"].path; - }); - return archivePath; -} - -/** This class extension is for declaring private properties. */ -@interface GDTCCTPrioritizer () - -/** All CCT events that have been processed by this prioritizer. */ -@property(nonatomic) NSMutableSet *CCTEvents; - -/** All FLL events that have been processed by this prioritizer. */ -@property(nonatomic) NSMutableSet *FLLEvents; - -/** All CSH events that have been processed by this prioritizer. */ -@property(nonatomic) NSMutableSet *CSHEvents; - -@end - -@implementation GDTCCTPrioritizer - -+ (void)load { - GDTCCTPrioritizer *prioritizer = [GDTCCTPrioritizer sharedInstance]; - [[GDTCORRegistrar sharedInstance] registerPrioritizer:prioritizer target:kGDTCORTargetCCT]; - [[GDTCORRegistrar sharedInstance] registerPrioritizer:prioritizer target:kGDTCORTargetFLL]; - [[GDTCORRegistrar sharedInstance] registerPrioritizer:prioritizer target:kGDTCORTargetCSH]; -} - -+ (BOOL)supportsSecureCoding { - return YES; -} - -+ (instancetype)sharedInstance { - static GDTCCTPrioritizer *sharedInstance; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - sharedInstance = [[GDTCCTPrioritizer alloc] init]; - }); - return sharedInstance; -} - -- (instancetype)init { - self = [super init]; - if (self) { - _queue = dispatch_queue_create("com.google.GDTCCTPrioritizer", DISPATCH_QUEUE_SERIAL); - _CCTEvents = [[NSMutableSet alloc] init]; - _FLLEvents = [[NSMutableSet alloc] init]; - _CSHEvents = [[NSMutableSet alloc] init]; - } - return self; -} - -- (nullable NSSet *)eventsForTarget:(GDTCORTarget)target { - __block NSSet *events; - dispatch_sync(_queue, ^{ - switch (target) { - case kGDTCORTargetCCT: - events = [self->_CCTEvents copy]; - break; - - case kGDTCORTargetFLL: - events = [self->_FLLEvents copy]; - break; - - case kGDTCORTargetCSH: - events = [self->_CSHEvents copy]; - break; - - default: - break; - } - }); - return events; -} - -#pragma mark - GDTCORPrioritizer Protocol - -- (void)prioritizeEvent:(GDTCOREvent *)event { - if (event.needsNetworkConnectionInfoPopulated) { - event.networkConnectionInfoData = GDTCCTConstructNetworkConnectionInfoData(); - } - dispatch_async(_queue, ^{ - switch (event.target) { - case kGDTCORTargetCCT: - [self.CCTEvents addObject:event]; - break; - - case kGDTCORTargetFLL: - [self.FLLEvents addObject:event]; - break; - - case kGDTCORTargetCSH: - [self.CSHEvents addObject:event]; - break; - - default: - GDTCORLogDebug(@"GDTCCTPrioritizer doesn't support target %ld", (long)event.target); - break; - } - }); -} - -- (GDTCORUploadPackage *)uploadPackageWithTarget:(GDTCORTarget)target - conditions:(GDTCORUploadConditions)conditions { - GDTCORUploadPackage *package = [[GDTCORUploadPackage alloc] initWithTarget:target]; - dispatch_sync(_queue, ^{ - NSSet *eventsThatWillBeSent = [self eventsForTarget:target - conditions:conditions]; - package.events = eventsThatWillBeSent; - }); - GDTCORLogDebug(@"CCT: %lu events are in the upload package", (unsigned long)package.events.count); - return package; -} - -#pragma mark - Private helper methods - -/** The different possible quality of service specifiers. High values indicate high priority. */ -typedef NS_ENUM(NSInteger, GDTCCTQoSTier) { - /** The QoS tier wasn't set, and won't ever be sent. */ - GDTCCTQoSDefault = 0, - - /** This event is internal telemetry data that should not be sent on its own if possible. */ - GDTCCTQoSTelemetry = 1, - - /** This event should be sent, but in a batch only roughly once per day. */ - GDTCCTQoSDaily = 2, - - /** This event should only be uploaded on wifi. */ - GDTCCTQoSWifiOnly = 5, -}; - -- (void)saveState { - dispatch_sync(_queue, ^{ - NSError *error; - GDTCOREncodeArchive(self, ArchivePath(), &error); - if (error) { - GDTCORLogDebug(@"Serializing GDTCCTPrioritizer to an archive failed: %@", error); - } - }); - GDTCORLogDebug(@"GDTCCTPrioritizer saved state to %@ as requested by GDT.", ArchivePath()); -} - -/** Converts a GDTCOREventQoS to a GDTCCTQoS tier. - * - * @param qosTier The GDTCOREventQoS value. - * @return A static NSNumber that represents the CCT QoS tier. - */ -FOUNDATION_STATIC_INLINE -NSNumber *GDTCCTQosTierFromGDTCOREventQosTier(GDTCOREventQoS qosTier) { - switch (qosTier) { - case GDTCOREventQoSWifiOnly: - return @(GDTCCTQoSWifiOnly); - break; - - case GDTCOREventQoSTelemetry: - // falls through. - case GDTCOREventQoSDaily: - return @(GDTCCTQoSDaily); - break; - - default: - return @(GDTCCTQoSDefault); - break; - } -} - -/** Constructs a set of events for upload to CCT, FLL, or CSH backends. These backends are - * request-proto and batching compatible, so they construct event batches the same way. - * - * @param conditions The set of conditions the upload package should be made under. - * @param target The target backend. - * @return A set of events for the target. - */ -- (NSSet *)eventsForTarget:(GDTCORTarget)target - conditions:(GDTCORUploadConditions)conditions { - GDTCORClock __strong **timeOfLastDailyUpload = NULL; - NSSet *eventsToFilter; - switch (target) { - case kGDTCORTargetCCT: - eventsToFilter = self.CCTEvents; - timeOfLastDailyUpload = &self->_CCTTimeOfLastDailyUpload; - break; - - case kGDTCORTargetFLL: - eventsToFilter = self.FLLEvents; - timeOfLastDailyUpload = &self->_FLLOfLastDailyUpload; - break; - - case kGDTCORTargetCSH: - // This backend doesn't batch and uploads all events as soon as possible without respect to - // any upload condition. - return self.CSHEvents; - break; - - default: - // Return an empty set. - return [[NSSet alloc] init]; - break; - } - - NSMutableSet *eventsThatWillBeSent = [[NSMutableSet alloc] init]; - // A high priority event effectively flushes all events to be sent. - if ((conditions & GDTCORUploadConditionHighPriority) == GDTCORUploadConditionHighPriority) { - GDTCORLogDebug(@"%@", @"CCT: A high priority event is flushing all events."); - return eventsToFilter; - } - - // If on wifi, upload logs that are ok to send on wifi. - if ((conditions & GDTCORUploadConditionWifiData) == GDTCORUploadConditionWifiData) { - [eventsThatWillBeSent unionSet:[self logEventsOkToSendOnWifi:eventsToFilter]]; - GDTCORLogDebug(@"%@", @"CCT: events ok to send on wifi are being added to the upload package"); - } else { - [eventsThatWillBeSent unionSet:[self logEventsOkToSendOnMobileData:eventsToFilter]]; - GDTCORLogDebug(@"%@", - @"CCT: events ok to send on mobile are being added to the upload package"); - } - - // If it's been > 24h since the last daily upload, upload logs with the daily QoS. - if (*timeOfLastDailyUpload) { - int64_t millisSinceLastUpload = - [GDTCORClock snapshot].timeMillis - (*timeOfLastDailyUpload).timeMillis; - if (millisSinceLastUpload > kMillisPerDay) { - [eventsThatWillBeSent unionSet:[self logEventsOkToSendDaily:eventsToFilter]]; - GDTCORLogDebug(@"%@", @"CCT: events ok to send daily are being added to the upload package"); - } - } else { - *timeOfLastDailyUpload = [GDTCORClock snapshot]; - [eventsThatWillBeSent unionSet:[self logEventsOkToSendDaily:eventsToFilter]]; - GDTCORLogDebug(@"%@", @"CCT: events ok to send daily are being added to the upload package"); - } - return eventsThatWillBeSent; -} - -/** Returns a set of logs that are ok to upload whilst on mobile data. - * - * @note This should be called from a thread safe method. - * @return A set of logs that are ok to upload whilst on mobile data. - */ -- (NSSet *)logEventsOkToSendOnMobileData:(NSSet *)events { - return [events objectsPassingTest:^BOOL(GDTCOREvent *_Nonnull event, BOOL *_Nonnull stop) { - return [GDTCCTQosTierFromGDTCOREventQosTier(event.qosTier) isEqual:@(GDTCCTQoSDefault)]; - }]; -} - -/** Returns a set of logs that are ok to upload whilst on wifi. - * - * @note This should be called from a thread safe method. - * @return A set of logs that are ok to upload whilst on wifi. - */ -- (NSSet *)logEventsOkToSendOnWifi:(NSSet *)events { - return [events objectsPassingTest:^BOOL(GDTCOREvent *_Nonnull event, BOOL *_Nonnull stop) { - NSNumber *qosTier = GDTCCTQosTierFromGDTCOREventQosTier(event.qosTier); - return [qosTier isEqual:@(GDTCCTQoSDefault)] || [qosTier isEqual:@(GDTCCTQoSWifiOnly)] || - [qosTier isEqual:@(GDTCCTQoSDaily)]; - }]; -} - -/** Returns a set of logs that only should have a single upload attempt per day. - * - * @note This should be called from a thread safe method. - * @return A set of logs that are ok to upload only once per day. - */ -- (NSSet *)logEventsOkToSendDaily:(NSSet *)events { - return [events objectsPassingTest:^BOOL(GDTCOREvent *_Nonnull event, BOOL *_Nonnull stop) { - return [GDTCCTQosTierFromGDTCOREventQosTier(event.qosTier) isEqual:@(GDTCCTQoSDaily)]; - }]; -} - -#pragma mark - NSSecureCoding - -/** NSSecureCoding key for the CCTEvents property. */ -static NSString *const GDTCCTUploaderCCTEventsKey = @"GDTCCTUploaderCCTEventsKey"; - -/** NSSecureCoding key for the CCTEvents property. */ -static NSString *const GDTCCTUploaderFLLEventsKey = @"GDTCCTUploaderFLLEventsKey"; - -/** NSSecureCoding key for the CCTEvents property. */ -static NSString *const GDTCCTUploaderCSHEventsKey = @"GDTCCTUploaderCSHEventsKey"; - -- (instancetype)initWithCoder:(NSCoder *)coder { - GDTCCTPrioritizer *sharedInstance = [GDTCCTPrioritizer sharedInstance]; - if (sharedInstance) { - NSSet *classes = [NSSet setWithObjects:[NSMutableSet class], [GDTCOREvent class], nil]; - NSMutableSet *decodedCCTEvents = [coder decodeObjectOfClasses:classes - forKey:GDTCCTUploaderCCTEventsKey]; - if (decodedCCTEvents) { - sharedInstance->_CCTEvents = decodedCCTEvents; - } - NSMutableSet *decodedFLLEvents = [coder decodeObjectOfClasses:classes - forKey:GDTCCTUploaderFLLEventsKey]; - if (decodedFLLEvents) { - sharedInstance->_FLLEvents = decodedFLLEvents; - } - NSMutableSet *decodedCSHEvents = [coder decodeObjectOfClasses:classes - forKey:GDTCCTUploaderCSHEventsKey]; - if (decodedCSHEvents) { - sharedInstance->_CSHEvents = decodedCSHEvents; - } - } - return sharedInstance; -} - -- (void)encodeWithCoder:(NSCoder *)coder { - GDTCCTPrioritizer *sharedInstance = [GDTCCTPrioritizer sharedInstance]; - if (!sharedInstance) { - return; - } - NSMutableSet *CCTEvents = sharedInstance->_CCTEvents; - if (CCTEvents) { - [coder encodeObject:CCTEvents forKey:GDTCCTUploaderCCTEventsKey]; - } - NSMutableSet *FLLEvents = sharedInstance->_FLLEvents; - if (FLLEvents) { - [coder encodeObject:FLLEvents forKey:GDTCCTUploaderFLLEventsKey]; - } - NSMutableSet *CSHEvents = sharedInstance->_CSHEvents; - if (CSHEvents) { - [coder encodeObject:CSHEvents forKey:GDTCCTUploaderCSHEventsKey]; - } -} - -#pragma mark - GDTCORLifecycleProtocol - -- (void)appWillForeground:(GDTCORApplication *)app { - dispatch_async(_queue, ^{ - NSError *error; - GDTCORDecodeArchive([GDTCCTPrioritizer class], ArchivePath(), nil, &error); - if (error) { - GDTCORLogDebug(@"Deserializing GDTCCTPrioritizer from an archive failed: %@", error); - } - }); -} - -- (void)appWillBackground:(GDTCORApplication *)app { - dispatch_async(_queue, ^{ - // Immediately request a background task to run until the end of the current queue of work, and - // cancel it once the work is done. - __block GDTCORBackgroundIdentifier bgID = - [app beginBackgroundTaskWithName:@"GDTStorage" - expirationHandler:^{ - [app endBackgroundTask:bgID]; - bgID = GDTCORBackgroundIdentifierInvalid; - }]; - NSError *error; - GDTCOREncodeArchive(self, ArchivePath(), &error); - if (error) { - GDTCORLogDebug(@"Serializing GDTCCTPrioritizer to an archive failed: %@", error); - } - - // End the background task if it's still valid. - [app endBackgroundTask:bgID]; - bgID = GDTCORBackgroundIdentifierInvalid; - }); -} - -- (void)appWillTerminate:(GDTCORApplication *)application { - dispatch_sync(_queue, ^{ - NSError *error; - GDTCOREncodeArchive(self, ArchivePath(), &error); - if (error) { - GDTCORLogDebug(@"Serializing GDTCCTPrioritizer to an archive failed: %@", error); - } - }); -} - -#pragma mark - GDTCORUploadPackageProtocol - -- (void)packageDelivered:(GDTCORUploadPackage *)package successful:(BOOL)successful { - // If sending the package wasn't successful, we should keep track of these events. - if (!successful) { - return; - } - - dispatch_async(_queue, ^{ - NSSet *events = [package.events copy]; - for (GDTCOREvent *event in events) { - // We don't know what collection the event was contained in, so attempt removal from all. - [self.CCTEvents removeObject:event]; - [self.FLLEvents removeObject:event]; - [self.CSHEvents removeObject:event]; - } - }); -} - -- (void)packageExpired:(GDTCORUploadPackage *)package { - [self packageDelivered:package successful:YES]; -} - -@end diff --git a/iphone/Maps/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTUploader.m b/iphone/Maps/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTUploader.m deleted file mode 100644 index f50c9bf53d..0000000000 --- a/iphone/Maps/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTUploader.m +++ /dev/null @@ -1,441 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "GDTCCTLibrary/Private/GDTCCTUploader.h" - -#import -#import -#import - -#import -#import -#import - -#import "GDTCCTLibrary/Private/GDTCCTCompressionHelper.h" -#import "GDTCCTLibrary/Private/GDTCCTNanopbHelpers.h" -#import "GDTCCTLibrary/Private/GDTCCTPrioritizer.h" - -#import "GDTCCTLibrary/Protogen/nanopb/cct.nanopb.h" - -#ifdef GDTCCTSUPPORT_VERSION -#define STR(x) STR_EXPAND(x) -#define STR_EXPAND(x) #x -static NSString *const kGDTCCTSupportSDKVersion = @STR(GDTCCTSUPPORT_VERSION); -#else -static NSString *const kGDTCCTSupportSDKVersion = @"UNKNOWN"; -#endif // GDTCCTSUPPORT_VERSION - -#if !NDEBUG -NSNotificationName const GDTCCTUploadCompleteNotification = @"com.GDTCCTUploader.UploadComplete"; -#endif // #if !NDEBUG - -@interface GDTCCTUploader () - -// Redeclared as readwrite. -@property(nullable, nonatomic, readwrite) NSURLSessionUploadTask *currentTask; - -@end - -@implementation GDTCCTUploader - -+ (void)load { - GDTCCTUploader *uploader = [GDTCCTUploader sharedInstance]; - [[GDTCORRegistrar sharedInstance] registerUploader:uploader target:kGDTCORTargetCCT]; - [[GDTCORRegistrar sharedInstance] registerUploader:uploader target:kGDTCORTargetFLL]; - [[GDTCORRegistrar sharedInstance] registerUploader:uploader target:kGDTCORTargetCSH]; -} - -+ (instancetype)sharedInstance { - static GDTCCTUploader *sharedInstance; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - sharedInstance = [[GDTCCTUploader alloc] init]; - }); - return sharedInstance; -} - -- (instancetype)init { - self = [super init]; - if (self) { - _uploaderQueue = dispatch_queue_create("com.google.GDTCCTUploader", DISPATCH_QUEUE_SERIAL); - NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration]; - _uploaderSession = [NSURLSession sessionWithConfiguration:config - delegate:self - delegateQueue:nil]; - } - return self; -} - -/** - * - */ -- (nullable NSURL *)serverURLForTarget:(GDTCORTarget)target { - // These strings should be interleaved to construct the real URL. This is just to (hopefully) - // fool github URL scanning bots. - static NSURL *CCTServerURL; - static dispatch_once_t CCTOnceToken; - dispatch_once(&CCTOnceToken, ^{ - const char *p1 = "hts/frbslgiggolai.o/0clgbth"; - const char *p2 = "tp:/ieaeogn.ogepscmvc/o/ac"; - const char URL[54] = {p1[0], p2[0], p1[1], p2[1], p1[2], p2[2], p1[3], p2[3], p1[4], - p2[4], p1[5], p2[5], p1[6], p2[6], p1[7], p2[7], p1[8], p2[8], - p1[9], p2[9], p1[10], p2[10], p1[11], p2[11], p1[12], p2[12], p1[13], - p2[13], p1[14], p2[14], p1[15], p2[15], p1[16], p2[16], p1[17], p2[17], - p1[18], p2[18], p1[19], p2[19], p1[20], p2[20], p1[21], p2[21], p1[22], - p2[22], p1[23], p2[23], p1[24], p2[24], p1[25], p2[25], p1[26], '\0'}; - CCTServerURL = [NSURL URLWithString:[NSString stringWithUTF8String:URL]]; - }); - - static NSURL *FLLServerURL; - static dispatch_once_t FLLOnceToken; - dispatch_once(&FLLOnceToken, ^{ - const char *p1 = "hts/frbslgigp.ogepscmv/ieo/eaybtho"; - const char *p2 = "tp:/ieaeogn-agolai.o/1frlglgc/aclg"; - const char URL[69] = {p1[0], p2[0], p1[1], p2[1], p1[2], p2[2], p1[3], p2[3], p1[4], - p2[4], p1[5], p2[5], p1[6], p2[6], p1[7], p2[7], p1[8], p2[8], - p1[9], p2[9], p1[10], p2[10], p1[11], p2[11], p1[12], p2[12], p1[13], - p2[13], p1[14], p2[14], p1[15], p2[15], p1[16], p2[16], p1[17], p2[17], - p1[18], p2[18], p1[19], p2[19], p1[20], p2[20], p1[21], p2[21], p1[22], - p2[22], p1[23], p2[23], p1[24], p2[24], p1[25], p2[25], p1[26], p2[26], - p1[27], p2[27], p1[28], p2[28], p1[29], p2[29], p1[30], p2[30], p1[31], - p2[31], p1[32], p2[32], p1[33], p2[33], '\0'}; - FLLServerURL = [NSURL URLWithString:[NSString stringWithUTF8String:URL]]; - }); - - static NSURL *CSHServerURL; - static dispatch_once_t CSHOnceToken; - dispatch_once(&CSHOnceToken, ^{ - // These strings should be interleaved to construct the real URL. This is just to (hopefully) - // fool github URL scanning bots. - const char *p1 = "hts/cahyiseot-agolai.o/1frlglgc/aclg"; - const char *p2 = "tp:/rsltcrprsp.ogepscmv/ieo/eaybtho"; - const char URL[72] = {p1[0], p2[0], p1[1], p2[1], p1[2], p2[2], p1[3], p2[3], p1[4], - p2[4], p1[5], p2[5], p1[6], p2[6], p1[7], p2[7], p1[8], p2[8], - p1[9], p2[9], p1[10], p2[10], p1[11], p2[11], p1[12], p2[12], p1[13], - p2[13], p1[14], p2[14], p1[15], p2[15], p1[16], p2[16], p1[17], p2[17], - p1[18], p2[18], p1[19], p2[19], p1[20], p2[20], p1[21], p2[21], p1[22], - p2[22], p1[23], p2[23], p1[24], p2[24], p1[25], p2[25], p1[26], p2[26], - p1[27], p2[27], p1[28], p2[28], p1[29], p2[29], p1[30], p2[30], p1[31], - p2[31], p1[32], p2[32], p1[33], p2[33], p1[34], p2[34], p1[35], '\0'}; - CSHServerURL = [NSURL URLWithString:[NSString stringWithUTF8String:URL]]; - }); - -#if !NDEBUG - if (_testServerURL) { - return _testServerURL; - } -#endif // !NDEBUG - - switch (target) { - case kGDTCORTargetCCT: - return CCTServerURL; - - case kGDTCORTargetFLL: - return FLLServerURL; - - case kGDTCORTargetCSH: - return CSHServerURL; - - default: - GDTCORLogDebug(@"GDTCCTUploader doesn't support target %ld", (long)target); - return nil; - break; - } -} - -- (NSString *)FLLAndCSHAPIKey { - static NSString *defaultServerKey; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - // These strings should be interleaved to construct the real key. - const char *p1 = "AzSBG0honD6A-PxV5nBc"; - const char *p2 = "Iay44Iwtu2vV0AOrz1C"; - const char defaultKey[40] = {p1[0], p2[0], p1[1], p2[1], p1[2], p2[2], p1[3], p2[3], - p1[4], p2[4], p1[5], p2[5], p1[6], p2[6], p1[7], p2[7], - p1[8], p2[8], p1[9], p2[9], p1[10], p2[10], p1[11], p2[11], - p1[12], p2[12], p1[13], p2[13], p1[14], p2[14], p1[15], p2[15], - p1[16], p2[16], p1[17], p2[17], p1[18], p2[18], p1[19], '\0'}; - defaultServerKey = [NSString stringWithUTF8String:defaultKey]; - }); - return defaultServerKey; -} - -- (void)uploadPackage:(GDTCORUploadPackage *)package { - __block GDTCORBackgroundIdentifier bgID = GDTCORBackgroundIdentifierInvalid; - bgID = [[GDTCORApplication sharedApplication] - beginBackgroundTaskWithName:@"GDTCCTUploader-upload" - expirationHandler:^{ - if (bgID != GDTCORBackgroundIdentifierInvalid) { - // Cancel the upload and complete delivery. - [self.currentTask cancel]; - [self.currentUploadPackage completeDelivery]; - - // End the background task. - [[GDTCORApplication sharedApplication] endBackgroundTask:bgID]; - } - }]; - - dispatch_async(_uploaderQueue, ^{ - if (self->_currentTask || self->_currentUploadPackage) { - GDTCORLogWarning(GDTCORMCWUploadFailed, @"%@", - @"An upload shouldn't be initiated with another in progress."); - return; - } - GDTCORTarget target = package.target; - id completionHandler = ^(NSData *_Nullable data, NSURLResponse *_Nullable response, - NSError *_Nullable error) { - GDTCORLogDebug(@"%@", @"CCT: request completed"); - if (error) { - GDTCORLogWarning(GDTCORMCWUploadFailed, @"There was an error uploading events: %@", error); - } - NSError *decodingError; - GDTCORClock *futureUploadTime; - if (data) { - gdt_cct_LogResponse logResponse = GDTCCTDecodeLogResponse(data, &decodingError); - if (!decodingError && logResponse.has_next_request_wait_millis) { - GDTCORLogDebug( - @"CCT: The backend responded asking to not upload for %lld millis from now.", - logResponse.next_request_wait_millis); - futureUploadTime = - [GDTCORClock clockSnapshotInTheFuture:logResponse.next_request_wait_millis]; - } else if (decodingError) { - GDTCORLogDebug(@"There was a response decoding error: %@", decodingError); - } - pb_release(gdt_cct_LogResponse_fields, &logResponse); - } - if (!futureUploadTime) { - GDTCORLogDebug(@"%@", @"CCT: The backend response failed to parse, so the next request " - @"won't occur until 15 minutes from now"); - // 15 minutes from now. - futureUploadTime = [GDTCORClock clockSnapshotInTheFuture:15 * 60 * 1000]; - } - switch (target) { - case kGDTCORTargetCCT: - self->_CCTNextUploadTime = futureUploadTime; - break; - - case kGDTCORTargetFLL: - // Falls through. - case kGDTCORTargetCSH: - self->_FLLNextUploadTime = futureUploadTime; - default: - break; - } - - // Only retry if one of these codes is returned, or there was an error. - if (error || ((NSHTTPURLResponse *)response).statusCode == 429 || - ((NSHTTPURLResponse *)response).statusCode == 503) { - [package retryDeliveryInTheFuture]; - } else { -#if !NDEBUG - // Post a notification when in DEBUG mode to state how many packages were uploaded. Useful - // for validation during tests. - [[NSNotificationCenter defaultCenter] postNotificationName:GDTCCTUploadCompleteNotification - object:@(package.events.count)]; -#endif // #if !NDEBUG - GDTCORLogDebug(@"%@", @"CCT: package delivered"); - [package completeDelivery]; - } - - // End the background task if there was one. - if (bgID != GDTCORBackgroundIdentifierInvalid) { - [[GDTCORApplication sharedApplication] endBackgroundTask:bgID]; - bgID = GDTCORBackgroundIdentifierInvalid; - } - self.currentTask = nil; - self.currentUploadPackage = nil; - }; - self->_currentUploadPackage = package; - NSData *requestProtoData = - [self constructRequestProtoFromPackage:(GDTCORUploadPackage *)package]; - NSData *gzippedData = [GDTCCTCompressionHelper gzippedData:requestProtoData]; - BOOL usingGzipData = gzippedData != nil && gzippedData.length < requestProtoData.length; - NSData *dataToSend = usingGzipData ? gzippedData : requestProtoData; - NSURLRequest *request = [self constructRequestForTarget:target data:dataToSend]; - GDTCORLogDebug(@"CTT: request created: %@", request); - self.currentTask = [self.uploaderSession uploadTaskWithRequest:request - fromData:dataToSend - completionHandler:completionHandler]; - GDTCORLogDebug(@"%@", @"CCT: The upload task is about to begin."); - [self.currentTask resume]; - }); -} - -- (BOOL)readyToUploadTarget:(GDTCORTarget)target conditions:(GDTCORUploadConditions)conditions { - __block BOOL result = NO; - NSSet *CSHEvents = [[GDTCCTPrioritizer sharedInstance] eventsForTarget:kGDTCORTargetCSH]; - dispatch_sync(_uploaderQueue, ^{ - if (target == kGDTCORTargetCSH) { - result = CSHEvents.count > 0; - return; - } - - if (self->_currentUploadPackage) { - result = NO; - GDTCORLogDebug(@"%@", @"CCT: can't upload because a package is in flight"); - return; - } - if (self->_currentTask) { - result = NO; - GDTCORLogDebug(@"%@", @"CCT: can't upload because a task is in progress"); - return; - } - if ((conditions & GDTCORUploadConditionHighPriority) == GDTCORUploadConditionHighPriority) { - result = YES; - GDTCORLogDebug(@"%@", @"CCT: a high priority event is allowing an upload"); - return; - } - switch (target) { - case kGDTCORTargetCCT: - if (self->_CCTNextUploadTime) { - result = [[GDTCORClock snapshot] isAfter:self->_CCTNextUploadTime]; - } - break; - - case kGDTCORTargetFLL: - if (self->_FLLNextUploadTime) { - result = [[GDTCORClock snapshot] isAfter:self->_FLLNextUploadTime]; - } - break; - - default: - // The CSH backend should be handled above. - break; - } - if (result) { - GDTCORLogDebug(@"CCT: can upload to target %ld because the request wait time has transpired", - (long)target); - } else { - GDTCORLogDebug(@"CCT: can't upload to target %ld because the backend asked to wait", - (long)target); - } - result = YES; - GDTCORLogDebug(@"CCT: can upload to target %ld because nothing is preventing it", (long)target); - }); - return result; -} - -#pragma mark - Private helper methods - -/** Constructs data given an upload package. - * - * @param package The upload package used to construct the request proto bytes. - * @return Proto bytes representing a gdt_cct_LogRequest object. - */ -- (nonnull NSData *)constructRequestProtoFromPackage:(GDTCORUploadPackage *)package { - // Segment the log events by log type. - NSMutableDictionary *> *logMappingIDToLogSet = - [[NSMutableDictionary alloc] init]; - [package.events enumerateObjectsUsingBlock:^(GDTCOREvent *_Nonnull event, BOOL *_Nonnull stop) { - NSMutableSet *logSet = logMappingIDToLogSet[event.mappingID]; - logSet = logSet ? logSet : [[NSMutableSet alloc] init]; - [logSet addObject:event]; - logMappingIDToLogSet[event.mappingID] = logSet; - }]; - - gdt_cct_BatchedLogRequest batchedLogRequest = - GDTCCTConstructBatchedLogRequest(logMappingIDToLogSet); - - NSData *data = GDTCCTEncodeBatchedLogRequest(&batchedLogRequest); - pb_release(gdt_cct_BatchedLogRequest_fields, &batchedLogRequest); - return data ? data : [[NSData alloc] init]; -} - -/** Constructs a request to FLL given a URL and request body data. - * - * @param target The target backend to send the request to. - * @param data The request body data. - * @return A new NSURLRequest ready to be sent to FLL. - */ -- (NSURLRequest *)constructRequestForTarget:(GDTCORTarget)target data:(NSData *)data { - NSURL *URL = [self serverURLForTarget:target]; - NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL]; - NSString *targetString; - switch (target) { - case kGDTCORTargetCCT: - targetString = @"cct"; - break; - - case kGDTCORTargetFLL: - targetString = @"fll"; - break; - - case kGDTCORTargetCSH: - targetString = @"csh"; - break; - - default: - targetString = @"unknown"; - break; - } - NSString *userAgent = - [NSString stringWithFormat:@"datatransport/%@ %@support/%@ apple/", kGDTCORVersion, - targetString, kGDTCCTSupportSDKVersion]; - if (target == kGDTCORTargetFLL || target == kGDTCORTargetCSH) { - [request setValue:[self FLLAndCSHAPIKey] forHTTPHeaderField:@"X-Goog-Api-Key"]; - } - if ([GDTCCTCompressionHelper isGzipped:data]) { - [request setValue:@"gzip" forHTTPHeaderField:@"Content-Encoding"]; - } - [request setValue:@"application/x-protobuf" forHTTPHeaderField:@"Content-Type"]; - [request setValue:@"gzip" forHTTPHeaderField:@"Accept-Encoding"]; - [request setValue:userAgent forHTTPHeaderField:@"User-Agent"]; - request.HTTPMethod = @"POST"; - [request setHTTPBody:data]; - return request; -} - -#pragma mark - GDTCORUploadPackageProtocol - -- (void)packageExpired:(GDTCORUploadPackage *)package { - dispatch_async(_uploaderQueue, ^{ - [self.currentTask cancel]; - self.currentTask = nil; - self.currentUploadPackage = nil; - }); -} - -#pragma mark - GDTCORLifecycleProtocol - -- (void)appWillTerminate:(GDTCORApplication *)application { - dispatch_sync(_uploaderQueue, ^{ - [self.currentTask cancel]; - [self.currentUploadPackage completeDelivery]; - }); -} - -#pragma mark - NSURLSessionDelegate - -- (void)URLSession:(NSURLSession *)session - task:(NSURLSessionTask *)task - willPerformHTTPRedirection:(NSHTTPURLResponse *)response - newRequest:(NSURLRequest *)request - completionHandler:(void (^)(NSURLRequest *_Nullable))completionHandler { - if (!completionHandler) { - return; - } - if (response.statusCode == 302 || response.statusCode == 301) { - if ([request.URL isEqual:[self serverURLForTarget:kGDTCORTargetFLL]]) { - NSURLRequest *newRequest = [self constructRequestForTarget:kGDTCORTargetCCT - data:task.originalRequest.HTTPBody]; - completionHandler(newRequest); - } - } else { - completionHandler(request); - } -} - -@end diff --git a/iphone/Maps/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCOREvent+GDTCCTSupport.m b/iphone/Maps/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCOREvent+GDTCCTSupport.m deleted file mode 100644 index 1531e565a7..0000000000 --- a/iphone/Maps/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCOREvent+GDTCCTSupport.m +++ /dev/null @@ -1,236 +0,0 @@ -/* - * Copyright 2020 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "GDTCCTLibrary/Public/GDTCOREvent+GDTCCTSupport.h" - -#import - -NSString *const GDTCCTNeedsNetworkConnectionInfo = @"needs_network_connection_info"; - -NSString *const GDTCCTNetworkConnectionInfo = @"network_connection_info"; - -NSString *const GDTCCTEventCodeInfo = @"event_code_info"; - -@implementation GDTCOREvent (GDTCCTSupport) - -- (void)setNeedsNetworkConnectionInfoPopulated:(BOOL)needsNetworkConnectionInfoPopulated { - if (!needsNetworkConnectionInfoPopulated) { - if (!self.customBytes) { - return; - } - - // Make sure we don't destroy the eventCode data, if any is present. - @try { - NSError *error; - NSMutableDictionary *bytesDict = - [[NSJSONSerialization JSONObjectWithData:self.customBytes options:0 - error:&error] mutableCopy]; - if (error) { - GDTCORLogDebug(@"Error when setting an event's event_code: %@", error); - return; - } - NSNumber *eventCode = bytesDict[GDTCCTEventCodeInfo]; - if (eventCode != nil) { - self.customBytes = - [NSJSONSerialization dataWithJSONObject:@{GDTCCTEventCodeInfo : eventCode} - options:0 - error:&error]; - } - } @catch (NSException *exception) { - GDTCORLogDebug(@"Error when setting the event for needs_network_connection_info: %@", - exception); - } - } else { - @try { - NSError *error; - NSMutableDictionary *bytesDict; - if (self.customBytes) { - bytesDict = [[NSJSONSerialization JSONObjectWithData:self.customBytes - options:0 - error:&error] mutableCopy]; - if (error) { - GDTCORLogDebug(@"Error when setting an even'ts event_code: %@", error); - return; - } - } else { - bytesDict = [[NSMutableDictionary alloc] init]; - } - [bytesDict setObject:@YES forKey:GDTCCTNeedsNetworkConnectionInfo]; - self.customBytes = [NSJSONSerialization dataWithJSONObject:bytesDict options:0 error:&error]; - } @catch (NSException *exception) { - GDTCORLogDebug(@"Error when setting the event for needs_network_connection_info: %@", - exception); - } - } -} - -- (BOOL)needsNetworkConnectionInfoPopulated { - if (self.customBytes) { - @try { - NSError *error; - NSDictionary *bytesDict = [NSJSONSerialization JSONObjectWithData:self.customBytes - options:0 - error:&error]; - return bytesDict && !error && [bytesDict[GDTCCTNeedsNetworkConnectionInfo] boolValue]; - } @catch (NSException *exception) { - GDTCORLogDebug(@"Error when checking the event for needs_network_connection_info: %@", - exception); - } - } - return NO; -} - -- (void)setNetworkConnectionInfoData:(NSData *)networkConnectionInfoData { - @try { - NSError *error; - NSString *dataString = [networkConnectionInfoData base64EncodedStringWithOptions:0]; - if (dataString != nil) { - NSMutableDictionary *bytesDict; - if (self.customBytes) { - bytesDict = [[NSJSONSerialization JSONObjectWithData:self.customBytes - options:0 - error:&error] mutableCopy]; - if (error) { - GDTCORLogDebug(@"Error when setting an even'ts event_code: %@", error); - return; - } - } else { - bytesDict = [[NSMutableDictionary alloc] init]; - } - [bytesDict setObject:dataString forKey:GDTCCTNetworkConnectionInfo]; - self.customBytes = [NSJSONSerialization dataWithJSONObject:bytesDict options:0 error:&error]; - if (error) { - self.customBytes = nil; - GDTCORLogDebug(@"Error when setting an event's network_connection_info: %@", error); - } - } - } @catch (NSException *exception) { - GDTCORLogDebug(@"Error when setting an event's network_connection_info: %@", exception); - } -} - -- (nullable NSData *)networkConnectionInfoData { - if (self.customBytes) { - @try { - NSError *error; - NSDictionary *bytesDict = [NSJSONSerialization JSONObjectWithData:self.customBytes - options:0 - error:&error]; - NSString *base64Data = bytesDict[GDTCCTNetworkConnectionInfo]; - NSData *networkConnectionInfoData = [[NSData alloc] initWithBase64EncodedString:base64Data - options:0]; - if (error) { - GDTCORLogDebug(@"Error when getting an event's network_connection_info: %@", error); - return nil; - } else { - return networkConnectionInfoData; - } - } @catch (NSException *exception) { - GDTCORLogDebug(@"Error when getting an event's network_connection_info: %@", exception); - } - } - return nil; -} - -- (NSNumber *)eventCode { - if (self.customBytes) { - @try { - NSError *error; - NSDictionary *bytesDict = [NSJSONSerialization JSONObjectWithData:self.customBytes - options:0 - error:&error]; - NSString *eventCodeString = bytesDict[GDTCCTEventCodeInfo]; - - if (!eventCodeString) { - return nil; - } - - NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; - formatter.numberStyle = NSNumberFormatterDecimalStyle; - NSNumber *eventCode = [formatter numberFromString:eventCodeString]; - - if (error) { - GDTCORLogDebug(@"Error when getting an event's network_connection_info: %@", error); - return nil; - } else { - return eventCode; - } - } @catch (NSException *exception) { - GDTCORLogDebug(@"Error when getting an event's event_code: %@", exception); - } - } - return nil; -} - -- (void)setEventCode:(NSNumber *)eventCode { - if (eventCode == nil) { - if (!self.customBytes) { - return; - } - - NSError *error; - NSMutableDictionary *bytesDict = [[NSJSONSerialization JSONObjectWithData:self.customBytes - options:0 - error:&error] mutableCopy]; - if (error) { - GDTCORLogDebug(@"Error when setting an event's event_code: %@", error); - return; - } - - [bytesDict removeObjectForKey:GDTCCTEventCodeInfo]; - self.customBytes = [NSJSONSerialization dataWithJSONObject:bytesDict options:0 error:&error]; - if (error) { - self.customBytes = nil; - GDTCORLogDebug(@"Error when setting an event's event_code: %@", error); - return; - } - return; - } - - @try { - NSMutableDictionary *bytesDict; - NSError *error; - if (self.customBytes) { - bytesDict = [[NSJSONSerialization JSONObjectWithData:self.customBytes options:0 - error:&error] mutableCopy]; - if (error) { - GDTCORLogDebug(@"Error when setting an event's event_code: %@", error); - return; - } - } else { - bytesDict = [[NSMutableDictionary alloc] init]; - } - - NSString *eventCodeString = [eventCode stringValue]; - if (eventCodeString == nil) { - return; - } - - [bytesDict setObject:eventCodeString forKey:GDTCCTEventCodeInfo]; - - self.customBytes = [NSJSONSerialization dataWithJSONObject:bytesDict options:0 error:&error]; - if (error) { - self.customBytes = nil; - GDTCORLogDebug(@"Error when setting an event's network_connection_info: %@", error); - return; - } - - } @catch (NSException *exception) { - GDTCORLogDebug(@"Error when getting an event's network_connection_info: %@", exception); - } -} - -@end diff --git a/iphone/Maps/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTCompressionHelper.h b/iphone/Maps/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTCompressionHelper.h deleted file mode 100644 index 08d0a4badf..0000000000 --- a/iphone/Maps/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTCompressionHelper.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright 2020 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** A class with methods to help with gzipped data. */ -@interface GDTCCTCompressionHelper : NSObject - -/** Compresses the given data and returns a new data object. - * - * @note Reduced version from GULNSData+zlib.m of GoogleUtilities. - * @return Compressed data, or nil if there was an error. - */ -+ (nullable NSData *)gzippedData:(NSData *)data; - -/** Returns YES if the data looks like it was gzip compressed by checking for the gzip magic number. - * - * @note: From https://en.wikipedia.org/wiki/Gzip, gzip's magic number is 1f 8b. - * @return YES if the data appears gzipped, NO otherwise. - */ -+ (BOOL)isGzipped:(NSData *)data; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTNanopbHelpers.h b/iphone/Maps/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTNanopbHelpers.h deleted file mode 100644 index 8051f0e25f..0000000000 --- a/iphone/Maps/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTNanopbHelpers.h +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -#import -#import - -#import "GDTCCTLibrary/Protogen/nanopb/cct.nanopb.h" - -NS_ASSUME_NONNULL_BEGIN - -#pragma mark - General purpose encoders - -/** Converts an NSString* to a pb_bytes_array_t*. - * - * @note calloc is called in this method. Ensure that pb_release is called on this or the parent. - * - * @param string The string to convert. - * @return A newly allocated array of bytes representing the UTF8 encoding of the string. - */ -pb_bytes_array_t *GDTCCTEncodeString(NSString *string); - -/** Converts an NSData to a pb_bytes_array_t*. - * - * @note calloc is called in this method. Ensure that pb_release is called on this or the parent. - * - * @param data The data to convert. - * @return A newly allocated array of bytes with [data bytes] copied into it. - */ -pb_bytes_array_t *GDTCCTEncodeData(NSData *data); - -#pragma mark - CCT object constructors - -/** Encodes a batched log request. - * - * @note Ensure that pb_release is called on the batchedLogRequest param. - * - * @param batchedLogRequest A pointer to the log batch to encode to bytes. - * @return An NSData object representing the bytes of the log request batch. - */ -FOUNDATION_EXPORT -NSData *GDTCCTEncodeBatchedLogRequest(gdt_cct_BatchedLogRequest *batchedLogRequest); - -/** Constructs a gdt_cct_BatchedLogRequest given sets of events segemented by mapping ID. - * - * @note calloc is called in this method. Ensure that pb_release is called on this or the parent. - * - * @param logMappingIDToLogSet A map of mapping IDs to sets of events to convert into a batch. - * @return A newly created gdt_cct_BatchedLogRequest. - */ -FOUNDATION_EXPORT -gdt_cct_BatchedLogRequest GDTCCTConstructBatchedLogRequest( - NSDictionary *> *logMappingIDToLogSet); - -/** Constructs a log request given a log source and a set of events. - * - * @note calloc is called in this method. Ensure that pb_release is called on this or the parent. - * @param logSource The CCT log source to put into the log request. - * @param logSet The set of events to send in this log request. - */ -FOUNDATION_EXPORT -gdt_cct_LogRequest GDTCCTConstructLogRequest(int32_t logSource, NSSet *logSet); - -/** Constructs a gdt_cct_LogEvent given a GDTCOREvent*. - * - * @param event The GDTCOREvent to convert. - * @return The new gdt_cct_LogEvent object. - */ -FOUNDATION_EXPORT -gdt_cct_LogEvent GDTCCTConstructLogEvent(GDTCOREvent *event); - -/** Constructs a gdt_cct_ClientInfo representing the client device. - * - * @return The new gdt_cct_ClientInfo object. - */ -FOUNDATION_EXPORT -gdt_cct_ClientInfo GDTCCTConstructClientInfo(void); - -/** Constructs a gdt_cct_IosClientInfo representing the client device. - * - * @return The new gdt_cct_IosClientInfo object. - */ -FOUNDATION_EXPORT -gdt_cct_IosClientInfo GDTCCTConstructiOSClientInfo(void); - -/** Constructs the data of a gdt_cct_NetworkConnectionInfo representing the client nework connection - * information. - * - * @return The data of a gdt_cct_NetworkConnectionInfo object. - */ -FOUNDATION_EXPORT -NSData *GDTCCTConstructNetworkConnectionInfoData(void); - -/** Return a gdt_cct_NetworkConnectionInfo_MobileSubtype representing the client - * - * @return The gdt_cct_NetworkConnectionInfo_MobileSubtype. - */ -FOUNDATION_EXPORT -gdt_cct_NetworkConnectionInfo_MobileSubtype GDTCCTNetworkConnectionInfoNetworkMobileSubtype(void); - -#pragma mark - CCT object decoders - -/** Decodes a gdt_cct_LogResponse given proto bytes. - * - * @note calloc is called in this method. Ensure that pb_release is called on the return value. - * - * @param data The proto bytes of the gdt_cct_LogResponse. - * @param error An error that will be populated if something went wrong during decoding. - * @return A newly allocated gdt_cct_LogResponse from the data, if the bytes decoded properly. - */ -FOUNDATION_EXPORT -gdt_cct_LogResponse GDTCCTDecodeLogResponse(NSData *data, NSError **error); - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTPrioritizer.h b/iphone/Maps/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTPrioritizer.h deleted file mode 100644 index 7b7921b3b5..0000000000 --- a/iphone/Maps/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTPrioritizer.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -#import -#import -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/** Manages the prioritization of events from GoogleDataTransport. */ -@interface GDTCCTPrioritizer : NSObject - -/** The queue on which this prioritizer operates. */ -@property(nonatomic) dispatch_queue_t queue; - -/** The most recent attempted upload of CCT daily uploaded logs. */ -@property(nonatomic) GDTCORClock *CCTTimeOfLastDailyUpload; - -/** The most recent attempted upload of FLL daily uploaded logs*/ -@property(nonatomic) GDTCORClock *FLLOfLastDailyUpload; - -/** Creates and/or returns the singleton instance of this class. - * - * @return The singleton instance of this class. - */ -+ (instancetype)sharedInstance; - -/** Returns a set of events that have been prioritized for the given target. - * - * @param target The target to check. CCT, FLL, and CSH are currently supported by this class. - * @return The set of events prioritized so far. - */ -- (nullable NSSet *)eventsForTarget:(GDTCORTarget)target; - -NS_ASSUME_NONNULL_END - -@end diff --git a/iphone/Maps/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTUploader.h b/iphone/Maps/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTUploader.h deleted file mode 100644 index cdc322d4e7..0000000000 --- a/iphone/Maps/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTUploader.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -#import - -NS_ASSUME_NONNULL_BEGIN - -#if !NDEBUG -/** A notification fired when uploading is complete, detailing the number of events uploaded. */ -extern NSNotificationName const GDTCCTUploadCompleteNotification; -#endif // #if !NDEBUG - -/** Class capable of uploading events to the CCT backend. */ -@interface GDTCCTUploader : NSObject - -/** The queue on which all CCT uploading will occur. */ -@property(nonatomic, readonly) dispatch_queue_t uploaderQueue; - -/** The URL session that will attempt upload. */ -@property(nonatomic, readonly) NSURLSession *uploaderSession; - -/** The current upload task. */ -@property(nullable, nonatomic, readonly) NSURLSessionUploadTask *currentTask; - -/** Current upload package. */ -@property(nullable, nonatomic) GDTCORUploadPackage *currentUploadPackage; - -/** The next upload time for the CCT target. */ -@property(nullable, nonatomic) GDTCORClock *CCTNextUploadTime; - -/** The next upload time for the FLL target. */ -@property(nullable, nonatomic) GDTCORClock *FLLNextUploadTime; - -#if !NDEBUG -/** An upload URL used across all targets. For testing only. */ -@property(nullable, nonatomic) NSURL *testServerURL; - -#endif // !NDEBUG - -/** Creates and/or returns the singleton instance of this class. - * - * @return The singleton instance of this class. - */ -+ (instancetype)sharedInstance; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Protogen/nanopb/cct.nanopb.c b/iphone/Maps/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Protogen/nanopb/cct.nanopb.c deleted file mode 100644 index 836031afbc..0000000000 --- a/iphone/Maps/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Protogen/nanopb/cct.nanopb.c +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* Automatically generated nanopb constant definitions */ -/* Generated by nanopb-0.3.9.5 */ - -#include "cct.nanopb.h" - -/* @@protoc_insertion_point(includes) */ -#if PB_PROTO_HEADER_VERSION != 30 -#error Regenerate this file with the current version of nanopb generator. -#endif - -const gdt_cct_NetworkConnectionInfo_NetworkType gdt_cct_NetworkConnectionInfo_network_type_default = gdt_cct_NetworkConnectionInfo_NetworkType_NONE; -const gdt_cct_NetworkConnectionInfo_MobileSubtype gdt_cct_NetworkConnectionInfo_mobile_subtype_default = gdt_cct_NetworkConnectionInfo_MobileSubtype_UNKNOWN_MOBILE_SUBTYPE; -const gdt_cct_QosTierConfiguration_QosTier gdt_cct_LogRequest_qos_tier_default = gdt_cct_QosTierConfiguration_QosTier_DEFAULT; -const int32_t gdt_cct_QosTierConfiguration_log_source_default = 0; - - -const pb_field_t gdt_cct_LogEvent_fields[7] = { - PB_FIELD( 1, INT64 , OPTIONAL, STATIC , FIRST, gdt_cct_LogEvent, event_time_ms, event_time_ms, 0), - PB_FIELD( 6, BYTES , OPTIONAL, POINTER , OTHER, gdt_cct_LogEvent, source_extension, event_time_ms, 0), - PB_FIELD( 11, INT32 , OPTIONAL, STATIC , OTHER, gdt_cct_LogEvent, event_code, source_extension, 0), - PB_FIELD( 15, SINT64 , OPTIONAL, STATIC , OTHER, gdt_cct_LogEvent, timezone_offset_seconds, event_code, 0), - PB_FIELD( 17, INT64 , OPTIONAL, STATIC , OTHER, gdt_cct_LogEvent, event_uptime_ms, timezone_offset_seconds, 0), - PB_FIELD( 23, MESSAGE , OPTIONAL, STATIC , OTHER, gdt_cct_LogEvent, network_connection_info, event_uptime_ms, &gdt_cct_NetworkConnectionInfo_fields), - PB_LAST_FIELD -}; - -const pb_field_t gdt_cct_NetworkConnectionInfo_fields[3] = { - PB_FIELD( 1, ENUM , OPTIONAL, STATIC , FIRST, gdt_cct_NetworkConnectionInfo, network_type, network_type, &gdt_cct_NetworkConnectionInfo_network_type_default), - PB_FIELD( 2, UENUM , OPTIONAL, STATIC , OTHER, gdt_cct_NetworkConnectionInfo, mobile_subtype, network_type, &gdt_cct_NetworkConnectionInfo_mobile_subtype_default), - PB_LAST_FIELD -}; - -const pb_field_t gdt_cct_IosClientInfo_fields[8] = { - PB_FIELD( 3, BYTES , OPTIONAL, POINTER , FIRST, gdt_cct_IosClientInfo, os_major_version, os_major_version, 0), - PB_FIELD( 4, BYTES , OPTIONAL, POINTER , OTHER, gdt_cct_IosClientInfo, os_full_version, os_major_version, 0), - PB_FIELD( 5, BYTES , OPTIONAL, POINTER , OTHER, gdt_cct_IosClientInfo, application_build, os_full_version, 0), - PB_FIELD( 6, BYTES , OPTIONAL, POINTER , OTHER, gdt_cct_IosClientInfo, country, application_build, 0), - PB_FIELD( 7, BYTES , OPTIONAL, POINTER , OTHER, gdt_cct_IosClientInfo, model, country, 0), - PB_FIELD( 8, BYTES , OPTIONAL, POINTER , OTHER, gdt_cct_IosClientInfo, language_code, model, 0), - PB_FIELD( 11, BYTES , OPTIONAL, POINTER , OTHER, gdt_cct_IosClientInfo, application_bundle_id, language_code, 0), - PB_LAST_FIELD -}; - -const pb_field_t gdt_cct_ClientInfo_fields[3] = { - PB_FIELD( 1, UENUM , OPTIONAL, STATIC , FIRST, gdt_cct_ClientInfo, client_type, client_type, 0), - PB_FIELD( 4, MESSAGE , OPTIONAL, STATIC , OTHER, gdt_cct_ClientInfo, ios_client_info, client_type, &gdt_cct_IosClientInfo_fields), - PB_LAST_FIELD -}; - -const pb_field_t gdt_cct_BatchedLogRequest_fields[2] = { - PB_FIELD( 1, MESSAGE , REPEATED, POINTER , FIRST, gdt_cct_BatchedLogRequest, log_request, log_request, &gdt_cct_LogRequest_fields), - PB_LAST_FIELD -}; - -const pb_field_t gdt_cct_LogRequest_fields[7] = { - PB_FIELD( 1, MESSAGE , OPTIONAL, STATIC , FIRST, gdt_cct_LogRequest, client_info, client_info, &gdt_cct_ClientInfo_fields), - PB_FIELD( 2, INT32 , OPTIONAL, STATIC , OTHER, gdt_cct_LogRequest, log_source, client_info, 0), - PB_FIELD( 3, MESSAGE , REPEATED, POINTER , OTHER, gdt_cct_LogRequest, log_event, log_source, &gdt_cct_LogEvent_fields), - PB_FIELD( 4, INT64 , OPTIONAL, STATIC , OTHER, gdt_cct_LogRequest, request_time_ms, log_event, 0), - PB_FIELD( 8, INT64 , OPTIONAL, STATIC , OTHER, gdt_cct_LogRequest, request_uptime_ms, request_time_ms, 0), - PB_FIELD( 9, UENUM , OPTIONAL, STATIC , OTHER, gdt_cct_LogRequest, qos_tier, request_uptime_ms, &gdt_cct_LogRequest_qos_tier_default), - PB_LAST_FIELD -}; - -const pb_field_t gdt_cct_QosTierConfiguration_fields[3] = { - PB_FIELD( 2, UENUM , OPTIONAL, STATIC , FIRST, gdt_cct_QosTierConfiguration, qos_tier, qos_tier, 0), - PB_FIELD( 3, INT32 , OPTIONAL, STATIC , OTHER, gdt_cct_QosTierConfiguration, log_source, qos_tier, &gdt_cct_QosTierConfiguration_log_source_default), - PB_LAST_FIELD -}; - -const pb_field_t gdt_cct_QosTiersOverride_fields[3] = { - PB_FIELD( 1, MESSAGE , REPEATED, POINTER , FIRST, gdt_cct_QosTiersOverride, qos_tier_configuration, qos_tier_configuration, &gdt_cct_QosTierConfiguration_fields), - PB_FIELD( 2, INT64 , OPTIONAL, STATIC , OTHER, gdt_cct_QosTiersOverride, qos_tier_fingerprint, qos_tier_configuration, 0), - PB_LAST_FIELD -}; - -const pb_field_t gdt_cct_LogResponse_fields[3] = { - PB_FIELD( 1, INT64 , OPTIONAL, STATIC , FIRST, gdt_cct_LogResponse, next_request_wait_millis, next_request_wait_millis, 0), - PB_FIELD( 3, MESSAGE , OPTIONAL, STATIC , OTHER, gdt_cct_LogResponse, qos_tier, next_request_wait_millis, &gdt_cct_QosTiersOverride_fields), - PB_LAST_FIELD -}; - - - - - - -/* Check that field information fits in pb_field_t */ -#if !defined(PB_FIELD_32BIT) -/* If you get an error here, it means that you need to define PB_FIELD_32BIT - * compile-time option. You can do that in pb.h or on compiler command line. - * - * The reason you need to do this is that some of your messages contain tag - * numbers or field sizes that are larger than what can fit in 8 or 16 bit - * field descriptors. - */ -PB_STATIC_ASSERT((pb_membersize(gdt_cct_LogEvent, network_connection_info) < 65536 && pb_membersize(gdt_cct_ClientInfo, ios_client_info) < 65536 && pb_membersize(gdt_cct_LogRequest, client_info) < 65536 && pb_membersize(gdt_cct_LogResponse, qos_tier) < 65536), YOU_MUST_DEFINE_PB_FIELD_32BIT_FOR_MESSAGES_gdt_cct_LogEvent_gdt_cct_NetworkConnectionInfo_gdt_cct_IosClientInfo_gdt_cct_ClientInfo_gdt_cct_BatchedLogRequest_gdt_cct_LogRequest_gdt_cct_QosTierConfiguration_gdt_cct_QosTiersOverride_gdt_cct_LogResponse) -#endif - -#if !defined(PB_FIELD_16BIT) && !defined(PB_FIELD_32BIT) -/* If you get an error here, it means that you need to define PB_FIELD_16BIT - * compile-time option. You can do that in pb.h or on compiler command line. - * - * The reason you need to do this is that some of your messages contain tag - * numbers or field sizes that are larger than what can fit in the default - * 8 bit descriptors. - */ -PB_STATIC_ASSERT((pb_membersize(gdt_cct_LogEvent, network_connection_info) < 256 && pb_membersize(gdt_cct_ClientInfo, ios_client_info) < 256 && pb_membersize(gdt_cct_LogRequest, client_info) < 256 && pb_membersize(gdt_cct_LogResponse, qos_tier) < 256), YOU_MUST_DEFINE_PB_FIELD_16BIT_FOR_MESSAGES_gdt_cct_LogEvent_gdt_cct_NetworkConnectionInfo_gdt_cct_IosClientInfo_gdt_cct_ClientInfo_gdt_cct_BatchedLogRequest_gdt_cct_LogRequest_gdt_cct_QosTierConfiguration_gdt_cct_QosTiersOverride_gdt_cct_LogResponse) -#endif - - -/* @@protoc_insertion_point(eof) */ diff --git a/iphone/Maps/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Protogen/nanopb/cct.nanopb.h b/iphone/Maps/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Protogen/nanopb/cct.nanopb.h deleted file mode 100644 index e9d9a12c90..0000000000 --- a/iphone/Maps/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Protogen/nanopb/cct.nanopb.h +++ /dev/null @@ -1,281 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* Automatically generated nanopb header */ -/* Generated by nanopb-0.3.9.5 */ - -#ifndef PB_GDT_CCT_CCT_NANOPB_H_INCLUDED -#define PB_GDT_CCT_CCT_NANOPB_H_INCLUDED -#include - -/* @@protoc_insertion_point(includes) */ -#if PB_PROTO_HEADER_VERSION != 30 -#error Regenerate this file with the current version of nanopb generator. -#endif - - -/* Enum definitions */ -typedef enum _gdt_cct_NetworkConnectionInfo_NetworkType { - gdt_cct_NetworkConnectionInfo_NetworkType_NONE = -1, - gdt_cct_NetworkConnectionInfo_NetworkType_MOBILE = 0, - gdt_cct_NetworkConnectionInfo_NetworkType_WIFI = 1, - gdt_cct_NetworkConnectionInfo_NetworkType_MOBILE_MMS = 2, - gdt_cct_NetworkConnectionInfo_NetworkType_MOBILE_SUPL = 3, - gdt_cct_NetworkConnectionInfo_NetworkType_MOBILE_DUN = 4, - gdt_cct_NetworkConnectionInfo_NetworkType_MOBILE_HIPRI = 5, - gdt_cct_NetworkConnectionInfo_NetworkType_WIMAX = 6, - gdt_cct_NetworkConnectionInfo_NetworkType_BLUETOOTH = 7, - gdt_cct_NetworkConnectionInfo_NetworkType_DUMMY = 8, - gdt_cct_NetworkConnectionInfo_NetworkType_ETHERNET = 9, - gdt_cct_NetworkConnectionInfo_NetworkType_MOBILE_FOTA = 10, - gdt_cct_NetworkConnectionInfo_NetworkType_MOBILE_IMS = 11, - gdt_cct_NetworkConnectionInfo_NetworkType_MOBILE_CBS = 12, - gdt_cct_NetworkConnectionInfo_NetworkType_WIFI_P2P = 13, - gdt_cct_NetworkConnectionInfo_NetworkType_MOBILE_IA = 14, - gdt_cct_NetworkConnectionInfo_NetworkType_MOBILE_EMERGENCY = 15, - gdt_cct_NetworkConnectionInfo_NetworkType_PROXY = 16, - gdt_cct_NetworkConnectionInfo_NetworkType_VPN = 17 -} gdt_cct_NetworkConnectionInfo_NetworkType; -#define _gdt_cct_NetworkConnectionInfo_NetworkType_MIN gdt_cct_NetworkConnectionInfo_NetworkType_NONE -#define _gdt_cct_NetworkConnectionInfo_NetworkType_MAX gdt_cct_NetworkConnectionInfo_NetworkType_VPN -#define _gdt_cct_NetworkConnectionInfo_NetworkType_ARRAYSIZE ((gdt_cct_NetworkConnectionInfo_NetworkType)(gdt_cct_NetworkConnectionInfo_NetworkType_VPN+1)) - -typedef enum _gdt_cct_NetworkConnectionInfo_MobileSubtype { - gdt_cct_NetworkConnectionInfo_MobileSubtype_UNKNOWN_MOBILE_SUBTYPE = 0, - gdt_cct_NetworkConnectionInfo_MobileSubtype_GPRS = 1, - gdt_cct_NetworkConnectionInfo_MobileSubtype_EDGE = 2, - gdt_cct_NetworkConnectionInfo_MobileSubtype_UMTS = 3, - gdt_cct_NetworkConnectionInfo_MobileSubtype_CDMA = 4, - gdt_cct_NetworkConnectionInfo_MobileSubtype_EVDO_0 = 5, - gdt_cct_NetworkConnectionInfo_MobileSubtype_EVDO_A = 6, - gdt_cct_NetworkConnectionInfo_MobileSubtype_RTT = 7, - gdt_cct_NetworkConnectionInfo_MobileSubtype_HSDPA = 8, - gdt_cct_NetworkConnectionInfo_MobileSubtype_HSUPA = 9, - gdt_cct_NetworkConnectionInfo_MobileSubtype_HSPA = 10, - gdt_cct_NetworkConnectionInfo_MobileSubtype_IDEN = 11, - gdt_cct_NetworkConnectionInfo_MobileSubtype_EVDO_B = 12, - gdt_cct_NetworkConnectionInfo_MobileSubtype_LTE = 13, - gdt_cct_NetworkConnectionInfo_MobileSubtype_EHRPD = 14, - gdt_cct_NetworkConnectionInfo_MobileSubtype_HSPAP = 15, - gdt_cct_NetworkConnectionInfo_MobileSubtype_GSM = 16, - gdt_cct_NetworkConnectionInfo_MobileSubtype_TD_SCDMA = 17, - gdt_cct_NetworkConnectionInfo_MobileSubtype_IWLAN = 18, - gdt_cct_NetworkConnectionInfo_MobileSubtype_LTE_CA = 19, - gdt_cct_NetworkConnectionInfo_MobileSubtype_COMBINED = 100 -} gdt_cct_NetworkConnectionInfo_MobileSubtype; -#define _gdt_cct_NetworkConnectionInfo_MobileSubtype_MIN gdt_cct_NetworkConnectionInfo_MobileSubtype_UNKNOWN_MOBILE_SUBTYPE -#define _gdt_cct_NetworkConnectionInfo_MobileSubtype_MAX gdt_cct_NetworkConnectionInfo_MobileSubtype_COMBINED -#define _gdt_cct_NetworkConnectionInfo_MobileSubtype_ARRAYSIZE ((gdt_cct_NetworkConnectionInfo_MobileSubtype)(gdt_cct_NetworkConnectionInfo_MobileSubtype_COMBINED+1)) - -typedef enum _gdt_cct_ClientInfo_ClientType { - gdt_cct_ClientInfo_ClientType_CLIENT_UNKNOWN = 0, - gdt_cct_ClientInfo_ClientType_IOS_FIREBASE = 15 -} gdt_cct_ClientInfo_ClientType; -#define _gdt_cct_ClientInfo_ClientType_MIN gdt_cct_ClientInfo_ClientType_CLIENT_UNKNOWN -#define _gdt_cct_ClientInfo_ClientType_MAX gdt_cct_ClientInfo_ClientType_IOS_FIREBASE -#define _gdt_cct_ClientInfo_ClientType_ARRAYSIZE ((gdt_cct_ClientInfo_ClientType)(gdt_cct_ClientInfo_ClientType_IOS_FIREBASE+1)) - -typedef enum _gdt_cct_QosTierConfiguration_QosTier { - gdt_cct_QosTierConfiguration_QosTier_DEFAULT = 0, - gdt_cct_QosTierConfiguration_QosTier_UNMETERED_ONLY = 1, - gdt_cct_QosTierConfiguration_QosTier_UNMETERED_OR_DAILY = 2, - gdt_cct_QosTierConfiguration_QosTier_FAST_IF_RADIO_AWAKE = 3, - gdt_cct_QosTierConfiguration_QosTier_NEVER = 4 -} gdt_cct_QosTierConfiguration_QosTier; -#define _gdt_cct_QosTierConfiguration_QosTier_MIN gdt_cct_QosTierConfiguration_QosTier_DEFAULT -#define _gdt_cct_QosTierConfiguration_QosTier_MAX gdt_cct_QosTierConfiguration_QosTier_NEVER -#define _gdt_cct_QosTierConfiguration_QosTier_ARRAYSIZE ((gdt_cct_QosTierConfiguration_QosTier)(gdt_cct_QosTierConfiguration_QosTier_NEVER+1)) - -/* Struct definitions */ -typedef struct _gdt_cct_BatchedLogRequest { - pb_size_t log_request_count; - struct _gdt_cct_LogRequest *log_request; -/* @@protoc_insertion_point(struct:gdt_cct_BatchedLogRequest) */ -} gdt_cct_BatchedLogRequest; - -typedef struct _gdt_cct_IosClientInfo { - pb_bytes_array_t *os_major_version; - pb_bytes_array_t *os_full_version; - pb_bytes_array_t *application_build; - pb_bytes_array_t *country; - pb_bytes_array_t *model; - pb_bytes_array_t *language_code; - pb_bytes_array_t *application_bundle_id; -/* @@protoc_insertion_point(struct:gdt_cct_IosClientInfo) */ -} gdt_cct_IosClientInfo; - -typedef struct _gdt_cct_ClientInfo { - bool has_client_type; - gdt_cct_ClientInfo_ClientType client_type; - bool has_ios_client_info; - gdt_cct_IosClientInfo ios_client_info; -/* @@protoc_insertion_point(struct:gdt_cct_ClientInfo) */ -} gdt_cct_ClientInfo; - -typedef struct _gdt_cct_NetworkConnectionInfo { - bool has_network_type; - gdt_cct_NetworkConnectionInfo_NetworkType network_type; - bool has_mobile_subtype; - gdt_cct_NetworkConnectionInfo_MobileSubtype mobile_subtype; -/* @@protoc_insertion_point(struct:gdt_cct_NetworkConnectionInfo) */ -} gdt_cct_NetworkConnectionInfo; - -typedef struct _gdt_cct_QosTierConfiguration { - bool has_qos_tier; - gdt_cct_QosTierConfiguration_QosTier qos_tier; - bool has_log_source; - int32_t log_source; -/* @@protoc_insertion_point(struct:gdt_cct_QosTierConfiguration) */ -} gdt_cct_QosTierConfiguration; - -typedef struct _gdt_cct_QosTiersOverride { - pb_size_t qos_tier_configuration_count; - struct _gdt_cct_QosTierConfiguration *qos_tier_configuration; - bool has_qos_tier_fingerprint; - int64_t qos_tier_fingerprint; -/* @@protoc_insertion_point(struct:gdt_cct_QosTiersOverride) */ -} gdt_cct_QosTiersOverride; - -typedef struct _gdt_cct_LogEvent { - bool has_event_time_ms; - int64_t event_time_ms; - pb_bytes_array_t *source_extension; - bool has_event_code; - int32_t event_code; - bool has_timezone_offset_seconds; - int64_t timezone_offset_seconds; - bool has_event_uptime_ms; - int64_t event_uptime_ms; - bool has_network_connection_info; - gdt_cct_NetworkConnectionInfo network_connection_info; -/* @@protoc_insertion_point(struct:gdt_cct_LogEvent) */ -} gdt_cct_LogEvent; - -typedef struct _gdt_cct_LogRequest { - bool has_client_info; - gdt_cct_ClientInfo client_info; - bool has_log_source; - int32_t log_source; - pb_size_t log_event_count; - struct _gdt_cct_LogEvent *log_event; - bool has_request_time_ms; - int64_t request_time_ms; - bool has_request_uptime_ms; - int64_t request_uptime_ms; - bool has_qos_tier; - gdt_cct_QosTierConfiguration_QosTier qos_tier; -/* @@protoc_insertion_point(struct:gdt_cct_LogRequest) */ -} gdt_cct_LogRequest; - -typedef struct _gdt_cct_LogResponse { - bool has_next_request_wait_millis; - int64_t next_request_wait_millis; - bool has_qos_tier; - gdt_cct_QosTiersOverride qos_tier; -/* @@protoc_insertion_point(struct:gdt_cct_LogResponse) */ -} gdt_cct_LogResponse; - -/* Default values for struct fields */ -extern const gdt_cct_NetworkConnectionInfo_NetworkType gdt_cct_NetworkConnectionInfo_network_type_default; -extern const gdt_cct_NetworkConnectionInfo_MobileSubtype gdt_cct_NetworkConnectionInfo_mobile_subtype_default; -extern const gdt_cct_QosTierConfiguration_QosTier gdt_cct_LogRequest_qos_tier_default; -extern const int32_t gdt_cct_QosTierConfiguration_log_source_default; - -/* Initializer values for message structs */ -#define gdt_cct_LogEvent_init_default {false, 0, NULL, false, 0, false, 0, false, 0, false, gdt_cct_NetworkConnectionInfo_init_default} -#define gdt_cct_NetworkConnectionInfo_init_default {false, gdt_cct_NetworkConnectionInfo_NetworkType_NONE, false, gdt_cct_NetworkConnectionInfo_MobileSubtype_UNKNOWN_MOBILE_SUBTYPE} -#define gdt_cct_IosClientInfo_init_default {NULL, NULL, NULL, NULL, NULL, NULL, NULL} -#define gdt_cct_ClientInfo_init_default {false, _gdt_cct_ClientInfo_ClientType_MIN, false, gdt_cct_IosClientInfo_init_default} -#define gdt_cct_BatchedLogRequest_init_default {0, NULL} -#define gdt_cct_LogRequest_init_default {false, gdt_cct_ClientInfo_init_default, false, 0, 0, NULL, false, 0, false, 0, false, gdt_cct_QosTierConfiguration_QosTier_DEFAULT} -#define gdt_cct_QosTierConfiguration_init_default {false, _gdt_cct_QosTierConfiguration_QosTier_MIN, false, 0} -#define gdt_cct_QosTiersOverride_init_default {0, NULL, false, 0} -#define gdt_cct_LogResponse_init_default {false, 0, false, gdt_cct_QosTiersOverride_init_default} -#define gdt_cct_LogEvent_init_zero {false, 0, NULL, false, 0, false, 0, false, 0, false, gdt_cct_NetworkConnectionInfo_init_zero} -#define gdt_cct_NetworkConnectionInfo_init_zero {false, _gdt_cct_NetworkConnectionInfo_NetworkType_MIN, false, _gdt_cct_NetworkConnectionInfo_MobileSubtype_MIN} -#define gdt_cct_IosClientInfo_init_zero {NULL, NULL, NULL, NULL, NULL, NULL, NULL} -#define gdt_cct_ClientInfo_init_zero {false, _gdt_cct_ClientInfo_ClientType_MIN, false, gdt_cct_IosClientInfo_init_zero} -#define gdt_cct_BatchedLogRequest_init_zero {0, NULL} -#define gdt_cct_LogRequest_init_zero {false, gdt_cct_ClientInfo_init_zero, false, 0, 0, NULL, false, 0, false, 0, false, _gdt_cct_QosTierConfiguration_QosTier_MIN} -#define gdt_cct_QosTierConfiguration_init_zero {false, _gdt_cct_QosTierConfiguration_QosTier_MIN, false, 0} -#define gdt_cct_QosTiersOverride_init_zero {0, NULL, false, 0} -#define gdt_cct_LogResponse_init_zero {false, 0, false, gdt_cct_QosTiersOverride_init_zero} - -/* Field tags (for use in manual encoding/decoding) */ -#define gdt_cct_BatchedLogRequest_log_request_tag 1 -#define gdt_cct_IosClientInfo_os_major_version_tag 3 -#define gdt_cct_IosClientInfo_os_full_version_tag 4 -#define gdt_cct_IosClientInfo_application_build_tag 5 -#define gdt_cct_IosClientInfo_country_tag 6 -#define gdt_cct_IosClientInfo_model_tag 7 -#define gdt_cct_IosClientInfo_language_code_tag 8 -#define gdt_cct_IosClientInfo_application_bundle_id_tag 11 -#define gdt_cct_ClientInfo_client_type_tag 1 -#define gdt_cct_ClientInfo_ios_client_info_tag 4 -#define gdt_cct_NetworkConnectionInfo_network_type_tag 1 -#define gdt_cct_NetworkConnectionInfo_mobile_subtype_tag 2 -#define gdt_cct_QosTierConfiguration_qos_tier_tag 2 -#define gdt_cct_QosTierConfiguration_log_source_tag 3 -#define gdt_cct_QosTiersOverride_qos_tier_configuration_tag 1 -#define gdt_cct_QosTiersOverride_qos_tier_fingerprint_tag 2 -#define gdt_cct_LogEvent_event_time_ms_tag 1 -#define gdt_cct_LogEvent_event_code_tag 11 -#define gdt_cct_LogEvent_event_uptime_ms_tag 17 -#define gdt_cct_LogEvent_source_extension_tag 6 -#define gdt_cct_LogEvent_timezone_offset_seconds_tag 15 -#define gdt_cct_LogEvent_network_connection_info_tag 23 -#define gdt_cct_LogRequest_request_time_ms_tag 4 -#define gdt_cct_LogRequest_request_uptime_ms_tag 8 -#define gdt_cct_LogRequest_client_info_tag 1 -#define gdt_cct_LogRequest_log_source_tag 2 -#define gdt_cct_LogRequest_log_event_tag 3 -#define gdt_cct_LogRequest_qos_tier_tag 9 -#define gdt_cct_LogResponse_next_request_wait_millis_tag 1 -#define gdt_cct_LogResponse_qos_tier_tag 3 - -/* Struct field encoding specification for nanopb */ -extern const pb_field_t gdt_cct_LogEvent_fields[7]; -extern const pb_field_t gdt_cct_NetworkConnectionInfo_fields[3]; -extern const pb_field_t gdt_cct_IosClientInfo_fields[8]; -extern const pb_field_t gdt_cct_ClientInfo_fields[3]; -extern const pb_field_t gdt_cct_BatchedLogRequest_fields[2]; -extern const pb_field_t gdt_cct_LogRequest_fields[7]; -extern const pb_field_t gdt_cct_QosTierConfiguration_fields[3]; -extern const pb_field_t gdt_cct_QosTiersOverride_fields[3]; -extern const pb_field_t gdt_cct_LogResponse_fields[3]; - -/* Maximum encoded size of messages (where known) */ -/* gdt_cct_LogEvent_size depends on runtime parameters */ -#define gdt_cct_NetworkConnectionInfo_size 13 -/* gdt_cct_IosClientInfo_size depends on runtime parameters */ -/* gdt_cct_ClientInfo_size depends on runtime parameters */ -/* gdt_cct_BatchedLogRequest_size depends on runtime parameters */ -/* gdt_cct_LogRequest_size depends on runtime parameters */ -#define gdt_cct_QosTierConfiguration_size 13 -/* gdt_cct_QosTiersOverride_size depends on runtime parameters */ -/* gdt_cct_LogResponse_size depends on runtime parameters */ - -/* Message IDs (where set with "msgid" option) */ -#ifdef PB_MSGID - -#define CCT_MESSAGES \ - - -#endif - -/* @@protoc_insertion_point(eof) */ - -#endif diff --git a/iphone/Maps/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Public/GDTCOREvent+GDTCCTSupport.h b/iphone/Maps/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Public/GDTCOREvent+GDTCCTSupport.h deleted file mode 100644 index e3a0b0ce4a..0000000000 --- a/iphone/Maps/Pods/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport/GDTCCTLibrary/Public/GDTCOREvent+GDTCCTSupport.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright 2020 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** A string sets in customBytes as a key paired to @YES if current event needs to - * populate network connection info data, @NO otherwise. - */ -FOUNDATION_EXPORT NSString *const GDTCCTNeedsNetworkConnectionInfo; - -/** A string sets in customBytes as a key paired to the network connection info data - * of current event. - */ -FOUNDATION_EXPORT NSString *const GDTCCTNetworkConnectionInfo; - -/** A category that uses the customBytes property of a GDTCOREvent to store network connection info. - */ -@interface GDTCOREvent (GDTCCTSupport) - -/** If YES, needs the network connection info field set during prioritization. - * @note Uses the GDTCOREvent customBytes property. - */ -@property(nonatomic) BOOL needsNetworkConnectionInfoPopulated; - -/** The network connection info as collected at the time of the event. - * @note Uses the GDTCOREvent customBytes property. - */ -@property(nullable, nonatomic) NSData *networkConnectionInfoData; - -/** Code that identifies the event to be sent to the CCT backend. - */ -@property(nullable, nonatomic) NSNumber *eventCode; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/GoogleDataTransportCCTSupport/LICENSE b/iphone/Maps/Pods/GoogleDataTransportCCTSupport/LICENSE deleted file mode 100644 index d645695673..0000000000 --- a/iphone/Maps/Pods/GoogleDataTransportCCTSupport/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/iphone/Maps/Pods/GoogleDataTransportCCTSupport/README.md b/iphone/Maps/Pods/GoogleDataTransportCCTSupport/README.md deleted file mode 100644 index d778205ffa..0000000000 --- a/iphone/Maps/Pods/GoogleDataTransportCCTSupport/README.md +++ /dev/null @@ -1,311 +0,0 @@ -[![Version](https://img.shields.io/cocoapods/v/Firebase.svg?style=flat)](https://cocoapods.org/pods/Firebase) -[![License](https://img.shields.io/cocoapods/l/Firebase.svg?style=flat)](https://cocoapods.org/pods/Firebase) -[![Platform](https://img.shields.io/cocoapods/p/Firebase.svg?style=flat)](https://cocoapods.org/pods/Firebase) - -[![Actions Status][gh-abtesting-badge]][gh-actions] -[![Actions Status][gh-auth-badge]][gh-actions] -[![Actions Status][gh-core-badge]][gh-actions] -[![Actions Status][gh-crashlytics-badge]][gh-actions] -[![Actions Status][gh-database-badge]][gh-actions] -[![Actions Status][gh-datatransport-badge]][gh-actions] -[![Actions Status][gh-dynamiclinks-badge]][gh-actions] -[![Actions Status][gh-firebasepod-badge]][gh-actions] -[![Actions Status][gh-firestore-badge]][gh-actions] -[![Actions Status][gh-functions-badge]][gh-actions] -[![Actions Status][gh-inappmessaging-badge]][gh-actions] -[![Actions Status][gh-interop-badge]][gh-actions] -[![Actions Status][gh-messaging-badge]][gh-actions] -[![Actions Status][gh-remoteconfig-badge]][gh-actions] -[![Actions Status][gh-storage-badge]][gh-actions] -[![Actions Status][gh-symbolcollision-badge]][gh-actions] -[![Actions Status][gh-zip-badge]][gh-actions] -[![Travis](https://travis-ci.org/firebase/firebase-ios-sdk.svg?branch=master)](https://travis-ci.org/firebase/firebase-ios-sdk) - -# Firebase Apple Open Source Development - -This repository contains all Apple platform Firebase SDK source except FirebaseAnalytics, -FirebasePerformance, and FirebaseML. - -The repository also includes GoogleUtilities source. The -[GoogleUtilities](GoogleUtilities/README.md) pod is -a set of utilities used by Firebase and other Google products. - -Firebase is an app development platform with tools to help you build, grow and -monetize your app. More information about Firebase can be found at -[https://firebase.google.com](https://firebase.google.com). - -## Installation - -See the three subsections for details about three different installation methods. -1. [Standard pod install](README.md#standard-pod-install) -1. [Installing from the GitHub repo](README.md#installing-from-github) -1. [Experimental Carthage](README.md#carthage-ios-only) - -### Standard pod install - -Go to -[https://firebase.google.com/docs/ios/setup](https://firebase.google.com/docs/ios/setup). - -### Installing from GitHub - -For releases starting with 5.0.0, the source for each release is also deployed -to CocoaPods master and available via standard -[CocoaPods Podfile syntax](https://guides.cocoapods.org/syntax/podfile.html#pod). - -These instructions can be used to access the Firebase repo at other branches, -tags, or commits. - -#### Background - -See -[the Podfile Syntax Reference](https://guides.cocoapods.org/syntax/podfile.html#pod) -for instructions and options about overriding pod source locations. - -#### Accessing Firebase Source Snapshots - -All of the official releases are tagged in this repo and available via CocoaPods. To access a local -source snapshot or unreleased branch, use Podfile directives like the following: - -To access FirebaseFirestore via a branch: -``` -pod 'FirebaseCore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master' -pod 'FirebaseFirestore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master' -``` - -To access FirebaseMessaging via a checked out version of the firebase-ios-sdk repo do: - -``` -pod 'FirebaseCore', :path => '/path/to/firebase-ios-sdk' -pod 'FirebaseMessaging', :path => '/path/to/firebase-ios-sdk' -``` - -### Carthage (iOS only) - -Instructions for the experimental Carthage distribution are at -[Carthage](Carthage.md). - -### Rome - -Instructions for installing binary frameworks via -[Rome](https://github.com/CocoaPods/Rome) are at [Rome](Rome.md). - -### Using Firebase from a Framework or a library - -[Using Firebase from a Framework or a library](docs/firebase_in_libraries.md) - -## Development - -To develop Firebase software in this repository, ensure that you have at least -the following software: - - * Xcode 10.3 (or later) - * CocoaPods 1.7.2 (or later) - * [CocoaPods generate](https://github.com/square/cocoapods-generate) - -For the pod that you want to develop: - -`pod gen Firebase{name here}.podspec --local-sources=./ --auto-open --platforms=ios` - -Note: If the CocoaPods cache is out of date, you may need to run -`pod repo update` before the `pod gen` command. - -Note: Set the `--platforms` option to `macos` or `tvos` to develop/test for -those platforms. Since 10.2, Xcode does not properly handle multi-platform -CocoaPods workspaces. - -Firestore has a self contained Xcode project. See -[Firestore/README.md](Firestore/README.md). - -### Development for Catalyst -* `pod gen {name here}.podspec --local-sources=./ --auto-open --platforms=ios` -* Check the Mac box in the App-iOS Build Settings -* Sign the App in the Settings Signing & Capabilities tab -* Click Pods in the Project Manager -* Add Signing to the iOS host app and unit test targets -* Select the Unit-unit scheme -* Run it to build and test - -### Adding a New Firebase Pod - -See [AddNewPod.md](AddNewPod.md). - -### Managing Headers and Imports - -See [HeadersImports.md](HeadersImports.md). - -### Code Formatting - -To ensure that the code is formatted consistently, run the script -[./scripts/style.sh](https://github.com/firebase/firebase-ios-sdk/blob/master/scripts/style.sh) -before creating a PR. - -Travis will verify that any code changes are done in a style compliant way. Install -`clang-format` and `swiftformat`. -These commands will get the right versions: - -``` -brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/c6f1cbd/Formula/clang-format.rb -brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/c13eda8/Formula/swiftformat.rb -``` - -Note: if you already have a newer version of these installed you may need to -`brew switch` to this version. - -To update this section, find the versions of clang-format and swiftformat.rb to -match the versions in the CI failure logs -[here](https://github.com/Homebrew/homebrew-core/tree/master/Formula). - -### Running Unit Tests - -Select a scheme and press Command-u to build a component and run its unit tests. - -#### Viewing Code Coverage (Deprecated) - -First, make sure that [xcov](https://github.com/nakiostudio/xcov) is installed with `gem install xcov`. - -After running the `AllUnitTests_iOS` scheme in Xcode, execute -`xcov --workspace Firebase.xcworkspace --scheme AllUnitTests_iOS --output_directory xcov_output` -at Example/ in the terminal. This will aggregate the coverage, and you can run `open xcov_output/index.html` to see the results. - -### Running Sample Apps -In order to run the sample apps and integration tests, you'll need valid -`GoogleService-Info.plist` files for those samples. The Firebase Xcode project contains dummy plist -files without real values, but can be replaced with real plist files. To get your own -`GoogleService-Info.plist` files: - -1. Go to the [Firebase Console](https://console.firebase.google.com/) -2. Create a new Firebase project, if you don't already have one -3. For each sample app you want to test, create a new Firebase app with the sample app's bundle -identifier (e.g. `com.google.Database-Example`) -4. Download the resulting `GoogleService-Info.plist` and replace the appropriate dummy plist file -(e.g. in [Example/Database/App/](Example/Database/App/)); - -Some sample apps like Firebase Messaging ([Example/Messaging/App](Example/Messaging/App)) require -special Apple capabilities, and you will have to change the sample app to use a unique bundle -identifier that you can control in your own Apple Developer account. - -## Specific Component Instructions -See the sections below for any special instructions for those components. - -### Firebase Auth - -If you're doing specific Firebase Auth development, see -[the Auth Sample README](FirebaseAuth/Tests/Sample/README.md) for instructions about -building and running the FirebaseAuth pod along with various samples and tests. - -### Firebase Database - -The Firebase Database Integration tests can be run against a locally running Database Emulator -or against a production instance. - -To run against a local emulator instance, invoke `./scripts/run_database_emulator.sh start` before -running the integration test. - -To run against a production instance, provide a valid GoogleServices-Info.plist and copy it to -`Example/Database/App/GoogleService-Info.plist`. Your Security Rule must be set to -[public](https://firebase.google.com/docs/database/security/quickstart) while your tests are -running. - -### Firebase Storage - -To run the Storage Integration tests, follow the instructions in -[FIRStorageIntegrationTests.m](FirebaseStorage/Tests/Integration/FIRStorageIntegrationTests.m). - -#### Push Notifications - -Push notifications can only be delivered to specially provisioned App IDs in the developer portal. -In order to actually test receiving push notifications, you will need to: - -1. Change the bundle identifier of the sample app to something you own in your Apple Developer -account, and enable that App ID for push notifications. -2. You'll also need to -[upload your APNs Provider Authentication Key or certificate to the Firebase Console](https://firebase.google.com/docs/cloud-messaging/ios/certs) -at **Project Settings > Cloud Messaging > [Your Firebase App]**. -3. Ensure your iOS device is added to your Apple Developer portal as a test device. - -#### iOS Simulator - -The iOS Simulator cannot register for remote notifications, and will not receive push notifications. -In order to receive push notifications, you'll have to follow the steps above and run the app on a -physical device. - -## Community Supported Efforts - -We've seen an amazing amount of interest and contributions to improve the Firebase SDKs, and we are -very grateful! We'd like to empower as many developers as we can to be able to use Firebase and -participate in the Firebase community. - -### tvOS, macOS, watchOS and Catalyst -Thanks to contributions from the community, many of Firebase SDKs now compile, run unit tests, and work on -tvOS, macOS, watchOS and Catalyst. - -For tvOS, checkout the [Sample](Example/tvOSSample). -For watchOS, currently only Messaging and Storage (and their dependencies) have limited support. Checkout the -[Independent Watch App Sample](Example/watchOSSample). - -Keep in mind that macOS, tvOS, watchOS and Catalyst are not officially supported by Firebase, and this -repository is actively developed primarily for iOS. While we can catch basic unit test issues with -Travis, there may be some changes where the SDK no longer works as expected on macOS, tvOS or watchOS. If you -encounter this, please [file an issue](https://github.com/firebase/firebase-ios-sdk/issues). - -During app setup in the console, you may get to a step that mentions something like "Checking if the app -has communicated with our servers". This relies on Analytics and will not work on macOS/tvOS/watchOS/Catalyst. -**It's safe to ignore the message and continue**, the rest of the SDKs will work as expected. - -To install, add a subset of the following to the Podfile: - -``` -pod 'Firebase/ABTesting' # No watchOS support yet -pod 'Firebase/Auth' # No watchOS support yet -pod 'Firebase/Crashlytics' # No watchOS support yet -pod 'Firebase/Database' # No watchOS support yet -pod 'Firebase/Firestore' # No watchOS support yet -pod 'Firebase/Functions' # No watchOS support yet -pod 'Firebase/Messaging' -pod 'Firebase/RemoteConfig' # No watchOS support yet -pod 'Firebase/Storage' -``` - -#### Additional Catalyst Notes - -* FirebaseAuth and FirebaseMessaging require adding `Keychain Sharing Capability` -to Build Settings. -* FirebaseFirestore requires signing the -[gRPC Resource target](https://github.com/firebase/firebase-ios-sdk/issues/3500#issuecomment-518741681). - -## Roadmap - -See [Roadmap](ROADMAP.md) for more about the Firebase iOS SDK Open Source -plans and directions. - -## Contributing - -See [Contributing](CONTRIBUTING.md) for more information on contributing to the Firebase -iOS SDK. - -## License - -The contents of this repository is licensed under the -[Apache License, version 2.0](http://www.apache.org/licenses/LICENSE-2.0). - -Your use of Firebase is governed by the -[Terms of Service for Firebase Services](https://firebase.google.com/terms/). - -[gh-actions]: https://github.com/firebase/firebase-ios-sdk/actions -[gh-abtesting-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/abtesting/badge.svg -[gh-auth-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/auth/badge.svg -[gh-core-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/core/badge.svg -[gh-crashlytics-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/crashlytics/badge.svg -[gh-database-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/database/badge.svg -[gh-datatransport-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/datatransport/badge.svg -[gh-dynamiclinks-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/dynamiclinks/badge.svg -[gh-firebasepod-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/firebasepod/badge.svg -[gh-firestore-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/firestore/badge.svg -[gh-functions-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/functions/badge.svg -[gh-inappmessaging-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/inappmessaging/badge.svg -[gh-interop-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/interop/badge.svg -[gh-messaging-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/messaging/badge.svg -[gh-remoteconfig-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/remoteconfig/badge.svg -[gh-storage-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/storage/badge.svg -[gh-symbolcollision-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/symbolcollision/badge.svg -[gh-zip-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/zip/badge.svg diff --git a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/AppDelegateSwizzler/GULAppDelegateSwizzler.m b/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/AppDelegateSwizzler/GULAppDelegateSwizzler.m deleted file mode 100644 index ca551aca21..0000000000 --- a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/AppDelegateSwizzler/GULAppDelegateSwizzler.m +++ /dev/null @@ -1,1021 +0,0 @@ -// Copyright 2018 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import - -#import "GoogleUtilities/AppDelegateSwizzler/Internal/GULAppDelegateSwizzler_Private.h" -#import "GoogleUtilities/AppDelegateSwizzler/Private/GULAppDelegateSwizzler.h" -#import "GoogleUtilities/Common/GULLoggerCodes.h" -#import "GoogleUtilities/Environment/Private/GULAppEnvironmentUtil.h" -#import "GoogleUtilities/Logger/Private/GULLogger.h" -#import "GoogleUtilities/Network/Private/GULMutableDictionary.h" - -#import - -// Implementations need to be typed before calling the implementation directly to cast the -// arguments and the return types correctly. Otherwise, it will crash the app. -typedef BOOL (*GULRealOpenURLSourceApplicationAnnotationIMP)( - id, SEL, GULApplication *, NSURL *, NSString *, id); - -typedef BOOL (*GULRealOpenURLOptionsIMP)( - id, SEL, GULApplication *, NSURL *, NSDictionary *); - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wstrict-prototypes" -typedef void (*GULRealHandleEventsForBackgroundURLSessionIMP)( - id, SEL, GULApplication *, NSString *, void (^)()); -#pragma clang diagnostic pop - -typedef BOOL (*GULRealContinueUserActivityIMP)( - id, SEL, GULApplication *, NSUserActivity *, void (^)(NSArray *restorableObjects)); - -typedef void (*GULRealDidRegisterForRemoteNotificationsIMP)(id, SEL, GULApplication *, NSData *); - -typedef void (*GULRealDidFailToRegisterForRemoteNotificationsIMP)(id, - SEL, - GULApplication *, - NSError *); - -typedef void (*GULRealDidReceiveRemoteNotificationIMP)(id, SEL, GULApplication *, NSDictionary *); - -#if !TARGET_OS_WATCH && !TARGET_OS_OSX -typedef void (*GULRealDidReceiveRemoteNotificationWithCompletionIMP)( - id, SEL, GULApplication *, NSDictionary *, void (^)(UIBackgroundFetchResult)); -#endif // !TARGET_OS_WATCH && !TARGET_OS_OSX - -typedef void (^GULAppDelegateInterceptorCallback)(id); - -// The strings below are the keys for associated objects. -static char const *const kGULRealIMPBySelectorKey = "GUL_realIMPBySelector"; -static char const *const kGULRealClassKey = "GUL_realClass"; - -static NSString *const kGULAppDelegateKeyPath = @"delegate"; - -static GULLoggerService kGULLoggerSwizzler = @"[GoogleUtilities/AppDelegateSwizzler]"; - -// Since Firebase SDKs also use this for app delegate proxying, in order to not be a breaking change -// we disable App Delegate proxying when either of these two flags are set to NO. - -/** Plist key that allows Firebase developers to disable App and Scene Delegate Proxying. */ -static NSString *const kGULFirebaseAppDelegateProxyEnabledPlistKey = - @"FirebaseAppDelegateProxyEnabled"; - -/** Plist key that allows developers not using Firebase to disable App and Scene Delegate Proxying. - */ -static NSString *const kGULGoogleUtilitiesAppDelegateProxyEnabledPlistKey = - @"GoogleUtilitiesAppDelegateProxyEnabled"; - -/** The prefix of the App Delegate. */ -static NSString *const kGULAppDelegatePrefix = @"GUL_"; - -/** The original instance of App Delegate. */ -static id gOriginalAppDelegate; - -/** The original App Delegate class */ -static Class gOriginalAppDelegateClass; - -/** The subclass of the original App Delegate. */ -static Class gAppDelegateSubclass; - -/** Remote notification methods selectors - * - * We have to opt out of referencing APNS related App Delegate methods directly to prevent - * an Apple review warning email about missing Push Notification Entitlement - * (like here: https://github.com/firebase/firebase-ios-sdk/issues/2807). From our experience, the - * warning is triggered when any of the symbols is present in the application sent to review, even - * if the code is never executed. Because GULAppDelegateSwizzler may be used by applications that - * are not using APNS we have to refer to the methods indirectly using selector constructed from - * string. - * - * NOTE: None of the methods is proxied unless it is explicitly requested by calling the method - * +[GULAppDelegateSwizzler proxyOriginalDelegateIncludingAPNSMethods] - */ -static NSString *const kGULDidRegisterForRemoteNotificationsSEL = - @"application:didRegisterForRemoteNotificationsWithDeviceToken:"; -static NSString *const kGULDidFailToRegisterForRemoteNotificationsSEL = - @"application:didFailToRegisterForRemoteNotificationsWithError:"; -static NSString *const kGULDidReceiveRemoteNotificationSEL = - @"application:didReceiveRemoteNotification:"; -static NSString *const kGULDidReceiveRemoteNotificationWithCompletionSEL = - @"application:didReceiveRemoteNotification:fetchCompletionHandler:"; - -/** - * This class is necessary to store the delegates in an NSArray without retaining them. - * [NSValue valueWithNonRetainedObject] also provides this functionality, but does not provide a - * zeroing pointer. This will cause EXC_BAD_ACCESS when trying to access the object after it is - * dealloced. Instead, this container stores a weak, zeroing reference to the object, which - * automatically is set to nil by the runtime when the object is dealloced. - */ -@interface GULZeroingWeakContainer : NSObject - -/** Stores a weak object. */ -@property(nonatomic, weak) id object; - -@end - -@implementation GULZeroingWeakContainer -@end - -@interface GULAppDelegateObserver : NSObject -@end - -@implementation GULAppDelegateObserver { - BOOL _isObserving; -} - -+ (GULAppDelegateObserver *)sharedInstance { - static GULAppDelegateObserver *instance; - static dispatch_once_t once; - dispatch_once(&once, ^{ - instance = [[GULAppDelegateObserver alloc] init]; - }); - return instance; -} - -- (void)observeUIApplication { - if (_isObserving) { - return; - } - [[GULAppDelegateSwizzler sharedApplication] - addObserver:self - forKeyPath:kGULAppDelegateKeyPath - options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld - context:nil]; - _isObserving = YES; -} - -- (void)observeValueForKeyPath:(NSString *)keyPath - ofObject:(id)object - change:(NSDictionary *)change - context:(void *)context { - if ([keyPath isEqual:kGULAppDelegateKeyPath]) { - id newValue = change[NSKeyValueChangeNewKey]; - id oldValue = change[NSKeyValueChangeOldKey]; - if ([newValue isEqual:oldValue]) { - return; - } - // Free the stored app delegate instance because it has been changed to a different instance to - // avoid keeping it alive forever. - if ([oldValue isEqual:gOriginalAppDelegate]) { - gOriginalAppDelegate = nil; - // Remove the observer. Parse it to NSObject to avoid warning. - [[GULAppDelegateSwizzler sharedApplication] removeObserver:self - forKeyPath:kGULAppDelegateKeyPath]; - _isObserving = NO; - } - } -} - -@end - -@implementation GULAppDelegateSwizzler - -static dispatch_once_t sProxyAppDelegateOnceToken; -static dispatch_once_t sProxyAppDelegateRemoteNotificationOnceToken; - -#pragma mark - Public methods - -+ (BOOL)isAppDelegateProxyEnabled { - NSDictionary *infoDictionary = [NSBundle mainBundle].infoDictionary; - - id isFirebaseProxyEnabledPlistValue = infoDictionary[kGULFirebaseAppDelegateProxyEnabledPlistKey]; - id isGoogleProxyEnabledPlistValue = - infoDictionary[kGULGoogleUtilitiesAppDelegateProxyEnabledPlistKey]; - - // Enabled by default. - BOOL isFirebaseAppDelegateProxyEnabled = YES; - BOOL isGoogleUtilitiesAppDelegateProxyEnabled = YES; - - if ([isFirebaseProxyEnabledPlistValue isKindOfClass:[NSNumber class]]) { - isFirebaseAppDelegateProxyEnabled = [isFirebaseProxyEnabledPlistValue boolValue]; - } - - if ([isGoogleProxyEnabledPlistValue isKindOfClass:[NSNumber class]]) { - isGoogleUtilitiesAppDelegateProxyEnabled = [isGoogleProxyEnabledPlistValue boolValue]; - } - - // Only deactivate the proxy if it is explicitly disabled by app developers using either one of - // the plist flags. - return isFirebaseAppDelegateProxyEnabled && isGoogleUtilitiesAppDelegateProxyEnabled; -} - -+ (GULAppDelegateInterceptorID)registerAppDelegateInterceptor: - (id)interceptor { - NSAssert(interceptor, @"AppDelegateProxy cannot add nil interceptor"); - NSAssert([interceptor conformsToProtocol:@protocol(GULApplicationDelegate)], - @"AppDelegateProxy interceptor does not conform to UIApplicationDelegate"); - - if (!interceptor) { - GULLogError(kGULLoggerSwizzler, NO, - [NSString stringWithFormat:@"I-SWZ%06ld", - (long)kGULSwizzlerMessageCodeAppDelegateSwizzling000], - @"AppDelegateProxy cannot add nil interceptor."); - return nil; - } - if (![interceptor conformsToProtocol:@protocol(GULApplicationDelegate)]) { - GULLogError(kGULLoggerSwizzler, NO, - [NSString stringWithFormat:@"I-SWZ%06ld", - (long)kGULSwizzlerMessageCodeAppDelegateSwizzling001], - @"AppDelegateProxy interceptor does not conform to UIApplicationDelegate"); - return nil; - } - - // The ID should be the same given the same interceptor object. - NSString *interceptorID = [NSString stringWithFormat:@"%@%p", kGULAppDelegatePrefix, interceptor]; - if (!interceptorID.length) { - GULLogError(kGULLoggerSwizzler, NO, - [NSString stringWithFormat:@"I-SWZ%06ld", - (long)kGULSwizzlerMessageCodeAppDelegateSwizzling002], - @"AppDelegateProxy cannot create Interceptor ID."); - return nil; - } - GULZeroingWeakContainer *weakObject = [[GULZeroingWeakContainer alloc] init]; - weakObject.object = interceptor; - [GULAppDelegateSwizzler interceptors][interceptorID] = weakObject; - return interceptorID; -} - -+ (void)unregisterAppDelegateInterceptorWithID:(GULAppDelegateInterceptorID)interceptorID { - NSAssert(interceptorID, @"AppDelegateProxy cannot unregister nil interceptor ID."); - NSAssert(((NSString *)interceptorID).length != 0, - @"AppDelegateProxy cannot unregister empty interceptor ID."); - - if (!interceptorID) { - GULLogError(kGULLoggerSwizzler, NO, - [NSString stringWithFormat:@"I-SWZ%06ld", - (long)kGULSwizzlerMessageCodeAppDelegateSwizzling003], - @"AppDelegateProxy cannot unregister empty interceptor ID."); - return; - } - - GULZeroingWeakContainer *weakContainer = [GULAppDelegateSwizzler interceptors][interceptorID]; - if (!weakContainer.object) { - GULLogError(kGULLoggerSwizzler, NO, - [NSString stringWithFormat:@"I-SWZ%06ld", - (long)kGULSwizzlerMessageCodeAppDelegateSwizzling004], - @"AppDelegateProxy cannot unregister interceptor that was not registered. " - "Interceptor ID %@", - interceptorID); - return; - } - - [[GULAppDelegateSwizzler interceptors] removeObjectForKey:interceptorID]; -} - -+ (void)proxyOriginalDelegate { - if ([GULAppEnvironmentUtil isAppExtension]) { - return; - } - - dispatch_once(&sProxyAppDelegateOnceToken, ^{ - id originalDelegate = - [GULAppDelegateSwizzler sharedApplication].delegate; - [GULAppDelegateSwizzler proxyAppDelegate:originalDelegate]; - }); -} - -+ (void)proxyOriginalDelegateIncludingAPNSMethods { - if ([GULAppEnvironmentUtil isAppExtension]) { - return; - } - - [self proxyOriginalDelegate]; - - dispatch_once(&sProxyAppDelegateRemoteNotificationOnceToken, ^{ - id appDelegate = [GULAppDelegateSwizzler sharedApplication].delegate; - - NSMutableDictionary *realImplementationsBySelector = - [objc_getAssociatedObject(appDelegate, &kGULRealIMPBySelectorKey) mutableCopy]; - - [self proxyRemoteNotificationsMethodsWithAppDelegateSubClass:gAppDelegateSubclass - realClass:gOriginalAppDelegateClass - appDelegate:appDelegate - realImplementationsBySelector:realImplementationsBySelector]; - - objc_setAssociatedObject(appDelegate, &kGULRealIMPBySelectorKey, - [realImplementationsBySelector copy], OBJC_ASSOCIATION_RETAIN); - [self reassignAppDelegate]; - }); -} - -#pragma mark - Create proxy - -+ (GULApplication *)sharedApplication { - if ([GULAppEnvironmentUtil isAppExtension]) { - return nil; - } - id sharedApplication = nil; - Class uiApplicationClass = NSClassFromString(kGULApplicationClassName); - if (uiApplicationClass && - [uiApplicationClass respondsToSelector:(NSSelectorFromString(@"sharedApplication"))]) { - sharedApplication = [uiApplicationClass sharedApplication]; - } - return sharedApplication; -} - -#pragma mark - Override default methods - -/** Creates a new subclass of the class of the given object and sets the isa value of the given - * object to the new subclass. Additionally this copies methods to that new subclass that allow us - * to intercept UIApplicationDelegate methods. This is better known as isa swizzling. - * - * @param appDelegate The object to which you want to isa swizzle. This has to conform to the - * UIApplicationDelegate subclass. - * @return Returns the new subclass. - */ -+ (nullable Class)createSubclassWithObject:(id)appDelegate { - Class realClass = [appDelegate class]; - - // Create GUL__ - NSString *classNameWithPrefix = - [kGULAppDelegatePrefix stringByAppendingString:NSStringFromClass(realClass)]; - NSString *newClassName = - [NSString stringWithFormat:@"%@-%@", classNameWithPrefix, [NSUUID UUID].UUIDString]; - - if (NSClassFromString(newClassName)) { - GULLogError(kGULLoggerSwizzler, NO, - [NSString stringWithFormat:@"I-SWZ%06ld", - (long)kGULSwizzlerMessageCodeAppDelegateSwizzling005], - @"Cannot create a proxy for App Delegate. Subclass already exists. Original Class: " - @"%@, subclass: %@", - NSStringFromClass(realClass), newClassName); - return nil; - } - - // Register the new class as subclass of the real one. Do not allocate more than the real class - // size. - Class appDelegateSubClass = objc_allocateClassPair(realClass, newClassName.UTF8String, 0); - if (appDelegateSubClass == Nil) { - GULLogError(kGULLoggerSwizzler, NO, - [NSString stringWithFormat:@"I-SWZ%06ld", - (long)kGULSwizzlerMessageCodeAppDelegateSwizzling006], - @"Cannot create a proxy for App Delegate. Subclass already exists. Original Class: " - @"%@, subclass: Nil", - NSStringFromClass(realClass)); - return nil; - } - - NSMutableDictionary *realImplementationsBySelector = - [[NSMutableDictionary alloc] init]; - - // For application:continueUserActivity:restorationHandler: - SEL continueUserActivitySEL = @selector(application:continueUserActivity:restorationHandler:); - [self proxyDestinationSelector:continueUserActivitySEL - implementationsFromSourceSelector:continueUserActivitySEL - fromClass:[GULAppDelegateSwizzler class] - toClass:appDelegateSubClass - realClass:realClass - storeDestinationImplementationTo:realImplementationsBySelector]; - -#if TARGET_OS_IOS || TARGET_OS_TV - // Add the following methods from GULAppDelegate class, and store the real implementation so it - // can forward to the real one. - // For application:openURL:options: - SEL applicationOpenURLOptionsSEL = @selector(application:openURL:options:); - if ([appDelegate respondsToSelector:applicationOpenURLOptionsSEL]) { - // Only add the application:openURL:options: method if the original AppDelegate implements it. - // This fixes a bug if an app only implements application:openURL:sourceApplication:annotation: - // (if we add the `options` method, iOS sees that one exists and does not call the - // `sourceApplication` method, which in this case is the only one the app implements). - - [self proxyDestinationSelector:applicationOpenURLOptionsSEL - implementationsFromSourceSelector:applicationOpenURLOptionsSEL - fromClass:[GULAppDelegateSwizzler class] - toClass:appDelegateSubClass - realClass:realClass - storeDestinationImplementationTo:realImplementationsBySelector]; - } - - // For application:handleEventsForBackgroundURLSession:completionHandler: - SEL handleEventsForBackgroundURLSessionSEL = @selector(application: - handleEventsForBackgroundURLSession:completionHandler:); - [self proxyDestinationSelector:handleEventsForBackgroundURLSessionSEL - implementationsFromSourceSelector:handleEventsForBackgroundURLSessionSEL - fromClass:[GULAppDelegateSwizzler class] - toClass:appDelegateSubClass - realClass:realClass - storeDestinationImplementationTo:realImplementationsBySelector]; -#endif // TARGET_OS_IOS || TARGET_OS_TV - -#if TARGET_OS_IOS - // For application:openURL:sourceApplication:annotation: - SEL openURLSourceApplicationAnnotationSEL = @selector(application: - openURL:sourceApplication:annotation:); - - [self proxyDestinationSelector:openURLSourceApplicationAnnotationSEL - implementationsFromSourceSelector:openURLSourceApplicationAnnotationSEL - fromClass:[GULAppDelegateSwizzler class] - toClass:appDelegateSubClass - realClass:realClass - storeDestinationImplementationTo:realImplementationsBySelector]; -#endif // TARGET_OS_IOS - - // Override the description too so the custom class name will not show up. - [GULAppDelegateSwizzler addInstanceMethodWithDestinationSelector:@selector(description) - withImplementationFromSourceSelector:@selector(fakeDescription) - fromClass:[self class] - toClass:appDelegateSubClass]; - - // Store original implementations to a fake property of the original delegate. - objc_setAssociatedObject(appDelegate, &kGULRealIMPBySelectorKey, - [realImplementationsBySelector copy], OBJC_ASSOCIATION_RETAIN_NONATOMIC); - objc_setAssociatedObject(appDelegate, &kGULRealClassKey, realClass, - OBJC_ASSOCIATION_RETAIN_NONATOMIC); - - // The subclass size has to be exactly the same size with the original class size. The subclass - // cannot have more ivars/properties than its superclass since it will cause an offset in memory - // that can lead to overwriting the isa of an object in the next frame. - if (class_getInstanceSize(realClass) != class_getInstanceSize(appDelegateSubClass)) { - GULLogError(kGULLoggerSwizzler, NO, - [NSString stringWithFormat:@"I-SWZ%06ld", - (long)kGULSwizzlerMessageCodeAppDelegateSwizzling007], - @"Cannot create subclass of App Delegate, because the created subclass is not the " - @"same size. %@", - NSStringFromClass(realClass)); - NSAssert(NO, @"Classes must be the same size to swizzle isa"); - return nil; - } - - // Make the newly created class to be the subclass of the real App Delegate class. - objc_registerClassPair(appDelegateSubClass); - if (object_setClass(appDelegate, appDelegateSubClass)) { - GULLogDebug(kGULLoggerSwizzler, NO, - [NSString stringWithFormat:@"I-SWZ%06ld", - (long)kGULSwizzlerMessageCodeAppDelegateSwizzling008], - @"Successfully created App Delegate Proxy automatically. To disable the " - @"proxy, set the flag %@ to NO (Boolean) in the Info.plist", - [GULAppDelegateSwizzler correctAppDelegateProxyKey]); - } - - return appDelegateSubClass; -} - -+ (void)proxyRemoteNotificationsMethodsWithAppDelegateSubClass:(Class)appDelegateSubClass - realClass:(Class)realClass - appDelegate:(id)appDelegate - realImplementationsBySelector: - (NSMutableDictionary *)realImplementationsBySelector { - if (realClass == nil || appDelegateSubClass == nil || appDelegate == nil || - realImplementationsBySelector == nil) { - // The App Delegate has not been swizzled. - return; - } - - // For application:didRegisterForRemoteNotificationsWithDeviceToken: - SEL didRegisterForRemoteNotificationsSEL = - NSSelectorFromString(kGULDidRegisterForRemoteNotificationsSEL); - SEL didRegisterForRemoteNotificationsDonorSEL = @selector(application: - donor_didRegisterForRemoteNotificationsWithDeviceToken:); - - [self proxyDestinationSelector:didRegisterForRemoteNotificationsSEL - implementationsFromSourceSelector:didRegisterForRemoteNotificationsDonorSEL - fromClass:[GULAppDelegateSwizzler class] - toClass:appDelegateSubClass - realClass:realClass - storeDestinationImplementationTo:realImplementationsBySelector]; - - // For application:didFailToRegisterForRemoteNotificationsWithError: - SEL didFailToRegisterForRemoteNotificationsSEL = - NSSelectorFromString(kGULDidFailToRegisterForRemoteNotificationsSEL); - SEL didFailToRegisterForRemoteNotificationsDonorSEL = @selector(application: - donor_didFailToRegisterForRemoteNotificationsWithError:); - - [self proxyDestinationSelector:didFailToRegisterForRemoteNotificationsSEL - implementationsFromSourceSelector:didFailToRegisterForRemoteNotificationsDonorSEL - fromClass:[GULAppDelegateSwizzler class] - toClass:appDelegateSubClass - realClass:realClass - storeDestinationImplementationTo:realImplementationsBySelector]; - - // For application:didReceiveRemoteNotification: - SEL didReceiveRemoteNotificationSEL = NSSelectorFromString(kGULDidReceiveRemoteNotificationSEL); - SEL didReceiveRemoteNotificationDonotSEL = @selector(application: - donor_didReceiveRemoteNotification:); - - [self proxyDestinationSelector:didReceiveRemoteNotificationSEL - implementationsFromSourceSelector:didReceiveRemoteNotificationDonotSEL - fromClass:[GULAppDelegateSwizzler class] - toClass:appDelegateSubClass - realClass:realClass - storeDestinationImplementationTo:realImplementationsBySelector]; - - // For application:didReceiveRemoteNotification:fetchCompletionHandler: -#if !TARGET_OS_WATCH && !TARGET_OS_OSX - SEL didReceiveRemoteNotificationWithCompletionSEL = - NSSelectorFromString(kGULDidReceiveRemoteNotificationWithCompletionSEL); - SEL didReceiveRemoteNotificationWithCompletionDonorSEL = - @selector(application:donor_didReceiveRemoteNotification:fetchCompletionHandler:); - if ([appDelegate respondsToSelector:didReceiveRemoteNotificationWithCompletionSEL]) { - // Only add the application:didReceiveRemoteNotification:fetchCompletionHandler: method if - // the original AppDelegate implements it. - // This fixes a bug if an app only implements application:didReceiveRemoteNotification: - // (if we add the method with completion, iOS sees that one exists and does not call - // the method without the completion, which in this case is the only one the app implements). - - [self proxyDestinationSelector:didReceiveRemoteNotificationWithCompletionSEL - implementationsFromSourceSelector:didReceiveRemoteNotificationWithCompletionDonorSEL - fromClass:[GULAppDelegateSwizzler class] - toClass:appDelegateSubClass - realClass:realClass - storeDestinationImplementationTo:realImplementationsBySelector]; - } -#endif // !TARGET_OS_WATCH && !TARGET_OS_OSX -} - -/// We have to do this to invalidate the cache that caches the original respondsToSelector of -/// openURL handlers. Without this, it won't call the default implementations because the system -/// checks and caches them. -/// Register KVO only once. Otherwise, the observing method will be called as many times as -/// being registered. -+ (void)reassignAppDelegate { -#if !TARGET_OS_WATCH - id delegate = [self sharedApplication].delegate; - [self sharedApplication].delegate = nil; - [self sharedApplication].delegate = delegate; - gOriginalAppDelegate = delegate; - [[GULAppDelegateObserver sharedInstance] observeUIApplication]; -#endif -} - -#pragma mark - Helper methods - -+ (GULMutableDictionary *)interceptors { - static dispatch_once_t onceToken; - static GULMutableDictionary *sInterceptors; - dispatch_once(&onceToken, ^{ - sInterceptors = [[GULMutableDictionary alloc] init]; - }); - return sInterceptors; -} - -+ (nullable NSValue *)originalImplementationForSelector:(SEL)selector object:(id)object { - NSDictionary *realImplementationBySelector = - objc_getAssociatedObject(object, &kGULRealIMPBySelectorKey); - return realImplementationBySelector[NSStringFromSelector(selector)]; -} - -+ (void)proxyDestinationSelector:(SEL)destinationSelector - implementationsFromSourceSelector:(SEL)sourceSelector - fromClass:(Class)sourceClass - toClass:(Class)destinationClass - realClass:(Class)realClass - storeDestinationImplementationTo: - (NSMutableDictionary *)destinationImplementationsBySelector { - [self addInstanceMethodWithDestinationSelector:destinationSelector - withImplementationFromSourceSelector:sourceSelector - fromClass:sourceClass - toClass:destinationClass]; - IMP sourceImplementation = - [GULAppDelegateSwizzler implementationOfMethodSelector:destinationSelector - fromClass:realClass]; - NSValue *sourceImplementationPointer = [NSValue valueWithPointer:sourceImplementation]; - - NSString *destinationSelectorString = NSStringFromSelector(destinationSelector); - destinationImplementationsBySelector[destinationSelectorString] = sourceImplementationPointer; -} - -/** Copies a method identified by the methodSelector from one class to the other. After this method - * is called, performing [toClassInstance methodSelector] will be similar to calling - * [fromClassInstance methodSelector]. This method does nothing if toClass already has a method - * identified by methodSelector. - * - * @param methodSelector The SEL that identifies both the method on the fromClass as well as the - * one on the toClass. - * @param fromClass The class from which a method is sourced. - * @param toClass The class to which the method is added. If the class already has a method with - * the same selector, this has no effect. - */ -+ (void)addInstanceMethodWithSelector:(SEL)methodSelector - fromClass:(Class)fromClass - toClass:(Class)toClass { - [self addInstanceMethodWithDestinationSelector:methodSelector - withImplementationFromSourceSelector:methodSelector - fromClass:fromClass - toClass:toClass]; -} - -/** Copies a method identified by the sourceSelector from the fromClass as a method for the - * destinationSelector on the toClass. After this method is called, performing - * [toClassInstance destinationSelector] will be similar to calling - * [fromClassInstance sourceSelector]. This method does nothing if toClass already has a method - * identified by destinationSelector. - * - * @param destinationSelector The SEL that identifies the method on the toClass. - * @param sourceSelector The SEL that identifies the method on the fromClass. - * @param fromClass The class from which a method is sourced. - * @param toClass The class to which the method is added. If the class already has a method with - * the same selector, this has no effect. - */ -+ (void)addInstanceMethodWithDestinationSelector:(SEL)destinationSelector - withImplementationFromSourceSelector:(SEL)sourceSelector - fromClass:(Class)fromClass - toClass:(Class)toClass { - Method method = class_getInstanceMethod(fromClass, sourceSelector); - IMP methodIMP = method_getImplementation(method); - const char *types = method_getTypeEncoding(method); - if (!class_addMethod(toClass, destinationSelector, methodIMP, types)) { - GULLogWarning(kGULLoggerSwizzler, NO, - [NSString stringWithFormat:@"I-SWZ%06ld", - (long)kGULSwizzlerMessageCodeAppDelegateSwizzling009], - @"Cannot copy method to destination selector %@ as it already exists", - NSStringFromSelector(destinationSelector)); - } -} - -/** Gets the IMP of the instance method on the class identified by the selector. - * - * @param selector The selector of which the IMP is to be fetched. - * @param aClass The class from which the IMP is to be fetched. - * @return The IMP of the instance method identified by selector and aClass. - */ -+ (IMP)implementationOfMethodSelector:(SEL)selector fromClass:(Class)aClass { - Method aMethod = class_getInstanceMethod(aClass, selector); - return method_getImplementation(aMethod); -} - -/** Enumerates through all the interceptors and if they respond to a given selector, executes a - * GULAppDelegateInterceptorCallback with the interceptor. - * - * @param methodSelector The SEL to check if an interceptor responds to. - * @param callback the GULAppDelegateInterceptorCallback. - */ -+ (void)notifyInterceptorsWithMethodSelector:(SEL)methodSelector - callback:(GULAppDelegateInterceptorCallback)callback { - if (!callback) { - return; - } - - NSDictionary *interceptors = [GULAppDelegateSwizzler interceptors].dictionary; - [interceptors enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { - GULZeroingWeakContainer *interceptorContainer = obj; - id interceptor = interceptorContainer.object; - if (!interceptor) { - GULLogWarning( - kGULLoggerSwizzler, NO, - [NSString - stringWithFormat:@"I-SWZ%06ld", (long)kGULSwizzlerMessageCodeAppDelegateSwizzling010], - @"AppDelegateProxy cannot find interceptor with ID %@. Removing the interceptor.", key); - [[GULAppDelegateSwizzler interceptors] removeObjectForKey:key]; - return; - } - if ([interceptor respondsToSelector:methodSelector]) { - callback(interceptor); - } - }]; -} - -// The methods below are donor methods which are added to the dynamic subclass of the App Delegate. -// They are called within the scope of the real App Delegate so |self| does not refer to the -// GULAppDelegateSwizzler instance but the real App Delegate instance. - -#pragma mark - [Donor Methods] Overridden instance description method - -- (NSString *)fakeDescription { - Class realClass = objc_getAssociatedObject(self, &kGULRealClassKey); - return [NSString stringWithFormat:@"<%@: %p>", realClass, self]; -} - -#pragma mark - [Donor Methods] URL overridden handler methods -#if TARGET_OS_IOS || TARGET_OS_TV - -- (BOOL)application:(GULApplication *)application - openURL:(NSURL *)url - options:(NSDictionary *)options { - SEL methodSelector = @selector(application:openURL:options:); - // Call the real implementation if the real App Delegate has any. - NSValue *openURLIMPPointer = - [GULAppDelegateSwizzler originalImplementationForSelector:methodSelector object:self]; - GULRealOpenURLOptionsIMP openURLOptionsIMP = [openURLIMPPointer pointerValue]; - - __block BOOL returnedValue = NO; - -// This is needed to for the library to be warning free on iOS versions < 9. -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wunguarded-availability" - [GULAppDelegateSwizzler - notifyInterceptorsWithMethodSelector:methodSelector - callback:^(id interceptor) { - returnedValue |= [interceptor application:application - openURL:url - options:options]; - }]; -#pragma clang diagnostic pop - if (openURLOptionsIMP) { - returnedValue |= openURLOptionsIMP(self, methodSelector, application, url, options); - } - return returnedValue; -} - -#endif // TARGET_OS_IOS || TARGET_OS_TV - -#if TARGET_OS_IOS - -- (BOOL)application:(GULApplication *)application - openURL:(NSURL *)url - sourceApplication:(NSString *)sourceApplication - annotation:(id)annotation { - SEL methodSelector = @selector(application:openURL:sourceApplication:annotation:); - - // Call the real implementation if the real App Delegate has any. - NSValue *openURLSourceAppAnnotationIMPPointer = - [GULAppDelegateSwizzler originalImplementationForSelector:methodSelector object:self]; - GULRealOpenURLSourceApplicationAnnotationIMP openURLSourceApplicationAnnotationIMP = - [openURLSourceAppAnnotationIMPPointer pointerValue]; - - __block BOOL returnedValue = NO; - [GULAppDelegateSwizzler - notifyInterceptorsWithMethodSelector:methodSelector - callback:^(id interceptor) { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - returnedValue |= [interceptor application:application - openURL:url - sourceApplication:sourceApplication - annotation:annotation]; -#pragma clang diagnostic pop - }]; - if (openURLSourceApplicationAnnotationIMP) { - returnedValue |= openURLSourceApplicationAnnotationIMP(self, methodSelector, application, url, - sourceApplication, annotation); - } - return returnedValue; -} - -#endif // TARGET_OS_IOS - -#pragma mark - [Donor Methods] Network overridden handler methods - -#if TARGET_OS_IOS || TARGET_OS_TV - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wstrict-prototypes" -- (void)application:(GULApplication *)application - handleEventsForBackgroundURLSession:(NSString *)identifier - completionHandler:(void (^)())completionHandler API_AVAILABLE(ios(7.0)) { -#pragma clang diagnostic pop - SEL methodSelector = @selector(application: - handleEventsForBackgroundURLSession:completionHandler:); - NSValue *handleBackgroundSessionPointer = - [GULAppDelegateSwizzler originalImplementationForSelector:methodSelector object:self]; - GULRealHandleEventsForBackgroundURLSessionIMP handleBackgroundSessionIMP = - [handleBackgroundSessionPointer pointerValue]; - - // Notify interceptors. - [GULAppDelegateSwizzler - notifyInterceptorsWithMethodSelector:methodSelector - callback:^(id interceptor) { - [interceptor application:application - handleEventsForBackgroundURLSession:identifier - completionHandler:completionHandler]; - }]; - // Call the real implementation if the real App Delegate has any. - if (handleBackgroundSessionIMP) { - handleBackgroundSessionIMP(self, methodSelector, application, identifier, completionHandler); - } -} - -#endif // TARGET_OS_IOS || TARGET_OS_TV - -#pragma mark - [Donor Methods] User Activities overridden handler methods - -- (BOOL)application:(GULApplication *)application - continueUserActivity:(NSUserActivity *)userActivity - restorationHandler:(void (^)(NSArray *restorableObjects))restorationHandler { - SEL methodSelector = @selector(application:continueUserActivity:restorationHandler:); - NSValue *continueUserActivityIMPPointer = - [GULAppDelegateSwizzler originalImplementationForSelector:methodSelector object:self]; - GULRealContinueUserActivityIMP continueUserActivityIMP = - continueUserActivityIMPPointer.pointerValue; - - __block BOOL returnedValue = NO; -#if !TARGET_OS_WATCH - [GULAppDelegateSwizzler - notifyInterceptorsWithMethodSelector:methodSelector - callback:^(id interceptor) { - returnedValue |= [interceptor application:application - continueUserActivity:userActivity - restorationHandler:restorationHandler]; - }]; -#endif - // Call the real implementation if the real App Delegate has any. - if (continueUserActivityIMP) { - returnedValue |= continueUserActivityIMP(self, methodSelector, application, userActivity, - restorationHandler); - } - return returnedValue; -} - -#pragma mark - [Donor Methods] Remote Notifications - -- (void)application:(GULApplication *)application - donor_didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { - SEL methodSelector = NSSelectorFromString(kGULDidRegisterForRemoteNotificationsSEL); - - NSValue *didRegisterForRemoteNotificationsIMPPointer = - [GULAppDelegateSwizzler originalImplementationForSelector:methodSelector object:self]; - GULRealDidRegisterForRemoteNotificationsIMP didRegisterForRemoteNotificationsIMP = - [didRegisterForRemoteNotificationsIMPPointer pointerValue]; - - // Notify interceptors. - [GULAppDelegateSwizzler - notifyInterceptorsWithMethodSelector:methodSelector - callback:^(id interceptor) { - NSInvocation *invocation = [GULAppDelegateSwizzler - appDelegateInvocationForSelector:methodSelector]; - [invocation setTarget:interceptor]; - [invocation setSelector:methodSelector]; - [invocation setArgument:(void *)(&application) atIndex:2]; - [invocation setArgument:(void *)(&deviceToken) atIndex:3]; - [invocation invoke]; - }]; - // Call the real implementation if the real App Delegate has any. - if (didRegisterForRemoteNotificationsIMP) { - didRegisterForRemoteNotificationsIMP(self, methodSelector, application, deviceToken); - } -} - -- (void)application:(GULApplication *)application - donor_didFailToRegisterForRemoteNotificationsWithError:(NSError *)error { - SEL methodSelector = NSSelectorFromString(kGULDidFailToRegisterForRemoteNotificationsSEL); - NSValue *didFailToRegisterForRemoteNotificationsIMPPointer = - [GULAppDelegateSwizzler originalImplementationForSelector:methodSelector object:self]; - GULRealDidFailToRegisterForRemoteNotificationsIMP didFailToRegisterForRemoteNotificationsIMP = - [didFailToRegisterForRemoteNotificationsIMPPointer pointerValue]; - - // Notify interceptors. - [GULAppDelegateSwizzler - notifyInterceptorsWithMethodSelector:methodSelector - callback:^(id interceptor) { - NSInvocation *invocation = [GULAppDelegateSwizzler - appDelegateInvocationForSelector:methodSelector]; - [invocation setTarget:interceptor]; - [invocation setSelector:methodSelector]; - [invocation setArgument:(void *)(&application) atIndex:2]; - [invocation setArgument:(void *)(&error) atIndex:3]; - [invocation invoke]; - }]; - // Call the real implementation if the real App Delegate has any. - if (didFailToRegisterForRemoteNotificationsIMP) { - didFailToRegisterForRemoteNotificationsIMP(self, methodSelector, application, error); - } -} - -#if !TARGET_OS_WATCH && !TARGET_OS_OSX -- (void)application:(GULApplication *)application - donor_didReceiveRemoteNotification:(NSDictionary *)userInfo - fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler { - SEL methodSelector = NSSelectorFromString(kGULDidReceiveRemoteNotificationWithCompletionSEL); - NSValue *didReceiveRemoteNotificationWithCompletionIMPPointer = - [GULAppDelegateSwizzler originalImplementationForSelector:methodSelector object:self]; - GULRealDidReceiveRemoteNotificationWithCompletionIMP - didReceiveRemoteNotificationWithCompletionIMP = - [didReceiveRemoteNotificationWithCompletionIMPPointer pointerValue]; - - // Notify interceptors. - [GULAppDelegateSwizzler - notifyInterceptorsWithMethodSelector:methodSelector - callback:^(id interceptor) { - NSInvocation *invocation = [GULAppDelegateSwizzler - appDelegateInvocationForSelector:methodSelector]; - [invocation setTarget:interceptor]; - [invocation setSelector:methodSelector]; - [invocation setArgument:(void *)(&application) atIndex:2]; - [invocation setArgument:(void *)(&userInfo) atIndex:3]; - [invocation setArgument:(void *)(&completionHandler) atIndex:4]; - [invocation invoke]; - }]; - // Call the real implementation if the real App Delegate has any. - if (didReceiveRemoteNotificationWithCompletionIMP) { - didReceiveRemoteNotificationWithCompletionIMP(self, methodSelector, application, userInfo, - completionHandler); - } -} -#endif // !TARGET_OS_WATCH && !TARGET_OS_OSX - -- (void)application:(GULApplication *)application - donor_didReceiveRemoteNotification:(NSDictionary *)userInfo { - SEL methodSelector = NSSelectorFromString(kGULDidReceiveRemoteNotificationSEL); - NSValue *didReceiveRemoteNotificationIMPPointer = - [GULAppDelegateSwizzler originalImplementationForSelector:methodSelector object:self]; - GULRealDidReceiveRemoteNotificationIMP didReceiveRemoteNotificationIMP = - [didReceiveRemoteNotificationIMPPointer pointerValue]; - - // Notify interceptors. -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - [GULAppDelegateSwizzler - notifyInterceptorsWithMethodSelector:methodSelector - callback:^(id interceptor) { - NSInvocation *invocation = [GULAppDelegateSwizzler - appDelegateInvocationForSelector:methodSelector]; - [invocation setTarget:interceptor]; - [invocation setSelector:methodSelector]; - [invocation setArgument:(void *)(&application) atIndex:2]; - [invocation setArgument:(void *)(&userInfo) atIndex:3]; - [invocation invoke]; - }]; -#pragma clang diagnostic pop - // Call the real implementation if the real App Delegate has any. - if (didReceiveRemoteNotificationIMP) { - didReceiveRemoteNotificationIMP(self, methodSelector, application, userInfo); - } -} - -+ (nullable NSInvocation *)appDelegateInvocationForSelector:(SEL)selector { - struct objc_method_description methodDescription = - protocol_getMethodDescription(@protocol(GULApplicationDelegate), selector, NO, YES); - if (methodDescription.types == NULL) { - return nil; - } - - NSMethodSignature *signature = [NSMethodSignature signatureWithObjCTypes:methodDescription.types]; - return [NSInvocation invocationWithMethodSignature:signature]; -} - -+ (void)proxyAppDelegate:(id)appDelegate { - if (![appDelegate conformsToProtocol:@protocol(GULApplicationDelegate)]) { - GULLogNotice( - kGULLoggerSwizzler, NO, - [NSString - stringWithFormat:@"I-SWZ%06ld", - (long)kGULSwizzlerMessageCodeAppDelegateSwizzlingInvalidAppDelegate], - @"App Delegate does not conform to UIApplicationDelegate protocol. %@", - [GULAppDelegateSwizzler correctAlternativeWhenAppDelegateProxyNotCreated]); - return; - } - - id originalDelegate = appDelegate; - // Do not create a subclass if it is not enabled. - if (![GULAppDelegateSwizzler isAppDelegateProxyEnabled]) { - GULLogNotice(kGULLoggerSwizzler, NO, - [NSString stringWithFormat:@"I-SWZ%06ld", - (long)kGULSwizzlerMessageCodeAppDelegateSwizzling011], - @"App Delegate Proxy is disabled. %@", - [GULAppDelegateSwizzler correctAlternativeWhenAppDelegateProxyNotCreated]); - return; - } - // Do not accept nil delegate. - if (!originalDelegate) { - GULLogError(kGULLoggerSwizzler, NO, - [NSString stringWithFormat:@"I-SWZ%06ld", - (long)kGULSwizzlerMessageCodeAppDelegateSwizzling012], - @"Cannot create App Delegate Proxy because App Delegate instance is nil. %@", - [GULAppDelegateSwizzler correctAlternativeWhenAppDelegateProxyNotCreated]); - return; - } - - @try { - gOriginalAppDelegateClass = [originalDelegate class]; - gAppDelegateSubclass = [self createSubclassWithObject:originalDelegate]; - [self reassignAppDelegate]; - } @catch (NSException *exception) { - GULLogError(kGULLoggerSwizzler, NO, - [NSString stringWithFormat:@"I-SWZ%06ld", - (long)kGULSwizzlerMessageCodeAppDelegateSwizzling013], - @"Cannot create App Delegate Proxy. %@", - [GULAppDelegateSwizzler correctAlternativeWhenAppDelegateProxyNotCreated]); - return; - } -} - -#pragma mark - Methods to print correct debug logs - -+ (NSString *)correctAppDelegateProxyKey { - return NSClassFromString(@"FIRCore") ? kGULFirebaseAppDelegateProxyEnabledPlistKey - : kGULGoogleUtilitiesAppDelegateProxyEnabledPlistKey; -} - -+ (NSString *)correctAlternativeWhenAppDelegateProxyNotCreated { - return NSClassFromString(@"FIRCore") - ? @"To log deep link campaigns manually, call the methods in " - @"FIRAnalytics+AppDelegate.h." - : @""; -} - -#pragma mark - Private Methods for Testing - -+ (void)clearInterceptors { - [[self interceptors] removeAllObjects]; -} - -+ (void)resetProxyOriginalDelegateOnceToken { - sProxyAppDelegateOnceToken = 0; - sProxyAppDelegateRemoteNotificationOnceToken = 0; -} - -+ (id)originalDelegate { - return gOriginalAppDelegate; -} - -@end diff --git a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/AppDelegateSwizzler/Internal/GULAppDelegateSwizzler_Private.h b/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/AppDelegateSwizzler/Internal/GULAppDelegateSwizzler_Private.h deleted file mode 100644 index eb3abb1e7f..0000000000 --- a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/AppDelegateSwizzler/Internal/GULAppDelegateSwizzler_Private.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright 2018 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import -#import "GoogleUtilities/AppDelegateSwizzler/Private/GULAppDelegateSwizzler.h" -#import "GoogleUtilities/Network/Private/GULMutableDictionary.h" - -@class GULApplication; - -NS_ASSUME_NONNULL_BEGIN - -@interface GULAppDelegateSwizzler () - -/** ISA Swizzles the given appDelegate as the original app delegate would be. - * - * @param appDelegate The object that needs to be isa swizzled. This should conform to the - * application delegate protocol. - */ -+ (void)proxyAppDelegate:(id)appDelegate; - -/** Returns a dictionary containing interceptor IDs mapped to a GULZeroingWeakContainer. - * - * @return A dictionary of the form {NSString : GULZeroingWeakContainer}, where the NSString is - * the interceptorID. - */ -+ (GULMutableDictionary *)interceptors; - -/** Deletes all the registered interceptors. */ -+ (void)clearInterceptors; - -/** Resets the token that prevents the app delegate proxy from being isa swizzled multiple times. */ -+ (void)resetProxyOriginalDelegateOnceToken; - -/** Returns the original app delegate that was proxied. - * - * @return The original app delegate instance that was proxied. - */ -+ (id)originalDelegate; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/AppDelegateSwizzler/Private/GULAppDelegateSwizzler.h b/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/AppDelegateSwizzler/Private/GULAppDelegateSwizzler.h deleted file mode 100644 index b15925f44d..0000000000 --- a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/AppDelegateSwizzler/Private/GULAppDelegateSwizzler.h +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright 2018 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -#if SWIFT_PACKAGE -#import "GoogleUtilities/AppDelegateSwizzler/Private/GULApplication.h" -#else -#import -#endif - -NS_ASSUME_NONNULL_BEGIN - -typedef NSString *const GULAppDelegateInterceptorID; - -/** This class contains methods that isa swizzle the app delegate. */ -@interface GULAppDelegateSwizzler : NSProxy - -/** Registers an app delegate interceptor whose methods will be invoked as they're invoked on the - * original app delegate. - * - * @param interceptor An instance of a class that conforms to the application delegate protocol. - * The interceptor is NOT retained. - * @return A unique GULAppDelegateInterceptorID if interceptor was successfully registered; nil - * if it fails. - */ -+ (nullable GULAppDelegateInterceptorID)registerAppDelegateInterceptor: - (id)interceptor; - -/** Unregisters an interceptor with the given ID if it exists. - * - * @param interceptorID The object that was generated when the interceptor was registered. - */ -+ (void)unregisterAppDelegateInterceptorWithID:(GULAppDelegateInterceptorID)interceptorID; - -/** This method ensures that the original app delegate has been proxied. Call this before - * registering your interceptor. This method is safe to call multiple times (but it only proxies - * the app delegate once). - * - * This method doesn't proxy APNS related methods: - * @code - * - application:didRegisterForRemoteNotificationsWithDeviceToken: - * - application:didFailToRegisterForRemoteNotificationsWithError: - * - application:didReceiveRemoteNotification:fetchCompletionHandler: - * - application:didReceiveRemoteNotification: - * @endcode - * - * To proxy these methods use +[GULAppDelegateSwizzler - * proxyOriginalDelegateIncludingAPNSMethods]. The methods have to be proxied separately to - * avoid potential warnings from Apple review about missing Push Notification Entitlement (e.g. - * https://github.com/firebase/firebase-ios-sdk/issues/2807) - * - * The method has no effect for extensions. - * - * @see proxyOriginalDelegateIncludingAPNSMethods - */ -+ (void)proxyOriginalDelegate; - -/** This method ensures that the original app delegate has been proxied including APNS related - * methods. Call this before registering your interceptor. This method is safe to call multiple - * times (but it only proxies the app delegate once) or - * after +[GULAppDelegateSwizzler proxyOriginalDelegate] - * - * This method calls +[GULAppDelegateSwizzler proxyOriginalDelegate] under the hood. - * After calling this method the following App Delegate methods will be proxied in addition to - * the methods proxied by proxyOriginalDelegate: - * @code - * - application:didRegisterForRemoteNotificationsWithDeviceToken: - * - application:didFailToRegisterForRemoteNotificationsWithError: - * - application:didReceiveRemoteNotification:fetchCompletionHandler: - * - application:didReceiveRemoteNotification: - * @endcode - * - * The method has no effect for extensions. - * - * @see proxyOriginalDelegate - */ -+ (void)proxyOriginalDelegateIncludingAPNSMethods; - -/** Indicates whether app delegate proxy is explicitly disabled or enabled. Enabled by default. - * - * @return YES if AppDelegateProxy is Enabled, NO otherwise. - */ -+ (BOOL)isAppDelegateProxyEnabled; - -/** Returns the current sharedApplication. - * - * @return the current application instance if in an app, or nil if in extension or if it doesn't - * exist. - */ -+ (nullable GULApplication *)sharedApplication; - -/** Do not initialize this class. */ -- (instancetype)init NS_UNAVAILABLE; - -NS_ASSUME_NONNULL_END - -@end diff --git a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/AppDelegateSwizzler/Private/GULApplication.h b/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/AppDelegateSwizzler/Private/GULApplication.h deleted file mode 100644 index 80672124a0..0000000000 --- a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/AppDelegateSwizzler/Private/GULApplication.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -#if TARGET_OS_IOS || TARGET_OS_TV - -#import - -#define GULApplication UIApplication -#define GULApplicationDelegate UIApplicationDelegate -#define GULUserActivityRestoring UIUserActivityRestoring - -static NSString *const kGULApplicationClassName = @"UIApplication"; - -#elif TARGET_OS_OSX - -#import - -#define GULApplication NSApplication -#define GULApplicationDelegate NSApplicationDelegate -#define GULUserActivityRestoring NSUserActivityRestoring - -static NSString *const kGULApplicationClassName = @"NSApplication"; - -#elif TARGET_OS_WATCH - -#import - -// We match the according watchOS API but swizzling should not work in watch -#define GULApplication WKExtension -#define GULApplicationDelegate WKExtensionDelegate -#define GULUserActivityRestoring NSUserActivityRestoring - -static NSString *const kGULApplicationClassName = @"WKExtension"; - -#endif diff --git a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Common/GULLoggerCodes.h b/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Common/GULLoggerCodes.h deleted file mode 100644 index 053ce8432b..0000000000 --- a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Common/GULLoggerCodes.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright 2018 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -typedef NS_ENUM(NSInteger, GULSwizzlerMessageCode) { - // App Delegate Swizzling. - kGULSwizzlerMessageCodeAppDelegateSwizzling000 = 1000, // I-SWZ001000 - kGULSwizzlerMessageCodeAppDelegateSwizzling001 = 1001, // I-SWZ001001 - kGULSwizzlerMessageCodeAppDelegateSwizzling002 = 1002, // I-SWZ001002 - kGULSwizzlerMessageCodeAppDelegateSwizzling003 = 1003, // I-SWZ001003 - kGULSwizzlerMessageCodeAppDelegateSwizzling004 = 1004, // I-SWZ001004 - kGULSwizzlerMessageCodeAppDelegateSwizzling005 = 1005, // I-SWZ001005 - kGULSwizzlerMessageCodeAppDelegateSwizzling006 = 1006, // I-SWZ001006 - kGULSwizzlerMessageCodeAppDelegateSwizzling007 = 1007, // I-SWZ001007 - kGULSwizzlerMessageCodeAppDelegateSwizzling008 = 1008, // I-SWZ001008 - kGULSwizzlerMessageCodeAppDelegateSwizzling009 = 1009, // I-SWZ001009 - kGULSwizzlerMessageCodeAppDelegateSwizzling010 = 1010, // I-SWZ001010 - kGULSwizzlerMessageCodeAppDelegateSwizzling011 = 1011, // I-SWZ001011 - kGULSwizzlerMessageCodeAppDelegateSwizzling012 = 1012, // I-SWZ001012 - kGULSwizzlerMessageCodeAppDelegateSwizzling013 = 1013, // I-SWZ001013 - kGULSwizzlerMessageCodeAppDelegateSwizzlingInvalidAppDelegate = 1014, // I-SWZ001014 - - // Scene Delegate Swizzling. - kGULSwizzlerMessageCodeSceneDelegateSwizzling000 = 1100, // I-SWZ001100 - kGULSwizzlerMessageCodeSceneDelegateSwizzling001 = 1101, // I-SWZ001101 - kGULSwizzlerMessageCodeSceneDelegateSwizzling002 = 1102, // I-SWZ001102 - kGULSwizzlerMessageCodeSceneDelegateSwizzling003 = 1103, // I-SWZ001103 - kGULSwizzlerMessageCodeSceneDelegateSwizzling004 = 1104, // I-SWZ001104 - kGULSwizzlerMessageCodeSceneDelegateSwizzling005 = 1105, // I-SWZ001105 - kGULSwizzlerMessageCodeSceneDelegateSwizzling006 = 1106, // I-SWZ001106 - kGULSwizzlerMessageCodeSceneDelegateSwizzling007 = 1107, // I-SWZ001107 - kGULSwizzlerMessageCodeSceneDelegateSwizzling008 = 1108, // I-SWZ001108 - kGULSwizzlerMessageCodeSceneDelegateSwizzling009 = 1109, // I-SWZ001109 - kGULSwizzlerMessageCodeSceneDelegateSwizzling010 = 1110, // I-SWZ001110 - kGULSwizzlerMessageCodeSceneDelegateSwizzling011 = 1111, // I-SWZ001111 - kGULSwizzlerMessageCodeSceneDelegateSwizzling012 = 1112, // I-SWZ001112 - kGULSwizzlerMessageCodeSceneDelegateSwizzling013 = 1113, // I-SWZ001113 - kGULSwizzlerMessageCodeSceneDelegateSwizzlingInvalidSceneDelegate = 1114, // I-SWZ001114 - - // Method Swizzling. - kGULSwizzlerMessageCodeMethodSwizzling000 = 2000, // I-SWZ002000 -}; diff --git a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Environment/GULHeartbeatDateStorage.m b/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Environment/GULHeartbeatDateStorage.m deleted file mode 100644 index b49dbf3217..0000000000 --- a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Environment/GULHeartbeatDateStorage.m +++ /dev/null @@ -1,154 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "GoogleUtilities/Environment/Private/GULHeartbeatDateStorage.h" -#import "GoogleUtilities/Environment/Private/GULSecureCoding.h" - -@interface GULHeartbeatDateStorage () -/** The storage to store the date of the last sent heartbeat. */ -@property(nonatomic, readonly) NSFileCoordinator *fileCoordinator; -/** The name of the file that stores heartbeat information. */ -@property(nonatomic, readonly) NSString *fileName; -@end - -@implementation GULHeartbeatDateStorage - -@synthesize fileURL = _fileURL; - -- (instancetype)initWithFileName:(NSString *)fileName { - if (fileName == nil) { - return nil; - } - - self = [super init]; - if (self) { - _fileCoordinator = [[NSFileCoordinator alloc] initWithFilePresenter:nil]; - _fileName = fileName; - } - return self; -} - -/** Lazy getter for fileURL - * @return fileURL where heartbeat information is stored. - */ -- (NSURL *)fileURL { - if (!_fileURL) { - NSURL *directoryURL = [[self class] directoryPathURL]; - [[self class] checkAndCreateDirectory:directoryURL fileCoordinator:_fileCoordinator]; - _fileURL = [directoryURL URLByAppendingPathComponent:_fileName]; - } - return _fileURL; -} - -/** Returns the URL path of the Application Support folder. - * @return the URL path of Application Support. - */ -+ (NSURL *)directoryPathURL { - NSArray *paths = - NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES); - NSArray *components = @[ paths.lastObject, @"Google/FIRApp" ]; - NSString *directoryString = [NSString pathWithComponents:components]; - NSURL *directoryURL = [NSURL fileURLWithPath:directoryString]; - return directoryURL; -} - -/** Checks and creates a directory for the directory specified by the - * directory url - * @param directoryPathURL The path to the directory which needs to be created. - * @param fileCoordinator The fileCoordinator object to coordinate writes to the directory. - */ -+ (void)checkAndCreateDirectory:(NSURL *)directoryPathURL - fileCoordinator:(NSFileCoordinator *)fileCoordinator { - NSError *fileCoordinatorError = nil; - [fileCoordinator - coordinateWritingItemAtURL:directoryPathURL - options:0 - error:&fileCoordinatorError - byAccessor:^(NSURL *writingDirectoryURL) { - NSError *error; - if (![writingDirectoryURL checkResourceIsReachableAndReturnError:&error]) { - // If fail creating the Application Support directory, log warning. - NSError *error; - [[NSFileManager defaultManager] createDirectoryAtURL:writingDirectoryURL - withIntermediateDirectories:YES - attributes:nil - error:&error]; - } - }]; -} - -- (nullable NSMutableDictionary *)heartbeatDictionaryWithFileURL:(NSURL *)readingFileURL { - NSError *error; - NSMutableDictionary *dict; - NSData *objectData = [NSData dataWithContentsOfURL:readingFileURL options:0 error:&error]; - if (objectData == nil || error != nil) { - dict = [NSMutableDictionary dictionary]; - } else { - dict = [GULSecureCoding - unarchivedObjectOfClasses:[NSSet setWithArray:@[ NSDictionary.class, NSDate.class ]] - fromData:objectData - error:&error]; - if (dict == nil || error != nil) { - dict = [NSMutableDictionary dictionary]; - } - } - return dict; -} - -- (nullable NSDate *)heartbeatDateForTag:(NSString *)tag { - __block NSMutableDictionary *dict; - NSError *error; - [self.fileCoordinator coordinateReadingItemAtURL:self.fileURL - options:0 - error:&error - byAccessor:^(NSURL *readingURL) { - dict = [self heartbeatDictionaryWithFileURL:readingURL]; - }]; - return dict[tag]; -} - -- (BOOL)setHearbeatDate:(NSDate *)date forTag:(NSString *)tag { - NSError *error; - __block BOOL isSuccess = false; - [self.fileCoordinator coordinateReadingItemAtURL:self.fileURL - options:0 - writingItemAtURL:self.fileURL - options:0 - error:&error - byAccessor:^(NSURL *readingURL, NSURL *writingURL) { - NSMutableDictionary *dictionary = - [self heartbeatDictionaryWithFileURL:readingURL]; - dictionary[tag] = date; - NSError *error; - isSuccess = [self writeDictionary:dictionary - forWritingURL:writingURL - error:&error]; - }]; - return isSuccess; -} - -- (BOOL)writeDictionary:(NSMutableDictionary *)dictionary - forWritingURL:(NSURL *)writingFileURL - error:(NSError **)outError { - NSData *data = [GULSecureCoding archivedDataWithRootObject:dictionary error:outError]; - if (*outError != nil) { - return false; - } else { - return [data writeToURL:writingFileURL atomically:YES]; - } -} - -@end diff --git a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Environment/GULSecureCoding.m b/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Environment/GULSecureCoding.m deleted file mode 100644 index 91c4495f48..0000000000 --- a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Environment/GULSecureCoding.m +++ /dev/null @@ -1,103 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "GoogleUtilities/Environment/Private/GULSecureCoding.h" - -NSString *const kGULSecureCodingError = @"GULSecureCodingError"; - -@implementation GULSecureCoding - -+ (nullable id)unarchivedObjectOfClasses:(NSSet *)classes - fromData:(NSData *)data - error:(NSError **)outError { - id object; -#if __has_builtin(__builtin_available) - if (@available(macOS 10.13, iOS 11.0, tvOS 11.0, watchOS 4.0, *)) { - object = [NSKeyedUnarchiver unarchivedObjectOfClasses:classes fromData:data error:outError]; - } else -#endif // __has_builtin(__builtin_available) - { - @try { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data]; -#pragma clang diagnostic pop - unarchiver.requiresSecureCoding = YES; - - object = [unarchiver decodeObjectOfClasses:classes forKey:NSKeyedArchiveRootObjectKey]; - } @catch (NSException *exception) { - if (outError) { - *outError = [self archivingErrorWithException:exception]; - } - } - - if (object == nil && outError && *outError == nil) { - NSString *failureReason = @"NSKeyedUnarchiver failed to unarchive data."; - *outError = [NSError errorWithDomain:kGULSecureCodingError - code:-1 - userInfo:@{NSLocalizedFailureReasonErrorKey : failureReason}]; - } - } - - return object; -} - -+ (nullable id)unarchivedObjectOfClass:(Class)class - fromData:(NSData *)data - error:(NSError **)outError { - return [self unarchivedObjectOfClasses:[NSSet setWithObject:class] fromData:data error:outError]; -} - -+ (nullable NSData *)archivedDataWithRootObject:(id)object error:(NSError **)outError { - NSData *archiveData; -#if __has_builtin(__builtin_available) - if (@available(macOS 10.13, iOS 11.0, tvOS 11.0, watchOS 4.0, *)) { - archiveData = [NSKeyedArchiver archivedDataWithRootObject:object - requiringSecureCoding:YES - error:outError]; - } else -#endif // __has_builtin(__builtin_available) - { - @try { - NSMutableData *data = [NSMutableData data]; -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data]; -#pragma clang diagnostic pop - archiver.requiresSecureCoding = YES; - - [archiver encodeObject:object forKey:NSKeyedArchiveRootObjectKey]; - [archiver finishEncoding]; - - archiveData = [data copy]; - } @catch (NSException *exception) { - if (outError) { - *outError = [self archivingErrorWithException:exception]; - } - } - } - - return archiveData; -} - -+ (NSError *)archivingErrorWithException:(NSException *)exception { - NSString *failureReason = [NSString - stringWithFormat:@"NSKeyedArchiver exception with name: %@, reason: %@, userInfo: %@", - exception.name, exception.reason, exception.userInfo]; - NSDictionary *errorUserInfo = @{NSLocalizedFailureReasonErrorKey : failureReason}; - - return [NSError errorWithDomain:kGULSecureCodingError code:-1 userInfo:errorUserInfo]; -} - -@end diff --git a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Environment/Private/GULAppEnvironmentUtil.h b/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Environment/Private/GULAppEnvironmentUtil.h deleted file mode 100644 index 2fb1622619..0000000000 --- a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Environment/Private/GULAppEnvironmentUtil.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -@interface GULAppEnvironmentUtil : NSObject - -/// Indicates whether the app is from Apple Store or not. Returns NO if the app is on simulator, -/// development environment or sideloaded. -+ (BOOL)isFromAppStore; - -/// Indicates whether the app is a Testflight app. Returns YES if the app has sandbox receipt. -/// Returns NO otherwise. -+ (BOOL)isAppStoreReceiptSandbox; - -/// Indicates whether the app is on simulator or not at runtime depending on the device -/// architecture. -+ (BOOL)isSimulator; - -/// The current device model. Returns an empty string if device model cannot be retrieved. -+ (NSString *)deviceModel; - -/// The current operating system version. Returns an empty string if the system version cannot be -/// retrieved. -+ (NSString *)systemVersion; - -/// Indicates whether it is running inside an extension or an app. -+ (BOOL)isAppExtension; - -/// @return Returns @YES when is run on iOS version greater or equal to 7.0 -+ (BOOL)isIOS7OrHigher DEPRECATED_MSG_ATTRIBUTE( - "Always `YES` because only iOS 8 and higher supported. The method will be removed."); - -@end diff --git a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Environment/Private/GULHeartbeatDateStorage.h b/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Environment/Private/GULHeartbeatDateStorage.h deleted file mode 100644 index 9432dfc043..0000000000 --- a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Environment/Private/GULHeartbeatDateStorage.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -/// Stores either a date or a dictionary to a specified file. -@interface GULHeartbeatDateStorage : NSObject - -- (instancetype)init NS_UNAVAILABLE; - -@property(nonatomic, readonly) NSURL *fileURL; - -/** - * Default initializer. - * @param fileName The name of the file to store the date information. - * exist, it will be created if needed. - */ -- (instancetype)initWithFileName:(NSString *)fileName; - -/** - * Reads the date from the specified file for the given tag. - * @return Returns date if exists, otherwise `nil`. - */ -- (nullable NSDate *)heartbeatDateForTag:(NSString *)tag; - -/** - * Saves the date for the specified tag in the specified file. - * @return YES on success, NO otherwise. - */ -- (BOOL)setHearbeatDate:(NSDate *)date forTag:(NSString *)tag; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Environment/Private/GULKeychainStorage.h b/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Environment/Private/GULKeychainStorage.h deleted file mode 100644 index dc01a83681..0000000000 --- a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Environment/Private/GULKeychainStorage.h +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -@class FBLPromise; - -NS_ASSUME_NONNULL_BEGIN - -/// The class provides a convenient abstraction on top of the iOS Keychain API to save data. -@interface GULKeychainStorage : NSObject - -- (instancetype)init NS_UNAVAILABLE; - -/** Initializes the keychain storage with Keychain Service name. - * @param service A Keychain Service name that will be used to store and retrieve objects. See also - * `kSecAttrService`. - */ -- (instancetype)initWithService:(NSString *)service; - -/** - * Get an object by key. - * @param key The key. - * @param objectClass The expected object class required by `NSSecureCoding`. - * @param accessGroup The Keychain Access Group. - * - * @return Returns a promise. It is resolved with an object stored by key if exists. It is resolved - * with `nil` when the object not found. It fails on a Keychain error. - */ -- (FBLPromise> *)getObjectForKey:(NSString *)key - objectClass:(Class)objectClass - accessGroup:(nullable NSString *)accessGroup; - -/** - * Saves the given object by the given key. - * @param object The object to store. - * @param key The key to store the object. If there is an existing object by the key, it will be - * overridden. - * @param accessGroup The Keychain Access Group. - * - * @return Returns which is resolved with `[NSNull null]` on success. - */ -- (FBLPromise *)setObject:(id)object - forKey:(NSString *)key - accessGroup:(nullable NSString *)accessGroup; - -/** - * Removes the object by the given key. - * @param key The key to store the object. If there is an existing object by the key, it will be - * overridden. - * @param accessGroup The Keychain Access Group. - * - * @return Returns which is resolved with `[NSNull null]` on success. - */ -- (FBLPromise *)removeObjectForKey:(NSString *)key - accessGroup:(nullable NSString *)accessGroup; - -#if TARGET_OS_OSX -/// If not `nil`, then only this keychain will be used to save and read data (see -/// `kSecMatchSearchList` and `kSecUseKeychain`. It is mostly intended to be used by unit tests. -@property(nonatomic, nullable) SecKeychainRef keychainRef; -#endif // TARGET_OSX - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Environment/Private/GULKeychainUtils.h b/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Environment/Private/GULKeychainUtils.h deleted file mode 100644 index de4bef2fb2..0000000000 --- a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Environment/Private/GULKeychainUtils.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -FOUNDATION_EXPORT NSString *const kGULKeychainUtilsErrorDomain; - -/// Helper functions to access Keychain. -@interface GULKeychainUtils : NSObject - -/** Fetches a keychain item data matching to the provided query. - * @param query A dictionary with Keychain query parameters. See docs for `SecItemCopyMatching` for - * details. - * @param outError A pointer to `NSError` instance or `NULL`. The instance at `outError` will be - * assigned with an error if there is. - * @returns Data for the first Keychain Item matching the provided query or `nil` if there is not - * such an item (`outError` will be `nil` in this case) or an error occurred. - */ -+ (nullable NSData *)getItemWithQuery:(NSDictionary *)query - error:(NSError *_Nullable *_Nullable)outError; - -/** Stores data to a Keychain Item matching to the provided query. An existing Keychain Item - * matching the query parameters will be updated or a new will be created. - * @param item A Keychain Item data to store. - * @param query A dictionary with Keychain query parameters. See docs for `SecItemAdd` and - * `SecItemUpdate` for details. - * @param outError A pointer to `NSError` instance or `NULL`. The instance at `outError` will be - * assigned with an error if there is. - * @returns `YES` when data was successfully stored, `NO` otherwise. - */ -+ (BOOL)setItem:(NSData *)item - withQuery:(NSDictionary *)query - error:(NSError *_Nullable *_Nullable)outError; - -/** Removes a Keychain Item matching to the provided query. - * @param query A dictionary with Keychain query parameters. See docs for `SecItemDelete` for - * details. - * @param outError A pointer to `NSError` instance or `NULL`. The instance at `outError` will be - * assigned with an error if there is. - * @returns `YES` if the item was removed successfully or doesn't exist, `NO` otherwise. - */ -+ (BOOL)removeItemWithQuery:(NSDictionary *)query error:(NSError *_Nullable *_Nullable)outError; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Environment/Private/GULSecureCoding.h b/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Environment/Private/GULSecureCoding.h deleted file mode 100644 index 8484b3953a..0000000000 --- a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Environment/Private/GULSecureCoding.h +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** The class wraps `NSKeyedArchiver` and `NSKeyedUnarchiver` API to provide a unified secure coding - * methods for iOS versions before and after 11. - */ -@interface GULSecureCoding : NSObject - -+ (nullable id)unarchivedObjectOfClasses:(NSSet *)classes - fromData:(NSData *)data - error:(NSError **)outError; - -+ (nullable id)unarchivedObjectOfClass:(Class)class - fromData:(NSData *)data - error:(NSError **)outError; - -+ (nullable NSData *)archivedDataWithRootObject:(id)object error:(NSError **)outError; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Environment/SecureStorage/GULKeychainStorage.m b/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Environment/SecureStorage/GULKeychainStorage.m deleted file mode 100644 index b6ef0cbd6c..0000000000 --- a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Environment/SecureStorage/GULKeychainStorage.m +++ /dev/null @@ -1,192 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "GoogleUtilities/Environment/Private/GULKeychainStorage.h" -#import - -#if __has_include() -#import -#else -#import "FBLPromises.h" -#endif - -#import "GoogleUtilities/Environment/Private/GULKeychainUtils.h" -#import "GoogleUtilities/Environment/Private/GULSecureCoding.h" - -@interface GULKeychainStorage () -@property(nonatomic, readonly) dispatch_queue_t keychainQueue; -@property(nonatomic, readonly) dispatch_queue_t inMemoryCacheQueue; -@property(nonatomic, readonly) NSString *service; -@property(nonatomic, readonly) NSCache> *inMemoryCache; -@end - -@implementation GULKeychainStorage - -- (instancetype)initWithService:(NSString *)service { - NSCache *cache = [[NSCache alloc] init]; - // Cache up to 5 installations. - cache.countLimit = 5; - return [self initWithService:service cache:cache]; -} - -- (instancetype)initWithService:(NSString *)service cache:(NSCache *)cache { - self = [super init]; - if (self) { - _keychainQueue = - dispatch_queue_create("com.gul.KeychainStorage.Keychain", DISPATCH_QUEUE_SERIAL); - _inMemoryCacheQueue = - dispatch_queue_create("com.gul.KeychainStorage.InMemoryCache", DISPATCH_QUEUE_SERIAL); - _service = [service copy]; - _inMemoryCache = cache; - } - return self; -} - -#pragma mark - Public - -- (FBLPromise> *)getObjectForKey:(NSString *)key - objectClass:(Class)objectClass - accessGroup:(nullable NSString *)accessGroup { - return [FBLPromise onQueue:self.inMemoryCacheQueue - do:^id _Nullable { - // Return cached object or fail otherwise. - id object = [self.inMemoryCache objectForKey:key]; - return object - ?: [[NSError alloc] - initWithDomain:FBLPromiseErrorDomain - code:FBLPromiseErrorCodeValidationFailure - userInfo:nil]; - }] - .recover(^id _Nullable(NSError *error) { - // Look for the object in the keychain. - return [self getObjectFromKeychainForKey:key - objectClass:objectClass - accessGroup:accessGroup]; - }); -} - -- (FBLPromise *)setObject:(id)object - forKey:(NSString *)key - accessGroup:(nullable NSString *)accessGroup { - return [FBLPromise onQueue:self.inMemoryCacheQueue - do:^id _Nullable { - // Save to the in-memory cache first. - [self.inMemoryCache setObject:object forKey:[key copy]]; - return [NSNull null]; - }] - .thenOn(self.keychainQueue, ^id(id result) { - // Then store the object to the keychain. - NSDictionary *query = [self keychainQueryWithKey:key accessGroup:accessGroup]; - NSError *error; - NSData *encodedObject = [GULSecureCoding archivedDataWithRootObject:object error:&error]; - if (!encodedObject) { - return error; - } - - if (![GULKeychainUtils setItem:encodedObject withQuery:query error:&error]) { - return error; - } - - return [NSNull null]; - }); -} - -- (FBLPromise *)removeObjectForKey:(NSString *)key - accessGroup:(nullable NSString *)accessGroup { - return [FBLPromise onQueue:self.inMemoryCacheQueue - do:^id _Nullable { - [self.inMemoryCache removeObjectForKey:key]; - return nil; - }] - .thenOn(self.keychainQueue, ^id(id result) { - NSDictionary *query = [self keychainQueryWithKey:key accessGroup:accessGroup]; - - NSError *error; - if (![GULKeychainUtils removeItemWithQuery:query error:&error]) { - return error; - } - - return [NSNull null]; - }); -} - -#pragma mark - Private - -- (FBLPromise> *)getObjectFromKeychainForKey:(NSString *)key - objectClass:(Class)objectClass - accessGroup:(nullable NSString *)accessGroup { - // Look for the object in the keychain. - return [FBLPromise - onQueue:self.keychainQueue - do:^id { - NSDictionary *query = [self keychainQueryWithKey:key accessGroup:accessGroup]; - NSError *error; - NSData *encodedObject = [GULKeychainUtils getItemWithQuery:query error:&error]; - - if (error) { - return error; - } - if (!encodedObject) { - return nil; - } - id object = [GULSecureCoding unarchivedObjectOfClass:objectClass - fromData:encodedObject - error:&error]; - if (error) { - return error; - } - - return object; - }] - .thenOn(self.inMemoryCacheQueue, - ^id _Nullable(id _Nullable object) { - // Save object to the in-memory cache if exists and return the object. - if (object) { - [self.inMemoryCache setObject:object forKey:[key copy]]; - } - return object; - }); -} - -- (void)resetInMemoryCache { - [self.inMemoryCache removeAllObjects]; -} - -#pragma mark - Keychain - -- (NSMutableDictionary *)keychainQueryWithKey:(NSString *)key - accessGroup:(nullable NSString *)accessGroup { - NSMutableDictionary *query = [NSMutableDictionary dictionary]; - - query[(__bridge NSString *)kSecClass] = (__bridge NSString *)kSecClassGenericPassword; - query[(__bridge NSString *)kSecAttrService] = self.service; - query[(__bridge NSString *)kSecAttrAccount] = key; - - if (accessGroup) { - query[(__bridge NSString *)kSecAttrAccessGroup] = accessGroup; - } - -#if TARGET_OS_OSX - if (self.keychainRef) { - query[(__bridge NSString *)kSecUseKeychain] = (__bridge id)(self.keychainRef); - query[(__bridge NSString *)kSecMatchSearchList] = @[ (__bridge id)(self.keychainRef) ]; - } -#endif // TARGET_OSX - - return query; -} - -@end diff --git a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Environment/SecureStorage/GULKeychainUtils.m b/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Environment/SecureStorage/GULKeychainUtils.m deleted file mode 100644 index ba8731a57c..0000000000 --- a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Environment/SecureStorage/GULKeychainUtils.m +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright 2019 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "GoogleUtilities/Environment/Private/GULKeychainUtils.h" - -NSString *const kGULKeychainUtilsErrorDomain = @"com.gul.keychain.ErrorDomain"; - -@implementation GULKeychainUtils - -+ (nullable NSData *)getItemWithQuery:(NSDictionary *)query - error:(NSError *_Nullable *_Nullable)outError { - NSMutableDictionary *mutableQuery = [query mutableCopy]; - - mutableQuery[(__bridge id)kSecReturnData] = @YES; - mutableQuery[(__bridge id)kSecMatchLimit] = (__bridge id)kSecMatchLimitOne; - - CFDataRef result = NULL; - OSStatus status = - SecItemCopyMatching((__bridge CFDictionaryRef)mutableQuery, (CFTypeRef *)&result); - - if (status == errSecSuccess && result != NULL) { - if (outError) { - *outError = nil; - } - - return (__bridge_transfer NSData *)result; - } - - if (status == errSecItemNotFound) { - if (outError) { - *outError = nil; - } - } else { - if (outError) { - *outError = [self keychainErrorWithFunction:@"SecItemCopyMatching" status:status]; - } - } - return nil; -} - -+ (BOOL)setItem:(NSData *)item - withQuery:(NSDictionary *)query - error:(NSError *_Nullable *_Nullable)outError { - NSData *existingItem = [self getItemWithQuery:query error:outError]; - if (outError && *outError) { - return NO; - } - - NSMutableDictionary *mutableQuery = [query mutableCopy]; - mutableQuery[(__bridge id)kSecAttrAccessible] = - (__bridge id)kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly; - - OSStatus status; - if (!existingItem) { - mutableQuery[(__bridge id)kSecValueData] = item; - status = SecItemAdd((__bridge CFDictionaryRef)mutableQuery, NULL); - } else { - NSDictionary *attributes = @{(__bridge id)kSecValueData : item}; - status = SecItemUpdate((__bridge CFDictionaryRef)query, (__bridge CFDictionaryRef)attributes); - } - - if (status == noErr) { - if (outError) { - *outError = nil; - } - return YES; - } - - NSString *function = existingItem ? @"SecItemUpdate" : @"SecItemAdd"; - if (outError) { - *outError = [self keychainErrorWithFunction:function status:status]; - } - return NO; -} - -+ (BOOL)removeItemWithQuery:(NSDictionary *)query error:(NSError *_Nullable *_Nullable)outError { - OSStatus status = SecItemDelete((__bridge CFDictionaryRef)query); - - if (status == noErr || status == errSecItemNotFound) { - if (outError) { - *outError = nil; - } - return YES; - } - - if (outError) { - *outError = [self keychainErrorWithFunction:@"SecItemDelete" status:status]; - } - return NO; -} - -#pragma mark - Errors - -+ (NSError *)keychainErrorWithFunction:(NSString *)keychainFunction status:(OSStatus)status { - NSString *failureReason = [NSString stringWithFormat:@"%@ (%li)", keychainFunction, (long)status]; - NSDictionary *userInfo = @{NSLocalizedFailureReasonErrorKey : failureReason}; - return [NSError errorWithDomain:kGULKeychainUtilsErrorDomain code:0 userInfo:userInfo]; -} - -@end diff --git a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Environment/third_party/GULAppEnvironmentUtil.m b/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Environment/third_party/GULAppEnvironmentUtil.m deleted file mode 100644 index 924b642acf..0000000000 --- a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Environment/third_party/GULAppEnvironmentUtil.m +++ /dev/null @@ -1,252 +0,0 @@ -// Copyright 2017 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "GoogleUtilities/Environment/Private/GULAppEnvironmentUtil.h" - -#import -#import -#import -#import - -#if TARGET_OS_IOS -#import -#endif - -/// The encryption info struct and constants are missing from the iPhoneSimulator SDK, but not from -/// the iPhoneOS or Mac OS X SDKs. Since one doesn't ever ship a Simulator binary, we'll just -/// provide the definitions here. -#if TARGET_OS_SIMULATOR && !defined(LC_ENCRYPTION_INFO) -#define LC_ENCRYPTION_INFO 0x21 -struct encryption_info_command { - uint32_t cmd; - uint32_t cmdsize; - uint32_t cryptoff; - uint32_t cryptsize; - uint32_t cryptid; -}; -#endif - -@implementation GULAppEnvironmentUtil - -/// A key for the Info.plist to enable or disable checking if the App Store is running in a sandbox. -/// This will affect your data integrity when using Firebase Analytics, as it will disable some -/// necessary checks. -static NSString *const kFIRAppStoreReceiptURLCheckEnabledKey = - @"FirebaseAppStoreReceiptURLCheckEnabled"; - -/// The file name of the sandbox receipt. This is available on iOS >= 8.0 -static NSString *const kFIRAIdentitySandboxReceiptFileName = @"sandboxReceipt"; - -/// The following copyright from Landon J. Fuller applies to the isAppEncrypted function. -/// -/// Copyright (c) 2017 Landon J. Fuller -/// All rights reserved. -/// -/// 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. -/// -/// Comment from iPhone Dev Wiki -/// Crack Prevention: -/// App Store binaries are signed by both their developer and Apple. This encrypts the binary so -/// that decryption keys are needed in order to make the binary readable. When iOS executes the -/// binary, the decryption keys are used to decrypt the binary into a readable state where it is -/// then loaded into memory and executed. iOS can tell the encryption status of a binary via the -/// cryptid structure member of LC_ENCRYPTION_INFO MachO load command. If cryptid is a non-zero -/// value then the binary is encrypted. -/// -/// 'Cracking' works by letting the kernel decrypt the binary then siphoning the decrypted data into -/// a new binary file, resigning, and repackaging. This will only work on jailbroken devices as -/// codesignature validation has been removed. Resigning takes place because while the codesignature -/// doesn't have to be valid thanks to the jailbreak, it does have to be in place unless you have -/// AppSync or similar to disable codesignature checks. -/// -/// More information at Landon Fuller's blog -static BOOL IsAppEncrypted() { - const struct mach_header *executableHeader = NULL; - for (uint32_t i = 0; i < _dyld_image_count(); i++) { - const struct mach_header *header = _dyld_get_image_header(i); - if (header && header->filetype == MH_EXECUTE) { - executableHeader = header; - break; - } - } - - if (!executableHeader) { - return NO; - } - - BOOL is64bit = (executableHeader->magic == MH_MAGIC_64); - uintptr_t cursor = (uintptr_t)executableHeader + - (is64bit ? sizeof(struct mach_header_64) : sizeof(struct mach_header)); - const struct segment_command *segmentCommand = NULL; - uint32_t i = 0; - - while (i++ < executableHeader->ncmds) { - segmentCommand = (struct segment_command *)cursor; - - if (!segmentCommand) { - continue; - } - - if ((!is64bit && segmentCommand->cmd == LC_ENCRYPTION_INFO) || - (is64bit && segmentCommand->cmd == LC_ENCRYPTION_INFO_64)) { - if (is64bit) { - struct encryption_info_command_64 *cryptCmd = - (struct encryption_info_command_64 *)segmentCommand; - return cryptCmd && cryptCmd->cryptid != 0; - } else { - struct encryption_info_command *cryptCmd = (struct encryption_info_command *)segmentCommand; - return cryptCmd && cryptCmd->cryptid != 0; - } - } - cursor += segmentCommand->cmdsize; - } - - return NO; -} - -static BOOL HasSCInfoFolder() { -#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_WATCH - NSString *bundlePath = [NSBundle mainBundle].bundlePath; - NSString *scInfoPath = [bundlePath stringByAppendingPathComponent:@"SC_Info"]; - return [[NSFileManager defaultManager] fileExistsAtPath:scInfoPath]; -#elif TARGET_OS_OSX - return NO; -#endif -} - -static BOOL HasEmbeddedMobileProvision() { -#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_WATCH - return [[NSBundle mainBundle] pathForResource:@"embedded" ofType:@"mobileprovision"].length > 0; -#elif TARGET_OS_OSX - return NO; -#endif -} - -+ (BOOL)isFromAppStore { - static dispatch_once_t isEncryptedOnce; - static BOOL isEncrypted = NO; - - dispatch_once(&isEncryptedOnce, ^{ - isEncrypted = IsAppEncrypted(); - }); - - if ([GULAppEnvironmentUtil isSimulator]) { - return NO; - } - - // If an app contain the sandboxReceipt file, it means its coming from TestFlight - // This must be checked before the SCInfo Folder check below since TestFlight apps may - // also have an SCInfo folder. - if ([GULAppEnvironmentUtil isAppStoreReceiptSandbox]) { - return NO; - } - - if (HasSCInfoFolder()) { - // When iTunes downloads a .ipa, it also gets a customized .sinf file which is added to the - // main SC_Info directory. - return YES; - } - - // For iOS >= 8.0, iTunesMetadata.plist is moved outside of the sandbox. Any attempt to read - // the iTunesMetadata.plist outside of the sandbox will be rejected by Apple. - // If the app does not contain the embedded.mobileprovision which is stripped out by Apple when - // the app is submitted to store, then it is highly likely that it is from Apple Store. - return isEncrypted && !HasEmbeddedMobileProvision(); -} - -+ (BOOL)isAppStoreReceiptSandbox { - // Since checking the App Store's receipt URL can be memory intensive, check the option in the - // Info.plist if developers opted out of this check. - id enableSandboxCheck = - [[NSBundle mainBundle] objectForInfoDictionaryKey:kFIRAppStoreReceiptURLCheckEnabledKey]; - if (enableSandboxCheck && [enableSandboxCheck isKindOfClass:[NSNumber class]] && - ![enableSandboxCheck boolValue]) { - return NO; - } - - NSURL *appStoreReceiptURL = [NSBundle mainBundle].appStoreReceiptURL; - NSString *appStoreReceiptFileName = appStoreReceiptURL.lastPathComponent; - return [appStoreReceiptFileName isEqualToString:kFIRAIdentitySandboxReceiptFileName]; -} - -+ (BOOL)isSimulator { -#if TARGET_OS_SIMULATOR - return YES; -#elif TARGET_OS_MACCATALYST - return NO; -#elif TARGET_OS_IOS || TARGET_OS_TV - NSString *platform = [GULAppEnvironmentUtil deviceModel]; - return [platform isEqual:@"x86_64"] || [platform isEqual:@"i386"]; -#elif TARGET_OS_OSX - return NO; -#endif - return NO; -} - -+ (NSString *)deviceModel { - static dispatch_once_t once; - static NSString *deviceModel; - - dispatch_once(&once, ^{ - struct utsname systemInfo; - if (uname(&systemInfo) == 0) { - deviceModel = [NSString stringWithUTF8String:systemInfo.machine]; - } - }); - return deviceModel; -} - -+ (NSString *)systemVersion { -#if TARGET_OS_IOS - return [UIDevice currentDevice].systemVersion; -#elif TARGET_OS_OSX || TARGET_OS_TV || TARGET_OS_WATCH - // Assemble the systemVersion, excluding the patch version if it's 0. - NSOperatingSystemVersion osVersion = [NSProcessInfo processInfo].operatingSystemVersion; - NSMutableString *versionString = [[NSMutableString alloc] - initWithFormat:@"%ld.%ld", (long)osVersion.majorVersion, (long)osVersion.minorVersion]; - if (osVersion.patchVersion != 0) { - [versionString appendFormat:@".%ld", (long)osVersion.patchVersion]; - } - return versionString; -#endif -} - -+ (BOOL)isAppExtension { -#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_WATCH - // Documented by Apple - BOOL appExtension = [[[NSBundle mainBundle] bundlePath] hasSuffix:@".appex"]; - return appExtension; -#elif TARGET_OS_OSX - return NO; -#endif -} - -+ (BOOL)isIOS7OrHigher { - return YES; -} - -@end diff --git a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/LICENSE b/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/LICENSE deleted file mode 100644 index 30a8f72520..0000000000 --- a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/LICENSE +++ /dev/null @@ -1,247 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -================================================================================ - -The following copyright from Landon J. Fuller applies to the isAppEncrypted -function in Environment/third_party/GULAppEnvironmentUtil.m. - -Copyright (c) 2017 Landon J. Fuller -All rights reserved. - -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. - -Comment from -iPhone Dev Wiki -Crack Prevention: App Store binaries are signed by both their developer -and Apple. This encrypts the binary so that decryption keys are needed in order -to make the binary readable. When iOS executes the binary, the decryption keys -are used to decrypt the binary into a readable state where it is then loaded -into memory and executed. iOS can tell the encryption status of a binary via the -cryptid structure member of LC_ENCRYPTION_INFO MachO load command. If cryptid is -a non-zero value then the binary is encrypted. - -'Cracking' works by letting the kernel decrypt the binary then siphoning the -decrypted data into a new binary file, resigning, and repackaging. This will -only work on jailbroken devices as codesignature validation has been removed. -Resigning takes place because while the codesignature doesn't have to be valid -thanks to the jailbreak, it does have to be in place unless you have AppSync or -similar to disable codesignature checks. - -More information at Landon -Fuller's blog diff --git a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Logger/GULLogger.m b/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Logger/GULLogger.m deleted file mode 100644 index 832435352c..0000000000 --- a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Logger/GULLogger.m +++ /dev/null @@ -1,220 +0,0 @@ -// Copyright 2018 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#if SWIFT_PACKAGE -// Need to import the public header here, since the module won't exist yet. -// Restructure the GULLogger headers for Firebase 7. -#import "GoogleUtilities/Logger/Public/GULLoggerLevel.h" -#endif - -#import "GoogleUtilities/Logger/Private/GULLogger.h" - -#include - -#import "GoogleUtilities/Environment/Private/GULAppEnvironmentUtil.h" -#import "GoogleUtilities/Logger/Public/GULLoggerLevel.h" - -/// ASL client facility name used by GULLogger. -const char *kGULLoggerASLClientFacilityName = "com.google.utilities.logger"; - -static dispatch_once_t sGULLoggerOnceToken; - -static aslclient sGULLoggerClient; - -static dispatch_queue_t sGULClientQueue; - -static BOOL sGULLoggerDebugMode; - -static GULLoggerLevel sGULLoggerMaximumLevel; - -// Allow clients to register a version to include in the log. -static const char *sVersion = ""; - -static GULLoggerService kGULLoggerLogger = @"[GULLogger]"; - -#ifdef DEBUG -/// The regex pattern for the message code. -static NSString *const kMessageCodePattern = @"^I-[A-Z]{3}[0-9]{6}$"; -static NSRegularExpression *sMessageCodeRegex; -#endif - -void GULLoggerInitializeASL(void) { - dispatch_once(&sGULLoggerOnceToken, ^{ - NSInteger majorOSVersion = [[GULAppEnvironmentUtil systemVersion] integerValue]; - uint32_t aslOptions = ASL_OPT_STDERR; -#if TARGET_OS_SIMULATOR - // The iOS 11 simulator doesn't need the ASL_OPT_STDERR flag. - if (majorOSVersion >= 11) { - aslOptions = 0; - } -#else - // Devices running iOS 10 or higher don't need the ASL_OPT_STDERR flag. - if (majorOSVersion >= 10) { - aslOptions = 0; - } -#endif // TARGET_OS_SIMULATOR - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" // asl is deprecated - // Initialize the ASL client handle. - sGULLoggerClient = asl_open(NULL, kGULLoggerASLClientFacilityName, aslOptions); - sGULLoggerMaximumLevel = GULLoggerLevelNotice; - - // Set the filter used by system/device log. Initialize in default mode. - asl_set_filter(sGULLoggerClient, ASL_FILTER_MASK_UPTO(ASL_LEVEL_NOTICE)); - - sGULClientQueue = dispatch_queue_create("GULLoggingClientQueue", DISPATCH_QUEUE_SERIAL); - dispatch_set_target_queue(sGULClientQueue, - dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0)); -#ifdef DEBUG - sMessageCodeRegex = [NSRegularExpression regularExpressionWithPattern:kMessageCodePattern - options:0 - error:NULL]; -#endif - }); -} - -void GULLoggerEnableSTDERR(void) { - asl_add_log_file(sGULLoggerClient, STDERR_FILENO); -} - -void GULLoggerForceDebug(void) { - // We should enable debug mode if we're not running from App Store. - if (![GULAppEnvironmentUtil isFromAppStore]) { - sGULLoggerDebugMode = YES; - GULSetLoggerLevel(GULLoggerLevelDebug); - } -} - -__attribute__((no_sanitize("thread"))) void GULSetLoggerLevel(GULLoggerLevel loggerLevel) { - if (loggerLevel < GULLoggerLevelMin || loggerLevel > GULLoggerLevelMax) { - GULLogError(kGULLoggerLogger, NO, @"I-COR000023", @"Invalid logger level, %ld", - (long)loggerLevel); - return; - } - GULLoggerInitializeASL(); - // We should not raise the logger level if we are running from App Store. - if (loggerLevel >= GULLoggerLevelNotice && [GULAppEnvironmentUtil isFromAppStore]) { - return; - } - - sGULLoggerMaximumLevel = loggerLevel; - dispatch_async(sGULClientQueue, ^{ - asl_set_filter(sGULLoggerClient, ASL_FILTER_MASK_UPTO(loggerLevel)); - }); -} - -/** - * Check if the level is high enough to be loggable. - */ -__attribute__((no_sanitize("thread"))) BOOL GULIsLoggableLevel(GULLoggerLevel loggerLevel) { - GULLoggerInitializeASL(); - if (sGULLoggerDebugMode) { - return YES; - } - return (BOOL)(loggerLevel <= sGULLoggerMaximumLevel); -} - -#ifdef DEBUG -void GULResetLogger() { - sGULLoggerOnceToken = 0; -} - -aslclient getGULLoggerClient() { - return sGULLoggerClient; -} - -dispatch_queue_t getGULClientQueue() { - return sGULClientQueue; -} - -BOOL getGULLoggerDebugMode() { - return sGULLoggerDebugMode; -} -#endif - -void GULLoggerRegisterVersion(const char *version) { - sVersion = version; -} - -void GULLogBasic(GULLoggerLevel level, - GULLoggerService service, - BOOL forceLog, - NSString *messageCode, - NSString *message, - va_list args_ptr) { - GULLoggerInitializeASL(); - if (!(level <= sGULLoggerMaximumLevel || sGULLoggerDebugMode || forceLog)) { - return; - } - -#ifdef DEBUG - NSCAssert(messageCode.length == 11, @"Incorrect message code length."); - NSRange messageCodeRange = NSMakeRange(0, messageCode.length); - NSUInteger numberOfMatches = [sMessageCodeRegex numberOfMatchesInString:messageCode - options:0 - range:messageCodeRange]; - NSCAssert(numberOfMatches == 1, @"Incorrect message code format."); -#endif - NSString *logMsg; - if (args_ptr == NULL) { - logMsg = message; - } else { - logMsg = [[NSString alloc] initWithFormat:message arguments:args_ptr]; - } - logMsg = [NSString stringWithFormat:@"%s - %@[%@] %@", sVersion, service, messageCode, logMsg]; - dispatch_async(sGULClientQueue, ^{ - asl_log(sGULLoggerClient, NULL, (int)level, "%s", logMsg.UTF8String); - }); -} -#pragma clang diagnostic pop - -/** - * Generates the logging functions using macros. - * - * Calling GULLogError({service}, @"I-XYZ000001", @"Configure %@ failed.", @"blah") shows: - * yyyy-mm-dd hh:mm:ss.SSS sender[PID] [{service}][I-XYZ000001] Configure blah failed. - * Calling GULLogDebug({service}, @"I-XYZ000001", @"Configure succeed.") shows: - * yyyy-mm-dd hh:mm:ss.SSS sender[PID] [{service}][I-XYZ000001] Configure succeed. - */ -#define GUL_LOGGING_FUNCTION(level) \ - void GULLog##level(GULLoggerService service, BOOL force, NSString *messageCode, \ - NSString *message, ...) { \ - va_list args_ptr; \ - va_start(args_ptr, message); \ - GULLogBasic(GULLoggerLevel##level, service, force, messageCode, message, args_ptr); \ - va_end(args_ptr); \ - } - -GUL_LOGGING_FUNCTION(Error) -GUL_LOGGING_FUNCTION(Warning) -GUL_LOGGING_FUNCTION(Notice) -GUL_LOGGING_FUNCTION(Info) -GUL_LOGGING_FUNCTION(Debug) - -#undef GUL_MAKE_LOGGER - -#pragma mark - GULLoggerWrapper - -@implementation GULLoggerWrapper - -+ (void)logWithLevel:(GULLoggerLevel)level - withService:(GULLoggerService)service - withCode:(NSString *)messageCode - withMessage:(NSString *)message - withArgs:(va_list)args { - GULLogBasic(level, service, NO, messageCode, message, args); -} - -@end diff --git a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Logger/Private/GULLogger.h b/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Logger/Private/GULLogger.h deleted file mode 100644 index 1146ee238d..0000000000 --- a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Logger/Private/GULLogger.h +++ /dev/null @@ -1,163 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -#if SWIFT_PACKAGE -@import GoogleUtilities_Logger; -#else -#import -#endif - -NS_ASSUME_NONNULL_BEGIN - -/** - * The services used in the logger. - */ -typedef NSString *const GULLoggerService; - -#ifdef __cplusplus -extern "C" { -#endif // __cplusplus - -/** - * Initialize GULLogger. - */ -extern void GULLoggerInitializeASL(void); - -/** - * Override log level to Debug. - */ -void GULLoggerForceDebug(void); - -/** - * Turn on logging to STDERR. - */ -extern void GULLoggerEnableSTDERR(void); - -/** - * Changes the default logging level of GULLoggerLevelNotice to a user-specified level. - * The default level cannot be set above GULLoggerLevelNotice if the app is running from App Store. - * (required) log level (one of the GULLoggerLevel enum values). - */ -extern void GULSetLoggerLevel(GULLoggerLevel loggerLevel); - -/** - * Checks if the specified logger level is loggable given the current settings. - * (required) log level (one of the GULLoggerLevel enum values). - */ -extern BOOL GULIsLoggableLevel(GULLoggerLevel loggerLevel); - -/** - * Register version to include in logs. - * (required) version - */ -extern void GULLoggerRegisterVersion(const char *version); - -/** - * Logs a message to the Xcode console and the device log. If running from AppStore, will - * not log any messages with a level higher than GULLoggerLevelNotice to avoid log spamming. - * (required) log level (one of the GULLoggerLevel enum values). - * (required) service name of type GULLoggerService. - * (required) message code starting with "I-" which means iOS, followed by a capitalized - * three-character service identifier and a six digit integer message ID that is unique - * within the service. - * An example of the message code is @"I-COR000001". - * (required) message string which can be a format string. - * (optional) variable arguments list obtained from calling va_start, used when message is a format - * string. - */ -extern void GULLogBasic(GULLoggerLevel level, - GULLoggerService service, - BOOL forceLog, - NSString *messageCode, - NSString *message, -// On 64-bit simulators, va_list is not a pointer, so cannot be marked nullable -// See: http://stackoverflow.com/q/29095469 -#if __LP64__ && TARGET_OS_SIMULATOR || TARGET_OS_OSX - va_list args_ptr -#else - va_list _Nullable args_ptr -#endif -); - -/** - * The following functions accept the following parameters in order: - * (required) service name of type GULLoggerService. - * (required) message code starting from "I-" which means iOS, followed by a capitalized - * three-character service identifier and a six digit integer message ID that is unique - * within the service. - * An example of the message code is @"I-COR000001". - * See go/firebase-log-proposal for details. - * (required) message string which can be a format string. - * (optional) the list of arguments to substitute into the format string. - * Example usage: - * GULLogError(kGULLoggerCore, @"I-COR000001", @"Configuration of %@ failed.", app.name); - */ -extern void GULLogError(GULLoggerService service, - BOOL force, - NSString *messageCode, - NSString *message, - ...) NS_FORMAT_FUNCTION(4, 5); -extern void GULLogWarning(GULLoggerService service, - BOOL force, - NSString *messageCode, - NSString *message, - ...) NS_FORMAT_FUNCTION(4, 5); -extern void GULLogNotice(GULLoggerService service, - BOOL force, - NSString *messageCode, - NSString *message, - ...) NS_FORMAT_FUNCTION(4, 5); -extern void GULLogInfo(GULLoggerService service, - BOOL force, - NSString *messageCode, - NSString *message, - ...) NS_FORMAT_FUNCTION(4, 5); -extern void GULLogDebug(GULLoggerService service, - BOOL force, - NSString *messageCode, - NSString *message, - ...) NS_FORMAT_FUNCTION(4, 5); - -#ifdef __cplusplus -} // extern "C" -#endif // __cplusplus - -@interface GULLoggerWrapper : NSObject - -/** - * Objective-C wrapper for GULLogBasic to allow weak linking to GULLogger - * (required) log level (one of the GULLoggerLevel enum values). - * (required) service name of type GULLoggerService. - * (required) message code starting with "I-" which means iOS, followed by a capitalized - * three-character service identifier and a six digit integer message ID that is unique - * within the service. - * An example of the message code is @"I-COR000001". - * (required) message string which can be a format string. - * (optional) variable arguments list obtained from calling va_start, used when message is a format - * string. - */ - -+ (void)logWithLevel:(GULLoggerLevel)level - withService:(GULLoggerService)service - withCode:(NSString *)messageCode - withMessage:(NSString *)message - withArgs:(va_list)args; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Logger/Public/GULLoggerLevel.h b/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Logger/Public/GULLoggerLevel.h deleted file mode 100644 index f0ee435b8f..0000000000 --- a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Logger/Public/GULLoggerLevel.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright 2018 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -/** - * The log levels used by internal logging. - */ -typedef NS_ENUM(NSInteger, GULLoggerLevel) { - /** Error level, matches ASL_LEVEL_ERR. */ - GULLoggerLevelError = 3, - /** Warning level, matches ASL_LEVEL_WARNING. */ - GULLoggerLevelWarning = 4, - /** Notice level, matches ASL_LEVEL_NOTICE. */ - GULLoggerLevelNotice = 5, - /** Info level, matches ASL_LEVEL_INFO. */ - GULLoggerLevelInfo = 6, - /** Debug level, matches ASL_LEVEL_DEBUG. */ - GULLoggerLevelDebug = 7, - /** Minimum log level. */ - GULLoggerLevelMin = GULLoggerLevelError, - /** Maximum log level. */ - GULLoggerLevelMax = GULLoggerLevelDebug -} NS_SWIFT_NAME(GoogleLoggerLevel); diff --git a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/MethodSwizzler/GULSwizzler.m b/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/MethodSwizzler/GULSwizzler.m deleted file mode 100644 index 040da26889..0000000000 --- a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/MethodSwizzler/GULSwizzler.m +++ /dev/null @@ -1,153 +0,0 @@ -// Copyright 2018 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "GoogleUtilities/MethodSwizzler/Private/GULSwizzler.h" - -#import - -#ifdef DEBUG -#import "GoogleUtilities/Common/GULLoggerCodes.h" -#import "GoogleUtilities/Logger/Private/GULLogger.h" - -static GULLoggerService kGULLoggerSwizzler = @"[GoogleUtilities/MethodSwizzler]"; -#endif - -dispatch_queue_t GetGULSwizzlingQueue(void) { - static dispatch_queue_t queue; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - queue = dispatch_queue_create("com.google.GULSwizzler", DISPATCH_QUEUE_SERIAL); - }); - return queue; -} - -@implementation GULSwizzler - -+ (void)swizzleClass:(Class)aClass - selector:(SEL)selector - isClassSelector:(BOOL)isClassSelector - withBlock:(nullable id)block { - dispatch_sync(GetGULSwizzlingQueue(), ^{ - NSAssert(selector, @"The selector cannot be NULL"); - NSAssert(aClass, @"The class cannot be Nil"); - Class resolvedClass = aClass; - Method method = nil; - if (isClassSelector) { - method = class_getClassMethod(aClass, selector); - resolvedClass = object_getClass(aClass); - } else { - method = class_getInstanceMethod(aClass, selector); - } - NSAssert(method, @"You're attempting to swizzle a method that doesn't exist. (%@, %@)", - NSStringFromClass(resolvedClass), NSStringFromSelector(selector)); - IMP newImp = imp_implementationWithBlock(block); -#ifdef DEBUG - IMP currentImp = class_getMethodImplementation(resolvedClass, selector); - Class class = NSClassFromString(@"GULSwizzlingCache"); - if (class) { - SEL cacheSelector = NSSelectorFromString(@"cacheCurrentIMP:forNewIMP:forClass:withSelector:"); - NSMethodSignature *methodSignature = [class methodSignatureForSelector:cacheSelector]; - if (methodSignature != nil) { - NSInvocation *inv = [NSInvocation invocationWithMethodSignature:methodSignature]; - [inv setSelector:cacheSelector]; - [inv setTarget:class]; - [inv setArgument:&(currentImp) atIndex:2]; - [inv setArgument:&(newImp) atIndex:3]; - [inv setArgument:&(resolvedClass) atIndex:4]; - [inv setArgument:(void *_Nonnull) & (selector) atIndex:5]; - [inv invoke]; - } - } -#endif - - const char *typeEncoding = method_getTypeEncoding(method); - __unused IMP originalImpOfClass = - class_replaceMethod(resolvedClass, selector, newImp, typeEncoding); - -#ifdef DEBUG - // If !originalImpOfClass, then the IMP came from a superclass. - if (originalImpOfClass) { - SEL selector = NSSelectorFromString(@"originalIMPOfCurrentIMP:"); - NSMethodSignature *methodSignature = [class methodSignatureForSelector:selector]; - if (methodSignature != nil) { - NSInvocation *inv = [NSInvocation invocationWithMethodSignature:methodSignature]; - [inv setSelector:selector]; - [inv setTarget:class]; - [inv setArgument:&(currentImp) atIndex:2]; - [inv invoke]; - IMP testOriginal; - [inv getReturnValue:&testOriginal]; - if (originalImpOfClass != testOriginal) { - GULLogWarning(kGULLoggerSwizzler, NO, - [NSString stringWithFormat:@"I-SWZ%06ld", - (long)kGULSwizzlerMessageCodeMethodSwizzling000], - @"Swizzling class: %@ SEL:%@ after it has been previously been swizzled.", - NSStringFromClass(resolvedClass), NSStringFromSelector(selector)); - } - } - } -#endif - }); -} - -+ (nullable IMP)currentImplementationForClass:(Class)aClass - selector:(SEL)selector - isClassSelector:(BOOL)isClassSelector { - NSAssert(selector, @"The selector cannot be NULL"); - NSAssert(aClass, @"The class cannot be Nil"); - if (selector == NULL || aClass == nil) { - return nil; - } - __block IMP currentIMP = nil; - dispatch_sync(GetGULSwizzlingQueue(), ^{ - Method method = nil; - if (isClassSelector) { - method = class_getClassMethod(aClass, selector); - } else { - method = class_getInstanceMethod(aClass, selector); - } - NSAssert(method, @"The Method for this class/selector combo doesn't exist (%@, %@).", - NSStringFromClass(aClass), NSStringFromSelector(selector)); - if (method == nil) { - return; - } - currentIMP = method_getImplementation(method); - NSAssert(currentIMP, @"The IMP for this class/selector combo doesn't exist (%@, %@).", - NSStringFromClass(aClass), NSStringFromSelector(selector)); - }); - return currentIMP; -} - -+ (BOOL)selector:(SEL)selector existsInClass:(Class)aClass isClassSelector:(BOOL)isClassSelector { - Method method = isClassSelector ? class_getClassMethod(aClass, selector) - : class_getInstanceMethod(aClass, selector); - return method != nil; -} - -+ (NSArray *)ivarObjectsForObject:(id)object { - NSMutableArray *array = [NSMutableArray array]; - unsigned int count; - Ivar *vars = class_copyIvarList([object class], &count); - for (NSUInteger i = 0; i < count; i++) { - const char *typeEncoding = ivar_getTypeEncoding(vars[i]); - // Check to see if the ivar is an object. - if (strncmp(typeEncoding, "@", 1) == 0) { - id ivarObject = object_getIvar(object, vars[i]); - [array addObject:ivarObject]; - } - } - free(vars); - return array; -} -@end diff --git a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/MethodSwizzler/Private/GULOriginalIMPConvenienceMacros.h b/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/MethodSwizzler/Private/GULOriginalIMPConvenienceMacros.h deleted file mode 100644 index a33262af09..0000000000 --- a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/MethodSwizzler/Private/GULOriginalIMPConvenienceMacros.h +++ /dev/null @@ -1,207 +0,0 @@ -/* - * Copyright 2018 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * GULOriginalIMPConvenienceMacros.h - * - * This header contains convenience macros for invoking the original IMP of a swizzled method. - */ - -/** - * Invokes original IMP when the original selector takes no arguments. - * - * @param __receivingObject The object on which the IMP is invoked. - * @param __swizzledSEL The selector used for swizzling. - * @param __returnType The return type of the original implementation. - * @param __originalIMP The original IMP. - */ -#define GUL_INVOKE_ORIGINAL_IMP0(__receivingObject, __swizzledSEL, __returnType, __originalIMP) \ - ((__returnType(*)(id, SEL))__originalIMP)(__receivingObject, __swizzledSEL) - -/** - * Invokes original IMP when the original selector takes 1 argument. - * - * @param __receivingObject The object on which the IMP is invoked. - * @param __swizzledSEL The selector used for swizzling. - * @param __returnType The return type of the original implementation. - * @param __originalIMP The original IMP. - * @param __arg1 The first argument. - */ -#define GUL_INVOKE_ORIGINAL_IMP1(__receivingObject, __swizzledSEL, __returnType, __originalIMP, \ - __arg1) \ - ((__returnType(*)(id, SEL, __typeof__(__arg1)))__originalIMP)(__receivingObject, __swizzledSEL, \ - __arg1) - -/** - * Invokes original IMP when the original selector takes 2 arguments. - * - * @param __receivingObject The object on which the IMP is invoked. - * @param __swizzledSEL The selector used for swizzling. - * @param __returnType The return type of the original implementation. - * @param __originalIMP The original IMP. - * @param __arg1 The first argument. - * @param __arg2 The second argument. - */ -#define GUL_INVOKE_ORIGINAL_IMP2(__receivingObject, __swizzledSEL, __returnType, __originalIMP, \ - __arg1, __arg2) \ - ((__returnType(*)(id, SEL, __typeof__(__arg1), __typeof__(__arg2)))__originalIMP)( \ - __receivingObject, __swizzledSEL, __arg1, __arg2) - -/** - * Invokes original IMP when the original selector takes 3 arguments. - * - * @param __receivingObject The object on which the IMP is invoked. - * @param __swizzledSEL The selector used for swizzling. - * @param __returnType The return type of the original implementation. - * @param __originalIMP The original IMP. - * @param __arg1 The first argument. - * @param __arg2 The second argument. - * @param __arg3 The third argument. - */ -#define GUL_INVOKE_ORIGINAL_IMP3(__receivingObject, __swizzledSEL, __returnType, __originalIMP, \ - __arg1, __arg2, __arg3) \ - ((__returnType(*)(id, SEL, __typeof__(__arg1), __typeof__(__arg2), \ - __typeof__(__arg3)))__originalIMP)(__receivingObject, __swizzledSEL, __arg1, \ - __arg2, __arg3) - -/** - * Invokes original IMP when the original selector takes 4 arguments. - * - * @param __receivingObject The object on which the IMP is invoked. - * @param __swizzledSEL The selector used for swizzling. - * @param __returnType The return type of the original implementation. - * @param __originalIMP The original IMP. - * @param __arg1 The first argument. - * @param __arg2 The second argument. - * @param __arg3 The third argument. - * @param __arg4 The fourth argument. - */ -#define GUL_INVOKE_ORIGINAL_IMP4(__receivingObject, __swizzledSEL, __returnType, __originalIMP, \ - __arg1, __arg2, __arg3, __arg4) \ - ((__returnType(*)(id, SEL, __typeof__(__arg1), __typeof__(__arg2), __typeof__(__arg3), \ - __typeof__(__arg4)))__originalIMP)(__receivingObject, __swizzledSEL, __arg1, \ - __arg2, __arg3, __arg4) - -/** - * Invokes original IMP when the original selector takes 5 arguments. - * - * @param __receivingObject The object on which the IMP is invoked. - * @param __swizzledSEL The selector used for swizzling. - * @param __returnType The return type of the original implementation. - * @param __originalIMP The original IMP. - * @param __arg1 The first argument. - * @param __arg2 The second argument. - * @param __arg3 The third argument. - * @param __arg4 The fourth argument. - * @param __arg5 The fifth argument. - */ -#define GUL_INVOKE_ORIGINAL_IMP5(__receivingObject, __swizzledSEL, __returnType, __originalIMP, \ - __arg1, __arg2, __arg3, __arg4, __arg5) \ - ((__returnType(*)(id, SEL, __typeof__(__arg1), __typeof__(__arg2), __typeof__(__arg3), \ - __typeof__(__arg4), __typeof__(__arg5)))__originalIMP)( \ - __receivingObject, __swizzledSEL, __arg1, __arg2, __arg3, __arg4, __arg5) - -/** - * Invokes original IMP when the original selector takes 6 arguments. - * - * @param __receivingObject The object on which the IMP is invoked. - * @param __swizzledSEL The selector used for swizzling. - * @param __returnType The return type of the original implementation. - * @param __originalIMP The original IMP. - * @param __arg1 The first argument. - * @param __arg2 The second argument. - * @param __arg3 The third argument. - * @param __arg4 The fourth argument. - * @param __arg5 The fifth argument. - * @param __arg6 The sixth argument. - */ -#define GUL_INVOKE_ORIGINAL_IMP6(__receivingObject, __swizzledSEL, __returnType, __originalIMP, \ - __arg1, __arg2, __arg3, __arg4, __arg5, __arg6) \ - ((__returnType(*)(id, SEL, __typeof__(__arg1), __typeof__(__arg2), __typeof__(__arg3), \ - __typeof__(__arg4), __typeof__(__arg5), __typeof__(__arg6)))__originalIMP)( \ - __receivingObject, __swizzledSEL, __arg1, __arg2, __arg3, __arg4, __arg5, __arg6) - -/** - * Invokes original IMP when the original selector takes 7 arguments. - * - * @param __receivingObject The object on which the IMP is invoked. - * @param __swizzledSEL The selector used for swizzling. - * @param __returnType The return type of the original implementation. - * @param __originalIMP The original IMP. - * @param __arg1 The first argument. - * @param __arg2 The second argument. - * @param __arg3 The third argument. - * @param __arg4 The fourth argument. - * @param __arg5 The fifth argument. - * @param __arg6 The sixth argument. - * @param __arg7 The seventh argument. - */ -#define GUL_INVOKE_ORIGINAL_IMP7(__receivingObject, __swizzledSEL, __returnType, __originalIMP, \ - __arg1, __arg2, __arg3, __arg4, __arg5, __arg6, __arg7) \ - ((__returnType(*)(id, SEL, __typeof__(__arg1), __typeof__(__arg2), __typeof__(__arg3), \ - __typeof__(__arg4), __typeof__(__arg5), __typeof__(__arg6), \ - __typeof__(__arg7)))__originalIMP)( \ - __receivingObject, __swizzledSEL, __arg1, __arg2, __arg3, __arg4, __arg5, __arg6, __arg7) - -/** - * Invokes original IMP when the original selector takes 8 arguments. - * - * @param __receivingObject The object on which the IMP is invoked. - * @param __swizzledSEL The selector used for swizzling. - * @param __returnType The return type of the original implementation. - * @param __originalIMP The original IMP. - * @param __arg1 The first argument. - * @param __arg2 The second argument. - * @param __arg3 The third argument. - * @param __arg4 The fourth argument. - * @param __arg5 The fifth argument. - * @param __arg6 The sixth argument. - * @param __arg7 The seventh argument. - * @param __arg8 The eighth argument. - */ -#define GUL_INVOKE_ORIGINAL_IMP8(__receivingObject, __swizzledSEL, __returnType, __originalIMP, \ - __arg1, __arg2, __arg3, __arg4, __arg5, __arg6, __arg7, __arg8) \ - ((__returnType(*)(id, SEL, __typeof__(__arg1), __typeof__(__arg2), __typeof__(__arg3), \ - __typeof__(__arg4), __typeof__(__arg5), __typeof__(__arg6), \ - __typeof__(__arg7), __typeof__(__arg8)))__originalIMP)( \ - __receivingObject, __swizzledSEL, __arg1, __arg2, __arg3, __arg4, __arg5, __arg6, __arg7, \ - __arg8) - -/** - * Invokes original IMP when the original selector takes 9 arguments. - * - * @param __receivingObject The object on which the IMP is invoked. - * @param __swizzledSEL The selector used for swizzling. - * @param __returnType The return type of the original implementation. - * @param __originalIMP The original IMP. - * @param __arg1 The first argument. - * @param __arg2 The second argument. - * @param __arg3 The third argument. - * @param __arg4 The fourth argument. - * @param __arg5 The fifth argument. - * @param __arg6 The sixth argument. - * @param __arg7 The seventh argument. - * @param __arg8 The eighth argument. - * @param __arg9 The ninth argument. - */ -#define GUL_INVOKE_ORIGINAL_IMP9(__receivingObject, __swizzledSEL, __returnType, __originalIMP, \ - __arg1, __arg2, __arg3, __arg4, __arg5, __arg6, __arg7, __arg8, \ - __arg9) \ - ((__returnType(*)(id, SEL, __typeof__(__arg1), __typeof__(__arg2), __typeof__(__arg3), \ - __typeof__(__arg4), __typeof__(__arg5), __typeof__(__arg6), \ - __typeof__(__arg7), __typeof__(__arg8), __typeof__(__arg9)))__originalIMP)( \ - __receivingObject, __swizzledSEL, __arg1, __arg2, __arg3, __arg4, __arg5, __arg6, __arg7, \ - __arg8, __arg9) diff --git a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/MethodSwizzler/Private/GULSwizzler.h b/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/MethodSwizzler/Private/GULSwizzler.h deleted file mode 100644 index 26949c8867..0000000000 --- a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/MethodSwizzler/Private/GULSwizzler.h +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright 2018 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** This class handles the runtime manipulation necessary to instrument selectors. It stores the - * classes and selectors that have been swizzled, and runs all operations on its own queue. - */ -@interface GULSwizzler : NSObject - -/** Manipulates the Objective-C runtime to replace the original IMP with the supplied block. - * - * @param aClass The class to swizzle. - * @param selector The selector of the class to swizzle. - * @param isClassSelector A BOOL specifying whether the selector is a class or instance selector. - * @param block The block that replaces the original IMP. - */ -+ (void)swizzleClass:(Class)aClass - selector:(SEL)selector - isClassSelector:(BOOL)isClassSelector - withBlock:(nullable id)block; - -/** Returns the current IMP for the given class and selector. - * - * @param aClass The class to use. - * @param selector The selector to find the implementation of. - * @param isClassSelector A BOOL specifying whether the selector is a class or instance selector. - * @return The implementation of the selector in the runtime. - */ -+ (nullable IMP)currentImplementationForClass:(Class)aClass - selector:(SEL)selector - isClassSelector:(BOOL)isClassSelector; - -/** Checks the runtime to see if a selector exists on a class. If a property is declared as - * @dynamic, we have a reverse swizzling situation, where the implementation of a method exists - * only in concrete subclasses, and NOT in the superclass. We can detect that situation using - * this helper method. Similarly, we can detect situations where a class doesn't implement a - * protocol method. - * - * @param selector The selector to check for. - * @param aClass The class to check. - * @param isClassSelector A BOOL specifying whether the selector is a class or instance selector. - * @return YES if the method was found in this selector/class combination, NO otherwise. - */ -+ (BOOL)selector:(SEL)selector existsInClass:(Class)aClass isClassSelector:(BOOL)isClassSelector; - -/** Returns a list of all Objective-C (and not primitive) ivars contained by the given object. - * - * @param object The object whose ivars will be iterated. - * @return The list of ivar objects. - */ -+ (NSArray *)ivarObjectsForObject:(id)object; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/NSData+zlib/GULNSData+zlib.m b/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/NSData+zlib/GULNSData+zlib.m deleted file mode 100644 index 5eb638d6bc..0000000000 --- a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/NSData+zlib/GULNSData+zlib.m +++ /dev/null @@ -1,207 +0,0 @@ -// Copyright 2018 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "GoogleUtilities/NSData+zlib/Public/GULNSData+zlib.h" - -#import - -#define kChunkSize 1024 -#define Z_DEFAULT_COMPRESSION (-1) - -NSString *const GULNSDataZlibErrorDomain = @"com.google.GULNSDataZlibErrorDomain"; -NSString *const GULNSDataZlibErrorKey = @"GULNSDataZlibErrorKey"; -NSString *const GULNSDataZlibRemainingBytesKey = @"GULNSDataZlibRemainingBytesKey"; - -@implementation NSData (GULGzip) - -+ (NSData *)gul_dataByInflatingGzippedData:(NSData *)data error:(NSError **)error { - const void *bytes = [data bytes]; - NSUInteger length = [data length]; - if (!bytes || !length) { - return nil; - } - -#if defined(__LP64__) && __LP64__ - // Don't support > 32bit length for 64 bit, see note in header. - if (length > UINT_MAX) { - return nil; - } -#endif - - z_stream strm; - bzero(&strm, sizeof(z_stream)); - - // Setup the input. - strm.avail_in = (unsigned int)length; - strm.next_in = (unsigned char *)bytes; - - int windowBits = 15; // 15 to enable any window size - windowBits += 32; // and +32 to enable zlib or gzip header detection. - - int retCode; - if ((retCode = inflateInit2(&strm, windowBits)) != Z_OK) { - if (error) { - NSDictionary *userInfo = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:retCode] - forKey:GULNSDataZlibErrorKey]; - *error = [NSError errorWithDomain:GULNSDataZlibErrorDomain - code:GULNSDataZlibErrorInternal - userInfo:userInfo]; - } - return nil; - } - - // Hint the size at 4x the input size. - NSMutableData *result = [NSMutableData dataWithCapacity:(length * 4)]; - unsigned char output[kChunkSize]; - - // Loop to collect the data. - do { - // Update what we're passing in. - strm.avail_out = kChunkSize; - strm.next_out = output; - retCode = inflate(&strm, Z_NO_FLUSH); - if ((retCode != Z_OK) && (retCode != Z_STREAM_END)) { - if (error) { - NSMutableDictionary *userInfo = - [NSMutableDictionary dictionaryWithObject:[NSNumber numberWithInt:retCode] - forKey:GULNSDataZlibErrorKey]; - if (strm.msg) { - NSString *message = [NSString stringWithUTF8String:strm.msg]; - if (message) { - [userInfo setObject:message forKey:NSLocalizedDescriptionKey]; - } - } - *error = [NSError errorWithDomain:GULNSDataZlibErrorDomain - code:GULNSDataZlibErrorInternal - userInfo:userInfo]; - } - inflateEnd(&strm); - return nil; - } - // Collect what we got. - unsigned gotBack = kChunkSize - strm.avail_out; - if (gotBack > 0) { - [result appendBytes:output length:gotBack]; - } - - } while (retCode == Z_OK); - - // Make sure there wasn't more data tacked onto the end of a valid compressed stream. - if (strm.avail_in != 0) { - if (error) { - NSDictionary *userInfo = - [NSDictionary dictionaryWithObject:[NSNumber numberWithUnsignedInt:strm.avail_in] - forKey:GULNSDataZlibRemainingBytesKey]; - *error = [NSError errorWithDomain:GULNSDataZlibErrorDomain - code:GULNSDataZlibErrorDataRemaining - userInfo:userInfo]; - } - result = nil; - } - // The only way out of the loop was by hitting the end of the stream. - NSAssert(retCode == Z_STREAM_END, - @"Thought we finished inflate w/o getting a result of stream end, code %d", retCode); - - // Clean up. - inflateEnd(&strm); - - return result; -} - -+ (NSData *)gul_dataByGzippingData:(NSData *)data error:(NSError **)error { - const void *bytes = [data bytes]; - NSUInteger length = [data length]; - - int level = Z_DEFAULT_COMPRESSION; - if (!bytes || !length) { - return nil; - } - -#if defined(__LP64__) && __LP64__ - // Don't support > 32bit length for 64 bit, see note in header. - if (length > UINT_MAX) { - if (error) { - *error = [NSError errorWithDomain:GULNSDataZlibErrorDomain - code:GULNSDataZlibErrorGreaterThan32BitsToCompress - userInfo:nil]; - } - return nil; - } -#endif - - z_stream strm; - bzero(&strm, sizeof(z_stream)); - - int memLevel = 8; // Default. - int windowBits = 15 + 16; // Enable gzip header instead of zlib header. - - int retCode; - if ((retCode = deflateInit2(&strm, level, Z_DEFLATED, windowBits, memLevel, - Z_DEFAULT_STRATEGY)) != Z_OK) { - if (error) { - NSDictionary *userInfo = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:retCode] - forKey:GULNSDataZlibErrorKey]; - *error = [NSError errorWithDomain:GULNSDataZlibErrorDomain - code:GULNSDataZlibErrorInternal - userInfo:userInfo]; - } - return nil; - } - - // Hint the size at 1/4 the input size. - NSMutableData *result = [NSMutableData dataWithCapacity:(length / 4)]; - unsigned char output[kChunkSize]; - - // Setup the input. - strm.avail_in = (unsigned int)length; - strm.next_in = (unsigned char *)bytes; - - // Collect the data. - do { - // update what we're passing in - strm.avail_out = kChunkSize; - strm.next_out = output; - retCode = deflate(&strm, Z_FINISH); - if ((retCode != Z_OK) && (retCode != Z_STREAM_END)) { - if (error) { - NSDictionary *userInfo = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:retCode] - forKey:GULNSDataZlibErrorKey]; - *error = [NSError errorWithDomain:GULNSDataZlibErrorDomain - code:GULNSDataZlibErrorInternal - userInfo:userInfo]; - } - deflateEnd(&strm); - return nil; - } - // Collect what we got. - unsigned gotBack = kChunkSize - strm.avail_out; - if (gotBack > 0) { - [result appendBytes:output length:gotBack]; - } - - } while (retCode == Z_OK); - - // If the loop exits, it used all input and the stream ended. - NSAssert(strm.avail_in == 0, - @"Should have finished deflating without using all input, %u bytes left", strm.avail_in); - NSAssert(retCode == Z_STREAM_END, - @"thought we finished deflate w/o getting a result of stream end, code %d", retCode); - - // Clean up. - deflateEnd(&strm); - - return result; -} - -@end diff --git a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/NSData+zlib/Private/GULNSDataInternal.h b/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/NSData+zlib/Private/GULNSDataInternal.h deleted file mode 100644 index 903589d5eb..0000000000 --- a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/NSData+zlib/Private/GULNSDataInternal.h +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2020 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// An umbrella header, for any other libraries in this repo to access Firebase Public and Private -// headers. Any package manager complexity should be handled here. - -#if SWIFT_PACKAGE -@import GoogleUtilities_NSData; -#else -#import -#endif diff --git a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/NSData+zlib/Public/GULNSData+zlib.h b/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/NSData+zlib/Public/GULNSData+zlib.h deleted file mode 100644 index 36f94a7098..0000000000 --- a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/NSData+zlib/Public/GULNSData+zlib.h +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2018 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import - -/// This is a copy of Google Toolbox for Mac library to avoid creating an extra framework. - -// NOTE: For 64bit, none of these apis handle input sizes >32bits, they will return nil when given -// such data. To handle data of that size you really should be streaming it rather then doing it all -// in memory. - -@interface NSData (GULGzip) - -/// Returns an data as the result of decompressing the payload of |data|.The data to decompress must -/// be a gzipped payloads. -+ (NSData *)gul_dataByInflatingGzippedData:(NSData *)data error:(NSError **)error; - -/// Returns an compressed data with the result of gzipping the payload of |data|. Uses the default -/// compression level. -+ (NSData *)gul_dataByGzippingData:(NSData *)data error:(NSError **)error; - -FOUNDATION_EXPORT NSString *const GULNSDataZlibErrorDomain; -FOUNDATION_EXPORT NSString *const GULNSDataZlibErrorKey; // NSNumber -FOUNDATION_EXPORT NSString *const GULNSDataZlibRemainingBytesKey; // NSNumber - -typedef NS_ENUM(NSInteger, GULNSDataZlibError) { - GULNSDataZlibErrorGreaterThan32BitsToCompress = 1024, - // An internal zlib error. - // GULNSDataZlibErrorKey will contain the error value. - // NSLocalizedDescriptionKey may contain an error string from zlib. - // Look in zlib.h for list of errors. - GULNSDataZlibErrorInternal, - // There was left over data in the buffer that was not used. - // GULNSDataZlibRemainingBytesKey will contain number of remaining bytes. - GULNSDataZlibErrorDataRemaining -}; - -@end diff --git a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Network/GULMutableDictionary.m b/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Network/GULMutableDictionary.m deleted file mode 100644 index 43896601ff..0000000000 --- a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Network/GULMutableDictionary.m +++ /dev/null @@ -1,101 +0,0 @@ -// Copyright 2017 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "GoogleUtilities/Network/Private/GULMutableDictionary.h" - -@implementation GULMutableDictionary { - /// The mutable dictionary. - NSMutableDictionary *_objects; - - /// Serial synchronization queue. All reads should use dispatch_sync, while writes use - /// dispatch_async. - dispatch_queue_t _queue; -} - -- (instancetype)init { - self = [super init]; - - if (self) { - _objects = [[NSMutableDictionary alloc] init]; - _queue = dispatch_queue_create("GULMutableDictionary", DISPATCH_QUEUE_SERIAL); - } - - return self; -} - -- (NSString *)description { - __block NSString *description; - dispatch_sync(_queue, ^{ - description = self->_objects.description; - }); - return description; -} - -- (id)objectForKey:(id)key { - __block id object; - dispatch_sync(_queue, ^{ - object = [self->_objects objectForKey:key]; - }); - return object; -} - -- (void)setObject:(id)object forKey:(id)key { - dispatch_async(_queue, ^{ - [self->_objects setObject:object forKey:key]; - }); -} - -- (void)removeObjectForKey:(id)key { - dispatch_async(_queue, ^{ - [self->_objects removeObjectForKey:key]; - }); -} - -- (void)removeAllObjects { - dispatch_async(_queue, ^{ - [self->_objects removeAllObjects]; - }); -} - -- (NSUInteger)count { - __block NSUInteger count; - dispatch_sync(_queue, ^{ - count = self->_objects.count; - }); - return count; -} - -- (id)objectForKeyedSubscript:(id)key { - __block id object; - dispatch_sync(_queue, ^{ - object = self->_objects[key]; - }); - return object; -} - -- (void)setObject:(id)obj forKeyedSubscript:(id)key { - dispatch_async(_queue, ^{ - self->_objects[key] = obj; - }); -} - -- (NSDictionary *)dictionary { - __block NSDictionary *dictionary; - dispatch_sync(_queue, ^{ - dictionary = [self->_objects copy]; - }); - return dictionary; -} - -@end diff --git a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Network/GULNetwork.m b/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Network/GULNetwork.m deleted file mode 100644 index 5b7d7e37b1..0000000000 --- a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Network/GULNetwork.m +++ /dev/null @@ -1,389 +0,0 @@ -// Copyright 2017 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "GoogleUtilities/Network/Private/GULNetwork.h" -#import "GoogleUtilities/Network/Private/GULNetworkMessageCode.h" - -#import "GoogleUtilities/Logger/Private/GULLogger.h" -#import "GoogleUtilities/NSData+zlib/Private/GULNSDataInternal.h" -#import "GoogleUtilities/Network/Private/GULMutableDictionary.h" -#import "GoogleUtilities/Network/Private/GULNetworkConstants.h" -#import "GoogleUtilities/Reachability/Private/GULReachabilityChecker.h" - -/// Constant string for request header Content-Encoding. -static NSString *const kGULNetworkContentCompressionKey = @"Content-Encoding"; - -/// Constant string for request header Content-Encoding value. -static NSString *const kGULNetworkContentCompressionValue = @"gzip"; - -/// Constant string for request header Content-Length. -static NSString *const kGULNetworkContentLengthKey = @"Content-Length"; - -/// Constant string for request header Content-Type. -static NSString *const kGULNetworkContentTypeKey = @"Content-Type"; - -/// Constant string for request header Content-Type value. -static NSString *const kGULNetworkContentTypeValue = @"application/x-www-form-urlencoded"; - -/// Constant string for GET request method. -static NSString *const kGULNetworkGETRequestMethod = @"GET"; - -/// Constant string for POST request method. -static NSString *const kGULNetworkPOSTRequestMethod = @"POST"; - -/// Default constant string as a prefix for network logger. -static NSString *const kGULNetworkLogTag = @"Google/Utilities/Network"; - -@interface GULNetwork () -@end - -@implementation GULNetwork { - /// Network reachability. - GULReachabilityChecker *_reachability; - - /// The dictionary of requests by session IDs { NSString : id }. - GULMutableDictionary *_requests; -} - -- (instancetype)init { - return [self initWithReachabilityHost:kGULNetworkReachabilityHost]; -} - -- (instancetype)initWithReachabilityHost:(NSString *)reachabilityHost { - self = [super init]; - if (self) { - // Setup reachability. - _reachability = [[GULReachabilityChecker alloc] initWithReachabilityDelegate:self - withHost:reachabilityHost]; - if (![_reachability start]) { - return nil; - } - - _requests = [[GULMutableDictionary alloc] init]; - _timeoutInterval = kGULNetworkTimeOutInterval; - } - return self; -} - -- (void)dealloc { - _reachability.reachabilityDelegate = nil; - [_reachability stop]; -} - -#pragma mark - External Methods - -+ (void)handleEventsForBackgroundURLSessionID:(NSString *)sessionID - completionHandler:(GULNetworkSystemCompletionHandler)completionHandler { - [GULNetworkURLSession handleEventsForBackgroundURLSessionID:sessionID - completionHandler:completionHandler]; -} - -- (NSString *)postURL:(NSURL *)url - payload:(NSData *)payload - queue:(dispatch_queue_t)queue - usingBackgroundSession:(BOOL)usingBackgroundSession - completionHandler:(GULNetworkCompletionHandler)handler { - if (!url.absoluteString.length) { - [self handleErrorWithCode:GULErrorCodeNetworkInvalidURL queue:queue withHandler:handler]; - return nil; - } - - NSTimeInterval timeOutInterval = _timeoutInterval ?: kGULNetworkTimeOutInterval; - - NSMutableURLRequest *request = - [[NSMutableURLRequest alloc] initWithURL:url - cachePolicy:NSURLRequestReloadIgnoringLocalCacheData - timeoutInterval:timeOutInterval]; - - if (!request) { - [self handleErrorWithCode:GULErrorCodeNetworkSessionTaskCreation - queue:queue - withHandler:handler]; - return nil; - } - - NSError *compressError = nil; - NSData *compressedData = [NSData gul_dataByGzippingData:payload error:&compressError]; - if (!compressedData || compressError) { - if (compressError || payload.length > 0) { - // If the payload is not empty but it fails to compress the payload, something has been wrong. - [self handleErrorWithCode:GULErrorCodeNetworkPayloadCompression - queue:queue - withHandler:handler]; - return nil; - } - compressedData = [[NSData alloc] init]; - } - - NSString *postLength = @(compressedData.length).stringValue; - - // Set up the request with the compressed data. - [request setValue:postLength forHTTPHeaderField:kGULNetworkContentLengthKey]; - request.HTTPBody = compressedData; - request.HTTPMethod = kGULNetworkPOSTRequestMethod; - [request setValue:kGULNetworkContentTypeValue forHTTPHeaderField:kGULNetworkContentTypeKey]; - [request setValue:kGULNetworkContentCompressionValue - forHTTPHeaderField:kGULNetworkContentCompressionKey]; - - GULNetworkURLSession *fetcher = [[GULNetworkURLSession alloc] initWithNetworkLoggerDelegate:self]; - fetcher.backgroundNetworkEnabled = usingBackgroundSession; - - __weak GULNetwork *weakSelf = self; - NSString *requestID = [fetcher - sessionIDFromAsyncPOSTRequest:request - completionHandler:^(NSHTTPURLResponse *response, NSData *data, - NSString *sessionID, NSError *error) { - GULNetwork *strongSelf = weakSelf; - if (!strongSelf) { - return; - } - dispatch_queue_t queueToDispatch = queue ? queue : dispatch_get_main_queue(); - dispatch_async(queueToDispatch, ^{ - if (sessionID.length) { - [strongSelf->_requests removeObjectForKey:sessionID]; - } - if (handler) { - handler(response, data, error); - } - }); - }]; - if (!requestID) { - [self handleErrorWithCode:GULErrorCodeNetworkSessionTaskCreation - queue:queue - withHandler:handler]; - return nil; - } - - [self GULNetwork_logWithLevel:kGULNetworkLogLevelDebug - messageCode:kGULNetworkMessageCodeNetwork000 - message:@"Uploading data. Host" - context:url]; - _requests[requestID] = fetcher; - return requestID; -} - -- (NSString *)getURL:(NSURL *)url - headers:(NSDictionary *)headers - queue:(dispatch_queue_t)queue - usingBackgroundSession:(BOOL)usingBackgroundSession - completionHandler:(GULNetworkCompletionHandler)handler { - if (!url.absoluteString.length) { - [self handleErrorWithCode:GULErrorCodeNetworkInvalidURL queue:queue withHandler:handler]; - return nil; - } - - NSTimeInterval timeOutInterval = _timeoutInterval ?: kGULNetworkTimeOutInterval; - NSMutableURLRequest *request = - [[NSMutableURLRequest alloc] initWithURL:url - cachePolicy:NSURLRequestReloadIgnoringLocalCacheData - timeoutInterval:timeOutInterval]; - - if (!request) { - [self handleErrorWithCode:GULErrorCodeNetworkSessionTaskCreation - queue:queue - withHandler:handler]; - return nil; - } - - request.HTTPMethod = kGULNetworkGETRequestMethod; - request.allHTTPHeaderFields = headers; - - GULNetworkURLSession *fetcher = [[GULNetworkURLSession alloc] initWithNetworkLoggerDelegate:self]; - fetcher.backgroundNetworkEnabled = usingBackgroundSession; - - __weak GULNetwork *weakSelf = self; - NSString *requestID = [fetcher - sessionIDFromAsyncGETRequest:request - completionHandler:^(NSHTTPURLResponse *response, NSData *data, NSString *sessionID, - NSError *error) { - GULNetwork *strongSelf = weakSelf; - if (!strongSelf) { - return; - } - dispatch_queue_t queueToDispatch = queue ? queue : dispatch_get_main_queue(); - dispatch_async(queueToDispatch, ^{ - if (sessionID.length) { - [strongSelf->_requests removeObjectForKey:sessionID]; - } - if (handler) { - handler(response, data, error); - } - }); - }]; - - if (!requestID) { - [self handleErrorWithCode:GULErrorCodeNetworkSessionTaskCreation - queue:queue - withHandler:handler]; - return nil; - } - - [self GULNetwork_logWithLevel:kGULNetworkLogLevelDebug - messageCode:kGULNetworkMessageCodeNetwork001 - message:@"Downloading data. Host" - context:url]; - _requests[requestID] = fetcher; - return requestID; -} - -- (BOOL)hasUploadInProgress { - return _requests.count > 0; -} - -#pragma mark - Network Reachability - -/// Tells reachability delegate to call reachabilityDidChangeToStatus: to notify the network -/// reachability has changed. -- (void)reachability:(GULReachabilityChecker *)reachability - statusChanged:(GULReachabilityStatus)status { - _networkConnected = (status == kGULReachabilityViaCellular || status == kGULReachabilityViaWifi); - [_reachabilityDelegate reachabilityDidChange]; -} - -#pragma mark - Network logger delegate - -- (void)setLoggerDelegate:(id)loggerDelegate { - // Explicitly check whether the delegate responds to the methods because conformsToProtocol does - // not work correctly even though the delegate does respond to the methods. - if (!loggerDelegate || - ![loggerDelegate respondsToSelector:@selector(GULNetwork_logWithLevel: - messageCode:message:contexts:)] || - ![loggerDelegate respondsToSelector:@selector(GULNetwork_logWithLevel: - messageCode:message:context:)] || - ![loggerDelegate respondsToSelector:@selector(GULNetwork_logWithLevel: - messageCode:message:)]) { - GULLogError(kGULLoggerNetwork, NO, - [NSString stringWithFormat:@"I-NET%06ld", (long)kGULNetworkMessageCodeNetwork002], - @"Cannot set the network logger delegate: delegate does not conform to the network " - "logger protocol."); - return; - } - _loggerDelegate = loggerDelegate; -} - -#pragma mark - Private methods - -/// Handles network error and calls completion handler with the error. -- (void)handleErrorWithCode:(NSInteger)code - queue:(dispatch_queue_t)queue - withHandler:(GULNetworkCompletionHandler)handler { - NSDictionary *userInfo = @{kGULNetworkErrorContext : @"Failed to create network request"}; - NSError *error = [[NSError alloc] initWithDomain:kGULNetworkErrorDomain - code:code - userInfo:userInfo]; - [self GULNetwork_logWithLevel:kGULNetworkLogLevelWarning - messageCode:kGULNetworkMessageCodeNetwork002 - message:@"Failed to create network request. Code, error" - contexts:@[ @(code), error ]]; - if (handler) { - dispatch_queue_t queueToDispatch = queue ? queue : dispatch_get_main_queue(); - dispatch_async(queueToDispatch, ^{ - handler(nil, nil, error); - }); - } -} - -#pragma mark - Network logger - -- (void)GULNetwork_logWithLevel:(GULNetworkLogLevel)logLevel - messageCode:(GULNetworkMessageCode)messageCode - message:(NSString *)message - contexts:(NSArray *)contexts { - // Let the delegate log the message if there is a valid logger delegate. Otherwise, just log - // errors/warnings/info messages to the console log. - if (_loggerDelegate) { - [_loggerDelegate GULNetwork_logWithLevel:logLevel - messageCode:messageCode - message:message - contexts:contexts]; - return; - } - if (_isDebugModeEnabled || logLevel == kGULNetworkLogLevelError || - logLevel == kGULNetworkLogLevelWarning || logLevel == kGULNetworkLogLevelInfo) { - NSString *formattedMessage = GULStringWithLogMessage(message, logLevel, contexts); - NSLog(@"%@", formattedMessage); - GULLogBasic((GULLoggerLevel)logLevel, kGULLoggerNetwork, NO, - [NSString stringWithFormat:@"I-NET%06ld", (long)messageCode], formattedMessage, - NULL); - } -} - -- (void)GULNetwork_logWithLevel:(GULNetworkLogLevel)logLevel - messageCode:(GULNetworkMessageCode)messageCode - message:(NSString *)message - context:(id)context { - if (_loggerDelegate) { - [_loggerDelegate GULNetwork_logWithLevel:logLevel - messageCode:messageCode - message:message - context:context]; - return; - } - NSArray *contexts = context ? @[ context ] : @[]; - [self GULNetwork_logWithLevel:logLevel messageCode:messageCode message:message contexts:contexts]; -} - -- (void)GULNetwork_logWithLevel:(GULNetworkLogLevel)logLevel - messageCode:(GULNetworkMessageCode)messageCode - message:(NSString *)message { - if (_loggerDelegate) { - [_loggerDelegate GULNetwork_logWithLevel:logLevel messageCode:messageCode message:message]; - return; - } - [self GULNetwork_logWithLevel:logLevel messageCode:messageCode message:message contexts:@[]]; -} - -/// Returns a string for the given log level (e.g. kGULNetworkLogLevelError -> @"ERROR"). -static NSString *GULLogLevelDescriptionFromLogLevel(GULNetworkLogLevel logLevel) { - static NSDictionary *levelNames = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - levelNames = @{ - @(kGULNetworkLogLevelError) : @"ERROR", - @(kGULNetworkLogLevelWarning) : @"WARNING", - @(kGULNetworkLogLevelInfo) : @"INFO", - @(kGULNetworkLogLevelDebug) : @"DEBUG" - }; - }); - return levelNames[@(logLevel)]; -} - -/// Returns a formatted string to be used for console logging. -static NSString *GULStringWithLogMessage(NSString *message, - GULNetworkLogLevel logLevel, - NSArray *contexts) { - if (!message) { - message = @"(Message was nil)"; - } else if (!message.length) { - message = @"(Message was empty)"; - } - NSMutableString *result = [[NSMutableString alloc] - initWithFormat:@"<%@/%@> %@", kGULNetworkLogTag, GULLogLevelDescriptionFromLogLevel(logLevel), - message]; - - if (!contexts.count) { - return result; - } - - NSMutableArray *formattedContexts = [[NSMutableArray alloc] init]; - for (id item in contexts) { - [formattedContexts addObject:(item != [NSNull null] ? item : @"(nil)")]; - } - - [result appendString:@": "]; - [result appendString:[formattedContexts componentsJoinedByString:@", "]]; - return result; -} - -@end diff --git a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Network/GULNetworkConstants.m b/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Network/GULNetworkConstants.m deleted file mode 100644 index dea8dbd578..0000000000 --- a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Network/GULNetworkConstants.m +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2017 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "GoogleUtilities/Network/Private/GULNetworkConstants.h" - -#import - -NSString *const kGULNetworkBackgroundSessionConfigIDPrefix = @"com.gul.network.background-upload"; -NSString *const kGULNetworkApplicationSupportSubdirectory = @"GUL/Network"; -NSString *const kGULNetworkTempDirectoryName = @"GULNetworkTemporaryDirectory"; -const NSTimeInterval kGULNetworkTempFolderExpireTime = 60 * 60; // 1 hour -const NSTimeInterval kGULNetworkTimeOutInterval = 60; // 1 minute. -NSString *const kGULNetworkReachabilityHost = @"app-measurement.com"; -NSString *const kGULNetworkErrorContext = @"Context"; - -const int kGULNetworkHTTPStatusOK = 200; -const int kGULNetworkHTTPStatusNoContent = 204; -const int kGULNetworkHTTPStatusCodeMultipleChoices = 300; -const int kGULNetworkHTTPStatusCodeMovedPermanently = 301; -const int kGULNetworkHTTPStatusCodeFound = 302; -const int kGULNetworkHTTPStatusCodeNotModified = 304; -const int kGULNetworkHTTPStatusCodeMovedTemporarily = 307; -const int kGULNetworkHTTPStatusCodeNotFound = 404; -const int kGULNetworkHTTPStatusCodeCannotAcceptTraffic = 429; -const int kGULNetworkHTTPStatusCodeUnavailable = 503; - -NSString *const kGULNetworkErrorDomain = @"com.gul.network.ErrorDomain"; - -GULLoggerService kGULLoggerNetwork = @"[GULNetwork]"; diff --git a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Network/GULNetworkURLSession.m b/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Network/GULNetworkURLSession.m deleted file mode 100644 index 6cece04678..0000000000 --- a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Network/GULNetworkURLSession.m +++ /dev/null @@ -1,762 +0,0 @@ -// Copyright 2017 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import - -#import "GoogleUtilities/Network/Private/GULNetworkURLSession.h" - -#import "GoogleUtilities/Logger/Private/GULLogger.h" -#import "GoogleUtilities/Network/Private/GULMutableDictionary.h" -#import "GoogleUtilities/Network/Private/GULNetworkConstants.h" -#import "GoogleUtilities/Network/Private/GULNetworkMessageCode.h" - -@interface GULNetworkURLSession () -@end - -@implementation GULNetworkURLSession { - /// The handler to be called when the request completes or error has occurs. - GULNetworkURLSessionCompletionHandler _completionHandler; - - /// Session ID generated randomly with a fixed prefix. - NSString *_sessionID; - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wunguarded-availability" - /// The session configuration. NSURLSessionConfiguration' is only available on iOS 7.0 or newer. - NSURLSessionConfiguration *_sessionConfig; - - /// The current NSURLSession. - NSURLSession *__weak _Nullable _URLSession; -#pragma clang diagnostic pop - - /// The path to the directory where all temporary files are stored before uploading. - NSURL *_networkDirectoryURL; - - /// The downloaded data from fetching. - NSData *_downloadedData; - - /// The path to the temporary file which stores the uploading data. - NSURL *_uploadingFileURL; - - /// The current request. - NSURLRequest *_request; -} - -#pragma mark - Init - -- (instancetype)initWithNetworkLoggerDelegate:(id)networkLoggerDelegate { - self = [super init]; - if (self) { - // Create URL to the directory where all temporary files to upload have to be stored. - NSArray *paths = - NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES); - NSString *applicationSupportDirectory = paths.firstObject; - NSArray *tempPathComponents = @[ - applicationSupportDirectory, kGULNetworkApplicationSupportSubdirectory, - kGULNetworkTempDirectoryName - ]; - _networkDirectoryURL = [NSURL fileURLWithPathComponents:tempPathComponents]; - _sessionID = [NSString stringWithFormat:@"%@-%@", kGULNetworkBackgroundSessionConfigIDPrefix, - [[NSUUID UUID] UUIDString]]; - _loggerDelegate = networkLoggerDelegate; - } - return self; -} - -#pragma mark - External Methods - -#pragma mark - To be called from AppDelegate - -+ (void)handleEventsForBackgroundURLSessionID:(NSString *)sessionID - completionHandler: - (GULNetworkSystemCompletionHandler)systemCompletionHandler { - // The session may not be Analytics background. Ignore those that do not have the prefix. - if (![sessionID hasPrefix:kGULNetworkBackgroundSessionConfigIDPrefix]) { - return; - } - GULNetworkURLSession *fetcher = [self fetcherWithSessionIdentifier:sessionID]; - if (fetcher != nil) { - [fetcher addSystemCompletionHandler:systemCompletionHandler forSession:sessionID]; - } else { - GULLogError(kGULLoggerNetwork, NO, - [NSString stringWithFormat:@"I-NET%06ld", (long)kGULNetworkMessageCodeNetwork003], - @"Failed to retrieve background session with ID %@ after app is relaunched.", - sessionID); - } -} - -#pragma mark - External Methods - -/// Sends an async POST request using NSURLSession for iOS >= 7.0, and returns an ID of the -/// connection. -- (nullable NSString *)sessionIDFromAsyncPOSTRequest:(NSURLRequest *)request - completionHandler:(GULNetworkURLSessionCompletionHandler)handler - API_AVAILABLE(ios(7.0)) { - // NSURLSessionUploadTask does not work with NSData in the background. - // To avoid this issue, write the data to a temporary file to upload it. - // Make a temporary file with the data subset. - _uploadingFileURL = [self temporaryFilePathWithSessionID:_sessionID]; - NSError *writeError; - NSURLSessionUploadTask *postRequestTask; - NSURLSession *session; - BOOL didWriteFile = NO; - - // Clean up the entire temp folder to avoid temp files that remain in case the previous session - // crashed and did not clean up. - [self maybeRemoveTempFilesAtURL:_networkDirectoryURL - expiringTime:kGULNetworkTempFolderExpireTime]; - - // If there is no background network enabled, no need to write to file. This will allow default - // network session which runs on the foreground. - if (_backgroundNetworkEnabled && [self ensureTemporaryDirectoryExists]) { - didWriteFile = [request.HTTPBody writeToFile:_uploadingFileURL.path - options:NSDataWritingAtomic - error:&writeError]; - - if (writeError) { - [_loggerDelegate GULNetwork_logWithLevel:kGULNetworkLogLevelError - messageCode:kGULNetworkMessageCodeURLSession000 - message:@"Failed to write request data to file" - context:writeError]; - } - } - - if (didWriteFile) { - // Exclude this file from backing up to iTunes. There are conflicting reports that excluding - // directory from backing up does not exclude files of that directory from backing up. - [self excludeFromBackupForURL:_uploadingFileURL]; - - _sessionConfig = [self backgroundSessionConfigWithSessionID:_sessionID]; - [self populateSessionConfig:_sessionConfig withRequest:request]; - session = [NSURLSession sessionWithConfiguration:_sessionConfig - delegate:self - delegateQueue:[NSOperationQueue mainQueue]]; - postRequestTask = [session uploadTaskWithRequest:request fromFile:_uploadingFileURL]; - } else { - // If we cannot write to file, just send it in the foreground. - _sessionConfig = [NSURLSessionConfiguration defaultSessionConfiguration]; - [self populateSessionConfig:_sessionConfig withRequest:request]; - session = [NSURLSession sessionWithConfiguration:_sessionConfig - delegate:self - delegateQueue:[NSOperationQueue mainQueue]]; - postRequestTask = [session uploadTaskWithRequest:request fromData:request.HTTPBody]; - } - - if (!session || !postRequestTask) { - NSError *error = [[NSError alloc] - initWithDomain:kGULNetworkErrorDomain - code:GULErrorCodeNetworkRequestCreation - userInfo:@{kGULNetworkErrorContext : @"Cannot create network session"}]; - [self callCompletionHandler:handler withResponse:nil data:nil error:error]; - return nil; - } - - _URLSession = session; - - // Save the session into memory. - [[self class] setSessionInFetcherMap:self forSessionID:_sessionID]; - - _request = [request copy]; - - // Store completion handler because background session does not accept handler block but custom - // delegate. - _completionHandler = [handler copy]; - [postRequestTask resume]; - - return _sessionID; -} - -/// Sends an async GET request using NSURLSession for iOS >= 7.0, and returns an ID of the session. -- (nullable NSString *)sessionIDFromAsyncGETRequest:(NSURLRequest *)request - completionHandler:(GULNetworkURLSessionCompletionHandler)handler - API_AVAILABLE(ios(7.0)) { - if (_backgroundNetworkEnabled) { - _sessionConfig = [self backgroundSessionConfigWithSessionID:_sessionID]; - } else { - _sessionConfig = [NSURLSessionConfiguration defaultSessionConfiguration]; - } - - [self populateSessionConfig:_sessionConfig withRequest:request]; - - // Do not cache the GET request. - _sessionConfig.URLCache = nil; - - NSURLSession *session = [NSURLSession sessionWithConfiguration:_sessionConfig - delegate:self - delegateQueue:[NSOperationQueue mainQueue]]; - NSURLSessionDownloadTask *downloadTask = [session downloadTaskWithRequest:request]; - - if (!session || !downloadTask) { - NSError *error = [[NSError alloc] - initWithDomain:kGULNetworkErrorDomain - code:GULErrorCodeNetworkRequestCreation - userInfo:@{kGULNetworkErrorContext : @"Cannot create network session"}]; - [self callCompletionHandler:handler withResponse:nil data:nil error:error]; - return nil; - } - - _URLSession = session; - - // Save the session into memory. - [[self class] setSessionInFetcherMap:self forSessionID:_sessionID]; - - _request = [request copy]; - - _completionHandler = [handler copy]; - [downloadTask resume]; - - return _sessionID; -} - -#pragma mark - NSURLSessionDataDelegate - -/// Called by the NSURLSession when the data task has received some of the expected data. -/// Once the session is completed, URLSession:task:didCompleteWithError will be called and the -/// completion handler will be called with the downloaded data. -- (void)URLSession:(NSURLSession *)session - dataTask:(NSURLSessionDataTask *)dataTask - didReceiveData:(NSData *)data { - @synchronized(self) { - NSMutableData *mutableData = [[NSMutableData alloc] init]; - if (_downloadedData) { - mutableData = _downloadedData.mutableCopy; - } - [mutableData appendData:data]; - _downloadedData = mutableData; - } -} - -#pragma mark - NSURLSessionTaskDelegate - -/// Called by the NSURLSession once the download task is completed. The file is saved in the -/// provided URL so we need to read the data and store into _downloadedData. Once the session is -/// completed, URLSession:task:didCompleteWithError will be called and the completion handler will -/// be called with the downloaded data. -- (void)URLSession:(NSURLSession *)session - downloadTask:(NSURLSessionDownloadTask *)task - didFinishDownloadingToURL:(NSURL *)url API_AVAILABLE(ios(7.0)) { - if (!url.path) { - [_loggerDelegate - GULNetwork_logWithLevel:kGULNetworkLogLevelError - messageCode:kGULNetworkMessageCodeURLSession001 - message:@"Unable to read downloaded data from empty temp path"]; - _downloadedData = nil; - return; - } - - NSError *error; - _downloadedData = [NSData dataWithContentsOfFile:url.path options:0 error:&error]; - - if (error) { - [_loggerDelegate GULNetwork_logWithLevel:kGULNetworkLogLevelError - messageCode:kGULNetworkMessageCodeURLSession002 - message:@"Cannot read the content of downloaded data" - context:error]; - _downloadedData = nil; - } -} - -#if TARGET_OS_IOS || TARGET_OS_TV -- (void)URLSessionDidFinishEventsForBackgroundURLSession:(NSURLSession *)session - API_AVAILABLE(ios(7.0)) { - [_loggerDelegate GULNetwork_logWithLevel:kGULNetworkLogLevelDebug - messageCode:kGULNetworkMessageCodeURLSession003 - message:@"Background session finished" - context:session.configuration.identifier]; - [self callSystemCompletionHandler:session.configuration.identifier]; -} -#endif - -- (void)URLSession:(NSURLSession *)session - task:(NSURLSessionTask *)task - didCompleteWithError:(NSError *)error API_AVAILABLE(ios(7.0)) { - // Avoid any chance of recursive behavior leading to it being used repeatedly. - GULNetworkURLSessionCompletionHandler handler = _completionHandler; - _completionHandler = nil; - - if (task.response) { - // The following assertion should always be true for HTTP requests, see https://goo.gl/gVLxT7. - NSAssert([task.response isKindOfClass:[NSHTTPURLResponse class]], @"URL response must be HTTP"); - - // The server responded so ignore the error created by the system. - error = nil; - } else if (!error) { - error = [[NSError alloc] - initWithDomain:kGULNetworkErrorDomain - code:GULErrorCodeNetworkInvalidResponse - userInfo:@{kGULNetworkErrorContext : @"Network Error: Empty network response"}]; - } - - [self callCompletionHandler:handler - withResponse:(NSHTTPURLResponse *)task.response - data:_downloadedData - error:error]; - - // Remove the temp file to avoid trashing devices with lots of temp files. - [self removeTempItemAtURL:_uploadingFileURL]; - - // Try to clean up stale files again. - [self maybeRemoveTempFilesAtURL:_networkDirectoryURL - expiringTime:kGULNetworkTempFolderExpireTime]; - - // This is called without checking the sessionID here since non-background sessions - // won't have an ID. - [session finishTasksAndInvalidate]; - - // Explicitly remove the session so it won't be reused. The weak map table should - // remove the session on deallocation, but dealloc may not happen immediately after - // calling `finishTasksAndInvalidate`. - NSString *sessionID = session.configuration.identifier; - [[self class] setSessionInFetcherMap:nil forSessionID:sessionID]; -} - -- (void)URLSession:(NSURLSession *)session - task:(NSURLSessionTask *)task - didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge - completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, - NSURLCredential *credential))completionHandler - API_AVAILABLE(ios(7.0)) { - // The handling is modeled after GTMSessionFetcher. - if ([challenge.protectionSpace.authenticationMethod - isEqualToString:NSURLAuthenticationMethodServerTrust]) { - SecTrustRef serverTrust = challenge.protectionSpace.serverTrust; - if (serverTrust == NULL) { - [_loggerDelegate GULNetwork_logWithLevel:kGULNetworkLogLevelDebug - messageCode:kGULNetworkMessageCodeURLSession004 - message:@"Received empty server trust for host. Host" - context:_request.URL]; - completionHandler(NSURLSessionAuthChallengePerformDefaultHandling, nil); - return; - } - NSURLCredential *credential = [NSURLCredential credentialForTrust:serverTrust]; - if (!credential) { - [_loggerDelegate GULNetwork_logWithLevel:kGULNetworkLogLevelWarning - messageCode:kGULNetworkMessageCodeURLSession005 - message:@"Unable to verify server identity. Host" - context:_request.URL]; - completionHandler(NSURLSessionAuthChallengeCancelAuthenticationChallenge, nil); - return; - } - - [_loggerDelegate GULNetwork_logWithLevel:kGULNetworkLogLevelDebug - messageCode:kGULNetworkMessageCodeURLSession006 - message:@"Received SSL challenge for host. Host" - context:_request.URL]; - - void (^callback)(BOOL) = ^(BOOL allow) { - if (allow) { - completionHandler(NSURLSessionAuthChallengeUseCredential, credential); - } else { - [self->_loggerDelegate - GULNetwork_logWithLevel:kGULNetworkLogLevelDebug - messageCode:kGULNetworkMessageCodeURLSession007 - message:@"Cancelling authentication challenge for host. Host" - context:self->_request.URL]; - completionHandler(NSURLSessionAuthChallengeCancelAuthenticationChallenge, nil); - } - }; - - // Retain the trust object to avoid a SecTrustEvaluate() crash on iOS 7. - CFRetain(serverTrust); - - // Evaluate the certificate chain. - // - // The delegate queue may be the main thread. Trust evaluation could cause some - // blocking network activity, so we must evaluate async, as documented at - // https://developer.apple.com/library/ios/technotes/tn2232/ - dispatch_queue_t evaluateBackgroundQueue = - dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); - - dispatch_async(evaluateBackgroundQueue, ^{ - SecTrustResultType trustEval = kSecTrustResultInvalid; - BOOL shouldAllow; - OSStatus trustError; - - @synchronized([GULNetworkURLSession class]) { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - trustError = SecTrustEvaluate(serverTrust, &trustEval); -#pragma clang dianostic pop - } - - if (trustError != errSecSuccess) { - [self->_loggerDelegate GULNetwork_logWithLevel:kGULNetworkLogLevelError - messageCode:kGULNetworkMessageCodeURLSession008 - message:@"Cannot evaluate server trust. Error, host" - contexts:@[ @(trustError), self->_request.URL ]]; - shouldAllow = NO; - } else { - // Having a trust level "unspecified" by the user is the usual result, described at - // https://developer.apple.com/library/mac/qa/qa1360 - shouldAllow = - (trustEval == kSecTrustResultUnspecified || trustEval == kSecTrustResultProceed); - } - - // Call the call back with the permission. - callback(shouldAllow); - - CFRelease(serverTrust); - }); - return; - } - - // Default handling for other Auth Challenges. - completionHandler(NSURLSessionAuthChallengePerformDefaultHandling, nil); -} - -#pragma mark - Internal Methods - -/// Stores system completion handler with session ID as key. -- (void)addSystemCompletionHandler:(GULNetworkSystemCompletionHandler)handler - forSession:(NSString *)identifier { - if (!handler) { - [_loggerDelegate - GULNetwork_logWithLevel:kGULNetworkLogLevelError - messageCode:kGULNetworkMessageCodeURLSession009 - message:@"Cannot store nil system completion handler in network"]; - return; - } - - if (!identifier.length) { - [_loggerDelegate - GULNetwork_logWithLevel:kGULNetworkLogLevelError - messageCode:kGULNetworkMessageCodeURLSession010 - message:@"Cannot store system completion handler with empty network " - "session identifier"]; - return; - } - - GULMutableDictionary *systemCompletionHandlers = - [[self class] sessionIDToSystemCompletionHandlerDictionary]; - if (systemCompletionHandlers[identifier]) { - [_loggerDelegate GULNetwork_logWithLevel:kGULNetworkLogLevelWarning - messageCode:kGULNetworkMessageCodeURLSession011 - message:@"Got multiple system handlers for a single session ID" - context:identifier]; - } - - systemCompletionHandlers[identifier] = handler; -} - -/// Calls the system provided completion handler with the session ID stored in the dictionary. -/// The handler will be removed from the dictionary after being called. -- (void)callSystemCompletionHandler:(NSString *)identifier { - GULMutableDictionary *systemCompletionHandlers = - [[self class] sessionIDToSystemCompletionHandlerDictionary]; - GULNetworkSystemCompletionHandler handler = [systemCompletionHandlers objectForKey:identifier]; - - if (handler) { - [systemCompletionHandlers removeObjectForKey:identifier]; - - dispatch_async(dispatch_get_main_queue(), ^{ - handler(); - }); - } -} - -/// Sets or updates the session ID of this session. -- (void)setSessionID:(NSString *)sessionID { - _sessionID = [sessionID copy]; -} - -/// Creates a background session configuration with the session ID using the supported method. -- (NSURLSessionConfiguration *)backgroundSessionConfigWithSessionID:(NSString *)sessionID - API_AVAILABLE(ios(7.0)) { -#if (TARGET_OS_OSX && defined(MAC_OS_X_VERSION_10_10) && \ - MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_10) || \ - TARGET_OS_TV || \ - (TARGET_OS_IOS && defined(__IPHONE_8_0) && __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_8_0) - - // iOS 8/10.10 builds require the new backgroundSessionConfiguration method name. - return [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:sessionID]; - -#elif (TARGET_OS_OSX && defined(MAC_OS_X_VERSION_10_10) && \ - MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_10) || \ - (TARGET_OS_IOS && defined(__IPHONE_8_0) && __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_8_0) - - // Do a runtime check to avoid a deprecation warning about using - // +backgroundSessionConfiguration: on iOS 8. - if ([NSURLSessionConfiguration - respondsToSelector:@selector(backgroundSessionConfigurationWithIdentifier:)]) { - // Running on iOS 8+/OS X 10.10+. -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wunguarded-availability" - return [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:sessionID]; -#pragma clang diagnostic pop - } else { - // Running on iOS 7/OS X 10.9. - return [NSURLSessionConfiguration backgroundSessionConfiguration:sessionID]; - } - -#else - // Building with an SDK earlier than iOS 8/OS X 10.10. - return [NSURLSessionConfiguration backgroundSessionConfiguration:sessionID]; -#endif -} - -- (void)maybeRemoveTempFilesAtURL:(NSURL *)folderURL expiringTime:(NSTimeInterval)staleTime { - if (!folderURL.absoluteString.length) { - return; - } - - NSFileManager *fileManager = [NSFileManager defaultManager]; - NSError *error = nil; - - NSArray *properties = @[ NSURLCreationDateKey ]; - NSArray *directoryContent = - [fileManager contentsOfDirectoryAtURL:folderURL - includingPropertiesForKeys:properties - options:NSDirectoryEnumerationSkipsSubdirectoryDescendants - error:&error]; - if (error && error.code != NSFileReadNoSuchFileError) { - [_loggerDelegate - GULNetwork_logWithLevel:kGULNetworkLogLevelDebug - messageCode:kGULNetworkMessageCodeURLSession012 - message:@"Cannot get files from the temporary network folder. Error" - context:error]; - return; - } - - if (!directoryContent.count) { - return; - } - - NSTimeInterval now = [NSDate date].timeIntervalSince1970; - for (NSURL *tempFile in directoryContent) { - NSDate *creationDate; - BOOL getCreationDate = [tempFile getResourceValue:&creationDate - forKey:NSURLCreationDateKey - error:NULL]; - if (!getCreationDate) { - continue; - } - NSTimeInterval creationTimeInterval = creationDate.timeIntervalSince1970; - if (fabs(now - creationTimeInterval) > staleTime) { - [self removeTempItemAtURL:tempFile]; - } - } -} - -/// Removes the temporary file written to disk for sending the request. It has to be cleaned up -/// after the session is done. -- (void)removeTempItemAtURL:(NSURL *)fileURL { - if (!fileURL.absoluteString.length) { - return; - } - - NSFileManager *fileManager = [NSFileManager defaultManager]; - NSError *error = nil; - - if (![fileManager removeItemAtURL:fileURL error:&error] && error.code != NSFileNoSuchFileError) { - [_loggerDelegate - GULNetwork_logWithLevel:kGULNetworkLogLevelError - messageCode:kGULNetworkMessageCodeURLSession013 - message:@"Failed to remove temporary uploading data file. Error" - context:error.localizedDescription]; - } -} - -/// Gets the fetcher with the session ID. -+ (instancetype)fetcherWithSessionIdentifier:(NSString *)sessionIdentifier { - GULNetworkURLSession *session = [self sessionFromFetcherMapForSessionID:sessionIdentifier]; - if (!session && [sessionIdentifier hasPrefix:kGULNetworkBackgroundSessionConfigIDPrefix]) { - session = [[GULNetworkURLSession alloc] initWithNetworkLoggerDelegate:nil]; - [session setSessionID:sessionIdentifier]; - [self setSessionInFetcherMap:session forSessionID:sessionIdentifier]; - } - return session; -} - -/// Returns a map of the fetcher by session ID. Creates a map if it is not created. -/// When reading and writing from/to the session map, don't use this method directly. -/// To avoid thread safety issues, use one of the helper methods at the bottom of the -/// file: setSessionInFetcherMap:forSessionID:, sessionFromFetcherMapForSessionID: -+ (NSMapTable *)sessionIDToFetcherMap { - static NSMapTable *sessionIDToFetcherMap; - - static dispatch_once_t sessionMapOnceToken; - dispatch_once(&sessionMapOnceToken, ^{ - sessionIDToFetcherMap = [NSMapTable strongToWeakObjectsMapTable]; - }); - return sessionIDToFetcherMap; -} - -+ (NSLock *)sessionIDToFetcherMapReadWriteLock { - static NSLock *lock; - - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - lock = [[NSLock alloc] init]; - }); - return lock; -} - -/// Returns a map of system provided completion handler by session ID. Creates a map if it is not -/// created. -+ (GULMutableDictionary *)sessionIDToSystemCompletionHandlerDictionary { - static GULMutableDictionary *systemCompletionHandlers; - - static dispatch_once_t systemCompletionHandlerOnceToken; - dispatch_once(&systemCompletionHandlerOnceToken, ^{ - systemCompletionHandlers = [[GULMutableDictionary alloc] init]; - }); - return systemCompletionHandlers; -} - -- (NSURL *)temporaryFilePathWithSessionID:(NSString *)sessionID { - NSString *tempName = [NSString stringWithFormat:@"GULUpload_temp_%@", sessionID]; - return [_networkDirectoryURL URLByAppendingPathComponent:tempName]; -} - -/// Makes sure that the directory to store temp files exists. If not, tries to create it and returns -/// YES. If there is anything wrong, returns NO. -- (BOOL)ensureTemporaryDirectoryExists { - NSFileManager *fileManager = [NSFileManager defaultManager]; - NSError *error = nil; - - // Create a temporary directory if it does not exist or was deleted. - if ([_networkDirectoryURL checkResourceIsReachableAndReturnError:&error]) { - return YES; - } - - if (error && error.code != NSFileReadNoSuchFileError) { - [_loggerDelegate - GULNetwork_logWithLevel:kGULNetworkLogLevelWarning - messageCode:kGULNetworkMessageCodeURLSession014 - message:@"Error while trying to access Network temp folder. Error" - context:error]; - } - - NSError *writeError = nil; - - [fileManager createDirectoryAtURL:_networkDirectoryURL - withIntermediateDirectories:YES - attributes:nil - error:&writeError]; - if (writeError) { - [_loggerDelegate GULNetwork_logWithLevel:kGULNetworkLogLevelError - messageCode:kGULNetworkMessageCodeURLSession015 - message:@"Cannot create temporary directory. Error" - context:writeError]; - return NO; - } - - // Set the iCloud exclusion attribute on the Documents URL. - [self excludeFromBackupForURL:_networkDirectoryURL]; - - return YES; -} - -- (void)excludeFromBackupForURL:(NSURL *)url { - if (!url.path) { - return; - } - - // Set the iCloud exclusion attribute on the Documents URL. - NSError *preventBackupError = nil; - [url setResourceValue:@YES forKey:NSURLIsExcludedFromBackupKey error:&preventBackupError]; - if (preventBackupError) { - [_loggerDelegate GULNetwork_logWithLevel:kGULNetworkLogLevelError - messageCode:kGULNetworkMessageCodeURLSession016 - message:@"Cannot exclude temporary folder from iTunes backup"]; - } -} - -- (void)URLSession:(NSURLSession *)session - task:(NSURLSessionTask *)task - willPerformHTTPRedirection:(NSHTTPURLResponse *)response - newRequest:(NSURLRequest *)request - completionHandler:(void (^)(NSURLRequest *))completionHandler API_AVAILABLE(ios(7.0)) { - NSArray *nonAllowedRedirectionCodes = @[ - @(kGULNetworkHTTPStatusCodeFound), @(kGULNetworkHTTPStatusCodeMovedPermanently), - @(kGULNetworkHTTPStatusCodeMovedTemporarily), @(kGULNetworkHTTPStatusCodeMultipleChoices) - ]; - - // Allow those not in the non allowed list to be followed. - if (![nonAllowedRedirectionCodes containsObject:@(response.statusCode)]) { - completionHandler(request); - return; - } - - // Do not allow redirection if the response code is in the non-allowed list. - NSURLRequest *newRequest = request; - - if (response) { - newRequest = nil; - } - - completionHandler(newRequest); -} - -#pragma mark - Helper Methods - -+ (void)setSessionInFetcherMap:(GULNetworkURLSession *)session forSessionID:(NSString *)sessionID { - [[self sessionIDToFetcherMapReadWriteLock] lock]; - GULNetworkURLSession *existingSession = - [[[self class] sessionIDToFetcherMap] objectForKey:sessionID]; - if (existingSession) { - if (session) { - NSString *message = [NSString stringWithFormat:@"Discarding session: %@", existingSession]; - [existingSession->_loggerDelegate GULNetwork_logWithLevel:kGULNetworkLogLevelInfo - messageCode:kGULNetworkMessageCodeURLSession019 - message:message]; - } - [existingSession->_URLSession finishTasksAndInvalidate]; - } - if (session) { - [[[self class] sessionIDToFetcherMap] setObject:session forKey:sessionID]; - } else { - [[[self class] sessionIDToFetcherMap] removeObjectForKey:sessionID]; - } - [[self sessionIDToFetcherMapReadWriteLock] unlock]; -} - -+ (nullable GULNetworkURLSession *)sessionFromFetcherMapForSessionID:(NSString *)sessionID { - [[self sessionIDToFetcherMapReadWriteLock] lock]; - GULNetworkURLSession *session = [[[self class] sessionIDToFetcherMap] objectForKey:sessionID]; - [[self sessionIDToFetcherMapReadWriteLock] unlock]; - return session; -} - -- (void)callCompletionHandler:(GULNetworkURLSessionCompletionHandler)handler - withResponse:(NSHTTPURLResponse *)response - data:(NSData *)data - error:(NSError *)error { - if (error) { - [_loggerDelegate GULNetwork_logWithLevel:kGULNetworkLogLevelError - messageCode:kGULNetworkMessageCodeURLSession017 - message:@"Encounter network error. Code, error" - contexts:@[ @(error.code), error ]]; - } - - if (handler) { - dispatch_async(dispatch_get_main_queue(), ^{ - handler(response, data, self->_sessionID, error); - }); - } -} - -// Always use the request parameters even if the default session configuration is more restrictive. -- (void)populateSessionConfig:(NSURLSessionConfiguration *)sessionConfig - withRequest:(NSURLRequest *)request API_AVAILABLE(ios(7.0)) { - sessionConfig.HTTPAdditionalHeaders = request.allHTTPHeaderFields; - sessionConfig.timeoutIntervalForRequest = request.timeoutInterval; - sessionConfig.timeoutIntervalForResource = request.timeoutInterval; - sessionConfig.requestCachePolicy = request.cachePolicy; -} - -@end diff --git a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Network/Private/GULMutableDictionary.h b/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Network/Private/GULMutableDictionary.h deleted file mode 100644 index a8cc45b4b8..0000000000 --- a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Network/Private/GULMutableDictionary.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -/// A mutable dictionary that provides atomic accessor and mutators. -@interface GULMutableDictionary : NSObject - -/// Returns an object given a key in the dictionary or nil if not found. -- (id)objectForKey:(id)key; - -/// Updates the object given its key or adds it to the dictionary if it is not in the dictionary. -- (void)setObject:(id)object forKey:(id)key; - -/// Removes the object given its session ID from the dictionary. -- (void)removeObjectForKey:(id)key; - -/// Removes all objects. -- (void)removeAllObjects; - -/// Returns the number of current objects in the dictionary. -- (NSUInteger)count; - -/// Returns an object given a key in the dictionary or nil if not found. -- (id)objectForKeyedSubscript:(id)key; - -/// Updates the object given its key or adds it to the dictionary if it is not in the dictionary. -- (void)setObject:(id)obj forKeyedSubscript:(id)key; - -/// Returns the immutable dictionary. -- (NSDictionary *)dictionary; - -@end diff --git a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Network/Private/GULNetwork.h b/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Network/Private/GULNetwork.h deleted file mode 100644 index 646cb4406f..0000000000 --- a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Network/Private/GULNetwork.h +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -#import "GoogleUtilities/Network/Private/GULNetworkConstants.h" -#import "GoogleUtilities/Network/Private/GULNetworkLoggerProtocol.h" -#import "GoogleUtilities/Network/Private/GULNetworkURLSession.h" - -/// Delegate protocol for GULNetwork events. -@protocol GULNetworkReachabilityDelegate - -/// Tells the delegate to handle events when the network reachability changes to connected or not -/// connected. -- (void)reachabilityDidChange; - -@end - -/// The Network component that provides network status and handles network requests and responses. -/// This is not thread safe. -/// -/// NOTE: -/// User must add FIRAnalytics handleEventsForBackgroundURLSessionID:completionHandler to the -/// AppDelegate application:handleEventsForBackgroundURLSession:completionHandler: -@interface GULNetwork : NSObject - -/// Indicates if network connectivity is available. -@property(nonatomic, readonly, getter=isNetworkConnected) BOOL networkConnected; - -/// Indicates if there are any uploads in progress. -@property(nonatomic, readonly, getter=hasUploadInProgress) BOOL uploadInProgress; - -/// An optional delegate that can be used in the event when network reachability changes. -@property(nonatomic, weak) id reachabilityDelegate; - -/// An optional delegate that can be used to log messages, warnings or errors that occur in the -/// network operations. -@property(nonatomic, weak) id loggerDelegate; - -/// Indicates whether the logger should display debug messages. -@property(nonatomic, assign) BOOL isDebugModeEnabled; - -/// The time interval in seconds for the network request to timeout. -@property(nonatomic, assign) NSTimeInterval timeoutInterval; - -/// Initializes with the default reachability host. -- (instancetype)init; - -/// Initializes with a custom reachability host. -- (instancetype)initWithReachabilityHost:(NSString *)reachabilityHost; - -/// Handles events when background session with the given ID has finished. -+ (void)handleEventsForBackgroundURLSessionID:(NSString *)sessionID - completionHandler:(GULNetworkSystemCompletionHandler)completionHandler; - -/// Compresses and sends a POST request with the provided data to the URL. The session will be -/// background session if usingBackgroundSession is YES. Otherwise, the POST session is default -/// session. Returns a session ID or nil if an error occurs. -- (NSString *)postURL:(NSURL *)url - payload:(NSData *)payload - queue:(dispatch_queue_t)queue - usingBackgroundSession:(BOOL)usingBackgroundSession - completionHandler:(GULNetworkCompletionHandler)handler; - -/// Sends a GET request with the provided data to the URL. The session will be background session -/// if usingBackgroundSession is YES. Otherwise, the GET session is default session. Returns a -/// session ID or nil if an error occurs. -- (NSString *)getURL:(NSURL *)url - headers:(NSDictionary *)headers - queue:(dispatch_queue_t)queue - usingBackgroundSession:(BOOL)usingBackgroundSession - completionHandler:(GULNetworkCompletionHandler)handler; - -@end diff --git a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Network/Private/GULNetworkConstants.h b/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Network/Private/GULNetworkConstants.h deleted file mode 100644 index c73965f981..0000000000 --- a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Network/Private/GULNetworkConstants.h +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import -#import "GoogleUtilities/Logger/Private/GULLogger.h" - -/// Error codes in Firebase Network error domain. -/// Note: these error codes should never change. It would make it harder to decode the errors if -/// we inadvertently altered any of these codes in a future SDK version. -typedef NS_ENUM(NSInteger, GULNetworkErrorCode) { - /// Unknown error. - GULNetworkErrorCodeUnknown = 0, - /// Error occurs when the request URL is invalid. - GULErrorCodeNetworkInvalidURL = 1, - /// Error occurs when request cannot be constructed. - GULErrorCodeNetworkRequestCreation = 2, - /// Error occurs when payload cannot be compressed. - GULErrorCodeNetworkPayloadCompression = 3, - /// Error occurs when session task cannot be created. - GULErrorCodeNetworkSessionTaskCreation = 4, - /// Error occurs when there is no response. - GULErrorCodeNetworkInvalidResponse = 5 -}; - -#pragma mark - Network constants - -/// The prefix of the ID of the background session. -extern NSString *const kGULNetworkBackgroundSessionConfigIDPrefix; - -/// The sub directory to store the files of data that is being uploaded in the background. -extern NSString *const kGULNetworkApplicationSupportSubdirectory; - -/// Name of the temporary directory that stores files for background uploading. -extern NSString *const kGULNetworkTempDirectoryName; - -/// The period when the temporary uploading file can stay. -extern const NSTimeInterval kGULNetworkTempFolderExpireTime; - -/// The default network request timeout interval. -extern const NSTimeInterval kGULNetworkTimeOutInterval; - -/// The host to check the reachability of the network. -extern NSString *const kGULNetworkReachabilityHost; - -/// The key to get the error context of the UserInfo. -extern NSString *const kGULNetworkErrorContext; - -#pragma mark - Network Status Code - -extern const int kGULNetworkHTTPStatusOK; -extern const int kGULNetworkHTTPStatusNoContent; -extern const int kGULNetworkHTTPStatusCodeMultipleChoices; -extern const int kGULNetworkHTTPStatusCodeMovedPermanently; -extern const int kGULNetworkHTTPStatusCodeFound; -extern const int kGULNetworkHTTPStatusCodeNotModified; -extern const int kGULNetworkHTTPStatusCodeMovedTemporarily; -extern const int kGULNetworkHTTPStatusCodeNotFound; -extern const int kGULNetworkHTTPStatusCodeCannotAcceptTraffic; -extern const int kGULNetworkHTTPStatusCodeUnavailable; - -#pragma mark - Error Domain - -extern NSString *const kGULNetworkErrorDomain; - -/// The logger service for GULNetwork. -extern GULLoggerService kGULLoggerNetwork; diff --git a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Network/Private/GULNetworkLoggerProtocol.h b/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Network/Private/GULNetworkLoggerProtocol.h deleted file mode 100644 index b713e4a8f9..0000000000 --- a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Network/Private/GULNetworkLoggerProtocol.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -#import "GoogleUtilities/Logger/Private/GULLogger.h" - -#import "GoogleUtilities/Network/Private/GULNetworkMessageCode.h" - -/// The log levels used by GULNetworkLogger. -typedef NS_ENUM(NSInteger, GULNetworkLogLevel) { - kGULNetworkLogLevelError = GULLoggerLevelError, - kGULNetworkLogLevelWarning = GULLoggerLevelWarning, - kGULNetworkLogLevelInfo = GULLoggerLevelInfo, - kGULNetworkLogLevelDebug = GULLoggerLevelDebug, -}; - -@protocol GULNetworkLoggerDelegate - -@required -/// Tells the delegate to log a message with an array of contexts and the log level. -- (void)GULNetwork_logWithLevel:(GULNetworkLogLevel)logLevel - messageCode:(GULNetworkMessageCode)messageCode - message:(NSString *)message - contexts:(NSArray *)contexts; - -/// Tells the delegate to log a message with a context and the log level. -- (void)GULNetwork_logWithLevel:(GULNetworkLogLevel)logLevel - messageCode:(GULNetworkMessageCode)messageCode - message:(NSString *)message - context:(id)context; - -/// Tells the delegate to log a message with the log level. -- (void)GULNetwork_logWithLevel:(GULNetworkLogLevel)logLevel - messageCode:(GULNetworkMessageCode)messageCode - message:(NSString *)message; - -@end diff --git a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Network/Private/GULNetworkMessageCode.h b/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Network/Private/GULNetworkMessageCode.h deleted file mode 100644 index 507bc5a5dc..0000000000 --- a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Network/Private/GULNetworkMessageCode.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -// Make sure these codes do not overlap with any contained in the FIRAMessageCode enum. -typedef NS_ENUM(NSInteger, GULNetworkMessageCode) { - // GULNetwork.m - kGULNetworkMessageCodeNetwork000 = 900000, // I-NET900000 - kGULNetworkMessageCodeNetwork001 = 900001, // I-NET900001 - kGULNetworkMessageCodeNetwork002 = 900002, // I-NET900002 - kGULNetworkMessageCodeNetwork003 = 900003, // I-NET900003 - // GULNetworkURLSession.m - kGULNetworkMessageCodeURLSession000 = 901000, // I-NET901000 - kGULNetworkMessageCodeURLSession001 = 901001, // I-NET901001 - kGULNetworkMessageCodeURLSession002 = 901002, // I-NET901002 - kGULNetworkMessageCodeURLSession003 = 901003, // I-NET901003 - kGULNetworkMessageCodeURLSession004 = 901004, // I-NET901004 - kGULNetworkMessageCodeURLSession005 = 901005, // I-NET901005 - kGULNetworkMessageCodeURLSession006 = 901006, // I-NET901006 - kGULNetworkMessageCodeURLSession007 = 901007, // I-NET901007 - kGULNetworkMessageCodeURLSession008 = 901008, // I-NET901008 - kGULNetworkMessageCodeURLSession009 = 901009, // I-NET901009 - kGULNetworkMessageCodeURLSession010 = 901010, // I-NET901010 - kGULNetworkMessageCodeURLSession011 = 901011, // I-NET901011 - kGULNetworkMessageCodeURLSession012 = 901012, // I-NET901012 - kGULNetworkMessageCodeURLSession013 = 901013, // I-NET901013 - kGULNetworkMessageCodeURLSession014 = 901014, // I-NET901014 - kGULNetworkMessageCodeURLSession015 = 901015, // I-NET901015 - kGULNetworkMessageCodeURLSession016 = 901016, // I-NET901016 - kGULNetworkMessageCodeURLSession017 = 901017, // I-NET901017 - kGULNetworkMessageCodeURLSession018 = 901018, // I-NET901018 - kGULNetworkMessageCodeURLSession019 = 901019, // I-NET901019 -}; diff --git a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Network/Private/GULNetworkURLSession.h b/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Network/Private/GULNetworkURLSession.h deleted file mode 100644 index b4fa97091c..0000000000 --- a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Network/Private/GULNetworkURLSession.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -#import "GoogleUtilities/Network/Private/GULNetworkLoggerProtocol.h" - -NS_ASSUME_NONNULL_BEGIN - -typedef void (^GULNetworkCompletionHandler)(NSHTTPURLResponse *_Nullable response, - NSData *_Nullable data, - NSError *_Nullable error); -typedef void (^GULNetworkURLSessionCompletionHandler)(NSHTTPURLResponse *_Nullable response, - NSData *_Nullable data, - NSString *sessionID, - NSError *_Nullable error); -typedef void (^GULNetworkSystemCompletionHandler)(void); - -/// The protocol that uses NSURLSession for iOS >= 7.0 to handle requests and responses. -@interface GULNetworkURLSession : NSObject - -/// Indicates whether the background network is enabled. Default value is NO. -@property(nonatomic, getter=isBackgroundNetworkEnabled) BOOL backgroundNetworkEnabled; - -/// The logger delegate to log message, errors or warnings that occur during the network operations. -@property(nonatomic, weak, nullable) id loggerDelegate; - -/// Calls the system provided completion handler after the background session is finished. -+ (void)handleEventsForBackgroundURLSessionID:(NSString *)sessionID - completionHandler:(GULNetworkSystemCompletionHandler)completionHandler; - -/// Initializes with logger delegate. -- (instancetype)initWithNetworkLoggerDelegate: - (nullable id)networkLoggerDelegate NS_DESIGNATED_INITIALIZER; - -- (instancetype)init NS_UNAVAILABLE; - -/// Sends an asynchronous POST request and calls the provided completion handler when the request -/// completes or when errors occur, and returns an ID of the session/connection. -- (nullable NSString *)sessionIDFromAsyncPOSTRequest:(NSURLRequest *)request - completionHandler:(GULNetworkURLSessionCompletionHandler)handler; - -/// Sends an asynchronous GET request and calls the provided completion handler when the request -/// completes or when errors occur, and returns an ID of the session. -- (nullable NSString *)sessionIDFromAsyncGETRequest:(NSURLRequest *)request - completionHandler:(GULNetworkURLSessionCompletionHandler)handler; - -NS_ASSUME_NONNULL_END -@end diff --git a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Reachability/GULReachabilityChecker+Internal.h b/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Reachability/GULReachabilityChecker+Internal.h deleted file mode 100644 index 5a54e4420c..0000000000 --- a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Reachability/GULReachabilityChecker+Internal.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "GoogleUtilities/Reachability/Private/GULReachabilityChecker.h" -#if !TARGET_OS_WATCH -typedef SCNetworkReachabilityRef (*GULReachabilityCreateWithNameFn)(CFAllocatorRef allocator, - const char *host); - -typedef Boolean (*GULReachabilitySetCallbackFn)(SCNetworkReachabilityRef target, - SCNetworkReachabilityCallBack callback, - SCNetworkReachabilityContext *context); -typedef Boolean (*GULReachabilityScheduleWithRunLoopFn)(SCNetworkReachabilityRef target, - CFRunLoopRef runLoop, - CFStringRef runLoopMode); -typedef Boolean (*GULReachabilityUnscheduleFromRunLoopFn)(SCNetworkReachabilityRef target, - CFRunLoopRef runLoop, - CFStringRef runLoopMode); - -typedef void (*GULReachabilityReleaseFn)(CFTypeRef cf); - -struct GULReachabilityApi { - GULReachabilityCreateWithNameFn createWithNameFn; - GULReachabilitySetCallbackFn setCallbackFn; - GULReachabilityScheduleWithRunLoopFn scheduleWithRunLoopFn; - GULReachabilityUnscheduleFromRunLoopFn unscheduleFromRunLoopFn; - GULReachabilityReleaseFn releaseFn; -}; -#endif -@interface GULReachabilityChecker (Internal) - -- (const struct GULReachabilityApi *)reachabilityApi; -- (void)setReachabilityApi:(const struct GULReachabilityApi *)reachabilityApi; - -@end diff --git a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Reachability/GULReachabilityChecker.m b/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Reachability/GULReachabilityChecker.m deleted file mode 100644 index 8cbe609dee..0000000000 --- a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Reachability/GULReachabilityChecker.m +++ /dev/null @@ -1,263 +0,0 @@ -// Copyright 2017 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import - -#import "GoogleUtilities/Reachability/GULReachabilityChecker+Internal.h" -#import "GoogleUtilities/Reachability/Private/GULReachabilityChecker.h" -#import "GoogleUtilities/Reachability/Private/GULReachabilityMessageCode.h" - -#import "GoogleUtilities/Logger/Private/GULLogger.h" -#import "GoogleUtilities/Reachability/Private/GULReachabilityChecker.h" - -static GULLoggerService kGULLoggerReachability = @"[GULReachability]"; -#if !TARGET_OS_WATCH -static void ReachabilityCallback(SCNetworkReachabilityRef reachability, - SCNetworkReachabilityFlags flags, - void *info); - -static const struct GULReachabilityApi kGULDefaultReachabilityApi = { - SCNetworkReachabilityCreateWithName, - SCNetworkReachabilitySetCallback, - SCNetworkReachabilityScheduleWithRunLoop, - SCNetworkReachabilityUnscheduleFromRunLoop, - CFRelease, -}; - -static NSString *const kGULReachabilityUnknownStatus = @"Unknown"; -static NSString *const kGULReachabilityConnectedStatus = @"Connected"; -static NSString *const kGULReachabilityDisconnectedStatus = @"Disconnected"; -#endif -@interface GULReachabilityChecker () - -@property(nonatomic, assign) const struct GULReachabilityApi *reachabilityApi; -@property(nonatomic, assign) GULReachabilityStatus reachabilityStatus; -@property(nonatomic, copy) NSString *host; -#if !TARGET_OS_WATCH -@property(nonatomic, assign) SCNetworkReachabilityRef reachability; -#endif - -@end - -@implementation GULReachabilityChecker - -@synthesize reachabilityApi = reachabilityApi_; -#if !TARGET_OS_WATCH -@synthesize reachability = reachability_; -#endif - -- (const struct GULReachabilityApi *)reachabilityApi { - return reachabilityApi_; -} - -- (void)setReachabilityApi:(const struct GULReachabilityApi *)reachabilityApi { -#if !TARGET_OS_WATCH - if (reachability_) { - GULLogError(kGULLoggerReachability, NO, - [NSString stringWithFormat:@"I-REA%06ld", (long)kGULReachabilityMessageCode000], - @"Cannot change reachability API while reachability is running. " - @"Call stop first."); - return; - } - reachabilityApi_ = reachabilityApi; -#endif -} - -@synthesize reachabilityStatus = reachabilityStatus_; -@synthesize host = host_; -@synthesize reachabilityDelegate = reachabilityDelegate_; - -- (BOOL)isActive { -#if !TARGET_OS_WATCH - return reachability_ != nil; -#else - return NO; -#endif -} - -- (void)setReachabilityDelegate:(id)reachabilityDelegate { - if (reachabilityDelegate && - (![(NSObject *)reachabilityDelegate conformsToProtocol:@protocol(GULReachabilityDelegate)])) { - GULLogError(kGULLoggerReachability, NO, - [NSString stringWithFormat:@"I-NET%06ld", (long)kGULReachabilityMessageCode005], - @"Reachability delegate doesn't conform to Reachability protocol."); - return; - } - reachabilityDelegate_ = reachabilityDelegate; -} - -- (instancetype)initWithReachabilityDelegate:(id)reachabilityDelegate - withHost:(NSString *)host { - self = [super init]; - - if (!host || !host.length) { - GULLogError(kGULLoggerReachability, NO, - [NSString stringWithFormat:@"I-REA%06ld", (long)kGULReachabilityMessageCode001], - @"Invalid host specified"); - return nil; - } - if (self) { -#if !TARGET_OS_WATCH - [self setReachabilityDelegate:reachabilityDelegate]; - reachabilityApi_ = &kGULDefaultReachabilityApi; - reachabilityStatus_ = kGULReachabilityUnknown; - host_ = [host copy]; - reachability_ = nil; -#endif - } - return self; -} - -- (void)dealloc { - reachabilityDelegate_ = nil; - [self stop]; -} - -- (BOOL)start { -#if TARGET_OS_WATCH - return NO; -#else - - if (!reachability_) { - reachability_ = reachabilityApi_->createWithNameFn(kCFAllocatorDefault, [host_ UTF8String]); - if (!reachability_) { - return NO; - } - SCNetworkReachabilityContext context = { - 0, /* version */ - (__bridge void *)(self), /* info (passed as last parameter to reachability callback) */ - NULL, /* retain */ - NULL, /* release */ - NULL /* copyDescription */ - }; - if (!reachabilityApi_->setCallbackFn(reachability_, ReachabilityCallback, &context) || - !reachabilityApi_->scheduleWithRunLoopFn(reachability_, CFRunLoopGetMain(), - kCFRunLoopCommonModes)) { - reachabilityApi_->releaseFn(reachability_); - reachability_ = nil; - - GULLogError(kGULLoggerReachability, NO, - [NSString stringWithFormat:@"I-REA%06ld", (long)kGULReachabilityMessageCode002], - @"Failed to start reachability handle"); - return NO; - } - } - GULLogDebug(kGULLoggerReachability, NO, - [NSString stringWithFormat:@"I-REA%06ld", (long)kGULReachabilityMessageCode003], - @"Monitoring the network status"); - return YES; -#endif -} - -- (void)stop { -#if !TARGET_OS_WATCH - if (reachability_) { - reachabilityStatus_ = kGULReachabilityUnknown; - reachabilityApi_->unscheduleFromRunLoopFn(reachability_, CFRunLoopGetMain(), - kCFRunLoopCommonModes); - reachabilityApi_->releaseFn(reachability_); - reachability_ = nil; - } -#endif -} - -#if !TARGET_OS_WATCH -- (GULReachabilityStatus)statusForFlags:(SCNetworkReachabilityFlags)flags { - GULReachabilityStatus status = kGULReachabilityNotReachable; - // If the Reachable flag is not set, we definitely don't have connectivity. - if (flags & kSCNetworkReachabilityFlagsReachable) { - // Reachable flag is set. Check further flags. - if (!(flags & kSCNetworkReachabilityFlagsConnectionRequired)) { -// Connection required flag is not set, so we have connectivity. -#if TARGET_OS_IOS || TARGET_OS_TV - status = (flags & kSCNetworkReachabilityFlagsIsWWAN) ? kGULReachabilityViaCellular - : kGULReachabilityViaWifi; -#elif TARGET_OS_OSX - status = kGULReachabilityViaWifi; -#endif - } else if ((flags & (kSCNetworkReachabilityFlagsConnectionOnDemand | - kSCNetworkReachabilityFlagsConnectionOnTraffic)) && - !(flags & kSCNetworkReachabilityFlagsInterventionRequired)) { -// If the connection on demand or connection on traffic flag is set, and user intervention -// is not required, we have connectivity. -#if TARGET_OS_IOS || TARGET_OS_TV - status = (flags & kSCNetworkReachabilityFlagsIsWWAN) ? kGULReachabilityViaCellular - : kGULReachabilityViaWifi; -#elif TARGET_OS_OSX - status = kGULReachabilityViaWifi; -#endif - } - } - return status; -} - -- (void)reachabilityFlagsChanged:(SCNetworkReachabilityFlags)flags { - GULReachabilityStatus status = [self statusForFlags:flags]; - if (reachabilityStatus_ != status) { - NSString *reachabilityStatusString; - if (status == kGULReachabilityUnknown) { - reachabilityStatusString = kGULReachabilityUnknownStatus; - } else { - reachabilityStatusString = (status == kGULReachabilityNotReachable) - ? kGULReachabilityDisconnectedStatus - : kGULReachabilityConnectedStatus; - } - - GULLogDebug(kGULLoggerReachability, NO, - [NSString stringWithFormat:@"I-REA%06ld", (long)kGULReachabilityMessageCode004], - @"Network status has changed. Code:%@, status:%@", @(status), - reachabilityStatusString); - reachabilityStatus_ = status; - [reachabilityDelegate_ reachability:self statusChanged:reachabilityStatus_]; - } -} - -#endif -@end - -#if !TARGET_OS_WATCH -static void ReachabilityCallback(SCNetworkReachabilityRef reachability, - SCNetworkReachabilityFlags flags, - void *info) { - GULReachabilityChecker *checker = (__bridge GULReachabilityChecker *)info; - [checker reachabilityFlagsChanged:flags]; -} -#endif - -// This function used to be at the top of the file, but it was moved here -// as a workaround for a suspected compiler bug. When compiled in Release mode -// and run on an iOS device with WiFi disabled, the reachability code crashed -// when calling SCNetworkReachabilityScheduleWithRunLoop, or shortly thereafter. -// After unsuccessfully trying to diagnose the cause of the crash, it was -// discovered that moving this function to the end of the file magically fixed -// the crash. If you are going to edit this file, exercise caution and make sure -// to test thoroughly with an iOS device under various network conditions. -const NSString *GULReachabilityStatusString(GULReachabilityStatus status) { - switch (status) { - case kGULReachabilityUnknown: - return @"Reachability Unknown"; - - case kGULReachabilityNotReachable: - return @"Not reachable"; - - case kGULReachabilityViaWifi: - return @"Reachable via Wifi"; - - case kGULReachabilityViaCellular: - return @"Reachable via Cellular Data"; - - default: - return [NSString stringWithFormat:@"Invalid reachability status %d", (int)status]; - } -} diff --git a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Reachability/Private/GULReachabilityChecker.h b/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Reachability/Private/GULReachabilityChecker.h deleted file mode 100644 index 0c70c0553f..0000000000 --- a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Reachability/Private/GULReachabilityChecker.h +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import -#if !TARGET_OS_WATCH -#import -#endif - -/// Reachability Status -typedef enum { - kGULReachabilityUnknown, ///< Have not yet checked or been notified whether host is reachable. - kGULReachabilityNotReachable, ///< Host is not reachable. - kGULReachabilityViaWifi, ///< Host is reachable via Wifi. - kGULReachabilityViaCellular, ///< Host is reachable via cellular. -} GULReachabilityStatus; - -const NSString *GULReachabilityStatusString(GULReachabilityStatus status); - -@class GULReachabilityChecker; - -/// Google Analytics iOS Reachability Checker. -@protocol GULReachabilityDelegate -@required -/// Called when network status has changed. -- (void)reachability:(GULReachabilityChecker *)reachability - statusChanged:(GULReachabilityStatus)status; -@end - -/// Google Analytics iOS Network Status Checker. -@interface GULReachabilityChecker : NSObject - -/// The last known reachability status, or GULReachabilityStatusUnknown if the -/// checker is not active. -@property(nonatomic, readonly) GULReachabilityStatus reachabilityStatus; -/// The host to which reachability status is to be checked. -@property(nonatomic, copy, readonly) NSString *host; -/// The delegate to be notified of reachability status changes. -@property(nonatomic, weak) id reachabilityDelegate; -/// `YES` if the reachability checker is active, `NO` otherwise. -@property(nonatomic, readonly) BOOL isActive; - -/// Initialize the reachability checker. Note that you must call start to begin checking for and -/// receiving notifications about network status changes. -/// -/// @param reachabilityDelegate The delegate to be notified when reachability status to host -/// changes. -/// -/// @param host The name of the host. -/// -- (instancetype)initWithReachabilityDelegate:(id)reachabilityDelegate - withHost:(NSString *)host; - -- (instancetype)init NS_UNAVAILABLE; - -/// Start checking for reachability to the specified host. This has no effect if the status -/// checker is already checking for connectivity. -/// -/// @return `YES` if initiating status checking was successful or the status checking has already -/// been initiated, `NO` otherwise. -- (BOOL)start; - -/// Stop checking for reachability to the specified host. This has no effect if the status -/// checker is not checking for connectivity. -- (void)stop; - -@end diff --git a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Reachability/Private/GULReachabilityMessageCode.h b/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Reachability/Private/GULReachabilityMessageCode.h deleted file mode 100644 index 373e0af404..0000000000 --- a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/Reachability/Private/GULReachabilityMessageCode.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright 2017 Google - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import - -// Make sure these codes do not overlap with any contained in the FIRAMessageCode enum. -typedef NS_ENUM(NSInteger, GULReachabilityMessageCode) { - // GULReachabilityChecker.m - kGULReachabilityMessageCode000 = 902000, // I-NET902000 - kGULReachabilityMessageCode001 = 902001, // I-NET902001 - kGULReachabilityMessageCode002 = 902002, // I-NET902002 - kGULReachabilityMessageCode003 = 902003, // I-NET902003 - kGULReachabilityMessageCode004 = 902004, // I-NET902004 - kGULReachabilityMessageCode005 = 902005, // I-NET902005 - kGULReachabilityMessageCode006 = 902006, // I-NET902006 -}; diff --git a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/SceneDelegateSwizzler/GULSceneDelegateSwizzler.m b/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/SceneDelegateSwizzler/GULSceneDelegateSwizzler.m deleted file mode 100644 index 134caa98d9..0000000000 --- a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/SceneDelegateSwizzler/GULSceneDelegateSwizzler.m +++ /dev/null @@ -1,438 +0,0 @@ -// Copyright 2019 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import - -#import "GoogleUtilities/AppDelegateSwizzler/Private/GULAppDelegateSwizzler.h" -#import "GoogleUtilities/Common/GULLoggerCodes.h" -#import "GoogleUtilities/Environment/Private/GULAppEnvironmentUtil.h" -#import "GoogleUtilities/Logger/Private/GULLogger.h" -#import "GoogleUtilities/Network/Private/GULMutableDictionary.h" -#import "GoogleUtilities/SceneDelegateSwizzler/Internal/GULSceneDelegateSwizzler_Private.h" -#import "GoogleUtilities/SceneDelegateSwizzler/Private/GULSceneDelegateSwizzler.h" - -#import - -#if UISCENE_SUPPORTED -API_AVAILABLE(ios(13.0), tvos(13.0)) -typedef void (*GULOpenURLContextsIMP)(id, SEL, UIScene *, NSSet *); - -API_AVAILABLE(ios(13.0), tvos(13.0)) -typedef void (^GULSceneDelegateInterceptorCallback)(id); - -// The strings below are the keys for associated objects. -static char const *const kGULRealIMPBySelectorKey = "GUL_realIMPBySelector"; -static char const *const kGULRealClassKey = "GUL_realClass"; -#endif // UISCENE_SUPPORTED - -static GULLoggerService kGULLoggerSwizzler = @"[GoogleUtilities/SceneDelegateSwizzler]"; - -// Since Firebase SDKs also use this for app delegate proxying, in order to not be a breaking change -// we disable App Delegate proxying when either of these two flags are set to NO. - -/** Plist key that allows Firebase developers to disable App and Scene Delegate Proxying. */ -static NSString *const kGULFirebaseSceneDelegateProxyEnabledPlistKey = - @"FirebaseAppDelegateProxyEnabled"; - -/** Plist key that allows developers not using Firebase to disable App and Scene Delegate Proxying. - */ -static NSString *const kGULGoogleUtilitiesSceneDelegateProxyEnabledPlistKey = - @"GoogleUtilitiesAppDelegateProxyEnabled"; - -/** The prefix of the Scene Delegate. */ -static NSString *const kGULSceneDelegatePrefix = @"GUL_"; - -/** - * This class is necessary to store the delegates in an NSArray without retaining them. - * [NSValue valueWithNonRetainedObject] also provides this functionality, but does not provide a - * zeroing pointer. This will cause EXC_BAD_ACCESS when trying to access the object after it is - * dealloced. Instead, this container stores a weak, zeroing reference to the object, which - * automatically is set to nil by the runtime when the object is dealloced. - */ -@interface GULSceneZeroingWeakContainer : NSObject - -/** Stores a weak object. */ -@property(nonatomic, weak) id object; - -@end - -@implementation GULSceneZeroingWeakContainer -@end - -@implementation GULSceneDelegateSwizzler - -#pragma mark - Public methods - -+ (BOOL)isSceneDelegateProxyEnabled { - return [GULAppDelegateSwizzler isAppDelegateProxyEnabled]; -} - -+ (void)proxyOriginalSceneDelegate { -#if UISCENE_SUPPORTED - if ([GULAppEnvironmentUtil isAppExtension]) { - return; - } - - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - if (@available(iOS 13.0, tvOS 13.0, *)) { - if (![GULSceneDelegateSwizzler isSceneDelegateProxyEnabled]) { - return; - } - [[NSNotificationCenter defaultCenter] - addObserver:self - selector:@selector(handleSceneWillConnectToNotification:) - name:UISceneWillConnectNotification - object:nil]; - } - }); -#endif // UISCENE_SUPPORTED -} - -#if UISCENE_SUPPORTED -+ (GULSceneDelegateInterceptorID)registerSceneDelegateInterceptor:(id)interceptor { - NSAssert(interceptor, @"SceneDelegateProxy cannot add nil interceptor"); - NSAssert([interceptor conformsToProtocol:@protocol(UISceneDelegate)], - @"SceneDelegateProxy interceptor does not conform to UIApplicationDelegate"); - - if (!interceptor) { - GULLogError(kGULLoggerSwizzler, NO, - [NSString stringWithFormat:@"I-SWZ%06ld", - (long)kGULSwizzlerMessageCodeSceneDelegateSwizzling000], - @"SceneDelegateProxy cannot add nil interceptor."); - return nil; - } - if (![interceptor conformsToProtocol:@protocol(UISceneDelegate)]) { - GULLogError(kGULLoggerSwizzler, NO, - [NSString stringWithFormat:@"I-SWZ%06ld", - (long)kGULSwizzlerMessageCodeSceneDelegateSwizzling001], - @"SceneDelegateProxy interceptor does not conform to UIApplicationDelegate"); - return nil; - } - - // The ID should be the same given the same interceptor object. - NSString *interceptorID = - [NSString stringWithFormat:@"%@%p", kGULSceneDelegatePrefix, interceptor]; - if (!interceptorID.length) { - GULLogError(kGULLoggerSwizzler, NO, - [NSString stringWithFormat:@"I-SWZ%06ld", - (long)kGULSwizzlerMessageCodeSceneDelegateSwizzling002], - @"SceneDelegateProxy cannot create Interceptor ID."); - return nil; - } - GULSceneZeroingWeakContainer *weakObject = [[GULSceneZeroingWeakContainer alloc] init]; - weakObject.object = interceptor; - [GULSceneDelegateSwizzler interceptors][interceptorID] = weakObject; - return interceptorID; -} - -+ (void)unregisterSceneDelegateInterceptorWithID:(GULSceneDelegateInterceptorID)interceptorID { - NSAssert(interceptorID, @"SceneDelegateProxy cannot unregister nil interceptor ID."); - NSAssert(((NSString *)interceptorID).length != 0, - @"SceneDelegateProxy cannot unregister empty interceptor ID."); - - if (!interceptorID) { - GULLogError(kGULLoggerSwizzler, NO, - [NSString stringWithFormat:@"I-SWZ%06ld", - (long)kGULSwizzlerMessageCodeSceneDelegateSwizzling003], - @"SceneDelegateProxy cannot unregister empty interceptor ID."); - return; - } - - GULSceneZeroingWeakContainer *weakContainer = - [GULSceneDelegateSwizzler interceptors][interceptorID]; - if (!weakContainer.object) { - GULLogError(kGULLoggerSwizzler, NO, - [NSString stringWithFormat:@"I-SWZ%06ld", - (long)kGULSwizzlerMessageCodeSceneDelegateSwizzling004], - @"SceneDelegateProxy cannot unregister interceptor that was not registered. " - "Interceptor ID %@", - interceptorID); - return; - } - - [[GULSceneDelegateSwizzler interceptors] removeObjectForKey:interceptorID]; -} - -#pragma mark - Helper methods - -+ (GULMutableDictionary *)interceptors { - static dispatch_once_t onceToken; - static GULMutableDictionary *sInterceptors; - dispatch_once(&onceToken, ^{ - sInterceptors = [[GULMutableDictionary alloc] init]; - }); - return sInterceptors; -} - -+ (void)clearInterceptors { - [[self interceptors] removeAllObjects]; -} - -+ (nullable NSValue *)originalImplementationForSelector:(SEL)selector object:(id)object { - NSDictionary *realImplementationBySelector = - objc_getAssociatedObject(object, &kGULRealIMPBySelectorKey); - return realImplementationBySelector[NSStringFromSelector(selector)]; -} - -+ (void)proxyDestinationSelector:(SEL)destinationSelector - implementationsFromSourceSelector:(SEL)sourceSelector - fromClass:(Class)sourceClass - toClass:(Class)destinationClass - realClass:(Class)realClass - storeDestinationImplementationTo: - (NSMutableDictionary *)destinationImplementationsBySelector { - [self addInstanceMethodWithDestinationSelector:destinationSelector - withImplementationFromSourceSelector:sourceSelector - fromClass:sourceClass - toClass:destinationClass]; - IMP sourceImplementation = - [GULSceneDelegateSwizzler implementationOfMethodSelector:destinationSelector - fromClass:realClass]; - NSValue *sourceImplementationPointer = [NSValue valueWithPointer:sourceImplementation]; - - NSString *destinationSelectorString = NSStringFromSelector(destinationSelector); - destinationImplementationsBySelector[destinationSelectorString] = sourceImplementationPointer; -} - -/** Copies a method identified by the methodSelector from one class to the other. After this method - * is called, performing [toClassInstance methodSelector] will be similar to calling - * [fromClassInstance methodSelector]. This method does nothing if toClass already has a method - * identified by methodSelector. - * - * @param methodSelector The SEL that identifies both the method on the fromClass as well as the - * one on the toClass. - * @param fromClass The class from which a method is sourced. - * @param toClass The class to which the method is added. If the class already has a method with - * the same selector, this has no effect. - */ -+ (void)addInstanceMethodWithSelector:(SEL)methodSelector - fromClass:(Class)fromClass - toClass:(Class)toClass { - [self addInstanceMethodWithDestinationSelector:methodSelector - withImplementationFromSourceSelector:methodSelector - fromClass:fromClass - toClass:toClass]; -} - -/** Copies a method identified by the sourceSelector from the fromClass as a method for the - * destinationSelector on the toClass. After this method is called, performing - * [toClassInstance destinationSelector] will be similar to calling - * [fromClassInstance sourceSelector]. This method does nothing if toClass already has a method - * identified by destinationSelector. - * - * @param destinationSelector The SEL that identifies the method on the toClass. - * @param sourceSelector The SEL that identifies the method on the fromClass. - * @param fromClass The class from which a method is sourced. - * @param toClass The class to which the method is added. If the class already has a method with - * the same selector, this has no effect. - */ -+ (void)addInstanceMethodWithDestinationSelector:(SEL)destinationSelector - withImplementationFromSourceSelector:(SEL)sourceSelector - fromClass:(Class)fromClass - toClass:(Class)toClass { - Method method = class_getInstanceMethod(fromClass, sourceSelector); - IMP methodIMP = method_getImplementation(method); - const char *types = method_getTypeEncoding(method); - if (!class_addMethod(toClass, destinationSelector, methodIMP, types)) { - GULLogWarning( - kGULLoggerSwizzler, NO, - [NSString - stringWithFormat:@"I-SWZ%06ld", (long)kGULSwizzlerMessageCodeSceneDelegateSwizzling009], - @"Cannot copy method to destination selector %@ as it already exists", - NSStringFromSelector(destinationSelector)); - } -} - -/** Gets the IMP of the instance method on the class identified by the selector. - * - * @param selector The selector of which the IMP is to be fetched. - * @param aClass The class from which the IMP is to be fetched. - * @return The IMP of the instance method identified by selector and aClass. - */ -+ (IMP)implementationOfMethodSelector:(SEL)selector fromClass:(Class)aClass { - Method aMethod = class_getInstanceMethod(aClass, selector); - return method_getImplementation(aMethod); -} - -/** Enumerates through all the interceptors and if they respond to a given selector, executes a - * GULSceneDelegateInterceptorCallback with the interceptor. - * - * @param methodSelector The SEL to check if an interceptor responds to. - * @param callback the GULSceneDelegateInterceptorCallback. - */ -+ (void)notifyInterceptorsWithMethodSelector:(SEL)methodSelector - callback:(GULSceneDelegateInterceptorCallback)callback - API_AVAILABLE(ios(13.0)) { - if (!callback) { - return; - } - - NSDictionary *interceptors = [GULSceneDelegateSwizzler interceptors].dictionary; - [interceptors enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { - GULSceneZeroingWeakContainer *interceptorContainer = obj; - id interceptor = interceptorContainer.object; - if (!interceptor) { - GULLogWarning( - kGULLoggerSwizzler, NO, - [NSString stringWithFormat:@"I-SWZ%06ld", - (long)kGULSwizzlerMessageCodeSceneDelegateSwizzling010], - @"SceneDelegateProxy cannot find interceptor with ID %@. Removing the interceptor.", key); - [[GULSceneDelegateSwizzler interceptors] removeObjectForKey:key]; - return; - } - if ([interceptor respondsToSelector:methodSelector]) { - callback(interceptor); - } - }]; -} - -+ (void)handleSceneWillConnectToNotification:(NSNotification *)notification { - if (@available(iOS 13.0, tvOS 13.0, *)) { - if ([notification.object isKindOfClass:[UIScene class]]) { - UIScene *scene = (UIScene *)notification.object; - [GULSceneDelegateSwizzler proxySceneDelegateIfNeeded:scene]; - } - } -} - -#pragma mark - [Donor Methods] UISceneDelegate URL handler - -- (void)scene:(UIScene *)scene - openURLContexts:(NSSet *)URLContexts API_AVAILABLE(ios(13.0), tvos(13.0)) { - if (@available(iOS 13.0, tvOS 13.0, *)) { - SEL methodSelector = @selector(scene:openURLContexts:); - // Call the real implementation if the real Scene Delegate has any. - NSValue *openURLContextsIMPPointer = - [GULSceneDelegateSwizzler originalImplementationForSelector:methodSelector object:self]; - GULOpenURLContextsIMP openURLContextsIMP = [openURLContextsIMPPointer pointerValue]; - - [GULSceneDelegateSwizzler - notifyInterceptorsWithMethodSelector:methodSelector - callback:^(id interceptor) { - if ([interceptor - conformsToProtocol:@protocol(UISceneDelegate)]) { - id sceneInterceptor = - (id)interceptor; - [sceneInterceptor scene:scene openURLContexts:URLContexts]; - } - }]; - - if (openURLContextsIMP) { - openURLContextsIMP(self, methodSelector, scene, URLContexts); - } - } -} - -+ (void)proxySceneDelegateIfNeeded:(UIScene *)scene { - Class realClass = [scene.delegate class]; - NSString *className = NSStringFromClass(realClass); - - // Skip proxying if failed to get the delegate class name for some reason (e.g. `delegate == nil`) - // or the class has a prefix of kGULAppDelegatePrefix, which means it has been proxied before. - if (className == nil || [className hasPrefix:kGULSceneDelegatePrefix]) { - return; - } - - NSString *classNameWithPrefix = [kGULSceneDelegatePrefix stringByAppendingString:className]; - NSString *newClassName = - [NSString stringWithFormat:@"%@-%@", classNameWithPrefix, [NSUUID UUID].UUIDString]; - - if (NSClassFromString(newClassName)) { - GULLogError( - kGULLoggerSwizzler, NO, - [NSString - stringWithFormat:@"I-SWZ%06ld", - (long) - kGULSwizzlerMessageCodeSceneDelegateSwizzlingInvalidSceneDelegate], - @"Cannot create a proxy for Scene Delegate. Subclass already exists. Original Class" - @": %@, subclass: %@", - className, newClassName); - return; - } - - // Register the new class as subclass of the real one. Do not allocate more than the real class - // size. - Class sceneDelegateSubClass = objc_allocateClassPair(realClass, newClassName.UTF8String, 0); - if (sceneDelegateSubClass == Nil) { - GULLogError( - kGULLoggerSwizzler, NO, - [NSString - stringWithFormat:@"I-SWZ%06ld", - (long) - kGULSwizzlerMessageCodeSceneDelegateSwizzlingInvalidSceneDelegate], - @"Cannot create a proxy for Scene Delegate. Subclass already exists. Original Class" - @": %@, subclass: Nil", - className); - return; - } - - NSMutableDictionary *realImplementationsBySelector = - [[NSMutableDictionary alloc] init]; - - // For scene:openURLContexts: - SEL openURLContextsSEL = @selector(scene:openURLContexts:); - [self proxyDestinationSelector:openURLContextsSEL - implementationsFromSourceSelector:openURLContextsSEL - fromClass:[GULSceneDelegateSwizzler class] - toClass:sceneDelegateSubClass - realClass:realClass - storeDestinationImplementationTo:realImplementationsBySelector]; - - // Store original implementations to a fake property of the original delegate. - objc_setAssociatedObject(scene.delegate, &kGULRealIMPBySelectorKey, - [realImplementationsBySelector copy], OBJC_ASSOCIATION_RETAIN_NONATOMIC); - objc_setAssociatedObject(scene.delegate, &kGULRealClassKey, realClass, - OBJC_ASSOCIATION_RETAIN_NONATOMIC); - - // The subclass size has to be exactly the same size with the original class size. The subclass - // cannot have more ivars/properties than its superclass since it will cause an offset in memory - // that can lead to overwriting the isa of an object in the next frame. - if (class_getInstanceSize(realClass) != class_getInstanceSize(sceneDelegateSubClass)) { - GULLogError( - kGULLoggerSwizzler, NO, - [NSString - stringWithFormat:@"I-SWZ%06ld", - (long) - kGULSwizzlerMessageCodeSceneDelegateSwizzlingInvalidSceneDelegate], - @"Cannot create subclass of Scene Delegate, because the created subclass is not the " - @"same size. %@", - className); - NSAssert(NO, @"Classes must be the same size to swizzle isa"); - return; - } - - // Make the newly created class to be the subclass of the real Scene Delegate class. - objc_registerClassPair(sceneDelegateSubClass); - if (object_setClass(scene.delegate, sceneDelegateSubClass)) { - GULLogDebug( - kGULLoggerSwizzler, NO, - [NSString - stringWithFormat:@"I-SWZ%06ld", - (long) - kGULSwizzlerMessageCodeSceneDelegateSwizzlingInvalidSceneDelegate], - @"Successfully created Scene Delegate Proxy automatically. To disable the " - @"proxy, set the flag %@ to NO (Boolean) in the Info.plist", - [GULSceneDelegateSwizzler correctSceneDelegateProxyKey]); - } -} - -+ (NSString *)correctSceneDelegateProxyKey { - return NSClassFromString(@"FIRCore") ? kGULFirebaseSceneDelegateProxyEnabledPlistKey - : kGULGoogleUtilitiesSceneDelegateProxyEnabledPlistKey; -} - -#endif // UISCENE_SUPPORTED - -@end diff --git a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/SceneDelegateSwizzler/Internal/GULSceneDelegateSwizzler_Private.h b/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/SceneDelegateSwizzler/Internal/GULSceneDelegateSwizzler_Private.h deleted file mode 100644 index 62f214ab45..0000000000 --- a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/SceneDelegateSwizzler/Internal/GULSceneDelegateSwizzler_Private.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import -#import "GoogleUtilities/Network/Private/GULMutableDictionary.h" -#import "GoogleUtilities/SceneDelegateSwizzler/Private/GULSceneDelegateSwizzler.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface GULSceneDelegateSwizzler () - -#if UISCENE_SUPPORTED - -/** Returns a dictionary containing interceptor IDs mapped to a GULZeroingWeakContainer. - * - * @return A dictionary of the form {NSString : GULZeroingWeakContainer}, where the NSString is - * the interceptorID. - */ -+ (GULMutableDictionary *)interceptors; - -/** Deletes all the registered interceptors. */ -+ (void)clearInterceptors; - -/** ISA Swizzles the given appDelegate as the original app delegate would be. - * - * @param scene The scene whose delegate needs to be isa swizzled. This should conform to the - * scene delegate protocol. - */ -+ (void)proxySceneDelegateIfNeeded:(UIScene *)scene API_AVAILABLE(ios(13.0), tvos(13.0)); - -#endif // UISCENE_SUPPORTED - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/SceneDelegateSwizzler/Private/GULSceneDelegateSwizzler.h b/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/SceneDelegateSwizzler/Private/GULSceneDelegateSwizzler.h deleted file mode 100644 index 420b3e76cd..0000000000 --- a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/SceneDelegateSwizzler/Private/GULSceneDelegateSwizzler.h +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#if !TARGET_OS_OSX -#import -#endif // !TARGET_OS_OSX - -#if ((TARGET_OS_IOS || TARGET_OS_TV) && (__IPHONE_OS_VERSION_MAX_ALLOWED >= 130000)) -#define UISCENE_SUPPORTED 1 -#endif - -NS_ASSUME_NONNULL_BEGIN - -typedef NSString *const GULSceneDelegateInterceptorID; - -/** This class contains methods that isa swizzle the scene delegate. */ -@interface GULSceneDelegateSwizzler : NSProxy - -#if UISCENE_SUPPORTED - -/** Registers a scene delegate interceptor whose methods will be invoked as they're invoked on the - * original scene delegate. - * - * @param interceptor An instance of a class that conforms to the application delegate protocol. - * The interceptor is NOT retained. - * @return A unique GULSceneDelegateInterceptorID if interceptor was successfully registered; nil - * if it fails. - */ -+ (nullable GULSceneDelegateInterceptorID)registerSceneDelegateInterceptor: - (id)interceptor API_AVAILABLE(ios(13.0), tvos(13.0)); - -/** Unregisters an interceptor with the given ID if it exists. - * - * @param interceptorID The object that was generated when the interceptor was registered. - */ -+ (void)unregisterSceneDelegateInterceptorWithID:(GULSceneDelegateInterceptorID)interceptorID - API_AVAILABLE(ios(13.0), tvos(13.0)); - -/** Do not initialize this class. */ -- (instancetype)init NS_UNAVAILABLE; - -#endif // UISCENE_SUPPORTED - -/** This method ensures that the original scene delegate has been proxied. Call this before - * registering your interceptor. This method is safe to call multiple times (but it only proxies - * the scene delegate once). - * - * The method has no effect for extensions. - */ -+ (void)proxyOriginalSceneDelegate; - -/** Indicates whether scene delegate proxy is explicitly disabled or enabled. Enabled by default. - * - * @return YES if SceneDelegateProxy is Enabled, NO otherwise. - */ -+ (BOOL)isSceneDelegateProxyEnabled; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/UserDefaults/GULUserDefaults.m b/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/UserDefaults/GULUserDefaults.m deleted file mode 100644 index 20fe8eed1d..0000000000 --- a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/UserDefaults/GULUserDefaults.m +++ /dev/null @@ -1,213 +0,0 @@ -// Copyright 2018 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "GoogleUtilities/UserDefaults/Private/GULUserDefaults.h" - -#import "GoogleUtilities/Logger/Private/GULLogger.h" - -NS_ASSUME_NONNULL_BEGIN - -static NSTimeInterval const kGULSynchronizeInterval = 1.0; - -static NSString *const kGULLogFormat = @"I-GUL%06ld"; - -static GULLoggerService kGULLogUserDefaultsService = @"[GoogleUtilities/UserDefaults]"; - -typedef NS_ENUM(NSInteger, GULUDMessageCode) { - GULUDMessageCodeInvalidKeyGet = 1, - GULUDMessageCodeInvalidKeySet = 2, - GULUDMessageCodeInvalidObjectSet = 3, - GULUDMessageCodeSynchronizeFailed = 4, -}; - -@interface GULUserDefaults () - -/// Equivalent to the suite name for NSUserDefaults. -@property(readonly) CFStringRef appNameRef; - -@property(atomic) BOOL isPreferenceFileExcluded; - -@end - -@implementation GULUserDefaults { - // The application name is the same with the suite name of the NSUserDefaults, and it is used for - // preferences. - CFStringRef _appNameRef; -} - -+ (GULUserDefaults *)standardUserDefaults { - static GULUserDefaults *standardUserDefaults; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - standardUserDefaults = [[GULUserDefaults alloc] init]; - }); - return standardUserDefaults; -} - -- (instancetype)init { - return [self initWithSuiteName:nil]; -} - -- (instancetype)initWithSuiteName:(nullable NSString *)suiteName { - self = [super init]; - - NSString *name = [suiteName copy]; - - if (self) { - // `kCFPreferencesCurrentApplication` maps to the same defaults database as - // `[NSUserDefaults standardUserDefaults]`. - _appNameRef = - name.length ? (__bridge_retained CFStringRef)name : kCFPreferencesCurrentApplication; - } - - return self; -} - -- (void)dealloc { - // If we're using a custom `_appNameRef` it needs to be released. If it's a constant, it shouldn't - // need to be released since we don't own it. - if (CFStringCompare(_appNameRef, kCFPreferencesCurrentApplication, 0) != kCFCompareEqualTo) { - CFRelease(_appNameRef); - } - - [NSObject cancelPreviousPerformRequestsWithTarget:self - selector:@selector(synchronize) - object:nil]; -} - -- (nullable id)objectForKey:(NSString *)defaultName { - NSString *key = [defaultName copy]; - if (![key isKindOfClass:[NSString class]] || !key.length) { - GULLogWarning(@"", NO, - [NSString stringWithFormat:kGULLogFormat, (long)GULUDMessageCodeInvalidKeyGet], - @"Cannot get object for invalid user default key."); - return nil; - } - return (__bridge_transfer id)CFPreferencesCopyAppValue((__bridge CFStringRef)key, _appNameRef); -} - -- (void)setObject:(nullable id)value forKey:(NSString *)defaultName { - NSString *key = [defaultName copy]; - if (![key isKindOfClass:[NSString class]] || !key.length) { - GULLogWarning(kGULLogUserDefaultsService, NO, - [NSString stringWithFormat:kGULLogFormat, (long)GULUDMessageCodeInvalidKeySet], - @"Cannot set object for invalid user default key."); - return; - } - if (!value) { - CFPreferencesSetAppValue((__bridge CFStringRef)key, NULL, _appNameRef); - [self scheduleSynchronize]; - return; - } - BOOL isAcceptableValue = - [value isKindOfClass:[NSString class]] || [value isKindOfClass:[NSNumber class]] || - [value isKindOfClass:[NSArray class]] || [value isKindOfClass:[NSDictionary class]] || - [value isKindOfClass:[NSDate class]] || [value isKindOfClass:[NSData class]]; - if (!isAcceptableValue) { - GULLogWarning(kGULLogUserDefaultsService, NO, - [NSString stringWithFormat:kGULLogFormat, (long)GULUDMessageCodeInvalidObjectSet], - @"Cannot set invalid object to user defaults. Must be a string, number, array, " - @"dictionary, date, or data. Value: %@", - value); - return; - } - - CFPreferencesSetAppValue((__bridge CFStringRef)key, (__bridge CFStringRef)value, _appNameRef); - [self scheduleSynchronize]; -} - -- (void)removeObjectForKey:(NSString *)key { - [self setObject:nil forKey:key]; -} - -#pragma mark - Getters - -- (NSInteger)integerForKey:(NSString *)defaultName { - NSNumber *object = [self objectForKey:defaultName]; - return object.integerValue; -} - -- (float)floatForKey:(NSString *)defaultName { - NSNumber *object = [self objectForKey:defaultName]; - return object.floatValue; -} - -- (double)doubleForKey:(NSString *)defaultName { - NSNumber *object = [self objectForKey:defaultName]; - return object.doubleValue; -} - -- (BOOL)boolForKey:(NSString *)defaultName { - NSNumber *object = [self objectForKey:defaultName]; - return object.boolValue; -} - -- (nullable NSString *)stringForKey:(NSString *)defaultName { - return [self objectForKey:defaultName]; -} - -- (nullable NSArray *)arrayForKey:(NSString *)defaultName { - return [self objectForKey:defaultName]; -} - -- (nullable NSDictionary *)dictionaryForKey:(NSString *)defaultName { - return [self objectForKey:defaultName]; -} - -#pragma mark - Setters - -- (void)setInteger:(NSInteger)integer forKey:(NSString *)defaultName { - [self setObject:@(integer) forKey:defaultName]; -} - -- (void)setFloat:(float)value forKey:(NSString *)defaultName { - [self setObject:@(value) forKey:defaultName]; -} - -- (void)setDouble:(double)doubleNumber forKey:(NSString *)defaultName { - [self setObject:@(doubleNumber) forKey:defaultName]; -} - -- (void)setBool:(BOOL)boolValue forKey:(NSString *)defaultName { - [self setObject:@(boolValue) forKey:defaultName]; -} - -#pragma mark - Save data - -- (void)synchronize { - if (!CFPreferencesAppSynchronize(_appNameRef)) { - GULLogError(kGULLogUserDefaultsService, NO, - [NSString stringWithFormat:kGULLogFormat, (long)GULUDMessageCodeSynchronizeFailed], - @"Cannot synchronize user defaults to disk"); - } -} - -#pragma mark - Private methods - -- (void)scheduleSynchronize { - // Synchronize data using a timer so that multiple set... calls can be coalesced under one - // synchronize. - [NSObject cancelPreviousPerformRequestsWithTarget:self - selector:@selector(synchronize) - object:nil]; - // This method may be called on multiple queues (due to set... methods can be called on any queue) - // synchronize can be scheduled on different queues, so make sure that it does not crash. If this - // instance goes away, self will be released also, no one will retain it and the schedule won't be - // called. - [self performSelector:@selector(synchronize) withObject:nil afterDelay:kGULSynchronizeInterval]; -} - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/UserDefaults/Private/GULUserDefaults.h b/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/UserDefaults/Private/GULUserDefaults.h deleted file mode 100644 index 0d04781841..0000000000 --- a/iphone/Maps/Pods/GoogleUtilities/GoogleUtilities/UserDefaults/Private/GULUserDefaults.h +++ /dev/null @@ -1,110 +0,0 @@ -// Copyright 2018 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import - -NS_ASSUME_NONNULL_BEGIN - -/// A thread-safe user defaults that uses C functions from CFPreferences.h instead of -/// `NSUserDefaults`. This is to avoid sending an `NSNotification` when it's changed from a -/// background thread to avoid crashing. // TODO: Insert radar number here. -@interface GULUserDefaults : NSObject - -/// A shared user defaults similar to +[NSUserDefaults standardUserDefaults] and accesses the same -/// data of the standardUserDefaults. -+ (GULUserDefaults *)standardUserDefaults; - -/// Initializes preferences with a suite name that is the same with the NSUserDefaults' suite name. -/// Both of CFPreferences and NSUserDefaults share the same plist file so their data will exactly -/// the same. -/// -/// @param suiteName The name of the suite of the user defaults. -- (instancetype)initWithSuiteName:(nullable NSString *)suiteName; - -#pragma mark - Getters - -/// Searches the receiver's search list for a default with the key 'defaultName' and return it. If -/// another process has changed defaults in the search list, NSUserDefaults will automatically -/// update to the latest values. If the key in question has been marked as ubiquitous via a Defaults -/// Configuration File, the latest value may not be immediately available, and the registered value -/// will be returned instead. -- (nullable id)objectForKey:(NSString *)defaultName; - -/// Equivalent to -objectForKey:, except that it will return nil if the value is not an NSArray. -- (nullable NSArray *)arrayForKey:(NSString *)defaultName; - -/// Equivalent to -objectForKey:, except that it will return nil if the value -/// is not an NSDictionary. -- (nullable NSDictionary *)dictionaryForKey:(NSString *)defaultName; - -/// Equivalent to -objectForKey:, except that it will convert NSNumber values to their NSString -/// representation. If a non-string non-number value is found, nil will be returned. -- (nullable NSString *)stringForKey:(NSString *)defaultName; - -/// Equivalent to -objectForKey:, except that it converts the returned value to an NSInteger. If the -/// value is an NSNumber, the result of -integerValue will be returned. If the value is an NSString, -/// it will be converted to NSInteger if possible. If the value is a boolean, it will be converted -/// to either 1 for YES or 0 for NO. If the value is absent or can't be converted to an integer, 0 -/// will be returned. -- (NSInteger)integerForKey:(NSString *)defaultName; - -/// Similar to -integerForKey:, except that it returns a float, and boolean values will not be -/// converted. -- (float)floatForKey:(NSString *)defaultName; - -/// Similar to -integerForKey:, except that it returns a double, and boolean values will not be -/// converted. -- (double)doubleForKey:(NSString *)defaultName; - -/// Equivalent to -objectForKey:, except that it converts the returned value to a BOOL. If the value -/// is an NSNumber, NO will be returned if the value is 0, YES otherwise. If the value is an -/// NSString, values of "YES" or "1" will return YES, and values of "NO", "0", or any other string -/// will return NO. If the value is absent or can't be converted to a BOOL, NO will be returned. -- (BOOL)boolForKey:(NSString *)defaultName; - -#pragma mark - Setters - -/// Immediately stores a value (or removes the value if `nil` is passed as the value) for the -/// provided key in the search list entry for the receiver's suite name in the current user and any -/// host, then asynchronously stores the value persistently, where it is made available to other -/// processes. -- (void)setObject:(nullable id)value forKey:(NSString *)defaultName; - -/// Equivalent to -setObject:forKey: except that the value is converted from a float to an NSNumber. -- (void)setFloat:(float)value forKey:(NSString *)defaultName; - -/// Equivalent to -setObject:forKey: except that the value is converted from a double to an -/// NSNumber. -- (void)setDouble:(double)value forKey:(NSString *)defaultName; - -/// Equivalent to -setObject:forKey: except that the value is converted from an NSInteger to an -/// NSNumber. -- (void)setInteger:(NSInteger)value forKey:(NSString *)defaultName; - -/// Equivalent to -setObject:forKey: except that the value is converted from a BOOL to an NSNumber. -- (void)setBool:(BOOL)value forKey:(NSString *)defaultName; - -#pragma mark - Removing Defaults - -/// Equivalent to -[... setObject:nil forKey:defaultName] -- (void)removeObjectForKey:(NSString *)defaultName; - -#pragma mark - Save data - -/// Blocks the calling thread until all in-progress set operations have completed. -- (void)synchronize; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/GoogleUtilities/README.md b/iphone/Maps/Pods/GoogleUtilities/README.md deleted file mode 100644 index 1d9f0f678c..0000000000 --- a/iphone/Maps/Pods/GoogleUtilities/README.md +++ /dev/null @@ -1,298 +0,0 @@ -[![Version](https://img.shields.io/cocoapods/v/Firebase.svg?style=flat)](https://cocoapods.org/pods/Firebase) -[![License](https://img.shields.io/cocoapods/l/Firebase.svg?style=flat)](https://cocoapods.org/pods/Firebase) -[![Platform](https://img.shields.io/cocoapods/p/Firebase.svg?style=flat)](https://cocoapods.org/pods/Firebase) - -[![Actions Status][gh-abtesting-badge]][gh-actions] -[![Actions Status][gh-auth-badge]][gh-actions] -[![Actions Status][gh-core-badge]][gh-actions] -[![Actions Status][gh-crashlytics-badge]][gh-actions] -[![Actions Status][gh-database-badge]][gh-actions] -[![Actions Status][gh-datatransport-badge]][gh-actions] -[![Actions Status][gh-dynamiclinks-badge]][gh-actions] -[![Actions Status][gh-firebasepod-badge]][gh-actions] -[![Actions Status][gh-firestore-badge]][gh-actions] -[![Actions Status][gh-functions-badge]][gh-actions] -[![Actions Status][gh-inappmessaging-badge]][gh-actions] -[![Actions Status][gh-interop-badge]][gh-actions] -[![Actions Status][gh-messaging-badge]][gh-actions] -[![Actions Status][gh-remoteconfig-badge]][gh-actions] -[![Actions Status][gh-storage-badge]][gh-actions] -[![Actions Status][gh-symbolcollision-badge]][gh-actions] -[![Actions Status][gh-zip-badge]][gh-actions] -[![Travis](https://travis-ci.org/firebase/firebase-ios-sdk.svg?branch=master)](https://travis-ci.org/firebase/firebase-ios-sdk) - -# Firebase Apple Open Source Development - -This repository contains all Apple platform Firebase SDK source except FirebaseAnalytics, -FirebasePerformance, and FirebaseML. - -The repository also includes GoogleUtilities source. The -[GoogleUtilities](GoogleUtilities/README.md) pod is -a set of utilities used by Firebase and other Google products. - -Firebase is an app development platform with tools to help you build, grow and -monetize your app. More information about Firebase can be found at -[https://firebase.google.com](https://firebase.google.com). - -## Installation - -See the three subsections for details about three different installation methods. -1. [Standard pod install](README.md#standard-pod-install) -1. [Installing from the GitHub repo](README.md#installing-from-github) -1. [Experimental Carthage](README.md#carthage-ios-only) - -### Standard pod install - -Go to -[https://firebase.google.com/docs/ios/setup](https://firebase.google.com/docs/ios/setup). - -### Installing from GitHub - -For releases starting with 5.0.0, the source for each release is also deployed -to CocoaPods master and available via standard -[CocoaPods Podfile syntax](https://guides.cocoapods.org/syntax/podfile.html#pod). - -These instructions can be used to access the Firebase repo at other branches, -tags, or commits. - -#### Background - -See -[the Podfile Syntax Reference](https://guides.cocoapods.org/syntax/podfile.html#pod) -for instructions and options about overriding pod source locations. - -#### Accessing Firebase Source Snapshots - -All of the official releases are tagged in this repo and available via CocoaPods. To access a local -source snapshot or unreleased branch, use Podfile directives like the following: - -To access FirebaseFirestore via a branch: -``` -pod 'FirebaseCore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master' -pod 'FirebaseFirestore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master' -``` - -To access FirebaseMessaging via a checked out version of the firebase-ios-sdk repo do: - -``` -pod 'FirebaseCore', :path => '/path/to/firebase-ios-sdk' -pod 'FirebaseMessaging', :path => '/path/to/firebase-ios-sdk' -``` - -### Carthage (iOS only) - -Instructions for the experimental Carthage distribution are at -[Carthage](Carthage.md). - -### Rome - -Instructions for installing binary frameworks via -[Rome](https://github.com/CocoaPods/Rome) are at [Rome](Rome.md). - -### Using Firebase from a Framework or a library - -[Using Firebase from a Framework or a library](docs/firebase_in_libraries.md) - -## Development - -To develop Firebase software in this repository, ensure that you have at least -the following software: - - * Xcode 10.3 (or later) - * CocoaPods 1.7.2 (or later) - * [CocoaPods generate](https://github.com/square/cocoapods-generate) - -For the pod that you want to develop: - -`pod gen Firebase{name here}.podspec --local-sources=./ --auto-open --platforms=ios` - -Note: If the CocoaPods cache is out of date, you may need to run -`pod repo update` before the `pod gen` command. - -Note: Set the `--platforms` option to `macos` or `tvos` to develop/test for -those platforms. Since 10.2, Xcode does not properly handle multi-platform -CocoaPods workspaces. - -Firestore has a self contained Xcode project. See -[Firestore/README.md](Firestore/README.md). - -### Development for Catalyst -* `pod gen {name here}.podspec --local-sources=./ --auto-open --platforms=ios` -* Check the Mac box in the App-iOS Build Settings -* Sign the App in the Settings Signing & Capabilities tab -* Click Pods in the Project Manager -* Add Signing to the iOS host app and unit test targets -* Select the Unit-unit scheme -* Run it to build and test - -### Adding a New Firebase Pod - -See [AddNewPod.md](AddNewPod.md). - -### Managing Headers and Imports - -See [HeadersImports.md](HeadersImports.md). - -### Code Formatting - -To ensure that the code is formatted consistently, run the script -[./scripts/style.sh](https://github.com/firebase/firebase-ios-sdk/blob/master/scripts/style.sh) -before creating a PR. - -Travis will verify that any code changes are done in a style compliant way. Install -`clang-format` and `swiftformat`: - -``` -brew install clang-format -brew install swiftformat -``` - -### Running Unit Tests - -Select a scheme and press Command-u to build a component and run its unit tests. - -#### Viewing Code Coverage (Deprecated) - -First, make sure that [xcov](https://github.com/nakiostudio/xcov) is installed with `gem install xcov`. - -After running the `AllUnitTests_iOS` scheme in Xcode, execute -`xcov --workspace Firebase.xcworkspace --scheme AllUnitTests_iOS --output_directory xcov_output` -at Example/ in the terminal. This will aggregate the coverage, and you can run `open xcov_output/index.html` to see the results. - -### Running Sample Apps -In order to run the sample apps and integration tests, you'll need valid -`GoogleService-Info.plist` files for those samples. The Firebase Xcode project contains dummy plist -files without real values, but can be replaced with real plist files. To get your own -`GoogleService-Info.plist` files: - -1. Go to the [Firebase Console](https://console.firebase.google.com/) -2. Create a new Firebase project, if you don't already have one -3. For each sample app you want to test, create a new Firebase app with the sample app's bundle -identifier (e.g. `com.google.Database-Example`) -4. Download the resulting `GoogleService-Info.plist` and add it to the Xcode project. - -## Specific Component Instructions -See the sections below for any special instructions for those components. - -### Firebase Auth - -If you're doing specific Firebase Auth development, see -[the Auth Sample README](FirebaseAuth/Tests/Sample/README.md) for instructions about -building and running the FirebaseAuth pod along with various samples and tests. - -### Firebase Database - -The Firebase Database Integration tests can be run against a locally running Database Emulator -or against a production instance. - -To run against a local emulator instance, invoke `./scripts/run_database_emulator.sh start` before -running the integration test. - -To run against a production instance, provide a valid GoogleServices-Info.plist and copy it to -`FirebaseDatabase/Tests/Resources/GoogleService-Info.plist`. Your Security Rule must be set to -[public](https://firebase.google.com/docs/database/security/quickstart) while your tests are -running. - -### Firebase Storage - -To run the Storage Integration tests, follow the instructions in -[FIRStorageIntegrationTests.m](FirebaseStorage/Tests/Integration/FIRStorageIntegrationTests.m). - -#### Push Notifications - -Push notifications can only be delivered to specially provisioned App IDs in the developer portal. -In order to actually test receiving push notifications, you will need to: - -1. Change the bundle identifier of the sample app to something you own in your Apple Developer -account, and enable that App ID for push notifications. -2. You'll also need to -[upload your APNs Provider Authentication Key or certificate to the Firebase Console](https://firebase.google.com/docs/cloud-messaging/ios/certs) -at **Project Settings > Cloud Messaging > [Your Firebase App]**. -3. Ensure your iOS device is added to your Apple Developer portal as a test device. - -#### iOS Simulator - -The iOS Simulator cannot register for remote notifications, and will not receive push notifications. -In order to receive push notifications, you'll have to follow the steps above and run the app on a -physical device. - -## Community Supported Efforts - -We've seen an amazing amount of interest and contributions to improve the Firebase SDKs, and we are -very grateful! We'd like to empower as many developers as we can to be able to use Firebase and -participate in the Firebase community. - -### tvOS, macOS, watchOS and Catalyst -Thanks to contributions from the community, many of Firebase SDKs now compile, run unit tests, and work on -tvOS, macOS, watchOS and Catalyst. - -For tvOS, checkout the [Sample](Example/tvOSSample). -For watchOS, currently only Messaging and Storage (and their dependencies) have limited support. Checkout the -[Independent Watch App Sample](Example/watchOSSample). - -Keep in mind that macOS, tvOS, watchOS and Catalyst are not officially supported by Firebase, and this -repository is actively developed primarily for iOS. While we can catch basic unit test issues with -Travis, there may be some changes where the SDK no longer works as expected on macOS, tvOS or watchOS. If you -encounter this, please [file an issue](https://github.com/firebase/firebase-ios-sdk/issues). - -During app setup in the console, you may get to a step that mentions something like "Checking if the app -has communicated with our servers". This relies on Analytics and will not work on macOS/tvOS/watchOS/Catalyst. -**It's safe to ignore the message and continue**, the rest of the SDKs will work as expected. - -To install, add a subset of the following to the Podfile: - -``` -pod 'Firebase/ABTesting' # No watchOS support yet -pod 'Firebase/Auth' # No watchOS support yet -pod 'Firebase/Crashlytics' # No watchOS support yet -pod 'Firebase/Database' # No watchOS support yet -pod 'Firebase/Firestore' # No watchOS support yet -pod 'Firebase/Functions' # No watchOS support yet -pod 'Firebase/Messaging' -pod 'Firebase/RemoteConfig' # No watchOS support yet -pod 'Firebase/Storage' -``` - -#### Additional Catalyst Notes - -* FirebaseAuth and FirebaseMessaging require adding `Keychain Sharing Capability` -to Build Settings. -* FirebaseFirestore requires signing the -[gRPC Resource target](https://github.com/firebase/firebase-ios-sdk/issues/3500#issuecomment-518741681). - -## Roadmap - -See [Roadmap](ROADMAP.md) for more about the Firebase iOS SDK Open Source -plans and directions. - -## Contributing - -See [Contributing](CONTRIBUTING.md) for more information on contributing to the Firebase -iOS SDK. - -## License - -The contents of this repository is licensed under the -[Apache License, version 2.0](http://www.apache.org/licenses/LICENSE-2.0). - -Your use of Firebase is governed by the -[Terms of Service for Firebase Services](https://firebase.google.com/terms/). - -[gh-actions]: https://github.com/firebase/firebase-ios-sdk/actions -[gh-abtesting-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/abtesting/badge.svg -[gh-auth-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/auth/badge.svg -[gh-core-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/core/badge.svg -[gh-crashlytics-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/crashlytics/badge.svg -[gh-database-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/database/badge.svg -[gh-datatransport-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/datatransport/badge.svg -[gh-dynamiclinks-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/dynamiclinks/badge.svg -[gh-firebasepod-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/firebasepod/badge.svg -[gh-firestore-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/firestore/badge.svg -[gh-functions-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/functions/badge.svg -[gh-inappmessaging-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/inappmessaging/badge.svg -[gh-interop-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/interop/badge.svg -[gh-messaging-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/messaging/badge.svg -[gh-remoteconfig-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/remoteconfig/badge.svg -[gh-storage-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/storage/badge.svg -[gh-symbolcollision-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/symbolcollision/badge.svg -[gh-zip-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/zip/badge.svg diff --git a/iphone/Maps/Pods/Headers/Public/Firebase/Firebase.h b/iphone/Maps/Pods/Headers/Public/Firebase/Firebase.h deleted file mode 120000 index 07ac6eb193..0000000000 --- a/iphone/Maps/Pods/Headers/Public/Firebase/Firebase.h +++ /dev/null @@ -1 +0,0 @@ -../../../Firebase/CoreOnly/Sources/Firebase.h \ No newline at end of file diff --git a/iphone/Maps/Pods/Headers/Public/FirebaseAnalyticsInterop/FIRAnalyticsInterop.h b/iphone/Maps/Pods/Headers/Public/FirebaseAnalyticsInterop/FIRAnalyticsInterop.h deleted file mode 120000 index e01a43ad4e..0000000000 --- a/iphone/Maps/Pods/Headers/Public/FirebaseAnalyticsInterop/FIRAnalyticsInterop.h +++ /dev/null @@ -1 +0,0 @@ -../../../FirebaseAnalyticsInterop/Interop/Analytics/Public/FIRAnalyticsInterop.h \ No newline at end of file diff --git a/iphone/Maps/Pods/Headers/Public/FirebaseAnalyticsInterop/FIRAnalyticsInteropListener.h b/iphone/Maps/Pods/Headers/Public/FirebaseAnalyticsInterop/FIRAnalyticsInteropListener.h deleted file mode 120000 index d3cd09763b..0000000000 --- a/iphone/Maps/Pods/Headers/Public/FirebaseAnalyticsInterop/FIRAnalyticsInteropListener.h +++ /dev/null @@ -1 +0,0 @@ -../../../FirebaseAnalyticsInterop/Interop/Analytics/Public/FIRAnalyticsInteropListener.h \ No newline at end of file diff --git a/iphone/Maps/Pods/Headers/Public/FirebaseAnalyticsInterop/FIRInteropEventNames.h b/iphone/Maps/Pods/Headers/Public/FirebaseAnalyticsInterop/FIRInteropEventNames.h deleted file mode 120000 index dbda3ecc96..0000000000 --- a/iphone/Maps/Pods/Headers/Public/FirebaseAnalyticsInterop/FIRInteropEventNames.h +++ /dev/null @@ -1 +0,0 @@ -../../../FirebaseAnalyticsInterop/Interop/Analytics/Public/FIRInteropEventNames.h \ No newline at end of file diff --git a/iphone/Maps/Pods/Headers/Public/FirebaseAnalyticsInterop/FIRInteropParameterNames.h b/iphone/Maps/Pods/Headers/Public/FirebaseAnalyticsInterop/FIRInteropParameterNames.h deleted file mode 120000 index 51458430df..0000000000 --- a/iphone/Maps/Pods/Headers/Public/FirebaseAnalyticsInterop/FIRInteropParameterNames.h +++ /dev/null @@ -1 +0,0 @@ -../../../FirebaseAnalyticsInterop/Interop/Analytics/Public/FIRInteropParameterNames.h \ No newline at end of file diff --git a/iphone/Maps/Pods/Headers/Public/FirebaseCoreDiagnosticsInterop/FIRCoreDiagnosticsData.h b/iphone/Maps/Pods/Headers/Public/FirebaseCoreDiagnosticsInterop/FIRCoreDiagnosticsData.h deleted file mode 120000 index ce646ecf1d..0000000000 --- a/iphone/Maps/Pods/Headers/Public/FirebaseCoreDiagnosticsInterop/FIRCoreDiagnosticsData.h +++ /dev/null @@ -1 +0,0 @@ -../../../FirebaseCoreDiagnosticsInterop/Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsData.h \ No newline at end of file diff --git a/iphone/Maps/Pods/Headers/Public/FirebaseCoreDiagnosticsInterop/FIRCoreDiagnosticsInterop.h b/iphone/Maps/Pods/Headers/Public/FirebaseCoreDiagnosticsInterop/FIRCoreDiagnosticsInterop.h deleted file mode 120000 index 07d83d70f4..0000000000 --- a/iphone/Maps/Pods/Headers/Public/FirebaseCoreDiagnosticsInterop/FIRCoreDiagnosticsInterop.h +++ /dev/null @@ -1 +0,0 @@ -../../../FirebaseCoreDiagnosticsInterop/Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsInterop.h \ No newline at end of file diff --git a/iphone/Maps/Pods/Manifest.lock b/iphone/Maps/Pods/Manifest.lock index 637436d77f..a1147a255e 100644 --- a/iphone/Maps/Pods/Manifest.lock +++ b/iphone/Maps/Pods/Manifest.lock @@ -1,185 +1,3 @@ -PODS: - - AppsFlyerFramework (4.9.0) - - FBAudienceNetwork (5.9.0): - - FBSDKCoreKit/Basics (>= 5.6.0) - - FBSDKCoreKit (5.15.1): - - FBSDKCoreKit/Basics (= 5.15.1) - - FBSDKCoreKit/Core (= 5.15.1) - - FBSDKCoreKit/Basics (5.15.1) - - FBSDKCoreKit/Core (5.15.1): - - FBSDKCoreKit/Basics - - FBSDKLoginKit (5.15.1): - - FBSDKLoginKit/Login (= 5.15.1) - - FBSDKLoginKit/Login (5.15.1): - - FBSDKCoreKit (~> 5.0) - - Firebase/Analytics (6.26.0): - - Firebase/Core - - Firebase/Core (6.26.0): - - Firebase/CoreOnly - - FirebaseAnalytics (= 6.6.0) - - Firebase/CoreOnly (6.26.0): - - FirebaseCore (= 6.7.2) - - Firebase/Crashlytics (6.26.0): - - Firebase/CoreOnly - - FirebaseCrashlytics (~> 4.1.1) - - FirebaseAnalytics (6.6.0): - - FirebaseCore (~> 6.7) - - FirebaseInstallations (~> 1.3) - - GoogleAppMeasurement (= 6.6.0) - - GoogleUtilities/AppDelegateSwizzler (~> 6.0) - - GoogleUtilities/MethodSwizzler (~> 6.0) - - GoogleUtilities/Network (~> 6.0) - - "GoogleUtilities/NSData+zlib (~> 6.0)" - - nanopb (~> 1.30905.0) - - FirebaseAnalyticsInterop (1.5.0) - - FirebaseCore (6.7.2): - - FirebaseCoreDiagnostics (~> 1.3) - - FirebaseCoreDiagnosticsInterop (~> 1.2) - - GoogleUtilities/Environment (~> 6.5) - - GoogleUtilities/Logger (~> 6.5) - - FirebaseCoreDiagnostics (1.4.0): - - GoogleDataTransportCCTSupport (~> 3.1) - - GoogleUtilities/Environment (~> 6.5) - - GoogleUtilities/Logger (~> 6.5) - - nanopb (~> 1.30905.0) - - FirebaseCoreDiagnosticsInterop (1.2.0) - - FirebaseCrashlytics (4.1.1): - - FirebaseAnalyticsInterop (~> 1.2) - - FirebaseCore (~> 6.6) - - FirebaseInstallations (~> 1.1) - - GoogleDataTransport (~> 6.1) - - GoogleDataTransportCCTSupport (~> 3.1) - - nanopb (~> 1.30905.0) - - PromisesObjC (~> 1.2) - - FirebaseInstallations (1.3.0): - - FirebaseCore (~> 6.6) - - GoogleUtilities/Environment (~> 6.6) - - GoogleUtilities/UserDefaults (~> 6.6) - - PromisesObjC (~> 1.2) - - Flurry-iOS-SDK/FlurrySDK (11.1.0) - - GoogleAppMeasurement (6.6.0): - - GoogleUtilities/AppDelegateSwizzler (~> 6.0) - - GoogleUtilities/MethodSwizzler (~> 6.0) - - GoogleUtilities/Network (~> 6.0) - - "GoogleUtilities/NSData+zlib (~> 6.0)" - - nanopb (~> 1.30905.0) - - GoogleDataTransport (6.2.1) - - GoogleDataTransportCCTSupport (3.2.0): - - GoogleDataTransport (~> 6.1) - - nanopb (~> 1.30905.0) - - GoogleUtilities/AppDelegateSwizzler (6.7.1): - - GoogleUtilities/Environment - - GoogleUtilities/Logger - - GoogleUtilities/Network - - GoogleUtilities/Environment (6.7.1): - - PromisesObjC (~> 1.2) - - GoogleUtilities/Logger (6.7.1): - - GoogleUtilities/Environment - - GoogleUtilities/MethodSwizzler (6.7.1): - - GoogleUtilities/Logger - - GoogleUtilities/Network (6.7.1): - - GoogleUtilities/Logger - - "GoogleUtilities/NSData+zlib" - - GoogleUtilities/Reachability - - "GoogleUtilities/NSData+zlib (6.7.1)" - - GoogleUtilities/Reachability (6.7.1): - - GoogleUtilities/Logger - - GoogleUtilities/UserDefaults (6.7.1): - - GoogleUtilities/Logger - - MoPub-FacebookAudienceNetwork-Adapters (5.9.0.0): - - MoPub-FacebookAudienceNetwork-Adapters/MoPub (= 5.9.0.0) - - MoPub-FacebookAudienceNetwork-Adapters/Network (= 5.9.0.0) - - MoPub-FacebookAudienceNetwork-Adapters/MoPub (5.9.0.0): - - mopub-ios-sdk/Core (~> 5.6) - - mopub-ios-sdk/NativeAds (~> 5.6) - - MoPub-FacebookAudienceNetwork-Adapters/Network (5.9.0.0): - - FBAudienceNetwork (= 5.9.0) - - mopub-ios-sdk/Core (~> 5.6) - - mopub-ios-sdk/NativeAds (~> 5.6) - - mopub-ios-sdk (5.12.0): - - mopub-ios-sdk/MoPubSDK (= 5.12.0) - - mopub-ios-sdk/Avid (5.12.0): - - mopub-ios-sdk/Core - - mopub-ios-sdk/Core (5.12.0) - - mopub-ios-sdk/Moat (5.12.0): - - mopub-ios-sdk/Core - - mopub-ios-sdk/MoPubSDK (5.12.0): - - mopub-ios-sdk/Avid - - mopub-ios-sdk/Core - - mopub-ios-sdk/Moat - - mopub-ios-sdk/NativeAds - - mopub-ios-sdk/NativeAds (5.12.0): - - mopub-ios-sdk/Core - - nanopb (1.30905.0): - - nanopb/decode (= 1.30905.0) - - nanopb/encode (= 1.30905.0) - - nanopb/decode (1.30905.0) - - nanopb/encode (1.30905.0) - - PromisesObjC (1.2.9) - - Pushwoosh (5.16.0): - - Pushwoosh/Core (= 5.16.0) - - Pushwoosh/Core (5.16.0) +PODFILE CHECKSUM: deba2253f1e135a82d1d8c1740254e43cd41b1cf -DEPENDENCIES: - - AppsFlyerFramework (= 4.9.0) - - FBSDKCoreKit (= 5.15.1) - - FBSDKLoginKit (= 5.15.1) - - Firebase/Analytics (= 6.26.0) - - Firebase/Crashlytics (= 6.26.0) - - Flurry-iOS-SDK/FlurrySDK (= 11.1) - - MoPub-FacebookAudienceNetwork-Adapters (= 5.9.0) - - mopub-ios-sdk (= 5.12) - - Pushwoosh (= 5.16.0) - -SPEC REPOS: - trunk: - - AppsFlyerFramework - - FBAudienceNetwork - - FBSDKCoreKit - - FBSDKLoginKit - - Firebase - - FirebaseAnalytics - - FirebaseAnalyticsInterop - - FirebaseCore - - FirebaseCoreDiagnostics - - FirebaseCoreDiagnosticsInterop - - FirebaseCrashlytics - - FirebaseInstallations - - Flurry-iOS-SDK - - GoogleAppMeasurement - - GoogleDataTransport - - GoogleDataTransportCCTSupport - - GoogleUtilities - - MoPub-FacebookAudienceNetwork-Adapters - - mopub-ios-sdk - - nanopb - - PromisesObjC - - Pushwoosh - -SPEC CHECKSUMS: - AppsFlyerFramework: f57e5d590ad3124d3e594a76032a181bc91ec6cd - FBAudienceNetwork: 648648b13d8ea3d39676542dece2b04dbe867497 - FBSDKCoreKit: 1d5acf7c9d7a2f92bb1a242dc60cae5b7adb91df - FBSDKLoginKit: f1ea8026a58b52d30c9f2e6a58ca7d813619fb83 - Firebase: 7cf5f9c67f03cb3b606d1d6535286e1080e57eb6 - FirebaseAnalytics: 96634d356482d4f3af8fe459a0ebf19a99c71b75 - FirebaseAnalyticsInterop: 3f86269c38ae41f47afeb43ebf32a001f58fcdae - FirebaseCore: f42e5e5f382cdcf6b617ed737bf6c871a6947b17 - FirebaseCoreDiagnostics: 4505e4d4009b1d93f605088ee7d7764d5f0d1c84 - FirebaseCoreDiagnosticsInterop: 296e2c5f5314500a850ad0b83e9e7c10b011a850 - FirebaseCrashlytics: a87cce5746d3335995bd18b1b60d073cd05a6920 - FirebaseInstallations: 6f5f680e65dc374397a483c32d1799ba822a395b - Flurry-iOS-SDK: 88c0399d6d276325dc9f74f6183c1070e6c3f21e - GoogleAppMeasurement: 67458367830514fb20fd9e233496f1eef9d90185 - GoogleDataTransport: 9a8a16f79feffc7f42096743de2a7c4815e84020 - GoogleDataTransportCCTSupport: 489c1265d2c85b68187a83a911913d190012158d - GoogleUtilities: e121a3867449ce16b0e35ddf1797ea7a389ffdf2 - MoPub-FacebookAudienceNetwork-Adapters: c9cbf2549ab2e108086594ab18f1709cc5897300 - mopub-ios-sdk: bb61d5741ba16c6a78e5a54e37bc60ef8c9a80a8 - nanopb: c43f40fadfe79e8b8db116583945847910cbabc9 - PromisesObjC: b48e0338dbbac2207e611750777895f7a5811b75 - Pushwoosh: 6cba171e52f3f7b8ccd280f492a5831deac2f594 - -PODFILE CHECKSUM: 6a5506aaa77abf026437e209f61e422241c8e153 - -COCOAPODS: 1.9.3 +COCOAPODS: 1.10.0 diff --git a/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookAdapterConfiguration.h b/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookAdapterConfiguration.h deleted file mode 100644 index 71fd3bc0ae..0000000000 --- a/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookAdapterConfiguration.h +++ /dev/null @@ -1,40 +0,0 @@ -// -// FacebookAdapterConfiguration.h -// MoPubSDK -// -// Copyright © 2017 MoPub. All rights reserved. -// - -#import -#if __has_include() - #import -#elif __has_include() - #import -#else - #import "MPBaseAdapterConfiguration.h" -#endif - -NS_ASSUME_NONNULL_BEGIN - -/** - Provides adapter information back to the SDK and is the main access point - for all adapter-level configuration. - */ -@interface FacebookAdapterConfiguration : MPBaseAdapterConfiguration -// Test Mode -@property (class, nonatomic) BOOL isTestMode; - -@property (class, nonatomic, readonly) Boolean * isNativeBanner; - -// MPAdapterConfiguration -@property (nonatomic, copy, readonly) NSString * adapterVersion; -@property (nonatomic, copy, readonly) NSString * biddingToken; -@property (nonatomic, copy, readonly) NSString * moPubNetworkName; -@property (nonatomic, copy, readonly) NSString * networkSdkVersion; - -- (void)initializeNetworkWithConfiguration:(NSDictionary * _Nullable)configuration - complete:(void(^ _Nullable)(NSError * _Nullable))complete; -+ (NSString*)mediationString; -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookAdapterConfiguration.m b/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookAdapterConfiguration.m deleted file mode 100644 index 0ddf9a7384..0000000000 --- a/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookAdapterConfiguration.m +++ /dev/null @@ -1,104 +0,0 @@ -// -// FacebookAdapterConfiguration.m -// MoPubSDK -// -// Copyright © 2017 MoPub. All rights reserved. -// - -#import "FacebookAdapterConfiguration.h" -#import -#import "FacebookAdapterConfiguration.h" - -#if __has_include("MoPub.h") -#import "MPLogging.h" -#import "MPConstants.h" -#endif - -#define FACEBOOK_ADAPTER_VERSION @"5.9.0.0" -#define MOPUB_NETWORK_NAME @"facebook" - -static NSString * const kFacebookPlacementIDs = @"placement_ids"; -static Boolean *sIsNativeBanner = nil; - -@interface FacebookAdapterConfiguration() -@property (class, nonatomic, readwrite) Boolean * isNativeBanner; -@end - -@implementation FacebookAdapterConfiguration - -#pragma mark - Test Mode - -+ (BOOL)isTestMode { - return FBAdSettings.isTestMode; -} - -+ (void)setIsTestMode:(BOOL)isTestMode { - // Transition to test mode by adding the current device hash as a test device. - if (isTestMode && !FBAdSettings.isTestMode) { - [FBAdSettings addTestDevice:FBAdSettings.testDeviceHash]; - } - // Transition out of test mode by removing the current device hash. - else if (!isTestMode && FBAdSettings.isTestMode) { - [FBAdSettings clearTestDevice:FBAdSettings.testDeviceHash]; - } -} - -#pragma mark - MPAdapterConfiguration - -- (NSString *)adapterVersion { - return FACEBOOK_ADAPTER_VERSION; -} - -- (NSString *)biddingToken { - return [FBAdSettings bidderToken]; -} - -- (NSString *)moPubNetworkName { - return MOPUB_NETWORK_NAME; -} - -- (NSString *)networkSdkVersion { - return FB_AD_SDK_VERSION; -} - -+ (NSString*)mediationString { - return [NSString stringWithFormat:@"MOPUB_%@:%@", MP_SDK_VERSION, FACEBOOK_ADAPTER_VERSION]; -} - -+ (Boolean *)isNativeBanner -{ - return sIsNativeBanner; -} - -+ (void)setIsNativeBanner:(Boolean *)pref -{ - sIsNativeBanner = pref; -} - -- (void)initializeNetworkWithConfiguration:(NSDictionary *)configuration - complete:(void(^)(NSError *))complete { - FBAdInitSettings *fbSettings = [[FBAdInitSettings alloc] - initWithPlacementIDs:configuration[kFacebookPlacementIDs] - mediationService:[FacebookAdapterConfiguration mediationString]]; - [FBAudienceNetworkAds - initializeWithSettings:fbSettings - completionHandler:^(FBAdInitResults *results) { - if (results.success) { - MPLogDebug(@"Initialized Facebook Audience Network"); - complete(nil); - } else { - NSError *error = - [NSError errorWithDomain:@"FacebookAdapterConfiguration" - code:0 - userInfo:@{NSLocalizedDescriptionKey : results.message}]; - complete(error); - } - }]; - - if (configuration != nil && [configuration count] > 0) { - FacebookAdapterConfiguration.isNativeBanner = [[configuration objectForKey:@"native_banner"] boolValue]; - } - -} - -@end diff --git a/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookBannerCustomEvent.h b/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookBannerCustomEvent.h deleted file mode 100755 index 9c629282a2..0000000000 --- a/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookBannerCustomEvent.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// FacebookBannerCustomEvent.h -// MoPub -// -// Copyright (c) 2014 MoPub. All rights reserved. -// - -#if __has_include() - #import -#elif __has_include() - #import -#else - #import "MPBannerCustomEvent.h" -#endif - -@interface FacebookBannerCustomEvent : MPBannerCustomEvent - -@end diff --git a/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookBannerCustomEvent.m b/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookBannerCustomEvent.m deleted file mode 100644 index 42d6d21783..0000000000 --- a/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookBannerCustomEvent.m +++ /dev/null @@ -1,174 +0,0 @@ -// -// FacebookBannerCustomEvent.m -// MoPub -// -// Copyright (c) 2014 MoPub. All rights reserved. -// - -#import -#import "FacebookBannerCustomEvent.h" -#import "FacebookAdapterConfiguration.h" - -#if __has_include("MoPub.h") - #import "MoPub.h" - #import "MPLogging.h" -#endif - -@interface FacebookBannerCustomEvent () - -@property (nonatomic, strong) FBAdView *fbAdView; -@property (nonatomic, copy) NSString *fbPlacementId; - -@end - -@implementation FacebookBannerCustomEvent - -- (BOOL)enableAutomaticImpressionAndClickTracking -{ - return NO; -} - -- (void)requestAdWithSize:(CGSize)size customEventInfo:(NSDictionary *)info -{ - [self requestAdWithSize:size customEventInfo:info adMarkup:nil]; -} - -- (void)requestAdWithSize:(CGSize)size customEventInfo:(NSDictionary *)info adMarkup:(NSString *)adMarkup -{ - // Determine if the inline ad format is a banner or medium rectangle since - // Facebook makes this distinction with their placements. Explicitly look - // for medium rectangle since the default case is `kFBAdSizeHeight50Banner`. - NSString * format = [info objectForKey:@"adunit_format"]; - BOOL isMediumRectangleFormat = (format != nil ? ![[format lowercaseString] containsString:@"banner"] : NO); - - /** - * Facebook Banner ads can accept arbitrary widths for given heights of 50 and 90. We convert these sizes - * to Facebook's constants and set the fbAdView's size to the intended size ("size" passed to this method). - */ - self.fbPlacementId = [info objectForKey:@"placement_id"]; - - // Default to standard banner size - FBAdSize fbAdSize = kFBAdSizeHeight50Banner; - - // Size can contain a Facebook 90 height banner - if (size.height >= kFBAdSizeHeight90Banner.size.height) { - fbAdSize = kFBAdSizeHeight90Banner; - } - - // Size can contain a Facebook medium rectangle - if (isMediumRectangleFormat && size.height >= kFBAdSizeHeight250Rectangle.size.height) { - fbAdSize = kFBAdSizeHeight250Rectangle; - } - - if (self.fbPlacementId == nil) { - NSError *error = [self createErrorWith:@"Invalid Facebook placement ID" - andReason:@"" - andSuggestion:@""]; - - MPLogAdEvent([MPLogEvent adLoadFailedForAdapter:NSStringFromClass(self.class) error:error], nil); - [self.delegate bannerCustomEvent:self didFailToLoadAdWithError:error]; - - return; - } - - self.fbAdView = [[FBAdView alloc] initWithPlacementID:self.fbPlacementId - adSize:fbAdSize - rootViewController:[self.delegate viewControllerForPresentingModalView]]; - self.fbAdView.delegate = self; - - if (!self.fbAdView) { - NSError *error = [self createErrorWith:@"Facebook failed to load an ad" - andReason:@"" - andSuggestion:@""]; - - [self.delegate bannerCustomEvent:self didFailToLoadAdWithError:error]; - MPLogAdEvent([MPLogEvent adLoadFailedForAdapter:NSStringFromClass(self.class) error:error], self.fbPlacementId); - return; - } - - /* - * Manually resize the frame of the FBAdView due to a bug in the Facebook SDK that sets the ad's width - * to the width of the device instead of the width of the container it's placed in. - * (Confirmed in email with a FB Solutions Engineer) - */ - CGRect fbAdFrame = self.fbAdView.frame; - fbAdFrame.size.width = size.width; // Since FB ad sizes are flexible width, use the container width - fbAdFrame.size.height = fbAdSize.size.height; // Use the FB ad size height - self.fbAdView.frame = fbAdFrame; - [FBAdSettings setMediationService:[FacebookAdapterConfiguration mediationString]]; - - // Load the advanced bid payload. - if (adMarkup != nil) { - MPLogInfo(@"Loading Facebook banner ad markup for Advanced Bidding"); - [self.fbAdView loadAdWithBidPayload:adMarkup]; - - MPLogAdEvent([MPLogEvent adLoadAttemptForAdapter:NSStringFromClass(self.class) dspCreativeId:nil dspName:nil], self.fbPlacementId); - } - // Request a banner ad. - else { - MPLogInfo(@"Loading Facebook banner ad"); - [self.fbAdView loadAd]; - - MPLogAdEvent([MPLogEvent adLoadAttemptForAdapter:NSStringFromClass(self.class) dspCreativeId:nil dspName:nil], self.fbPlacementId); - } -} - -- (NSError *)createErrorWith:(NSString *)description andReason:(NSString *)reaason andSuggestion:(NSString *)suggestion { - NSDictionary *userInfo = @{ - NSLocalizedDescriptionKey: NSLocalizedString(description, nil), - NSLocalizedFailureReasonErrorKey: NSLocalizedString(reaason, nil), - NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(suggestion, nil) - }; - - return [NSError errorWithDomain:NSStringFromClass([self class]) code:0 userInfo:userInfo]; -} - -- (void)dealloc -{ - self.fbAdView.delegate = nil; -} - -#pragma mark FBAdViewDelegate methods - -- (void)adView:(FBAdView *)adView didFailWithError:(NSError *)error -{ - MPLogAdEvent([MPLogEvent adLoadFailedForAdapter:NSStringFromClass(self.class) error:error], nil); - - [self.delegate bannerCustomEvent:self didFailToLoadAdWithError:error]; -} - -- (void)adViewDidLoad:(FBAdView *)adView -{ - MPLogAdEvent([MPLogEvent adLoadSuccessForAdapter:NSStringFromClass(self.class)], self.fbPlacementId); - MPLogAdEvent([MPLogEvent adShowAttemptForAdapter:NSStringFromClass(self.class)], self.fbPlacementId); - MPLogAdEvent([MPLogEvent adShowSuccessForAdapter:NSStringFromClass(self.class)], self.fbPlacementId); - - [self.delegate bannerCustomEvent:self didLoadAd:adView]; -} - -- (void)adViewWillLogImpression:(FBAdView *)adView -{ - MPLogInfo(@"Facebook banner ad did log impression"); - [self.delegate trackImpression]; -} - -- (void)adViewDidClick:(FBAdView *)adView -{ - MPLogAdEvent([MPLogEvent adTappedForAdapter:NSStringFromClass(self.class)], self.fbPlacementId); - - [self.delegate trackClick]; - [self.delegate bannerCustomEventWillBeginAction:self]; -} - -- (void)adViewDidFinishHandlingClick:(FBAdView *)adView -{ - MPLogInfo(@"Facebook banner ad did finish handling click"); - [self.delegate bannerCustomEventDidFinishAction:self]; -} - -- (UIViewController *)viewControllerForPresentingModalView -{ - return [self.delegate viewControllerForPresentingModalView]; -} - -@end diff --git a/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookInterstitialCustomEvent.h b/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookInterstitialCustomEvent.h deleted file mode 100755 index f2e6c91d37..0000000000 --- a/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookInterstitialCustomEvent.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// FacebookInterstitialCustomEvent.h -// MoPub -// -// Copyright (c) 2014 MoPub. All rights reserved. -// - -#if __has_include() - #import -#elif __has_include() - #import -#else - #import "MPInterstitialCustomEvent.h" -#endif - -@interface FacebookInterstitialCustomEvent : MPInterstitialCustomEvent - -@end diff --git a/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookInterstitialCustomEvent.m b/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookInterstitialCustomEvent.m deleted file mode 100644 index 3678e00272..0000000000 --- a/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookInterstitialCustomEvent.m +++ /dev/null @@ -1,194 +0,0 @@ -// -// FacebookInterstitialCustomEvent.m -// MoPub -// -// Copyright (c) 2014 MoPub. All rights reserved. -// - -#import -#import "FacebookInterstitialCustomEvent.h" -#import "FacebookAdapterConfiguration.h" - -#if __has_include("MoPub.h") - #import "MoPub.h" - #import "MPLogging.h" - #import "MPRealTimeTimer.h" -#endif - -//Timer to record the expiration interval -#define FB_ADS_EXPIRATION_INTERVAL 3600 - -@interface FacebookInterstitialCustomEvent () - -@property (nonatomic, strong) FBInterstitialAd *fbInterstitialAd; -@property (nonatomic, strong) MPRealTimeTimer *expirationTimer; -@property (nonatomic, assign) BOOL hasTrackedImpression; -@property (nonatomic, copy) NSString *fbPlacementId; - -@end - -@implementation FacebookInterstitialCustomEvent - -@synthesize hasTrackedImpression = _hasTrackedImpression; - -- (void)requestInterstitialWithCustomEventInfo:(NSDictionary *)info -{ - [self requestInterstitialWithCustomEventInfo:info adMarkup:nil]; -} - -- (void)requestInterstitialWithCustomEventInfo:(NSDictionary *)info adMarkup:(NSString *)adMarkup -{ - self.fbPlacementId = [info objectForKey:@"placement_id"]; - if (self.fbPlacementId == nil) { - - NSError *error = [self createErrorWith:@"Invalid Facebook placement ID" - andReason:@"" - andSuggestion:@""]; - - MPLogAdEvent([MPLogEvent adLoadFailedForAdapter:NSStringFromClass(self.class) error:error], nil); - - [self.delegate interstitialCustomEvent:self didFailToLoadAdWithError:error]; - - return; - } - - self.fbInterstitialAd = [[FBInterstitialAd alloc] initWithPlacementID:[info objectForKey:@"placement_id"]]; - self.fbInterstitialAd.delegate = self; - [FBAdSettings setMediationService:[FacebookAdapterConfiguration mediationString]]; - - // Load the advanced bid payload. - if (adMarkup != nil) { - MPLogInfo(@"Loading Facebook interstitial ad markup for Advanced Bidding"); - [self.fbInterstitialAd loadAdWithBidPayload:adMarkup]; - - MPLogAdEvent([MPLogEvent adLoadAttemptForAdapter:NSStringFromClass(self.class) dspCreativeId:nil dspName:nil], self.fbPlacementId); - } - // Request a interstitial ad. - else { - MPLogInfo(@"Loading Facebook interstitial"); - [self.fbInterstitialAd loadAd]; - - MPLogAdEvent([MPLogEvent adLoadAttemptForAdapter:NSStringFromClass(self.class) dspCreativeId:nil dspName:nil], self.fbPlacementId); - } -} - -- (void)showInterstitialFromRootViewController:(UIViewController *)controller { - if (!self.fbInterstitialAd || !self.fbInterstitialAd.isAdValid) { - NSError *error = [self createErrorWith:@"Error in loading Facebook Interstitial" - andReason:@"" - andSuggestion:@""]; - - MPLogAdEvent([MPLogEvent adShowFailedForAdapter:NSStringFromClass(self.class) error:error], self.fbPlacementId); - [self.delegate interstitialCustomEventDidExpire:self]; - } else { - MPLogAdEvent([MPLogEvent adShowAttemptForAdapter:NSStringFromClass(self.class)], self.fbPlacementId); - - MPLogAdEvent([MPLogEvent adWillAppearForAdapter:NSStringFromClass(self.class)], self.fbPlacementId); - [self.delegate interstitialCustomEventWillAppear:self]; - - [self.fbInterstitialAd showAdFromRootViewController:controller]; - - MPLogAdEvent([MPLogEvent adDidAppearForAdapter:NSStringFromClass(self.class)], self.fbPlacementId); - [self.delegate interstitialCustomEventDidAppear:self]; - - [self cancelExpirationTimer]; - } -} - -- (NSError *)createErrorWith:(NSString *)description andReason:(NSString *)reaason andSuggestion:(NSString *)suggestion { - NSDictionary *userInfo = @{ - NSLocalizedDescriptionKey: NSLocalizedString(description, nil), - NSLocalizedFailureReasonErrorKey: NSLocalizedString(reaason, nil), - NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(suggestion, nil) - }; - - return [NSError errorWithDomain:NSStringFromClass([self class]) code:0 userInfo:userInfo]; -} - -- (void)dealloc -{ - self.fbInterstitialAd.delegate = nil; - [self cancelExpirationTimer]; -} - -- (BOOL)enableAutomaticImpressionAndClickTracking -{ - return NO; -} - --(void)cancelExpirationTimer -{ - if (_expirationTimer != nil) - { - [self.expirationTimer invalidate]; - self.expirationTimer = nil; - } -} - -#pragma mark FBInterstitialAdDelegate methods - -- (void)interstitialAdDidLoad:(FBInterstitialAd *)interstitialAd -{ - [self cancelExpirationTimer]; - - MPLogAdEvent([MPLogEvent adLoadSuccessForAdapter:NSStringFromClass(self.class)], self.fbPlacementId); - [self.delegate interstitialCustomEvent:self didLoadAd:interstitialAd]; - - // introduce timer for 1 hour per expiration logic introduced by FB - __weak __typeof__(self) weakSelf = self; - self.expirationTimer = [[MPRealTimeTimer alloc] initWithInterval:FB_ADS_EXPIRATION_INTERVAL block:^(MPRealTimeTimer *timer){ - __strong __typeof__(weakSelf) strongSelf = weakSelf; - if (strongSelf && !strongSelf.hasTrackedImpression) { - [strongSelf.delegate interstitialCustomEventDidExpire:strongSelf]; - - NSError *error = [self createErrorWith:@"Facebook interstitial ad expired per Audience Network's expiration policy" - andReason:@"" - andSuggestion:@""]; - - MPLogAdEvent([MPLogEvent adShowFailedForAdapter:NSStringFromClass(self.class) error:error], self.fbPlacementId); - //Delete the cached objects - strongSelf.fbInterstitialAd = nil; - } - }]; - [self.expirationTimer scheduleNow]; -} - -- (void)interstitialAdWillLogImpression:(FBInterstitialAd *)interstitialAd -{ - [self cancelExpirationTimer]; - - MPLogAdEvent([MPLogEvent adShowSuccessForAdapter:NSStringFromClass(self.class)], self.fbPlacementId); - - //set the tracker to true when the ad is shown on the screen. So that the timer is invalidated. - _hasTrackedImpression = true; - [self.delegate trackImpression]; -} - -- (void)interstitialAd:(FBInterstitialAd *)interstitialAd didFailWithError:(NSError *)error -{ - [self cancelExpirationTimer]; - - MPLogAdEvent([MPLogEvent adLoadFailedForAdapter:NSStringFromClass(self.class) error:error], self.fbPlacementId); - [self.delegate interstitialCustomEvent:self didFailToLoadAdWithError:error]; -} - -- (void)interstitialAdDidClick:(FBInterstitialAd *)interstitialAd -{ - MPLogAdEvent([MPLogEvent adTappedForAdapter:NSStringFromClass(self.class)], self.fbPlacementId); - [self.delegate trackClick]; - [self.delegate interstitialCustomEventDidReceiveTapEvent:self]; -} - -- (void)interstitialAdDidClose:(FBInterstitialAd *)interstitialAd -{ - MPLogAdEvent([MPLogEvent adDidDisappearForAdapter:NSStringFromClass(self.class)], self.fbPlacementId); - [self.delegate interstitialCustomEventDidDisappear:self]; -} - -- (void)interstitialAdWillClose:(FBInterstitialAd *)interstitialAd -{ - MPLogAdEvent([MPLogEvent adWillDisappearForAdapter:NSStringFromClass(self.class)], self.fbPlacementId); - [self.delegate interstitialCustomEventWillDisappear:self]; -} - -@end diff --git a/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookNativeAdAdapter.h b/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookNativeAdAdapter.h deleted file mode 100755 index b9b46a104b..0000000000 --- a/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookNativeAdAdapter.h +++ /dev/null @@ -1,25 +0,0 @@ -// -// FacebookNativeAdAdapter.h -// MoPub -// -// Copyright (c) 2014 MoPub. All rights reserved. -// - -#if __has_include() - #import -#elif __has_include() - #import -#else - #import "MPNativeAdAdapter.h" -#endif - -@class FBNativeAdBase; - -@interface FacebookNativeAdAdapter : NSObject - -@property (nonatomic, weak) id delegate; -@property (nonatomic, readonly) FBNativeAdBase *fbNativeAdBase; - -- (instancetype)initWithFBNativeAdBase:(FBNativeAdBase *)fbNativeAdBase adProperties:(NSDictionary *)adProps; - -@end diff --git a/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookNativeAdAdapter.m b/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookNativeAdAdapter.m deleted file mode 100755 index 9323d9968e..0000000000 --- a/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookNativeAdAdapter.m +++ /dev/null @@ -1,213 +0,0 @@ -// -// FacebookNativeAdAdapter.m -// MoPub -// -// Copyright (c) 2014 MoPub. All rights reserved. -// - -#import -#import "FacebookNativeAdAdapter.h" -#if __has_include("MoPub.h") - #import "MPNativeAdConstants.h" - #import "MPNativeAdError.h" - #import "MPLogging.h" -#endif - -@interface FacebookNativeAdAdapter () - -@property (nonatomic, readonly) FBAdOptionsView *adOptionsView; -@property (nonatomic, readonly) FBMediaView *mediaView; -@property (nonatomic, readonly) FBAdIconView *iconView; - -@end - -@implementation FacebookNativeAdAdapter - -@synthesize properties = _properties; - -- (instancetype)initWithFBNativeAdBase:(FBNativeAdBase *)fbNativeAdBase adProperties:(NSDictionary *)adProps -{ - if (self = [super init]) { - _fbNativeAdBase = fbNativeAdBase; - - if ([_fbNativeAdBase class] == [FBNativeBannerAd class]){ - ((FBNativeBannerAd *) _fbNativeAdBase).delegate = self; - } else if ([_fbNativeAdBase class] == [FBNativeAd class]){ - ((FBNativeAd *) _fbNativeAdBase).delegate = self; - } - _mediaView = [[FBMediaView alloc] init]; - _iconView = [[FBAdIconView alloc] init]; - - NSMutableDictionary *properties; - if (adProps) { - properties = [NSMutableDictionary dictionaryWithDictionary:adProps]; - } else { - properties = [NSMutableDictionary dictionary]; - } - - if (_fbNativeAdBase.headline) { - [properties setObject:_fbNativeAdBase.headline forKey:kAdTitleKey]; - } - - if (_fbNativeAdBase.bodyText) { - [properties setObject:_fbNativeAdBase.bodyText forKey:kAdTextKey]; - } - - if (_fbNativeAdBase.callToAction) { - [properties setObject:_fbNativeAdBase.callToAction forKey:kAdCTATextKey]; - } - - /* Per Facebook's requirements, either the ad title or the advertiser name - will be displayed, depending on the FB SDK version. Therefore, mapping both - to the MoPub's ad title asset */ - if (_fbNativeAdBase.advertiserName) { - [properties setObject:_fbNativeAdBase.advertiserName forKey:kAdTitleKey]; - } - - [properties setObject:_iconView forKey:kAdIconImageViewKey]; - [properties setObject:_mediaView forKey:kAdMainMediaViewKey]; - - if (_fbNativeAdBase.placementID) { - [properties setObject:_fbNativeAdBase.placementID forKey:@"placementID"]; - } - - if (_fbNativeAdBase.socialContext) { - [properties setObject:_fbNativeAdBase.socialContext forKey:@"socialContext"]; - } - - if (_fbNativeAdBase.sponsoredTranslation) { - [properties setObject:_fbNativeAdBase.sponsoredTranslation forKey:@"sponsoredTranslation"]; - } - - _properties = properties; - - _adOptionsView = [[FBAdOptionsView alloc] init]; - _adOptionsView.nativeAd = _fbNativeAdBase; - _adOptionsView.backgroundColor = [UIColor clearColor]; - } - - return self; -} - - -#pragma mark - MPNativeAdAdapter - -- (NSURL *)defaultActionURL -{ - return nil; -} - -- (BOOL)enableThirdPartyClickTracking -{ - return YES; -} - -- (void)willAttachToView:(UIView *)view -{ - if ([_fbNativeAdBase class] == [FBNativeBannerAd class]) { - [((FBNativeBannerAd *) self.fbNativeAdBase) registerViewForInteraction:view iconView:self.iconView viewController:[self.delegate viewControllerForPresentingModalView]]; - } else if ([_fbNativeAdBase class] == [FBNativeAd class]) { - [((FBNativeAd *) self.fbNativeAdBase) registerViewForInteraction:view mediaView:self.mediaView iconView:self.iconView viewController:[self.delegate viewControllerForPresentingModalView]]; - } -} - -- (void)willAttachToView:(UIView *)view withAdContentViews:(NSArray *)adContentViews -{ - if ( adContentViews.count > 0 ) { - if ([_fbNativeAdBase class] == [FBNativeBannerAd class]){ - [((FBNativeBannerAd *) self.fbNativeAdBase) registerViewForInteraction:view iconView:self.iconView viewController:[self.delegate viewControllerForPresentingModalView] clickableViews:adContentViews]; - } else if ([_fbNativeAdBase class] == [FBNativeAd class]){ - [((FBNativeAd *) self.fbNativeAdBase) registerViewForInteraction:view mediaView:self.mediaView iconView:self.iconView viewController:[self.delegate viewControllerForPresentingModalView] clickableViews:adContentViews]; - } - } else { - [self willAttachToView:view]; - } -} - -- (UIView *)privacyInformationIconView -{ - return self.adOptionsView; -} - -- (UIView *)mainMediaView -{ - return self.mediaView; -} - -- (UIView *)iconMediaView -{ - return self.iconView; -} - -#pragma mark - FBNativeAdDelegate - -- (void)nativeAdWillLogImpression:(FBNativeAd *)nativeAd -{ - if ([self.delegate respondsToSelector:@selector(nativeAdWillLogImpression:)]) { - MPLogAdEvent([MPLogEvent adShowSuccessForAdapter:NSStringFromClass(self.class)], self.fbNativeAdBase.placementID); - MPLogAdEvent([MPLogEvent adWillAppearForAdapter:NSStringFromClass(self.class)], self.fbNativeAdBase.placementID); - - [self.delegate nativeAdWillLogImpression:self]; - } else { - MPLogInfo(@"Delegate does not implement impression tracking callback. Impressions likely not being tracked."); - } -} - -- (void)nativeAdDidClick:(FBNativeAd *)nativeAd -{ - if ([self.delegate respondsToSelector:@selector(nativeAdDidClick:)]) { - MPLogAdEvent([MPLogEvent adTappedForAdapter:NSStringFromClass(self.class)], self.fbNativeAdBase.placementID); - [self.delegate nativeAdDidClick:self]; - } else { - MPLogInfo(@"Delegate does not implement click tracking callback. Clicks likely not being tracked."); - } - - MPLogAdEvent([MPLogEvent adWillPresentModalForAdapter:NSStringFromClass(self.class)], self.fbNativeAdBase.placementID); - - [self.delegate nativeAdWillPresentModalForAdapter:self]; -} - -- (void)nativeAdDidFinishHandlingClick:(FBNativeAd *)nativeAd -{ - MPLogAdEvent([MPLogEvent adDidDismissModalForAdapter:NSStringFromClass(self.class)], self.fbNativeAdBase.placementID); - - [self.delegate nativeAdDidDismissModalForAdapter:self]; -} - -#pragma mark - FBNativeBannerAdDelegate - -- (void)nativeBannerAdWillLogImpression:(FBNativeBannerAd *)nativeBannerAd -{ - if ([self.delegate respondsToSelector:@selector(nativeAdWillLogImpression:)]) { - MPLogAdEvent([MPLogEvent adShowSuccessForAdapter:NSStringFromClass(self.class)], self.fbNativeAdBase.placementID); - MPLogAdEvent([MPLogEvent adWillAppearForAdapter:NSStringFromClass(self.class)], self.fbNativeAdBase.placementID); - - [self.delegate nativeAdWillLogImpression:self]; - } else { - MPLogInfo(@"Delegate does not implement impression tracking callback. Impressions likely not being tracked."); - } -} - -- (void)nativeBannerAdDidClick:(FBNativeBannerAd *)nativeBannerAd -{ - if ([self.delegate respondsToSelector:@selector(nativeAdDidClick:)]) { - MPLogAdEvent([MPLogEvent adTappedForAdapter:NSStringFromClass(self.class)], self.fbNativeAdBase.placementID); - - [self.delegate nativeAdDidClick:self]; - } else { - MPLogInfo(@"Delegate does not implement click tracking callback. Clicks likely not being tracked."); - } - - MPLogAdEvent([MPLogEvent adWillPresentModalForAdapter:NSStringFromClass(self.class)], self.fbNativeAdBase.placementID); - - [self.delegate nativeAdWillPresentModalForAdapter:self]; -} - -- (void)nativeBannerAdDidFinishHandlingClick:(FBNativeBannerAd *)nativeBannerAd -{ - MPLogAdEvent([MPLogEvent adDidDismissModalForAdapter:NSStringFromClass(self.class)], self.fbNativeAdBase.placementID); - - [self.delegate nativeAdDidDismissModalForAdapter:self]; -} - -@end diff --git a/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookNativeAdRenderer.h b/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookNativeAdRenderer.h deleted file mode 100644 index 545a5e042c..0000000000 --- a/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookNativeAdRenderer.h +++ /dev/null @@ -1,31 +0,0 @@ -// -// FacebookNativeAdRenderer.h -// MoPubSDK -// -// Copyright © 2019 MoPub. All rights reserved. -// - -#import - -#if __has_include() -#import -#elif __has_include() -#import -#else -#import "MPNativeAdRenderer.h" -#endif - -NS_ASSUME_NONNULL_BEGIN - -@class MPNativeAdRendererConfiguration; -@class MPStaticNativeAdRendererSettings; - -@interface FacebookNativeAdRenderer : NSObject - -@property (nonatomic, readonly) MPNativeViewSizeHandler viewSizeHandler; - -+ (MPNativeAdRendererConfiguration *)rendererConfigurationWithRendererSettings:(id)rendererSettings; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookNativeAdRenderer.m b/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookNativeAdRenderer.m deleted file mode 100644 index 5bb3f6db95..0000000000 --- a/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookNativeAdRenderer.m +++ /dev/null @@ -1,202 +0,0 @@ -// -// FacebookNativeAdRenderer.m -// MoPubSDK -// -// Copyright © 2019 MoPub. All rights reserved. -// - -#import "FacebookNativeAdRenderer.h" -#import - -#if __has_include("MoPub.h") -#import "MPLogging.h" -#import "MPNativeAdAdapter.h" -#import "MPNativeAdConstants.h" -#import "MPNativeAdError.h" -#import "MPNativeAdRendererConfiguration.h" -#import "MPNativeAdRendererImageHandler.h" -#import "MPNativeAdRendering.h" -#import "MPNativeAdRenderingImageLoader.h" -#import "MPNativeView.h" -#import "MPStaticNativeAdRendererSettings.h" -#import "MPURLRequest.h" -#import "MPHTTPNetworkSession.h" -#import "MPMemoryCache.h" -#endif -#import "FacebookNativeAdAdapter.h" - -@interface FacebookNativeAdRenderer () - -@property (nonatomic, strong) UIView *adView; -@property (nonatomic, strong) FacebookNativeAdAdapter *adapter; -@property (nonatomic, strong) Class renderingViewClass; -@property (nonatomic, strong) MPNativeAdRendererImageHandler *rendererImageHandler; -@property (nonatomic, assign) BOOL adViewInViewHierarchy; - -@end - -@implementation FacebookNativeAdRenderer - -- (instancetype)initWithRendererSettings:(id)rendererSettings -{ - if (self = [super init]) { - MPStaticNativeAdRendererSettings *settings = (MPStaticNativeAdRendererSettings *)rendererSettings; - _renderingViewClass = settings.renderingViewClass; - _viewSizeHandler = [settings.viewSizeHandler copy]; - _rendererImageHandler = [MPNativeAdRendererImageHandler new]; - _rendererImageHandler.delegate = self; - } - - return self; -} - -+ (MPNativeAdRendererConfiguration *)rendererConfigurationWithRendererSettings:(id)rendererSettings -{ - MPNativeAdRendererConfiguration *config = [[MPNativeAdRendererConfiguration alloc] init]; - config.rendererClass = [self class]; - config.rendererSettings = rendererSettings; - config.supportedCustomEvents = @[@"FacebookNativeCustomEvent"]; - - return config; -} - -- (UIView *)retrieveViewWithAdapter:(id)adapter error:(NSError **)error -{ - if (!adapter || ![adapter isKindOfClass:[FacebookNativeAdAdapter class]]) { - if (error) { - *error = MPNativeAdNSErrorForRenderValueTypeError(); - } - - return nil; - } - - self.adapter = adapter; - - if (!self.renderingViewClass) { - FBNativeAdBase *fbNativeAd = ((FacebookNativeAdAdapter *)self.adapter).fbNativeAdBase; - UIView *fbAdView = [FBNativeAdView nativeAdViewWithNativeAd:fbNativeAd]; - fbAdView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - return fbAdView; - } - - if ([self.renderingViewClass respondsToSelector:@selector(nibForAd)]) { - self.adView = (UIView *)[[[self.renderingViewClass nibForAd] instantiateWithOwner:nil options:nil] firstObject]; - } else { - self.adView = [[self.renderingViewClass alloc] init]; - } - - self.adView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; - - // We only load text here. We delay loading of images until the view is added to the view hierarchy - // so we don't unnecessarily load images from the cache if the user is scrolling fast. So we will - // just store the image URLs for now. - if ([self.adView respondsToSelector:@selector(nativeMainTextLabel)]) { - self.adView.nativeMainTextLabel.text = [adapter.properties objectForKey:kAdTextKey]; - } - - if ([self.adView respondsToSelector:@selector(nativeTitleTextLabel)]) { - self.adView.nativeTitleTextLabel.text = [adapter.properties objectForKey:kAdTitleKey]; - } - - if ([self.adView respondsToSelector:@selector(nativeCallToActionTextLabel)] && self.adView.nativeCallToActionTextLabel) { - self.adView.nativeCallToActionTextLabel.text = [adapter.properties objectForKey:kAdCTATextKey]; - } - - if ([self.adView respondsToSelector:@selector(nativePrivacyInformationIconImageView)]) { - FBAdOptionsView *adOptionsView = (FBAdOptionsView *)adapter.privacyInformationIconView; - adOptionsView.frame = self.adView.nativePrivacyInformationIconImageView.bounds; - adOptionsView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; - self.adView.nativePrivacyInformationIconImageView.userInteractionEnabled = YES; - [self.adView.nativePrivacyInformationIconImageView addSubview:adOptionsView]; - self.adView.nativePrivacyInformationIconImageView.hidden = NO; - } - - if ([self hasIconView]) { - UIView *iconView = [self.adapter iconMediaView]; - UIView *iconImageView = [self.adView nativeIconImageView]; - - iconView.frame = iconImageView.bounds; - iconView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; - iconImageView.userInteractionEnabled = YES; - - [iconImageView addSubview:iconView]; - } - - if ([self shouldLoadMediaView]) { - UIView *mediaView = [self.adapter mainMediaView]; - UIView *mainImageView = [self.adView nativeMainImageView]; - - mediaView.frame = mainImageView.bounds; - mediaView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; - mainImageView.userInteractionEnabled = YES; - - [mainImageView addSubview:mediaView]; - } - - // See if the ad contains a star rating and notify the view if it does. - if ([self.adView respondsToSelector:@selector(layoutStarRating:)]) { - NSNumber *starRatingNum = [adapter.properties objectForKey:kAdStarRatingKey]; - - if ([starRatingNum isKindOfClass:[NSNumber class]] && starRatingNum.floatValue >= kStarRatingMinValue && starRatingNum.floatValue <= kStarRatingMaxValue) { - [self.adView layoutStarRating:starRatingNum]; - } - } - - return self.adView; -} - -- (BOOL)shouldLoadMediaView -{ - return [self.adapter respondsToSelector:@selector(mainMediaView)] - && [self.adapter mainMediaView] - && [self.adView respondsToSelector:@selector(nativeMainImageView)]; -} - -- (BOOL)hasIconView -{ - return [self.adapter respondsToSelector:@selector(iconMediaView)] - && [self.adapter iconMediaView] - && [self.adView respondsToSelector:@selector(nativeIconImageView)]; -} - -- (void)onPrivacyIconTapped -{ - if ([self.adapter respondsToSelector:@selector(displayContentForDAAIconTap)]) { - [self.adapter displayContentForDAAIconTap]; - } -} - -- (void)adViewWillMoveToSuperview:(UIView *)superview -{ - self.adViewInViewHierarchy = (superview != nil); - - if (superview) { - // Only handle the loading of the icon image if the adapter doesn't already have a view for it. - if (![self hasIconView] && [self.adapter.properties objectForKey:kAdIconImageKey] && [self.adView respondsToSelector:@selector(nativeIconImageView)]) { - [self.rendererImageHandler loadImageForURL:[NSURL URLWithString:[self.adapter.properties objectForKey:kAdIconImageKey]] intoImageView:self.adView.nativeIconImageView]; - } - - // Only handle the loading of the main image if the adapter doesn't already have a view for it. - if (!([self.adapter respondsToSelector:@selector(mainMediaView)] && [self.adapter mainMediaView])) { - if ([self.adapter.properties objectForKey:kAdMainImageKey] && [self.adView respondsToSelector:@selector(nativeMainImageView)]) { - [self.rendererImageHandler loadImageForURL:[NSURL URLWithString:[self.adapter.properties objectForKey:kAdMainImageKey]] intoImageView:self.adView.nativeMainImageView]; - } - } - - // Layout custom assets here as the custom assets may contain images that need to be loaded. - if ([self.adView respondsToSelector:@selector(layoutCustomAssetsWithProperties:imageLoader:)]) { - // Create a simplified image loader for the ad view to use. - MPNativeAdRenderingImageLoader *imageLoader = [[MPNativeAdRenderingImageLoader alloc] initWithImageHandler:self.rendererImageHandler]; - [self.adView layoutCustomAssetsWithProperties:self.adapter.properties imageLoader:imageLoader]; - } - } -} - -#pragma mark - MPNativeAdRendererImageHandlerDelegate - -- (BOOL)nativeAdViewInViewHierarchy -{ - return self.adViewInViewHierarchy; -} - -@end diff --git a/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookNativeCustomEvent.h b/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookNativeCustomEvent.h deleted file mode 100755 index baaa6eac68..0000000000 --- a/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookNativeCustomEvent.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// FacebookNativeCustomEvent.h -// MoPub -// -// Copyright (c) 2014 MoPub. All rights reserved. -// - -#if __has_include() - #import -#elif __has_include() - #import -#else - #import "MPNativeCustomEvent.h" -#endif - - -@interface FacebookNativeCustomEvent : MPNativeCustomEvent - -@end diff --git a/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookNativeCustomEvent.m b/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookNativeCustomEvent.m deleted file mode 100644 index a654105f0f..0000000000 --- a/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookNativeCustomEvent.m +++ /dev/null @@ -1,132 +0,0 @@ -// -// FacebookNativeCustomEvent.m -// MoPub -// -// Copyright (c) 2014 MoPub. All rights reserved. -// -#import -#import "FacebookNativeCustomEvent.h" -#import "FacebookNativeAdAdapter.h" -#import "FacebookAdapterConfiguration.h" -#if __has_include("MoPub.h") - #import "MoPub.h" - #import "MPNativeAd.h" - #import "MPLogging.h" - #import "MPNativeAdError.h" -#endif - -static const NSInteger FacebookNoFillErrorCode = 1001; - -@interface FacebookNativeCustomEvent () - -@property (nonatomic, readwrite, strong) FBNativeAdBase *fbNativeAdBase; -@property (nonatomic, copy) NSString *fbPlacementId; -@property (nonatomic) Boolean isNativeBanner; - -@end - -@implementation FacebookNativeCustomEvent - -- (void)requestAdWithCustomEventInfo:(NSDictionary *)info -{ - [self requestAdWithCustomEventInfo:info adMarkup:nil]; -} - -- (void)requestAdWithCustomEventInfo:(NSDictionary *)info adMarkup:(NSString *)adMarkup -{ - self.fbPlacementId = [info objectForKey:@"placement_id"]; - - if (self.fbPlacementId) { - if (self.localExtras != nil && [self.localExtras count] > 0) { - self.isNativeBanner = [[self.localExtras objectForKey:@"native_banner"] boolValue]; - } - - self.isNativeBanner = self.isNativeBanner == nil ? FacebookAdapterConfiguration.isNativeBanner : self.isNativeBanner; - - if (self.isNativeBanner != nil) { - if (self.isNativeBanner) { - self.fbNativeAdBase = [[FBNativeBannerAd alloc] initWithPlacementID:self.fbPlacementId]; - ((FBNativeBannerAd *) self.fbNativeAdBase).delegate = self; - - [self loadAdWithMarkup:adMarkup]; - - return; - } - } - - self.fbNativeAdBase = [[FBNativeAd alloc] initWithPlacementID:self.fbPlacementId]; - ((FBNativeAd *) self.fbNativeAdBase).delegate = self; - - [self loadAdWithMarkup:adMarkup]; - } else { - [self.delegate nativeCustomEvent:self didFailToLoadAdWithError:MPNativeAdNSErrorForInvalidAdServerResponse(@"Invalid Facebook placement ID")]; - MPLogAdEvent([MPLogEvent adLoadFailedForAdapter:NSStringFromClass(self.class) error:MPNativeAdNSErrorForInvalidAdServerResponse(@"Invalid Facebook placement ID")], self.fbPlacementId); - } -} - -- (void)loadAdWithMarkup:(NSString *)markup -{ - // Load the advanced bid payload. - if (markup != nil) { - MPLogInfo(@"Loading Facebook native ad markup for Advanced Bidding"); - [self.fbNativeAdBase loadAdWithBidPayload:markup]; - - MPLogAdEvent([MPLogEvent adLoadAttemptForAdapter:NSStringFromClass(self.class) dspCreativeId:nil dspName:nil], self.fbPlacementId); - } - else { - MPLogInfo(@"Loading Facebook native ad"); - [self.fbNativeAdBase loadAd]; - - MPLogAdEvent([MPLogEvent adLoadAttemptForAdapter:NSStringFromClass(self.class) dspCreativeId:nil dspName:nil], self.fbPlacementId); - } - - [FBAdSettings setMediationService:[FacebookAdapterConfiguration mediationString]]; -} - -#pragma mark - FBNativeAdDelegate - -- (void)nativeAdDidLoad:(FBNativeAd *)nativeAd -{ - FacebookNativeAdAdapter *adAdapter = [[FacebookNativeAdAdapter alloc] initWithFBNativeAdBase:nativeAd adProperties:nil]; - MPNativeAd *interfaceAd = [[MPNativeAd alloc] initWithAdAdapter:adAdapter]; - - MPLogAdEvent([MPLogEvent adLoadSuccessForAdapter:NSStringFromClass(self.class)], self.fbPlacementId); - [self.delegate nativeCustomEvent:self didLoadAd:interfaceAd]; -} - -- (void)nativeAd:(FBNativeAd *)nativeAd didFailWithError:(NSError *)error -{ - if (error.code == FacebookNoFillErrorCode) { - MPLogAdEvent([MPLogEvent adShowFailedForAdapter:NSStringFromClass(self.class) error:MPNativeAdNSErrorForNoInventory()], self.fbPlacementId); - [self.delegate nativeCustomEvent:self didFailToLoadAdWithError:MPNativeAdNSErrorForNoInventory()]; - - } else { - MPLogAdEvent([MPLogEvent adShowFailedForAdapter:NSStringFromClass(self.class) error:MPNativeAdNSErrorForInvalidAdServerResponse(@"Facebook ad load error")], self.fbPlacementId); - [self.delegate nativeCustomEvent:self didFailToLoadAdWithError:MPNativeAdNSErrorForInvalidAdServerResponse(@"Facebook ad load error")]; - } -} - -#pragma mark - FBNativeBannerAdDelegate - -- (void)nativeBannerAdDidLoad:(FBNativeBannerAd *)nativeBannerAd -{ - FacebookNativeAdAdapter *adAdapter = [[FacebookNativeAdAdapter alloc] initWithFBNativeAdBase:nativeBannerAd adProperties:nil]; - MPNativeAd *interfaceAd = [[MPNativeAd alloc] initWithAdAdapter:adAdapter]; - - MPLogAdEvent([MPLogEvent adLoadSuccessForAdapter:NSStringFromClass(self.class)], self.fbPlacementId); - [self.delegate nativeCustomEvent:self didLoadAd:interfaceAd]; -} - -- (void)nativeBannerAd:(FBNativeBannerAd *)nativeBannerAd didFailWithError:(NSError *)error -{ - if (error.code == FacebookNoFillErrorCode) { - MPLogAdEvent([MPLogEvent adShowFailedForAdapter:NSStringFromClass(self.class) error:MPNativeAdNSErrorForNoInventory()], self.fbPlacementId); - [self.delegate nativeCustomEvent:self didFailToLoadAdWithError:MPNativeAdNSErrorForNoInventory()]; - - } else { - MPLogAdEvent([MPLogEvent adShowFailedForAdapter:NSStringFromClass(self.class) error:MPNativeAdNSErrorForInvalidAdServerResponse(@"Facebook ad load error")], self.fbPlacementId); - [self.delegate nativeCustomEvent:self didFailToLoadAdWithError:MPNativeAdNSErrorForInvalidAdServerResponse(@"Facebook ad load error")]; - } -} - -@end diff --git a/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookRewardedVideoCustomEvent.h b/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookRewardedVideoCustomEvent.h deleted file mode 100755 index a5fb1d3f18..0000000000 --- a/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookRewardedVideoCustomEvent.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// FacebookRewardedVideoCustomEvent.h -// -// Copyright © 2017 MoPub. All rights reserved. -// - -#if __has_include() - #import -#elif __has_include() - #import -#else - #import "MPRewardedVideoCustomEvent.h" -#endif - -@interface FacebookRewardedVideoCustomEvent : MPRewardedVideoCustomEvent - -@end diff --git a/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookRewardedVideoCustomEvent.m b/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookRewardedVideoCustomEvent.m deleted file mode 100644 index 5a1d433694..0000000000 --- a/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/FacebookAudienceNetwork/FacebookRewardedVideoCustomEvent.m +++ /dev/null @@ -1,259 +0,0 @@ -// -// FacebookRewardedVideoCustomEvent.m -// -// Created by Mopub on 4/12/17. -// -#import -#import "FacebookRewardedVideoCustomEvent.h" -#import "FacebookAdapterConfiguration.h" - -#if __has_include("MoPub.h") - #import "MPLogging.h" - #import "MoPub.h" - #import "MPRewardedVideoReward.h" - #import "MPRealTimeTimer.h" -#endif - -//Timer to record the expiration interval -#define FB_ADS_EXPIRATION_INTERVAL 3600 - -@interface FacebookRewardedVideoCustomEvent () - -@property (nonatomic, strong) FBRewardedVideoAd *fbRewardedVideoAd; -@property (nonatomic, strong) MPRealTimeTimer *expirationTimer; -@property (nonatomic, assign) BOOL hasTrackedImpression; -@property (nonatomic, copy) NSString *fbPlacementId; - -@end - -@implementation FacebookRewardedVideoCustomEvent - -@synthesize hasTrackedImpression = _hasTrackedImpression; - -- (void)initializeSdkWithParameters:(NSDictionary *)parameters { - // No SDK initialization method provided. -} - -- (void)requestRewardedVideoWithCustomEventInfo:(NSDictionary *)info { - [self requestRewardedVideoWithCustomEventInfo:info adMarkup:nil]; -} - -- (void)requestRewardedVideoWithCustomEventInfo:(NSDictionary *)info adMarkup:(NSString *)adMarkup { - if (![info objectForKey:@"placement_id"]) { - NSError *error = [self createErrorWith:@"Invalid Facebook placement ID" - andReason:@"" - andSuggestion:@""]; - - MPLogAdEvent([MPLogEvent adLoadFailedForAdapter:NSStringFromClass(self.class) error:error], nil); - - [self.delegate rewardedVideoDidFailToLoadAdForCustomEvent:self error:error]; - return; - } - - self.fbRewardedVideoAd = [[FBRewardedVideoAd alloc] initWithPlacementID:[info objectForKey:@"placement_id"]]; - self.fbRewardedVideoAd.delegate = self; - - [FBAdSettings setMediationService:[FacebookAdapterConfiguration mediationString]]; - - // Load the advanced bid payload. - if (adMarkup != nil) { - MPLogInfo(@"Loading Facebook rewarded video ad markup for Advanced Bidding"); - [self.fbRewardedVideoAd loadAdWithBidPayload:adMarkup]; - - MPLogAdEvent([MPLogEvent adLoadAttemptForAdapter:NSStringFromClass(self.class) dspCreativeId:nil dspName:nil], self.fbPlacementId); - } - // Request a rewarded video ad. - else { - MPLogInfo(@"Loading Facebook rewarded video ad"); - [self.fbRewardedVideoAd loadAd]; - - MPLogAdEvent([MPLogEvent adLoadAttemptForAdapter:NSStringFromClass(self.class) dspCreativeId:nil dspName:nil], self.fbPlacementId); - } -} - -//Verify that the rewarded video is precached -- (BOOL)hasAdAvailable -{ - return (self.fbRewardedVideoAd != nil && self.fbRewardedVideoAd.isAdValid); -} - -- (void)presentRewardedVideoFromViewController:(UIViewController *)viewController -{ - if(![self hasAdAvailable]) - { - NSError *error = [self createErrorWith:@"Error in loading Facebook Rewarded Video" - andReason:@"" - andSuggestion:@""]; - - MPLogAdEvent([MPLogEvent adShowFailedForAdapter:NSStringFromClass(self.class) error:error], self.fbPlacementId); - [self.delegate rewardedVideoDidFailToPlayForCustomEvent:self error:error]; - } - else - { - MPLogAdEvent([MPLogEvent adShowAttemptForAdapter:NSStringFromClass(self.class)], self.fbPlacementId); - - MPLogAdEvent([MPLogEvent adWillAppearForAdapter:NSStringFromClass(self.class)], self.fbPlacementId); - [self.delegate rewardedVideoWillAppearForCustomEvent:self]; - - [self.fbRewardedVideoAd showAdFromRootViewController:viewController]; - - MPLogAdEvent([MPLogEvent adDidAppearForAdapter:NSStringFromClass(self.class)], self.fbPlacementId); - [self.delegate rewardedVideoDidAppearForCustomEvent:self]; - } -} - --(void)dealloc{ - [self cancelExpirationTimer]; - self.fbRewardedVideoAd.delegate = nil; -} - --(void)cancelExpirationTimer -{ - if (_expirationTimer != nil) - { - [self.expirationTimer invalidate]; - self.expirationTimer = nil; - } -} - -#pragma mark FBRewardedVideoAdDelegate methods - -/*! - @method - - @abstract - Sent after an ad has been clicked by the person. - - @param rewardedVideoAd An FBRewardedVideoAd object sending the message. - */ -- (void)rewardedVideoAdDidClick:(FBRewardedVideoAd *)rewardedVideoAd -{ - MPLogAdEvent([MPLogEvent adTappedForAdapter:NSStringFromClass(self.class)], self.fbPlacementId); - [self.delegate rewardedVideoDidReceiveTapEventForCustomEvent:self ]; -} - -/*! - @method - - @abstract - Sent when an ad has been successfully loaded. - - @param rewardedVideoAd An FBRewardedVideoAd object sending the message. - */ -- (void)rewardedVideoAdDidLoad:(FBRewardedVideoAd *)rewardedVideoAd -{ - - [self cancelExpirationTimer]; - - [self.delegate rewardedVideoDidLoadAdForCustomEvent:self ]; - MPLogAdEvent([MPLogEvent adLoadSuccessForAdapter:NSStringFromClass(self.class)], self.fbPlacementId); - - // introduce timer for 1 hour per expiration logic introduced by FB - __weak __typeof__(self) weakSelf = self; - self.expirationTimer = [[MPRealTimeTimer alloc] initWithInterval:FB_ADS_EXPIRATION_INTERVAL block:^(MPRealTimeTimer *timer){ - __strong __typeof__(weakSelf) strongSelf = weakSelf; - if (strongSelf && !strongSelf.hasTrackedImpression) { - [strongSelf.delegate rewardedVideoDidExpireForCustomEvent:strongSelf]; - - NSError *error = [self createErrorWith:@"Facebook rewarded video ad expired per Audience Network's expiration policy" - andReason:@"" - andSuggestion:@""]; - - MPLogAdEvent([MPLogEvent adShowFailedForAdapter:NSStringFromClass(self.class) error:error], self.fbPlacementId); - - strongSelf.fbRewardedVideoAd = nil; - } - }]; - [self.expirationTimer scheduleNow]; -} - -- (NSError *)createErrorWith:(NSString *)description andReason:(NSString *)reaason andSuggestion:(NSString *)suggestion { - NSDictionary *userInfo = @{ - NSLocalizedDescriptionKey: NSLocalizedString(description, nil), - NSLocalizedFailureReasonErrorKey: NSLocalizedString(reaason, nil), - NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(suggestion, nil) - }; - - return [NSError errorWithDomain:NSStringFromClass([self class]) code:0 userInfo:userInfo]; -} - -/*! - @method - - @abstract - Sent after an FBRewardedVideoAd object has been dismissed from the screen, returning control - to your application. - - @param rewardedVideoAd An FBRewardedVideoAd object sending the message. - */ -- (void)rewardedVideoAdDidClose:(FBRewardedVideoAd *)rewardedVideoAd -{ - MPLogAdEvent([MPLogEvent adDidDisappearForAdapter:NSStringFromClass(self.class)], self.fbPlacementId); - [self.delegate rewardedVideoDidDisappearForCustomEvent:self]; -} - -/*! - @method - - @abstract - Sent immediately before an FBRewardedVideoAd object will be dismissed from the screen. - - @param rewardedVideoAd An FBRewardedVideoAd object sending the message. - */ -- (void)rewardedVideoAdWillClose:(FBRewardedVideoAd *)rewardedVideoAd -{ - MPLogAdEvent([MPLogEvent adWillDisappearForAdapter:NSStringFromClass(self.class)], self.fbPlacementId); - [self.delegate rewardedVideoWillDisappearForCustomEvent:self]; -} - -/*! - @method - - @abstract - Sent after an FBRewardedVideoAd fails to load the ad. - - @param rewardedVideoAd An FBRewardedVideoAd object sending the message. - @param error An error object containing details of the error. - */ -- (void)rewardedVideoAd:(FBRewardedVideoAd *)rewardedVideoAd didFailWithError:(NSError *)error -{ - [self cancelExpirationTimer]; - - MPLogAdEvent([MPLogEvent adLoadFailedForAdapter:NSStringFromClass(self.class) error:error], nil); - [self.delegate rewardedVideoDidFailToLoadAdForCustomEvent:self error:error]; -} - -/*! - @method - - @abstract - Sent after the FBRewardedVideoAd object has finished playing the video successfully. - Reward the user on this callback. - - @param rewardedVideoAd An FBRewardedVideoAd object sending the message. - */ -- (void)rewardedVideoAdVideoComplete:(FBRewardedVideoAd *)rewardedVideoAd -{ - MPLogInfo(@"Facebook rewarded video ad has finished playing successfully"); - // Passing the reward type and amount as unspecified. Set the reward value in mopub UI. - [self.delegate rewardedVideoShouldRewardUserForCustomEvent:self reward:[[MPRewardedVideoReward alloc] initWithCurrencyAmount:@(kMPRewardedVideoRewardCurrencyAmountUnspecified)]]; -} - -/*! - @method - - @abstract - Sent immediately before the impression of an FBRewardedVideoAd object will be logged. - - @param rewardedVideoAd An FBRewardedVideoAd object sending the message. - */ -- (void)rewardedVideoAdWillLogImpression:(FBRewardedVideoAd *)rewardedVideoAd -{ - [self cancelExpirationTimer]; - - MPLogAdEvent([MPLogEvent adShowSuccessForAdapter:NSStringFromClass(self.class)], self.fbPlacementId); - //set the tracker to true when the ad is shown on the screen. So that the timer is invalidated. - _hasTrackedImpression = true; -} - -@end diff --git a/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/LICENSE b/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/LICENSE deleted file mode 100644 index e3ecb42aaf..0000000000 --- a/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/LICENSE +++ /dev/null @@ -1,3 +0,0 @@ - The MoPub SDK License can be found at http://www.mopub.com/legal/sdk-license-agreement/ - - diff --git a/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/README.md b/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/README.md deleted file mode 100644 index 608e9e0149..0000000000 --- a/iphone/Maps/Pods/MoPub-FacebookAudienceNetwork-Adapters/README.md +++ /dev/null @@ -1,18 +0,0 @@ -# mopub-ios-mediation - -Thanks for taking a look at MoPub! We take pride in having an easy-to-use, and flexible monetization solution that works across multiple platforms. -We have separated network adapters from our MoPub SDK repository to enable an independent release cadence resulting in faster certification cycles. - -## Need Help? - -You can find Mediation Integration Tool [here]https://developers.mopub.com/docs/mediation/integrate/). Additional documentation can be found [here](https://developers.mopub.com/publishers/mediation/). - -## New Pull Requests? - -Thank you for submitting pull requests to the MoPub iOS Mediation GitHub repository. Our team regularly monitors and investigates all submissions for the inclusion in our official adapter releases. - -## License - -To view the full license, visit [http://www.mopub.com/legal/sdk-license-agreement/](http://www.mopub.com/legal/sdk-license-agreement/) - - diff --git a/iphone/Maps/Pods/Pods.xcodeproj/project.pbxproj b/iphone/Maps/Pods/Pods.xcodeproj/project.pbxproj index 3b6f6aff7a..15d4ec8ffb 100644 --- a/iphone/Maps/Pods/Pods.xcodeproj/project.pbxproj +++ b/iphone/Maps/Pods/Pods.xcodeproj/project.pbxproj @@ -6,5431 +6,94 @@ objectVersion = 46; objects = { -/* Begin PBXAggregateTarget section */ - 072CEA044D2EF26F03496D5996BBF59F /* Firebase */ = { - isa = PBXAggregateTarget; - buildConfigurationList = 848EDB835E7C50754E53EBF20A5DB6F0 /* Build configuration list for PBXAggregateTarget "Firebase" */; - buildPhases = ( - ); - dependencies = ( - A6EEE4294414A3A92D223ADB0A2DFCCD /* PBXTargetDependency */, - 56826B99CA8B67319903693E53A13B58 /* PBXTargetDependency */, - 00CD3353F1CCC85F6440EB3CCACE84A6 /* PBXTargetDependency */, - ); - name = Firebase; - }; - 5EB4B0B6DA6D5C0C3365733BEAA1C485 /* FirebaseCoreDiagnosticsInterop */ = { - isa = PBXAggregateTarget; - buildConfigurationList = 5921552366ED7C5BBE0EDD81AAD70102 /* Build configuration list for PBXAggregateTarget "FirebaseCoreDiagnosticsInterop" */; - buildPhases = ( - ); - dependencies = ( - ); - name = FirebaseCoreDiagnosticsInterop; - }; - 803EF1AFD27445A470912B1033353BFC /* Pushwoosh */ = { - isa = PBXAggregateTarget; - buildConfigurationList = 34CE123EFD4B4DB877950D1ED1B2A296 /* Build configuration list for PBXAggregateTarget "Pushwoosh" */; - buildPhases = ( - ); - dependencies = ( - ); - name = Pushwoosh; - }; - B0B23938B1EBCBAD2419AB6E9D222A0B /* AppsFlyerFramework */ = { - isa = PBXAggregateTarget; - buildConfigurationList = 5418348C4E12C2FA948C40C515696052 /* Build configuration list for PBXAggregateTarget "AppsFlyerFramework" */; - buildPhases = ( - ); - dependencies = ( - ); - name = AppsFlyerFramework; - }; - B53D977A951AFC38B21751B706C1DF83 /* GoogleAppMeasurement */ = { - isa = PBXAggregateTarget; - buildConfigurationList = 2E4EF7C2118ECB5D4BF4C68E63768578 /* Build configuration list for PBXAggregateTarget "GoogleAppMeasurement" */; - buildPhases = ( - ); - dependencies = ( - 0C12850A8B9416E3F529351252093AF4 /* PBXTargetDependency */, - 9AE698479AC7EB0324A264ED96C6CD58 /* PBXTargetDependency */, - ); - name = GoogleAppMeasurement; - }; - C49E7A4D59E5C8BE8DE9FB1EFB150185 /* FirebaseAnalytics */ = { - isa = PBXAggregateTarget; - buildConfigurationList = 148EF6C494C229CEF85E66DCBBE7845B /* Build configuration list for PBXAggregateTarget "FirebaseAnalytics" */; - buildPhases = ( - ); - dependencies = ( - 9CA43EE8FFD21E33ABCE9B9D57F00B79 /* PBXTargetDependency */, - 6E1D8382715BA53FBFD0864A55CDDF64 /* PBXTargetDependency */, - 3F29A4DBA277C7737F741AEB4B280C61 /* PBXTargetDependency */, - 8DA43453DD426F213EACE133ED917BB7 /* PBXTargetDependency */, - 3BC8FD2068D59EEF0A6026C4C145811B /* PBXTargetDependency */, - ); - name = FirebaseAnalytics; - }; - D372E53E2E8FEAA06A0439FB85E65767 /* FirebaseAnalyticsInterop */ = { - isa = PBXAggregateTarget; - buildConfigurationList = 0EEA329DC76CD5F88CC0C61390B632E2 /* Build configuration list for PBXAggregateTarget "FirebaseAnalyticsInterop" */; - buildPhases = ( - ); - dependencies = ( - ); - name = FirebaseAnalyticsInterop; - }; - D53454FBB630479B01CA0A777383E94F /* FBAudienceNetwork */ = { - isa = PBXAggregateTarget; - buildConfigurationList = 256CBFB856AF512FAE3E1735FE4D1BAA /* Build configuration list for PBXAggregateTarget "FBAudienceNetwork" */; - buildPhases = ( - ); - dependencies = ( - 432222FC3724482DA420A70080E77416 /* PBXTargetDependency */, - ); - name = FBAudienceNetwork; - }; -/* End PBXAggregateTarget section */ - /* Begin PBXBuildFile section */ - 00CA5A7952428E7B681D8D8EA4B15147 /* MRController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E4A4E5B5AAEC6F872CA30828FFBF8A4 /* MRController.m */; }; - 00DC4BEA495F98FCD749993A1BF06F3B /* MPVideoConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = D56AE7C88549B7EA1F0686D29FA14FF0 /* MPVideoConfig.m */; }; - 010FC1AC018EA54F9A4807EE53E3B6AC /* FBSDKModelManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 1864101E77EC0D309624A3116311CED8 /* FBSDKModelManager.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 0142150FF4BB31F9AA9CAF1215EEB7CF /* FIRExceptionModel_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 994DEFBADD1332AA70EA083E89DF533E /* FIRExceptionModel_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 01ABC64A44B8E5639C4968C066D486E6 /* MPMediationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = ADAA7307CD9D86E713C6B772ACF1AE53 /* MPMediationManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 01CC04B16416BF9AB55B0765763EDEA4 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7E622F34474A1058AB765526BF8520FB /* Foundation.framework */; }; - 0225B356354DEECE9030C4A57FFF1D80 /* FIRCLSReportManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F3A09DE5943807AEF91DEAEA9E42C07 /* FIRCLSReportManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0264A37FF26A9497E25396ABD2A28649 /* FirebaseInstallations-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 03C7FA19F4FCDE9FBE532FD2FD6867CD /* FirebaseInstallations-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0286B6C0CC498A5313B1C5D82AC49339 /* FlurrySKAdNetwork.h in Headers */ = {isa = PBXBuildFile; fileRef = 07685B4C5D5224A31054F4BF901AB1D3 /* FlurrySKAdNetwork.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 036CDD1AD06687F2B75E924F2265653C /* MPCollectionViewAdPlacer.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F0A4355DDF80E4D44EB2799EA3D706F /* MPCollectionViewAdPlacer.m */; }; - 03B341CD6A6F1D2D4BE8A49BF883DC9B /* NSDate+MPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 338BDAC5E910488EB29BFAF1F8E0DD51 /* NSDate+MPAdditions.m */; }; - 03D6622B07CD2E50CD45BE0B22856D66 /* AVKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F037808B52C3604C55C12D4754D11EC9 /* AVKit.framework */; }; - 03DC24B3279D1C0F65C5844A1325C2D4 /* FlurrySessionBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 582B0F4F139E3CF295CBEC2779104615 /* FlurrySessionBuilder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 03EBB6635435EB209953BB576013BDB1 /* MPNativeAdRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 34FBD36A2BAECA59308A139DFC3745A2 /* MPNativeAdRenderer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0408D6FD2312BE856DC49B973F2D5732 /* FBSDKWebDialog.m in Sources */ = {isa = PBXBuildFile; fileRef = D1B092F21830A7A1B6344AF7DAF3110A /* FBSDKWebDialog.m */; }; - 04AF396EE038EA6EA049C418AECEC47D /* FlurryUserProperties.h in Headers */ = {isa = PBXBuildFile; fileRef = E2358BD1103DEF5DD39AB7BBB17FC9BA /* FlurryUserProperties.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 04C7B32B83982E2BDF5AAAAB02625FC8 /* FIRCLSApplication.m in Sources */ = {isa = PBXBuildFile; fileRef = CA5DDA7151A4B4E9A874A13E7B3E549A /* FIRCLSApplication.m */; }; - 05CFDF74857A78A5FCDC9F7ECD50C7A2 /* FIRCLSException.mm in Sources */ = {isa = PBXBuildFile; fileRef = 59337EB6923721D465B4B5D0661F7FC5 /* FIRCLSException.mm */; }; - 060FD8C32FA79C72171B56088688ED47 /* MoPub_AvidAdSessionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C3AE4B912AD6F08CD92E0BFA2706B656 /* MoPub_AvidAdSessionManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0615F95D6BBC374F313420D1B1548297 /* FBSDKAppLinkUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = EA71A2D0AD037B5B5FF80843D786F47B /* FBSDKAppLinkUtility.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 06314CC92758678AD7B14CBFBAADFD08 /* MPVASTManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FC6506780B4D198D126223DBC80863B /* MPVASTManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0637E0CC36906565A27E876245149FF8 /* MPNativeAdSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 932049BBF0F8CA72D69361B2B0754296 /* MPNativeAdSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 063D930144D3A60F86ACBA4026F7D51A /* NSBundle+MPAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 397A582E29238B3DEE6741C658500F29 /* NSBundle+MPAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0640DA11718B06B65921FDF1BE19D02F /* GULNetwork.h in Headers */ = {isa = PBXBuildFile; fileRef = 51A8A0867FE4D68D0E101BA97FC5F35C /* GULNetwork.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 06CACE1F17D164165857B85771D94ABB /* FIRAppAssociationRegistration.m in Sources */ = {isa = PBXBuildFile; fileRef = B55C27E0004746FEE9DAD32ECBDB7592 /* FIRAppAssociationRegistration.m */; }; - 074F91E3A771F1D71A8D8EAD1ACB1796 /* GDTCCTPrioritizer.h in Headers */ = {isa = PBXBuildFile; fileRef = A03CED05C2FD88B8A24AD454A0FDCE07 /* GDTCCTPrioritizer.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 075E4261A163D7737CFAE98571C5A669 /* MRVideoPlayerManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 8421B78D82345C3C2218415460154209 /* MRVideoPlayerManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0773078D73AEA28B7F93A2827262AC36 /* FIRInstallationsErrorUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D56CC1FFF1A7F8222942B0A4FDF686C /* FIRInstallationsErrorUtil.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 07C44EEBD9B95F270604C72201BE1A15 /* MPWebView+Viewability.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E56D1F0799DF117F410E1607AB5239F /* MPWebView+Viewability.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 07FDBDBC82FC6FD62A83773EDA6D0D3F /* FBSDKUserDataStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C81EA5A0AA497C64568FE4DFAADE097 /* FBSDKUserDataStore.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 082DC372356AC7F3DB0DACF7DE927B91 /* MPURLResolver.m in Sources */ = {isa = PBXBuildFile; fileRef = 292F6F2D218AED3F50A682DF46227AF0 /* MPURLResolver.m */; }; - 0830DED0F656D7E5F6A5747ADA345DB2 /* FIRInstallationsErrorUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 314EA77948709322D61FDC3575D424E6 /* FIRInstallationsErrorUtil.m */; }; - 08702BD218BCE7301CD5DEAA2DB392F4 /* GDTCOREvent_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D7252A72681DC1F892BBFD3ACE5AE548 /* GDTCOREvent_Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 08A10D77C8E00A72A60D1D0C5D36549F /* MPStaticNativeAdRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 98914998F7260C49A1D2A080F55D2068 /* MPStaticNativeAdRenderer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 08AD0E3CFAAD294AEBF79502AC5CCDE7 /* FIRCLSOnboardingOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A788D492DC5B99071640AD56A6564CB /* FIRCLSOnboardingOperation.m */; }; - 08F472038396C0F1EEAF3615CA4292C6 /* MPMoPubRewardedVideoCustomEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C94E6D5E6F6E23718118536A3F070C9 /* MPMoPubRewardedVideoCustomEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 090320471E87F5F6A582ABC45F35AF6C /* MPInterstitialCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 1720997F290E7DBBC9B82125353CEF4B /* MPInterstitialCustomEvent.m */; }; - 095393DB195261068CF5AED2F76E3477 /* FBSDKErrorRecoveryAttempter.h in Headers */ = {isa = PBXBuildFile; fileRef = 8ACD209FA4CEBB607418DDCB0D89EF02 /* FBSDKErrorRecoveryAttempter.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 09640EC6FDA32F21A82AD6C4B2798821 /* FBSDKLogo.h in Headers */ = {isa = PBXBuildFile; fileRef = C54E999454DDCF12B4282697FC429B39 /* FBSDKLogo.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 0994A6A44593185C2B1181677C21D884 /* MPBaseBannerAdapter.m in Sources */ = {isa = PBXBuildFile; fileRef = 1ECC900453CA9A4DB3C74EF1C7E82EF5 /* MPBaseBannerAdapter.m */; }; - 09D9CA1C8A65675DB549CC09E06D1201 /* FIRCLSExecutionIdentifierModel.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FEAF1A68C1B40539C2535E220D4AEF3 /* FIRCLSExecutionIdentifierModel.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 09F2148B88F742CC4331E1879E33AA89 /* FBSDKConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BACCBD3B52586035239BB14F98DE050 /* FBSDKConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 09FB59E693E3AB9D9C5C7AE93248E9E7 /* FIRInstallationsIDController.h in Headers */ = {isa = PBXBuildFile; fileRef = C26590F88F2681CD9C907ED6B4F4D894 /* FIRInstallationsIDController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0A17FFBA8F4012801C2F1A8CD7A0F4D8 /* FIRCLSCrashedMarkerFile.c in Sources */ = {isa = PBXBuildFile; fileRef = F8D29732A73F9BC51636E7AB7784CF5F /* FIRCLSCrashedMarkerFile.c */; }; - 0A18B6B74AEF2A481A8F16BE6BF91609 /* FIRCLSAsyncOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C0AB88CEB3D0CED2829B2607B2CE30C /* FIRCLSAsyncOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0A398D895C50B1B5A3198EF9D4C3B7E2 /* MPStaticNativeAdRendererSettings.m in Sources */ = {isa = PBXBuildFile; fileRef = 0457EF6C9EF25D313C049009B7E0CA94 /* MPStaticNativeAdRendererSettings.m */; }; - 0A3D295AB776852F91A80DAD2942A02A /* FIRCLSFeatures.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BAD6768EC338FEE7F2E5FE8D78BEBE6 /* FIRCLSFeatures.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0A65B519AD71C7EEB23B4C1326AA6D6C /* FBSDKKeychainStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 14B33C6D455B374BFF40F79724EF1BC7 /* FBSDKKeychainStore.m */; }; - 0AEC50395BEEB8CE18851DBA93781A1A /* MPTimer.m in Sources */ = {isa = PBXBuildFile; fileRef = 3AA24247469939DB78A0EDD3DEC90888 /* MPTimer.m */; }; - 0B127F5EEAC16211906E274A70DA41D4 /* MPEngineInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 22031BA63BD48A1E34D4873F3B818763 /* MPEngineInfo.m */; }; - 0B151AFB6B446B915806FCB3153789EC /* MPAdConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = F5CEF86EE487DF24CB3CAA8E122CB110 /* MPAdConfiguration.m */; }; - 0B168048D631FB5833A05BF4B25F1754 /* MPVideoEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = E77693F20CB5B792E1850247D04663B6 /* MPVideoEvent.m */; }; - 0B504BBE177C09200825153297E49498 /* FBSDKDeviceLoginManagerResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B8C247DAD4C621881FED270DC9AAFB2 /* FBSDKDeviceLoginManagerResult.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0BB52236366FE3FC9FFB7108EA7FA81E /* FIRCLSNetworkResponseHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = B10E383EAC4BF17F290B67B84916643D /* FIRCLSNetworkResponseHandler.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0BED26739BA510CC88C5A5980F3FB544 /* FacebookRewardedVideoCustomEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 293534B9953D2C3BCF59EC650757914B /* FacebookRewardedVideoCustomEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0BEE0164A8562FA5D7190C6E396E5EFB /* MPError.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F2B35A79CF27A0EF16F776BD4E43108 /* MPError.m */; }; - 0C207C134ED07368AB0C5675427659C9 /* GDTCOREventTransformer.h in Headers */ = {isa = PBXBuildFile; fileRef = BB58F00F1770593E5F2B2058C686CAF1 /* GDTCOREventTransformer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0C30E340886CA3221FEF213E8DB3314F /* MPRateLimitManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 0916159955B5C6A4C2A8C48C0EA27A23 /* MPRateLimitManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0C4D6986D849FC1DBC55A34F0C55E561 /* FBSDKContainerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = AE4F132210F80370EC912C901003747A /* FBSDKContainerViewController.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 0C7836BE6333774780E4C381A9622583 /* FBSDKViewImpressionTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = 0CF33EBBFA2AF01CD6134E64522EC598 /* FBSDKViewImpressionTracker.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 0CE643FFBE05968F87561EC329B1E0B7 /* MPCloseButtonX.png in Resources */ = {isa = PBXBuildFile; fileRef = 30E34210AA27835CDAA284576B42C1AD /* MPCloseButtonX.png */; }; - 0DB0696892FC586A9F733B0E9987FE1F /* FBSDKAppEventsDeviceInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 61A3959E94C4B990AD422BC25379BC68 /* FBSDKAppEventsDeviceInfo.m */; }; - 0DC80CF051ECB309CFCA4D476B504730 /* MPLogEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 7BC3F5B593BE37B9F6BD11C01F5EE0E6 /* MPLogEvent.m */; }; - 0DDCA213B5B822119A9C32DCBAE826EB /* MPVASTCreative.h in Headers */ = {isa = PBXBuildFile; fileRef = ADD0E305BAAF57807F5945F54FC6DC5C /* MPVASTCreative.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0E4991ACA31A48171CBD0EE8FD11A5D7 /* FBLPromise+Testing.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 9D4325D5B5B5EE56512FA79B4BED8DE5 /* FBLPromise+Testing.h */; }; - 0E664034D130EBF5BC4D3173524FEF72 /* MOPUBNativeVideoCustomEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D32FD4E1B6BB0BB60BE0BACE903DE48 /* MOPUBNativeVideoCustomEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0E946AAB81B32593ED4E5FC9FD129BD8 /* FBSDKImageDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = F99D9AB50EAAF16149813029F81B0429 /* FBSDKImageDownloader.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 0EBB3E760C7BF3D4BDE99F26C832ED14 /* FBSDKBase64.h in Headers */ = {isa = PBXBuildFile; fileRef = 8081747B6821D47031C444F6953D8A04 /* FBSDKBase64.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 0ED8E25C8989172D8941970A1D74A027 /* MPAdImpressionTimer.m in Sources */ = {isa = PBXBuildFile; fileRef = BF6BCF2D44C454CD22ABD63FF5D592EA /* MPAdImpressionTimer.m */; }; - 0F0D0F61402D96A68B334289CEEE38C4 /* GDTCOREvent+GDTCCTSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = 40FD2249472D8F7C8C8A6ACE137A1537 /* GDTCOREvent+GDTCCTSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0F14A429375771C394A94B2B454AA2F6 /* Flurry.h in Headers */ = {isa = PBXBuildFile; fileRef = FD01AB4CD97581F7758F33D1D209DC26 /* Flurry.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0F4752D1B3614E3F88AF51A6C8A9E1ED /* FBSDKSwizzler.m in Sources */ = {isa = PBXBuildFile; fileRef = AC8AA52C4A392EF0B8462CB0C7712E8A /* FBSDKSwizzler.m */; }; - 0F618197C31DD693254928078568B171 /* MPVASTResourceView.h in Headers */ = {isa = PBXBuildFile; fileRef = 129EC6EFFC7E39FDA23E0B5149E68C11 /* MPVASTResourceView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0F73F8CC0790CD51C371D4B3D6479833 /* FIRComponentContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = B8EF546E8BCE2DC36157D7E93DE991A8 /* FIRComponentContainer.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 0F968E43EC26FDDE4B5033A11ED7BD51 /* NSHTTPURLResponse+MPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = C5DE951FFF7480D237C096DD917810DB /* NSHTTPURLResponse+MPAdditions.m */; }; - 0FB26479937E8EC33D3C5EA9AC0D8FF9 /* FBSDKLoginManagerLoginResult.h in Headers */ = {isa = PBXBuildFile; fileRef = A9D57E5C3A83B308428F74F1D92DB74D /* FBSDKLoginManagerLoginResult.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0FE35B1BEE85F78A90F5D99C2A101969 /* FIRComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = FCE764C2C52E5E7A88ED6152053E2DB8 /* FIRComponent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 10436C6DD7A46D29950E1EE044BE64BB /* FBLPromise+Testing.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D4325D5B5B5EE56512FA79B4BED8DE5 /* FBLPromise+Testing.h */; }; - 1053DDFF2C348717A7651C1B876FE5FB /* GDTCOREvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 664E550E0F16578DFF465C830E7C7C90 /* GDTCOREvent.m */; }; - 106F0B7DA2BFED7D399EC650DD787FF2 /* MPAdPlacerInvocation.h in Headers */ = {isa = PBXBuildFile; fileRef = 8965476885187910D2D1BA1147142172 /* MPAdPlacerInvocation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 10B4B0F92A025495F09FD23F4B117A60 /* MPDiskLRUCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 68463252D5108E72747065003E605C45 /* MPDiskLRUCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 10D72CEFD0608B279975A2568D52C7E0 /* GDTCORUploadCoordinator.m in Sources */ = {isa = PBXBuildFile; fileRef = DDD07D4CBCCFF84C9731DFD2849E8234 /* GDTCORUploadCoordinator.m */; }; - 10E1A1D4F4B82988FB7C918DA6068962 /* MPConsentDialogViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = A1DDD49160D1C0592C9F38CF9D31F269 /* MPConsentDialogViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 10F221584A76A8566ED0B8B1D51EE913 /* pb_encode.h in Headers */ = {isa = PBXBuildFile; fileRef = A55461F3AB13BD236ABDC799453514B9 /* pb_encode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 11230D9A0418F0AAD89C82A4E1918E33 /* MPURL.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FF6B8F866190949844C2BAA7DA13134 /* MPURL.m */; }; - 1133E37BB019C9F922838F6A6395279A /* FBSDKConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BA5CD5A3514ED648F5A717676881B1B /* FBSDKConstants.m */; }; - 116C2AF8431A116E2A7FBF9522C5B226 /* FIRCLSExecutionIdentifierModel.m in Sources */ = {isa = PBXBuildFile; fileRef = B6FF811D56B4E006CA31BA3A0AEFEA54 /* FIRCLSExecutionIdentifierModel.m */; }; - 1185056851991054DC0C2915652B7F0A /* GULNetworkURLSession.m in Sources */ = {isa = PBXBuildFile; fileRef = 90EC9A4F17BBFBBDEF89853FD9138867 /* GULNetworkURLSession.m */; }; - 11C1A7140BFAC798555927476894C4FA /* FBSDKPaymentObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = DA83000C88D37B03721453E6334C899E /* FBSDKPaymentObserver.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 12002EFFA144B3617303D4F923536549 /* FBSDKImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = DE356420E564FE05C9F2F80B0FC3F182 /* FBSDKImageDownloader.m */; }; - 123741BA9017024F52FDDA3C15BA9404 /* FIRInstallations.h in Headers */ = {isa = PBXBuildFile; fileRef = 04F78786D869A61160530A6B299171B1 /* FIRInstallations.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 12706A16D1F59A0D639A863B7E03757A /* FBSDKFeatureManager.h in Headers */ = {isa = PBXBuildFile; fileRef = D48FBD5E31629FFF372284263088E2D5 /* FBSDKFeatureManager.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 127684A70C4BA92892A537B440AFF82D /* MPVASTInterstitialCustomEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 476756EEA9A49E2694FB9704F7FDD305 /* MPVASTInterstitialCustomEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 12B85C862FD7881DA650F4E8275A5497 /* FBSDKDeviceUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F402E77454C20141F85F84FF06CA836 /* FBSDKDeviceUtilities.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 12FBF25FCC7F1505BCE6139F70A5C034 /* MPVASTTrackingEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = EF5B8771B5E95DC80DB1CACFEFF994DB /* MPVASTTrackingEvent.m */; }; - 131CABC4BA97FDBFF6621617F373670E /* FIRCLSURLSessionTask_PrivateMethods.h in Headers */ = {isa = PBXBuildFile; fileRef = 46DDD295F0C2BB70C3CFA00D8D84381C /* FIRCLSURLSessionTask_PrivateMethods.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1358BE91271C7A2B2369D5A5212D866A /* MPAdPlacerInvocation.m in Sources */ = {isa = PBXBuildFile; fileRef = 7049096A71986AFBE5AA27B7616A6CD4 /* MPAdPlacerInvocation.m */; }; - 137881FA0B70E8CA2E6866A1D55E3EF0 /* FBSDKColor.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B577AC16FB63E4F607F0CE626AA46CA /* FBSDKColor.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 138A899F97E807A3CD92888F9974267C /* FIRCLSPackageReportOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A3E4982288CC63AA00F0035B3B56A56 /* FIRCLSPackageReportOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 138B5E01551650EE9E68DD865E4701BC /* FIRCLSRecordHost.h in Headers */ = {isa = PBXBuildFile; fileRef = 2745A65EAEA504DE4DFC17A2CC28B3E1 /* FIRCLSRecordHost.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 13A7C5428A7DA8F386EC46275748E2DB /* MPMutedBtn@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4F0BAA6D69358801B92B1B0176998BC5 /* MPMutedBtn@3x.png */; }; - 13C39EEAF61505F41D53993CB2B71DF4 /* MPClientAdPositioning.m in Sources */ = {isa = PBXBuildFile; fileRef = 425C6C9E5BA28A9051C4DC9E95650D8E /* MPClientAdPositioning.m */; }; - 1426509CE281993B4D1BB5EF9B5D48EB /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7E622F34474A1058AB765526BF8520FB /* Foundation.framework */; }; - 149D026BBBFFF6A5AE21753F9469C742 /* FIRCLSFABHost.h in Headers */ = {isa = PBXBuildFile; fileRef = BEE316A53B3612679CD1CA946A18D380 /* FIRCLSFABHost.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 14A805A3BBB9E001EE711CD44989C974 /* MPBaseInterstitialAdapter.m in Sources */ = {isa = PBXBuildFile; fileRef = 310038BC046C3E0F7D053797FF1BDF7B /* MPBaseInterstitialAdapter.m */; }; - 14B4AFE836240CB278AF782DA356400C /* FBSDKErrorReport.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D636BADD54482F811FE3768D707D049 /* FBSDKErrorReport.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 14E10FF5967EB1619663B672BDB3EA9D /* MPBaseNativeAdRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = E44D7EA70B427A270D855EB2BD8312A7 /* MPBaseNativeAdRenderer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 15301937D3C4BEA3DE851B04DA1543CF /* MPImpressionTrackedNotification.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B90734FD1FC7BA8DABFE1C2150BBB17 /* MPImpressionTrackedNotification.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 15578F7B4A1A4945698B31EAC595407A /* FBSDKTimeSpentData.m in Sources */ = {isa = PBXBuildFile; fileRef = B4DD97F5BFAB7D53880276803E555CCB /* FBSDKTimeSpentData.m */; }; - 1568E8A1953C36B63EB9AC1E50771DAD /* GULAppEnvironmentUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = CBDDE1A08FE280FD081969F12B45D913 /* GULAppEnvironmentUtil.m */; }; - 158776E03483C9766C3A6A23F49DDFFF /* FBSDKProfilePictureView.h in Headers */ = {isa = PBXBuildFile; fileRef = F1A5A995676DFF976D2EF676371136C3 /* FBSDKProfilePictureView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 15B59ED5A50CD168E7FF464B620519DF /* FIRCLSSettings.m in Sources */ = {isa = PBXBuildFile; fileRef = 5471D754F7E7920830445203F67EA6D0 /* FIRCLSSettings.m */; }; - 15F2BF67327FF41637A2753666978971 /* MPNativeAdRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 2248502871E2EFB0EBA2F8948F0CC376 /* MPNativeAdRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 161A03114DF78691114070803CBC4E75 /* GDTCCTCompressionHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = A1D8D7A70772781F2962BAFEF6DE5BDB /* GDTCCTCompressionHelper.m */; }; - 164137424845EDA24D6515272361FFD2 /* MOPUBFullscreenPlayerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B59D5157E18EBD43A5BBD531223E7469 /* MOPUBFullscreenPlayerViewController.m */; }; - 16BB2A0D00A6FE12A37A08E361B5CCD7 /* FBSDKButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DCAFA7DC86337CB7EF961C08CDBF7B5 /* FBSDKButton.m */; }; - 17ADC055EB08053038C8A4E9018A88BA /* MPVASTResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = BB5DD677394D34BE38E09A78356C7AE0 /* MPVASTResponse.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 17F41D6CFF94F0D40E00142515EC0755 /* FIRInstallationsVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C20C30A0A1CDF0CDB25BABB7EB65CF /* FIRInstallationsVersion.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 18056456D771BA3EEA70DAF17C12FC4C /* FBLPromise+Async.h in Headers */ = {isa = PBXBuildFile; fileRef = 51787E462F9853181C9270EE1E23E41C /* FBLPromise+Async.h */; }; - 180AAFFC64170A5232CE356FC5A2E526 /* NSMutableArray+MPAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D66005EED1D3EE319D3BCA7B2FB3F84 /* NSMutableArray+MPAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 182FF28BD38E32DC98DAEC0E6059F1BE /* MPWebView.h in Headers */ = {isa = PBXBuildFile; fileRef = 9695326230BD56D6764C9F2AEAB55012 /* MPWebView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 18CE3D1EDDCF0F13F6022442AA694723 /* FacebookNativeAdRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = D0E7C1714D93675593DECCBB370D5FC8 /* FacebookNativeAdRenderer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 18FA9366C4AA4382DE609A5B88F4A8B5 /* MPURLActionInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 555FD8DB1F7C59B471D95DC269970BFB /* MPURLActionInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1932ABE22993729534DC274BB938CA03 /* FIRCLSException.h in Headers */ = {isa = PBXBuildFile; fileRef = 6ED1EC58452428DF46CEECD96173EC0E /* FIRCLSException.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 19CF3D9E64861B5D79B710F98C278439 /* FBSDKSwizzler.h in Headers */ = {isa = PBXBuildFile; fileRef = F3C28E1208404167A9E17A14917A408E /* FBSDKSwizzler.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 1ADE7C49BD055ACA045E9E6079B2E858 /* FacebookNativeCustomEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = EE81F6AFB8D52A4A7042B35A0F4AA2C1 /* FacebookNativeCustomEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1AFDBA2CBC973BB3694C4956B5A2EC41 /* MPCoreInstanceProvider+MRAID.m in Sources */ = {isa = PBXBuildFile; fileRef = 12B3ACF35A72BD37FA4087EA336D4FC4 /* MPCoreInstanceProvider+MRAID.m */; }; - 1B16008515AAF37046A5DFD36D49B7E2 /* MPNativeAdDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F87C6E65D1BE76F395ED7F1EE4A43A7 /* MPNativeAdDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1B316747453534BC118296AA5D42D930 /* MPLastResortDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = EC11E09F642F377CF91A38FC771C670B /* MPLastResortDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1B5D69AC4D4B3C0DC7024134DEC3A028 /* FIRCLSDwarfExpressionMachine.h in Headers */ = {isa = PBXBuildFile; fileRef = E2A214B17544E79689BA872946E3B1B5 /* FIRCLSDwarfExpressionMachine.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1B8C79F3F7156B713A9FDFCEADC56F54 /* FacebookBannerCustomEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D3CAD0D679131771D896B7209104FE9 /* FacebookBannerCustomEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1BD041DBEC3848B7B0F5AE4972B4BD3F /* FIRCLSURLSessionDownloadTask_PrivateMethods.h in Headers */ = {isa = PBXBuildFile; fileRef = D48FDFD09A08E4A5AA0B90AC469DFA8E /* FIRCLSURLSessionDownloadTask_PrivateMethods.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1C0898AA4088D962C26940D064EABC82 /* FIRCLSFABAsyncOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = FD51692D8F87689DC48162E4B7AE4113 /* FIRCLSFABAsyncOperation.m */; }; - 1CAAB53078FDB8E3E2F23530AC35DAC7 /* FBSDKViewHierarchyMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 70EE066314FB3E6E83F20C89E6142B1A /* FBSDKViewHierarchyMacros.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 1CAAD18B801D115B856C49F0A4131C70 /* FlurryCCPA.h in Headers */ = {isa = PBXBuildFile; fileRef = 867272EE107E76CFD51171F4E3EA86D5 /* FlurryCCPA.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1CCB3231E49FDBFDFB9F34B0574D9980 /* MPClientAdPositioning.h in Headers */ = {isa = PBXBuildFile; fileRef = 06A02E80D1C5D4C73742A796CAAAA880 /* MPClientAdPositioning.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1D215D515F6C2E07F7EEF9AC1C620A90 /* MPEnhancedDeeplinkRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 2440EC7DD66439B164062B6764ADED43 /* MPEnhancedDeeplinkRequest.m */; }; - 1D43A208D0BBDC7497886C475F618639 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8A32B4EC2E226FFCDC31F82E6A52B86C /* SystemConfiguration.framework */; }; - 1D490444ADF54DB9C4F6572AF980085D /* MPAdapters.plist in Resources */ = {isa = PBXBuildFile; fileRef = 59348EE35CEBB5A1D8B458C9D66037B5 /* MPAdapters.plist */; }; - 1D76726C258F67AEFC1477DADEDC9D0D /* FBSDKServerConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 437B30C5191D219946D758C77B006CE8 /* FBSDKServerConfiguration.m */; }; - 1DACEAE169B1F37AD7917884F19BDEE0 /* MPBannerCustomEventDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 301F1BC597BEA34F4F942DC0F56E7890 /* MPBannerCustomEventDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1E0CE250E4F4FA3DCC87F85CAB623EA9 /* MPExtendedHitBoxButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 352E091312570DC48B189549EF1887CC /* MPExtendedHitBoxButton.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1E22C3C52D0B2429557640BA41AC2B51 /* FBSDKAppLink.m in Sources */ = {isa = PBXBuildFile; fileRef = 0EC2AE59F7922C48BC051E3E111582CC /* FBSDKAppLink.m */; }; - 1E2899591463C9FC3FA369F879A36393 /* FIRDependency.h in Headers */ = {isa = PBXBuildFile; fileRef = 3100364917F5330497CEB222F26C3BC9 /* FIRDependency.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 1E3E1FFC86CC621064B77D1E6EF48FA2 /* MPDAAIcon.png in Resources */ = {isa = PBXBuildFile; fileRef = 377D0D37A34B69BCF8292F8B93465C1F /* MPDAAIcon.png */; }; - 1E4AA6E0C6E39E9D53F0833B1DC38C4F /* MPMRAIDInterstitialCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 441C8A3576F5944E786A32028B8CA6D2 /* MPMRAIDInterstitialCustomEvent.m */; }; - 1E53EF265CB5B9FD2201231C44715735 /* FirebaseInstallations.h in Headers */ = {isa = PBXBuildFile; fileRef = C5356A1A76BA7FEBA53E6C7A25D145BB /* FirebaseInstallations.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1E6F2BC1F7632BFE9DDF2314F6D4705D /* FBSDKBasicUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = 6CD5E8B3FC92723C070DBE5A7D1D7802 /* FBSDKBasicUtility.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 1F4DC631D6664A5D92224D3ECCA84F15 /* FIRCLSFileManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 2F7F564C2566EDC4D46787B7925AE6AF /* FIRCLSFileManager.m */; }; - 1F5BDF3E1A92A062967F1EBAA041C1AC /* FBSDKURLSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 37BAC838FB60C21A49369903A7EB84E3 /* FBSDKURLSession.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 1FBBAA79EA1101B2F89A76F675C62AD5 /* FBSDKAppLinkReturnToRefererView.h in Headers */ = {isa = PBXBuildFile; fileRef = 42AA59E742D3FCDCB5BB7DFFDD4A48AB /* FBSDKAppLinkReturnToRefererView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1FE6DFD22D9A49865F23D918FA7E1E61 /* FBSDKLoginManagerLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FB8C73C055CB40B5FA38FB3415B48F0 /* FBSDKLoginManagerLogger.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2048BD95C2D80E2FE3AE3E55A7149B73 /* FIRCLSUnwind.h in Headers */ = {isa = PBXBuildFile; fileRef = E54D625912BCBE72468F2F30C4DF38DB /* FIRCLSUnwind.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 20E4978A740F0417FC4CE8531560CF00 /* FBSDKEventBindingManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 7EBD9EAD0771D06031B94D67F42A5768 /* FBSDKEventBindingManager.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 20FCC5A11C0A0CD7BB81023146C5B586 /* GDTCORTransport_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 1769588CCBD5C868916AAC859E9C4697 /* GDTCORTransport_Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 217526BD3020E6283E8EA47BA8A617BF /* MPNativeAdRendererImageHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E1B1C323958B2683C3864841131C092 /* MPNativeAdRendererImageHandler.m */; }; - 225CC06789A62B435F9E611CA2CE15F5 /* FBSDKCoreKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = CE5B9D3AD3DB3D2A1B0F81DC562447B9 /* FBSDKCoreKit-dummy.m */; }; - 22990B2D0036FB7B6F23778BA8663CE6 /* FBSDKAppEventsState.h in Headers */ = {isa = PBXBuildFile; fileRef = 195DCE7FE88ADB68A034247658D98612 /* FBSDKAppEventsState.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 232EC64918937365784F7FACC0905F8E /* FBSDKError.m in Sources */ = {isa = PBXBuildFile; fileRef = 14E1D9B307BB8EF1F04A6423DA930C64 /* FBSDKError.m */; }; - 234DF20AAA7B270D5A9F0AE979C6A606 /* GULLoggerLevel.h in Headers */ = {isa = PBXBuildFile; fileRef = CA472F6569E10D09DD80A45DB1395903 /* GULLoggerLevel.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 239399F17DB1423B5057610BD5390E46 /* MPCloseButtonX@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 6BE178BA3C4DD765A4C34730B2CA5A51 /* MPCloseButtonX@3x.png */; }; - 239D976860F53954C4C0A2FA41D1DC79 /* FIRCLSSettingsOnboardingManager.m in Sources */ = {isa = PBXBuildFile; fileRef = CA971894932E0F1E1A7008FE05D6F4C8 /* FIRCLSSettingsOnboardingManager.m */; }; - 23D86ABD997707389808345C52AC75E1 /* GULKeychainUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = F7CD18D3CEA07372EE793CFF787FB564 /* GULKeychainUtils.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 23F1B065B182DE73EE7C3F2B895481C5 /* NSJSONSerialization+MPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BBAEE1CC095D01BA59F46AFE45229A4 /* NSJSONSerialization+MPAdditions.m */; }; - 2406CFE92CE399698FF00BA60E39D69A /* GDTCORTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = B1C5AC8EEAD861CC78B42E1F7D69A288 /* GDTCORTransformer.m */; }; - 2423A445B43E4914FACE51893076C549 /* MRConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 374B0EF37ADE73717B3ECBC0DB4BDE96 /* MRConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 244C7B52882A57417DCAD10250E777C5 /* FBSDKLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 5DEA59C4C687E3786486C449221FC752 /* FBSDKLogger.m */; }; - 24638D87CCC0A9A7FA3CCCD0F7AF50A6 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FB3C6A112211CDA7085A37214E8C6C47 /* Security.framework */; }; - 2493234B247BC18D7E071A2588093AF2 /* MRConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C266FF6F49517FD58E8723155B1D8BC /* MRConstants.m */; }; - 2514DAD863B06F7E3F46877AC00EDDA1 /* FBSDKBridgeAPIResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 3962610B1FEF1790157315B74C0EBD7B /* FBSDKBridgeAPIResponse.m */; }; - 25D6B93171DDAA0DD6B6355A2611A441 /* MPClosableView.h in Headers */ = {isa = PBXBuildFile; fileRef = 868363752B05CDFC7CB160C8F72458F5 /* MPClosableView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 25E9EF6B0BFB3463F3F9493FA59BCD94 /* FIRComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D1543A3445D40273F9C31523C8F92EC /* FIRComponent.m */; }; - 2671EC45A26402A738C612584C922D6B /* GoogleDataTransport-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F955E33F30896085B3081ADCEAB5F6AF /* GoogleDataTransport-dummy.m */; }; - 269625BB93E40DB8767A20C928637587 /* SafariServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5DB346B4071FC4461222A71CCA838C98 /* SafariServices.framework */; }; - 26974052B4812135DE0021617B03EEAE /* MPStreamAdPlacerDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 291F3C6744C3D0D00FFCDB17202EFA35 /* MPStreamAdPlacerDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 26B23CADC8D67EA938F9C48DC8EB663E /* FBSDKMath.h in Headers */ = {isa = PBXBuildFile; fileRef = C65F6724266CC6C52BE0E93F64CEE5B8 /* FBSDKMath.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 26BBD681C663744B026B90A2B8F665A1 /* MPContentBlocker.h in Headers */ = {isa = PBXBuildFile; fileRef = F2EA64EFD0B3671042D6540CE86F7B17 /* MPContentBlocker.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 26F8CBF565E2ADEA71F7A94B3D85AF01 /* FIRCLSNetworkOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 08BF9E724C265F58FF6A09FB92D51AF5 /* FIRCLSNetworkOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 27323B7C0289E44D84697EB8027D8D1F /* FBSDKLoginKit+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 548D16A91F8262E0926DDF6B0CD35B02 /* FBSDKLoginKit+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 27AA35A6E3C617367BC2449EA49DF787 /* MPTableViewAdPlacerCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 93789485924BEE4E63DE79D583C39B1F /* MPTableViewAdPlacerCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2807EB640023CDD68D5DE56B374FD19E /* FBSDKURLSession.m in Sources */ = {isa = PBXBuildFile; fileRef = AE9D1CCBC8BDA05B12165DA80C131740 /* FBSDKURLSession.m */; }; - 2856456CA2599D900C8C314FB80878DB /* GDTCORStorageProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 504D6EA218588A1A39F7172B9B993052 /* GDTCORStorageProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 289790E597976A7420B5DECA22E9BCD8 /* MoPub+Utility.h in Headers */ = {isa = PBXBuildFile; fileRef = 94198D47DB7153AAB614D2BD0AD361A2 /* MoPub+Utility.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 28C76714EE0D01E3FB768B8531960B8A /* MPSessionTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = 9E6C3B7537E5214A269D7C64A399804F /* MPSessionTracker.m */; }; - 28E42B12C4F82BCE5D503C39C0AD55B2 /* FIRStackFrame.m in Sources */ = {isa = PBXBuildFile; fileRef = 8400A864667A529DD818ADE71CA493FA /* FIRStackFrame.m */; }; - 2908236A225CABE00DEA8D7523948176 /* FBLPromise+Then.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B5BE6A19289ABECD933850DCDB9714F /* FBLPromise+Then.h */; }; - 29B9051B82A41B9C57C1EFC33EDAF9AD /* FBSDKEventDeactivationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = DDC042C77AE5650FDD7891DEFC48CFD1 /* FBSDKEventDeactivationManager.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 29D6D453B4819E69CBA1698395F9FCCE /* GoogleDataTransport-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 291F84318AAFF66696583D3C33938B0C /* GoogleDataTransport-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2A37708938D86136CC496D5777A302B2 /* GoogleDataTransportCCTSupport-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 92D1CD0919924578F3F6A7EDB23592ED /* GoogleDataTransportCCTSupport-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2AA8B0D394D039848BA27D210928A3CF /* FBSDKUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = F7913CBEB5C8AE67AE965E179718578C /* FBSDKUtility.m */; }; - 2AB16C2CA61ED7ED180F551A9D1567E9 /* FIRCLSMachException.h in Headers */ = {isa = PBXBuildFile; fileRef = 38A4223E9FAE359B7E337C4424C5AA21 /* FIRCLSMachException.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2AD62E943FF9082E2258446FB458C467 /* GULSwizzler.h in Headers */ = {isa = PBXBuildFile; fileRef = 98758B4440DACEE176EBB569561C60A3 /* GULSwizzler.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 2B34A9EF7378D8AB272CDCAAFF5ABAE9 /* MPActivityViewControllerHelper+TweetShare.m in Sources */ = {isa = PBXBuildFile; fileRef = 96D4A3F3A2232AB164F6559BF0FA721E /* MPActivityViewControllerHelper+TweetShare.m */; }; - 2B4AA1E3E2FCB1CA632D71B6DA5943A6 /* FIRInstallationsStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 16F5D92F54EC778599150F6FAC0F4D94 /* FIRInstallationsStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2B776D699C09FE415E9B12C8B2AA3DD1 /* FBSDKAppEventsStateManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FC309F08A3FF395E88CBFFB5FCFE38F /* FBSDKAppEventsStateManager.m */; }; - 2B8B4A8C352AC9E8047D27F5E403B33E /* MOPUBFullscreenPlayerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 6F21BAAA4F442FBEB12685B85F255676 /* MOPUBFullscreenPlayerViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2B8F9A7F8DACF4ABE8E196E911F90D89 /* FBLPromise+Delay.h in Headers */ = {isa = PBXBuildFile; fileRef = E00CDD52AFADD5EFD17A32C69C38ABEE /* FBLPromise+Delay.h */; }; - 2BB62984D7DDC695A96C172956850057 /* MPVideoPlayerContainerView.h in Headers */ = {isa = PBXBuildFile; fileRef = F97451120A43B3064075411F0B3D18FF /* MPVideoPlayerContainerView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2BC820F5560D600B662D62C9A7C633E1 /* FIRCLSURLSessionConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 91ADFDC1A52B47D8CB46CCC7A87E2E08 /* FIRCLSURLSessionConfiguration.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2BD404FFD392D8CBB9664684E69844AB /* FBSDKCrashHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = F385FA69C6AA0F08094D870EBF86E605 /* FBSDKCrashHandler.m */; }; - 2C2C9005A0DD26EDE90163BFBD37C7D0 /* FBSDKAppEvents.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A0EE4D0B856820E1C49CF676DAEFCE0 /* FBSDKAppEvents.m */; }; - 2C5F01FC056A9896B692628B70B55A0C /* FIRCLSProfiling.h in Headers */ = {isa = PBXBuildFile; fileRef = 32F90A5B39692428C34E3AF072FD8EA2 /* FIRCLSProfiling.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2C9173F4178C0D9A8E4FEE140728EA4D /* MPBannerAdManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F9240820F4BBDCCE5249EE20F406898E /* MPBannerAdManager.m */; }; - 2C9A6D00CA73FB7AE587C2188A63ED69 /* FBSDKModelUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = A19365D49BF463A7E1597172C6E938B7 /* FBSDKModelUtility.m */; }; - 2CA0DDC0E6E560C57D6EE63FD89DBF28 /* FBSDKAudioResourceLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = B6BFE2BEEAB345CC2A86394E363C10F3 /* FBSDKAudioResourceLoader.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 2D15C79867CFF0C814F7315AC57EAF35 /* FIRLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DD0DE202DCBBCA9F0AAAEE9712F3C89 /* FIRLogger.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 2D7AB9360D750578008CC3A3DA29F2F2 /* MPActivityViewControllerHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = BF35766A79CE035F6EE7F4DB56940DEF /* MPActivityViewControllerHelper.m */; }; - 2D90B7DE2B11044D111076FE645AFF31 /* MPAdServerCommunicator.h in Headers */ = {isa = PBXBuildFile; fileRef = 1037B671BA987B57CA6D694962F6A280 /* MPAdServerCommunicator.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2DC2EA0CF0BA1B96479952CB1FC902C4 /* FIRInstallationsSingleOperationPromiseCache.h in Headers */ = {isa = PBXBuildFile; fileRef = B26B809E9950E05E0E142F73AD56F2EE /* FIRInstallationsSingleOperationPromiseCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2E0AFCB02847476D44FEFC60BFAB4876 /* GULAppDelegateSwizzler.h in Headers */ = {isa = PBXBuildFile; fileRef = 025436CF7D9569EB62DC3B55851351F8 /* GULAppDelegateSwizzler.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 2E33FAF85E688B7DAB451993124F6030 /* FBSDKCoreKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 4909BE936637CABD33F96AC6F3115619 /* FBSDKCoreKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2E95FE8AB88517AB0DD758F020EE784D /* FIRInstallationsAuthTokenResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 2613A58B6E7EDEF087018D8366169C3D /* FIRInstallationsAuthTokenResult.m */; }; - 2E988695CEB5D93A4268BB328982ECBD /* MPVideoPlayerView.h in Headers */ = {isa = PBXBuildFile; fileRef = 25872DB607DB8C1D6F26B4E9B348EE02 /* MPVideoPlayerView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2EF7FAFD7BBEA481C724A46EF56BB9A8 /* MPCollectionViewAdPlacer.h in Headers */ = {isa = PBXBuildFile; fileRef = 38DC5A3A8954173322E07CFF7B498EAE /* MPCollectionViewAdPlacer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2F4F03D5F1C39F72B74A6F1643774477 /* MPAdapterConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 91CD1E0D9FCF5650C6EC29BA30964CAA /* MPAdapterConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2FB595C947C2C19447D27ED069EF7504 /* FIRCLSOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = CBEDE4A5052F3F0B1A9DE0B77FECAD6C /* FIRCLSOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2FCE2D3B6DE76F1E12FDD9192FD7A233 /* MPVASTTracking.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B7483A8401BD6AAE507C485762CFE33 /* MPVASTTracking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 30700A00569086128C5C889A65F20B34 /* FIRInstallationsStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 485D4D48BAA45CE617F64DCC7B486D6A /* FIRInstallationsStore.m */; }; - 30881FA475491CF6A0516E29FFB7DC53 /* MPVASTLinearAd.h in Headers */ = {isa = PBXBuildFile; fileRef = 35683E71093263A10A71CFA6EAF11E2E /* MPVASTLinearAd.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 30B5F17811DB2BA280C6D92233F8DAF9 /* MRBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = DDA99B8F151A58F0B2E38FA18C211343 /* MRBridge.m */; }; - 30C01D92219BA89DC0B0433E788D2C9C /* MPInterstitialCustomEventAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = 445F8ACD5773B2802105C52D62AFCB66 /* MPInterstitialCustomEventAdapter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 30D4F376A7C8BD7FA9964D458BB163E5 /* FBSDKDeviceViewControllerBase+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E0934BBF648C0C15785D9F7F9362337 /* FBSDKDeviceViewControllerBase+Internal.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 30D8DAC3545028496DC66659C5431BB1 /* GULKeychainUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B9E924D1C60C384D9FA932B85AEA5BC /* GULKeychainUtils.m */; }; - 315F85C3E25032148882E4C18B7A1A8B /* FBSDKDeviceLoginManagerResult+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = F9354F9DFA7253DDE0B54993FD381B01 /* FBSDKDeviceLoginManagerResult+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 318C85B55D0EE386811B7BF4FC199570 /* MPNativeAdRendererImageHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F46B051CE3F732A21FE0932DD3B4F97 /* MPNativeAdRendererImageHandler.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 323BCB7CC244AFFE76C5A7C5584EB40A /* MPStreamAdPlacementData.h in Headers */ = {isa = PBXBuildFile; fileRef = E75F617DBF685C797F6E6744916C3454 /* MPStreamAdPlacementData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 32423A791AD289849D7603957E877E6A /* MPBannerAdManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B1B828DE96AA5636DB040F928FCF93F /* MPBannerAdManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 32EC7A1A5A27128E47B1B3C08E20687B /* FBSDKDeviceLoginManagerResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 6945279D2D882103A3A94BD9DF69667F /* FBSDKDeviceLoginManagerResult.m */; }; - 331A0BC56AB893BFCE4E79373B3DC70E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7E622F34474A1058AB765526BF8520FB /* Foundation.framework */; }; - 332DD4EE86BB78FA54BEDA3BCE5314EA /* FIRCLSFCRAnalytics.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E612EA554E711D539292C956702FF90 /* FIRCLSFCRAnalytics.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3349DC00FD375010760A2CEDB25D7282 /* MOPUBNativeVideoAdRendererSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = C0540E9A58E0C9980A70CDCD727CC1D7 /* MOPUBNativeVideoAdRendererSettings.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 334CA252C68E6E0EE687A031D9EC8A70 /* GDTCORPrioritizer.h in Headers */ = {isa = PBXBuildFile; fileRef = AE539251097B63D95F4B01C077E1E161 /* GDTCORPrioritizer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 337244D6B2CFCFB6420AFACB60542888 /* FIRInstallationsLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = F1C9850B11896325FFFEEED95182C025 /* FIRInstallationsLogger.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 339BD784850CFFE6D91C5FEC641B5389 /* FBSDKMaleSilhouetteIcon.m in Sources */ = {isa = PBXBuildFile; fileRef = BEC04A5F6599F3B93782C7D4FB07D8CF /* FBSDKMaleSilhouetteIcon.m */; }; - 3440689FB5797F965AD03B25E92DA013 /* MPMRAIDBannerCustomEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E4A30740F1AB99F87DB6681D366FD7B /* MPMRAIDBannerCustomEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3451C9E1CDCBF87C779593FF56234836 /* FIRInstallationsIDController.m in Sources */ = {isa = PBXBuildFile; fileRef = 607C6A931EBD7D8A07E47E3C9D91E7C9 /* FIRInstallationsIDController.m */; }; - 34733576B12CA7BCAD3ECAD7A584AEFD /* FBSDKButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 22A1D49A4287FA4C656D559EFDAF579B /* FBSDKButton.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 347841BFDF339E55FE8D6F380AFC554A /* MPRewardedVideoReward.m in Sources */ = {isa = PBXBuildFile; fileRef = FB54EFA643EFE65F8B93F4ABD776A9DA /* MPRewardedVideoReward.m */; }; - 34BF300F66FDCA07E5C769E573603B9B /* MPBannerCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F6DE3BF109FD746859A8C9A008D5C1 /* MPBannerCustomEvent.m */; }; - 34CD6BF0F41A87F79A7FFF83308E0916 /* FBLPromise+Await.m in Sources */ = {isa = PBXBuildFile; fileRef = 56A7BDBDC4B4B68A10B672FD7D2883BB /* FBLPromise+Await.m */; }; - 350259B7BDB0C87E19EF13C98C4FDCD1 /* GULSecureCoding.h in Headers */ = {isa = PBXBuildFile; fileRef = 8312F28D52AEE986AC2184D2BD798B0B /* GULSecureCoding.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 3509015F78A557143A494A392A8B3D34 /* MoPub.h in Headers */ = {isa = PBXBuildFile; fileRef = 4021CDC26216AE4683971DB5C99D2EA1 /* MoPub.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 351D59DB82EB2D05E8EA43E476301488 /* MPURLRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = CE24F219A6E71C71FAFAD9134860FBC4 /* MPURLRequest.m */; }; - 356CC51EF3D416AB1C2F45F5B5A2857C /* FIRCLSApplicationIdentifierModel.h in Headers */ = {isa = PBXBuildFile; fileRef = A256A56841F513C5029739527A8AFFF1 /* FIRCLSApplicationIdentifierModel.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 358B934DF47BED1EF0D6C5C8B97375CA /* FIRCLSHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = A254DF1F970B175B83F41E07E7B94B8E /* FIRCLSHandler.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 35D3B5140F5328B2CCD9F4A8C8BD7B02 /* MPBaseNativeAdRenderer+Internal.m in Sources */ = {isa = PBXBuildFile; fileRef = 9FF4BB5C84B9B9985656D28B7E279B43 /* MPBaseNativeAdRenderer+Internal.m */; }; - 35E259F44C8F402E86B25C6B1CDE069C /* FBSDKAddressFilterManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A50BB88B83485FECE6656A05DD44F63 /* FBSDKAddressFilterManager.m */; }; - 35ECAC88BAE135CEF17F86C9942CD779 /* GULNSDataInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 5756E1546078D0D1E4A6E0BE3F18A6A8 /* GULNSDataInternal.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 37217D7C5DFA080E9F436E533494D1E2 /* FIRCLSCompoundOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 4601BE7DAE01ED64AFD3E17A5AC48059 /* FIRCLSCompoundOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 37444A104D6DC70453ECC941411364B7 /* nanopb-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E6DC5F53026FAD96AE60CD0DEA5799B /* nanopb-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 37B149B66D82931244BC371B8145C710 /* MoPub_AvidManagedVideoAdSession.h in Headers */ = {isa = PBXBuildFile; fileRef = D3EF524958C2494DB7CD069BDAD74675 /* MoPub_AvidManagedVideoAdSession.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 37CA8AFE4A64C7AC73C81CBB6DC99B2A /* FIRCLSURLSessionDownloadTask.m in Sources */ = {isa = PBXBuildFile; fileRef = 87905D5D9620EBAA8D48F838D2DC8E2C /* FIRCLSURLSessionDownloadTask.m */; }; - 37D19BA0D4F7EF05803B31CA5C1ED7BF /* FBSDKError.h in Headers */ = {isa = PBXBuildFile; fileRef = 33ED135B76EB662202F2AD33A2A310F2 /* FBSDKError.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 37EDA0D2A2641976E5F56ACF09B6FB53 /* MPConsentError.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A91470A56EC81F0DFB8596B4AF9E7F1 /* MPConsentError.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 37F594E59F59E54775F0256D366AB6C7 /* FIRCLSUnwind_arm.c in Sources */ = {isa = PBXBuildFile; fileRef = F10E1CB55F68E7A3E8CF444567FC86BF /* FIRCLSUnwind_arm.c */; }; - 38023580C0633F011899FFD60D1D9B40 /* FBSDKAddressFilterManager.h in Headers */ = {isa = PBXBuildFile; fileRef = D76A6B3C4CBF23CB99E36B34D94F1033 /* FBSDKAddressFilterManager.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 38113DF815A6135E2ACC74DC1F2F3CB3 /* FBSDKLoginUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = DA7F8F9283E27B5C575D17A3B0A14E8F /* FBSDKLoginUtility.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 38586397CB98AE2CAD0B350CA264D100 /* FBSDKLoginManagerLoginResult+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 07A24A76299EF8E854CFE54D4B4FEE4A /* FBSDKLoginManagerLoginResult+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 385923A5818323809CE093E8CB3F478D /* MPVASTMediaFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C908C6185710B5680099D199AD08272 /* MPVASTMediaFile.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 38D541C6EF9CA5FA90DD30846DA65C71 /* FBSDKErrorRecoveryConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 02DF4DAD9C174A89145A1373B5C11241 /* FBSDKErrorRecoveryConfiguration.m */; }; - 38D816A420F923EDFAD0486AF7DDD333 /* FBSDKAppEventsDeviceInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = A335D2C7E61D1461D4DB838170CD9FA9 /* FBSDKAppEventsDeviceInfo.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 38E1C8E3D33E0A00929B05EF29115052 /* FBLPromise+Recover.m in Sources */ = {isa = PBXBuildFile; fileRef = E7D9238E7FA56526B97258D477D14255 /* FBLPromise+Recover.m */; }; - 38F1D5F69E02340734D9442A3450996F /* MRAID.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 7772258312F8FFBC37B1701CF91A67C4 /* MRAID.bundle */; }; - 3931DCE9C724119E8F71003B2044816C /* MPNativePositionResponseDeserializer.h in Headers */ = {isa = PBXBuildFile; fileRef = D03B5828EB71E48F7801EC9B3A1867EE /* MPNativePositionResponseDeserializer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3979EF4AB078EA92C00EEB6538B4E8DC /* MPVideoPlayerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 16365F7374A77C5CE9F6D6B2A02DE69E /* MPVideoPlayerViewController.m */; }; - 39A3B011E1634626B9322F78CF13F511 /* MPNativeAdSourceQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E7BC7D97DDCE07D92A8206F7C9C3B81 /* MPNativeAdSourceQueue.m */; }; - 39AF6B52D487F5EAAD424A42BA73C70C /* FBSDKGraphRequestBody.m in Sources */ = {isa = PBXBuildFile; fileRef = DF0158DC127D8F5430A619C9336F0C62 /* FBSDKGraphRequestBody.m */; }; - 39B22B1B4422EE09975B45D6EF053DB5 /* MPGeolocationProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = C39FC8BEBD373829A619C883CB0D9E7C /* MPGeolocationProvider.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 39C0B51503336B1312136C7ED4EC08E7 /* FIRHeartbeatInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = B08C7788E00490B31D94946ABF8D45D1 /* FIRHeartbeatInfo.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 39FE203A2D9408AFA2CA006AD6A9309B /* FIRCLSRecordBase.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C901D72535C6CA19D52C53BA1F6F98E /* FIRCLSRecordBase.m */; }; - 3AA85EE5E5AB88C1F894959188FE9B27 /* FBSDKTriStateBOOL.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F2028F22DB848AB8AFA2B75FD07A593 /* FBSDKTriStateBOOL.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 3ABDF9E9541951FAC71A64D95D2761C6 /* FIRCLSURLSessionDataTask.m in Sources */ = {isa = PBXBuildFile; fileRef = 49C70AA3C1EB95B8108211A9474D4663 /* FIRCLSURLSessionDataTask.m */; }; - 3AC00D6AA9FB5593E7FF27166AFAD428 /* FBSDKAppEvents.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E3BB2863E3B2FBDCDC4718F0179A2C0 /* FBSDKAppEvents.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3B0DB1AF0CC8E4D058BC7C8D5295601F /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AD36D3549F56921BAB6906898EE9EC02 /* CoreLocation.framework */; }; - 3B180DB68EBCB7F908B6F52663A30E33 /* MPBLogLevel.h in Headers */ = {isa = PBXBuildFile; fileRef = F5735015AE6CF8B64CB2E93917F4BDD1 /* MPBLogLevel.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3B31BECE1D1950047380FBFBDF5A0BBE /* MPNativeCache.h in Headers */ = {isa = PBXBuildFile; fileRef = F25663286D10E1661BD1B44E6CB75BC7 /* MPNativeCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3B350208CEDDD5F27F7B01284D0F897F /* MPNativeAdRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F70D657B992CA547A3D6A86369F51FC /* MPNativeAdRequest.m */; }; - 3B886B160F5F2DC7ADBA196A4C52E9D0 /* FBSDKLoginConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B3965F2BF5CFBC6A077C1220BA1E7AB /* FBSDKLoginConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3C29F1ACB40CD867FBF2EC08F788B668 /* MPCloseBtn.png in Resources */ = {isa = PBXBuildFile; fileRef = 19947711F89786514178559A44913718 /* MPCloseBtn.png */; }; - 3C8E0383C777A52D570997C0A5686406 /* FBSDKWebDialog.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E06BD770FDEF5D528094D098622D912 /* FBSDKWebDialog.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 3C974B55AA239364E7C534A9AF15ABE0 /* FBSDKLoginTooltipView.h in Headers */ = {isa = PBXBuildFile; fileRef = B736FD012871F2E9C92ADA68598F421D /* FBSDKLoginTooltipView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3CD40AF6287E539FFCDD95322C80A51E /* MPBannerCustomEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 6002E7AA0211661BCAD58E1128B5D042 /* MPBannerCustomEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3CE7B1BFD4218B7505E83A3E5DC18B2C /* MPReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 65D2CF8D521040BB760BE6C73FC0C0EE /* MPReachability.m */; }; - 3CFDB070B6DAF0D6A02A422C8A7D8BFD /* FBSDKAccessToken.h in Headers */ = {isa = PBXBuildFile; fileRef = 26676267F06027E7B2F15B0EC615B45B /* FBSDKAccessToken.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3D0623D12A81F24BA9BDE41A54A6C2DF /* SKStoreProductViewController+MPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 34A2C4994DA8BA507B267AF95D9FD790 /* SKStoreProductViewController+MPAdditions.m */; }; - 3D4CC14791261B086E27A678883BECB4 /* FBSDKGateKeeperManager.h in Headers */ = {isa = PBXBuildFile; fileRef = DB60A213EAFDDAFE44F1D320F046CB57 /* FBSDKGateKeeperManager.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 3DAD246B5F6103C608181DBBBDC19166 /* MOPUBNativeVideoAdConfigValues.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C7A3710F6ABD60965DED3142934FEBA /* MOPUBNativeVideoAdConfigValues.m */; }; - 3DAF4D87181CC7D0D97E656D5E575553 /* MPVASTWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 164F9FB97B25205902BDE5DEE4E6AA0E /* MPVASTWrapper.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3DC16F64F4C3B689ADBAE2B46B41714B /* FBLPromise+Testing.m in Sources */ = {isa = PBXBuildFile; fileRef = DD6AFFBE7C0032917FC59D6EFB74E582 /* FBLPromise+Testing.m */; }; - 3DE0460C0E25532A278543619A1DEADB /* FBSDKBridgeAPIProtocolWebV1.m in Sources */ = {isa = PBXBuildFile; fileRef = C68405D6DB0F7882F3FF9CB54BB6A899 /* FBSDKBridgeAPIProtocolWebV1.m */; }; - 3DE43978E7FDDC160B758A9B90B5563D /* GDTCORPlatform.m in Sources */ = {isa = PBXBuildFile; fileRef = 50B227F32681E5BDD2FDA842F591A245 /* GDTCORPlatform.m */; }; - 3E351F61FE4BFA3021DD628D8AD108C3 /* FBSDKStandaloneModel.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F62857D1469FF9547E7F14F980C10127 /* FBSDKStandaloneModel.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 3E949ADCCDC924345FBAB70EBF86F98D /* MPEngineInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 3691E549292195DA1DBB3A3C281B537B /* MPEngineInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3EBA8C06DCA758DF4F05EB4AA06310AA /* GULUserDefaults.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B9B747882B68BFF1758D7429091E275 /* GULUserDefaults.m */; }; - 3EE8CD6C6DCAFE5CC362FE7B4985D196 /* FBLPromises.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 5608D402612BADF9402F627D5A1E5E2E /* FBLPromises.h */; }; - 3F225F73CFF5A6DCC8EABF5661364D42 /* CoreMedia.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DD6CF9696EB61CEA0BA52DB238408B83 /* CoreMedia.framework */; }; - 3F23A03E2EB47189F18634419F0EADB2 /* MOPUBAVPlayerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 03E9BAC51FCDFEFE1E4AA322E08B9C8F /* MOPUBAVPlayerView.m */; }; - 3F287886910A5383E8CFB7849B2CB79E /* pb.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A20379BC83A1E59449FC898243F5839 /* pb.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3F3984013AD7161AE68E36513BC9B1F9 /* FBSDKEventBinding.h in Headers */ = {isa = PBXBuildFile; fileRef = 46286665978CB65C4EC589D9B3B11014 /* FBSDKEventBinding.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 3F9210BE51860B7E32B7DB20CE319E8A /* FIRAEvent+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = F640DC969DFCC5E65015B54EFCE0D2C7 /* FIRAEvent+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3FA63A2A89BBEABD2E63B719F71E7801 /* FBSDKCloseIcon.m in Sources */ = {isa = PBXBuildFile; fileRef = BAAE79EE588FE282E07DE755E2288107 /* FBSDKCloseIcon.m */; }; - 3FA6AAEACA76FAFD424B7411A039F058 /* FBSDKWebViewAppLinkResolver.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A720F1AC1BBDADFB9E4F208A780720A /* FBSDKWebViewAppLinkResolver.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3FB221D12944DFD2CE853814FA576DA9 /* MPVASTDurationOffset.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C97119CA39F4A8A3EFFC226A2E202E6 /* MPVASTDurationOffset.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3FB9234C526FCC082198EE493C9AC5FD /* MPConsentStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = 6AC715E90386C0DD70D7C73B370F2AD0 /* MPConsentStatus.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 402D2A5BB1054B6D3D04F7EB0AF5A2BA /* FBSDKAppLink_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 6607DF7BF9280EB584C65AE5A9BC6812 /* FBSDKAppLink_Internal.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 404685461953B8A4BC3772EF43CAA035 /* MPVASTResource.h in Headers */ = {isa = PBXBuildFile; fileRef = E8CF3AF5233E6A2A175E5AFEF37FAE3B /* MPVASTResource.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 405C142FD528F90F0BEED838A9222959 /* GDTCORTransformer.h in Headers */ = {isa = PBXBuildFile; fileRef = 318FA1796E5735FD567BDA02BEBC70CF /* GDTCORTransformer.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 40978CA0C37D7AC845193380504B7EFF /* MPAdServerKeys.m in Sources */ = {isa = PBXBuildFile; fileRef = 2985B96DB73AE3F0664C1055437A2F3F /* MPAdServerKeys.m */; }; - 40D4C93BD0644ADB0E7B30D146AF5A5C /* GDTCORRegistrar_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = F25A88845B1CCF98DAC77C9E9EB2FCB3 /* GDTCORRegistrar_Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 40F029E2BD1F2AC346D42E4AAE4C9C77 /* MPConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 894AE0E358FA77185A3402B4E8C5AD1C /* MPConstants.m */; }; - 4157656E1DB7025BD53AB6149A76981E /* FBLPromises.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D576253627FD030630415E9641136BC /* FBLPromises.framework */; }; - 41968E1D9399C2D2F42DE49420929C4A /* MPBaseAdapterConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = B7B2D4ACF49E72004914698667994725 /* MPBaseAdapterConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 419A5187D19B5B0B8F1046248AD4DA5B /* MPImpressionData.h in Headers */ = {isa = PBXBuildFile; fileRef = 19AE5868B2E53C4428EBC2B63A6D769B /* MPImpressionData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 419E4DE45C680CB7E13F7794D4F3AAB6 /* MPAPIEndpoints.m in Sources */ = {isa = PBXBuildFile; fileRef = 6DDFDCAD7FC9028D55EC1DA9C0ABF86F /* MPAPIEndpoints.m */; }; - 419FAD636D347E6B477D2686C7FD4455 /* FBLPromise+Any.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = AD4E5601CB7CBE9FE1E793A00E842797 /* FBLPromise+Any.h */; }; - 41C62032D172E997D178BDC5CBC9236D /* FBSDKLoginButton.m in Sources */ = {isa = PBXBuildFile; fileRef = A45D5D9150FF9C5C0B4A63B72CA51415 /* FBSDKLoginButton.m */; }; - 41D45479479EFDF4AC72ADF4C28A267D /* MRNativeCommandHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 20CDED04B8DBFC354C29EB239CA8F428 /* MRNativeCommandHandler.m */; }; - 4252E18642A4512BB73865A9DE40E0B7 /* FIRDiagnosticsData.m in Sources */ = {isa = PBXBuildFile; fileRef = B1C83E1CC6209D4EA4AF9E99B52CEED2 /* FIRDiagnosticsData.m */; }; - 431AA4E81B33C3B4527045572DE4C35F /* firebasecore.nanopb.h in Headers */ = {isa = PBXBuildFile; fileRef = 4778B23B1DEF6428078620DC0585878F /* firebasecore.nanopb.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 437B05D70FD64832983CABB35FD156CA /* MPNetworkStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C1A9B97F58FF358F9C7A7A555EA64D9 /* MPNetworkStatus.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4450CCCEB35A406FFD37267413713675 /* MPNativeAdConfigValues+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 95A86DBD96A14204D2A0CB87FE398574 /* MPNativeAdConfigValues+Internal.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 455BCB3A8C1797F40F5ECAC845528CEC /* MOPUBPlayerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 72700B6C26BEB1651ADCA5EFC91C45E9 /* MOPUBPlayerView.m */; }; - 4585274D96BAE979434BC16EE67BF15E /* FBSDKWebDialogView.m in Sources */ = {isa = PBXBuildFile; fileRef = 065608AE87A0E0699093FAA8905D6E88 /* FBSDKWebDialogView.m */; }; - 4589BEB528C02656E477055BA75EBB70 /* MPMemoryCache.m in Sources */ = {isa = PBXBuildFile; fileRef = B951042AE2AEB24F45AAC599C82AE7E4 /* MPMemoryCache.m */; }; - 460387971A8FEEB049AEA4B0AD3B646D /* MPHTMLInterstitialCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = BE6706C0E91060814B4019DC196EA848 /* MPHTMLInterstitialCustomEvent.m */; }; - 460811328DC3AF9839EC435E06460114 /* GULReachabilityChecker.m in Sources */ = {isa = PBXBuildFile; fileRef = C5150E21455987525D084331795D17D9 /* GULReachabilityChecker.m */; }; - 460CE03F485F8C8B98E5DDF93B5CE5D5 /* GULLoggerCodes.h in Headers */ = {isa = PBXBuildFile; fileRef = EA8C351C1FAEB71A3425C8C9B8998A9C /* GULLoggerCodes.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 46270CA99BEC26BD1EC761AD08E5D78D /* MPVASTMacroProcessor.m in Sources */ = {isa = PBXBuildFile; fileRef = ADD7DCF98C9AA899E012ACF4CB5AFEBB /* MPVASTMacroProcessor.m */; }; - 462735587B1877D85670B079E7A5DCB2 /* GULApplication.h in Headers */ = {isa = PBXBuildFile; fileRef = 726043824B0B792D392FA440DD2A5FD8 /* GULApplication.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 463C25924F5DB5F92452EC44CBDCC7D8 /* MPAdPositioning.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B09EC9CBB78F317C0E7C884C6159B17 /* MPAdPositioning.m */; }; - 463C8C5AEAD90DBB7CFA691992E0C3A7 /* MPNativeAdData.m in Sources */ = {isa = PBXBuildFile; fileRef = 67D1C3F645C22AA4329067D10A17C661 /* MPNativeAdData.m */; }; - 466316A11D8D1AF9E2A9386A0D769801 /* MPNativeAd.h in Headers */ = {isa = PBXBuildFile; fileRef = B2453CAD660824D748EB15B9F6953E75 /* MPNativeAd.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 46722B678C5E8D768CD47751B5FC9C47 /* FIRCLSConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 0C28121742F9E22DFC46E12927EE6877 /* FIRCLSConstants.m */; }; - 467311F71BDD0B57128B576D5966A6AA /* FBSDKDeviceButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 611A46F56C9CC5EEAE14D9D62EBFAE59 /* FBSDKDeviceButton.m */; }; - 469628456D727B032CD854462F682051 /* FIRAppAssociationRegistration.h in Headers */ = {isa = PBXBuildFile; fileRef = 2EC5E3FEE43BFD7EB302C4ADC7171929 /* FIRAppAssociationRegistration.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 46A6226FB203D0ECCC88515BFC357144 /* FBSDKTriStateBOOL.m in Sources */ = {isa = PBXBuildFile; fileRef = E6F79EA7748551BBBB3555C90E760894 /* FBSDKTriStateBOOL.m */; }; - 46D07808B16EC10BC25C50227D120CF4 /* MPVideoPlayerViewOverlay.h in Headers */ = {isa = PBXBuildFile; fileRef = 6EC5F23197C2154B161169B185B9AEB1 /* MPVideoPlayerViewOverlay.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 46F67DFAA8428ABBFE9768A6BCCF5967 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8A32B4EC2E226FFCDC31F82E6A52B86C /* SystemConfiguration.framework */; }; - 46FD5467CFE79441BC9EAF4026C57035 /* MoPub_AvidManagedDisplayAdSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 64297E187B8947F64F1BC5AF4C4077CF /* MoPub_AvidManagedDisplayAdSession.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4705C1A3813C1E249AF3746E74F8E4B2 /* FIRInstallationsLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A95F89D46A4178EE091F54A96F44043 /* FIRInstallationsLogger.m */; }; - 4711266518B83DFC51BF44C4D366ECAD /* FBSDKLoginTooltipView.m in Sources */ = {isa = PBXBuildFile; fileRef = C4B1244CBA9A3C50FEAEA1AAE3B1E731 /* FBSDKLoginTooltipView.m */; }; - 47727FFCA5992A0831A5F4D9F6FD9658 /* MPMoPubNativeAdAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = D1DBA4FCC2DFAC1117EE903439EB15E5 /* MPMoPubNativeAdAdapter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 47C391F4DD047F13D7D8FFA0ADA73524 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CAD30B8E801FF58F5E3DB20D59A3DE82 /* QuartzCore.framework */; }; - 482FA071DE21BA82DE0F1CC3A7850B5A /* MPDeviceInformation.m in Sources */ = {isa = PBXBuildFile; fileRef = 0765CB37FBB795F392FE143A06B334AA /* MPDeviceInformation.m */; }; - 487BC3C213938B20CB827C59F9AFF8A1 /* FBLPromise+Do.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D3EBF79A9194EA89A448F8CA040A4A /* FBLPromise+Do.m */; }; - 489340AAC77117F86F980D68E5A3FFF3 /* MPRateLimitConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 124B364816AA75D35B20839AE70FAE36 /* MPRateLimitConfiguration.m */; }; - 48CDE5FB051E8FBE6D1BEC34702F81FC /* MPNativePositionResponseDeserializer.m in Sources */ = {isa = PBXBuildFile; fileRef = D7B25E151F6CEE3FCCCFFA5E45CE1958 /* MPNativePositionResponseDeserializer.m */; }; - 48FF4A5B6DDAC4D44986960CD0F265F9 /* FIRCLSUnwind_arch.h in Headers */ = {isa = PBXBuildFile; fileRef = F54B98000116B87B8256065D8FCB25F6 /* FIRCLSUnwind_arch.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 490CE063DC7274B2458EEA08BB1D6024 /* FirebaseCore.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B7E65408B4B5868476876B2A67BB862 /* FirebaseCore.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 49492EBD39BA084417577672502AE04A /* FIRLibrary.h in Headers */ = {isa = PBXBuildFile; fileRef = E6C694E1D06CCBE92BDCB8AD898FA1BF /* FIRLibrary.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 495F98F743EFAB58C13BD2A3C526BF4C /* MOPUBNativeVideoAdRendererSettings.m in Sources */ = {isa = PBXBuildFile; fileRef = 722251709E755801F89FFEEFD0245F77 /* MOPUBNativeVideoAdRendererSettings.m */; }; - 497C377C42DCE7834016625F648830CC /* FIRCLSDwarfUnwind.h in Headers */ = {isa = PBXBuildFile; fileRef = CDED4637A3F98FF684759656A4DA142E /* FIRCLSDwarfUnwind.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 49D88851330EF0D2114B778B8436DA88 /* FBSDKErrorRecoveryAttempter.m in Sources */ = {isa = PBXBuildFile; fileRef = 3FAD23D5D4747F42F2D723BFA9629798 /* FBSDKErrorRecoveryAttempter.m */; }; - 49E2714155453549CB6BBF9DDD45150C /* FBLPromise+All.m in Sources */ = {isa = PBXBuildFile; fileRef = C5283991687EAA1980EF248539FD7A33 /* FBLPromise+All.m */; }; - 4A05AB92F99D86FC02CF101A5CD82D36 /* FBSDKIcon.h in Headers */ = {isa = PBXBuildFile; fileRef = 9872EA1E85D6A9050EA26CABEB488BEF /* FBSDKIcon.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 4A2AD8B664EF45D1519F68309A85A71F /* FBSDKLoginKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 981CC8CE87D0133EABE3AB0844A65231 /* FBSDKLoginKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4A80BA82036D206D5DC8B298273365CF /* FIRCLSFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 0201502435D6F659C6F8519D97C2DD95 /* FIRCLSFile.m */; }; - 4B28E3EE71A73A1F18B3A64DDE955F09 /* MPWebView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5AD02EB95D6DBE2B0CA401C6F2EF8E1B /* MPWebView.m */; }; - 4B4B9B6EE3146C14A85D325AB18F63BE /* FIRCLSInternalLogging.c in Sources */ = {isa = PBXBuildFile; fileRef = CFE2F92DC947D242323E352533FC125E /* FIRCLSInternalLogging.c */; }; - 4B52DC1A093AA6C705EACF122CD708AD /* FIRInstallationsAuthTokenResultInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 4143B3D7FE43215066031B5F2FFA889E /* FIRInstallationsAuthTokenResultInternal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4B7F52B26E02824FE056D8794389063A /* FBSDKUIUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = C6A72B17CBF96370E581757D02DF3BE4 /* FBSDKUIUtility.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 4BAE6A5AE51D640B909A349108ABCD9A /* MPInterstitialCustomEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 62166F441F9824895C5B5EA617A1F260 /* MPInterstitialCustomEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4BB4B523251D8DDBE689F02730D45933 /* FIRCLSContext.h in Headers */ = {isa = PBXBuildFile; fileRef = EF5186FFDD24F54758399C4BBC022D2C /* FIRCLSContext.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4C43BF28D10D36560D0116FA559B13F0 /* MPStreamAdPlacer.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E45B05D98A6DB306C0F1D991C952478 /* MPStreamAdPlacer.m */; }; - 4C7D6AFE7DC1C4D01CF79EDDAE120D4C /* NSString+MPAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 2FFA7F20C81452216AC42C752B29DD68 /* NSString+MPAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4C89B59231A3B9D43D8F426778723321 /* MPVideoPlayerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 678533E5794C45078CC325416F92CB77 /* MPVideoPlayerViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4CDDCAA262DCE17E16480689D40699F1 /* GDTCORUploadPackage.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F67A36488F0D23007CC07BFF895EF33 /* GDTCORUploadPackage.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4CE29B3C7D46BA9A0AD993F823D6DB88 /* MPInterstitialAdManagerDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = D87FE1C8DD5694CB3CD67B810B5F3E29 /* MPInterstitialAdManagerDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4D1DF833128823B52778058AD15DC879 /* NSString+MPConsentStatus.m in Sources */ = {isa = PBXBuildFile; fileRef = CA00615483FDE747EA80EE0D18DD6700 /* NSString+MPConsentStatus.m */; }; - 4D3AEFC7132B11D05784B40C6C4BFE76 /* MPServerAdPositioning.m in Sources */ = {isa = PBXBuildFile; fileRef = 3E174B963665D5556326CF980DF42810 /* MPServerAdPositioning.m */; }; - 4D446BE962C96AA3CE693AC0E3BD8147 /* FBSDKBridgeAPIRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 3EBE6DE6AC0B3C9F3AC7DBAEB3A662C0 /* FBSDKBridgeAPIRequest.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 4D5C737B335008A7551E058DAD370D70 /* MoPub-FacebookAudienceNetwork-Adapters-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D9D2AB59193C5DC54FA5A2775836D3F3 /* MoPub-FacebookAudienceNetwork-Adapters-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4DD45648BC542376089F51DFA0E0082A /* FBSDKEventInferencer.h in Headers */ = {isa = PBXBuildFile; fileRef = 30B2906701FF62EA54AABC9ADEA62270 /* FBSDKEventInferencer.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 4DFB107BB83DBDDA9A27E0ADE1503209 /* FBSDKAppEventsState.m in Sources */ = {isa = PBXBuildFile; fileRef = 51FBE7BF1EB7522550A924268B898BCA /* FBSDKAppEventsState.m */; }; - 4E37F28884CB6A44F499C90FCA8A8EBA /* MPMoPubAd.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EF90B0EE47DA618D7587ABDBEEE4CF2 /* MPMoPubAd.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4E615FB9D2F01A9DD32E73BEE7A0661B /* FIRAEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 540D12E9A767E368AD86794E40D5F5C1 /* FIRAEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4ED2C4FE3CFC1C00D88AB88BA2D7AE62 /* MPBaseInterstitialAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = B45A4460D252BA2CC8BE0592A309E75E /* MPBaseInterstitialAdapter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4EDC7FCD361905DB2545D0664967B78E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7E622F34474A1058AB765526BF8520FB /* Foundation.framework */; }; - 4F29681FAED17B9F69BD41151C10E0EF /* MPCollectionViewAdPlacerDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 38AD7B97CFB7E70C773BFA2E198800FF /* MPCollectionViewAdPlacerDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4F6EDFD3863398E67D7123DAA56C8343 /* FBSDKMeasurementEvent_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A3E9520A2E59D655D6BC500A9C6E772 /* FBSDKMeasurementEvent_Internal.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 4F756E7674C3BEFA6C085C7F3ABBE239 /* MPVASTInterstitialCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 257B2EA361B5A5232CF9ADF913D995BE /* MPVASTInterstitialCustomEvent.m */; }; - 4F8805F64FA46611D50FCEB341C49A24 /* FIRCLSLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 73803C1BF3262D233765F5EE4F77BF9B /* FIRCLSLogger.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4F941068D769F43C5FA4EA8B3E09E4A8 /* MPVASTResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 30A8402FBAB20F15E196F376F9A9DB41 /* MPVASTResponse.m */; }; - 5008728C302336AA30CDE92F1303688D /* FIRCLSUserDefaults.h in Headers */ = {isa = PBXBuildFile; fileRef = 47193C69317491589695265D8E5C2AD1 /* FIRCLSUserDefaults.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5026653B632A226D359A14342A4B3A75 /* MPNativeAd+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = DDC924443FBF390ADEE4A44A3AB1BEAF /* MPNativeAd+Internal.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 504263DB71DB27CA8C35A0EF736199E3 /* MPVideoPlayer.h in Headers */ = {isa = PBXBuildFile; fileRef = EC840FB3A9B5FD39E877E39F9341CD4F /* MPVideoPlayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5050B03AF56241CB8820E401A5672728 /* FIRAValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 289B33331AB4638DFCA3183C947B8B5C /* FIRAValue.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 50763A46EE286C727A9FA7CB31CEBD87 /* MPRewardedVideoReward.h in Headers */ = {isa = PBXBuildFile; fileRef = DDD4B27C8C7B462F918622D94C6CD29E /* MPRewardedVideoReward.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 507FBF8CE326BF48F2C92D69D19C59EB /* MPRewardedVideoCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B789E7057E014FE0B42D76AFB2E9DB /* MPRewardedVideoCustomEvent.m */; }; - 50994462F6030A41F776295A34EF4BF3 /* MPMutedBtn.png in Resources */ = {isa = PBXBuildFile; fileRef = 3E5027C91576469206B65AA04B465E24 /* MPMutedBtn.png */; }; - 509CCD2D6D5583B56E93FFEE374E803A /* FBLPromise+Race.h in Headers */ = {isa = PBXBuildFile; fileRef = F4CB01AA9AD13CB18A92D05BE1D130DA /* FBLPromise+Race.h */; }; - 50CED11F19ACA388FC641281532D51C8 /* FIRCLSReportAdapter.m in Sources */ = {isa = PBXBuildFile; fileRef = 2051CBB578CE971DC6FD39E549D13D0B /* FIRCLSReportAdapter.m */; }; - 51108EAA328F11B7A5FB3616FD18C417 /* MPVASTConstant.m in Sources */ = {isa = PBXBuildFile; fileRef = F9B488FFB174D39D23CFF939CF53957B /* MPVASTConstant.m */; }; - 511909DDE1143920BAD203F38125BA10 /* FBLPromise+Await.h in Headers */ = {isa = PBXBuildFile; fileRef = CF437374EFE55C1F6AAC583CF2438B58 /* FBLPromise+Await.h */; }; - 513D53424E6FC80C23E2FEAC0C0323C8 /* FBLPromise+Validate.m in Sources */ = {isa = PBXBuildFile; fileRef = 298F64F4AF220C812BC1F2A42B934F50 /* FBLPromise+Validate.m */; }; - 51D09FDB004DF67DCA7D982150E1DFB7 /* MPRewardedVideo+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 781FC8AD51E6866D2D7CC94F5C7932E7 /* MPRewardedVideo+Internal.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5221C1566261892F473697FD737567AE /* MPMoPubConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 3542266176BA99781550B58A523894F7 /* MPMoPubConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 52291E134D53A8369CC75698205CCA3E /* GULUserDefaults.h in Headers */ = {isa = PBXBuildFile; fileRef = 763E069341A2B66FD72F055C57B14880 /* GULUserDefaults.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 524C975D2C32DC9F665BFF6A6311B359 /* FBLPromise+Race.m in Sources */ = {isa = PBXBuildFile; fileRef = E0E3DAADC1863DE965F304E74AF4DFB2 /* FBLPromise+Race.m */; }; - 52A0493BCE3067305F086D63353D98BA /* FBSDKKeychainStoreViaBundleID.h in Headers */ = {isa = PBXBuildFile; fileRef = C28848EB5D088BDBD9508A95AAF4B010 /* FBSDKKeychainStoreViaBundleID.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 52B9BB4B0CA23FEDA4FD65F7F6A0CB5E /* PromisesObjC-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = FC57614E3243EC7C555920CC8C93AEA4 /* PromisesObjC-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 52C6E0C4D40C4DFB263B024EDE65E8EC /* MPProgressOverlayView.m in Sources */ = {isa = PBXBuildFile; fileRef = 76AB238FB89EFE9FDF32EA3ECF97DD1D /* MPProgressOverlayView.m */; }; - 5364E7E5814CA27DD5326480ADB3FA54 /* FIRCLSSymbolicationOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = FC1FB84E26BD003635B679C7860135AF /* FIRCLSSymbolicationOperation.m */; }; - 53770D273879B61F54065158F7AD670C /* MPInterstitialCustomEventDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BB2BE9926BB510B58ED86AC35DA702A /* MPInterstitialCustomEventDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 53B9A123C0A077C75DB2FC899048A029 /* FBSDKTooltipView.m in Sources */ = {isa = PBXBuildFile; fileRef = D96EB47E02BE9CC7D59F370B6B6F5102 /* FBSDKTooltipView.m */; }; - 53C3392AAF7640FA8292CEE6C3FA9457 /* MRCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = A3C882A580DCCCEB28AA2ADD5A6A92C4 /* MRCommand.m */; }; - 53E22C5366A7D66D80E31F10ACC8043A /* FIRCLSFile.h in Headers */ = {isa = PBXBuildFile; fileRef = F7E3E73FCA9BE81C3371693ED3B7C8CE /* FIRCLSFile.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 53EB7434675BA7817418C05A9110A655 /* FBSDKSuggestedEventsIndexer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF86487A25C13CE6346CEC05715438E /* FBSDKSuggestedEventsIndexer.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5448F617E26E899BC4ACE2F01981021A /* FBSDKInternalUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = 9679C9F9B72ACAC412ACC20A9A2706AA /* FBSDKInternalUtility.m */; }; - 544D620E15A964622159FC2935BB91A1 /* MPImpressionData.m in Sources */ = {isa = PBXBuildFile; fileRef = BA8EB6695C215B232B216E2F9B56FB4B /* MPImpressionData.m */; }; - 5451131DD3D68878FD24A7816E4E556B /* MPVASTCompanionAd.h in Headers */ = {isa = PBXBuildFile; fileRef = 9044B3A077CAC1211E46CA82B02DC0E5 /* MPVASTCompanionAd.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 549153DD95408BE41053F69CEC23591C /* MPNativeAdAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = 9396B8263A1F8670989ED2DAEF4ECFA8 /* MPNativeAdAdapter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 551CBBAFCA26883B139A02C53C758FF6 /* MPNativeAdRendererConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = E4B3E3E6D5DB5738EA1E52DCB71B2BD6 /* MPNativeAdRendererConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 551FF6C21D36ED3BF0DD26D430960EF8 /* MRError.h in Headers */ = {isa = PBXBuildFile; fileRef = 570B398A26A921F8FA093D9C9B07E027 /* MRError.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 557512E6F1251F169EB00557722C1903 /* MPNativeAdSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 088FA89003CA8937C297FABCB98C888E /* MPNativeAdSource.m */; }; - 559E6262F1F705C918C3EC027EDEF12E /* NSURL+MPAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = E12C10BDCCB432E91925A8CE78C43506 /* NSURL+MPAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 55AF8C89826439DCD228E43C1F189A77 /* FBLPromise+Then.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 8B5BE6A19289ABECD933850DCDB9714F /* FBLPromise+Then.h */; }; - 5663985CA9BEE0CF645A801D31A31443 /* MPVideoConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = C24FD1A664C7473CCFC62DE3F10D1EC2 /* MPVideoConfig.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 56AB2D44D8B20798AAD03DFFB27F94FC /* MOPUBNativeVideoAdRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CEDF076873C151B52DB87AFF4D69838 /* MOPUBNativeVideoAdRenderer.m */; }; - 56ADED00DA376496DF3BFF44AE10F738 /* MPRewardedVideoConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = 52108D20F290030545FBE74D1C7B16F7 /* MPRewardedVideoConnection.m */; }; - 56AF0E80A30E49DF4A9F248CEE9036A5 /* FBSDKLoginKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D0B4B7A3C6107F9F40BDEC5A513061CE /* FBSDKLoginKit-dummy.m */; }; - 57555104BDCA33FD34B042FC4E8930BE /* FIRDependency.m in Sources */ = {isa = PBXBuildFile; fileRef = C43DD2EEB36EF95BE4CF3A5AE1BF77A3 /* FIRDependency.m */; }; - 578AB140325441AEF7198B1FBDD60BB2 /* MPTableViewAdPlacerDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AAF61DEF2D09996FD9D2BA4B4C8BF88 /* MPTableViewAdPlacerDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 579999E3932BA05A98B100E8B4E03D34 /* FIRCLSURLSessionUploadTask.h in Headers */ = {isa = PBXBuildFile; fileRef = 07F4CD47518D8E62FDF58C1DD413D2EB /* FIRCLSURLSessionUploadTask.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 57D67EAF540B12DC1418DFD3CB741D59 /* MOPUBAVPlayerView.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E14D81993CFBDE06E4D0CDF3C1B8FDD /* MOPUBAVPlayerView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 57EA323E965F284A91847A184574BA49 /* UIButton+MPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 2390B971FF73244F6B1092ADAFB7B74C /* UIButton+MPAdditions.m */; }; - 57EB123AFA6F82579BB60A0482329FB3 /* FBSDKGraphRequestDataAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = CDE6F56616CDFE7D08FCA2E61AF0A500 /* FBSDKGraphRequestDataAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 57FE77F8B76814AD30C840BFF56FF512 /* MPVideoPlayerContainerView.m in Sources */ = {isa = PBXBuildFile; fileRef = DE5A8A6DA5F7E51F2EE6BB5322D39DF3 /* MPVideoPlayerContainerView.m */; }; - 58474485773F225AE1DD2C314A22F05D /* MPRewardedVideoAdapter.m in Sources */ = {isa = PBXBuildFile; fileRef = 57CFD7B6FD61C64828745EA8FBE711D4 /* MPRewardedVideoAdapter.m */; }; - 586D7BE6DE179AB46292A124C804A71F /* FIRCLSdSYM.h in Headers */ = {isa = PBXBuildFile; fileRef = DE9C4BDAB5CE2D90D7EB9D366FBE1CCC /* FIRCLSdSYM.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 58A3182E37F2B732EF53F50D062F4190 /* FIRStackFrame_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 363CFFF506950B66C298C2CA540247A7 /* FIRStackFrame_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 58BAF638757DA8E0FD2A74CA28844319 /* FBSDKServerConfigurationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 50207558DADE9D705B85D71062E40772 /* FBSDKServerConfigurationManager.m */; }; - 58C9711EFDED12380372B54B0EFD01C3 /* FIRCLSSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = DF5A4A0D599D47844BEFCA576D351EAC /* FIRCLSSettings.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5942354AA61C2412000E83B79EE7FC73 /* MPWebBrowserUserAgentInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 10B9C11F52EBB8A073785586610A8D59 /* MPWebBrowserUserAgentInfo.m */; }; - 59454B0A9C125E5D33B8CEA66BB1A81A /* FBLPromise+Delay.m in Sources */ = {isa = PBXBuildFile; fileRef = 9561112F6366C81B44BEADC3A6CA6547 /* FBLPromise+Delay.m */; }; - 594D333186F9B680AF8B51F2CA9E7942 /* FBSDKLoginButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 09252C0CBCEB24CB026EBD6B934C8121 /* FBSDKLoginButton.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 597E402BA142235B01F14DC862532A4D /* FBLPromise+Recover.h in Headers */ = {isa = PBXBuildFile; fileRef = F2ED25B46717EE76477932E591AF483B /* FBLPromise+Recover.h */; }; - 5996C8F42BE9D088A8C1AA830E9E58CC /* FBSDKInstrumentManager.m in Sources */ = {isa = PBXBuildFile; fileRef = AC3548AE7B5BF33A31AB4F84CF1630E8 /* FBSDKInstrumentManager.m */; }; - 59A7D7FC75CC9CA08CF40AB3473A992E /* FIRCLSReportAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = 24566691145B2CC0376A5196BABF4C4E /* FIRCLSReportAdapter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 59B62532F24EC6EC03CA017D6815298B /* SKStoreProductViewController+MPAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = C1ABE913DD8B69A5DA8473883B8FB38C /* SKStoreProductViewController+MPAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5A0F315FBA909920F082A6D9992B1226 /* FIRCLSURLBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 88E1CFBAD4C98AAE2FE9CB856CA8BFA1 /* FIRCLSURLBuilder.m */; }; - 5A1B778B3967675284513AB66C544DD8 /* MPStopwatch.h in Headers */ = {isa = PBXBuildFile; fileRef = DAA6A2DEF645DC36C5564D6FE230A762 /* MPStopwatch.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5A21F9FC060DA320A34BB60C11306B94 /* FIRInstallations.m in Sources */ = {isa = PBXBuildFile; fileRef = CC00F2F5A3FF861ABEA00A5CD03564B1 /* FIRInstallations.m */; }; - 5A9CFD1BEAC4B9F32D619D428B3455B9 /* MPVASTStringUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = AFC0EDB3E7704218D9FF10BE3B17A29B /* MPVASTStringUtilities.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5AFF3350DDCEB791767B6BCE6B326A12 /* GDTCORReachability_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 78E569AFAEEA25A83AC62222BB6BB835 /* GDTCORReachability_Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5B75E0E4F7C4F64242A3DD404B98DE42 /* FIRCLSReport_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 89FF330A6442C677B526CB2855778A0C /* FIRCLSReport_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5C45ED3F2C343D3C75283FA3F08F49F6 /* FIRCoreDiagnosticsConnector.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F5C95F06D7F106B44CA92D1BEBCC488 /* FIRCoreDiagnosticsConnector.m */; }; - 5C700E7BB4A5CD846F52F3887B7A7BD3 /* FIRCLSReport.m in Sources */ = {isa = PBXBuildFile; fileRef = 1980F3DCCEF53D219566696F8D4D7E45 /* FIRCLSReport.m */; }; - 5CDD0EEC01EADAF510A5D43826E74E88 /* MRExpandModalViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E16B5453E647F089D6FD5E479D5BB5F /* MRExpandModalViewController.m */; }; - 5D514347EDC693DE33BFF52FCC08C0F3 /* MPViewabilityTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = 26280CD4EFB47654F7ADD45F31B2D30A /* MPViewabilityTracker.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5D6CEE38B94BBFF999ED3D7919DFB2B6 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7E622F34474A1058AB765526BF8520FB /* Foundation.framework */; }; - 5E04820A9B1374CD66E0F7B12FD8C782 /* MPDiskLRUCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 42EC0B8B466D57B336E40EAB6EFC46B6 /* MPDiskLRUCache.m */; }; - 5E68D81680AC450E47C83251C4AAF7F4 /* GULNetworkConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 421B9DF04D30FF99DB8C88232986098B /* GULNetworkConstants.m */; }; - 5EABC87411588B735ACAD2100DECA512 /* FacebookSDKStrings.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 24A456C85AF06212B2C2D20398ECF480 /* FacebookSDKStrings.bundle */; }; - 5EAC3F224B4DD2F58DBE530B475BCC74 /* FBSDKGraphRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 100B9CE6B5DF19397BE6BD4A1EE5CE21 /* FBSDKGraphRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5EE81FE20A4EC0A3E6800A228E6BFDE9 /* FBLPromise+Reduce.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A7D1EA91DD59D2BF101E37913B7F9A5 /* FBLPromise+Reduce.h */; }; - 5F85ED61875B7E8A6DFCC9B575AC9287 /* MRCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 3974275A8EE8520E2C51575A19B0B370 /* MRCommand.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5FB4B673675F5C7B84E1BF6F2DFCE797 /* MPVASTError.h in Headers */ = {isa = PBXBuildFile; fileRef = DD7234B7909F7DC211F9EA3E427F8859 /* MPVASTError.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5FB886151AE357F85620397EFBB17CD4 /* MPNativeAd.m in Sources */ = {isa = PBXBuildFile; fileRef = 3053929D95FA0C6E657E3BC71A12B734 /* MPNativeAd.m */; }; - 60029ABC6B43D3A9AC05AF8514EA9B79 /* UIView+MPAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = C23BFF88CC3767DDD0AF1082A7700C5E /* UIView+MPAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 60293FD35F84039C91258DD9F35CA4DB /* FBLPromise+Retry.h in Headers */ = {isa = PBXBuildFile; fileRef = 92508B11E4711DFE2426DF55E1526E60 /* FBLPromise+Retry.h */; }; - 604064D035035C7B701AF655DFCCF636 /* FIRCLSInternalLogging.h in Headers */ = {isa = PBXBuildFile; fileRef = BA51AE9DA92117208174BD020559C328 /* FIRCLSInternalLogging.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 607F8848B8F6D1D5035C2362443E5419 /* MPMRAIDInterstitialCustomEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 02E085738B766EC947393C1303BD72F7 /* MPMRAIDInterstitialCustomEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 60A4EC4A90EC1228430F1D227BD69573 /* MoPub_Avid.h in Headers */ = {isa = PBXBuildFile; fileRef = C1699B1297A43343DDB89495117C3F5E /* MoPub_Avid.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 60C2235B6D9633B2B77462EB36576EE2 /* FBLPromise+Catch.m in Sources */ = {isa = PBXBuildFile; fileRef = 2965558CDF1D7BA0D97E468AEB624D9F /* FBLPromise+Catch.m */; }; - 60D92E4439E70D020AC454D089F8D0D9 /* FBSDKAppLink.h in Headers */ = {isa = PBXBuildFile; fileRef = 3063F76C9BB8AA8D06D25204BD51C3D0 /* FBSDKAppLink.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 60E92DDC5D9601D9BBDBA26E2DF70019 /* _FBSDKLoginRecoveryAttempter.h in Headers */ = {isa = PBXBuildFile; fileRef = C84B52E1C6836F235AC35B233208BB36 /* _FBSDKLoginRecoveryAttempter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 61230E60197C8D3C7A313A3FC445B9F6 /* FIRCLSCodeMapping.h in Headers */ = {isa = PBXBuildFile; fileRef = 85F31C39518A8353AF0A3D64ED99CA1F /* FIRCLSCodeMapping.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 61314A61677B0EC6EF674461A94C3398 /* FBSDKButton+Subclass.h in Headers */ = {isa = PBXBuildFile; fileRef = BA248B4C1FBEF84908D3A7D237952367 /* FBSDKButton+Subclass.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 618503356F9132B41D0AB5F23266E742 /* FIRCLSURLBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = B631E40F190120BC8334CF9AEF1AD8C5 /* FIRCLSURLBuilder.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6195E1E1267810D8E6159EB1A3D50F4B /* MPVideoPlayerView.m in Sources */ = {isa = PBXBuildFile; fileRef = A98D29973AB061AB31F4F0D3B2018853 /* MPVideoPlayerView.m */; }; - 619AEC318C6D1C3F97391855F5707EB6 /* FBSDKLogo.m in Sources */ = {isa = PBXBuildFile; fileRef = E849A31A1E8E0985EFBC42F741F15DC2 /* FBSDKLogo.m */; }; - 61D496B0D230F4865E05E039A3DEB9A9 /* FBSDKCodelessParameterComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = F3CA552ABDEE14EF06B446CFF6DBA4F8 /* FBSDKCodelessParameterComponent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 61E7DF5A6FDE3A90B2DE147016DC7220 /* FIRCLSAsyncOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = B58AB6FD4EB1F31BC2C06FC63B02F33F /* FIRCLSAsyncOperation.m */; }; - 61E9DDF7AA9C6454DE0576CE98F83776 /* FBLPromise+Do.h in Headers */ = {isa = PBXBuildFile; fileRef = CE430B0B5A3471C63F31CAE393C5233E /* FBLPromise+Do.h */; }; - 61EDD907BD3C04EC1164F45E1058789F /* FIRCLSURLSessionConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FAC0BF61AC7A089DD0111C25B93A87B /* FIRCLSURLSessionConfiguration.m */; }; - 6260494D6403239473C75C1D5A342D11 /* MPVideoPlayerFullScreenVASTAdOverlay.h in Headers */ = {isa = PBXBuildFile; fileRef = 9521A511D91941CC83177D3FC07C9813 /* MPVideoPlayerFullScreenVASTAdOverlay.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 627366EE5AB201652636661AF059BFC0 /* UIColor+MPAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B52A223DC220741775717908F691CA1 /* UIColor+MPAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 62D75F2CAFB529E4F4522509FAC40A51 /* FIRCLSInternalReport.m in Sources */ = {isa = PBXBuildFile; fileRef = EFF22E7B5243FA1990953BC368634C85 /* FIRCLSInternalReport.m */; }; - 633C5C0C3A2764BF3F9E72F4849EEA18 /* FIRCLSURLSessionDownloadTask.h in Headers */ = {isa = PBXBuildFile; fileRef = D4F67A3E65CC0FC59D9E2CEDECC946BB /* FIRCLSURLSessionDownloadTask.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6363B4E053E27FDB6345E651200CAFA4 /* MPCoreInstanceProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = E15F2F19F73D395CCBF48B534933CA81 /* MPCoreInstanceProvider.m */; }; - 637C60FD6B58311A6E0AA6CA758AE4D3 /* GDTCORRegistrar.h in Headers */ = {isa = PBXBuildFile; fileRef = 4337D26CE3234965B0903BE0AB93D043 /* GDTCORRegistrar.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 63A46DD6064B9215937ACD45FE0C7312 /* FBSDKAppLinkUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A0778EEA713C489035B404659220EAA /* FBSDKAppLinkUtility.m */; }; - 64039789BDF5F502B6134E418DD73277 /* FIRCLSRecordApplication.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F1DE100F7CD62079B50FCD0C9553643 /* FIRCLSRecordApplication.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 642471BE17717F210A258039FB5062EA /* MPCloseBtn@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 5F8EFD9723447B23AB8B4BE7AE7EC175 /* MPCloseBtn@3x.png */; }; - 6468289903F4D235754F7D15812DBE49 /* FIRCLSUnwind_x86.c in Sources */ = {isa = PBXBuildFile; fileRef = 7727D060E029691BBC6B6FAD2C9823F2 /* FIRCLSUnwind_x86.c */; }; - 64724F4666669A6DC33713CEEC3D3A29 /* FIRCLSRecordHost.m in Sources */ = {isa = PBXBuildFile; fileRef = 2718ABBF5BD3936EEBCD4EE50691432D /* FIRCLSRecordHost.m */; }; - 64AD6216060AFC03118684FE8D069B1A /* FIRCLSFCRAnalytics.m in Sources */ = {isa = PBXBuildFile; fileRef = 8803603DF776222FD24D596996D41ECB /* FIRCLSFCRAnalytics.m */; }; - 6515E017C238F3E8DAE6235B186CD675 /* MPIdentityProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = C5EB448F6ECA0790F937ACD6C113DE79 /* MPIdentityProvider.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 653F8A1FE32DC5353FC8EC35A7EB4731 /* FIRCLSReportUploader.m in Sources */ = {isa = PBXBuildFile; fileRef = DB2CEB0165E20DBD8F873EA9AA03E794 /* FIRCLSReportUploader.m */; }; - 6552FC57EB470FE855CC0AA33B4F6097 /* NSError+MPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 7308B2C4895ADFCC9EFECDCB781BF3D0 /* NSError+MPAdditions.m */; }; - 6591110BBFC472759E589A44F409C7EE /* GDTCCTNanopbHelpers.m in Sources */ = {isa = PBXBuildFile; fileRef = FE7D6306C39968ED9DAF5FC61B68E737 /* GDTCCTNanopbHelpers.m */; }; - 65BA4D1F48A3E8FEF358A718CD0DAE82 /* FBLPromise+Catch.h in Headers */ = {isa = PBXBuildFile; fileRef = 10D2FE383B555E9DF33CBBE8010D83F3 /* FBLPromise+Catch.h */; }; - 65C216C17BD5C795B37D22AEACA67C0E /* FBSDKGraphRequestPiggybackManager.m in Sources */ = {isa = PBXBuildFile; fileRef = CF6CCFBF6868B0A060B6CACC63AD9715 /* FBSDKGraphRequestPiggybackManager.m */; }; - 661690D05224FA3764F6BDEE5DFF4A99 /* FIRCLSCrashedMarkerFile.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A2B4F906DB59BFC0E6D94E541341C /* FIRCLSCrashedMarkerFile.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 669932B33FF85B028B9F2DEC1CE48788 /* FIRBundleUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 34FF41238BBFB358713DE7121CD3879A /* FIRBundleUtil.m */; }; - 66E8667F85E51D243BE5866BAA68B1F5 /* FBSDKAppLinkReturnToRefererView_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = CB5C78A2BDB0940C7A7CF9B73D6AAB24 /* FBSDKAppLinkReturnToRefererView_Internal.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 66F18808294602218109BCA88795D66C /* FBSDKBase64.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F37D0042C941293047BDBFD25E23093 /* FBSDKBase64.m */; }; - 6705903811C0A82E6802B5008DCCDF23 /* MPBannerCustomEventAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = F798A8639B7D8CD9B4137A1D6E6A51E6 /* MPBannerCustomEventAdapter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 676AC8B36483DB9094A624687ABDA411 /* MPContentBlocker.m in Sources */ = {isa = PBXBuildFile; fileRef = C69EB63CF023797F10EE17492DA51BB1 /* MPContentBlocker.m */; }; - 67BB18286F92EF3BC35FD3210B0A809C /* FBSDKDialogConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = E5E1CD7CD4C2BCCBA44E40674DF55788 /* FBSDKDialogConfiguration.m */; }; - 67BD57566075CACD4ACAC85DCB255418 /* MPBannerCustomEvent+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 6292C6A98F9996872AB54BD78C613E8A /* MPBannerCustomEvent+Internal.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 67F368D8CDA6F2E2451429CCE27B0702 /* FlurryConsent.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A46F5AC5336D07AD552CA25A6601BA3 /* FlurryConsent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6814C773B652FBF6C1915600E884974A /* CoreTelephony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 09848339CC1F184A821322EB9C266D55 /* CoreTelephony.framework */; }; - 6828B6B292C86A72E8A29D93F4401B34 /* GULMutableDictionary.m in Sources */ = {isa = PBXBuildFile; fileRef = 8DCFFA7C353E76CC942338CCB28CCBD4 /* GULMutableDictionary.m */; }; - 684EB70CD79CECA5FEE2A831AB13C165 /* GULAppEnvironmentUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = F48EAC38BEFDD31749021EC60E3886CB /* GULAppEnvironmentUtil.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 685D49C9F836024C4A285F8071290575 /* FIRCLSThreadState.h in Headers */ = {isa = PBXBuildFile; fileRef = AE8FE22CD866DBFE9D17DDB260181310 /* FIRCLSThreadState.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 687636F6135F2052EAE4BA203F199DC3 /* MPAdServerKeys.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F2713909BE13FE0F46B68C81B19B342 /* MPAdServerKeys.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 688469947AF68FD17738BB60A86F99D5 /* NSDictionary+MPAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = F78AB3B1BC85252B65E595DFCB083698 /* NSDictionary+MPAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6885B43147AC9579E906A23DA01E17D0 /* MPXMLParser.h in Headers */ = {isa = PBXBuildFile; fileRef = F3E92ACDE25764C4472EB3324FB7AB23 /* MPXMLParser.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 689B499A61CE56A6BC195C33A9C1831A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7E622F34474A1058AB765526BF8520FB /* Foundation.framework */; }; - 68FE9A22A38C52A39A4C59265B69AB07 /* MPUnmutedBtn.png in Resources */ = {isa = PBXBuildFile; fileRef = 8E4E3180FC567C9FCDA8CD91312C90E6 /* MPUnmutedBtn.png */; }; - 69561B4A1F5A4D3921D3E0A3C9595329 /* MPRewardedVideoAdManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 989DF90CF44F956593915A594C4902AF /* MPRewardedVideoAdManager.m */; }; - 69A7E3AD494AEFA301D236F678A7D3E4 /* FBSDKSmartDeviceDialogView.m in Sources */ = {isa = PBXBuildFile; fileRef = 288EDF2F9D05AB94498FFAC8FE4F6DA3 /* FBSDKSmartDeviceDialogView.m */; }; - 69B6137F7F7FAF58C0662E537AA141C1 /* MPPrivateInterstitialCustomEventDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = B6081912F1B42D13206287414410CA92 /* MPPrivateInterstitialCustomEventDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 69C577B10BC0BB88EA374A939EE93E1B /* FIRInstallationsHTTPError.m in Sources */ = {isa = PBXBuildFile; fileRef = F125AD9DE4885AF2EC70BD8CFAD862E5 /* FIRInstallationsHTTPError.m */; }; - 69FB909E83BC8214DE072190BBCE4D79 /* GULSwizzler.m in Sources */ = {isa = PBXBuildFile; fileRef = 2745A5C1782FC07C81BF936E118AD664 /* GULSwizzler.m */; }; - 6A30571E5A47E711C295FE299C88361A /* MPAdWebViewAgent.m in Sources */ = {isa = PBXBuildFile; fileRef = 99BBE305E5668F92A7DC4A3E893C7F2F /* MPAdWebViewAgent.m */; }; - 6A58E6C9B06348192330EF74F4724645 /* FBSDKAccessTokenCache.h in Headers */ = {isa = PBXBuildFile; fileRef = D9AC0AB30DA90EB31444CDDA222D3616 /* FBSDKAccessTokenCache.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 6A7BF400E4250A049E25364F79CF6901 /* FBSDKCoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8E520B664B861CE7D881084CD6886827 /* FBSDKCoreKit.framework */; }; - 6A7E3B7592239E8561EB2BB86D0DF367 /* GoogleDataTransportCCTSupport-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 76F3716DBD1D1B498123462FC4113A9A /* GoogleDataTransportCCTSupport-dummy.m */; }; - 6A8098082AE33CA628B00C423A7C2694 /* FIRAEvent+Internal.m in Sources */ = {isa = PBXBuildFile; fileRef = 4BAB8D0089A37D166083541E36EA4365 /* FIRAEvent+Internal.m */; }; - 6AA270DECF8DEF69F5A35D4C2FC66A8A /* FIRCLSDwarfExpressionMachine.c in Sources */ = {isa = PBXBuildFile; fileRef = 9EBA8DA24D4260839318D78EC9359684 /* FIRCLSDwarfExpressionMachine.c */; }; - 6ABD8DC7697C6CAFA9B5439190BE517C /* MPHTTPNetworkTaskData.m in Sources */ = {isa = PBXBuildFile; fileRef = 74E63A0224582D4BFADBCCDD8B24B940 /* MPHTTPNetworkTaskData.m */; }; - 6BA319704C8BC9815CB80EE2D5E4B7CC /* MPMediaFileCache.h in Headers */ = {isa = PBXBuildFile; fileRef = C784342A4CE90756B4BA3D2244D8DC91 /* MPMediaFileCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6BDB23B514A94519340E839D4F570046 /* FIRStackFrame.h in Headers */ = {isa = PBXBuildFile; fileRef = 001873F285E6F5B21C6C6A7530676040 /* FIRStackFrame.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6C065CEE543E0CC447F00A7E0D6B24DB /* FBSDKMutableCopying.h in Headers */ = {isa = PBXBuildFile; fileRef = 470C91BE4E4F9A0D44F41C7DEF24746D /* FBSDKMutableCopying.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6C2765CE74AD476666EF4FFA92BAC50D /* FBSDKCodelessPathComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = B50DDFF456FD67EF4FF30BCC9EFDA92B /* FBSDKCodelessPathComponent.m */; }; - 6C413E800EC7563F7C9F3E99487914F0 /* FIRAppInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 587FFBBCD6BB553F69A0F31CB108E118 /* FIRAppInternal.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 6C58CBE13E124917E8F2901D8B79CEFA /* FBLPromise+Validate.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E59FEC9A67608BADD8B56A68F9455C4 /* FBLPromise+Validate.h */; }; - 6C6FA74221C8DCDF526BB298E147218A /* FIRCLSFABAsyncOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = BD256BA47553A5AACF835AC696D625E3 /* FIRCLSFABAsyncOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6CF8CC58626330C65EDE069BA78FC7D8 /* MPBaseNativeAdRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B9245C9D90906DAE40DF21994176FAD /* MPBaseNativeAdRenderer.m */; }; - 6D575D3BE35633CCBFA09D603205A236 /* MPCountdownTimerView.m in Sources */ = {isa = PBXBuildFile; fileRef = E86B58A88F21F603E8766BB299416831 /* MPCountdownTimerView.m */; }; - 6E4D2ED515CDE0D97E07738B55C7C2B1 /* FIRCLSReportAdapter_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = E2434CB138B23681AD420AD601C0B50C /* FIRCLSReportAdapter_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6EBA909B78D0F0D09B4169FED4D8617C /* MPCloseButtonX@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CA903F5FAA97ECA25B62C5067EE63EBD /* MPCloseButtonX@2x.png */; }; - 6ECABA34606420810EB7C44894D56857 /* FIRCLSLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = D3B5753F38B8B1C45A47A9CB4F5DE262 /* FIRCLSLogger.m */; }; - 6EE6F173FE556915F5374986328374AA /* FIRConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A479C9AC5015AE7660FBDFCFE1F2B6A /* FIRConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6F37590B1582CBE0C54DBA01AC3A7C32 /* GULNetworkURLSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E64AB24001A99F7AA524E8B2BCCC290 /* GULNetworkURLSession.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 6FA6C189B5651567539705795BF7B346 /* MOPUBNativeVideoAdRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 11C5302E85FCD45DFA64B62C5DEC15D2 /* MOPUBNativeVideoAdRenderer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6FC33F923B3610AE5F53A413577363EA /* MPViewabilityAdapterAvid.h in Headers */ = {isa = PBXBuildFile; fileRef = 20AFCAFAC86972789130D5D28C54E8F0 /* MPViewabilityAdapterAvid.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6FC373BB403447102ADCFC79DB5B2758 /* MPCountdownTimerView.h in Headers */ = {isa = PBXBuildFile; fileRef = 8EEA667CCD226FB95A7F36320AD4B4F4 /* MPCountdownTimerView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6FCAFACF6D49192B35E2B5FE8AB132BE /* MPVASTIndustryIconView.h in Headers */ = {isa = PBXBuildFile; fileRef = 35C3BEE2785C0C1F95529ED4BF6D224A /* MPVASTIndustryIconView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6FE43EE100DDE479C086D1B761ABD28F /* FIRCLSFileManager.h in Headers */ = {isa = PBXBuildFile; fileRef = A6E962762F6A88B83E5679C3AC3ABA38 /* FIRCLSFileManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 702CF02866100617D20EF392C1F66AD7 /* FIRCLSCompactUnwind_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 957C1C498CCC51E03EA45A811EDE742C /* FIRCLSCompactUnwind_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 704AF2F8052A14EDB49F1442972FC146 /* FBSDKFeatureManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 1820DDF5086BF703BB92EF583F5261A0 /* FBSDKFeatureManager.m */; }; - 707440D1D2A1E148392709B73AB9C9B3 /* MPHTMLInterstitialViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = F0FD980AEFBB5FCA43E9B93DC31B6417 /* MPHTMLInterstitialViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 70BDC6FE5BE9E7E98D2CF6672B2A492D /* MPConsentChangedNotification.m in Sources */ = {isa = PBXBuildFile; fileRef = FADE735BAE6A83A7260221701A0BB022 /* MPConsentChangedNotification.m */; }; - 70CEA4D8FCCC8748E5313DFC3AB80033 /* FBSDKViewImpressionTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = 41BE4DA692A9E612FC87053CC4970AEF /* FBSDKViewImpressionTracker.m */; }; - 70EE3978736A3F465C63ACF58DF97A27 /* MPMoPubConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 81A559E78999AE4D2B9AFE09303A7ADA /* MPMoPubConfiguration.m */; }; - 70F4D32E827E51E240FE0693A3B51366 /* GULAppDelegateSwizzler_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 2EDB90ADA9ED56EC444C22CE24A343BE /* GULAppDelegateSwizzler_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 70FCA4189E6482C6E9318938382D452A /* FBSDKBridgeAPIProtocolNativeV1.h in Headers */ = {isa = PBXBuildFile; fileRef = A21BD2E784522D6515FFA0C71641B86F /* FBSDKBridgeAPIProtocolNativeV1.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 70FF61432737006E7757971A434A5CD0 /* MPURLResolver.h in Headers */ = {isa = PBXBuildFile; fileRef = 39FAEF02EE72559A0E120D39532C11AC /* MPURLResolver.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7116221FCE021A95F4C5A49F1A7408C9 /* MPUserInteractionGestureRecognizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C5A37AFF5C126E7407B4F7219F8ADA2 /* MPUserInteractionGestureRecognizer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 714F8559DA8A5C72512DEA719D7B7D53 /* FirebaseInstallations-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 39C1BDAFA263E5AECD22151FEDDEFB3E /* FirebaseInstallations-dummy.m */; }; - 7191CF8EF6F87B18B08DE650A88A0DC3 /* MPNativeAdError+VAST.h in Headers */ = {isa = PBXBuildFile; fileRef = 52037439DED6F40B8E0F4716241CDEE5 /* MPNativeAdError+VAST.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 71F1D8547E1B96A51707DF73891878B5 /* GDTCORFlatFileStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = BE188B8A16FC9322DCB2ECEDAF33705A /* GDTCORFlatFileStorage.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 71FD6878A01E0FF4F17405F683A4B33D /* FIROptions.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B153F58CB062A9E3D9A640C518D4F9C /* FIROptions.m */; }; - 72694B79C3100537BE447B12C9A2A614 /* FIRCLSReportManager.m in Sources */ = {isa = PBXBuildFile; fileRef = E93E03EC64D3F40ABB68FB16C4BC738E /* FIRCLSReportManager.m */; }; - 728673AD553A9E596A6305250E08E471 /* GULNetworkLoggerProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 83789C392F2F96731A4B8589523C1ABE /* GULNetworkLoggerProtocol.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 72F1647F81E490C4B9150E86690EC3A4 /* MPNativeAdSourceQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 97533D5F75D6A6A71AEF127CEF57F6D6 /* MPNativeAdSourceQueue.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 73716F06976C91E6D256F75F3C17E4DC /* FBSDKApplicationDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = D32E916E946062051632D0E5DBE612CD /* FBSDKApplicationDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 738A23F8635EFC2E1F12C5C8E6B5E57D /* MoPub.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AD0D9652F1B4132919043EF34DC2C9A /* MoPub.m */; }; - 739CD00D382B3DB204C21A50061BB0FC /* FBSDKTypeUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = 64F187D3903107ADC2536B804B6FEC30 /* FBSDKTypeUtility.m */; }; - 73DFEAFE83A9F9D7373E04C7EA5FA0F2 /* FIRCLSMachO.m in Sources */ = {isa = PBXBuildFile; fileRef = DF7D27BDD4E22812CDC9B3978B78454A /* FIRCLSMachO.m */; }; - 741DBB9F69177C7578D3AE149C7E1574 /* GDTCORConsoleLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = FE938B76DD92649E97E17C2D9553D49B /* GDTCORConsoleLogger.m */; }; - 741E3305451A9A11338287F6CA1B54C9 /* MPConsentManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 407C425811C1E07AC1387FF972170846 /* MPConsentManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 745E74323EFDC6C44F144581F2FC5F60 /* FBSDKMath.m in Sources */ = {isa = PBXBuildFile; fileRef = CDE864CA7E3B75F5AC7DD6FA815AFCF3 /* FBSDKMath.m */; }; - 74E37B0932605757FD37BB96469332E4 /* FBSDKLoginCompletion+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = CE77A5C8C6CB0B51513429A87CFDE0E5 /* FBSDKLoginCompletion+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 74F9D7AA4B2E780653FED31639875253 /* FBSDKCrashObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = 50D6C4A4C346F63447DA5E0A81CB0EFF /* FBSDKCrashObserver.m */; }; - 752794A1B8D467E16FBEF8868CC12231 /* FBSDKWebDialogView.h in Headers */ = {isa = PBXBuildFile; fileRef = 538C72CEFC311481D0F68961E61D9B03 /* FBSDKWebDialogView.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 7558921767A2B717C226C3539EAFE209 /* FIRInstallationsStoredAuthToken.m in Sources */ = {isa = PBXBuildFile; fileRef = F64CBDEFB07B9B6EC584F4DABA5DA43D /* FIRInstallationsStoredAuthToken.m */; }; - 75743FC7F16A92F10B9B2102D3064554 /* FIRCLSMachException.c in Sources */ = {isa = PBXBuildFile; fileRef = 3B31EE81E09044637137D15261EB3E0C /* FIRCLSMachException.c */; }; - 758E9DF37D8F12014A9EA49C68D15314 /* MPNativeAdConfigValues+Internal.m in Sources */ = {isa = PBXBuildFile; fileRef = DBA6B3CC21109AB390353740B0099598 /* MPNativeAdConfigValues+Internal.m */; }; - 758F7E13ABE1E88DB17A2CC59E8A94B0 /* MPNativeAdRendererConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 09FF2C02EC266B00E1319521BF961022 /* MPNativeAdRendererConfiguration.m */; }; - 75BC41719002813DB777F2FE9572A880 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7E622F34474A1058AB765526BF8520FB /* Foundation.framework */; }; - 75CE9C9C5B3E5A782B127F47A351DA91 /* MPPlayBtn@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 613FFCD960C0F7FADC0619A6DE10D332 /* MPPlayBtn@3x.png */; }; - 7632D1820DC2B2038C40F8A43F3DC0B6 /* FIRCLSMultipartMimeStreamEncoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 430B6E5117696F2CE2356F5A84C34F16 /* FIRCLSMultipartMimeStreamEncoder.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 76781A49BD18D6873883C7F0E93FCD4B /* FBSDKAddressInferencer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 93B3198F5C2C4103AB18153B0A491FA8 /* FBSDKAddressInferencer.mm */; }; - 768B8580FC7B3E324DFB0500FAE9BAE1 /* FBSDKDeviceViewControllerBase.m in Sources */ = {isa = PBXBuildFile; fileRef = 22E803E9065CD04E54117DF8DF6E5A45 /* FBSDKDeviceViewControllerBase.m */; }; - 76E5713A1850B8CE7D3D3BDBBA1B3EB4 /* MPVASTModel.m in Sources */ = {isa = PBXBuildFile; fileRef = D572AB96D546D44DDB7E9B13DC71E1BF /* MPVASTModel.m */; }; - 770A4EB8F37D9FB5BB29FAC4F26CDA90 /* FBSDKGateKeeperManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 09D25BB92FE35DE365583A0E4F0F33F8 /* FBSDKGateKeeperManager.m */; }; - 772172475F877A93480610CCF7F114DB /* FBSDKAppEventsUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = 93ECBD3546A54D7CEBC0DDCFFE3F9757 /* FBSDKAppEventsUtility.m */; }; - 7723AF0B087DA608DF733CD51B6A1574 /* FBSDKModelUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C9122611C5B3FE38B61F8E45EF2796E /* FBSDKModelUtility.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 77359BA4A4335BD345CB14B628B2E6B0 /* MPLogManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 169F447C13B9E66969C6AA90549006B3 /* MPLogManager.m */; }; - 7741E7FD670D651ACB5B85537F277B49 /* FIRInstallationsIIDStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 201EF89A0869D923453D72DFC52D89D3 /* FIRInstallationsIIDStore.m */; }; - 77565625E0B9461B685A6F14A00F4513 /* FBSDKDeviceDialogView.m in Sources */ = {isa = PBXBuildFile; fileRef = CB8F0079CB7D26D75380BA19E4619370 /* FBSDKDeviceDialogView.m */; }; - 779CF94BCD0FBBB4935206A4BA271CBF /* MPVASTManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D214A3DF79EEFBBC661469D9E286325 /* MPVASTManager.m */; }; - 77B447E123E813C84556EB8FCD2D0F7E /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8D88B2688188E9D2DCFEB9F0DC0479CA /* UIKit.framework */; }; - 77B563105B266440928E6F7A06063D8F /* FBSDKDeviceRequestsHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = F5FF22883B8A0858CB0F22F845D01F06 /* FBSDKDeviceRequestsHelper.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 77D1D5958B72556CA537EE050D7B06D3 /* FBSDKMeasurementEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 04C628C3A291D5940749716D6D7C2801 /* FBSDKMeasurementEvent.m */; }; - 77D9DFECD376F8608F6E5E4BA7E82A51 /* FIRComponentContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = 61F82186454A72DF11C5CC52E9DF8CDC /* FIRComponentContainer.m */; }; - 77FC13E5482B4A98FFEA7C297CC3FDED /* MPBannerAdManagerDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = BBED2B4463E868A903BEBBC03F711DE8 /* MPBannerAdManagerDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 780DC24D52F5CDCE69CA12C74AAE642E /* MPViewabilityOption.h in Headers */ = {isa = PBXBuildFile; fileRef = 2073E072928D199F39A9FACF21274996 /* MPViewabilityOption.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 782F26A35281BD2B4BE360EBB2B4BC83 /* MPMediationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 06D395969B2EBB5BCA02301809DF7E06 /* MPMediationManager.m */; }; - 7858439C2AAD2B96795D64B5D4232C46 /* FIRHeartbeatInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 6ACBC2914F93D985326031BE043212AF /* FIRHeartbeatInfo.m */; }; - 785BC8D74AA8D6A5E51608A7A28CB3D5 /* MPMoPubNativeCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D197AA74E37E0B5774E58C0B5A0A0EC /* MPMoPubNativeCustomEvent.m */; }; - 78A928121EAF60C2561F74610A97D7A8 /* Pods-MAPS.ME-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9AAD6432F9CBA054F5118361E3C552BC /* Pods-MAPS.ME-dummy.m */; }; - 78B467E73E736C2F4CF467B6906266F6 /* MPMoPubAdPlacer.h in Headers */ = {isa = PBXBuildFile; fileRef = B1FB82AE1C58472D03C1026460955A64 /* MPMoPubAdPlacer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 78E21609CFE99F2CC126C47E4D6D411A /* GDTCORLifecycle.h in Headers */ = {isa = PBXBuildFile; fileRef = 9817D2EB3DE93156C745A7972CE7F294 /* GDTCORLifecycle.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 795C791BD387D6E5AAE481C01CC376B6 /* MPRateLimitManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 53990A469C3230E8AEB44751E77A30BB /* MPRateLimitManager.m */; }; - 799696E4320BB759534B18AA82AAD027 /* MPActivityViewControllerHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = BA6B9C62837AA9821E4F0EBEE4FC281F /* MPActivityViewControllerHelper.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 799CC4DBD4659B8224093EA9CC751532 /* FIRInstallationsAPIService.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E4AF3080BA22435DB8B8A52CFD044C1 /* FIRInstallationsAPIService.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 79A1386E88608F2D5D3C81A7E3E36656 /* MPDAAIcon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B10E88F1F8E125B124CB17B68D57D921 /* MPDAAIcon@2x.png */; }; - 79AA19D940CAA02F79AE5694BF7F5F94 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7E622F34474A1058AB765526BF8520FB /* Foundation.framework */; }; - 79BE2EF6EF0450EB2263294D8ADE5AA9 /* FBLPromiseError.m in Sources */ = {isa = PBXBuildFile; fileRef = 26F9B818A4EA688567913EA8CD5EB7ED /* FBLPromiseError.m */; }; - 7A466AE770C874A1C1E161AD21D239A9 /* MPNativeAdUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 97271906195BB429DF95B80787A2E219 /* MPNativeAdUtils.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7A8F1F11AA09A180A30E57F7AAE6E81F /* FBSDKRestrictiveDataFilterManager.h in Headers */ = {isa = PBXBuildFile; fileRef = B747649FBE325722E133571D1C955ED7 /* FBSDKRestrictiveDataFilterManager.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 7B156BCBA0E2054F47A066B83BD0B059 /* MPNativeAdSourceDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 24EFEC7A4F9BE68DA7AA649C9B534166 /* MPNativeAdSourceDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7B2F956C340258B7E125DAFFF13990D7 /* FBSDKDeviceRequestsHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 768F2B19754A0B02399D291945BDC419 /* FBSDKDeviceRequestsHelper.m */; }; - 7B59E01CE52E6396DA3CF6BE496CC4F2 /* GDTCORUploadPackage.m in Sources */ = {isa = PBXBuildFile; fileRef = B0E634ADBC115882A4BEC536C2B70EE9 /* GDTCORUploadPackage.m */; }; - 7B74BF561ECE94E97E8A9C4B674C502B /* MPNativeAdRendererConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D096A18FD1A4F80D68382B11D2D4D65 /* MPNativeAdRendererConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7BD058DF1E47EE285C72C89FBE23BC75 /* FBSDKServerConfigurationManager+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B0B28689101CE72329205323E16E5A7 /* FBSDKServerConfigurationManager+Internal.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 7BF8560F482BD93B88E27C60812A4AAE /* FIRCLSSerializeSymbolicatedFramesOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A31F9E27F0F73915497E00ACBC21244 /* FIRCLSSerializeSymbolicatedFramesOperation.m */; }; - 7C5AE77460DE205464FD1E07CF8B4F18 /* FBLPromise+All.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = BEB454A969CE2F9060C13662DCA0A898 /* FBLPromise+All.h */; }; - 7C7F9FB942D97E3CD5772BC4FA0FFF96 /* GDTCORReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = B5898D4EE27C06392B0F932E7E819FDC /* GDTCORReachability.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7C862961C2295CD795FD270879AC9303 /* MPMoPubNativeAdAdapter.m in Sources */ = {isa = PBXBuildFile; fileRef = 67DB22DC05D0D7C7BC78386175B0DD41 /* MPMoPubNativeAdAdapter.m */; }; - 7D07E768A50331E30F186BA0B9FAB98D /* GDTCORClock.m in Sources */ = {isa = PBXBuildFile; fileRef = 29C486247D229F08D7120F8394931CA4 /* GDTCORClock.m */; }; - 7D0F3FBEA5F386B8557230E34FCDC8EC /* GoogleUtilities-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = A8F1D03EC2B0CBEC4CB64D5960B6DB6C /* GoogleUtilities-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7D2E04178CB603C3AFFC9BA7EE1388F1 /* FIRCLSFABNetworkClient.m in Sources */ = {isa = PBXBuildFile; fileRef = 0769F389ED5DDAF30BA2F3369F791324 /* FIRCLSFABNetworkClient.m */; }; - 7D6C31A22160BD753F56B01FD6E5C63C /* FIRVersion.m in Sources */ = {isa = PBXBuildFile; fileRef = B4DFD201F459DF4CAFEFCA0E68626FC6 /* FIRVersion.m */; }; - 7DA69E75B05EFE1598934F1AE736F1E3 /* FBSDKFeatureExtractor.m in Sources */ = {isa = PBXBuildFile; fileRef = DC3A15AC175589C5B9AE31C0A379DC05 /* FBSDKFeatureExtractor.m */; }; - 7DA75B9AC0E428D3DF8BD6AFCC1A60B0 /* FIRInstallationsIIDStore.h in Headers */ = {isa = PBXBuildFile; fileRef = D53B0C767D495F5897CFCAB1D4197223 /* FIRInstallationsIIDStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7DA99EE6BC107B90F5A32EE7D253453F /* pb_decode.c in Sources */ = {isa = PBXBuildFile; fileRef = BDD051FCAACA7AC31BD04039027B77BC /* pb_decode.c */; settings = {COMPILER_FLAGS = "-fno-objc-arc -fno-objc-arc"; }; }; - 7DBB4283291E92DCA68DC802752298A0 /* FBSDKViewHierarchy.m in Sources */ = {isa = PBXBuildFile; fileRef = E705BEB20705B95E2C3F9904E1B624B2 /* FBSDKViewHierarchy.m */; }; - 7DC1A3B687434B548ED05D03E12C5A99 /* FBSDKGraphRequestConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = 4651719ECF3C9A328FE37CF2AC2482D3 /* FBSDKGraphRequestConnection.m */; }; - 7DC541A92D828A0B7324788E9F14C97D /* GULReachabilityMessageCode.h in Headers */ = {isa = PBXBuildFile; fileRef = 9ACF948463B44B9CBCD15839A9C71A7B /* GULReachabilityMessageCode.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 7E05E44EF5E08B4E7DAE972309DEAA6E /* FIRCLSBinaryImage.m in Sources */ = {isa = PBXBuildFile; fileRef = 4305A38DEDC7EB019C86857376B89D52 /* FIRCLSBinaryImage.m */; }; - 7E1123AC6D48E6F19959C5A6EC530434 /* MPLastResortDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = D2656512704728DB2DBB34BBE2165797 /* MPLastResortDelegate.m */; }; - 7E5CCE2C71C635DB11723B587A18108A /* MPAnalyticsTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = D94E1893022A390515E0D40305BAB20D /* MPAnalyticsTracker.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7E66AD9BCE4466541B9752189D069387 /* FIRCLSSymbolicationOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = F2A77723C64C4401E3DDFADE708D5301 /* FIRCLSSymbolicationOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7E91B1BEBF52E0FBE8ED41BFD3AFC52E /* FBLPromise.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 8A40F24A1996380E9AC544EFBB092619 /* FBLPromise.h */; }; - 7E995A582A65F47BF9E259D962C7EB13 /* FIRCLSUUID.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D5194ED560355362942995C8184ED63 /* FIRCLSUUID.m */; }; - 7EBF030079CCE544890509ADD48C1656 /* FBSDKPaymentObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = F146C0F3C905A86A8C627E45FA51B555 /* FBSDKPaymentObserver.m */; }; - 7F7086C601FF567A898741BD589AE189 /* FBSDKURLSessionTask.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C42C0336E253290E026C54D5309C6CE /* FBSDKURLSessionTask.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 7F871EC44EFCA911D8FCA7E87B3CCF7D /* FIRCLSThreadArrayOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = CF6876AC311C8307CCF05E1196BCCF8F /* FIRCLSThreadArrayOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7FB7E9D0996C29C26814C8220E22079E /* FBSDKCopying.h in Headers */ = {isa = PBXBuildFile; fileRef = 4EB679FDEBAA60F4B4F82716D10086D6 /* FBSDKCopying.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7FC0559896593DA3C5B32FF75B1E166B /* FIRCLSURLSessionAvailability.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EB5C43F6DEDA1BF31D216EFD843E623 /* FIRCLSURLSessionAvailability.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8032908D5A1979E6A5C0C82E3FEDD212 /* MRProperty.m in Sources */ = {isa = PBXBuildFile; fileRef = E8F44486DC896B885C65B4ADC94908D5 /* MRProperty.m */; }; - 80874354AF36025E48F64E477C0F037E /* FBSDKURLOpening.h in Headers */ = {isa = PBXBuildFile; fileRef = 5577343C80A341DDD0DA9BF232A537FF /* FBSDKURLOpening.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 80B79D1CAC653DCA8E459D4704E27808 /* FBSDKLoginManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 01C505769F8A9606771AD3DD4AA8AADE /* FBSDKLoginManager.m */; }; - 80C6AE0D71B7F73C71D88EF24930DDE1 /* FIRCLSRecordApplication.m in Sources */ = {isa = PBXBuildFile; fileRef = E2850A9DC951025A2D99B4A8D9767A80 /* FIRCLSRecordApplication.m */; }; - 80FE052CE9CF0128C3DEDA32AC977648 /* FIRCLSBinaryImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 362680E355591DB18D19B50066F7F436 /* FIRCLSBinaryImage.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 80FF9F4622F0C5A4082236CA04A3AA4E /* UIButton+MPAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 3CCACD3557439E6513F2334A6D470B76 /* UIButton+MPAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 81426D6A03724115102662C9030DCC8E /* MPVASTDurationOffset.m in Sources */ = {isa = PBXBuildFile; fileRef = F6D4B67F4E55C11CAF1B9B4800F976A7 /* MPVASTDurationOffset.m */; }; - 814651F196D0EAC8809A3D3FBEE6ACB2 /* FIRErrorCode.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F1D4655AFFD835E9C2C535516F85DF1 /* FIRErrorCode.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 8175D2E77882927351EBDABD287F3AB1 /* MPNativeAdConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B792C7CD1317917125C2EB53EC15E4C /* MPNativeAdConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 825F39212A3E2B082355FD90F37745B6 /* dwarf.h in Headers */ = {isa = PBXBuildFile; fileRef = 226DBDB4DFD0FA7A2D6E839D7356062C /* dwarf.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 826C0516CD5E303AB8422AC213A2F933 /* MoPub_AvidVideoAdSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C6D8A68F5E228D6D8B51D519EC81B38 /* MoPub_AvidVideoAdSession.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 827FB62D0A85F823898398B49AF8FA78 /* NSMutableArray+MPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = E1DE133DDCCAFCD9002E34D14D1D13CB /* NSMutableArray+MPAdditions.m */; }; - 82AE82BCB1C3508340F3B994F9A2E7E7 /* FBSDKAccessTokenExpirer.h in Headers */ = {isa = PBXBuildFile; fileRef = CA28F95A677C70A2D7337932F0531D36 /* FBSDKAccessTokenExpirer.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 82DDAF6EA18ADD7873D0159A7F1B6249 /* FIRCLSMultipartMimeStreamEncoder.m in Sources */ = {isa = PBXBuildFile; fileRef = D13E918BFD440A58643A7DD1C45808A2 /* FIRCLSMultipartMimeStreamEncoder.m */; }; - 836442FB8F1743DC87123F53026A4CEC /* MPMRAIDBannerCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = EB7114C8EA7CE8D886301589CED52B5D /* MPMRAIDBannerCustomEvent.m */; }; - 836AE2EE8A1B4D44F8DC66D9EEAFCAFC /* FIRInstallationsItem+RegisterInstallationAPI.h in Headers */ = {isa = PBXBuildFile; fileRef = DC562DBAE59A602484D1A827BBDEE75E /* FIRInstallationsItem+RegisterInstallationAPI.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 839C853FE7124CFC971F19F8651B66BB /* MPAnalyticsTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = F6FBAD65A0190DFEAC83A97B5BA65B49 /* MPAnalyticsTracker.m */; }; - 83BB619C62887CF14F8C34A8AAE57D7D /* MPHTTPNetworkTaskData.h in Headers */ = {isa = PBXBuildFile; fileRef = 4920541557733F272A7C6FEACBA3CF69 /* MPHTTPNetworkTaskData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 83C0BB9C1BA9928AE03DB63496094930 /* FBSDKRestrictiveDataFilterManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 71616735BFAD1A7AE7425B7AE9F8E829 /* FBSDKRestrictiveDataFilterManager.m */; }; - 83FD06F80C8DB07B46C2B29818B821FB /* FIRCLSCompactUnwind.c in Sources */ = {isa = PBXBuildFile; fileRef = E2A49853ADD371D4D590021CD3590E3B /* FIRCLSCompactUnwind.c */; }; - 8461458B1E56CB89C1142F1E545D5F86 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7E622F34474A1058AB765526BF8520FB /* Foundation.framework */; }; - 846FC499B63EF0B6E4709411D64AF09F /* MPATSSetting.h in Headers */ = {isa = PBXBuildFile; fileRef = 655C76ECA36A4F0C9FB4689791F8167F /* MPATSSetting.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 84C6A02C6EA671C778FE9FB51D876C71 /* MPVASTMacroProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = B9A478D858F62F9F068DE83A8CBA7E8A /* MPVASTMacroProcessor.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 84C839492862EC82CEB1A5E50BC85F8A /* MPPlayBtn.png in Resources */ = {isa = PBXBuildFile; fileRef = 96E758A6B074747019C2EFBC470CC4B3 /* MPPlayBtn.png */; }; - 84D517B83C99558CFC179462FEF7A4F2 /* GDTCORConsoleLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 5961AFE7F12DFDE4DCF45FBD00A23ED0 /* GDTCORConsoleLogger.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 84E10CCE343A6C2B7089239E014C31E7 /* FIRInstallationsIIDTokenStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 767861614DFB87219A3F04518AC97C7E /* FIRInstallationsIIDTokenStore.m */; }; - 84F8C88DD4E2ED263038E52CDB9DD938 /* FBSDKLoginConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 5AA5FB41E65CD965B073E4992E5A2C73 /* FBSDKLoginConstants.m */; }; - 851B117D7488525F15CB7F714AECE722 /* NSDictionary+MPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 15AFF8ED16FC6E7CB5CA92644D240135 /* NSDictionary+MPAdditions.m */; }; - 857BE047CE045AA29BE17530A6C16254 /* GDTCORReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 020291AE06EF0A2B69213AE3963D634F /* GDTCORReachability.m */; }; - 863D25D03F04E5F3AD030F1C4DF9B735 /* pb_encode.c in Sources */ = {isa = PBXBuildFile; fileRef = 6AF16A2ABB4371388376FD7A7A89A628 /* pb_encode.c */; settings = {COMPILER_FLAGS = "-fno-objc-arc -fno-objc-arc"; }; }; - 8654387B2349179E108534159FEF6747 /* cct.nanopb.c in Sources */ = {isa = PBXBuildFile; fileRef = B3928D8C6DA55C8D5C580ACE10C351BA /* cct.nanopb.c */; }; - 8666B87FD75BCF4B91E2FF9517962B8D /* FBSDKGraphErrorRecoveryProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = AF0DB818422D9C592C4F4C828C693B83 /* FBSDKGraphErrorRecoveryProcessor.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 86C22B0B48D3E7DB5105806396350A40 /* FBSDKDeviceViewControllerBase.h in Headers */ = {isa = PBXBuildFile; fileRef = ED151E2F63278D70A065FE1B011F4ED3 /* FBSDKDeviceViewControllerBase.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 86CF5170EFAC0D24216689420D802FDD /* MPVASTAd.m in Sources */ = {isa = PBXBuildFile; fileRef = 24E53F8ED1BBCD49D4949EF09D211E66 /* MPVASTAd.m */; }; - 87374F040A7E38765C3728E0ACCA358F /* MPViewabilityTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = 4432997E54BF6578DD55CBEF2812AD46 /* MPViewabilityTracker.m */; }; - 87890F004A42DC398C64143F84548126 /* MPMediationSettingsProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C84C2B5A4FDC3023F6F0D5ED07FAD44 /* MPMediationSettingsProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 87B40CD013D1BC533A7217548D6FC2A1 /* FIRCLSAllocate.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F08BB4B4FFCD21F2A613D352040F630 /* FIRCLSAllocate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8838ACE5D312457BF5812338F16CDF43 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8A32B4EC2E226FFCDC31F82E6A52B86C /* SystemConfiguration.framework */; }; - 8846AA8EA8B8FD4BF8715C5A537C8FBD /* FBSDKBridgeAPIRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D1785F3D7EA2ED726C8AE9E70A51FA2 /* FBSDKBridgeAPIRequest.m */; }; - 88507A86805FC8A59E1FB85465BD8650 /* NSString+MPConsentStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = B1CDFFDB9885F05026F30FC74314D7A2 /* NSString+MPConsentStatus.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8861E0C90501B90A6B4157D755A51405 /* FBSDKHybridAppEventsScriptMessageHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 966A875FE0F134C6EBBD87BF8594BAE5 /* FBSDKHybridAppEventsScriptMessageHandler.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 88CBD092DE39C956D260BA33F6E2CAC9 /* MOPUBNativeVideoAdConfigValues.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FEA82452BAA884766544EEBBF9282D7 /* MOPUBNativeVideoAdConfigValues.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 88E27037BB9CBA9C78EAC080F9EBB9E8 /* MPGlobal.h in Headers */ = {isa = PBXBuildFile; fileRef = DB3BC2BA5F41EF53779436068A55C31B /* MPGlobal.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8931DF356009A868EC06934367E781B5 /* FIRCLSOnboardingOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = AA10F07D4170F09A2BF08F6BF7796658 /* FIRCLSOnboardingOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 894DF601F95FE0A219BD09A145FE1C82 /* GULReachabilityChecker+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 322BE1BD10E9877A5A6E2D3B39EA1C9A /* GULReachabilityChecker+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 895ABA980BE55108FC977DA39F5F9AC7 /* FIRCLSDataCollectionToken.m in Sources */ = {isa = PBXBuildFile; fileRef = BB8BEBDDCC541B671A9F662CEC6EFD04 /* FIRCLSDataCollectionToken.m */; }; - 896E869A8723DD185ED82A4408056DCF /* FBSDKAppEvents+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 53FF4CCC1FABE78426798DE1E56EC034 /* FBSDKAppEvents+Internal.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 8A295BDA67D54CFD99E9FA5C49F9495D /* FBLPromise+Wrap.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = E3C569EF859C4D9FE4623F2C5C81A6AF /* FBLPromise+Wrap.h */; }; - 8A4641DA19A86E79B30F4C19DB82FE2D /* GULKeychainStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = B185A7CAFAE029A2FAA33A84A90D99A2 /* GULKeychainStorage.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 8A67AF5C0FAF6509FF13641CA0CAE43F /* MPNativeAd+Internal.m in Sources */ = {isa = PBXBuildFile; fileRef = 0C601DB682823E530270E63F2D9D45B3 /* MPNativeAd+Internal.m */; }; - 8A6B95EA6984F5355C48A688483132F5 /* MPViewabilityAdapterAvid.m in Sources */ = {isa = PBXBuildFile; fileRef = EF0CFCC618B66B610D84E7454BF2233A /* MPViewabilityAdapterAvid.m */; }; - 8A721501B941BBD4C1BF439D061FD7FD /* FBSDKTimeSpentData.h in Headers */ = {isa = PBXBuildFile; fileRef = 744C12FE7CEE855F769638F2ACBEFD32 /* FBSDKTimeSpentData.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 8AC6AB969218811C32327660E20F278B /* MPVASTInline.h in Headers */ = {isa = PBXBuildFile; fileRef = F5875671B8493083F1CEF086C2DDFC65 /* MPVASTInline.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8AE0FBEF9845D711F0AB63BEB3E53E2D /* FBSDKLoginError.m in Sources */ = {isa = PBXBuildFile; fileRef = E8D6BD93899EE72E28222BB656F26F1A /* FBSDKLoginError.m */; }; - 8AE9F950A6725B9C075033AF48B6C6B6 /* FBSDKCrypto.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B86307A69CC3C72C64019F46C6E4224 /* FBSDKCrypto.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 8B255F70EDC8AC9F1FBE5B86005647AA /* FIRCLSUserLogging.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EADE5B5D8A27D9F974F8D699786A2A3 /* FIRCLSUserLogging.m */; }; - 8B2BE364252A96ABF6DF7D043A1275B3 /* FBSDKAccessTokenExpirer.m in Sources */ = {isa = PBXBuildFile; fileRef = DA945CFEB939D760822C233216963059 /* FBSDKAccessTokenExpirer.m */; }; - 8B5939A9CFEEF3CDB5DB42AEAE30B2C7 /* MPRewardedVideoAdManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 52ADDFD012154C7A588A0271207FB08D /* MPRewardedVideoAdManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8B6CC835DE0A44ED6706A52D2E893BFD /* FBSDKAppLinkResolving.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EA27C27E8BE6A319F46EEFDC78434B0 /* FBSDKAppLinkResolving.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8B7ADF547FC4ACE10FDFE39D0C3CDAF6 /* FIRCLSContext.m in Sources */ = {isa = PBXBuildFile; fileRef = 9945E799861FBFB5527CD163653D0FF0 /* FIRCLSContext.m */; }; - 8BDCD24EFE5E40D90E1D1AAFAAADC4AB /* FBSDKAddressInferencer.h in Headers */ = {isa = PBXBuildFile; fileRef = 7AB75C783FDB662AD33F4856BDBF5462 /* FBSDKAddressInferencer.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 8BE7F37D566430939E0E3516341F032A /* FBSDKLoginUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = E1520C55E8430A5535D7CA76744DE538 /* FBSDKLoginUtility.m */; }; - 8C36DC6A0CAF87670A6419AF2D6FA79D /* _FBSDKTemporaryErrorRecoveryAttempter.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D00D1C6DDE0D1977FE09A5D012C925E /* _FBSDKTemporaryErrorRecoveryAttempter.m */; }; - 8CA53DC4E904722FDBA4B3C87200AA15 /* FacebookNativeAdRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = A853021E473786C032DE110C8235785A /* FacebookNativeAdRenderer.m */; }; - 8CBC1CE8D723559AE87097E4837F82F5 /* FacebookBannerCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E64C6C8BC36D1C26456222BF7065A0B /* FacebookBannerCustomEvent.m */; }; - 8CD50CCA07F6184FD3C1D0725B5A6D5F /* FIRExceptionModel.h in Headers */ = {isa = PBXBuildFile; fileRef = ADCF01B4014B785E6A268E02A4C0F261 /* FIRExceptionModel.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8D0850BE3578759557D0A1E7D38F17D7 /* FIRCLSURLSessionTask.h in Headers */ = {isa = PBXBuildFile; fileRef = D130F86CCEEEDDC974111ED15E976707 /* FIRCLSURLSessionTask.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8D09160B1513FC39001B07AA65DD747C /* FBSDKLoginManagerLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 31B8E32F09C1F35A17ECED05EA3E86A4 /* FBSDKLoginManagerLogger.m */; }; - 8D84249D59B184ED3483EE8AC2CB8CCD /* GDTCCTNanopbHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E9BC0324B44256F9848043373DA73BD /* GDTCCTNanopbHelpers.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 8DF2CC2F9D356593179E3718851D70F5 /* FBLPromiseError.h in Headers */ = {isa = PBXBuildFile; fileRef = A60E9CEBF4FBB5B9DC8BCA2F72ABA9CE /* FBLPromiseError.h */; }; - 8E1679169966C22869578CCCBF96EF42 /* FIRCLSApplicationIdentifierModel.m in Sources */ = {isa = PBXBuildFile; fileRef = C7EF157EA0534F6AEF06AE8D688C3909 /* FIRCLSApplicationIdentifierModel.m */; }; - 8E1835494345E631D6864883D7B9DA3B /* FIRCLSUUID.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D4C7A20EA95428D9E60BF3298E1B36A /* FIRCLSUUID.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8EAB7B27DD6C5A25D69857AD368716F3 /* FIRLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 2F750FF80EA8C734CF0F86AC8702C637 /* FIRLogger.m */; }; - 8EED1C46AB0A0518D2DE1CDDA9197088 /* MPCloseBtn@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D70A0E6289B60C33CD61056A535F796A /* MPCloseBtn@2x.png */; }; - 8F1AF8C0BEBFC11520A243262F755ABF /* FBSDKDeviceLoginManager.m in Sources */ = {isa = PBXBuildFile; fileRef = EA81A87A15F979110FC3A57395BFC28D /* FBSDKDeviceLoginManager.m */; }; - 8F1E4292ECBDC10EBD8B1F612EB1B5A1 /* FBSDKDeviceButton+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = C589FB56B571900BC8BD0463A76AB18C /* FBSDKDeviceButton+Internal.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 8F4FCF1DA7EB990D27C0613C7C5DD97E /* FacebookAdapterConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 6A835F54E977CDBF857C326B9889932E /* FacebookAdapterConfiguration.m */; }; - 8F782E4EEF2AAC8097A0031767802B2D /* FBSDKLoginManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D3189B05FAE4A32C2818F57DCE1676E /* FBSDKLoginManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8F81A38AF8F85676F00CC876BE663564 /* MPAdServerURLBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 42ED84B3C267C012DFC84552AEA7DF37 /* MPAdServerURLBuilder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8F9BAA65C0A197222B22CE56577A7FAB /* FBSDKApplicationDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 48B4D669B585E55A8AF693DEAE17A76A /* FBSDKApplicationDelegate.m */; }; - 9000B08254D6019B651FF2822B1C5653 /* MPExtendedHitBoxButton.m in Sources */ = {isa = PBXBuildFile; fileRef = CA423C0F1A2482E5C355023D6CEFB3C7 /* MPExtendedHitBoxButton.m */; }; - 90378B390BAAD5DD444E2B086CEFF4A1 /* GULHeartbeatDateStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B8A039103F9953CD99C228EC3DDBFF5 /* GULHeartbeatDateStorage.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 909F8C0B314CD0A57963E31EA2C96124 /* MPURL.h in Headers */ = {isa = PBXBuildFile; fileRef = 9193BBD892E8AA0FC11853055C48AB38 /* MPURL.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 90B6521BD99C26E5912F38D6E83E0D91 /* FIRCLSProcessReportOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D4BDAF59689AE95314D5B59D6DFCAD5 /* FIRCLSProcessReportOperation.m */; }; - 90CEE0DC7065FCF4531962997BB9A5FE /* GULAppDelegateSwizzler.m in Sources */ = {isa = PBXBuildFile; fileRef = E0530167921E112E6D2B348B21686B78 /* GULAppDelegateSwizzler.m */; }; - 9138565E1EEB77F3F263E035513BE5FC /* MRVideoPlayerManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 02F4FF6B450C0A7D3C06DA7A641FDA81 /* MRVideoPlayerManager.m */; }; - 913D81CD220947103F69E100F3F919FD /* FBSDKAppEventsStateManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 27984B56829FFC47959C914BFCA10633 /* FBSDKAppEventsStateManager.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 91501F9658C57826AF613B2BFEE16E81 /* FIRCLSUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = B660581BA47FF0267E1C3FD26DB8B666 /* FIRCLSUtility.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 91E5DE5B0257E0F644D4830B23B422E5 /* FIRCLSInstallIdentifierModel.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DD3931998BB79E91A64CAB641322E97 /* FIRCLSInstallIdentifierModel.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 91F1D998BEAA1F01DBEEC34C1105B333 /* PromisesObjC-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 91D5B6D34524FBC511385A6729B4F89F /* PromisesObjC-dummy.m */; }; - 91F307FA599F4F0CFB5FC1A746528D03 /* FBSDKLoginCompletion.h in Headers */ = {isa = PBXBuildFile; fileRef = BBD6562C76C121588F399F470880690C /* FBSDKLoginCompletion.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 920E0808E31354355465CD808B4E085D /* FIRAnalyticsConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 27DB1FB290B9134CD1AE55B9EC425A13 /* FIRAnalyticsConfiguration.m */; }; - 923D9C25E57A10A08FB60C14C0DC5A1F /* FIRCLSDwarfUnwind.c in Sources */ = {isa = PBXBuildFile; fileRef = FC1D22ECA07EE837606E81D89589039D /* FIRCLSDwarfUnwind.c */; }; - 9241D6FA724A64BAC8643992873D4C96 /* MPVideoPlayerViewOverlay.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D0B685CF488C834960CB7534A9E1E10 /* MPVideoPlayerViewOverlay.m */; }; - 929170D718A8AE3052402F6F810C05B3 /* FBSDKDeviceDialogView.h in Headers */ = {isa = PBXBuildFile; fileRef = A8A9FF848D3A4A0CAEF27FC84F788986 /* FBSDKDeviceDialogView.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 92D0805E53D05CA68827F30C3D17F7DB /* FBSDKGraphRequestBody.h in Headers */ = {isa = PBXBuildFile; fileRef = B55DFBA3F5028DE3FBC7BF886E768199 /* FBSDKGraphRequestBody.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 92F63FC36D4CEB41B172FF4DAA3337B3 /* FIRCLSThreadArrayOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 959859671F5E9D4A75FC5F7B2022CC68 /* FIRCLSThreadArrayOperation.m */; }; - 932CAC7EF609E2E176D80C09918B96B1 /* FBSDKSuggestedEventsIndexer.m in Sources */ = {isa = PBXBuildFile; fileRef = 075C4DF70B858A5DBD768F5B0923C013 /* FBSDKSuggestedEventsIndexer.m */; }; - 938D19AEE0A72150342E2726DE93DE58 /* GoogleDataTransport.h in Headers */ = {isa = PBXBuildFile; fileRef = 945AA54D70279B1EC6C9244FF91F432D /* GoogleDataTransport.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 93A732E5E3408558985E3EAD3E5EEED1 /* MRProperty.h in Headers */ = {isa = PBXBuildFile; fileRef = 05D6CA7AC7F98CFB2E60CD6D77384EC0 /* MRProperty.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 93E601D15FC5809E091E87056D6E4D8B /* MPVASTResourceView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5830BB82A4AE95BF068E973AFA080449 /* MPVASTResourceView.m */; }; - 941795BCAF76D63B5206389206F4DF50 /* FIRCLSConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A01FDA228A3803EEC50F531049A7885 /* FIRCLSConstants.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 94205895D350FE5EBCD0AE3DAFD531CD /* MPImpressionTrackedNotification.m in Sources */ = {isa = PBXBuildFile; fileRef = C39A9746312508F0797FBBABB8A59C33 /* MPImpressionTrackedNotification.m */; }; - 94697B1FC522D5CDA159BA710E313DF4 /* MPInterstitialAdController.h in Headers */ = {isa = PBXBuildFile; fileRef = A00AA76A58C027D6A9D1C2E8AD3D4F63 /* MPInterstitialAdController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 94E6A680F6FE45BA450F3B7B808BFD36 /* GULNSData+zlib.m in Sources */ = {isa = PBXBuildFile; fileRef = 0ADCE169C2DFDCDA84BAF06B7A69AF17 /* GULNSData+zlib.m */; }; - 9518D82AB4236204E54A588871FDCFB2 /* MPVASTTracking.m in Sources */ = {isa = PBXBuildFile; fileRef = CE45DE994F60EF4FBEF3DFAD4A209FA2 /* MPVASTTracking.m */; }; - 95A2016882661FE2E80E90F683E0F8F2 /* MPAdConversionTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = 19FF630DE179BF054F08268504BD934F /* MPAdConversionTracker.m */; }; - 95AA2F0142473CC4162A9C9C2067F2CC /* FIRCLSNetworkClient.m in Sources */ = {isa = PBXBuildFile; fileRef = AA01C3237A0F93559ADEEF2033DD6667 /* FIRCLSNetworkClient.m */; }; - 9605BA10B9A338AF46577D767B91A729 /* FBLPromisePrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 55471D69FCD1202E3799DF38F0B496CB /* FBLPromisePrivate.h */; }; - 960623BBE8E28986B47439CB896D5E11 /* FBSDKMeasurementEventListener.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BE57F9B0F52397966CCFD818292F142 /* FBSDKMeasurementEventListener.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 96082F6CB4C628062F2FE597497FEE36 /* mopub-ios-sdk-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C6BBE9AC2A833F397A1559633A8BEFA0 /* mopub-ios-sdk-dummy.m */; }; - 961FE546AB9FD363622325ADE45D6F99 /* FIRCLSByteUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B9850FA2AA2C7CC3026D043CAAE83A0 /* FIRCLSByteUtility.m */; }; - 96244699275375B6D15327552489DEA7 /* FBSDKContainerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 156BBC399CEC0450CFAA331C5FC3EFC6 /* FBSDKContainerViewController.m */; }; - 96547B08A5B8075981DD297FFEE2EEC2 /* MPSessionTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = 52DD572C811B93943E313FDC353DBC86 /* MPSessionTracker.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9680FA8E2BA22BFF782B1332EFCBDA60 /* NSError+MPAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = CF6A63C4B55F5F7C3CECC0DCCEE4A69F /* NSError+MPAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9688F82BE1C867164B755B7BD9B0ECBB /* MPConsentChangedReason.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A899DEF6E5366BA087A2CF9EA34BC72 /* MPConsentChangedReason.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 96B1DEEB2A19123EB062F651ED13F2DE /* FBSDKViewHierarchy.h in Headers */ = {isa = PBXBuildFile; fileRef = 1CE56BBAF09086D82E5C2F61AAD9BF29 /* FBSDKViewHierarchy.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 96E46630336E84490A2416C48169E7F4 /* FIRCLSCompactUnwind.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F8764A5E1B997C46F7CE597CFC67311 /* FIRCLSCompactUnwind.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9743EDC85861CF194FAD3794CB8E53ED /* MPRewardedVideo.m in Sources */ = {isa = PBXBuildFile; fileRef = D511DF32C5F107B180595A06ACB7FDF4 /* MPRewardedVideo.m */; }; - 975EE629438A0D4FD12E6EAF1A77E87F /* FBSDKAppLinkReturnToRefererController.m in Sources */ = {isa = PBXBuildFile; fileRef = 96E03CC38EBF2C35270FE9DBBF9CDF93 /* FBSDKAppLinkReturnToRefererController.m */; }; - 97620AED8EA094A972F8B3D6664E2EEF /* FBSDKServerConfiguration+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = F85C177F3787114EA6BA11CB3BEAC2D0 /* FBSDKServerConfiguration+Internal.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 97CAA9C5F7400E54F767AB0AE9D0CDC4 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7E622F34474A1058AB765526BF8520FB /* Foundation.framework */; }; - 97F785D75418A33B3B30895C212027C4 /* FIRComponentType.h in Headers */ = {isa = PBXBuildFile; fileRef = 668E54390266144F77D0D4EE724678EC /* FIRComponentType.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 98137C37B3860A9A7A32B51F9D1C93BF /* crashlytics.nanopb.c in Sources */ = {isa = PBXBuildFile; fileRef = D98750936C51805AF7CAA9DF93448CB8 /* crashlytics.nanopb.c */; }; - 987F5C0374DC4A67E2B5429F3A1C2863 /* FBSDKCodelessIndexer.h in Headers */ = {isa = PBXBuildFile; fileRef = D415223653ABC354C49E541E09592A9D /* FBSDKCodelessIndexer.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 98A72554FDCB2D2ED465A24EBFEB1849 /* FIRCLSRecordBase.h in Headers */ = {isa = PBXBuildFile; fileRef = C9CAE15BCF8B3272A9E8E8A73FF6A28A /* FIRCLSRecordBase.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 990A5F6F772521B4AF0FB83F904ED285 /* pb_decode.h in Headers */ = {isa = PBXBuildFile; fileRef = 572D03AA56560C804AE7D24134467E9C /* pb_decode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9934A4F0FC73A08CD48F8C03F98E5CA9 /* FIRCLSAsyncOperation_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 47F5580E8A5E5A2867781ED59A8D0F03 /* FIRCLSAsyncOperation_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 993D978846B7C71AE6327D949486F291 /* MPAdServerCommunicator.m in Sources */ = {isa = PBXBuildFile; fileRef = A4359A28D50110A439610CD7606A5A1D /* MPAdServerCommunicator.m */; }; - 99667E3E8864C69F9A5251FDA2E4FA62 /* MPRealTimeTimer.h in Headers */ = {isa = PBXBuildFile; fileRef = 91459713F98CBE00E4F4A06EAD82FCAB /* MPRealTimeTimer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 998C135CDAA3BB0DCD1ED88C83ACCC20 /* FBSDKLoginCompletion.m in Sources */ = {isa = PBXBuildFile; fileRef = F6EB75996E877C2CCF4A028AB758ABCB /* FBSDKLoginCompletion.m */; }; - 999188AAD897041C2BD53608419149A1 /* MPInterstitialAdController.m in Sources */ = {isa = PBXBuildFile; fileRef = F161CBD33AC7BA5D9969DDA2175F8522 /* MPInterstitialAdController.m */; }; - 99ECF34366107412F28585B91756EEE8 /* MPNativeAds.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B1F9758C6825FC17878A284A83F9DC6 /* MPNativeAds.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9AE7CD06FCB017138D9E65097F454596 /* FBSDKMetadataIndexer.m in Sources */ = {isa = PBXBuildFile; fileRef = 5EF075FC909ABF85C4767F55F355B0BD /* FBSDKMetadataIndexer.m */; }; - 9B08181EB4786BE6FE8BE0105B92DD65 /* MPBannerCustomEventAdapter.m in Sources */ = {isa = PBXBuildFile; fileRef = 29EE61EB9E880F4EB5F3D4D0BC556DEF /* MPBannerCustomEventAdapter.m */; }; - 9BD4C893AA617EA90314F64B40594C63 /* _FBSDKTemporaryErrorRecoveryAttempter.h in Headers */ = {isa = PBXBuildFile; fileRef = 170FFB1F45457129DD75B06B0F6971DF /* _FBSDKTemporaryErrorRecoveryAttempter.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 9BE6A36174D72D202DD37B2172566D4B /* MPReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D0ACA0EC333559A8D8E85327AB81F30 /* MPReachability.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9C4A3DA1CBB2C57928EA8E3F29689006 /* FBSDKCodelessIndexer.m in Sources */ = {isa = PBXBuildFile; fileRef = 477C1528E6733182C0CAEC75FC8FC02D /* FBSDKCodelessIndexer.m */; }; - 9C4BBCEAF8D3D1D2F54A625C08A742CA /* FIRCLSURLSessionUploadTask.m in Sources */ = {isa = PBXBuildFile; fileRef = E68CE24BC0C9734851465415E6CE2EAA /* FIRCLSURLSessionUploadTask.m */; }; - 9C99DD6631EF53C7FD93AFB2F78D817E /* FIRCLSSettingsOnboardingManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 579B9782511E20B022B864974C2128F5 /* FIRCLSSettingsOnboardingManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9CECC506A2D874862561025F1FFA3A4C /* MPNativeAdRendererSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = 716BAF382C88FD1CF7FB0F74354FA0FA /* MPNativeAdRendererSettings.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9CED94EF86C67904659484922A6FA655 /* FBLPromise+Catch.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 10D2FE383B555E9DF33CBBE8010D83F3 /* FBLPromise+Catch.h */; }; - 9CF316FAAEDF6696445CD05273F924DC /* FBSDKEventBindingManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 9DA04880496478F371945535BC7E4748 /* FBSDKEventBindingManager.m */; }; - 9CFD0AB5C108C0515D3C09183F613E57 /* FBSDKGraphErrorRecoveryProcessor.m in Sources */ = {isa = PBXBuildFile; fileRef = CCB7BB66C0DD94A851D46F8BC892E519 /* FBSDKGraphErrorRecoveryProcessor.m */; }; - 9D065EF907813FF600B796FC206A5A66 /* GDTCORAssert.m in Sources */ = {isa = PBXBuildFile; fileRef = 5612F192CA62DF02ADEE28C7B3E86ED4 /* GDTCORAssert.m */; }; - 9D668CD055CC9423B769EB05149591B8 /* FBSDKAppLinkTarget.m in Sources */ = {isa = PBXBuildFile; fileRef = 779B708F23B2347E6B64C56B472C4A68 /* FBSDKAppLinkTarget.m */; }; - 9D6E2FCAD8725D527340A0AB860C50A9 /* FBSDKBridgeAPIProtocolWebV2.h in Headers */ = {isa = PBXBuildFile; fileRef = 8EC73343422232DBD4799D037B603602 /* FBSDKBridgeAPIProtocolWebV2.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 9DE178EC28B9DEFA691079BB9679E55E /* FBSDKBridgeAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BA7DDDA05CE66379945AAE1F4F8B2C9 /* FBSDKBridgeAPI.m */; }; - 9DFBB41B1EE8CD2DBC74C6A2D01540A4 /* FBLPromisePrivate.h in Copy . Private Headers */ = {isa = PBXBuildFile; fileRef = 55471D69FCD1202E3799DF38F0B496CB /* FBLPromisePrivate.h */; }; - 9E07E42E10880D634CDEF2ECB983F4B9 /* FBSDKLoginManagerLoginResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 835D971CFA0A8E5CABFCA648B834F6C8 /* FBSDKLoginManagerLoginResult.m */; }; - 9E81AE6AF9B79D4A249BBEE78967D5C0 /* FBLPromise+Delay.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = E00CDD52AFADD5EFD17A32C69C38ABEE /* FBLPromise+Delay.h */; }; - 9EBDB00A85BDCD0142FC15691335CABD /* MPHTMLInterstitialCustomEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = AC65290E890725D78B78F6FC0CCD2871 /* MPHTMLInterstitialCustomEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9ECFD2EA62EF1199589A8D261739D4A9 /* FIRCLSUnwind.c in Sources */ = {isa = PBXBuildFile; fileRef = 7143E7FF82AB93597DAF450A09C3B3B6 /* FIRCLSUnwind.c */; }; - 9F4464E9B53C189E29079FCE5D105FC8 /* mopub-ios-sdk-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 0760BDE73BD4B2996E034191239627CD /* mopub-ios-sdk-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9F48A238750F49FD52473879BBC32F87 /* MOPUBExperimentProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = E8315EC545323C2671D096C3D966CEEC /* MOPUBExperimentProvider.m */; }; - 9F6624869FE7051444D2571DACD717DA /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8D88B2688188E9D2DCFEB9F0DC0479CA /* UIKit.framework */; }; - 9F7C8F1E213C262EED5FF1D769CAE129 /* MOPUBNativeVideoAdAdapter.m in Sources */ = {isa = PBXBuildFile; fileRef = B00600852DB9D12541E4BB94785E939E /* MOPUBNativeVideoAdAdapter.m */; }; - 9FA4195D47B4DE9464D246CF7710E302 /* FBLPromise+Any.m in Sources */ = {isa = PBXBuildFile; fileRef = 17B7CCEB9DB1937755D39AC2B41F7E60 /* FBLPromise+Any.m */; }; - 9FB59B1CA88D062C22DD2BAA6F1208B1 /* MPHTMLBannerCustomEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 69B5B729970BF657D0395816C451C10E /* MPHTMLBannerCustomEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A02588BE9A7E3021BC28C6D09D04AD5D /* FBSDKCrashObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = B4547C009592E5CCBBF54E6B4EF89A61 /* FBSDKCrashObserver.h */; settings = {ATTRIBUTES = (Private, ); }; }; - A06BB8F02BD517032C31028A1BA3CF14 /* FBSDKGraphRequestMetadata.m in Sources */ = {isa = PBXBuildFile; fileRef = C7F40C376A0563B032978251B0AFA7F4 /* FBSDKGraphRequestMetadata.m */; }; - A129B7496BFCFE6AB2492F7375D81346 /* FBLPromise+Wrap.h in Headers */ = {isa = PBXBuildFile; fileRef = E3C569EF859C4D9FE4623F2C5C81A6AF /* FBLPromise+Wrap.h */; }; - A132FEC9489398DDF0945D9071B26AE3 /* MPAPIEndpoints.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A0C3870C1CDDA701F6D1288CA47CA3D /* MPAPIEndpoints.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A13D89B0250706065DAD41C2CEDCBF29 /* MPCoreInstanceProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 689B71909B44C6D315ED26255530370F /* MPCoreInstanceProvider.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A149B8576CCF4634C46E787BE13F18FB /* FIRCLSReportUploader_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = FB20CA01A9BECB10E7E15F3E90D5C2B2 /* FIRCLSReportUploader_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A15CC8DB859C2CC53721D364313BA9C1 /* MPIdentityProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B87B8633CBD396D005FFB65A57525C7 /* MPIdentityProvider.m */; }; - A1EE8BFCE4E0BA2ABAC20609B921ED8E /* MPNativeAdRenderingImageLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EA3C5A33D9C1E8AE138CDD68C69C675 /* MPNativeAdRenderingImageLoader.m */; }; - A1FCABCDEC705D5813527CEF47250626 /* GDTCOREventDataObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 01465573FDAFA1F649139DF8A5A2383D /* GDTCOREventDataObject.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A20422848E32BDFF28B4C729C309C35B /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FB3C6A112211CDA7085A37214E8C6C47 /* Security.framework */; }; - A265BAECC9B3953FF80B2020202217DE /* GULNetworkConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F99F2898E4CC45FA4B01D3090241531 /* GULNetworkConstants.h */; settings = {ATTRIBUTES = (Private, ); }; }; - A2A45DF5FDA4F1D1DD575DBB80106CF0 /* FIRCoreDiagnosticsConnector.h in Headers */ = {isa = PBXBuildFile; fileRef = 015C5718742CBC0AC103C175BD154378 /* FIRCoreDiagnosticsConnector.h */; settings = {ATTRIBUTES = (Private, ); }; }; - A2F240D427B3A825E31AD32414BBE1FE /* FIRCLSFABNetworkClient.h in Headers */ = {isa = PBXBuildFile; fileRef = BDA097AE57FC5E4252FA9E163E6EACB7 /* FIRCLSFABNetworkClient.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A3078A2B1DCDE4D735FE48A11B969769 /* MPUnmutedBtn@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = F420A294AE0D493C65C20AC57A9A26D3 /* MPUnmutedBtn@3x.png */; }; - A38DC5053AAF09DC387DE8DCF6C521BE /* FIRCLSProcess.c in Sources */ = {isa = PBXBuildFile; fileRef = EE25C353A9ECDB4F2E95942A94D58AC1 /* FIRCLSProcess.c */; }; - A39086A3A7938F6235075CF103191D2E /* FIRCLSURLSession_PrivateMethods.h in Headers */ = {isa = PBXBuildFile; fileRef = D21D961446BD811641FF742E6B32E11A /* FIRCLSURLSession_PrivateMethods.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A3CB7461A6773AD45A4087455DE3999D /* GULOriginalIMPConvenienceMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 7130D7140C6FE9C846F6C6FAA911B28B /* GULOriginalIMPConvenienceMacros.h */; settings = {ATTRIBUTES = (Private, ); }; }; - A422A9425BB250102E7C6E3BDFE8F4C6 /* FBSDKErrorConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 457BAEADB79A07BE5B6F72F6DD49293E /* FBSDKErrorConfiguration.h */; settings = {ATTRIBUTES = (Private, ); }; }; - A442AF6D8E7E36F402A221FE9155BEA3 /* MPRewardedVideoError.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9897561C3EFD3DA09DD96440FB7822 /* MPRewardedVideoError.m */; }; - A44C2FD49BE881820FB6AAE5B57B5F8F /* FBLPromise+Do.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = CE430B0B5A3471C63F31CAE393C5233E /* FBLPromise+Do.h */; }; - A4529AE979D1156E7C6BF43889DB4863 /* MPMemoryCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 00603B739498C6C22C791A2AB78F9369 /* MPMemoryCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A47FE5F7C4BBE54C0C9C23370F2C3F6D /* FIRConfigurationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 52CE50E813C0CB6E62D37A873E3465E5 /* FIRConfigurationInternal.h */; settings = {ATTRIBUTES = (Private, ); }; }; - A4B4B55B71ADC4E75B01C42784D95C81 /* MPUserInteractionGestureRecognizer.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D7B53AC3608534B09156655043ED56A /* MPUserInteractionGestureRecognizer.m */; }; - A5116B955E75DD8928C1D88ABF192BB7 /* FIRCLSDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 941962D43D8ED080A252FC2C1F4DCB16 /* FIRCLSDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A52AA7A55C7AF0E3D8325DEDDE2F6ABE /* MPAdTargeting.h in Headers */ = {isa = PBXBuildFile; fileRef = F46EBEB4E9EF87BD238F499E2FB95E93 /* MPAdTargeting.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A547220839D67BB7E4CE26D2583BE8FD /* MPConsentChangedNotification.h in Headers */ = {isa = PBXBuildFile; fileRef = 602EB1B29BD715FAF352640E672C8846 /* MPConsentChangedNotification.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A56C615EFEAA8CF767D52D2F05F43BD2 /* FIRCoreDiagnosticsInterop.h in Headers */ = {isa = PBXBuildFile; fileRef = EF26C249AA0D11F4BEA973C41B466C66 /* FIRCoreDiagnosticsInterop.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A6311E9BB95FA1D4EC4A1B4A138CB148 /* MPNativeAdConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 96F93CB0D0E231E2B13989B1EB33113A /* MPNativeAdConstants.m */; }; - A635560049C382A30474A5DA9B68AB8C /* MPStreamAdPlacementData.m in Sources */ = {isa = PBXBuildFile; fileRef = 10F83B8580E47159C94FA05B43A920A8 /* MPStreamAdPlacementData.m */; }; - A63DEC61D88647A54F4DC231BEE68E37 /* FBSDKModalFormPresentationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1951E99C9A1940B7B6BDA954D073BAE2 /* FBSDKModalFormPresentationController.m */; }; - A68FB662A147CB1B7E8F414B9809892F /* FBSDKProfilePictureView.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E801AAC0924C54177A9DB610CBDE680 /* FBSDKProfilePictureView.m */; }; - A69B9917BC4E37FCCF14B35D11A97B0C /* MPNativeAdData.h in Headers */ = {isa = PBXBuildFile; fileRef = 8DF01BF3644DE8D55CB89C5D73774798 /* MPNativeAdData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A6A03F54152D344C7C65DDCAB7EEB1BC /* FBSDKURL.m in Sources */ = {isa = PBXBuildFile; fileRef = 272D71E886E7E0C4B9DCBF258B000834 /* FBSDKURL.m */; }; - A6C306D5A1143ECE63F34DC0D158FC00 /* FBSDKCrashShield.h in Headers */ = {isa = PBXBuildFile; fileRef = 92D89B7674DF3CC845A670D05FD59C57 /* FBSDKCrashShield.h */; settings = {ATTRIBUTES = (Private, ); }; }; - A6CED9B56633EFBBD7A9EEA14640D3AE /* FirebaseCrashlytics-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E37656F237661D9E974F4D92B3037597 /* FirebaseCrashlytics-dummy.m */; }; - A7059D455854AC776B0B9FBC7766EFDC /* MPUnmutedBtn@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 178DF744509E149AA5E2706130C399B7 /* MPUnmutedBtn@2x.png */; }; - A73A366B4FEF1C588D30C6C0263A2280 /* FBSDKLibAnalyzer.h in Headers */ = {isa = PBXBuildFile; fileRef = 898AEBA83AAE68448347BF534C69079E /* FBSDKLibAnalyzer.h */; settings = {ATTRIBUTES = (Private, ); }; }; - A7C322038322A67FB79FCEF6C8F14955 /* MPNativeCache.m in Sources */ = {isa = PBXBuildFile; fileRef = A768C6F4ECAA71C67BE046B400DF33D7 /* MPNativeCache.m */; }; - A83B0C9C722E148E4F5870C750445D6A /* MPWebBrowserUserAgentInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 12942E95450BEACE0C712F6D67AFEC63 /* MPWebBrowserUserAgentInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A856C9D0657505694C900C0576996E8A /* MPNativeAdRequestTargeting.m in Sources */ = {isa = PBXBuildFile; fileRef = 245D12E81EC5DD2D0D00418F125A3708 /* MPNativeAdRequestTargeting.m */; }; - A8DB9824EABB0031FFD34C784BF3CE11 /* GDTCORRegistrar.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F3A6CC51BD9267B2C86712FCDB73704 /* GDTCORRegistrar.m */; }; - A8F5926361672E90BB80EBF512B2CA9A /* FBSDKFeatureExtractor.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C6DF37E36DD4D18DABA3E364A122602 /* FBSDKFeatureExtractor.h */; settings = {ATTRIBUTES = (Private, ); }; }; - A9206D9832CCBA289352C307AD229F7A /* FBSDKInstrumentManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A0A9F1E6F77B8B13E8A26A67CE648FF /* FBSDKInstrumentManager.h */; settings = {ATTRIBUTES = (Private, ); }; }; - A920F8FA40805597048A11A4F94CC98E /* FBLPromise+Race.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = F4CB01AA9AD13CB18A92D05BE1D130DA /* FBLPromise+Race.h */; }; - A980A312BB8316E21684645C350916E1 /* MPBaseNativeAdRenderer+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = EE420C9E6A86C5FBDF665940971F34FC /* MPBaseNativeAdRenderer+Internal.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A988C6721469D1B93CB8BC4CA4E1EE0E /* GULMutableDictionary.h in Headers */ = {isa = PBXBuildFile; fileRef = 13A3DFF61BC403AAA3457FFF182AD5AC /* GULMutableDictionary.h */; settings = {ATTRIBUTES = (Private, ); }; }; - A98CC72E14CE85A1D978AE9B16AAF7FA /* MPImageLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F075B3C27EAE9395D49E5B682476752 /* MPImageLoader.m */; }; - AA6526AB4DF674E2175B6E7C6BEBAE71 /* FIRCLSSignal.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E4BAA7343B7F32D07C265ED1D8A2288 /* FIRCLSSignal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AB145E29BC5DFCB463392E78611B519A /* FIRCLSApplication.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AD06EB7CED79269EC3F40892B1D7811 /* FIRCLSApplication.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AB74881C8085A6DA48305365FE49CCD6 /* FBSDKDeviceButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 1BF338B5B623CD26B5522E29EDFAD3D3 /* FBSDKDeviceButton.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB7806C94B1B70E8D077F347A6473C3D /* FBLPromise+Always.h in Headers */ = {isa = PBXBuildFile; fileRef = 37777354812FE47A944BD0FEE1B09B96 /* FBLPromise+Always.h */; }; - AB828CAC986D239A59ABD050079B3AAE /* MPVASTCreative.m in Sources */ = {isa = PBXBuildFile; fileRef = 92FC85A9B53F3B4792D7E3BE4DFF4E0C /* MPVASTCreative.m */; }; - AB8C88D3240B018A49B8EFA21D82914A /* FBSDKCodelessParameterComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EED7D2A5C8ACBB64FE0F34920A94153 /* FBSDKCodelessParameterComponent.m */; }; - AC11E4A627F9AD4B76C396431FA67DB6 /* FIRCLSFABHost.m in Sources */ = {isa = PBXBuildFile; fileRef = E39716E612F58E64CA25C63391653747 /* FIRCLSFABHost.m */; }; - AC34336AD17D5EE06592D3C086971352 /* FIRInstallationsVersion.m in Sources */ = {isa = PBXBuildFile; fileRef = B4AF9B5571F3247AB21D62F4859CB9CA /* FIRInstallationsVersion.m */; }; - AC5792586B0B11A88FAE5BE6B1A167FC /* FIRBundleUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C04688AF12D0731B86D2173C3805671 /* FIRBundleUtil.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AC61CFE710BE9831BE69FBD28AEA1E9D /* FBSDKDeviceLoginCodeInfo+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 95776AB0AB81357DDEDC6184CB4A2289 /* FBSDKDeviceLoginCodeInfo+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - ACE067B8B930147B485E594D9E8991C3 /* FIRCLSSymbolResolver.h in Headers */ = {isa = PBXBuildFile; fileRef = E1A12FB62545C0248DC8ED6FD6DBB88A /* FIRCLSSymbolResolver.h */; settings = {ATTRIBUTES = (Project, ); }; }; - ACE5A5A9EE5A390F7B8CF89869FF0237 /* FIRInstallationsStoredAuthToken.h in Headers */ = {isa = PBXBuildFile; fileRef = EB7F69C758BF2AC1D1D6E6F58060AA00 /* FIRInstallationsStoredAuthToken.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AD4278DC279247A02719E34504A77055 /* FBSDKDynamicFrameworkLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = DA0D0593586D782C9522C7ABEFA3ED61 /* FBSDKDynamicFrameworkLoader.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - AD8C5FC092A1E29618955FAE3D2393D4 /* NSDate+MPAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B10D13E51B994B78AF5A26820D1FEC4 /* NSDate+MPAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - ADAE990ED96EAF7E60282B64DC8F3A51 /* GDTCORTargets.h in Headers */ = {isa = PBXBuildFile; fileRef = 762EF574B1B3603C4A3C95BB8BF57801 /* GDTCORTargets.h */; settings = {ATTRIBUTES = (Public, ); }; }; - ADFFFE613C32BE7F96DFDB41F6F4B83D /* MPNativeAdError.h in Headers */ = {isa = PBXBuildFile; fileRef = B63B211CE89CAA85880C54C23FBA980A /* MPNativeAdError.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AE085290F5C1F2ED8FCABE8F75058048 /* FacebookInterstitialCustomEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 193B020564F2B2FD41D7659EF313E73D /* FacebookInterstitialCustomEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AE0F9D7A7D965C88F7C6F45C45BFD5C8 /* GDTCORLifecycle.m in Sources */ = {isa = PBXBuildFile; fileRef = BF49A6CFFD4B143C9F685DD1F2E64455 /* GDTCORLifecycle.m */; }; - AE5EA2D4D0C9A524AF9FC7B6DA52FF4D /* GULSceneDelegateSwizzler.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D59315AD801D0805A2C66A20CDFCFA0 /* GULSceneDelegateSwizzler.m */; }; - AE704E581396B3FAAB9CA0F17C15D9CC /* FirebaseCore-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 60E8AF12F0C5021D31CA113B8D72EF6C /* FirebaseCore-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AEA08C192DB61F3BDB57D3054A32DED8 /* MRBundleManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 0AE47E0C7C58C3899010069D11025EC8 /* MRBundleManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AEEAC5A0D1C02F465F0B1F9C328B2281 /* FBLPromise+Async.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 51787E462F9853181C9270EE1E23E41C /* FBLPromise+Async.h */; }; - AF524D9BF722D0B8CFED5EB7F5ECD886 /* MRController.h in Headers */ = {isa = PBXBuildFile; fileRef = 479960BF83D02BBA600BF8E16D8CB3A5 /* MRController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AF5385F1C2E9B295E65DEE4CD6A86E7F /* NSHTTPURLResponse+MPAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = EA5FD4798893B6983BA67539BA02DA02 /* NSHTTPURLResponse+MPAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AF6A8F4E7AE5A059E3404A8FDC3633A8 /* FBLPromise.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A40F24A1996380E9AC544EFBB092619 /* FBLPromise.h */; }; - AF79B76A4BDEB6319CE95D7420FC8433 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 398D9C73F7A839DFACDA7E9381235B63 /* AVFoundation.framework */; }; - AFD22090F5A62987258202AF974882B0 /* FBSDKColor.m in Sources */ = {isa = PBXBuildFile; fileRef = CB7262061D21BA0CBCED849F6462BD50 /* FBSDKColor.m */; }; - AFF3C74204577C3C3726188C0FDB795B /* FIRConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 33ECAF322502355A7771CB5C018712BB /* FIRConfiguration.m */; }; - B0384E2272E1CB95BCB3A4DC495F2224 /* FBSDKBridgeAPIProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = CB649F2C8A374A8C50B0735B42FB2B54 /* FBSDKBridgeAPIProtocol.h */; settings = {ATTRIBUTES = (Private, ); }; }; - B056851FA68CB56894830D9BC276EFE9 /* MPMoPubRewardedVideoCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = C2DB1E45D2776332856E0F440BABEA51 /* MPMoPubRewardedVideoCustomEvent.m */; }; - B059A8B319A76BE9A3637FAD830D9594 /* FBSDKGraphRequestMetadata.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B17F1B0E2D795F5BBD93ADADF3C9FA7 /* FBSDKGraphRequestMetadata.h */; settings = {ATTRIBUTES = (Private, ); }; }; - B0B6C22C0E40FD9370866E2D1B19D9E4 /* UIView+MPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 0678FE016B2DFDDD306A356AA16276CD /* UIView+MPAdditions.m */; }; - B0C975B48B2D3A73BDA51BFB6AFB508D /* MPGlobal.m in Sources */ = {isa = PBXBuildFile; fileRef = F438283F7F2D105FBFB980A2DB1EFB1F /* MPGlobal.m */; }; - B1322AD7E338BD1F83D4C1F403B85DBF /* MPInterstitialAdManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F4C6B7F9F945BCDC1D2570556941C73 /* MPInterstitialAdManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B13A55211C521D4AE5741922B4160394 /* FIRCoreDiagnosticsData.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C9D123AD8272A1886DBF0DCC00A81D2 /* FIRCoreDiagnosticsData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B14978598D0A5EE568385265662B9683 /* MediaPlayer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E1456C3286CD5AF8101B0A4F0E44F929 /* MediaPlayer.framework */; }; - B166100B024372E7C748937B49C390DC /* FIRCLSDataCollectionArbiter.h in Headers */ = {isa = PBXBuildFile; fileRef = 81564D80E709216F4506C39E82682511 /* FIRCLSDataCollectionArbiter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B18F42E81204D80FD1BD14DD11B5BF7A /* FBSDKErrorReport.m in Sources */ = {isa = PBXBuildFile; fileRef = F00B68518FF6DF077950DFBF0E728B52 /* FBSDKErrorReport.m */; }; - B190F06EBF0D9B4634B847C97EAF6FEA /* MPStaticNativeAdRendererSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = 3701BBDFB1DD8EFDF8920A26561EF0DD /* MPStaticNativeAdRendererSettings.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B1BD20350FE34CE4AC61262D8ED4EA2E /* MPNativeAdRequestTargeting.h in Headers */ = {isa = PBXBuildFile; fileRef = 927376525CE83C1EDB8B91AFEB98D554 /* MPNativeAdRequestTargeting.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B1DA2B594C654861ECCF1BE312B86DB5 /* FIRCLSReport.h in Headers */ = {isa = PBXBuildFile; fileRef = CEAA2C0E6036AED6BD3B183E64DFF845 /* FIRCLSReport.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B22BC7DC50CE7EFB53FE1F58E7A4B4BB /* MPImageDownloadQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 0838ABB33656947F8A606B298E4D4697 /* MPImageDownloadQueue.m */; }; - B2DC422B4058C15026ADA15DE39F179F /* FBSDKCrashObserving.h in Headers */ = {isa = PBXBuildFile; fileRef = 16EADB58B34000FF17C58604465CC694 /* FBSDKCrashObserving.h */; settings = {ATTRIBUTES = (Private, ); }; }; - B2F75843DA927EA114D9F6F00C4C21A8 /* FBSDKMeasurementEventListener.m in Sources */ = {isa = PBXBuildFile; fileRef = 99DCB3220D0A15AB502E90628AACA5ED /* FBSDKMeasurementEventListener.m */; }; - B2FF1B9BE29CC5BF7BFA6FF6F73816F4 /* MPConsentDialogViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 44C769EAB81A599496AE04D93219FD31 /* MPConsentDialogViewController.m */; }; - B31BC21157B3EA8F1AEA06202C7C1D8E /* FBLPromise+Retry.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 92508B11E4711DFE2426DF55E1526E60 /* FBLPromise+Retry.h */; }; - B339E6D8F3F26D40E543365AACE9C458 /* FBSDKDialogConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = D41740737D7D65FD1EDAD94E25926D12 /* FBSDKDialogConfiguration.h */; settings = {ATTRIBUTES = (Private, ); }; }; - B34EE7385E16A363CFABBA516CE54639 /* FIRCLSHost.h in Headers */ = {isa = PBXBuildFile; fileRef = C114A9B9E1AED4D27E8CAF8CF3E6D64C /* FIRCLSHost.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B3D35783D2FCD6170A7C9B8A7296BA2C /* FacebookNativeAdAdapter.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EA069EFB3049E3A7B60130A4BD5D606 /* FacebookNativeAdAdapter.m */; }; - B3FF2BB02E2B32D7181C2CBBBA384D5A /* FBSDKProfile.m in Sources */ = {isa = PBXBuildFile; fileRef = A514772615FC436FC350277555010B19 /* FBSDKProfile.m */; }; - B411D4F07A79F09949EDD3AB9C5E850E /* MPForceableOrientationProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 44F415FC9500027A9C088CB4268519D5 /* MPForceableOrientationProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B44AAF0E725F345AE4029FE8F06FC8BF /* FirebaseCoreDiagnostics-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 75F0F0CBB17EED30B34F48D9877EB8EF /* FirebaseCoreDiagnostics-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B4760D940A02C7791F82C797E0C1EA9B /* MPBLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = DDB8687B80AA503F0FE43323A4A6EDE3 /* MPBLogger.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B48C66154561F496F9958F34FCCB75A7 /* GDTCOREvent+GDTCCTSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D17C78ADCC152D5E6E1B713B98248B5 /* GDTCOREvent+GDTCCTSupport.m */; }; - B507C76B6D8D94B3B2B5EE9C95F0C2BD /* MoPub-FacebookAudienceNetwork-Adapters-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 241633A4273109C52CF7080944E29E92 /* MoPub-FacebookAudienceNetwork-Adapters-dummy.m */; }; - B526F7450AD0DF8F56B8E3AAAF48D301 /* MPURLRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 73A1343655B87B87FCE8289DDCC312B7 /* MPURLRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B5520006591764BE52836E99DAF852E4 /* FIRCLSRecordIdentity.h in Headers */ = {isa = PBXBuildFile; fileRef = 0CC330BDC4FC8AAE8E7D51445487FDE1 /* FIRCLSRecordIdentity.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B561CA0E43DB6009C98DEE54A620B138 /* GDTCORTransport.m in Sources */ = {isa = PBXBuildFile; fileRef = C308366EDCBDF0482B67674DB6BDAF17 /* GDTCORTransport.m */; }; - B59DB1FBE68F68F2195BF387B44C5859 /* FIRCLSUserLogging.h in Headers */ = {isa = PBXBuildFile; fileRef = E63DC0B8F8FBE92B8BC8447FC76E3254 /* FIRCLSUserLogging.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B60189E62C3B6175ED602468C4274FCB /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7E622F34474A1058AB765526BF8520FB /* Foundation.framework */; }; - B6AA4AD38A0A1BD91B7534A1C325D441 /* MPVASTCompanionAdView.m in Sources */ = {isa = PBXBuildFile; fileRef = 74DD172345CA56DF751E17B590AA16D0 /* MPVASTCompanionAdView.m */; }; - B6BD1618685614F02A4CB7B283990402 /* MPImageLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = A86651C6B06838313991106BF034285D /* MPImageLoader.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B6E0B692B0BC3FD1182ECFE4D71A61F3 /* FBLPromise+Always.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 37777354812FE47A944BD0FEE1B09B96 /* FBLPromise+Always.h */; }; - B72B4F6F1CC8C9E66147104E7572B194 /* FIRErrors.m in Sources */ = {isa = PBXBuildFile; fileRef = 862AFAFFF836A0DB4276C126500CD3DE /* FIRErrors.m */; }; - B75E6F1450FAFA33F6B2E14DDEDC0998 /* FBSDKMaleSilhouetteIcon.h in Headers */ = {isa = PBXBuildFile; fileRef = C14371F530DDF4D9F250F96A2B6AA421 /* FBSDKMaleSilhouetteIcon.h */; settings = {ATTRIBUTES = (Private, ); }; }; - B79DC3982448D8308BF796E59F920250 /* MPAdConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 8049CFBC0A5A3BF3A7E3EAC76FFF6FC5 /* MPAdConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B7A33BAD9064AA0AD1C4EAA2E09DA605 /* MPPrivateRewardedVideoCustomEventDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 108253A30ED3D068BEE65AC6122695EC /* MPPrivateRewardedVideoCustomEventDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B7ACD43333CF5FCABB359B756546F44D /* FBSDKGraphRequestDataAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = A5A1E1AF6AC62B515EF26D84B9EFDE88 /* FBSDKGraphRequestDataAttachment.m */; }; - B83D1BE0E09EB8E323EC25E273FA1074 /* FBSDKLoginError.h in Headers */ = {isa = PBXBuildFile; fileRef = EB3DE00E8ED997E2ED90C340D08217CC /* FBSDKLoginError.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B8B78A5A040E6E278AB174DB7FC4BEB2 /* FIRInstallationsStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = AD3D91845CFBF7641C53E876757A2A18 /* FIRInstallationsStatus.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B8CEE522B8B51C66892A174047AE6DB9 /* MoPub_AvidDeferredAdSessionListener.h in Headers */ = {isa = PBXBuildFile; fileRef = 2EBB32E5262EDB52408506A8D23BC143 /* MoPub_AvidDeferredAdSessionListener.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B93B6572393D60C4D642F0EB97A6212D /* FIRCLSdSYM.m in Sources */ = {isa = PBXBuildFile; fileRef = 3371B68B59A8A529EA0CAC88634B8CE3 /* FIRCLSdSYM.m */; }; - B96B1D5D59BE19D38C871127E5793FF1 /* FBSDKUserDataStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 105C0D221E96621B0758498B90A5F78D /* FBSDKUserDataStore.m */; }; - B97ABBF606D9B8950EC010D4A1AA1A05 /* FIRInstallationsAPIService.m in Sources */ = {isa = PBXBuildFile; fileRef = EA6950905567E2EE57EE50535AF02CDC /* FIRInstallationsAPIService.m */; }; - B98967648F50D17AFA030A18BE7FAEEA /* MPAdImpressionTimer.h in Headers */ = {isa = PBXBuildFile; fileRef = 52D3E8FBC077711468AC8CE2D0C0A3B5 /* MPAdImpressionTimer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B9987FFAE0DE39279B705AD89B3CE4D0 /* FIRExceptionModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 54456CF49552BF0EF82F68C9F02E6BA7 /* FIRExceptionModel.m */; }; - B9FC019FF030AA481604045125FEFBA8 /* FBSDKSettings+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = BEE78566C29E3922B044231B86E67331 /* FBSDKSettings+Internal.h */; settings = {ATTRIBUTES = (Private, ); }; }; - BA37EFEAE3102B9B77D362DD8AFF26B9 /* pb_common.h in Headers */ = {isa = PBXBuildFile; fileRef = F7CCD25B0D2AB19234EE1BF816BC753A /* pb_common.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BA7D435B074FCCA3F54A13D6FD8740EE /* MOPUBPlayerView.h in Headers */ = {isa = PBXBuildFile; fileRef = 18ACA8724F0F50ACD1DBFF464A5E9407 /* MOPUBPlayerView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BA87C3D390594CB71AA0331622EB8EAC /* FIRCLSURLSessionDataTask.h in Headers */ = {isa = PBXBuildFile; fileRef = 3355824F72E69EE67BE5F63F7E87F659 /* FIRCLSURLSessionDataTask.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BA9D696C1078C68CB044CDA99A2E37B2 /* FBSDKGraphRequest+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 209C35E1539CC5A6EBA80687B13EA2B3 /* FBSDKGraphRequest+Internal.h */; settings = {ATTRIBUTES = (Private, ); }; }; - BAC0CE1A52FA33E98BEC553ACD9C85E5 /* FIRCLSUnwind_x86.h in Headers */ = {isa = PBXBuildFile; fileRef = A6AA483A3155F0243E97660634B8D8D2 /* FIRCLSUnwind_x86.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BAF170BD66CF3F1353CE5706B8757D62 /* FIRDiagnosticsData.h in Headers */ = {isa = PBXBuildFile; fileRef = 66D3D4FC9484F0491598806842479651 /* FIRDiagnosticsData.h */; settings = {ATTRIBUTES = (Private, ); }; }; - BB394C2162B2E80C648A0C258026E2DE /* FBSDKBridgeAPIResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 361706AFE7E009C15E533A3D79D8F690 /* FBSDKBridgeAPIResponse.h */; settings = {ATTRIBUTES = (Private, ); }; }; - BB600F1A464E10FD3C6BC82FD4107434 /* FBSDKURLSessionTask.m in Sources */ = {isa = PBXBuildFile; fileRef = 9625FE3146AFA08C097760D0E77F9C02 /* FBSDKURLSessionTask.m */; }; - BB60870E4DC9505A62E4BF4628294C63 /* FIRCLSURLSession.m in Sources */ = {isa = PBXBuildFile; fileRef = 89279793F9A526B0377ACD303258633D /* FIRCLSURLSession.m */; }; - BB6CA36DB789362132DF000BD1E44FDB /* FBSDKServerConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = E8DC29E027B7602C5C18D1D8ADED3B88 /* FBSDKServerConfiguration.h */; settings = {ATTRIBUTES = (Private, ); }; }; - BB7B60B1F72F451A41A119DB8563C37C /* MPVASTIndustryIconView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C5933D11E9EB4D69777185A0A94402C /* MPVASTIndustryIconView.m */; }; - BB8F8D0CA03C5F26AD4571BF03FAE3EB /* GDTCOREvent.h in Headers */ = {isa = PBXBuildFile; fileRef = CB9E627CDFF3E4BBC4B0931416099EE1 /* GDTCOREvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BBDCEE3A76D594BD1354FA5EE4408F50 /* FBSDKServerConfigurationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 629C269ED1B901DA6E35ABECC58DFB27 /* FBSDKServerConfigurationManager.h */; settings = {ATTRIBUTES = (Private, ); }; }; - BBDF9CDD0AA2805D79D6722902D70A46 /* FBSDKDeviceLoginCodeInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B131F514D6F49BC7F68CDBE82D8D3F1 /* FBSDKDeviceLoginCodeInfo.m */; }; - BBE2DABEC09341AA55B702EC7654524C /* MPAdConversionTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = 9495C0D407A5084BFB7866043ED2E21F /* MPAdConversionTracker.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BC015EF9D4D69A4C3B6A12AE5B069BA7 /* FIRCrashlytics.m in Sources */ = {isa = PBXBuildFile; fileRef = A06AB318A571F73BA73F7820EEA742FC /* FIRCrashlytics.m */; }; - BC04B1F6D658246A40EB33DB5BDFCF6B /* FIRCLSHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = C9F344B41D9C19F0AE6498C7E902BBFC /* FIRCLSHandler.m */; }; - BC1AE6AF335DD592900B424AD25C153D /* MPInterstitialAdControllerDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = CE42AFD6D0EE8CAA561102A302064F29 /* MPInterstitialAdControllerDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BC5F4E976013FA6C9A403872C71AA0EF /* GDTCORUploadCoordinator.h in Headers */ = {isa = PBXBuildFile; fileRef = 69347F26F6C2E168061FAB817E6FC305 /* GDTCORUploadCoordinator.h */; settings = {ATTRIBUTES = (Private, ); }; }; - BCA6DED2CB3CB59F6A62AAEFA530C3F1 /* MPVideoPlayerFullScreenVASTAdOverlay.m in Sources */ = {isa = PBXBuildFile; fileRef = 18549790F80E0A33EC41D4492B7FA73B /* MPVideoPlayerFullScreenVASTAdOverlay.m */; }; - BCC9783091DED50008DBF49817BCDB0A /* MoPub_AvidDisplayAdSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 602D88B00295014C6D3416B1B564C904 /* MoPub_AvidDisplayAdSession.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BCDDD0D362C9A8BCD65B3EC11F70CA48 /* FIRErrors.h in Headers */ = {isa = PBXBuildFile; fileRef = F78641950FCE3D8AA36E5E33D27DED54 /* FIRErrors.h */; settings = {ATTRIBUTES = (Private, ); }; }; - BD180EDAF46C2876FED6F8F8B3E4CD30 /* MPTableViewAdPlacerCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 04AB938EF519924E1E86F4753C744F77 /* MPTableViewAdPlacerCell.m */; }; - BD70F91B6ACEBCB344F6601A40B980A0 /* MPImageDownloadQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = A7B6959A2B61031F6035C416937E7160 /* MPImageDownloadQueue.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BD790B96988940CEB3705ADCE6011F6F /* GDTCORAssert.h in Headers */ = {isa = PBXBuildFile; fileRef = B2ECC7E20300D7768709576B691E72EE /* GDTCORAssert.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BDE0B1140FD18657B6BEFFF6A34C134D /* FBSDKBridgeAPIProtocolType.h in Headers */ = {isa = PBXBuildFile; fileRef = B1FF2D47493DFA173BC3862D49D9EC29 /* FBSDKBridgeAPIProtocolType.h */; settings = {ATTRIBUTES = (Private, ); }; }; - BDFF8400A71E11AB8A1351E4FE89CE1C /* MPClosableView.m in Sources */ = {isa = PBXBuildFile; fileRef = FFBEE32B8EFD8D442038F94B46B33B01 /* MPClosableView.m */; }; - BE043C544093129B3D332E22B013326C /* FBSDKBridgeAPIProtocolNativeV1.m in Sources */ = {isa = PBXBuildFile; fileRef = B57053868DD7EAB72E0E75813CCDC629 /* FBSDKBridgeAPIProtocolNativeV1.m */; }; - BE2C1A16EFF3B487C4759CC1A1E8DA84 /* MPError.h in Headers */ = {isa = PBXBuildFile; fileRef = F7EF0BD63C84A985A8D40334BD9C845C /* MPError.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BE7CC6821B756E937DF2C33C46049437 /* MPNativePositionSource.m in Sources */ = {isa = PBXBuildFile; fileRef = CEDB48D4E2F6F3F770A53D31F1856795 /* MPNativePositionSource.m */; }; - BEA1BC7E39640B5EFEF3E3F3A7304809 /* FBSDKAppLinkReturnToRefererView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3032857EDF5B64F97C30227E23B7EF49 /* FBSDKAppLinkReturnToRefererView.m */; }; - BEA5A75A2FCD15D8E6BEEE6F9D4CCD5A /* FIRComponentType.m in Sources */ = {isa = PBXBuildFile; fileRef = 33616668082F3F26DE0CE5DF7426B9BF /* FIRComponentType.m */; }; - BF14F9FB8598E02E71BB106DAF499A85 /* FIRCLSFABAsyncOperation_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 09CCCF25AE8724829255006464435D7B /* FIRCLSFABAsyncOperation_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BF18D0E1989CA160ECC324AF463590E8 /* FacebookNativeCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 3CDBFB2925E6DF8B3BDCCCAED2DE688A /* FacebookNativeCustomEvent.m */; }; - BF4E5A07271C2A2F1F796A4B21E30502 /* FIRCLSMachOSlice.m in Sources */ = {isa = PBXBuildFile; fileRef = 031DE2703E31F3BB53D05A03FF3C4E28 /* FIRCLSMachOSlice.m */; }; - BF8F034F6F2D216DAB6DB6DC781ABCCC /* MPCollectionViewAdPlacerCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 961C0A65DBF056A1E8230D17274B3D31 /* MPCollectionViewAdPlacerCell.m */; }; - BFA0C793B683420C6AA9CFD5A3FC39C9 /* MPNativeAdError+VAST.m in Sources */ = {isa = PBXBuildFile; fileRef = 709EFBD2F6AE1737C22A904822B4426B /* MPNativeAdError+VAST.m */; }; - C00663E9E4E926A5817AEF04C7F9D3EF /* FacebookAdapterConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = CB669D3EFDC482E5F2B3E7B24A14B7DD /* FacebookAdapterConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C081EF908C4CDDBD27A2664E384FCB71 /* FIRCLSNetworkClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D6C2071AFC4F1D068718421492696D6 /* FIRCLSNetworkClient.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C08DCB181595BECB915ABC0B9B565E6F /* MPVASTIndustryIcon.h in Headers */ = {isa = PBXBuildFile; fileRef = 02C1942E4257913823227F7A6D847739 /* MPVASTIndustryIcon.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C0A30CE516796258299416AF3D12027D /* FBSDKAppLinkReturnToRefererController.h in Headers */ = {isa = PBXBuildFile; fileRef = 284F3FFEDAD59D2F26C9A2AFA013AFA8 /* FBSDKAppLinkReturnToRefererController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C0C56216E937946B350B50A16DAA8B6B /* MPConsoleLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B9D33C5E8A0E9DA583CB234D92CC884 /* MPConsoleLogger.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C0D8AA00761C253306934500D944ABB3 /* MPVASTTrackingEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = C1D769AA69E3136DFC88E636239F82CE /* MPVASTTrackingEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C0E1401F8EBA57A58162669B1E4EC740 /* FIRCLSUserDefaults_private.h in Headers */ = {isa = PBXBuildFile; fileRef = 790F348E617B892F291993FB53AAFD65 /* FIRCLSUserDefaults_private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C0E38A2AB4F71DE2B885F2B02AF083FE /* MPRealTimeTimer.m in Sources */ = {isa = PBXBuildFile; fileRef = D24ADC2C26AC17986E84E6AD71B4497D /* MPRealTimeTimer.m */; }; - C0E57DD6D4EDC93F38260CF28834EAEB /* FBSDKGraphRequestConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = D2E718FEBBC0B21B328F0AD4C483B85D /* FBSDKGraphRequestConnection.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C0F8520AE121E516C9A85DA3B36D5169 /* FIRCLSDataParsing.c in Sources */ = {isa = PBXBuildFile; fileRef = F2EA102AC389AEB691486FEE64D1401F /* FIRCLSDataParsing.c */; }; - C112AABDD12E40D776C3B11EA6DE4939 /* MPVASTMediaFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 59737CA8CC54D572BFDD90F93E238752 /* MPVASTMediaFile.m */; }; - C13C16A662BBD500F77197267D581A29 /* FIRComponentContainerInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 8726BEB43B1C387135FD3070176FEF0B /* FIRComponentContainerInternal.h */; settings = {ATTRIBUTES = (Private, ); }; }; - C143341EB6409B4B50EA55674554077A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7E622F34474A1058AB765526BF8520FB /* Foundation.framework */; }; - C1B842957E3A32ECEC9BF18ADDFC6CFA /* MPAdDestinationDisplayAgent.m in Sources */ = {isa = PBXBuildFile; fileRef = 64EC22B43B8F81D4BCFB8A2410DE42CA /* MPAdDestinationDisplayAgent.m */; }; - C20F1A138E762B29899C51182348C092 /* MOPUBActivityIndicatorView.h in Headers */ = {isa = PBXBuildFile; fileRef = FD10F7B586B98E2C85696FE5DDB62D69 /* MOPUBActivityIndicatorView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C261619ABF9B8BB999EC2C7E257FF9B3 /* MPVideoEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F32FC4D6E96E0CDF17D11E535203238 /* MPVideoEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C2AEA4AD0256ACDE5CA6F1C09185E86B /* MPNativeAdRendering.h in Headers */ = {isa = PBXBuildFile; fileRef = 28FA8E076B3803FC0698F0981339450F /* MPNativeAdRendering.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C3279127D117D68B27E2FA96E60B0C94 /* MPAdView.m in Sources */ = {isa = PBXBuildFile; fileRef = 00C955418D4EA25EB44624BF3D31FBBE /* MPAdView.m */; }; - C337DC89C114AB07863D49F5BEE82C51 /* FIRCLSDownloadAndSaveSettingsOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 10F706CC781CCDBDCC9F2E865EBC6F42 /* FIRCLSDownloadAndSaveSettingsOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C33838A082CEE1E46E445E90BE8745E4 /* FBSDKBridgeAPIProtocolWebV1.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A3633CD85491A5F14C3E1F3813FE6A1 /* FBSDKBridgeAPIProtocolWebV1.h */; settings = {ATTRIBUTES = (Private, ); }; }; - C37DF57D86C678C6332C55965737B1DE /* MPBaseBannerAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = 342C4AC1E6E0595A996ED8663BE92274 /* MPBaseBannerAdapter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C3CE19B5D4D4BD3FE77C86A02E75E83B /* FIRLoggerLevel.h in Headers */ = {isa = PBXBuildFile; fileRef = 18C220367A63C478BA9150E330444821 /* FIRLoggerLevel.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C3D15BC3BEF28FAF849F346D22F06A66 /* MPNativeAdUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B18C03BBA4DCBE317C28B2980E00AE5 /* MPNativeAdUtils.m */; }; - C46DBC44B2B430358520A0058F5BE8D2 /* MPDeviceInformation.h in Headers */ = {isa = PBXBuildFile; fileRef = E99BDB290BB56F6C8161CA809DDD9AA7 /* MPDeviceInformation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C479C2C1070FBC1C341B5A3BC26FD88F /* nanopb-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 52040BAE2CE0BD9905C7C1250F48CB7C /* nanopb-dummy.m */; }; - C4DEF69EE709156F47F265A4B5D70EC3 /* MPInterstitialAdManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 346A399DF9C3AB14A13349EE71993860 /* MPInterstitialAdManager.m */; }; - C4E3100670E46E708B87A35D15179A51 /* GDTCCTUploader.h in Headers */ = {isa = PBXBuildFile; fileRef = A9EB08FDFE9939C7BEE62DEA08229240 /* GDTCCTUploader.h */; settings = {ATTRIBUTES = (Private, ); }; }; - C5361D9F5EB1CD0DD2288BADA41B08C9 /* _FBSDKLoginRecoveryAttempter.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F7424BDE45733C4DE9D510614DD8613 /* _FBSDKLoginRecoveryAttempter.m */; }; - C56A04A3ACACB110272E5A074FFC3611 /* MoPub_ExternalAvidAdSessionContext.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DEE24157113083579B5D107C4C095E9 /* MoPub_ExternalAvidAdSessionContext.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C5972AC893E4CAB0AB8925A7A2FAA1E8 /* FBSDKMeasurementEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = C3D7E0D75CF14D62305E29C5D66E5337 /* FBSDKMeasurementEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C5F71D5AD33BB5C1D31927FD903AACFF /* MPReachabilityManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F0565E0511462F920AB1A8DB02FF6CA /* MPReachabilityManager.m */; }; - C64D62FF9261D3F09FC9D4572C9B0913 /* FBSDKAppLinkNavigation.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BD62F86FFA0AFECE6E9A616975A0C35 /* FBSDKAppLinkNavigation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C64FBD8E2893ED65736E026FD243A7D0 /* FIRInstallationsStoredItem.m in Sources */ = {isa = PBXBuildFile; fileRef = E8D545FFFFE049FA46D5668F593133EB /* FIRInstallationsStoredItem.m */; }; - C66BA434C46E63690A53CF20B65E1DE3 /* FBSDKTooltipView.h in Headers */ = {isa = PBXBuildFile; fileRef = E5C658F0334DF367919639D1A7F2621E /* FBSDKTooltipView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C6A725A5F8F76F74EE523E6AA5B0BC0D /* UIColor+MPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = A38678336EC0EBD6C70F9FAD95CBF8CF /* UIColor+MPAdditions.m */; }; - C71B0206427F0382F9612ED41B48A420 /* FBSDKAppLinkResolver.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AC7B2A4F058439563278763F4DFFCAD /* FBSDKAppLinkResolver.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C71E52208FB1CD40D295CFD4A8D4A6C5 /* crashlytics.nanopb.h in Headers */ = {isa = PBXBuildFile; fileRef = F52AD2A3D0C76429C760F8CA3F01429D /* crashlytics.nanopb.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C78B9F96B78AB8B05B4D996235749BD9 /* FBSDKWebViewAppLinkResolver.m in Sources */ = {isa = PBXBuildFile; fileRef = D9CFBF50DC6E1AE24CE04C9B70365C3D /* FBSDKWebViewAppLinkResolver.m */; }; - C79B84DBA0DDBD741A2DD73A68CF4A7D /* FBLPromiseError.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = A60E9CEBF4FBB5B9DC8BCA2F72ABA9CE /* FBLPromiseError.h */; }; - C7AE2AB2ECBD750BEFA894F9A1CC93BA /* GDTCORTransport.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B7318323286498A6DF7E31AD67A204D /* GDTCORTransport.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C7D6661E63CC6B182A785D73FC5FFC45 /* MPInterstitialViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2424C11ADA3EF0907A7A7E430AF65B17 /* MPInterstitialViewController.m */; }; - C826CDA7F544A989CC57C5227FB88ED8 /* MOPUBPlayerManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 55950CB91C9BBB3BDB1E5669E1029C17 /* MOPUBPlayerManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C82F426CC90F306CC3F843B5B0180B70 /* FBSDKErrorRecoveryConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 5BC9BCACA160A3433963A90743CD4AA1 /* FBSDKErrorRecoveryConfiguration.h */; settings = {ATTRIBUTES = (Private, ); }; }; - C8B47E08496E8B76ABEA984EECFD7186 /* FBLPromises.h in Headers */ = {isa = PBXBuildFile; fileRef = 5608D402612BADF9402F627D5A1E5E2E /* FBLPromises.h */; }; - C8F374528B52EB196555F20202BB1A36 /* FacebookNativeAdAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = 379C4A3543F0A2552A926842977174AD /* FacebookNativeAdAdapter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C9462FF3241214FCC419E05A07573519 /* FIROptions.h in Headers */ = {isa = PBXBuildFile; fileRef = A1954E9E9F46D284C4446641C06D4670 /* FIROptions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C950851E3F33634EF798AC563B445BB8 /* FIRCLSDataCollectionArbiter.m in Sources */ = {isa = PBXBuildFile; fileRef = 92ECF2597AD03253C6B2BA7DB605A4F3 /* FIRCLSDataCollectionArbiter.m */; }; - C96572D70A9385094FDE1DDC74272E4F /* FIRCLSUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = 669AD6FA3A83718653790465EDDA3027 /* FIRCLSUtility.m */; }; - C9A74F8683FDE7056600B9EC17EDBE07 /* NSBundle+MPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B4870C332847015867E0F5AA508FC12 /* NSBundle+MPAdditions.m */; }; - CA48F24590F676CD28AF58F068002E5A /* Pods-MAPS.ME-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 943F5E0AB0E3CD68128746521DD14872 /* Pods-MAPS.ME-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CA65A645CE1590FBF6F956A4CB0D4A65 /* FBSDKTestUsersManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B2B2FEED99DEC50D3CADC5BEC00D23C /* FBSDKTestUsersManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CA6E16013BE31ABC208DB12C0A16F63D /* FIRCLSURLSession.h in Headers */ = {isa = PBXBuildFile; fileRef = A85B4EF03377E5041F6806362957EE8D /* FIRCLSURLSession.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CA7D8516D787FACA64D31A6A104C453A /* MPAdTargeting.m in Sources */ = {isa = PBXBuildFile; fileRef = 592F0B11524968DE9F802AF5B916322C /* MPAdTargeting.m */; }; - CA7F708AE4336734906A85A91531B8A1 /* MPDAAIcon@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 35C39E4EB71492B4C99A57F3ABBC30A1 /* MPDAAIcon@3x.png */; }; - CACE6CC767F30F6A26220D5028646C00 /* FBLPromise+All.h in Headers */ = {isa = PBXBuildFile; fileRef = BEB454A969CE2F9060C13662DCA0A898 /* FBLPromise+All.h */; }; - CB12D124A1E578B5C03B891E8A30F9DE /* MOPUBReplayView.m in Sources */ = {isa = PBXBuildFile; fileRef = 1AA80DA12D6EFABB753DCB998DB738B5 /* MOPUBReplayView.m */; }; - CB137B261ACA70970DEF3FFE1ACF2AE4 /* MPInterstitialCustomEventAdapter.m in Sources */ = {isa = PBXBuildFile; fileRef = A917DA6B039C44D3E23A75C7E914F622 /* MPInterstitialCustomEventAdapter.m */; }; - CB3E999995BCB4BD2F0B1E8D73446D2D /* MRExpandModalViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 86DA9BEC751E73A747E1058549428A9C /* MRExpandModalViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CB461C37D3D6DD4B3499DABCBC64EE9D /* FIRCLSUserDefaults.m in Sources */ = {isa = PBXBuildFile; fileRef = 22CA7B0D27D5F9A824492E0F76291752 /* FIRCLSUserDefaults.m */; }; - CB66474ABC7BA85B87E092352309003C /* FBLPromise+Async.m in Sources */ = {isa = PBXBuildFile; fileRef = A3CF869182B5F38124D11E4DB27CCFE3 /* FBLPromise+Async.m */; }; - CB7276C260D353105D61E32F9180BE5C /* MPAdView.h in Headers */ = {isa = PBXBuildFile; fileRef = 464896F1C48CA69D3718094DD5044970 /* MPAdView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CBD66720E254265D68AD31E045CA626F /* MPVASTModel.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C413ED1859E211FD770AD71D1EACCCA /* MPVASTModel.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CC06C9A49B4291C14FDAB20BD8E05E2D /* MOPUBExperimentProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 21BBC982F0017CA55E853ADE08BA2075 /* MOPUBExperimentProvider.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CC106B91B9FA443B43DEA4EAC328B3B8 /* FBSDKBridgeAPI.h in Headers */ = {isa = PBXBuildFile; fileRef = C5A5A90A2DBA3066963D3C1480317AFB /* FBSDKBridgeAPI.h */; settings = {ATTRIBUTES = (Private, ); }; }; - CC3034AFA08B9AF54A5A71CC220E6605 /* FIRCLSCompoundOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1971221F882711FE5F24EC6B6155E9 /* FIRCLSCompoundOperation.m */; }; - CC3CA4C4AE46B5D6A60036EA8B72120D /* FBSDKAppLinkNavigation.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F0AA226BE67D8A48FC380E6F61314BD /* FBSDKAppLinkNavigation.m */; }; - CC51E51D8FD81A846DA1EB6F5CA2113A /* MOPUBPlayerManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 569667724A6E51485F7F6C1E29779BDE /* MOPUBPlayerManager.m */; }; - CC5A09817B365DBF0C91ECF8CFB27E61 /* FBSDKMonotonicTime.h in Headers */ = {isa = PBXBuildFile; fileRef = 63D4720EC7E5A6F375649C170EC8244D /* FBSDKMonotonicTime.h */; settings = {ATTRIBUTES = (Private, ); }; }; - CC8AFA83E5BFE5A27D55295DC8DF5017 /* MPVASTConstant.h in Headers */ = {isa = PBXBuildFile; fileRef = F92E93154C08880AB99F41FD106DCF0C /* MPVASTConstant.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CCD8A35E2C13918DB42CF7B88540C5EA /* MPNativeView.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A8AC4623F10EB2A718EA1CD2D86333C /* MPNativeView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CD48ACF6531580D2FF1FBD6BE7CA3DA4 /* FBSDKDynamicFrameworkLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 47E6EBA08600541E259A0803553B60C0 /* FBSDKDynamicFrameworkLoader.h */; settings = {ATTRIBUTES = (Private, ); }; }; - CD5FB67F16839C5D00B6CF12F326F63D /* MPRewardedVideo.h in Headers */ = {isa = PBXBuildFile; fileRef = 077579AED437B3E8996DABD00AFC764E /* MPRewardedVideo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CD62F7461AA92699AF6A3531479D957E /* FIRCLSAllocate.c in Sources */ = {isa = PBXBuildFile; fileRef = B8F7CE1222CBE0D8992328283E5D8D09 /* FIRCLSAllocate.c */; }; - CD7B018DE84042FA6A700D30E064D578 /* FBSDKDeviceUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A8A5B09DFF1E897AA4E545FAF9FA414 /* FBSDKDeviceUtilities.m */; }; - CDA6EA8BC8203B620A9BFA2C25FB4C47 /* GDTCORUploadPackage_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E80A06C5B4E4CB381E68A56E2641F83 /* GDTCORUploadPackage_Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - CDC16E57D72F1F9832E97EDBCFA29181 /* MPStreamAdPlacer.h in Headers */ = {isa = PBXBuildFile; fileRef = A8378EAC3C6E8BE535B47B52F8C26B32 /* MPStreamAdPlacer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CDDA20F58C7D11ED8B5EAFA849EF3589 /* MPViewabilityAdapterMoat.m in Sources */ = {isa = PBXBuildFile; fileRef = AAE64F2720857AB36590DB810A3BE3E0 /* MPViewabilityAdapterMoat.m */; }; - CDF60D2824F304FA8B8C602072EAE56C /* pb_common.c in Sources */ = {isa = PBXBuildFile; fileRef = A5D57790DDAB444182A769246E82F50A /* pb_common.c */; settings = {COMPILER_FLAGS = "-fno-objc-arc -fno-objc-arc -fno-objc-arc"; }; }; - CE24DD4A38909AA42A09D7E48BA3A4AE /* MPHTTPNetworkSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 6556F6463586F6CE21E4C92A21F555B5 /* MPHTTPNetworkSession.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CE3B53ADCD86AED4C150CBD19CD54725 /* MPRewardedVideoAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F6213C0BF36AF447DD774B75A86951E /* MPRewardedVideoAdapter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CE550C4538BB8932C7A65BB89BB1FFF5 /* MPCollectionViewAdPlacerCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A7C40A0D95D9AE52AA3BF5D4605A058 /* MPCollectionViewAdPlacerCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CE7642E38BAC4F57A0C1BF0DF1E3435D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7E622F34474A1058AB765526BF8520FB /* Foundation.framework */; }; - CEB2575A8F4757F021B6C21CAC8FC328 /* FBSDKProfile+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A4CBE96AD460EE057A453A790AB8FAB /* FBSDKProfile+Internal.h */; settings = {ATTRIBUTES = (Private, ); }; }; - CEF8C0BA07ABE7E71A3EB340D6E6D3AF /* GDTCORDataFuture.m in Sources */ = {isa = PBXBuildFile; fileRef = 55437841B14E41C6422700977732EA03 /* GDTCORDataFuture.m */; }; - CF913107EBB6F46699128FD6BBCE4DA4 /* FBSDKSmartDeviceDialogView.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E4F067F6B08095C2FA1BFB88F713E3B /* FBSDKSmartDeviceDialogView.h */; settings = {ATTRIBUTES = (Private, ); }; }; - CF91D713F7DD5FB3D0E3B9952E1DF83E /* FIRInstallationsHTTPError.h in Headers */ = {isa = PBXBuildFile; fileRef = EF3AB43BC7E6A650CBC5404AA0F56884 /* FIRInstallationsHTTPError.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CFC7544CF83B2FFA2403C2DA17E0111F /* MPPlayBtn@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 32ADF318F72F7017909E357D87E107FB /* MPPlayBtn@2x.png */; }; - D0051AF0EF78315C13137BB157505144 /* GULNetworkMessageCode.h in Headers */ = {isa = PBXBuildFile; fileRef = 918CD1D8B2B01E16F21B8DCA07123528 /* GULNetworkMessageCode.h */; settings = {ATTRIBUTES = (Private, ); }; }; - D00B2DDE796A4D3EAD7C779D9F1E24C2 /* GULLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 3CD884EC65117D32471A1C31EDB54501 /* GULLogger.m */; }; - D019FA421AEE7CD13D379DF85F2FAAC8 /* FIRInstallationsItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 59E2F60221D281B6066A27C66F271475 /* FIRInstallationsItem.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D0BD96903BFD64D32EA4DDF0D506E344 /* FBLPromise+Validate.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 6E59FEC9A67608BADD8B56A68F9455C4 /* FBLPromise+Validate.h */; }; - D0E2F151A5AA34F37ADD9C187B5C21D0 /* MPAdViewDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 383A8F7966EB8BBD1BC1CB37106EA7A0 /* MPAdViewDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0EDA8C227C69B58E4FABA1072DCB8B0 /* FBSDKAppLinkTarget.h in Headers */ = {isa = PBXBuildFile; fileRef = 6EB39E144532ABC1E978112178C709D1 /* FBSDKAppLinkTarget.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0FACCB353EDAAF98A0861B4B4CC2FC0 /* MPVASTLinearAd.m in Sources */ = {isa = PBXBuildFile; fileRef = 5955C4A26A288B10A125F3C4AB75B270 /* MPVASTLinearAd.m */; }; - D14C76952C1C53F200CA3E779F002A96 /* FirebaseCrashlytics-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 966F8BC88419BB77DC9D7C6776058334 /* FirebaseCrashlytics-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D1B5C11BCA5E41A4FD4A9D351BA2A878 /* MPWebView+Viewability.m in Sources */ = {isa = PBXBuildFile; fileRef = 50786F73B28A0AC9BC79FC5E12E819F7 /* MPWebView+Viewability.m */; }; - D1DE2BB6946810684DD199C5549193F1 /* FBSDKMetadataIndexer.h in Headers */ = {isa = PBXBuildFile; fileRef = F7606C43D56B01B5133A5FB34783E93D /* FBSDKMetadataIndexer.h */; settings = {ATTRIBUTES = (Private, ); }; }; - D20E2128DDAE98484480C6979CBEFE66 /* FIRCLSSerializeSymbolicatedFramesOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = ABBC5B08BCC854BD1E1B1C5D37C8E29A /* FIRCLSSerializeSymbolicatedFramesOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D21BF21BC22BDBC53057A7E40368B178 /* MoPub+Utility.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D8B86C037D5002A385EDA820E7C6A37 /* MoPub+Utility.m */; }; - D21C63819AC495AEF5247F55C9BD3F8D /* FBSDKLoginKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FCFBF87BB650146BFAA6933F391DBBD /* FBSDKLoginKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D23909E9B7102A41B94B30B2F9C501C4 /* MPConsoleLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 345C40FE7FC640C143E221DFF04E7776 /* MPConsoleLogger.m */; }; - D23E48B183D3207BB1E6E6F014B034CD /* FBSDKEventBinding.m in Sources */ = {isa = PBXBuildFile; fileRef = F48765357736CC024670A593558875CF /* FBSDKEventBinding.m */; }; - D27C4B5B5DFB9CFCED7958CF27EF8411 /* FIRCLSGlobals.h in Headers */ = {isa = PBXBuildFile; fileRef = 837E03BA740DC46BCFBB2E93B20251E1 /* FIRCLSGlobals.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D33EF6F5A6474A3006C742DA00AACCBB /* Flurry-iOS-SDK-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = DF80F1B8CAA6C8D50609362E2A8BE8E6 /* Flurry-iOS-SDK-dummy.m */; }; - D34444D0871C2AB211DD55487C03F4C6 /* FIRCLSDwarfUnwindRegisters.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A2B0638732A40ECC40426FA358663BE /* FIRCLSDwarfUnwindRegisters.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D3D462957934A5ABA3EB19E793B840DE /* MPVASTInline.m in Sources */ = {isa = PBXBuildFile; fileRef = E8875809F7FE11F70969D0129432A764 /* MPVASTInline.m */; }; - D3D978E6CFBC68F7AB1E68AFB37911F4 /* FIRCLSHost.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A9B9035149FAFAB5FD6DCE6CA27B4DA /* FIRCLSHost.m */; }; - D3E7B3C6DBA9E97E639813B86E37C9CD /* MOPUBDisplayAgentType.h in Headers */ = {isa = PBXBuildFile; fileRef = 1CDC17A5433AC0CA6DC1872840095331 /* MOPUBDisplayAgentType.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D44311DA5836E856294C097BD317DB31 /* FBSDKAppLinkResolver.m in Sources */ = {isa = PBXBuildFile; fileRef = 2257D7B14B10221A39417A5F09201B0F /* FBSDKAppLinkResolver.m */; }; - D46C26610FBBB5C4FAC4849418978F41 /* FBLPromise+Retry.m in Sources */ = {isa = PBXBuildFile; fileRef = 80E308E891E031A69331D98708DF15A9 /* FBLPromise+Retry.m */; }; - D4A72B0AE87E0EAC9B25B88B886F3234 /* FBSDKModelRuntime.hpp in Headers */ = {isa = PBXBuildFile; fileRef = DAFE246CB253B48EDFAAD0B3458D7243 /* FBSDKModelRuntime.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - D4CD833AAE81E77AF4F5DDA413429A53 /* MPMoPubNativeCustomEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 06C2D80F1174A8BD4EF3423D5064D41E /* MPMoPubNativeCustomEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D504CFC2476267B83D8504D5C7E26B93 /* GULReachabilityChecker.h in Headers */ = {isa = PBXBuildFile; fileRef = 67716B3EA07B2120ABAC0720885B8501 /* GULReachabilityChecker.h */; settings = {ATTRIBUTES = (Private, ); }; }; - D542499A7528D695FD29D5AD67D6B5FC /* MPVASTCompanionAdView.h in Headers */ = {isa = PBXBuildFile; fileRef = A9E3FD759E40E665FBBE94582526D5AC /* MPVASTCompanionAdView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D57EAE995F379D767B49936DAEBFD87A /* MPVASTCompanionAd.m in Sources */ = {isa = PBXBuildFile; fileRef = CA847F9F3FE796FF799FA40B541EDF8D /* MPVASTCompanionAd.m */; }; - D58568BE127CC13B4F7F4AAF96144662 /* GDTCORTransformer_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 56B2B2250679A70F1C7B60CD4D88AEFC /* GDTCORTransformer_Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - D662340EC2962B60A45B347DEB3AEF33 /* MPEnhancedDeeplinkRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 22F3752BB8479C64876DF07ED9F247E4 /* MPEnhancedDeeplinkRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D6C30311EB2D7AA9026CFF49C395C07A /* MPTableViewAdPlacer.h in Headers */ = {isa = PBXBuildFile; fileRef = F538607239E8624F6F932EB08DC4BF85 /* MPTableViewAdPlacer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D6C9B62760FEE5FE4E71C27AFEFF0A61 /* FIRCLSURLSessionDataTask_PrivateMethods.h in Headers */ = {isa = PBXBuildFile; fileRef = BCC81D90AA4D9847887DF63CE8BCBE10 /* FIRCLSURLSessionDataTask_PrivateMethods.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D6CCA5D4B98DE0A7C80BCDBC6E6C012D /* FBLPromise+Reduce.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 6A7D1EA91DD59D2BF101E37913B7F9A5 /* FBLPromise+Reduce.h */; }; - D6CD2FA2FCA23ABAF0A06C7A8AA0CB1A /* FBSDKMonotonicTime.m in Sources */ = {isa = PBXBuildFile; fileRef = 4B4D4BDBEDA493A2951B9D841EEF1313 /* FBSDKMonotonicTime.m */; }; - D6D305285373C5940EE93C3C6231670D /* FBSDKDeviceLoginCodeInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 7760A0AF86664FC43E6E281136FC37A0 /* FBSDKDeviceLoginCodeInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D6E931BFB42873269BD7A761019270FF /* FIRInstallationsItem.m in Sources */ = {isa = PBXBuildFile; fileRef = BB3E5063A24AA0806EEA1496785F4C8C /* FIRInstallationsItem.m */; }; - D7218CFBDB4D766D90161EBA1730430A /* MPMoPubRewardedPlayableCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = C377E972E251580AB56B910F18A439A8 /* MPMoPubRewardedPlayableCustomEvent.m */; }; - D72E3116E751EFDA887B9F96AC424642 /* FIRCLSSignal.c in Sources */ = {isa = PBXBuildFile; fileRef = 9C34A935350EEF589E0CB5317D5E8D7A /* FIRCLSSignal.c */; }; - D74F349C4421647685A30049D4B590A8 /* FBSDKModalFormPresentationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 352FC8C029A40591F283602FCC2F95FF /* FBSDKModalFormPresentationController.h */; settings = {ATTRIBUTES = (Private, ); }; }; - D75E8C7C87742A002A8897A664DD4F45 /* NSURL+MPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 047D593E76EB49E2E716E15F76A96F2F /* NSURL+MPAdditions.m */; }; - D7B0175AA5B2F42800F6F4D9108F7A90 /* GULSceneDelegateSwizzler_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 92FC128941C72598AEE19D298137FB17 /* GULSceneDelegateSwizzler_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D7B6E43E8AFCD194A510F8128362AAE7 /* FBSDKModelManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 6ECFC60B24BA7C537A28C1D6FC13648E /* FBSDKModelManager.m */; }; - D7F92888B4DA6D81649BF636FD461AC2 /* FIRCLSReportManager_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = A57812B00DC25CFF7E42EDC259870378 /* FIRCLSReportManager_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D88B1BAAE41C6E6EB1E3C6A3702B1109 /* FIRCLSDownloadAndSaveSettingsOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = B31D84E24524DF5682A267BFE7DA628D /* FIRCLSDownloadAndSaveSettingsOperation.m */; }; - D8D0C340350BEDE1C5B2CADBE19E417D /* FBSDKKeychainStoreViaBundleID.m in Sources */ = {isa = PBXBuildFile; fileRef = 54496EB69F67B4F596E75C2526AC0477 /* FBSDKKeychainStoreViaBundleID.m */; }; - D95F6F9EC7F669D9635D848D8783E22F /* NSString+MPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 38BBA1F7B49CB582555FDEAA7AAEEE39 /* NSString+MPAdditions.m */; }; - D96700B161652265FBE723D8B011F579 /* FBSDKGraphRequestPiggybackManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FDCD270C1EDEAC680200680C4488FCB /* FBSDKGraphRequestPiggybackManager.h */; settings = {ATTRIBUTES = (Private, ); }; }; - D98F5E2ACE757387596E9D46ED2A581A /* FBSDKEventDeactivationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 223F5AE5FDFCB0E47FC5772AF7B98142 /* FBSDKEventDeactivationManager.m */; }; - D9A57E0A4BE70D30B89333C068CB7148 /* MPRateLimitConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = B2D821630EF1A5C1F1B6F0040A4D37EA /* MPRateLimitConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D9A8F72B96701A0A554CE812141F1E20 /* MPMutedBtn@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 110466D95D202F08F834C72488BCE57E /* MPMutedBtn@2x.png */; }; - D9BA7A17F01914F65AFC836A0E048F02 /* FBSDKURL_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 304D113D4644F30CC920849001B08531 /* FBSDKURL_Internal.h */; settings = {ATTRIBUTES = (Private, ); }; }; - D9E8428EA1C8604908FF791A43D301C9 /* MPMRAIDInterstitialViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = B58C3ECD0C853A41A5E5577B6E57B97E /* MPMRAIDInterstitialViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA07C8096E53E097D8EF857BCAC687EF /* FBSDKLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 1005B3DB3030176AD2DC194EF14BC314 /* FBSDKLogger.h */; settings = {ATTRIBUTES = (Private, ); }; }; - DA5CC2D93111D7FC22DBBC1111B95D9A /* MPNativePositionSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 9510A54071DF69DE5B3A8D4740C5F81B /* MPNativePositionSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA5EFF7EF6F1D875E2EF81648439CCCD /* FBSDKCrashHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 61F23C9B70945D4FAE48F766E9A2C500 /* FBSDKCrashHandler.h */; settings = {ATTRIBUTES = (Private, ); }; }; - DA9C082DDF1D5EB689022EE71AB9ECCB /* MPNativeAdConfigValues.m in Sources */ = {isa = PBXBuildFile; fileRef = A6F6B1D66145F0029417A5AEEF792460 /* MPNativeAdConfigValues.m */; }; - DAC0A98C7A1D1E64CAEF5A01D7843DDC /* MPBool.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B76E8F0D27A31151FFE888BC9735D11 /* MPBool.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DAEAD09BDE308F790790B17640D87259 /* FBSDKBasicUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = 0CD8DD8AFF40B6AB5746108E84D5520D /* FBSDKBasicUtility.m */; }; - DB1D86340BD57354C0D95DBC235F7CE7 /* FIRCLSURLSessionTask.m in Sources */ = {isa = PBXBuildFile; fileRef = 18BC0DDE1F396DB4841A0415351A1CCC /* FIRCLSURLSessionTask.m */; }; - DB4F688272CFD8AB4ACC6433288E8875 /* MPLogManager.h in Headers */ = {isa = PBXBuildFile; fileRef = B4DDA95AFA0A4A577D8B123C930E56E3 /* MPLogManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DB67EDEE08A7CCF9D48959B2B8A7C022 /* FIRCLSInternalReport.h in Headers */ = {isa = PBXBuildFile; fileRef = 478C8A1E81472A084CF3C879B7513537 /* FIRCLSInternalReport.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DB8FE764B9B80632A587EEA8F852A7C3 /* FBSDKLibAnalyzer.m in Sources */ = {isa = PBXBuildFile; fileRef = 008788AB90E92CB1D6CAC4FFA2B977DE /* FBSDKLibAnalyzer.m */; }; - DBEC0F404AC892346B76285DF2E6CC34 /* GULKeychainStorage.m in Sources */ = {isa = PBXBuildFile; fileRef = B5F7F774F307557AD2D36DC8260C8DC0 /* GULKeychainStorage.m */; }; - DC7B237C7D51FC70F3E8592C082045A6 /* FBSDKHybridAppEventsScriptMessageHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A018245C0828B7A86A4799C1DC5D91E /* FBSDKHybridAppEventsScriptMessageHandler.m */; }; - DCA49FD15085E4E66CCD6ED29C86E17A /* FacebookInterstitialCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = D30C1A5C52F035ADBD3EEA0824B1DD27 /* FacebookInterstitialCustomEvent.m */; }; - DCF00E725AFECD4AD6E102D1E8480B97 /* MPNativeCustomEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 6732B7DE631E847015B1B93C9EACD554 /* MPNativeCustomEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DD09C2CAE75DFD214DBABB94C71278CA /* FBSDKUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = B528ECD452EC3E2F8648257D69C44A33 /* FBSDKUtility.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DD210DE71D1F9F5342829B425381A308 /* FBSDKLoginManager+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 386B19EDB0975A5BCD862DB7DBE7C160 /* FBSDKLoginManager+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DD34F6FF4A7119255BDDDF915D2C7BAF /* FirebaseCoreDiagnostics-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = CAF0DB36B275BDAAD6ADE0494F63E096 /* FirebaseCoreDiagnostics-dummy.m */; }; - DD3A63B7FFC38BFFB40060CEAE2DC8B7 /* FBSDKCoreKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F92BE1CBFCF07492C50DFF3A72DBB794 /* FBSDKCoreKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DDA432F3A8A316FB7DEE7F7730B925FC /* MPNativeAdRequest+MPNativeAdSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 3BB3871DB66CC47F507FF278708C3BD5 /* MPNativeAdRequest+MPNativeAdSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DDD494D59A289D3FE6109AC88EE74834 /* MOPUBAVPlayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F0B3B46168693416633F9BE6AC077DC /* MOPUBAVPlayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DDD867D4752AFE8D07E9F13111D71FE8 /* FBLPromise+Recover.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = F2ED25B46717EE76477932E591AF483B /* FBLPromise+Recover.h */; }; - DDE78FA161BE5BC8EED61FEE5B3E6606 /* Flurry-iOS-SDK-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = DFF5B5C76F6231CCE943755B56ED7B74 /* Flurry-iOS-SDK-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DDEAD77343E6224EEB574FB6E999632C /* MRBundleManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C472CDAFF3E2AF4F0B84D8B87D7307B /* MRBundleManager.m */; }; - DE320C598631BAB9557F38BC8123D664 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7E622F34474A1058AB765526BF8520FB /* Foundation.framework */; }; - DE449A0AEC6D18055E52C2C5BBB83866 /* MPNativeView.m in Sources */ = {isa = PBXBuildFile; fileRef = F89E5E9C4209BF914E87A8D594320251 /* MPNativeView.m */; }; - DE63D76953D039579ACB5156388D7293 /* FIRCLSDataParsing.h in Headers */ = {isa = PBXBuildFile; fileRef = 50FC5DFC998F5A83FFFBCE84EF3D0981 /* FIRCLSDataParsing.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DE7A6D20D20464ADC9519D56AFD74547 /* GULSecureCoding.m in Sources */ = {isa = PBXBuildFile; fileRef = 5046AB35485C26796CC427D3AAEF613A /* GULSecureCoding.m */; }; - DE8DDFF95F94675A7E6DB9E4F6193695 /* FIRInstallationsStoredItem.h in Headers */ = {isa = PBXBuildFile; fileRef = D40F3EB80A82CF1EA834836E17B6AA55 /* FIRInstallationsStoredItem.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DEA8AF33938820C7BCD68895788B2DE9 /* MPVASTAd.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ADB306523399AE58770E1D0DCB152DD /* MPVASTAd.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DF1D59235CA14DA33D1DE7D06B9A9B90 /* MPRewardedVideoConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C82E8A335AE0C09FD8559157C5F3E59 /* MPRewardedVideoConnection.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DF369F209F1FA904E2DF33FB176F34CA /* FIRCLSMachOBinary.h in Headers */ = {isa = PBXBuildFile; fileRef = C373BC66DE5491E20DE03672649626EA /* FIRCLSMachOBinary.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DF6C48CC82F4A3C2E2B285C1ABF7747B /* FBSDKAppEventsUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = 445F34298CEC5A0DBA4CEFD646358DC0 /* FBSDKAppEventsUtility.h */; settings = {ATTRIBUTES = (Private, ); }; }; - E01957FA036E794D6E56A055E961C9F9 /* MPTableViewAdPlacer.m in Sources */ = {isa = PBXBuildFile; fileRef = 150923DBB7459F1982ECE83658A4FAC2 /* MPTableViewAdPlacer.m */; }; - E050DC68F118BB1A2A9375C274E6937F /* FIRCLSMachOBinary.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FEBC6B2AD39E86085910EAB5418385F /* FIRCLSMachOBinary.m */; }; - E05157C9BF521FBB734915B35ECF2803 /* FIRCLSDemangleOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8EEA761BA7B8496BB63A2A3F938E7559 /* FIRCLSDemangleOperation.mm */; }; - E0618BAAC4312934079D76D304958BFA /* MPStaticNativeAdRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = 27FF64175AB8FC590892346D5B7041F4 /* MPStaticNativeAdRenderer.m */; }; - E06568305750EDF89753A120A3462F50 /* FBLPromise+Timeout.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = 1698BEAFD75D33FEEB50BF85AC0D5EDE /* FBLPromise+Timeout.h */; }; - E0C3B5628F503F7FDDBC1C2DF2E220B0 /* MPNativeAdError.m in Sources */ = {isa = PBXBuildFile; fileRef = D6F73BB02D417A143A1CD80F6A5030C1 /* MPNativeAdError.m */; }; - E0C67C40691A0CAAA18220B515317892 /* FIRCLSProcessReportOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 03D3D726322650EF597B9114AE00D70B /* FIRCLSProcessReportOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E0F660C4D5F2270E7C33E1A89AAEF765 /* FIRCLSDemangleOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 7802FB3BA994697979ED28AC90D75431 /* FIRCLSDemangleOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E133CAB71B25DADEDAC27C722F387451 /* MPPrivateBannerCustomEventDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = A7CA15EEAA0A4BF7A488B9CE88DF4E29 /* MPPrivateBannerCustomEventDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E1596B78A0CAE82C0B72469CF72ABC39 /* MPAdWebViewAgent.h in Headers */ = {isa = PBXBuildFile; fileRef = 0017B44EE65AC00BCC1B0FC05EB2B63F /* MPAdWebViewAgent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E166870E8A4BDBA10366486BA514154A /* GULNSData+zlib.h in Headers */ = {isa = PBXBuildFile; fileRef = D63C7D1BEF95979824E596AD2C9176B7 /* GULNSData+zlib.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E184AA538CF0E50B553F5F5D8DC4B821 /* MPConsentChangedReason.m in Sources */ = {isa = PBXBuildFile; fileRef = E40A521C2C00AA0EF6381122AC4C83DF /* MPConsentChangedReason.m */; }; - E19EF2348D04CCD16F02B0796CB31DF2 /* FIRCLSRecordIdentity.m in Sources */ = {isa = PBXBuildFile; fileRef = E8C26C56422F31C2D61B1C25DF4AA613 /* FIRCLSRecordIdentity.m */; }; - E1AD7F4C9A5B2161C50369FB63874897 /* MPInterstitialViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 98D822AC1249C4034A49ADD0F5668D2E /* MPInterstitialViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E1E389C02E55A8D7227ABD4B335F3428 /* MPVASTResource.m in Sources */ = {isa = PBXBuildFile; fileRef = 0E16FEEB53C97C640309E95CDBB693D9 /* MPVASTResource.m */; }; - E292143116F19E0BD410567723081451 /* MPProgressOverlayView.h in Headers */ = {isa = PBXBuildFile; fileRef = EEF950BD1E01A501C3B394319430E8EE /* MPProgressOverlayView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E29EEB71B9C1B48B47F63CA26CE3DF55 /* FBSDKTypeUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = 255544BB8527817AE5EBE5D395FA2277 /* FBSDKTypeUtility.h */; settings = {ATTRIBUTES = (Private, ); }; }; - E2DDCB02B67287471B099555591F8F3E /* FIRCLSPackageReportOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 2FD12418CC955738E4B3B0D3F8213A20 /* FIRCLSPackageReportOperation.m */; }; - E2EEE81A39A26C7D6C08E34B8B990389 /* MPRewardedVideoError.h in Headers */ = {isa = PBXBuildFile; fileRef = 566E8407DDF9E83B06EFF0FD8260664B /* MPRewardedVideoError.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E33810CA80C50E29C618CCBA065A8BD4 /* FIROptionsInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = F3066CF07AADE233E03777E43150C416 /* FIROptionsInternal.h */; settings = {ATTRIBUTES = (Private, ); }; }; - E352032E57FD449CA5E43AFE78402BCE /* GULNetwork.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F086552A6D613F74EA4B21DAEF8CCE2 /* GULNetwork.m */; }; - E402C25DC616EA67211562FBC7030B9A /* MPBannerCustomEvent+Internal.m in Sources */ = {isa = PBXBuildFile; fileRef = ACDADF91BDB29FA2C5AAF1B6A8DF653A /* MPBannerCustomEvent+Internal.m */; }; - E43E719188165A40EC54DA171FDB72A6 /* MPServerAdPositioning.h in Headers */ = {isa = PBXBuildFile; fileRef = E9D7750489A49A62BB4B3740B7E31F66 /* MPServerAdPositioning.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E47AF3CDEB82139EE9D225BC6009ADEF /* MoPub_AbstractAvidManagedAdSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 200C9BC810FD120F0BDEF6B403D3284A /* MoPub_AbstractAvidManagedAdSession.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E4A4779459FCBD4B09729066A0AD77A7 /* MPVASTWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 556BF85A3667640A4703BE446A49EB95 /* MPVASTWrapper.m */; }; - E4C4ACD0C26939410F4FA1CDF1EDFDB2 /* FIRCLSByteUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D01C3C7238B2B2AD7B2A2AB9A7959E2 /* FIRCLSByteUtility.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E55A95C87E4C1CAED43D459D7B07789C /* FirebaseCore-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C287BD18D5DBAF69726AC1A45CC18BE /* FirebaseCore-dummy.m */; }; - E56843CB26D51C72750523020F6F0073 /* MPViewabilityAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B29F0140CCACE6F460B67EC664AD890 /* MPViewabilityAdapter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E56A3E7FEA5A9C3F6D395874321B735C /* FBSDKTestUsersManager.m in Sources */ = {isa = PBXBuildFile; fileRef = BA7FAF644EB1430C49725BD9BBD687AC /* FBSDKTestUsersManager.m */; }; - E5BF7F56202B8E7520E540F8F9524054 /* FBSDKApplicationDelegate+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 39B886D57011C9A00F3A48439B0C6332 /* FBSDKApplicationDelegate+Internal.h */; settings = {ATTRIBUTES = (Private, ); }; }; - E5F90F1F0C3FBDBED6A293AAA528B3CA /* MOPUBAVPlayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 874697498891F3E60C6ED1A7D1D95A89 /* MOPUBAVPlayer.m */; }; - E62135525F30D270AE8CD64E06E2830B /* MPRewardedVideoCustomEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D4843A392FF3465CBE87FE5353D738A /* MPRewardedVideoCustomEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E62BEAD12C9FD7F3F7758B818E8D4C1B /* GDTCCTCompressionHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 4171AD9CBF760E5D66F122F8F20C36EE /* GDTCCTCompressionHelper.h */; settings = {ATTRIBUTES = (Private, ); }; }; - E729D4B701AAFAA3AF72663371F747C6 /* FBSDKDeviceLoginManager.h in Headers */ = {isa = PBXBuildFile; fileRef = E11C44B9966BB3743A5ADCEF150C6803 /* FBSDKDeviceLoginManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E72C48A2FA1F59ED02349D6BD819F42E /* FIRCLSCodeMapping.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AB4915F58E1489715FFD526F8852E21 /* FIRCLSCodeMapping.m */; }; - E781311FCFD371844736E1E139BC16D3 /* MPAdDestinationDisplayAgent.h in Headers */ = {isa = PBXBuildFile; fileRef = A2C33392B6A8C912027A529372226A2B /* MPAdDestinationDisplayAgent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E79ED1E4F913DC4659E98CE5135F9524 /* MoPub_AvidVideoPlaybackListener.h in Headers */ = {isa = PBXBuildFile; fileRef = 491287D06568031D2A46A13935EEB89E /* MoPub_AvidVideoPlaybackListener.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E7B75D9C5047BD8054CD2CF04E57107C /* MPURLActionInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B253846CEFA62AB7AD5504A4CD1CA45 /* MPURLActionInfo.m */; }; - E7CA4DA497CB638A2CCDF8098A03D82E /* FBSDKProfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 5BE619B57DBA3309A8D50B4CF9483D91 /* FBSDKProfile.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E82630672D31CAE5E235753E2DDEBD01 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7E622F34474A1058AB765526BF8520FB /* Foundation.framework */; }; - E8D7E5E9111A9FFC70294A48A8C8F716 /* FBLPromise.m in Sources */ = {isa = PBXBuildFile; fileRef = 211919002F2CA7D396CAD0FF8546330F /* FBLPromise.m */; }; - E9402CFF6FD764C72C25A125B2196A96 /* FIRCoreDiagnostics.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A8E552AF5216AF8FBA9B2F8F702D7D8 /* FIRCoreDiagnostics.m */; }; - E95B7E9D1F26909B82824F467BEFFD50 /* GDTCORDataFuture.h in Headers */ = {isa = PBXBuildFile; fileRef = F02C33C186B41FAEFC9375CC7FAF7899 /* GDTCORDataFuture.h */; settings = {ATTRIBUTES = (Private, ); }; }; - E978E72672F27A295D5D0BE95E08E60D /* FirebaseCrashlytics.h in Headers */ = {isa = PBXBuildFile; fileRef = CD0737C003FDFEAB95209C9C5640C8DE /* FirebaseCrashlytics.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E980CEBE094080C262232461E4953AF9 /* GULLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C284741E25807C99F2D65D97A6C0086 /* GULLogger.h */; settings = {ATTRIBUTES = (Private, ); }; }; - E9AF4799FADB183B075E81DD5ACBBDB6 /* FIRCLSReportUploader.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E17D0B4C37C3337909355849072D40A /* FIRCLSReportUploader.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E9DD1714965871670C4D48DAAAB76973 /* FBLPromise+Always.m in Sources */ = {isa = PBXBuildFile; fileRef = EE6A99FEAD1985536C3FA5E943E2B5BC /* FBLPromise+Always.m */; }; - E9E3809F1BB295DB403D340521C0E6D1 /* MOPUBPlayerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 36DA9F75953A08F4C879A0E62AFBA515 /* MOPUBPlayerViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E9FB5B532E41E0F96340DB2111B09DA6 /* FacebookRewardedVideoCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 0FE37E511A2572985CA8E982EF114A0D /* FacebookRewardedVideoCustomEvent.m */; }; - EA56F7B428C6B0208518C1AE698006C7 /* MPViewabilityAdapterMoat.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F00F7C653C8AF0F8B1B154E5EE5A071 /* MPViewabilityAdapterMoat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EAB067AA9ECA2D3A1F0E189A47308A88 /* MoPub_AbstractAvidAdSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 930C9A46DA6715C6092597A1D1D952DF /* MoPub_AbstractAvidAdSession.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EAD6827B084E49152AE8AAD8698099B6 /* GDTCORUploader.h in Headers */ = {isa = PBXBuildFile; fileRef = 36EB11FA5B4F302F1740F21784FA810E /* GDTCORUploader.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EB0147ADA9D442DD07193EE0ED7D0666 /* FIRInstallationsAuthTokenResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 079E8901A9A2334D64914A0F971A01AD /* FIRInstallationsAuthTokenResult.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EB0180BF39FBBE593B03DC684BB81A90 /* FBSDKCrypto.m in Sources */ = {isa = PBXBuildFile; fileRef = E643E224BF45E9D982617BB3CF2ABC29 /* FBSDKCrypto.m */; }; - EB19925F56CC9E52557053605724689B /* FBLPromise+Reduce.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AA16CC8BD2EAD44F640A97A5349131D /* FBLPromise+Reduce.m */; }; - EB628EB9D695A92BDF70678F13A1CB29 /* MOPUBPlayerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E382684BEE5094909BC60FB7F604CB0 /* MOPUBPlayerViewController.m */; }; - EBC4602EE74BA654C4A9CA619387E5CF /* FIRCLSInstallIdentifierModel.m in Sources */ = {isa = PBXBuildFile; fileRef = DC3279C966FBC3B094985435CC3EF5A2 /* FIRCLSInstallIdentifierModel.m */; }; - EBD79E091CC2EFFCA87E02D93DC6BCE5 /* FBSDKEventInferencer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 28DD99903B12F6E2D89F23CFC532D07C /* FBSDKEventInferencer.mm */; }; - EBEF26D35F2A3BB95C7DF79065CF5192 /* GULHeartbeatDateStorage.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B2D31DDF28781D80D3A1BAFF8EAC605 /* GULHeartbeatDateStorage.m */; }; - EC0FA058FE62435BB2517F9A8C52351B /* FIRInstallationsSingleOperationPromiseCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 92C2AA94501AF61B1D829065E52BD370 /* FIRInstallationsSingleOperationPromiseCache.m */; }; - EC4AC2CCD3C3C8103B9558397DAEDF8F /* FBLPromise+Any.h in Headers */ = {isa = PBXBuildFile; fileRef = AD4E5601CB7CBE9FE1E793A00E842797 /* FBLPromise+Any.h */; }; - EC56B039D94C5830322DFA9018E80E67 /* MPXMLParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 59B1A24E8C60C1CDD038F4BF22EA30CC /* MPXMLParser.m */; }; - EC6E97910F8EA279C1663772773B70DE /* GDTCORFlatFileStorage.m in Sources */ = {isa = PBXBuildFile; fileRef = 707F365A6E4B98614C309D51DABBA688 /* GDTCORFlatFileStorage.m */; }; - EC6F5935EA38D8A891BE295E7AB86777 /* GoogleUtilities-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D70C2E8302397BE469D6D671A61C9D9 /* GoogleUtilities-dummy.m */; }; - EC79632B21CBB2567E7AB3196F049C68 /* MRError.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F7D5512D049686AB606130195CE0526 /* MRError.m */; }; - ED74A633FDE2402C86FF5A4C1F66C68A /* MPLogging.h in Headers */ = {isa = PBXBuildFile; fileRef = 507DD2C9FA6139F8331F8B843DBE80AA /* MPLogging.h */; settings = {ATTRIBUTES = (Public, ); }; }; - ED76B0466BD65B9017BDFCD5E0C0B3BC /* FBSDKURL.h in Headers */ = {isa = PBXBuildFile; fileRef = B85423919F546189D5E6A7AB2542C4CE /* FBSDKURL.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EDB2E85125C725015F52BBA6FD82B293 /* FIRCLSDataCollectionToken.h in Headers */ = {isa = PBXBuildFile; fileRef = B05757CB550DB88CD3A2586C66D30485 /* FIRCLSDataCollectionToken.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EDFD5124E0DAA85572C2EE0F88F4A101 /* MOPUBNativeVideoCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 68692631D9BCCC58D8F4E29423BE3DAA /* MOPUBNativeVideoCustomEvent.m */; }; - EE28DCC4B1F1BA50A76D5B2CF081CC33 /* FIRApp.m in Sources */ = {isa = PBXBuildFile; fileRef = 04D44923236CF63334698156AA7D0114 /* FIRApp.m */; }; - EE36CA09161DC5695B9CF68F7FEBD365 /* FBSDKCodelessPathComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 74DF685EB19AD031F2AB0E9629628E64 /* FBSDKCodelessPathComponent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - EE9B5EA3E64BA9165906B16FB451ED30 /* FIRCLSProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D85EDD4C0995B7C563EA29D974F6D5D /* FIRCLSProcess.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EED38C6D7BAEA9C452117D4168F415BE /* FIRCLSSymbolResolver.m in Sources */ = {isa = PBXBuildFile; fileRef = 93DE406DD843F31B8DA8190102E786BC /* FIRCLSSymbolResolver.m */; }; - EF0687DF4FB10C16DF8A0FB93F51823F /* FBLPromise+Timeout.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E55BFB71A6F16FE7E26F5D49426F3C6 /* FBLPromise+Timeout.m */; }; - EF373D2C9144FA247E9150AC3C1DCDE2 /* MPHTTPNetworkSession.m in Sources */ = {isa = PBXBuildFile; fileRef = 678876F8D1B05FAEA1846B0C9FCD18AB /* MPHTTPNetworkSession.m */; }; - EFB429F7365F77EC2E5547D2855ACD17 /* FBSDKApplicationObserving.h in Headers */ = {isa = PBXBuildFile; fileRef = C331EBD13FE3B9AFCACDA8A4FF2A5368 /* FBSDKApplicationObserving.h */; settings = {ATTRIBUTES = (Private, ); }; }; - F0733CFDC2B5BCA3789EA5144B9811C5 /* FBSDKSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = B79F8041DA08D90AB6D4D42E94532E68 /* FBSDKSettings.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F09F24FFFD77DE5B7839FB1AD5A4CCC6 /* MPStopwatch.m in Sources */ = {isa = PBXBuildFile; fileRef = EC55BD6F39BFBB8D16D185B7831D7450 /* MPStopwatch.m */; }; - F0B18D575EAF400AAFBC2FE2148F0CDE /* FIRCLSNetworkOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CC51C655EF592F475EDE2C19CD77652 /* FIRCLSNetworkOperation.m */; }; - F0B566D62BCBE89F6FC71A84042B3A78 /* FIRCLSMachOSlice.h in Headers */ = {isa = PBXBuildFile; fileRef = CD814B09D8A083F1C2A25BE3FE62D7A1 /* FIRCLSMachOSlice.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F0D6A8E3A38B2E57F18CB822B64674E4 /* MPTimer.h in Headers */ = {isa = PBXBuildFile; fileRef = 79F15A919D6DC19F44088DB016D122FF /* MPTimer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F0FADDC644AF1A248A0F323A8A90C3A6 /* MPMRAIDInterstitialViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 15BB88AC3E4987FBCF5DCAB97509A940 /* MPMRAIDInterstitialViewController.m */; }; - F10E2CE324B413E090A102B56EA002ED /* FIRCLSProfiling.c in Sources */ = {isa = PBXBuildFile; fileRef = 25B285412D70A03CD380C90DC1635FCD /* FIRCLSProfiling.c */; }; - F13A123EC174783D11A96C7C87CE64D7 /* MPAdPositioning.h in Headers */ = {isa = PBXBuildFile; fileRef = 67542E6518C8872B2E3790707317DACE /* MPAdPositioning.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F154D2151F26700F7C05E42980E24467 /* FBSDKCloseIcon.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F8470B349C63A52E3D8CF767119A42F /* FBSDKCloseIcon.h */; settings = {ATTRIBUTES = (Private, ); }; }; - F19479B9593D3ED564CDADF473F93938 /* FBSDKAccessToken.m in Sources */ = {isa = PBXBuildFile; fileRef = E238D469B16F4BF9C5B184066571C740 /* FBSDKAccessToken.m */; }; - F2860F43DED10504255DCF622244EB46 /* FBSDKInternalUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = A3DEE8684E54692925CFF9649B4B9AA7 /* FBSDKInternalUtility.h */; settings = {ATTRIBUTES = (Private, ); }; }; - F2F7769A7BCDA49AFDF6E2E44537B93C /* FBSDKCoreKit+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 6ADDB4B80415BC5DEB5B94D09C91A74E /* FBSDKCoreKit+Internal.h */; settings = {ATTRIBUTES = (Private, ); }; }; - F31AF0FD9F5E797B616757BA28A89219 /* MPBaseAdapterConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = D9388511DD9CA3E718B2E63D6A212C1C /* MPBaseAdapterConfiguration.m */; }; - F374C4C98B96C0A09D5672B3A04B6DB6 /* MPReachabilityManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 99FA0C33F8FD705C8505C27693C46AE1 /* MPReachabilityManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F42CABE9524BFEC4C00FBC1395D3A611 /* MOPUBActivityIndicatorView.m in Sources */ = {isa = PBXBuildFile; fileRef = D79F393250BF3A0CB9F297EAD8E1356B /* MOPUBActivityIndicatorView.m */; }; - F447604AB167DE1ECB15305F793B3643 /* FBLPromise+Timeout.h in Headers */ = {isa = PBXBuildFile; fileRef = 1698BEAFD75D33FEEB50BF85AC0D5EDE /* FBLPromise+Timeout.h */; }; - F44DE7768156CC132214A52E56EBC54A /* MOPUBReplayView.h in Headers */ = {isa = PBXBuildFile; fileRef = B8C1C01874F15B848BBD56EDEB351255 /* MOPUBReplayView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F4F95EEBE4C6684069A9034887BC26F3 /* MRNativeCommandHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 4803CD876C5E2B8A1AFEB813307DD3AC /* MRNativeCommandHandler.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F5068670924362F48A4BDF1348883AF3 /* MPConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 813C80CA9D64B3BEA37763F891E1D8F8 /* MPConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F54D2BAC7A17A14A8F66A93DD7F5FB09 /* FBLPromise+Await.h in Copy . Public Headers */ = {isa = PBXBuildFile; fileRef = CF437374EFE55C1F6AAC583CF2438B58 /* FBLPromise+Await.h */; }; - F565BD9E053B3787FDC187A27693BA09 /* MOPUBNativeVideoAdAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = FC6155FF94FD0991843109C2BAD27684 /* MOPUBNativeVideoAdAdapter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F569E430559522FBD0B873EBDF85CB94 /* FBSDKAccessTokenCaching.h in Headers */ = {isa = PBXBuildFile; fileRef = A048F7703B2EC24450F7C922DEE20108 /* FBSDKAccessTokenCaching.h */; settings = {ATTRIBUTES = (Private, ); }; }; - F573BE9F8FB6B8C4A5DD935572E9E2CF /* MPLogging.m in Sources */ = {isa = PBXBuildFile; fileRef = 649865C666C7477BF099B7267CFCE31A /* MPLogging.m */; }; - F5A30DAD1E4BBD5CA57F1E7E127FC779 /* FBLPromise+Wrap.m in Sources */ = {isa = PBXBuildFile; fileRef = 189656ECFEB104F73155E9AA9AD66671 /* FBLPromise+Wrap.m */; }; - F5A48EA38A66E84D1D6779AEDB5401BD /* FBSDKAccessTokenCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 2680511DDF46778435320A7B4840000C /* FBSDKAccessTokenCache.m */; }; - F5B83B899458418C40448B8703B01E68 /* GDTCORPlatform.h in Headers */ = {isa = PBXBuildFile; fileRef = 470D2391C5EC0995BA8077545966D64E /* GDTCORPlatform.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F5BF7B6C4B694A72353B8C2BE67069D8 /* MPNativeAdConfigValues.h in Headers */ = {isa = PBXBuildFile; fileRef = 46DA5680C87AF21DB250F1FE9744E305 /* MPNativeAdConfigValues.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F5EDE8C6A2B9A5E1503064C876091B92 /* FBLPromise+Then.m in Sources */ = {isa = PBXBuildFile; fileRef = E9F2DAD326F9C67B2A7D41EE2353716D /* FBLPromise+Then.m */; }; - F5FF1AEE1C43FE00412F6DCCDF40D006 /* MPNativeCustomEventDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E6732319F91DEFF1EF5560E5E29436D /* MPNativeCustomEventDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F67074A6426AE792ED262C23A7F6C174 /* MPVASTIndustryIcon.m in Sources */ = {isa = PBXBuildFile; fileRef = 397525176B004A3B0D5200875274F6D3 /* MPVASTIndustryIcon.m */; }; - F68020EB780172DFFDA7AC05ED264B58 /* FIRInstallationsItem+RegisterInstallationAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C6522F48AB08CA38170DB89C1F9C275 /* FIRInstallationsItem+RegisterInstallationAPI.m */; }; - F684193C8547C2C89D3A2751911D8F8E /* FIRAnalyticsConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 542B131B0ABF21536A284C07B3FAA324 /* FIRAnalyticsConfiguration.h */; settings = {ATTRIBUTES = (Private, ); }; }; - F6844B74A899EB0CCD85C91E41CE1696 /* FBSDKGraphRequestConnection+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = C420F42A793013076D91CC2D42548B2F /* FBSDKGraphRequestConnection+Internal.h */; settings = {ATTRIBUTES = (Private, ); }; }; - F69927184ADBBA9EA3223D5186211308 /* GDTCCTPrioritizer.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C6F13156DD89CE737EA263F1E9D1187 /* GDTCCTPrioritizer.m */; }; - F6D973F85567BF70141B2917ACFBBBA9 /* GDTCORClock.h in Headers */ = {isa = PBXBuildFile; fileRef = 30979C1EAFF54D6152F20715BBF0D637 /* GDTCORClock.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F6F05DFBF4DCADFAEA81419A2DD2F2AC /* FBSDKCrashShield.m in Sources */ = {isa = PBXBuildFile; fileRef = FCA9BFB46C6242210AC9CC24ACD94D78 /* FBSDKCrashShield.m */; }; - F7A64B58F84130024C239FEAD682E2AA /* MPNativeAdRenderingImageLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F2245E83269AFA0BCDB6A1697D1EC32F /* MPNativeAdRenderingImageLoader.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F7FC4BDF64E5057DB25FD3F944B160E8 /* FIRInstallationsIIDTokenStore.h in Headers */ = {isa = PBXBuildFile; fileRef = E6637C91A10A52F305D082B978E4D217 /* FIRInstallationsIIDTokenStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F8098577205BA404DC0660D5030F17E0 /* FBSDKIcon.m in Sources */ = {isa = PBXBuildFile; fileRef = 003B2E4C0A9E07A53EBBBE8C33172E6B /* FBSDKIcon.m */; }; - F87119E892C6296CAE7C86CF2DC7C570 /* NSJSONSerialization+MPAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 847E2A1299B889745B7CDA61402E6461 /* NSJSONSerialization+MPAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F89240CCD254B38B0855C765E415AFDE /* GULSceneDelegateSwizzler.h in Headers */ = {isa = PBXBuildFile; fileRef = 058A05D288334891D5D176D32DAD91D3 /* GULSceneDelegateSwizzler.h */; settings = {ATTRIBUTES = (Private, ); }; }; - F8A52C74109311B59066A6A61BC4CA4E /* FIRApp.h in Headers */ = {isa = PBXBuildFile; fileRef = 47F0C2A60BDAC27EDD167D068529AF76 /* FIRApp.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F92B0B10C38D066BB6A117DC06749833 /* MPHTMLInterstitialViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FEBA4164304A01B6DD5AABD187C7917D /* MPHTMLInterstitialViewController.m */; }; - F9AB124BEE7C3C1EF0AA4A09B073D355 /* FIRCrashlytics.h in Headers */ = {isa = PBXBuildFile; fileRef = FA9F4355D52C34E7D21046BFFC2C3CD6 /* FIRCrashlytics.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FA378690414BA8DBCF782F20CF15D2CB /* FBSDKErrorConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 402AC9B1720B22AEE526DCE4416CD7F8 /* FBSDKErrorConfiguration.m */; }; - FA680DD060BD6D96ED64A18431BC363A /* MRBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D42B77EE4F038D68606FA53FEFB9FED /* MRBridge.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FA6CB32C31B96E6A7A8DD091D3315BB6 /* MPActivityViewControllerHelper+TweetShare.h in Headers */ = {isa = PBXBuildFile; fileRef = 494668B5491A9BAA3C74B35D973D9CA7 /* MPActivityViewControllerHelper+TweetShare.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FA6D9F4401C8A33D00F089E5B07B80E5 /* MPConsentManager.m in Sources */ = {isa = PBXBuildFile; fileRef = EE866B09074DCE61CA22189AF75F00C4 /* MPConsentManager.m */; }; - FA93831868CC49BCDF236F15C3A80FFA /* MPGeolocationProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = F09341822A2A373E7AE823104DE76BAC /* MPGeolocationProvider.m */; }; - FB0C6FC26FEE56643C0555E39E483ABA /* MPNativeCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = A32789EBF7B8C2B831148E699229B60D /* MPNativeCustomEvent.m */; }; - FC4310349E38DF0B2FEE5D46472A556E /* FBSDKBridgeAPIRequest+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C1E69477C6B2B65E73D773DF99C41B5 /* FBSDKBridgeAPIRequest+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - FC5252C42FA21B81D64E5699698E6969 /* FIRVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = 924EC653C3FDD2077EFC407D2052C7CF /* FIRVersion.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FC781BFC452CF1C98513B505854DF23B /* FlurryEmpty.m in Sources */ = {isa = PBXBuildFile; fileRef = 3E65293B030BE772658220223FD0DFB5 /* FlurryEmpty.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - FC87C2EF85DC8FBD8E96B5EFA626F0B7 /* MPCoreInstanceProvider+MRAID.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B1A1AACDDD2A0A3261087CD42C1616C /* MPCoreInstanceProvider+MRAID.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FCEF799828E6AAAAC50E49EB32FD4249 /* cct.nanopb.h in Headers */ = {isa = PBXBuildFile; fileRef = EFF66D538C1AF71FC5D1948D532C3843 /* cct.nanopb.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FD012BECDA9F040447BA7EC04869A348 /* FIRCLSThreadState.c in Sources */ = {isa = PBXBuildFile; fileRef = D454164375BCE20FEAA887F05C82CA54 /* FIRCLSThreadState.c */; }; - FD3C1F7BB55BC0509877635BE39C1566 /* FBSDKKeychainStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 73D633F95C5F3899CCBB137C7F13BC6D /* FBSDKKeychainStore.h */; settings = {ATTRIBUTES = (Private, ); }; }; - FD4B647BC72E3E3BFD1A6172C2B8BC9A /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EDAB3590DA5F32B3E4CEED29ED17BBA3 /* CoreGraphics.framework */; }; - FD52C33EE15AA10D907E1CD3D13EE57D /* MPLogEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 45822A4CD37798CFA5BA7FBF0D862256 /* MPLogEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FD8E9ED4496186B98EF18A5D00D9D659 /* FBSDKAudioResourceLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = ADC4A2B157B2A75E74E84E0A996C0862 /* FBSDKAudioResourceLoader.m */; }; - FE051329F7C9AA711392BC95BC276C48 /* MPHTMLBannerCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 182380E9950F308C42B1AB917175D87F /* MPHTMLBannerCustomEvent.m */; }; - FE5756BBBAB3AFDB2F2264176805398E /* FIRCLSMachO.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D29E472CCF11BA8F9024F5B63CB6023 /* FIRCLSMachO.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FE69F4219B75E3EC9DE03D8CEFF76C0A /* FBSDKGraphRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 454CDE9720C69079F1DDF68FD6A04105 /* FBSDKGraphRequest.m */; }; - FE6C192F83012653A805848EA57027AF /* firebasecore.nanopb.c in Sources */ = {isa = PBXBuildFile; fileRef = D2A00557E86AB985431B6EBE76C05CE9 /* firebasecore.nanopb.c */; }; - FE6E869FC23597AAD6CD8590909FD360 /* FIRInstallationsErrors.h in Headers */ = {isa = PBXBuildFile; fileRef = CA442CD7CB2FFEBFC107903616DA474C /* FIRInstallationsErrors.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FE99205C394E281BCA97A7DA56FB7D2A /* MPAdServerURLBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = C67890988039719A30605DDB4EA28ABD /* MPAdServerURLBuilder.m */; }; - FE999CE557BC942EC10E50CE6230B807 /* MPVASTStringUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = A52F4F9D59A0C7A0ED4F5AFFECB2C689 /* MPVASTStringUtilities.m */; }; - FEAC2B737D5D53E08CF6FA290DB93198 /* FBSDKBridgeAPIProtocolWebV2.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D90F6BB2DD30A05491B08915D584EC9 /* FBSDKBridgeAPIProtocolWebV2.m */; }; - FEFCE2071905AF897B4D872243489401 /* FIRCLSNetworkResponseHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = EA5EC1980295B2EDBC90190C7F9168EA /* FIRCLSNetworkResponseHandler.m */; }; - FF206B45345DDAEE81C6BC3730B8D79B /* MPMoPubRewardedPlayableCustomEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BD2F8109AED7FC1EBDF2586A1D5B482 /* MPMoPubRewardedPlayableCustomEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FF2163B30F4F35645B7FE4DAEAA64DCA /* GDTCCTUploader.m in Sources */ = {isa = PBXBuildFile; fileRef = 62D23669A7DA2F7B7B38A21B83AD3BF3 /* GDTCCTUploader.m */; }; - FFA5E45EA4ADB1710EC65AF248C13881 /* FBSDKSettings.m in Sources */ = {isa = PBXBuildFile; fileRef = 6AED6248B672A00E0A269F9229742629 /* FBSDKSettings.m */; }; + 52D58B5E0F07636EF5E2F3BC51E378F0 /* Pods-MAPS.ME-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FEF97F4F8F5EAA30727A05FD0686A7B /* Pods-MAPS.ME-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FA200221239880CD7A192ED0F1180B4D /* Pods-MAPS.ME-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = BCFD91FCC4D32901C2DC541CA8285D3C /* Pods-MAPS.ME-dummy.m */; }; + FDBD600E5F63C60CBA4F7D2D186D1F97 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73010CC983E3809BECEE5348DA1BB8C6 /* Foundation.framework */; }; /* End PBXBuildFile section */ -/* Begin PBXContainerItemProxy section */ - 02BD44E0FCB59FABFACFD57A0335E04D /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 2BBF7206D7FAC92C82A042A99C4A98F8; - remoteInfo = PromisesObjC; - }; - 06525BCA6DB3D9BD0BD2E37D02F9E59D /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = D2B5E7DCCBBFB32341D857D01211A1A3; - remoteInfo = nanopb; - }; - 0A5F4F384190748021FF13CDBBC16250 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 28907903AF6DD0AD321D92CD660E7E23; - remoteInfo = FBSDKCoreKit; - }; - 1559F2CC36A61C1D28F7166939C37B1E /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 8D7F5D5DD528D21A72DC87ADA5B12E2D; - remoteInfo = GoogleUtilities; - }; - 15FECE96DFC39351545A7024FFAB8EE3 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 8D7F5D5DD528D21A72DC87ADA5B12E2D; - remoteInfo = GoogleUtilities; - }; - 1C284AAC4DB6AEE40E03FC942F354A50 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = F4F25FCAC51B51FD5F986EB939BF1F87; - remoteInfo = GoogleDataTransportCCTSupport; - }; - 2381B76798653075E727F736D061AC85 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 4402AFF83DBDC4DD07E198685FDC2DF2; - remoteInfo = FirebaseCore; - }; - 2F85C9D731CD0533B439FA9223350ECE /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = D53454FBB630479B01CA0A777383E94F; - remoteInfo = FBAudienceNetwork; - }; - 32B37E9D98B8A3586848607B0B2E013D /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5C0371EE948D0357B8EE0E34ABB44BF0; - remoteInfo = GoogleDataTransport; - }; - 3328B0ED604A59E63C12DB5BE776FD76 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 28907903AF6DD0AD321D92CD660E7E23; - remoteInfo = FBSDKCoreKit; - }; - 37FA74316796D76E7AE3AEFCEE707701 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 8D7F5D5DD528D21A72DC87ADA5B12E2D; - remoteInfo = GoogleUtilities; - }; - 3BF797F0613CBBD2D98DCCCF146709A7 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = D2B5E7DCCBBFB32341D857D01211A1A3; - remoteInfo = nanopb; - }; - 4189DF6CD2170EB288411D499A9B1CDB /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5C0371EE948D0357B8EE0E34ABB44BF0; - remoteInfo = GoogleDataTransport; - }; - 4230849FF50126FBFD5AE60BBDE81F76 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = D372E53E2E8FEAA06A0439FB85E65767; - remoteInfo = FirebaseAnalyticsInterop; - }; - 498DD29925E9A03EBD3A2ACAB8BB2C7F /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = D372E53E2E8FEAA06A0439FB85E65767; - remoteInfo = FirebaseAnalyticsInterop; - }; - 4E73164D479C1603F3022749B54B6A02 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = D2B5E7DCCBBFB32341D857D01211A1A3; - remoteInfo = nanopb; - }; - 71D8C0621DBE37F6DB123547478BB28C /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = F4F25FCAC51B51FD5F986EB939BF1F87; - remoteInfo = GoogleDataTransportCCTSupport; - }; - 723CEBAFA1B6093BF5668713FC589C93 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = D2B5E7DCCBBFB32341D857D01211A1A3; - remoteInfo = nanopb; - }; - 77873F5C6ED5BFB61118EE06E1A8F4C9 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 10C5885FCB0908EF785774EE52473DAB; - remoteInfo = FBSDKLoginKit; - }; - 7880C190813461AF05092E27F49A40E7 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 4402AFF83DBDC4DD07E198685FDC2DF2; - remoteInfo = FirebaseCore; - }; - 7A676BE49BF71CB93B733FA3F66283F1 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = B53D977A951AFC38B21751B706C1DF83; - remoteInfo = GoogleAppMeasurement; - }; - 821E5747969E9D7A605D58F01DBFE5EE /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = D2B5E7DCCBBFB32341D857D01211A1A3; - remoteInfo = nanopb; - }; - 83C025231CC535104969403DCCD6D346 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5C0371EE948D0357B8EE0E34ABB44BF0; - remoteInfo = GoogleDataTransport; - }; - 8B168196A8B74B47EC0B33F62506D0A9 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 4402AFF83DBDC4DD07E198685FDC2DF2; - remoteInfo = FirebaseCore; - }; - 8BBB9B6978916C219804A25075E1FC92 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 87803597EB3F20FC46472B85392EC4FD; - remoteInfo = FirebaseInstallations; - }; - 8BF3ED0092223A6F9A52967E0D917A91 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 620E05868772C10B4920DC7E324F2C87; - remoteInfo = FirebaseCoreDiagnostics; - }; - 8D3783AEF130DCBD4543102A9BB5475B /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = D2B5E7DCCBBFB32341D857D01211A1A3; - remoteInfo = nanopb; - }; - 9039456C1C910D165999EE87DDDB26AD /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 620E05868772C10B4920DC7E324F2C87; - remoteInfo = FirebaseCoreDiagnostics; - }; - 90915D854B979ACF5A3DA449824A18AA /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 87803597EB3F20FC46472B85392EC4FD; - remoteInfo = FirebaseInstallations; - }; - 9945C39F0E78F7D499E5BF921A377886 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 803EF1AFD27445A470912B1033353BFC; - remoteInfo = Pushwoosh; - }; - 9F5C4B8DFF3C0E6BFF8BDB977E2D3B8C /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 2BBF7206D7FAC92C82A042A99C4A98F8; - remoteInfo = PromisesObjC; - }; - AAE508C69CE1D32FCC0F38FB0038A253 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = B0B23938B1EBCBAD2419AB6E9D222A0B; - remoteInfo = AppsFlyerFramework; - }; - ACDD0FEA0384D7ADBC2C2E319EDA4BDD /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5EB4B0B6DA6D5C0C3365733BEAA1C485; - remoteInfo = FirebaseCoreDiagnosticsInterop; - }; - B016ED63B183F2304F840C4B66C7C203 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = D53454FBB630479B01CA0A777383E94F; - remoteInfo = FBAudienceNetwork; - }; - B2C5173BA3B8EC3EC2B3C15605063072 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 28907903AF6DD0AD321D92CD660E7E23; - remoteInfo = FBSDKCoreKit; - }; - BAA4B73D86809C65C4D627FED95F2022 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 8D7F5D5DD528D21A72DC87ADA5B12E2D; - remoteInfo = GoogleUtilities; - }; - BE9D5C5D06458B4F136CC6914F697E66 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 87803597EB3F20FC46472B85392EC4FD; - remoteInfo = FirebaseInstallations; - }; - BFBEC99882555BBA4E5DA0B62DBBDB28 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = C49E7A4D59E5C8BE8DE9FB1EFB150185; - remoteInfo = FirebaseAnalytics; - }; - C3FE2103B8E08D82FD28D956379DCC11 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 2BBF7206D7FAC92C82A042A99C4A98F8; - remoteInfo = PromisesObjC; - }; - CFBA8F383CDE605AE6735922D17801DF /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = BE4A4ECC8A801924F03DA6FFE943E04C; - remoteInfo = "mopub-ios-sdk"; - }; - D042998F1BF1A23A9EBACE4A4DA009BB /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 23EE62D8F7B4475F49FFAC72AEF81FAF; - remoteInfo = "Flurry-iOS-SDK"; - }; - DAF733AC9A15541FBA3E93FA487CD253 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 8D7F5D5DD528D21A72DC87ADA5B12E2D; - remoteInfo = GoogleUtilities; - }; - E3414C5966797B929D9E84C324F9663C /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 072CEA044D2EF26F03496D5996BBF59F; - remoteInfo = Firebase; - }; - E3599E9B95963B2F5C41A817965A9099 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = BE4A4ECC8A801924F03DA6FFE943E04C; - remoteInfo = "mopub-ios-sdk"; - }; - E47E16537EF84979F921F7DEC7FA5336 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 2BBF7206D7FAC92C82A042A99C4A98F8; - remoteInfo = PromisesObjC; - }; - E73A113F7FCEA2DF50CFB537E9DDD9F8 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 4402AFF83DBDC4DD07E198685FDC2DF2; - remoteInfo = FirebaseCore; - }; - EA3AE5C607DDE2E213C72609F8001442 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 8D7F5D5DD528D21A72DC87ADA5B12E2D; - remoteInfo = GoogleUtilities; - }; - EF8DF69AF18794FB1B6B2B0A803CD52C /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 526C4398D095B3704EB933DADBC30093; - remoteInfo = FirebaseCrashlytics; - }; - F0DA23923A1B5AA24755CE52F8512A53 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 526C4398D095B3704EB933DADBC30093; - remoteInfo = FirebaseCrashlytics; - }; - F235134E27D9F50E4A3272A8E3C7811B /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5EB4B0B6DA6D5C0C3365733BEAA1C485; - remoteInfo = FirebaseCoreDiagnosticsInterop; - }; - F3359FE2C480BA46A5BFCF3478909B7E /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = C49E7A4D59E5C8BE8DE9FB1EFB150185; - remoteInfo = FirebaseAnalytics; - }; - F3711A35570FA6A1622BFB46F45FBD86 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 8D115411ACEA387C9D854E11FDDD914F; - remoteInfo = "MoPub-FacebookAudienceNetwork-Adapters"; - }; - F6F4516DE56159958BD8F5029103F3A9 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 4402AFF83DBDC4DD07E198685FDC2DF2; - remoteInfo = FirebaseCore; - }; - F81A3726CE45FD570B53473A621892C9 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = B53D977A951AFC38B21751B706C1DF83; - remoteInfo = GoogleAppMeasurement; - }; - F8FAC0D40D4BF0C86A9D50E11D11EEB5 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = F4F25FCAC51B51FD5F986EB939BF1F87; - remoteInfo = GoogleDataTransportCCTSupport; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXCopyFilesBuildPhase section */ - 85A9D082DDE5B68FFB8F9FF0F120DF29 /* Copy . Private Headers */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = "$(PRIVATE_HEADERS_FOLDER_PATH)/."; - dstSubfolderSpec = 16; - files = ( - 9DFBB41B1EE8CD2DBC74C6A2D01540A4 /* FBLPromisePrivate.h in Copy . Private Headers */, - ); - name = "Copy . Private Headers"; - runOnlyForDeploymentPostprocessing = 0; - }; - B37F6D879042E1949943617516E472B2 /* Copy . Public Headers */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = "$(PUBLIC_HEADERS_FOLDER_PATH)/."; - dstSubfolderSpec = 16; - files = ( - 7C5AE77460DE205464FD1E07CF8B4F18 /* FBLPromise+All.h in Copy . Public Headers */, - B6E0B692B0BC3FD1182ECFE4D71A61F3 /* FBLPromise+Always.h in Copy . Public Headers */, - 419FAD636D347E6B477D2686C7FD4455 /* FBLPromise+Any.h in Copy . Public Headers */, - AEEAC5A0D1C02F465F0B1F9C328B2281 /* FBLPromise+Async.h in Copy . Public Headers */, - F54D2BAC7A17A14A8F66A93DD7F5FB09 /* FBLPromise+Await.h in Copy . Public Headers */, - 9CED94EF86C67904659484922A6FA655 /* FBLPromise+Catch.h in Copy . Public Headers */, - 9E81AE6AF9B79D4A249BBEE78967D5C0 /* FBLPromise+Delay.h in Copy . Public Headers */, - A44C2FD49BE881820FB6AAE5B57B5F8F /* FBLPromise+Do.h in Copy . Public Headers */, - A920F8FA40805597048A11A4F94CC98E /* FBLPromise+Race.h in Copy . Public Headers */, - DDD867D4752AFE8D07E9F13111D71FE8 /* FBLPromise+Recover.h in Copy . Public Headers */, - D6CCA5D4B98DE0A7C80BCDBC6E6C012D /* FBLPromise+Reduce.h in Copy . Public Headers */, - B31BC21157B3EA8F1AEA06202C7C1D8E /* FBLPromise+Retry.h in Copy . Public Headers */, - 0E4991ACA31A48171CBD0EE8FD11A5D7 /* FBLPromise+Testing.h in Copy . Public Headers */, - 55AF8C89826439DCD228E43C1F189A77 /* FBLPromise+Then.h in Copy . Public Headers */, - E06568305750EDF89753A120A3462F50 /* FBLPromise+Timeout.h in Copy . Public Headers */, - D0BD96903BFD64D32EA4DDF0D506E344 /* FBLPromise+Validate.h in Copy . Public Headers */, - 8A295BDA67D54CFD99E9FA5C49F9495D /* FBLPromise+Wrap.h in Copy . Public Headers */, - 7E91B1BEBF52E0FBE8ED41BFD3AFC52E /* FBLPromise.h in Copy . Public Headers */, - C79B84DBA0DDBD741A2DD73A68CF4A7D /* FBLPromiseError.h in Copy . Public Headers */, - 3EE8CD6C6DCAFE5CC362FE7B4985D196 /* FBLPromises.h in Copy . Public Headers */, - ); - name = "Copy . Public Headers"; - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - /* Begin PBXFileReference section */ - 0017B44EE65AC00BCC1B0FC05EB2B63F /* MPAdWebViewAgent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPAdWebViewAgent.h; path = MoPubSDK/Internal/HTML/MPAdWebViewAgent.h; sourceTree = ""; }; - 001873F285E6F5B21C6C6A7530676040 /* FIRStackFrame.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRStackFrame.h; path = Crashlytics/Crashlytics/Public/FIRStackFrame.h; sourceTree = ""; }; - 003B2E4C0A9E07A53EBBBE8C33172E6B /* FBSDKIcon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKIcon.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKIcon.m; sourceTree = ""; }; - 00603B739498C6C22C791A2AB78F9369 /* MPMemoryCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPMemoryCache.h; path = MoPubSDK/Internal/MPMemoryCache.h; sourceTree = ""; }; - 008788AB90E92CB1D6CAC4FFA2B977DE /* FBSDKLibAnalyzer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLibAnalyzer.m; path = FBSDKCoreKit/FBSDKCoreKit/Basics/Instrument/FBSDKLibAnalyzer.m; sourceTree = ""; }; - 00C955418D4EA25EB44624BF3D31FBBE /* MPAdView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPAdView.m; path = MoPubSDK/MPAdView.m; sourceTree = ""; }; - 01465573FDAFA1F649139DF8A5A2383D /* GDTCOREventDataObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCOREventDataObject.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCOREventDataObject.h; sourceTree = ""; }; - 014F157825595F660AF6B2FD35129CAD /* FBAudienceNetworkAds.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBAudienceNetworkAds.h; path = Static/FBAudienceNetwork.framework/Headers/FBAudienceNetworkAds.h; sourceTree = ""; }; - 015C5718742CBC0AC103C175BD154378 /* FIRCoreDiagnosticsConnector.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCoreDiagnosticsConnector.h; path = FirebaseCore/Sources/Private/FIRCoreDiagnosticsConnector.h; sourceTree = ""; }; - 0165D1E31F273763104B57739B29D6FD /* FirebaseCoreDiagnosticsInterop.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseCoreDiagnosticsInterop.release.xcconfig; sourceTree = ""; }; - 01752D1547CBC6C496B2C955E3D828C0 /* FBAdOptionsView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBAdOptionsView.h; path = Static/FBAudienceNetwork.framework/Headers/FBAdOptionsView.h; sourceTree = ""; }; - 01C505769F8A9606771AD3DD4AA8AADE /* FBSDKLoginManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLoginManager.m; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManager.m; sourceTree = ""; }; - 0201502435D6F659C6F8519D97C2DD95 /* FIRCLSFile.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCLSFile.m; path = Crashlytics/Crashlytics/Helpers/FIRCLSFile.m; sourceTree = ""; }; - 020291AE06EF0A2B69213AE3963D634F /* GDTCORReachability.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORReachability.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORReachability.m; sourceTree = ""; }; - 025436CF7D9569EB62DC3B55851351F8 /* GULAppDelegateSwizzler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULAppDelegateSwizzler.h; path = GoogleUtilities/AppDelegateSwizzler/Private/GULAppDelegateSwizzler.h; sourceTree = ""; }; - 02C1942E4257913823227F7A6D847739 /* MPVASTIndustryIcon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVASTIndustryIcon.h; path = MoPubSDK/Internal/VAST/MPVASTIndustryIcon.h; sourceTree = ""; }; - 02DF4DAD9C174A89145A1373B5C11241 /* FBSDKErrorRecoveryConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKErrorRecoveryConfiguration.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorRecoveryConfiguration.m; sourceTree = ""; }; - 02E085738B766EC947393C1303BD72F7 /* MPMRAIDInterstitialCustomEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPMRAIDInterstitialCustomEvent.h; path = MoPubSDK/Internal/MRAID/MPMRAIDInterstitialCustomEvent.h; sourceTree = ""; }; - 02F4FF6B450C0A7D3C06DA7A641FDA81 /* MRVideoPlayerManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MRVideoPlayerManager.m; path = MoPubSDK/Internal/MRAID/MRVideoPlayerManager.m; sourceTree = ""; }; - 031DE2703E31F3BB53D05A03FF3C4E28 /* FIRCLSMachOSlice.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCLSMachOSlice.m; path = Crashlytics/Shared/FIRCLSMachO/FIRCLSMachOSlice.m; sourceTree = ""; }; - 03C7FA19F4FCDE9FBE532FD2FD6867CD /* FirebaseInstallations-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FirebaseInstallations-umbrella.h"; sourceTree = ""; }; - 03D3D726322650EF597B9114AE00D70B /* FIRCLSProcessReportOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSProcessReportOperation.h; path = Crashlytics/Crashlytics/Operations/Reports/FIRCLSProcessReportOperation.h; sourceTree = ""; }; - 03E9BAC51FCDFEFE1E4AA322E08B9C8F /* MOPUBAVPlayerView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MOPUBAVPlayerView.m; path = MoPubSDK/NativeVideo/Internal/MOPUBAVPlayerView.m; sourceTree = ""; }; - 0457EF6C9EF25D313C049009B7E0CA94 /* MPStaticNativeAdRendererSettings.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPStaticNativeAdRendererSettings.m; path = MoPubSDK/NativeAds/MPStaticNativeAdRendererSettings.m; sourceTree = ""; }; - 04711A607F16F2B84569E72C42E97689 /* Pushwoosh.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Pushwoosh.release.xcconfig; sourceTree = ""; }; - 047D593E76EB49E2E716E15F76A96F2F /* NSURL+MPAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSURL+MPAdditions.m"; path = "MoPubSDK/Internal/Utility/Categories/NSURL+MPAdditions.m"; sourceTree = ""; }; - 04AB938EF519924E1E86F4753C744F77 /* MPTableViewAdPlacerCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPTableViewAdPlacerCell.m; path = MoPubSDK/NativeAds/Internal/MPTableViewAdPlacerCell.m; sourceTree = ""; }; - 04C628C3A291D5940749716D6D7C2801 /* FBSDKMeasurementEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKMeasurementEvent.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKMeasurementEvent.m; sourceTree = ""; }; - 04D44923236CF63334698156AA7D0114 /* FIRApp.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRApp.m; path = FirebaseCore/Sources/FIRApp.m; sourceTree = ""; }; - 04F78786D869A61160530A6B299171B1 /* FIRInstallations.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstallations.h; path = FirebaseInstallations/Source/Library/Public/FIRInstallations.h; sourceTree = ""; }; - 058A05D288334891D5D176D32DAD91D3 /* GULSceneDelegateSwizzler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULSceneDelegateSwizzler.h; path = GoogleUtilities/SceneDelegateSwizzler/Private/GULSceneDelegateSwizzler.h; sourceTree = ""; }; - 05D6CA7AC7F98CFB2E60CD6D77384EC0 /* MRProperty.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MRProperty.h; path = MoPubSDK/Internal/MRAID/MRProperty.h; sourceTree = ""; }; - 065608AE87A0E0699093FAA8905D6E88 /* FBSDKWebDialogView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKWebDialogView.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialogView.m; sourceTree = ""; }; - 0678FE016B2DFDDD306A356AA16276CD /* UIView+MPAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+MPAdditions.m"; path = "MoPubSDK/Internal/Utility/Categories/UIView+MPAdditions.m"; sourceTree = ""; }; - 06A02E80D1C5D4C73742A796CAAAA880 /* MPClientAdPositioning.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPClientAdPositioning.h; path = MoPubSDK/NativeAds/MPClientAdPositioning.h; sourceTree = ""; }; - 06C2D80F1174A8BD4EF3423D5064D41E /* MPMoPubNativeCustomEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPMoPubNativeCustomEvent.h; path = MoPubSDK/NativeAds/Internal/MPMoPubNativeCustomEvent.h; sourceTree = ""; }; - 06D395969B2EBB5BCA02301809DF7E06 /* MPMediationManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPMediationManager.m; path = MoPubSDK/Internal/MPMediationManager.m; sourceTree = ""; }; - 06FC5C9CF96D60C50FCD47D339C91951 /* nanopb.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = nanopb.framework; path = nanopb.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 075C4DF70B858A5DBD768F5B0923C013 /* FBSDKSuggestedEventsIndexer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKSuggestedEventsIndexer.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/SuggestedEvents/FBSDKSuggestedEventsIndexer.m; sourceTree = ""; }; - 0760BDE73BD4B2996E034191239627CD /* mopub-ios-sdk-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "mopub-ios-sdk-umbrella.h"; sourceTree = ""; }; - 0765CB37FBB795F392FE143A06B334AA /* MPDeviceInformation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPDeviceInformation.m; path = MoPubSDK/Internal/MPDeviceInformation.m; sourceTree = ""; }; - 07685B4C5D5224A31054F4BF901AB1D3 /* FlurrySKAdNetwork.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FlurrySKAdNetwork.h; path = Flurry/FlurrySKAdNetwork.h; sourceTree = ""; }; - 0769F389ED5DDAF30BA2F3369F791324 /* FIRCLSFABNetworkClient.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCLSFABNetworkClient.m; path = Crashlytics/Shared/FIRCLSNetworking/FIRCLSFABNetworkClient.m; sourceTree = ""; }; - 077579AED437B3E8996DABD00AFC764E /* MPRewardedVideo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPRewardedVideo.h; path = MoPubSDK/RewardedVideo/MPRewardedVideo.h; sourceTree = ""; }; - 079E8901A9A2334D64914A0F971A01AD /* FIRInstallationsAuthTokenResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstallationsAuthTokenResult.h; path = FirebaseInstallations/Source/Library/Public/FIRInstallationsAuthTokenResult.h; sourceTree = ""; }; - 07A24A76299EF8E854CFE54D4B4FEE4A /* FBSDKLoginManagerLoginResult+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKLoginManagerLoginResult+Internal.h"; path = "FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginManagerLoginResult+Internal.h"; sourceTree = ""; }; - 07F4CD47518D8E62FDF58C1DD413D2EB /* FIRCLSURLSessionUploadTask.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSURLSessionUploadTask.h; path = Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionUploadTask.h; sourceTree = ""; }; - 0838ABB33656947F8A606B298E4D4697 /* MPImageDownloadQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPImageDownloadQueue.m; path = MoPubSDK/Internal/Utility/MPImageDownloadQueue.m; sourceTree = ""; }; - 088FA89003CA8937C297FABCB98C888E /* MPNativeAdSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPNativeAdSource.m; path = MoPubSDK/NativeAds/MPNativeAdSource.m; sourceTree = ""; }; - 08A72F75040B69AF97C5D9890A841DA2 /* FBNativeAdCollectionViewCellProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBNativeAdCollectionViewCellProvider.h; path = Static/FBAudienceNetwork.framework/Headers/FBNativeAdCollectionViewCellProvider.h; sourceTree = ""; }; - 08BF9E724C265F58FF6A09FB92D51AF5 /* FIRCLSNetworkOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSNetworkOperation.h; path = Crashlytics/Crashlytics/Settings/Operations/FIRCLSNetworkOperation.h; sourceTree = ""; }; - 08EB1B4A9123BD74F56E943849F22160 /* FBAdIconView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBAdIconView.h; path = Static/FBAudienceNetwork.framework/Headers/FBAdIconView.h; sourceTree = ""; }; - 0916159955B5C6A4C2A8C48C0EA27A23 /* MPRateLimitManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPRateLimitManager.h; path = MoPubSDK/Internal/MPRateLimitManager.h; sourceTree = ""; }; - 09252C0CBCEB24CB026EBD6B934C8121 /* FBSDKLoginButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLoginButton.h; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginButton.h; sourceTree = ""; }; - 09848339CC1F184A821322EB9C266D55 /* CoreTelephony.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreTelephony.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/CoreTelephony.framework; sourceTree = DEVELOPER_DIR; }; - 09C70C47126BFEDBFCB81ACFA9563DD7 /* mopub-ios-sdk.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "mopub-ios-sdk.debug.xcconfig"; sourceTree = ""; }; - 09CCCF25AE8724829255006464435D7B /* FIRCLSFABAsyncOperation_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSFABAsyncOperation_Private.h; path = Crashlytics/Shared/FIRCLSOperation/FIRCLSFABAsyncOperation_Private.h; sourceTree = ""; }; - 09D25BB92FE35DE365583A0E4F0F33F8 /* FBSDKGateKeeperManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKGateKeeperManager.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKGateKeeperManager.m; sourceTree = ""; }; - 09FF2C02EC266B00E1319521BF961022 /* MPNativeAdRendererConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPNativeAdRendererConfiguration.m; path = MoPubSDK/NativeAds/MPNativeAdRendererConfiguration.m; sourceTree = ""; }; - 0A3E9520A2E59D655D6BC500A9C6E772 /* FBSDKMeasurementEvent_Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKMeasurementEvent_Internal.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMeasurementEvent_Internal.h; sourceTree = ""; }; - 0A8924B6305C5116EA8035AE891818F6 /* MoPub.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = MoPub.framework; path = "mopub-ios-sdk.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - 0A91470A56EC81F0DFB8596B4AF9E7F1 /* MPConsentError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPConsentError.h; path = MoPubSDK/MPConsentError.h; sourceTree = ""; }; - 0A9A74A3715738F017D71D5DB5E217B1 /* FBAudienceNetwork.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBAudienceNetwork.h; path = Static/FBAudienceNetwork.framework/Headers/FBAudienceNetwork.h; sourceTree = ""; }; - 0ADCE169C2DFDCDA84BAF06B7A69AF17 /* GULNSData+zlib.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "GULNSData+zlib.m"; path = "GoogleUtilities/NSData+zlib/GULNSData+zlib.m"; sourceTree = ""; }; - 0AE47E0C7C58C3899010069D11025EC8 /* MRBundleManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MRBundleManager.h; path = MoPubSDK/Internal/MRAID/MRBundleManager.h; sourceTree = ""; }; - 0B7483A8401BD6AAE507C485762CFE33 /* MPVASTTracking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVASTTracking.h; path = MoPubSDK/Internal/MPVASTTracking.h; sourceTree = ""; }; - 0B897F32CE3E8EFB8DA5F3826EDBF14B /* FBAdSettingsBridge.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBAdSettingsBridge.h; path = Static/FBAudienceNetwork.framework/Headers/FBAdSettingsBridge.h; sourceTree = ""; }; - 0B9850FA2AA2C7CC3026D043CAAE83A0 /* FIRCLSByteUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCLSByteUtility.m; path = Crashlytics/Shared/FIRCLSByteUtility.m; sourceTree = ""; }; - 0C28121742F9E22DFC46E12927EE6877 /* FIRCLSConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCLSConstants.m; path = Crashlytics/Shared/FIRCLSConstants.m; sourceTree = ""; }; - 0C601DB682823E530270E63F2D9D45B3 /* MPNativeAd+Internal.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "MPNativeAd+Internal.m"; path = "MoPubSDK/NativeAds/Internal/MPNativeAd+Internal.m"; sourceTree = ""; }; - 0CC330BDC4FC8AAE8E7D51445487FDE1 /* FIRCLSRecordIdentity.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSRecordIdentity.h; path = Crashlytics/Crashlytics/Models/Record/FIRCLSRecordIdentity.h; sourceTree = ""; }; - 0CD8DD8AFF40B6AB5746108E84D5520D /* FBSDKBasicUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKBasicUtility.m; path = FBSDKCoreKit/FBSDKCoreKit/Basics/Internal/FBSDKBasicUtility.m; sourceTree = ""; }; - 0CF33EBBFA2AF01CD6134E64522EC598 /* FBSDKViewImpressionTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKViewImpressionTracker.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKViewImpressionTracker.h; sourceTree = ""; }; - 0D096A18FD1A4F80D68382B11D2D4D65 /* MPNativeAdRendererConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAdRendererConstants.h; path = MoPubSDK/NativeAds/Internal/MPNativeAdRendererConstants.h; sourceTree = ""; }; - 0D1543A3445D40273F9C31523C8F92EC /* FIRComponent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRComponent.m; path = FirebaseCore/Sources/FIRComponent.m; sourceTree = ""; }; - 0D3CAD0D679131771D896B7209104FE9 /* FacebookBannerCustomEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FacebookBannerCustomEvent.h; path = FacebookAudienceNetwork/FacebookBannerCustomEvent.h; sourceTree = ""; }; - 0E16FEEB53C97C640309E95CDBB693D9 /* MPVASTResource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVASTResource.m; path = MoPubSDK/Internal/VAST/MPVASTResource.m; sourceTree = ""; }; - 0E4F067F6B08095C2FA1BFB88F713E3B /* FBSDKSmartDeviceDialogView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKSmartDeviceDialogView.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Device/FBSDKSmartDeviceDialogView.h; sourceTree = ""; }; - 0EC2AE59F7922C48BC051E3E111582CC /* FBSDKAppLink.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppLink.m; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLink.m; sourceTree = ""; }; - 0F00F7C653C8AF0F8B1B154E5EE5A071 /* MPViewabilityAdapterMoat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPViewabilityAdapterMoat.h; path = MoPubSDK/Viewability/MOAT/MPViewabilityAdapterMoat.h; sourceTree = ""; }; - 0F3A09DE5943807AEF91DEAEA9E42C07 /* FIRCLSReportManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSReportManager.h; path = Crashlytics/Crashlytics/Controllers/FIRCLSReportManager.h; sourceTree = ""; }; - 0F7B0E3F7C505262F6C97A04987D51BB /* MoPub-FacebookAudienceNetwork-Adapters-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "MoPub-FacebookAudienceNetwork-Adapters-Info.plist"; sourceTree = ""; }; - 0FB8C73C055CB40B5FA38FB3415B48F0 /* FBSDKLoginManagerLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLoginManagerLogger.h; path = FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginManagerLogger.h; sourceTree = ""; }; - 0FE37E511A2572985CA8E982EF114A0D /* FacebookRewardedVideoCustomEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FacebookRewardedVideoCustomEvent.m; path = FacebookAudienceNetwork/FacebookRewardedVideoCustomEvent.m; sourceTree = ""; }; - 1005B3DB3030176AD2DC194EF14BC314 /* FBSDKLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLogger.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKLogger.h; sourceTree = ""; }; - 100B9CE6B5DF19397BE6BD4A1EE5CE21 /* FBSDKGraphRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKGraphRequest.h; path = FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphRequest.h; sourceTree = ""; }; - 1037B671BA987B57CA6D694962F6A280 /* MPAdServerCommunicator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPAdServerCommunicator.h; path = MoPubSDK/Internal/Common/MPAdServerCommunicator.h; sourceTree = ""; }; - 105C0D221E96621B0758498B90A5F78D /* FBSDKUserDataStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKUserDataStore.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKUserDataStore.m; sourceTree = ""; }; - 108253A30ED3D068BEE65AC6122695EC /* MPPrivateRewardedVideoCustomEventDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPPrivateRewardedVideoCustomEventDelegate.h; path = MoPubSDK/RewardedVideo/Internal/MPPrivateRewardedVideoCustomEventDelegate.h; sourceTree = ""; }; - 10B9C11F52EBB8A073785586610A8D59 /* MPWebBrowserUserAgentInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPWebBrowserUserAgentInfo.m; path = MoPubSDK/Internal/MPWebBrowserUserAgentInfo.m; sourceTree = ""; }; - 10D2FE383B555E9DF33CBBE8010D83F3 /* FBLPromise+Catch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Catch.h"; path = "Sources/FBLPromises/include/FBLPromise+Catch.h"; sourceTree = ""; }; - 10F706CC781CCDBDCC9F2E865EBC6F42 /* FIRCLSDownloadAndSaveSettingsOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSDownloadAndSaveSettingsOperation.h; path = Crashlytics/Crashlytics/Settings/Operations/FIRCLSDownloadAndSaveSettingsOperation.h; sourceTree = ""; }; - 10F83B8580E47159C94FA05B43A920A8 /* MPStreamAdPlacementData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPStreamAdPlacementData.m; path = MoPubSDK/NativeAds/MPStreamAdPlacementData.m; sourceTree = ""; }; - 110466D95D202F08F834C72488BCE57E /* MPMutedBtn@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MPMutedBtn@2x.png"; path = "MoPubSDK/Resources/MPMutedBtn@2x.png"; sourceTree = ""; }; - 11C5302E85FCD45DFA64B62C5DEC15D2 /* MOPUBNativeVideoAdRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MOPUBNativeVideoAdRenderer.h; path = MoPubSDK/NativeVideo/MOPUBNativeVideoAdRenderer.h; sourceTree = ""; }; - 124B364816AA75D35B20839AE70FAE36 /* MPRateLimitConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPRateLimitConfiguration.m; path = MoPubSDK/Internal/MPRateLimitConfiguration.m; sourceTree = ""; }; - 12842DDDEF3AF99466F01F05F1E12F79 /* GoogleDataTransport.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GoogleDataTransport.release.xcconfig; sourceTree = ""; }; - 12942E95450BEACE0C712F6D67AFEC63 /* MPWebBrowserUserAgentInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPWebBrowserUserAgentInfo.h; path = MoPubSDK/Internal/MPWebBrowserUserAgentInfo.h; sourceTree = ""; }; - 129EC6EFFC7E39FDA23E0B5149E68C11 /* MPVASTResourceView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVASTResourceView.h; path = MoPubSDK/Internal/VideoPlayer/MPVASTResourceView.h; sourceTree = ""; }; - 12B3ACF35A72BD37FA4087EA336D4FC4 /* MPCoreInstanceProvider+MRAID.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "MPCoreInstanceProvider+MRAID.m"; path = "MoPubSDK/Internal/MPCoreInstanceProvider+MRAID.m"; sourceTree = ""; }; - 1320DC94A7C81519A9ED20DDDC21D335 /* FIRAnalyticsConnector.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FIRAnalyticsConnector.framework; path = Frameworks/FIRAnalyticsConnector.framework; sourceTree = ""; }; - 13A3DFF61BC403AAA3457FFF182AD5AC /* GULMutableDictionary.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULMutableDictionary.h; path = GoogleUtilities/Network/Private/GULMutableDictionary.h; sourceTree = ""; }; - 13C8C8B254851998F9289F71229B28A2 /* FirebaseInstallations.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = FirebaseInstallations.framework; path = FirebaseInstallations.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 14B33C6D455B374BFF40F79724EF1BC7 /* FBSDKKeychainStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKKeychainStore.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStore.m; sourceTree = ""; }; - 14E1D9B307BB8EF1F04A6423DA930C64 /* FBSDKError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKError.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKError.m; sourceTree = ""; }; - 150923DBB7459F1982ECE83658A4FAC2 /* MPTableViewAdPlacer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPTableViewAdPlacer.m; path = MoPubSDK/NativeAds/MPTableViewAdPlacer.m; sourceTree = ""; }; - 156BBC399CEC0450CFAA331C5FC3EFC6 /* FBSDKContainerViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKContainerViewController.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKContainerViewController.m; sourceTree = ""; }; - 15AFF8ED16FC6E7CB5CA92644D240135 /* NSDictionary+MPAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSDictionary+MPAdditions.m"; path = "MoPubSDK/Internal/Utility/Categories/NSDictionary+MPAdditions.m"; sourceTree = ""; }; - 15BB88AC3E4987FBCF5DCAB97509A940 /* MPMRAIDInterstitialViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPMRAIDInterstitialViewController.m; path = MoPubSDK/Internal/MRAID/MPMRAIDInterstitialViewController.m; sourceTree = ""; }; - 16365F7374A77C5CE9F6D6B2A02DE69E /* MPVideoPlayerViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVideoPlayerViewController.m; path = MoPubSDK/Internal/VideoPlayer/MPVideoPlayerViewController.m; sourceTree = ""; }; - 164F9FB97B25205902BDE5DEE4E6AA0E /* MPVASTWrapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVASTWrapper.h; path = MoPubSDK/Internal/VAST/MPVASTWrapper.h; sourceTree = ""; }; - 1698BEAFD75D33FEEB50BF85AC0D5EDE /* FBLPromise+Timeout.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Timeout.h"; path = "Sources/FBLPromises/include/FBLPromise+Timeout.h"; sourceTree = ""; }; - 169F447C13B9E66969C6AA90549006B3 /* MPLogManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPLogManager.m; path = MoPubSDK/Logging/Internal/MPLogManager.m; sourceTree = ""; }; - 16EADB58B34000FF17C58604465CC694 /* FBSDKCrashObserving.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKCrashObserving.h; path = FBSDKCoreKit/FBSDKCoreKit/Basics/Instrument/FBSDKCrashObserving.h; sourceTree = ""; }; - 16F5D92F54EC778599150F6FAC0F4D94 /* FIRInstallationsStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstallationsStore.h; path = FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStore.h; sourceTree = ""; }; - 170FFB1F45457129DD75B06B0F6971DF /* _FBSDKTemporaryErrorRecoveryAttempter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _FBSDKTemporaryErrorRecoveryAttempter.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ErrorRecovery/_FBSDKTemporaryErrorRecoveryAttempter.h; sourceTree = ""; }; - 1720997F290E7DBBC9B82125353CEF4B /* MPInterstitialCustomEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPInterstitialCustomEvent.m; path = MoPubSDK/MPInterstitialCustomEvent.m; sourceTree = ""; }; - 1769588CCBD5C868916AAC859E9C4697 /* GDTCORTransport_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORTransport_Private.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransport_Private.h; sourceTree = ""; }; - 178DF744509E149AA5E2706130C399B7 /* MPUnmutedBtn@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MPUnmutedBtn@2x.png"; path = "MoPubSDK/Resources/MPUnmutedBtn@2x.png"; sourceTree = ""; }; - 17A0F63C299400C9FB5C0797EB10E006 /* FBSDKCoreKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = FBSDKCoreKit.modulemap; sourceTree = ""; }; - 17B7CCEB9DB1937755D39AC2B41F7E60 /* FBLPromise+Any.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Any.m"; path = "Sources/FBLPromises/FBLPromise+Any.m"; sourceTree = ""; }; - 1820DDF5086BF703BB92EF583F5261A0 /* FBSDKFeatureManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKFeatureManager.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKFeatureManager.m; sourceTree = ""; }; - 182380E9950F308C42B1AB917175D87F /* MPHTMLBannerCustomEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPHTMLBannerCustomEvent.m; path = MoPubSDK/Internal/HTML/MPHTMLBannerCustomEvent.m; sourceTree = ""; }; - 18549790F80E0A33EC41D4492B7FA73B /* MPVideoPlayerFullScreenVASTAdOverlay.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVideoPlayerFullScreenVASTAdOverlay.m; path = MoPubSDK/Internal/VideoPlayer/MPVideoPlayerFullScreenVASTAdOverlay.m; sourceTree = ""; }; - 1864101E77EC0D309624A3116311CED8 /* FBSDKModelManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKModelManager.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/ML/FBSDKModelManager.h; sourceTree = ""; }; - 189656ECFEB104F73155E9AA9AD66671 /* FBLPromise+Wrap.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Wrap.m"; path = "Sources/FBLPromises/FBLPromise+Wrap.m"; sourceTree = ""; }; - 18ACA8724F0F50ACD1DBFF464A5E9407 /* MOPUBPlayerView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MOPUBPlayerView.h; path = MoPubSDK/NativeVideo/Internal/MOPUBPlayerView.h; sourceTree = ""; }; - 18BC0DDE1F396DB4841A0415351A1CCC /* FIRCLSURLSessionTask.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCLSURLSessionTask.m; path = Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionTask.m; sourceTree = ""; }; - 18C220367A63C478BA9150E330444821 /* FIRLoggerLevel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRLoggerLevel.h; path = FirebaseCore/Sources/Public/FIRLoggerLevel.h; sourceTree = ""; }; - 18FBCB9FA68775B2AC95E32505AED926 /* FBAdViewBridge.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBAdViewBridge.h; path = Static/FBAudienceNetwork.framework/Headers/FBAdViewBridge.h; sourceTree = ""; }; - 193B020564F2B2FD41D7659EF313E73D /* FacebookInterstitialCustomEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FacebookInterstitialCustomEvent.h; path = FacebookAudienceNetwork/FacebookInterstitialCustomEvent.h; sourceTree = ""; }; - 1951E99C9A1940B7B6BDA954D073BAE2 /* FBSDKModalFormPresentationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKModalFormPresentationController.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Device/FBSDKModalFormPresentationController.m; sourceTree = ""; }; - 195DCE7FE88ADB68A034247658D98612 /* FBSDKAppEventsState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppEventsState.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsState.h; sourceTree = ""; }; - 1980F3DCCEF53D219566696F8D4D7E45 /* FIRCLSReport.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCLSReport.m; path = Crashlytics/Crashlytics/Models/FIRCLSReport.m; sourceTree = ""; }; - 19947711F89786514178559A44913718 /* MPCloseBtn.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = MPCloseBtn.png; path = MoPubSDK/Resources/MPCloseBtn.png; sourceTree = ""; }; - 19AE5868B2E53C4428EBC2B63A6D769B /* MPImpressionData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPImpressionData.h; path = MoPubSDK/MPImpressionData.h; sourceTree = ""; }; - 19FF630DE179BF054F08268504BD934F /* MPAdConversionTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPAdConversionTracker.m; path = MoPubSDK/MPAdConversionTracker.m; sourceTree = ""; }; - 1A0A9F1E6F77B8B13E8A26A67CE648FF /* FBSDKInstrumentManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKInstrumentManager.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Instrument/FBSDKInstrumentManager.h; sourceTree = ""; }; - 1A31F9E27F0F73915497E00ACBC21244 /* FIRCLSSerializeSymbolicatedFramesOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCLSSerializeSymbolicatedFramesOperation.m; path = Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSSerializeSymbolicatedFramesOperation.m; sourceTree = ""; }; - 1A9B9035149FAFAB5FD6DCE6CA27B4DA /* FIRCLSHost.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCLSHost.m; path = Crashlytics/Crashlytics/Components/FIRCLSHost.m; sourceTree = ""; }; - 1AA80DA12D6EFABB753DCB998DB738B5 /* MOPUBReplayView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MOPUBReplayView.m; path = MoPubSDK/NativeVideo/Internal/MOPUBReplayView.m; sourceTree = ""; }; - 1AC7B2A4F058439563278763F4DFFCAD /* FBSDKAppLinkResolver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppLinkResolver.h; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkResolver.h; sourceTree = ""; }; - 1ADB306523399AE58770E1D0DCB152DD /* MPVASTAd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVASTAd.h; path = MoPubSDK/Internal/VAST/MPVASTAd.h; sourceTree = ""; }; - 1B17F1B0E2D795F5BBD93ADADF3C9FA7 /* FBSDKGraphRequestMetadata.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKGraphRequestMetadata.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestMetadata.h; sourceTree = ""; }; - 1B2B2FEED99DEC50D3CADC5BEC00D23C /* FBSDKTestUsersManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKTestUsersManager.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKTestUsersManager.h; sourceTree = ""; }; - 1BF338B5B623CD26B5522E29EDFAD3D3 /* FBSDKDeviceButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKDeviceButton.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKDeviceButton.h; sourceTree = ""; }; - 1C82E8A335AE0C09FD8559157C5F3E59 /* MPRewardedVideoConnection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPRewardedVideoConnection.h; path = MoPubSDK/RewardedVideo/Internal/MPRewardedVideoConnection.h; sourceTree = ""; }; - 1C901D72535C6CA19D52C53BA1F6F98E /* FIRCLSRecordBase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCLSRecordBase.m; path = Crashlytics/Crashlytics/Models/Record/FIRCLSRecordBase.m; sourceTree = ""; }; - 1CDC17A5433AC0CA6DC1872840095331 /* MOPUBDisplayAgentType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MOPUBDisplayAgentType.h; path = MoPubSDK/MOPUBDisplayAgentType.h; sourceTree = ""; }; - 1CE56BBAF09086D82E5C2F61AAD9BF29 /* FBSDKViewHierarchy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKViewHierarchy.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/ViewHierarchy/FBSDKViewHierarchy.h; sourceTree = ""; }; - 1D2230D29B8EDB91E07F7C270212E82A /* PromisesObjC.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = PromisesObjC.debug.xcconfig; sourceTree = ""; }; - 1D29E472CCF11BA8F9024F5B63CB6023 /* FIRCLSMachO.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSMachO.h; path = Crashlytics/Shared/FIRCLSMachO/FIRCLSMachO.h; sourceTree = ""; }; - 1D576253627FD030630415E9641136BC /* FBLPromises.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FBLPromises.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 1D59315AD801D0805A2C66A20CDFCFA0 /* GULSceneDelegateSwizzler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULSceneDelegateSwizzler.m; path = GoogleUtilities/SceneDelegateSwizzler/GULSceneDelegateSwizzler.m; sourceTree = ""; }; - 1E0934BBF648C0C15785D9F7F9362337 /* FBSDKDeviceViewControllerBase+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKDeviceViewControllerBase+Internal.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/Device/FBSDKDeviceViewControllerBase+Internal.h"; sourceTree = ""; }; - 1E55BFB71A6F16FE7E26F5D49426F3C6 /* FBLPromise+Timeout.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Timeout.m"; path = "Sources/FBLPromises/FBLPromise+Timeout.m"; sourceTree = ""; }; - 1E801AAC0924C54177A9DB610CBDE680 /* FBSDKProfilePictureView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKProfilePictureView.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKProfilePictureView.m; sourceTree = ""; }; - 1E973CC4D18DF4C99759B7FC1C554998 /* GoogleDataTransportCCTSupport-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "GoogleDataTransportCCTSupport-Info.plist"; sourceTree = ""; }; - 1EB4C57BBE0AE8268ED31DA7203A7B82 /* mopub-ios-sdk.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "mopub-ios-sdk.modulemap"; sourceTree = ""; }; - 1EB5C43F6DEDA1BF31D216EFD843E623 /* FIRCLSURLSessionAvailability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSURLSessionAvailability.h; path = Crashlytics/Crashlytics/FIRCLSURLSession/FIRCLSURLSessionAvailability.h; sourceTree = ""; }; - 1EC8BDF8694355AA6AC990265EA96629 /* AppsFlyerLib.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = AppsFlyerLib.framework; sourceTree = ""; }; - 1ECC900453CA9A4DB3C74EF1C7E82EF5 /* MPBaseBannerAdapter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPBaseBannerAdapter.m; path = MoPubSDK/Internal/Banners/MPBaseBannerAdapter.m; sourceTree = ""; }; - 1F2B35A79CF27A0EF16F776BD4E43108 /* MPError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPError.m; path = MoPubSDK/Internal/Utility/MPError.m; sourceTree = ""; }; - 1F402E77454C20141F85F84FF06CA836 /* FBSDKDeviceUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKDeviceUtilities.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Device/FBSDKDeviceUtilities.h; sourceTree = ""; }; - 1F70D657B992CA547A3D6A86369F51FC /* MPNativeAdRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPNativeAdRequest.m; path = MoPubSDK/NativeAds/MPNativeAdRequest.m; sourceTree = ""; }; - 1F87C6E65D1BE76F395ED7F1EE4A43A7 /* MPNativeAdDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAdDelegate.h; path = MoPubSDK/NativeAds/MPNativeAdDelegate.h; sourceTree = ""; }; - 1FC6506780B4D198D126223DBC80863B /* MPVASTManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVASTManager.h; path = MoPubSDK/Internal/VAST/MPVASTManager.h; sourceTree = ""; }; - 1FF6B8F866190949844C2BAA7DA13134 /* MPURL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPURL.m; path = MoPubSDK/Internal/MPURL.m; sourceTree = ""; }; - 200C9BC810FD120F0BDEF6B403D3284A /* MoPub_AbstractAvidManagedAdSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MoPub_AbstractAvidManagedAdSession.h; path = MoPubSDK/Viewability/Avid/MoPub_AbstractAvidManagedAdSession.h; sourceTree = ""; }; - 201EF89A0869D923453D72DFC52D89D3 /* FIRInstallationsIIDStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstallationsIIDStore.m; path = FirebaseInstallations/Source/Library/IIDMigration/FIRInstallationsIIDStore.m; sourceTree = ""; }; - 2051CBB578CE971DC6FD39E549D13D0B /* FIRCLSReportAdapter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCLSReportAdapter.m; path = Crashlytics/Crashlytics/Models/Record/FIRCLSReportAdapter.m; sourceTree = ""; }; - 2073E072928D199F39A9FACF21274996 /* MPViewabilityOption.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPViewabilityOption.h; path = MoPubSDK/Viewability/MPViewabilityOption.h; sourceTree = ""; }; - 209C35E1539CC5A6EBA80687B13EA2B3 /* FBSDKGraphRequest+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKGraphRequest+Internal.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequest+Internal.h"; sourceTree = ""; }; - 20AFCAFAC86972789130D5D28C54E8F0 /* MPViewabilityAdapterAvid.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPViewabilityAdapterAvid.h; path = MoPubSDK/Viewability/Avid/MPViewabilityAdapterAvid.h; sourceTree = ""; }; - 20C31D59DA82361E25F193FABD96B204 /* Pods-MAPS.ME-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-MAPS.ME-acknowledgements.plist"; sourceTree = ""; }; - 20CDED04B8DBFC354C29EB239CA8F428 /* MRNativeCommandHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MRNativeCommandHandler.m; path = MoPubSDK/Internal/MRAID/MRNativeCommandHandler.m; sourceTree = ""; }; - 211919002F2CA7D396CAD0FF8546330F /* FBLPromise.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBLPromise.m; path = Sources/FBLPromises/FBLPromise.m; sourceTree = ""; }; - 21BBC982F0017CA55E853ADE08BA2075 /* MOPUBExperimentProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MOPUBExperimentProvider.h; path = MoPubSDK/Internal/Utility/MOPUBExperimentProvider.h; sourceTree = ""; }; - 22031BA63BD48A1E34D4873F3B818763 /* MPEngineInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPEngineInfo.m; path = MoPubSDK/MPEngineInfo.m; sourceTree = ""; }; - 223F5AE5FDFCB0E47FC5772AF7B98142 /* FBSDKEventDeactivationManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKEventDeactivationManager.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/EventDeactivation/FBSDKEventDeactivationManager.m; sourceTree = ""; }; - 2248502871E2EFB0EBA2F8948F0CC376 /* MPNativeAdRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAdRequest.h; path = MoPubSDK/NativeAds/MPNativeAdRequest.h; sourceTree = ""; }; - 2257D7B14B10221A39417A5F09201B0F /* FBSDKAppLinkResolver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppLinkResolver.m; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkResolver.m; sourceTree = ""; }; - 226DBDB4DFD0FA7A2D6E839D7356062C /* dwarf.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = dwarf.h; path = Crashlytics/third_party/libunwind/dwarf.h; sourceTree = ""; }; - 22A1D49A4287FA4C656D559EFDAF579B /* FBSDKButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKButton.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKButton.h; sourceTree = ""; }; - 22CA7B0D27D5F9A824492E0F76291752 /* FIRCLSUserDefaults.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCLSUserDefaults.m; path = Crashlytics/Crashlytics/FIRCLSUserDefaults/FIRCLSUserDefaults.m; sourceTree = ""; }; - 22E803E9065CD04E54117DF8DF6E5A45 /* FBSDKDeviceViewControllerBase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKDeviceViewControllerBase.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKDeviceViewControllerBase.m; sourceTree = ""; }; - 22F3752BB8479C64876DF07ED9F247E4 /* MPEnhancedDeeplinkRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPEnhancedDeeplinkRequest.h; path = MoPubSDK/Internal/Common/MPEnhancedDeeplinkRequest.h; sourceTree = ""; }; - 23837A4DED03B9629C929D352DB4E34E /* MoPub-FacebookAudienceNetwork-Adapters.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "MoPub-FacebookAudienceNetwork-Adapters.release.xcconfig"; sourceTree = ""; }; - 2390B971FF73244F6B1092ADAFB7B74C /* UIButton+MPAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+MPAdditions.m"; path = "MoPubSDK/Internal/Utility/Categories/UIButton+MPAdditions.m"; sourceTree = ""; }; - 241633A4273109C52CF7080944E29E92 /* MoPub-FacebookAudienceNetwork-Adapters-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MoPub-FacebookAudienceNetwork-Adapters-dummy.m"; sourceTree = ""; }; - 2424C11ADA3EF0907A7A7E430AF65B17 /* MPInterstitialViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPInterstitialViewController.m; path = MoPubSDK/Internal/Interstitials/MPInterstitialViewController.m; sourceTree = ""; }; - 2440EC7DD66439B164062B6764ADED43 /* MPEnhancedDeeplinkRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPEnhancedDeeplinkRequest.m; path = MoPubSDK/Internal/Common/MPEnhancedDeeplinkRequest.m; sourceTree = ""; }; - 24566691145B2CC0376A5196BABF4C4E /* FIRCLSReportAdapter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSReportAdapter.h; path = Crashlytics/Crashlytics/Models/Record/FIRCLSReportAdapter.h; sourceTree = ""; }; - 245D12E81EC5DD2D0D00418F125A3708 /* MPNativeAdRequestTargeting.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPNativeAdRequestTargeting.m; path = MoPubSDK/NativeAds/MPNativeAdRequestTargeting.m; sourceTree = ""; }; - 24A456C85AF06212B2C2D20398ECF480 /* FacebookSDKStrings.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; path = FacebookSDKStrings.bundle; sourceTree = ""; }; - 24E53F8ED1BBCD49D4949EF09D211E66 /* MPVASTAd.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVASTAd.m; path = MoPubSDK/Internal/VAST/MPVASTAd.m; sourceTree = ""; }; - 24EFEC7A4F9BE68DA7AA649C9B534166 /* MPNativeAdSourceDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAdSourceDelegate.h; path = MoPubSDK/NativeAds/MPNativeAdSourceDelegate.h; sourceTree = ""; }; - 255544BB8527817AE5EBE5D395FA2277 /* FBSDKTypeUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKTypeUtility.h; path = FBSDKCoreKit/FBSDKCoreKit/Basics/Internal/FBSDKTypeUtility.h; sourceTree = ""; }; - 257B2EA361B5A5232CF9ADF913D995BE /* MPVASTInterstitialCustomEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVASTInterstitialCustomEvent.m; path = MoPubSDK/Internal/MPVASTInterstitialCustomEvent.m; sourceTree = ""; }; - 25872DB607DB8C1D6F26B4E9B348EE02 /* MPVideoPlayerView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVideoPlayerView.h; path = MoPubSDK/Internal/VideoPlayer/MPVideoPlayerView.h; sourceTree = ""; }; - 25B285412D70A03CD380C90DC1635FCD /* FIRCLSProfiling.c */ = {isa = PBXFileReference; includeInIndex = 1; name = FIRCLSProfiling.c; path = Crashlytics/Crashlytics/Helpers/FIRCLSProfiling.c; sourceTree = ""; }; - 25B6D7F61EA5FA07F49D1E699DFC441F /* FBAdExtraHint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBAdExtraHint.h; path = Static/FBAudienceNetwork.framework/Headers/FBAdExtraHint.h; sourceTree = ""; }; - 25F820A8C7B3348E9C6A787AAEA9A069 /* FBNativeBannerAd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBNativeBannerAd.h; path = Static/FBAudienceNetwork.framework/Headers/FBNativeBannerAd.h; sourceTree = ""; }; - 2613A58B6E7EDEF087018D8366169C3D /* FIRInstallationsAuthTokenResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstallationsAuthTokenResult.m; path = FirebaseInstallations/Source/Library/FIRInstallationsAuthTokenResult.m; sourceTree = ""; }; - 26280CD4EFB47654F7ADD45F31B2D30A /* MPViewabilityTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPViewabilityTracker.h; path = MoPubSDK/Viewability/MPViewabilityTracker.h; sourceTree = ""; }; - 26676267F06027E7B2F15B0EC615B45B /* FBSDKAccessToken.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAccessToken.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKAccessToken.h; sourceTree = ""; }; - 2680511DDF46778435320A7B4840000C /* FBSDKAccessTokenCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAccessTokenCache.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCache.m; sourceTree = ""; }; - 26F9B818A4EA688567913EA8CD5EB7ED /* FBLPromiseError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBLPromiseError.m; path = Sources/FBLPromises/FBLPromiseError.m; sourceTree = ""; }; - 2718ABBF5BD3936EEBCD4EE50691432D /* FIRCLSRecordHost.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCLSRecordHost.m; path = Crashlytics/Crashlytics/Models/Record/FIRCLSRecordHost.m; sourceTree = ""; }; - 272D71E886E7E0C4B9DCBF258B000834 /* FBSDKURL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKURL.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKURL.m; sourceTree = ""; }; - 2745A5C1782FC07C81BF936E118AD664 /* GULSwizzler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULSwizzler.m; path = GoogleUtilities/MethodSwizzler/GULSwizzler.m; sourceTree = ""; }; - 2745A65EAEA504DE4DFC17A2CC28B3E1 /* FIRCLSRecordHost.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSRecordHost.h; path = Crashlytics/Crashlytics/Models/Record/FIRCLSRecordHost.h; sourceTree = ""; }; - 274C7A0C93E7A2D754D9A0869C090BD7 /* PromisesObjC.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = PromisesObjC.release.xcconfig; sourceTree = ""; }; - 27888B5653D0913C4C5E5736A04AD8D1 /* GoogleUtilities.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GoogleUtilities.debug.xcconfig; sourceTree = ""; }; - 27984B56829FFC47959C914BFCA10633 /* FBSDKAppEventsStateManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppEventsStateManager.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsStateManager.h; sourceTree = ""; }; - 27B09CBD6843FE31BAB71DF8C7A39BCC /* FBRewardedVideoAd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBRewardedVideoAd.h; path = Static/FBAudienceNetwork.framework/Headers/FBRewardedVideoAd.h; sourceTree = ""; }; - 27DB1FB290B9134CD1AE55B9EC425A13 /* FIRAnalyticsConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAnalyticsConfiguration.m; path = FirebaseCore/Sources/FIRAnalyticsConfiguration.m; sourceTree = ""; }; - 27FF64175AB8FC590892346D5B7041F4 /* MPStaticNativeAdRenderer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPStaticNativeAdRenderer.m; path = MoPubSDK/NativeAds/MPStaticNativeAdRenderer.m; sourceTree = ""; }; - 284F3FFEDAD59D2F26C9A2AFA013AFA8 /* FBSDKAppLinkReturnToRefererController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppLinkReturnToRefererController.h; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkReturnToRefererController.h; sourceTree = ""; }; - 288EDF2F9D05AB94498FFAC8FE4F6DA3 /* FBSDKSmartDeviceDialogView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKSmartDeviceDialogView.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Device/FBSDKSmartDeviceDialogView.m; sourceTree = ""; }; - 289B33331AB4638DFCA3183C947B8B5C /* FIRAValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAValue.h; path = Crashlytics/Crashlytics/Helpers/FIRAValue.h; sourceTree = ""; }; - 28DD99903B12F6E2D89F23CFC532D07C /* FBSDKEventInferencer.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = FBSDKEventInferencer.mm; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/SuggestedEvents/FBSDKEventInferencer.mm; sourceTree = ""; }; - 28FA8E076B3803FC0698F0981339450F /* MPNativeAdRendering.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAdRendering.h; path = MoPubSDK/NativeAds/MPNativeAdRendering.h; sourceTree = ""; }; - 291F3C6744C3D0D00FFCDB17202EFA35 /* MPStreamAdPlacerDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPStreamAdPlacerDelegate.h; path = MoPubSDK/NativeAds/Internal/MPStreamAdPlacerDelegate.h; sourceTree = ""; }; - 291F84318AAFF66696583D3C33938B0C /* GoogleDataTransport-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GoogleDataTransport-umbrella.h"; sourceTree = ""; }; - 292F6F2D218AED3F50A682DF46227AF0 /* MPURLResolver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPURLResolver.m; path = MoPubSDK/Internal/Common/MPURLResolver.m; sourceTree = ""; }; - 293534B9953D2C3BCF59EC650757914B /* FacebookRewardedVideoCustomEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FacebookRewardedVideoCustomEvent.h; path = FacebookAudienceNetwork/FacebookRewardedVideoCustomEvent.h; sourceTree = ""; }; - 2965558CDF1D7BA0D97E468AEB624D9F /* FBLPromise+Catch.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Catch.m"; path = "Sources/FBLPromises/FBLPromise+Catch.m"; sourceTree = ""; }; - 2985B96DB73AE3F0664C1055437A2F3F /* MPAdServerKeys.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPAdServerKeys.m; path = MoPubSDK/Internal/MPAdServerKeys.m; sourceTree = ""; }; - 298F64F4AF220C812BC1F2A42B934F50 /* FBLPromise+Validate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Validate.m"; path = "Sources/FBLPromises/FBLPromise+Validate.m"; sourceTree = ""; }; - 29C486247D229F08D7120F8394931CA4 /* GDTCORClock.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORClock.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORClock.m; sourceTree = ""; }; - 29EE61EB9E880F4EB5F3D4D0BC556DEF /* MPBannerCustomEventAdapter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPBannerCustomEventAdapter.m; path = MoPubSDK/Internal/Banners/MPBannerCustomEventAdapter.m; sourceTree = ""; }; - 2A74B788513333A85C668015CE4E8E55 /* AppsFlyerFramework.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AppsFlyerFramework.release.xcconfig; sourceTree = ""; }; - 2A788D492DC5B99071640AD56A6564CB /* FIRCLSOnboardingOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCLSOnboardingOperation.m; path = Crashlytics/Crashlytics/Settings/Operations/FIRCLSOnboardingOperation.m; sourceTree = ""; }; - 2A7C40A0D95D9AE52AA3BF5D4605A058 /* MPCollectionViewAdPlacerCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPCollectionViewAdPlacerCell.h; path = MoPubSDK/NativeAds/Internal/MPCollectionViewAdPlacerCell.h; sourceTree = ""; }; - 2AB4915F58E1489715FFD526F8852E21 /* FIRCLSCodeMapping.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCLSCodeMapping.m; path = Crashlytics/Shared/FIRCLSMachO/FIRCLSCodeMapping.m; sourceTree = ""; }; - 2AD0D9652F1B4132919043EF34DC2C9A /* MoPub.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MoPub.m; path = MoPubSDK/MoPub.m; sourceTree = ""; }; - 2B10D13E51B994B78AF5A26820D1FEC4 /* NSDate+MPAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSDate+MPAdditions.h"; path = "MoPubSDK/Internal/Utility/Categories/NSDate+MPAdditions.h"; sourceTree = ""; }; - 2B131F514D6F49BC7F68CDBE82D8D3F1 /* FBSDKDeviceLoginCodeInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKDeviceLoginCodeInfo.m; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginCodeInfo.m; sourceTree = ""; }; - 2B18C03BBA4DCBE317C28B2980E00AE5 /* MPNativeAdUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPNativeAdUtils.m; path = MoPubSDK/NativeAds/Internal/MPNativeAdUtils.m; sourceTree = ""; }; - 2B1A1AACDDD2A0A3261087CD42C1616C /* MPCoreInstanceProvider+MRAID.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MPCoreInstanceProvider+MRAID.h"; path = "MoPubSDK/Internal/MPCoreInstanceProvider+MRAID.h"; sourceTree = ""; }; - 2B76E8F0D27A31151FFE888BC9735D11 /* MPBool.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPBool.h; path = MoPubSDK/MPBool.h; sourceTree = ""; }; - 2B86307A69CC3C72C64019F46C6E4224 /* FBSDKCrypto.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKCrypto.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Cryptography/FBSDKCrypto.h; sourceTree = ""; }; - 2B8A039103F9953CD99C228EC3DDBFF5 /* GULHeartbeatDateStorage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULHeartbeatDateStorage.h; path = GoogleUtilities/Environment/Private/GULHeartbeatDateStorage.h; sourceTree = ""; }; - 2B9245C9D90906DAE40DF21994176FAD /* MPBaseNativeAdRenderer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPBaseNativeAdRenderer.m; path = MoPubSDK/NativeAds/MPBaseNativeAdRenderer.m; sourceTree = ""; }; - 2B9B747882B68BFF1758D7429091E275 /* GULUserDefaults.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULUserDefaults.m; path = GoogleUtilities/UserDefaults/GULUserDefaults.m; sourceTree = ""; }; - 2BACCBD3B52586035239BB14F98DE050 /* FBSDKConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKConstants.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKConstants.h; sourceTree = ""; }; - 2BD2F8109AED7FC1EBDF2586A1D5B482 /* MPMoPubRewardedPlayableCustomEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPMoPubRewardedPlayableCustomEvent.h; path = MoPubSDK/RewardedVideo/Internal/MPMoPubRewardedPlayableCustomEvent.h; sourceTree = ""; }; - 2C81EA5A0AA497C64568FE4DFAADE097 /* FBSDKUserDataStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKUserDataStore.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKUserDataStore.h; sourceTree = ""; }; - 2D1785F3D7EA2ED726C8AE9E70A51FA2 /* FBSDKBridgeAPIRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKBridgeAPIRequest.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIRequest.m; sourceTree = ""; }; - 2D197AA74E37E0B5774E58C0B5A0A0EC /* MPMoPubNativeCustomEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPMoPubNativeCustomEvent.m; path = MoPubSDK/NativeAds/Internal/MPMoPubNativeCustomEvent.m; sourceTree = ""; }; - 2D4F91EF32123CCCFB509805D9A17FE2 /* FirebaseInstallations-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "FirebaseInstallations-Info.plist"; sourceTree = ""; }; - 2D70C2E8302397BE469D6D671A61C9D9 /* GoogleUtilities-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "GoogleUtilities-dummy.m"; sourceTree = ""; }; - 2D85EDD4C0995B7C563EA29D974F6D5D /* FIRCLSProcess.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSProcess.h; path = Crashlytics/Crashlytics/Components/FIRCLSProcess.h; sourceTree = ""; }; - 2D8B86C037D5002A385EDA820E7C6A37 /* MoPub+Utility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "MoPub+Utility.m"; path = "MoPubSDK/Internal/Utility/Categories/MoPub+Utility.m"; sourceTree = ""; }; - 2DAFB1D25F5A598BF096706D8FCA7E39 /* FBMediaView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBMediaView.h; path = Static/FBAudienceNetwork.framework/Headers/FBMediaView.h; sourceTree = ""; }; - 2E80A06C5B4E4CB381E68A56E2641F83 /* GDTCORUploadPackage_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORUploadPackage_Private.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCORUploadPackage_Private.h; sourceTree = ""; }; - 2EBB32E5262EDB52408506A8D23BC143 /* MoPub_AvidDeferredAdSessionListener.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MoPub_AvidDeferredAdSessionListener.h; path = MoPubSDK/Viewability/Avid/MoPub_AvidDeferredAdSessionListener.h; sourceTree = ""; }; - 2EC5E3FEE43BFD7EB302C4ADC7171929 /* FIRAppAssociationRegistration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAppAssociationRegistration.h; path = FirebaseCore/Sources/Private/FIRAppAssociationRegistration.h; sourceTree = ""; }; - 2EDB90ADA9ED56EC444C22CE24A343BE /* GULAppDelegateSwizzler_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULAppDelegateSwizzler_Private.h; path = GoogleUtilities/AppDelegateSwizzler/Internal/GULAppDelegateSwizzler_Private.h; sourceTree = ""; }; - 2EE4A19E76510377B2E1A6ED921746AB /* FBSDKLoginKit-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "FBSDKLoginKit-Info.plist"; sourceTree = ""; }; - 2F0B3B46168693416633F9BE6AC077DC /* MOPUBAVPlayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MOPUBAVPlayer.h; path = MoPubSDK/NativeVideo/Internal/MOPUBAVPlayer.h; sourceTree = ""; }; - 2F2028F22DB848AB8AFA2B75FD07A593 /* FBSDKTriStateBOOL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKTriStateBOOL.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKTriStateBOOL.h; sourceTree = ""; }; - 2F32FC4D6E96E0CDF17D11E535203238 /* MPVideoEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVideoEvent.h; path = MoPubSDK/Internal/VAST/MPVideoEvent.h; sourceTree = ""; }; - 2F434EB928EE611EAB9AACF639563813 /* Pushwoosh.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Pushwoosh.framework; path = Framework/Pushwoosh.framework; sourceTree = ""; }; - 2F46B051CE3F732A21FE0932DD3B4F97 /* MPNativeAdRendererImageHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAdRendererImageHandler.h; path = MoPubSDK/NativeAds/Internal/MPNativeAdRendererImageHandler.h; sourceTree = ""; }; - 2F750FF80EA8C734CF0F86AC8702C637 /* FIRLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRLogger.m; path = FirebaseCore/Sources/FIRLogger.m; sourceTree = ""; }; - 2F7F564C2566EDC4D46787B7925AE6AF /* FIRCLSFileManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCLSFileManager.m; path = Crashlytics/Crashlytics/Models/FIRCLSFileManager.m; sourceTree = ""; }; - 2FC44B94F52B771F14BF14EB8E499BBB /* FBAudienceNetwork.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FBAudienceNetwork.debug.xcconfig; sourceTree = ""; }; - 2FD12418CC955738E4B3B0D3F8213A20 /* FIRCLSPackageReportOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCLSPackageReportOperation.m; path = Crashlytics/Crashlytics/Operations/Reports/FIRCLSPackageReportOperation.m; sourceTree = ""; }; - 2FFA7F20C81452216AC42C752B29DD68 /* NSString+MPAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+MPAdditions.h"; path = "MoPubSDK/Internal/Utility/Categories/NSString+MPAdditions.h"; sourceTree = ""; }; - 301F1BC597BEA34F4F942DC0F56E7890 /* MPBannerCustomEventDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPBannerCustomEventDelegate.h; path = MoPubSDK/MPBannerCustomEventDelegate.h; sourceTree = ""; }; - 3032857EDF5B64F97C30227E23B7EF49 /* FBSDKAppLinkReturnToRefererView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppLinkReturnToRefererView.m; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkReturnToRefererView.m; sourceTree = ""; }; - 304D113D4644F30CC920849001B08531 /* FBSDKURL_Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKURL_Internal.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKURL_Internal.h; sourceTree = ""; }; - 3053929D95FA0C6E657E3BC71A12B734 /* MPNativeAd.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPNativeAd.m; path = MoPubSDK/NativeAds/MPNativeAd.m; sourceTree = ""; }; - 3063F76C9BB8AA8D06D25204BD51C3D0 /* FBSDKAppLink.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppLink.h; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLink.h; sourceTree = ""; }; - 30979C1EAFF54D6152F20715BBF0D637 /* GDTCORClock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORClock.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCORClock.h; sourceTree = ""; }; - 30A8402FBAB20F15E196F376F9A9DB41 /* MPVASTResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVASTResponse.m; path = MoPubSDK/Internal/VAST/MPVASTResponse.m; sourceTree = ""; }; - 30B2906701FF62EA54AABC9ADEA62270 /* FBSDKEventInferencer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKEventInferencer.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/SuggestedEvents/FBSDKEventInferencer.h; sourceTree = ""; }; - 30BDF99529E4432D9643AD7A0BDDEC28 /* FBSDKCoreKit-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "FBSDKCoreKit-Info.plist"; sourceTree = ""; }; - 30C63FB63058BEEC855241EA228F08D8 /* FBNativeAdView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBNativeAdView.h; path = Static/FBAudienceNetwork.framework/Headers/FBNativeAdView.h; sourceTree = ""; }; - 30D76939E75E4FBD646C16543F4DF669 /* FIRCoreDiagnosticsInterop.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCoreDiagnosticsInterop.h; path = Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsInterop.h; sourceTree = ""; }; - 30E34210AA27835CDAA284576B42C1AD /* MPCloseButtonX.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = MPCloseButtonX.png; path = MoPubSDK/Resources/MPCloseButtonX.png; sourceTree = ""; }; - 3100364917F5330497CEB222F26C3BC9 /* FIRDependency.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDependency.h; path = FirebaseCore/Sources/Private/FIRDependency.h; sourceTree = ""; }; - 310038BC046C3E0F7D053797FF1BDF7B /* MPBaseInterstitialAdapter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPBaseInterstitialAdapter.m; path = MoPubSDK/Internal/Interstitials/MPBaseInterstitialAdapter.m; sourceTree = ""; }; - 314EA77948709322D61FDC3575D424E6 /* FIRInstallationsErrorUtil.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstallationsErrorUtil.m; path = FirebaseInstallations/Source/Library/Errors/FIRInstallationsErrorUtil.m; sourceTree = ""; }; - 318FA1796E5735FD567BDA02BEBC70CF /* GDTCORTransformer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORTransformer.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransformer.h; sourceTree = ""; }; - 31B8E32F09C1F35A17ECED05EA3E86A4 /* FBSDKLoginManagerLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLoginManagerLogger.m; path = FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginManagerLogger.m; sourceTree = ""; }; - 31C596999512C76A20CD0BAD735E6110 /* MoPub_FacebookAudienceNetwork_Adapters.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = MoPub_FacebookAudienceNetwork_Adapters.framework; path = "MoPub-FacebookAudienceNetwork-Adapters.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - 322BE1BD10E9877A5A6E2D3B39EA1C9A /* GULReachabilityChecker+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "GULReachabilityChecker+Internal.h"; path = "GoogleUtilities/Reachability/GULReachabilityChecker+Internal.h"; sourceTree = ""; }; - 326871F700D630BC7DADFB958059DE48 /* FirebaseAnalyticsInterop.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseAnalyticsInterop.debug.xcconfig; sourceTree = ""; }; - 32ADF318F72F7017909E357D87E107FB /* MPPlayBtn@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MPPlayBtn@2x.png"; path = "MoPubSDK/Resources/MPPlayBtn@2x.png"; sourceTree = ""; }; - 32F90A5B39692428C34E3AF072FD8EA2 /* FIRCLSProfiling.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSProfiling.h; path = Crashlytics/Crashlytics/Helpers/FIRCLSProfiling.h; sourceTree = ""; }; - 3347A1AB6546F0A3977529B8F199DC41 /* FBLPromises.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = FBLPromises.framework; path = PromisesObjC.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 3355824F72E69EE67BE5F63F7E87F659 /* FIRCLSURLSessionDataTask.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSURLSessionDataTask.h; path = Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionDataTask.h; sourceTree = ""; }; - 33616668082F3F26DE0CE5DF7426B9BF /* FIRComponentType.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRComponentType.m; path = FirebaseCore/Sources/FIRComponentType.m; sourceTree = ""; }; - 3371B68B59A8A529EA0CAC88634B8CE3 /* FIRCLSdSYM.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCLSdSYM.m; path = Crashlytics/Shared/FIRCLSMachO/FIRCLSdSYM.m; sourceTree = ""; }; - 338BDAC5E910488EB29BFAF1F8E0DD51 /* NSDate+MPAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSDate+MPAdditions.m"; path = "MoPubSDK/Internal/Utility/Categories/NSDate+MPAdditions.m"; sourceTree = ""; }; - 33ECAF322502355A7771CB5C018712BB /* FIRConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRConfiguration.m; path = FirebaseCore/Sources/FIRConfiguration.m; sourceTree = ""; }; - 33ED135B76EB662202F2AD33A2A310F2 /* FBSDKError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKError.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKError.h; sourceTree = ""; }; - 342C4AC1E6E0595A996ED8663BE92274 /* MPBaseBannerAdapter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPBaseBannerAdapter.h; path = MoPubSDK/Internal/Banners/MPBaseBannerAdapter.h; sourceTree = ""; }; - 345C40FE7FC640C143E221DFF04E7776 /* MPConsoleLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPConsoleLogger.m; path = MoPubSDK/Logging/Internal/MPConsoleLogger.m; sourceTree = ""; }; - 346A399DF9C3AB14A13349EE71993860 /* MPInterstitialAdManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPInterstitialAdManager.m; path = MoPubSDK/Internal/Interstitials/MPInterstitialAdManager.m; sourceTree = ""; }; - 34A2C4994DA8BA507B267AF95D9FD790 /* SKStoreProductViewController+MPAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "SKStoreProductViewController+MPAdditions.m"; path = "MoPubSDK/Internal/Utility/Categories/SKStoreProductViewController+MPAdditions.m"; sourceTree = ""; }; - 34FBD36A2BAECA59308A139DFC3745A2 /* MPNativeAdRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAdRenderer.h; path = MoPubSDK/NativeAds/MPNativeAdRenderer.h; sourceTree = ""; }; - 34FF41238BBFB358713DE7121CD3879A /* FIRBundleUtil.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRBundleUtil.m; path = FirebaseCore/Sources/FIRBundleUtil.m; sourceTree = ""; }; - 352E091312570DC48B189549EF1887CC /* MPExtendedHitBoxButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPExtendedHitBoxButton.h; path = MoPubSDK/Internal/MPExtendedHitBoxButton.h; sourceTree = ""; }; - 352EA26A6A6EE212ECDD91F0185A4B85 /* Firebase.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Firebase.debug.xcconfig; sourceTree = ""; }; - 352FC8C029A40591F283602FCC2F95FF /* FBSDKModalFormPresentationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKModalFormPresentationController.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Device/FBSDKModalFormPresentationController.h; sourceTree = ""; }; - 3542266176BA99781550B58A523894F7 /* MPMoPubConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPMoPubConfiguration.h; path = MoPubSDK/MPMoPubConfiguration.h; sourceTree = ""; }; - 35683E71093263A10A71CFA6EAF11E2E /* MPVASTLinearAd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVASTLinearAd.h; path = MoPubSDK/Internal/VAST/MPVASTLinearAd.h; sourceTree = ""; }; - 35C39E4EB71492B4C99A57F3ABBC30A1 /* MPDAAIcon@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MPDAAIcon@3x.png"; path = "MoPubSDK/Resources/MPDAAIcon@3x.png"; sourceTree = ""; }; - 35C3BEE2785C0C1F95529ED4BF6D224A /* MPVASTIndustryIconView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVASTIndustryIconView.h; path = MoPubSDK/Internal/VideoPlayer/MPVASTIndustryIconView.h; sourceTree = ""; }; - 35E139249FEF5B9E308CFEF49FC286A9 /* MoPub-FacebookAudienceNetwork-Adapters-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MoPub-FacebookAudienceNetwork-Adapters-prefix.pch"; sourceTree = ""; }; - 361706AFE7E009C15E533A3D79D8F690 /* FBSDKBridgeAPIResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBridgeAPIResponse.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIResponse.h; sourceTree = ""; }; - 362680E355591DB18D19B50066F7F436 /* FIRCLSBinaryImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSBinaryImage.h; path = Crashlytics/Crashlytics/Components/FIRCLSBinaryImage.h; sourceTree = ""; }; - 363CFFF506950B66C298C2CA540247A7 /* FIRStackFrame_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRStackFrame_Private.h; path = Crashlytics/Crashlytics/Private/FIRStackFrame_Private.h; sourceTree = ""; }; - 3691E549292195DA1DBB3A3C281B537B /* MPEngineInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPEngineInfo.h; path = MoPubSDK/MPEngineInfo.h; sourceTree = ""; }; - 36DA9F75953A08F4C879A0E62AFBA515 /* MOPUBPlayerViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MOPUBPlayerViewController.h; path = MoPubSDK/NativeVideo/Internal/MOPUBPlayerViewController.h; sourceTree = ""; }; - 36EB11FA5B4F302F1740F21784FA810E /* GDTCORUploader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORUploader.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCORUploader.h; sourceTree = ""; }; - 3701BBDFB1DD8EFDF8920A26561EF0DD /* MPStaticNativeAdRendererSettings.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPStaticNativeAdRendererSettings.h; path = MoPubSDK/NativeAds/MPStaticNativeAdRendererSettings.h; sourceTree = ""; }; - 372243DB9D9A44B6C4CCDF985C901975 /* Flurry-iOS-SDK-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Flurry-iOS-SDK-prefix.pch"; sourceTree = ""; }; - 374B0EF37ADE73717B3ECBC0DB4BDE96 /* MRConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MRConstants.h; path = MoPubSDK/Internal/MRAID/MRConstants.h; sourceTree = ""; }; - 37777354812FE47A944BD0FEE1B09B96 /* FBLPromise+Always.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Always.h"; path = "Sources/FBLPromises/include/FBLPromise+Always.h"; sourceTree = ""; }; - 377D0D37A34B69BCF8292F8B93465C1F /* MPDAAIcon.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = MPDAAIcon.png; path = MoPubSDK/Resources/MPDAAIcon.png; sourceTree = ""; }; - 379C4A3543F0A2552A926842977174AD /* FacebookNativeAdAdapter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FacebookNativeAdAdapter.h; path = FacebookAudienceNetwork/FacebookNativeAdAdapter.h; sourceTree = ""; }; - 37BAC838FB60C21A49369903A7EB84E3 /* FBSDKURLSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKURLSession.h; path = FBSDKCoreKit/FBSDKCoreKit/Basics/Internal/FBSDKURLSession.h; sourceTree = ""; }; - 383A8F7966EB8BBD1BC1CB37106EA7A0 /* MPAdViewDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPAdViewDelegate.h; path = MoPubSDK/MPAdViewDelegate.h; sourceTree = ""; }; - 386B19EDB0975A5BCD862DB7DBE7C160 /* FBSDKLoginManager+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKLoginManager+Internal.h"; path = "FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginManager+Internal.h"; sourceTree = ""; }; - 38A4223E9FAE359B7E337C4424C5AA21 /* FIRCLSMachException.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSMachException.h; path = Crashlytics/Crashlytics/Handlers/FIRCLSMachException.h; sourceTree = ""; }; - 38AD7B97CFB7E70C773BFA2E198800FF /* MPCollectionViewAdPlacerDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPCollectionViewAdPlacerDelegate.h; path = MoPubSDK/NativeAds/MPCollectionViewAdPlacerDelegate.h; sourceTree = ""; }; - 38BBA1F7B49CB582555FDEAA7AAEEE39 /* NSString+MPAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+MPAdditions.m"; path = "MoPubSDK/Internal/Utility/Categories/NSString+MPAdditions.m"; sourceTree = ""; }; - 38DC5A3A8954173322E07CFF7B498EAE /* MPCollectionViewAdPlacer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPCollectionViewAdPlacer.h; path = MoPubSDK/NativeAds/MPCollectionViewAdPlacer.h; sourceTree = ""; }; - 3962610B1FEF1790157315B74C0EBD7B /* FBSDKBridgeAPIResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKBridgeAPIResponse.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIResponse.m; sourceTree = ""; }; - 3974275A8EE8520E2C51575A19B0B370 /* MRCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MRCommand.h; path = MoPubSDK/Internal/MRAID/MRCommand.h; sourceTree = ""; }; - 397525176B004A3B0D5200875274F6D3 /* MPVASTIndustryIcon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVASTIndustryIcon.m; path = MoPubSDK/Internal/VAST/MPVASTIndustryIcon.m; sourceTree = ""; }; - 397A582E29238B3DEE6741C658500F29 /* NSBundle+MPAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSBundle+MPAdditions.h"; path = "MoPubSDK/Internal/Utility/Categories/NSBundle+MPAdditions.h"; sourceTree = ""; }; - 398D9C73F7A839DFACDA7E9381235B63 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/AVFoundation.framework; sourceTree = DEVELOPER_DIR; }; - 39B886D57011C9A00F3A48439B0C6332 /* FBSDKApplicationDelegate+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKApplicationDelegate+Internal.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKApplicationDelegate+Internal.h"; sourceTree = ""; }; - 39C1BDAFA263E5AECD22151FEDDEFB3E /* FirebaseInstallations-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FirebaseInstallations-dummy.m"; sourceTree = ""; }; - 39FAEF02EE72559A0E120D39532C11AC /* MPURLResolver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPURLResolver.h; path = MoPubSDK/Internal/Common/MPURLResolver.h; sourceTree = ""; }; - 3A0778EEA713C489035B404659220EAA /* FBSDKAppLinkUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppLinkUtility.m; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkUtility.m; sourceTree = ""; }; - 3A0C3870C1CDDA701F6D1288CA47CA3D /* MPAPIEndpoints.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPAPIEndpoints.h; path = MoPubSDK/Internal/Common/MPAPIEndpoints.h; sourceTree = ""; }; - 3A2B0638732A40ECC40426FA358663BE /* FIRCLSDwarfUnwindRegisters.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSDwarfUnwindRegisters.h; path = Crashlytics/Crashlytics/Unwind/Dwarf/FIRCLSDwarfUnwindRegisters.h; sourceTree = ""; }; - 3A50BB88B83485FECE6656A05DD44F63 /* FBSDKAddressFilterManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAddressFilterManager.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/RestrictiveDataFilter/FBSDKAddressFilterManager.m; sourceTree = ""; }; - 3A899DEF6E5366BA087A2CF9EA34BC72 /* MPConsentChangedReason.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPConsentChangedReason.h; path = MoPubSDK/MPConsentChangedReason.h; sourceTree = ""; }; - 3A8E552AF5216AF8FBA9B2F8F702D7D8 /* FIRCoreDiagnostics.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCoreDiagnostics.m; path = Firebase/CoreDiagnostics/FIRCDLibrary/FIRCoreDiagnostics.m; sourceTree = ""; }; - 3AA24247469939DB78A0EDD3DEC90888 /* MPTimer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPTimer.m; path = MoPubSDK/Internal/Utility/MPTimer.m; sourceTree = ""; }; - 3AAF61DEF2D09996FD9D2BA4B4C8BF88 /* MPTableViewAdPlacerDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPTableViewAdPlacerDelegate.h; path = MoPubSDK/NativeAds/MPTableViewAdPlacerDelegate.h; sourceTree = ""; }; - 3B0B28689101CE72329205323E16E5A7 /* FBSDKServerConfigurationManager+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKServerConfigurationManager+Internal.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfigurationManager+Internal.h"; sourceTree = ""; }; - 3B153F58CB062A9E3D9A640C518D4F9C /* FIROptions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIROptions.m; path = FirebaseCore/Sources/FIROptions.m; sourceTree = ""; }; - 3B1F9758C6825FC17878A284A83F9DC6 /* MPNativeAds.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAds.h; path = MoPubSDK/NativeAds/MPNativeAds.h; sourceTree = ""; }; - 3B31EE81E09044637137D15261EB3E0C /* FIRCLSMachException.c */ = {isa = PBXFileReference; includeInIndex = 1; name = FIRCLSMachException.c; path = Crashlytics/Crashlytics/Handlers/FIRCLSMachException.c; sourceTree = ""; }; - 3B3965F2BF5CFBC6A077C1220BA1E7AB /* FBSDKLoginConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLoginConstants.h; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginConstants.h; sourceTree = ""; }; - 3B792C7CD1317917125C2EB53EC15E4C /* MPNativeAdConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAdConstants.h; path = MoPubSDK/NativeAds/MPNativeAdConstants.h; sourceTree = ""; }; - 3B87B8633CBD396D005FFB65A57525C7 /* MPIdentityProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPIdentityProvider.m; path = MoPubSDK/Internal/Utility/MPIdentityProvider.m; sourceTree = ""; }; - 3BB3871DB66CC47F507FF278708C3BD5 /* MPNativeAdRequest+MPNativeAdSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MPNativeAdRequest+MPNativeAdSource.h"; path = "MoPubSDK/NativeAds/Internal/Categories/MPNativeAdRequest+MPNativeAdSource.h"; sourceTree = ""; }; - 3C472CDAFF3E2AF4F0B84D8B87D7307B /* MRBundleManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MRBundleManager.m; path = MoPubSDK/Internal/MRAID/MRBundleManager.m; sourceTree = ""; }; - 3C908C6185710B5680099D199AD08272 /* MPVASTMediaFile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVASTMediaFile.h; path = MoPubSDK/Internal/VAST/MPVASTMediaFile.h; sourceTree = ""; }; - 3CCACD3557439E6513F2334A6D470B76 /* UIButton+MPAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+MPAdditions.h"; path = "MoPubSDK/Internal/Utility/Categories/UIButton+MPAdditions.h"; sourceTree = ""; }; - 3CD884EC65117D32471A1C31EDB54501 /* GULLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULLogger.m; path = GoogleUtilities/Logger/GULLogger.m; sourceTree = ""; }; - 3CDBFB2925E6DF8B3BDCCCAED2DE688A /* FacebookNativeCustomEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FacebookNativeCustomEvent.m; path = FacebookAudienceNetwork/FacebookNativeCustomEvent.m; sourceTree = ""; }; - 3D0B685CF488C834960CB7534A9E1E10 /* MPVideoPlayerViewOverlay.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVideoPlayerViewOverlay.m; path = MoPubSDK/Internal/VideoPlayer/MPVideoPlayerViewOverlay.m; sourceTree = ""; }; - 3D1971221F882711FE5F24EC6B6155E9 /* FIRCLSCompoundOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCLSCompoundOperation.m; path = Crashlytics/Shared/FIRCLSOperation/FIRCLSCompoundOperation.m; sourceTree = ""; }; - 3D214A3DF79EEFBBC661469D9E286325 /* MPVASTManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVASTManager.m; path = MoPubSDK/Internal/VAST/MPVASTManager.m; sourceTree = ""; }; - 3D90F6BB2DD30A05491B08915D584EC9 /* FBSDKBridgeAPIProtocolWebV2.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKBridgeAPIProtocolWebV2.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolWebV2.m; sourceTree = ""; }; - 3E174B963665D5556326CF980DF42810 /* MPServerAdPositioning.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPServerAdPositioning.m; path = MoPubSDK/NativeAds/MPServerAdPositioning.m; sourceTree = ""; }; - 3E5027C91576469206B65AA04B465E24 /* MPMutedBtn.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = MPMutedBtn.png; path = MoPubSDK/Resources/MPMutedBtn.png; sourceTree = ""; }; - 3E64AB24001A99F7AA524E8B2BCCC290 /* GULNetworkURLSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULNetworkURLSession.h; path = GoogleUtilities/Network/Private/GULNetworkURLSession.h; sourceTree = ""; }; - 3E65293B030BE772658220223FD0DFB5 /* FlurryEmpty.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FlurryEmpty.m; path = Flurry/FlurryEmpty.m; sourceTree = ""; }; - 3E6F2E42A6234A19EE314531187AD54B /* FBInterstitialAdBridge.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBInterstitialAdBridge.h; path = Static/FBAudienceNetwork.framework/Headers/FBInterstitialAdBridge.h; sourceTree = ""; }; - 3EBE6DE6AC0B3C9F3AC7DBAEB3A662C0 /* FBSDKBridgeAPIRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBridgeAPIRequest.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIRequest.h; sourceTree = ""; }; - 3F0565E0511462F920AB1A8DB02FF6CA /* MPReachabilityManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPReachabilityManager.m; path = MoPubSDK/Internal/MPReachabilityManager.m; sourceTree = ""; }; - 3F1D4655AFFD835E9C2C535516F85DF1 /* FIRErrorCode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRErrorCode.h; path = FirebaseCore/Sources/Private/FIRErrorCode.h; sourceTree = ""; }; - 3F1DE100F7CD62079B50FCD0C9553643 /* FIRCLSRecordApplication.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSRecordApplication.h; path = Crashlytics/Crashlytics/Models/Record/FIRCLSRecordApplication.h; sourceTree = ""; }; - 3F3A6CC51BD9267B2C86712FCDB73704 /* GDTCORRegistrar.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORRegistrar.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORRegistrar.m; sourceTree = ""; }; - 3FAD23D5D4747F42F2D723BFA9629798 /* FBSDKErrorRecoveryAttempter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKErrorRecoveryAttempter.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ErrorRecovery/FBSDKErrorRecoveryAttempter.m; sourceTree = ""; }; - 4021CDC26216AE4683971DB5C99D2EA1 /* MoPub.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MoPub.h; path = MoPubSDK/MoPub.h; sourceTree = ""; }; - 402AC9B1720B22AEE526DCE4416CD7F8 /* FBSDKErrorConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKErrorConfiguration.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorConfiguration.m; sourceTree = ""; }; - 405EB80FC7B0EFEED5832D9846EB2134 /* FBNativeAdTableViewAdProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBNativeAdTableViewAdProvider.h; path = Static/FBAudienceNetwork.framework/Headers/FBNativeAdTableViewAdProvider.h; sourceTree = ""; }; - 407C425811C1E07AC1387FF972170846 /* MPConsentManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPConsentManager.h; path = MoPubSDK/Internal/MPConsentManager.h; sourceTree = ""; }; - 40F694279899D5DE08A1D633DAFE496B /* Flurry_iOS_SDK.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Flurry_iOS_SDK.framework; path = "Flurry-iOS-SDK.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - 40FD2249472D8F7C8C8A6ACE137A1537 /* GDTCOREvent+GDTCCTSupport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "GDTCOREvent+GDTCCTSupport.h"; path = "GoogleDataTransportCCTSupport/GDTCCTLibrary/Public/GDTCOREvent+GDTCCTSupport.h"; sourceTree = ""; }; - 41428B555BFE4B749A371517A2A41FE3 /* FBSDKCoreKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FBSDKCoreKit-prefix.pch"; sourceTree = ""; }; - 4143B3D7FE43215066031B5F2FFA889E /* FIRInstallationsAuthTokenResultInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstallationsAuthTokenResultInternal.h; path = FirebaseInstallations/Source/Library/FIRInstallationsAuthTokenResultInternal.h; sourceTree = ""; }; - 4171AD9CBF760E5D66F122F8F20C36EE /* GDTCCTCompressionHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCCTCompressionHelper.h; path = GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTCompressionHelper.h; sourceTree = ""; }; - 41BE4DA692A9E612FC87053CC4970AEF /* FBSDKViewImpressionTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKViewImpressionTracker.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKViewImpressionTracker.m; sourceTree = ""; }; - 421B9DF04D30FF99DB8C88232986098B /* GULNetworkConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULNetworkConstants.m; path = GoogleUtilities/Network/GULNetworkConstants.m; sourceTree = ""; }; - 425C6C9E5BA28A9051C4DC9E95650D8E /* MPClientAdPositioning.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPClientAdPositioning.m; path = MoPubSDK/NativeAds/MPClientAdPositioning.m; sourceTree = ""; }; - 42AA59E742D3FCDCB5BB7DFFDD4A48AB /* FBSDKAppLinkReturnToRefererView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppLinkReturnToRefererView.h; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkReturnToRefererView.h; sourceTree = ""; }; - 42EC0B8B466D57B336E40EAB6EFC46B6 /* MPDiskLRUCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPDiskLRUCache.m; path = MoPubSDK/Internal/MPDiskLRUCache.m; sourceTree = ""; }; - 42ED84B3C267C012DFC84552AEA7DF37 /* MPAdServerURLBuilder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPAdServerURLBuilder.h; path = MoPubSDK/Internal/Common/MPAdServerURLBuilder.h; sourceTree = ""; }; - 4305A38DEDC7EB019C86857376B89D52 /* FIRCLSBinaryImage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCLSBinaryImage.m; path = Crashlytics/Crashlytics/Components/FIRCLSBinaryImage.m; sourceTree = ""; }; - 430B6E5117696F2CE2356F5A84C34F16 /* FIRCLSMultipartMimeStreamEncoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSMultipartMimeStreamEncoder.h; path = Crashlytics/Shared/FIRCLSNetworking/FIRCLSMultipartMimeStreamEncoder.h; sourceTree = ""; }; - 4337D26CE3234965B0903BE0AB93D043 /* GDTCORRegistrar.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORRegistrar.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCORRegistrar.h; sourceTree = ""; }; - 433DC03F0862505F1FCCACBABAC878C4 /* libAvid-mopub-3.6.1.a */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = archive.ar; name = "libAvid-mopub-3.6.1.a"; path = "MoPubSDK/Viewability/Avid/libAvid-mopub-3.6.1.a"; sourceTree = ""; }; - 437B30C5191D219946D758C77B006CE8 /* FBSDKServerConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKServerConfiguration.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfiguration.m; sourceTree = ""; }; - 441C8A3576F5944E786A32028B8CA6D2 /* MPMRAIDInterstitialCustomEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPMRAIDInterstitialCustomEvent.m; path = MoPubSDK/Internal/MRAID/MPMRAIDInterstitialCustomEvent.m; sourceTree = ""; }; - 4432997E54BF6578DD55CBEF2812AD46 /* MPViewabilityTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPViewabilityTracker.m; path = MoPubSDK/Viewability/MPViewabilityTracker.m; sourceTree = ""; }; - 445F34298CEC5A0DBA4CEFD646358DC0 /* FBSDKAppEventsUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppEventsUtility.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsUtility.h; sourceTree = ""; }; - 445F8ACD5773B2802105C52D62AFCB66 /* MPInterstitialCustomEventAdapter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPInterstitialCustomEventAdapter.h; path = MoPubSDK/Internal/Interstitials/MPInterstitialCustomEventAdapter.h; sourceTree = ""; }; - 44C769EAB81A599496AE04D93219FD31 /* MPConsentDialogViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPConsentDialogViewController.m; path = MoPubSDK/Internal/MPConsentDialogViewController.m; sourceTree = ""; }; - 44F415FC9500027A9C088CB4268519D5 /* MPForceableOrientationProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPForceableOrientationProtocol.h; path = MoPubSDK/Internal/MRAID/MPForceableOrientationProtocol.h; sourceTree = ""; }; - 454CDE9720C69079F1DDF68FD6A04105 /* FBSDKGraphRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKGraphRequest.m; path = FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphRequest.m; sourceTree = ""; }; - 457BAEADB79A07BE5B6F72F6DD49293E /* FBSDKErrorConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKErrorConfiguration.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorConfiguration.h; sourceTree = ""; }; - 45822A4CD37798CFA5BA7FBF0D862256 /* MPLogEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPLogEvent.h; path = MoPubSDK/Logging/MPLogEvent.h; sourceTree = ""; }; - 4601BE7DAE01ED64AFD3E17A5AC48059 /* FIRCLSCompoundOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSCompoundOperation.h; path = Crashlytics/Shared/FIRCLSOperation/FIRCLSCompoundOperation.h; sourceTree = ""; }; - 46286665978CB65C4EC589D9B3B11014 /* FBSDKEventBinding.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKEventBinding.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKEventBinding.h; sourceTree = ""; }; - 464896F1C48CA69D3718094DD5044970 /* MPAdView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPAdView.h; path = MoPubSDK/MPAdView.h; sourceTree = ""; }; - 4651719ECF3C9A328FE37CF2AC2482D3 /* FBSDKGraphRequestConnection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKGraphRequestConnection.m; path = FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphRequestConnection.m; sourceTree = ""; }; - 46DA5680C87AF21DB250F1FE9744E305 /* MPNativeAdConfigValues.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAdConfigValues.h; path = MoPubSDK/NativeAds/Internal/MPNativeAdConfigValues.h; sourceTree = ""; }; - 46DDD295F0C2BB70C3CFA00D8D84381C /* FIRCLSURLSessionTask_PrivateMethods.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSURLSessionTask_PrivateMethods.h; path = Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionTask_PrivateMethods.h; sourceTree = ""; }; - 470C91BE4E4F9A0D44F41C7DEF24746D /* FBSDKMutableCopying.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKMutableCopying.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKMutableCopying.h; sourceTree = ""; }; - 470D2391C5EC0995BA8077545966D64E /* GDTCORPlatform.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORPlatform.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCORPlatform.h; sourceTree = ""; }; - 47193C69317491589695265D8E5C2AD1 /* FIRCLSUserDefaults.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSUserDefaults.h; path = Crashlytics/Crashlytics/FIRCLSUserDefaults/FIRCLSUserDefaults.h; sourceTree = ""; }; - 476756EEA9A49E2694FB9704F7FDD305 /* MPVASTInterstitialCustomEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVASTInterstitialCustomEvent.h; path = MoPubSDK/Internal/MPVASTInterstitialCustomEvent.h; sourceTree = ""; }; - 4778B23B1DEF6428078620DC0585878F /* firebasecore.nanopb.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = firebasecore.nanopb.h; path = Firebase/CoreDiagnostics/FIRCDLibrary/Protogen/nanopb/firebasecore.nanopb.h; sourceTree = ""; }; - 477C1528E6733182C0CAEC75FC8FC02D /* FBSDKCodelessIndexer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKCodelessIndexer.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessIndexer.m; sourceTree = ""; }; - 478C8A1E81472A084CF3C879B7513537 /* FIRCLSInternalReport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSInternalReport.h; path = Crashlytics/Crashlytics/Models/FIRCLSInternalReport.h; sourceTree = ""; }; - 479960BF83D02BBA600BF8E16D8CB3A5 /* MRController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MRController.h; path = MoPubSDK/Internal/MRAID/MRController.h; sourceTree = ""; }; - 47E6EBA08600541E259A0803553B60C0 /* FBSDKDynamicFrameworkLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKDynamicFrameworkLoader.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKDynamicFrameworkLoader.h; sourceTree = ""; }; - 47F0C2A60BDAC27EDD167D068529AF76 /* FIRApp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRApp.h; path = FirebaseCore/Sources/Public/FIRApp.h; sourceTree = ""; }; - 47F5580E8A5E5A2867781ED59A8D0F03 /* FIRCLSAsyncOperation_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSAsyncOperation_Private.h; path = Crashlytics/Crashlytics/Operations/FIRCLSAsyncOperation_Private.h; sourceTree = ""; }; - 4803CD876C5E2B8A1AFEB813307DD3AC /* MRNativeCommandHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MRNativeCommandHandler.h; path = MoPubSDK/Internal/MRAID/MRNativeCommandHandler.h; sourceTree = ""; }; - 485D4D48BAA45CE617F64DCC7B486D6A /* FIRInstallationsStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstallationsStore.m; path = FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStore.m; sourceTree = ""; }; - 48B4D669B585E55A8AF693DEAE17A76A /* FBSDKApplicationDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKApplicationDelegate.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKApplicationDelegate.m; sourceTree = ""; }; - 4909BE936637CABD33F96AC6F3115619 /* FBSDKCoreKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKCoreKit.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit.h; sourceTree = ""; }; - 491287D06568031D2A46A13935EEB89E /* MoPub_AvidVideoPlaybackListener.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MoPub_AvidVideoPlaybackListener.h; path = MoPubSDK/Viewability/Avid/MoPub_AvidVideoPlaybackListener.h; sourceTree = ""; }; - 4920541557733F272A7C6FEACBA3CF69 /* MPHTTPNetworkTaskData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPHTTPNetworkTaskData.h; path = MoPubSDK/Internal/MPHTTPNetworkTaskData.h; sourceTree = ""; }; - 494668B5491A9BAA3C74B35D973D9CA7 /* MPActivityViewControllerHelper+TweetShare.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MPActivityViewControllerHelper+TweetShare.h"; path = "MoPubSDK/Internal/Common/MPActivityViewControllerHelper+TweetShare.h"; sourceTree = ""; }; - 498A16D85D9C972689BF42A44AABE26F /* Pods-MAPS.ME.production full.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MAPS.ME.production full.xcconfig"; sourceTree = ""; }; - 49C70AA3C1EB95B8108211A9474D4663 /* FIRCLSURLSessionDataTask.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCLSURLSessionDataTask.m; path = Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionDataTask.m; sourceTree = ""; }; - 4A3633CD85491A5F14C3E1F3813FE6A1 /* FBSDKBridgeAPIProtocolWebV1.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBridgeAPIProtocolWebV1.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolWebV1.h; sourceTree = ""; }; - 4A95F89D46A4178EE091F54A96F44043 /* FIRInstallationsLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstallationsLogger.m; path = FirebaseInstallations/Source/Library/FIRInstallationsLogger.m; sourceTree = ""; }; - 4B4D4BDBEDA493A2951B9D841EEF1313 /* FBSDKMonotonicTime.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKMonotonicTime.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMonotonicTime.m; sourceTree = ""; }; - 4B52A223DC220741775717908F691CA1 /* UIColor+MPAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIColor+MPAdditions.h"; path = "MoPubSDK/Internal/Utility/Categories/UIColor+MPAdditions.h"; sourceTree = ""; }; - 4B7E65408B4B5868476876B2A67BB862 /* FirebaseCore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FirebaseCore.h; path = FirebaseCore/Sources/Public/FirebaseCore.h; sourceTree = ""; }; - 4BAB8D0089A37D166083541E36EA4365 /* FIRAEvent+Internal.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FIRAEvent+Internal.m"; path = "Crashlytics/Crashlytics/Helpers/FIRAEvent+Internal.m"; sourceTree = ""; }; - 4C1E69477C6B2B65E73D773DF99C41B5 /* FBSDKBridgeAPIRequest+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKBridgeAPIRequest+Private.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIRequest+Private.h"; sourceTree = ""; }; - 4C266FF6F49517FD58E8723155B1D8BC /* MRConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MRConstants.m; path = MoPubSDK/Internal/MRAID/MRConstants.m; sourceTree = ""; }; - 4C42C0336E253290E026C54D5309C6CE /* FBSDKURLSessionTask.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKURLSessionTask.h; path = FBSDKCoreKit/FBSDKCoreKit/Basics/Internal/FBSDKURLSessionTask.h; sourceTree = ""; }; - 4C5933D11E9EB4D69777185A0A94402C /* MPVASTIndustryIconView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVASTIndustryIconView.m; path = MoPubSDK/Internal/VideoPlayer/MPVASTIndustryIconView.m; sourceTree = ""; }; - 4C6D8A68F5E228D6D8B51D519EC81B38 /* MoPub_AvidVideoAdSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MoPub_AvidVideoAdSession.h; path = MoPubSDK/Viewability/Avid/MoPub_AvidVideoAdSession.h; sourceTree = ""; }; - 4C6DF37E36DD4D18DABA3E364A122602 /* FBSDKFeatureExtractor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKFeatureExtractor.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/SuggestedEvents/FBSDKFeatureExtractor.h; sourceTree = ""; }; - 4C7A3710F6ABD60965DED3142934FEBA /* MOPUBNativeVideoAdConfigValues.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MOPUBNativeVideoAdConfigValues.m; path = MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoAdConfigValues.m; sourceTree = ""; }; - 4CC51C655EF592F475EDE2C19CD77652 /* FIRCLSNetworkOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCLSNetworkOperation.m; path = Crashlytics/Crashlytics/Settings/Operations/FIRCLSNetworkOperation.m; sourceTree = ""; }; - 4CEDF076873C151B52DB87AFF4D69838 /* MOPUBNativeVideoAdRenderer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MOPUBNativeVideoAdRenderer.m; path = MoPubSDK/NativeVideo/MOPUBNativeVideoAdRenderer.m; sourceTree = ""; }; - 4D4BDAF59689AE95314D5B59D6DFCAD5 /* FIRCLSProcessReportOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCLSProcessReportOperation.m; path = Crashlytics/Crashlytics/Operations/Reports/FIRCLSProcessReportOperation.m; sourceTree = ""; }; - 4D6C2071AFC4F1D068718421492696D6 /* FIRCLSNetworkClient.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSNetworkClient.h; path = Crashlytics/Crashlytics/Controllers/FIRCLSNetworkClient.h; sourceTree = ""; }; - 4E14D81993CFBDE06E4D0CDF3C1B8FDD /* MOPUBAVPlayerView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MOPUBAVPlayerView.h; path = MoPubSDK/NativeVideo/Internal/MOPUBAVPlayerView.h; sourceTree = ""; }; - 4E16B5453E647F089D6FD5E479D5BB5F /* MRExpandModalViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MRExpandModalViewController.m; path = MoPubSDK/Internal/MRAID/MRExpandModalViewController.m; sourceTree = ""; }; - 4E17D0B4C37C3337909355849072D40A /* FIRCLSReportUploader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSReportUploader.h; path = Crashlytics/Crashlytics/Controllers/FIRCLSReportUploader.h; sourceTree = ""; }; - 4E56D1F0799DF117F410E1607AB5239F /* MPWebView+Viewability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MPWebView+Viewability.h"; path = "MoPubSDK/Viewability/MPWebView+Viewability.h"; sourceTree = ""; }; - 4E612EA554E711D539292C956702FF90 /* FIRCLSFCRAnalytics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSFCRAnalytics.h; path = Crashlytics/Crashlytics/Helpers/FIRCLSFCRAnalytics.h; sourceTree = ""; }; - 4EB679FDEBAA60F4B4F82716D10086D6 /* FBSDKCopying.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKCopying.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKCopying.h; sourceTree = ""; }; - 4F0BAA6D69358801B92B1B0176998BC5 /* MPMutedBtn@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MPMutedBtn@3x.png"; path = "MoPubSDK/Resources/MPMutedBtn@3x.png"; sourceTree = ""; }; - 4F2713909BE13FE0F46B68C81B19B342 /* MPAdServerKeys.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPAdServerKeys.h; path = MoPubSDK/Internal/MPAdServerKeys.h; sourceTree = ""; }; - 4FAC0BF61AC7A089DD0111C25B93A87B /* FIRCLSURLSessionConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCLSURLSessionConfiguration.m; path = Crashlytics/Crashlytics/FIRCLSURLSession/FIRCLSURLSessionConfiguration.m; sourceTree = ""; }; - 50207558DADE9D705B85D71062E40772 /* FBSDKServerConfigurationManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKServerConfigurationManager.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfigurationManager.m; sourceTree = ""; }; - 5046AB35485C26796CC427D3AAEF613A /* GULSecureCoding.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULSecureCoding.m; path = GoogleUtilities/Environment/GULSecureCoding.m; sourceTree = ""; }; - 504D6EA218588A1A39F7172B9B993052 /* GDTCORStorageProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORStorageProtocol.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCORStorageProtocol.h; sourceTree = ""; }; - 50786F73B28A0AC9BC79FC5E12E819F7 /* MPWebView+Viewability.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "MPWebView+Viewability.m"; path = "MoPubSDK/Viewability/MPWebView+Viewability.m"; sourceTree = ""; }; - 507DD2C9FA6139F8331F8B843DBE80AA /* MPLogging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPLogging.h; path = MoPubSDK/Logging/MPLogging.h; sourceTree = ""; }; - 50B227F32681E5BDD2FDA842F591A245 /* GDTCORPlatform.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORPlatform.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORPlatform.m; sourceTree = ""; }; - 50D6C4A4C346F63447DA5E0A81CB0EFF /* FBSDKCrashObserver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKCrashObserver.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Instrument/CrashReport/FBSDKCrashObserver.m; sourceTree = ""; }; - 50DA138470CD831835AFC7F2FD5A1778 /* GoogleDataTransport.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GoogleDataTransport.debug.xcconfig; sourceTree = ""; }; - 50FC5DFC998F5A83FFFBCE84EF3D0981 /* FIRCLSDataParsing.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSDataParsing.h; path = Crashlytics/Crashlytics/Unwind/Dwarf/FIRCLSDataParsing.h; sourceTree = ""; }; - 51787E462F9853181C9270EE1E23E41C /* FBLPromise+Async.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Async.h"; path = "Sources/FBLPromises/include/FBLPromise+Async.h"; sourceTree = ""; }; - 51A8A0867FE4D68D0E101BA97FC5F35C /* GULNetwork.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULNetwork.h; path = GoogleUtilities/Network/Private/GULNetwork.h; sourceTree = ""; }; - 51FBE7BF1EB7522550A924268B898BCA /* FBSDKAppEventsState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppEventsState.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsState.m; sourceTree = ""; }; - 52037439DED6F40B8E0F4716241CDEE5 /* MPNativeAdError+VAST.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MPNativeAdError+VAST.h"; path = "MoPubSDK/NativeAds/Internal/Categories/MPNativeAdError+VAST.h"; sourceTree = ""; }; - 52040BAE2CE0BD9905C7C1250F48CB7C /* nanopb-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "nanopb-dummy.m"; sourceTree = ""; }; - 52108D20F290030545FBE74D1C7B16F7 /* MPRewardedVideoConnection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPRewardedVideoConnection.m; path = MoPubSDK/RewardedVideo/Internal/MPRewardedVideoConnection.m; sourceTree = ""; }; - 5291811169B0B1837EEB9FC21033FF17 /* PromisesObjC.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = PromisesObjC.modulemap; sourceTree = ""; }; - 52ADDFD012154C7A588A0271207FB08D /* MPRewardedVideoAdManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPRewardedVideoAdManager.h; path = MoPubSDK/RewardedVideo/Internal/MPRewardedVideoAdManager.h; sourceTree = ""; }; - 52CE50E813C0CB6E62D37A873E3465E5 /* FIRConfigurationInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRConfigurationInternal.h; path = FirebaseCore/Sources/Private/FIRConfigurationInternal.h; sourceTree = ""; }; - 52D3E8FBC077711468AC8CE2D0C0A3B5 /* MPAdImpressionTimer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPAdImpressionTimer.h; path = MoPubSDK/Internal/Common/MPAdImpressionTimer.h; sourceTree = ""; }; - 52DD572C811B93943E313FDC353DBC86 /* MPSessionTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPSessionTracker.h; path = MoPubSDK/Internal/Utility/MPSessionTracker.h; sourceTree = ""; }; - 538C72CEFC311481D0F68961E61D9B03 /* FBSDKWebDialogView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKWebDialogView.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialogView.h; sourceTree = ""; }; - 53990A469C3230E8AEB44751E77A30BB /* MPRateLimitManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPRateLimitManager.m; path = MoPubSDK/Internal/MPRateLimitManager.m; sourceTree = ""; }; - 53FF4CCC1FABE78426798DE1E56EC034 /* FBSDKAppEvents+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKAppEvents+Internal.h"; path = "FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEvents+Internal.h"; sourceTree = ""; }; - 540D12E9A767E368AD86794E40D5F5C1 /* FIRAEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAEvent.h; path = Crashlytics/Crashlytics/Helpers/FIRAEvent.h; sourceTree = ""; }; - 542B131B0ABF21536A284C07B3FAA324 /* FIRAnalyticsConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAnalyticsConfiguration.h; path = FirebaseCore/Sources/Private/FIRAnalyticsConfiguration.h; sourceTree = ""; }; - 54456CF49552BF0EF82F68C9F02E6BA7 /* FIRExceptionModel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRExceptionModel.m; path = Crashlytics/Crashlytics/FIRExceptionModel.m; sourceTree = ""; }; - 54496EB69F67B4F596E75C2526AC0477 /* FBSDKKeychainStoreViaBundleID.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKKeychainStoreViaBundleID.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStoreViaBundleID.m; sourceTree = ""; }; - 5471D754F7E7920830445203F67EA6D0 /* FIRCLSSettings.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCLSSettings.m; path = Crashlytics/Crashlytics/Models/FIRCLSSettings.m; sourceTree = ""; }; - 548D16A91F8262E0926DDF6B0CD35B02 /* FBSDKLoginKit+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKLoginKit+Internal.h"; path = "FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginKit+Internal.h"; sourceTree = ""; }; - 55437841B14E41C6422700977732EA03 /* GDTCORDataFuture.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORDataFuture.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORDataFuture.m; sourceTree = ""; }; - 55471D69FCD1202E3799DF38F0B496CB /* FBLPromisePrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBLPromisePrivate.h; path = Sources/FBLPromises/include/FBLPromisePrivate.h; sourceTree = ""; }; - 555FD8DB1F7C59B471D95DC269970BFB /* MPURLActionInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPURLActionInfo.h; path = MoPubSDK/Internal/Common/MPURLActionInfo.h; sourceTree = ""; }; - 556273F990A1FA242E6BA43DCE3C361D /* nanopb.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = nanopb.modulemap; sourceTree = ""; }; - 556BF85A3667640A4703BE446A49EB95 /* MPVASTWrapper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVASTWrapper.m; path = MoPubSDK/Internal/VAST/MPVASTWrapper.m; sourceTree = ""; }; - 5577343C80A341DDD0DA9BF232A537FF /* FBSDKURLOpening.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKURLOpening.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKURLOpening.h; sourceTree = ""; }; - 55950CB91C9BBB3BDB1E5669E1029C17 /* MOPUBPlayerManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MOPUBPlayerManager.h; path = MoPubSDK/NativeVideo/Internal/MOPUBPlayerManager.h; sourceTree = ""; }; - 5608D402612BADF9402F627D5A1E5E2E /* FBLPromises.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBLPromises.h; path = Sources/FBLPromises/include/FBLPromises.h; sourceTree = ""; }; - 5612F192CA62DF02ADEE28C7B3E86ED4 /* GDTCORAssert.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORAssert.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORAssert.m; sourceTree = ""; }; - 566E8407DDF9E83B06EFF0FD8260664B /* MPRewardedVideoError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPRewardedVideoError.h; path = MoPubSDK/RewardedVideo/MPRewardedVideoError.h; sourceTree = ""; }; - 569667724A6E51485F7F6C1E29779BDE /* MOPUBPlayerManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MOPUBPlayerManager.m; path = MoPubSDK/NativeVideo/Internal/MOPUBPlayerManager.m; sourceTree = ""; }; - 56A7BDBDC4B4B68A10B672FD7D2883BB /* FBLPromise+Await.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Await.m"; path = "Sources/FBLPromises/FBLPromise+Await.m"; sourceTree = ""; }; - 56B2B2250679A70F1C7B60CD4D88AEFC /* GDTCORTransformer_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORTransformer_Private.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransformer_Private.h; sourceTree = ""; }; - 570B398A26A921F8FA093D9C9B07E027 /* MRError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MRError.h; path = MoPubSDK/Internal/MRAID/MRError.h; sourceTree = ""; }; - 5716D60DC5515E06A21D0521E9DAF55D /* PromisesObjC-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "PromisesObjC-Info.plist"; sourceTree = ""; }; - 572D03AA56560C804AE7D24134467E9C /* pb_decode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pb_decode.h; sourceTree = ""; }; - 5756E1546078D0D1E4A6E0BE3F18A6A8 /* GULNSDataInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULNSDataInternal.h; path = "GoogleUtilities/NSData+zlib/Private/GULNSDataInternal.h"; sourceTree = ""; }; - 579B9782511E20B022B864974C2128F5 /* FIRCLSSettingsOnboardingManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSSettingsOnboardingManager.h; path = Crashlytics/Crashlytics/Settings/FIRCLSSettingsOnboardingManager.h; sourceTree = ""; }; - 57CFD7B6FD61C64828745EA8FBE711D4 /* MPRewardedVideoAdapter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPRewardedVideoAdapter.m; path = MoPubSDK/RewardedVideo/Internal/MPRewardedVideoAdapter.m; sourceTree = ""; }; - 582B0F4F139E3CF295CBEC2779104615 /* FlurrySessionBuilder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FlurrySessionBuilder.h; path = Flurry/FlurrySessionBuilder.h; sourceTree = ""; }; - 5830BB82A4AE95BF068E973AFA080449 /* MPVASTResourceView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVASTResourceView.m; path = MoPubSDK/Internal/VideoPlayer/MPVASTResourceView.m; sourceTree = ""; }; - 5855A197DFB6E0A46D8D95E916DFF85D /* FirebaseCore-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "FirebaseCore-Info.plist"; sourceTree = ""; }; - 587FFBBCD6BB553F69A0F31CB108E118 /* FIRAppInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAppInternal.h; path = FirebaseCore/Sources/Private/FIRAppInternal.h; sourceTree = ""; }; - 58BD567248F13BB3EB88E1498E94CC54 /* Firebase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Firebase.h; path = CoreOnly/Sources/Firebase.h; sourceTree = ""; }; - 592F0B11524968DE9F802AF5B916322C /* MPAdTargeting.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPAdTargeting.m; path = MoPubSDK/MPAdTargeting.m; sourceTree = ""; }; - 59337EB6923721D465B4B5D0661F7FC5 /* FIRCLSException.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = FIRCLSException.mm; path = Crashlytics/Crashlytics/Handlers/FIRCLSException.mm; sourceTree = ""; }; - 59348EE35CEBB5A1D8B458C9D66037B5 /* MPAdapters.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = MPAdapters.plist; path = MoPubSDK/Resources/MPAdapters.plist; sourceTree = ""; }; - 5955C4A26A288B10A125F3C4AB75B270 /* MPVASTLinearAd.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVASTLinearAd.m; path = MoPubSDK/Internal/VAST/MPVASTLinearAd.m; sourceTree = ""; }; - 5961AFE7F12DFDE4DCF45FBD00A23ED0 /* GDTCORConsoleLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORConsoleLogger.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCORConsoleLogger.h; sourceTree = ""; }; - 59737CA8CC54D572BFDD90F93E238752 /* MPVASTMediaFile.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVASTMediaFile.m; path = MoPubSDK/Internal/VAST/MPVASTMediaFile.m; sourceTree = ""; }; - 59B1A24E8C60C1CDD038F4BF22EA30CC /* MPXMLParser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPXMLParser.m; path = MoPubSDK/Internal/Common/MPXMLParser.m; sourceTree = ""; }; - 59E2F60221D281B6066A27C66F271475 /* FIRInstallationsItem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstallationsItem.h; path = FirebaseInstallations/Source/Library/FIRInstallationsItem.h; sourceTree = ""; }; - 5A01FDA228A3803EEC50F531049A7885 /* FIRCLSConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSConstants.h; path = Crashlytics/Shared/FIRCLSConstants.h; sourceTree = ""; }; - 5A83A09F2C2A6E1D86439B034EFE4219 /* Flurry-iOS-SDK.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Flurry-iOS-SDK.debug.xcconfig"; sourceTree = ""; }; - 5A8A5B09DFF1E897AA4E545FAF9FA414 /* FBSDKDeviceUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKDeviceUtilities.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Device/FBSDKDeviceUtilities.m; sourceTree = ""; }; - 5AA5FB41E65CD965B073E4992E5A2C73 /* FBSDKLoginConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLoginConstants.m; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginConstants.m; sourceTree = ""; }; - 5AD02EB95D6DBE2B0CA401C6F2EF8E1B /* MPWebView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPWebView.m; path = MoPubSDK/Internal/HTML/MPWebView.m; sourceTree = ""; }; - 5B577AC16FB63E4F607F0CE626AA46CA /* FBSDKColor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKColor.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKColor.h; sourceTree = ""; }; - 5B7318323286498A6DF7E31AD67A204D /* GDTCORTransport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORTransport.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCORTransport.h; sourceTree = ""; }; - 5B8C247DAD4C621881FED270DC9AAFB2 /* FBSDKDeviceLoginManagerResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKDeviceLoginManagerResult.h; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginManagerResult.h; sourceTree = ""; }; - 5BA7DDDA05CE66379945AAE1F4F8B2C9 /* FBSDKBridgeAPI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKBridgeAPI.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPI.m; sourceTree = ""; }; - 5BBAEE1CC095D01BA59F46AFE45229A4 /* NSJSONSerialization+MPAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSJSONSerialization+MPAdditions.m"; path = "MoPubSDK/Internal/Utility/Categories/NSJSONSerialization+MPAdditions.m"; sourceTree = ""; }; - 5BC9BCACA160A3433963A90743CD4AA1 /* FBSDKErrorRecoveryConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKErrorRecoveryConfiguration.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKErrorRecoveryConfiguration.h; sourceTree = ""; }; - 5BE619B57DBA3309A8D50B4CF9483D91 /* FBSDKProfile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKProfile.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKProfile.h; sourceTree = ""; }; - 5C0AB88CEB3D0CED2829B2607B2CE30C /* FIRCLSAsyncOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSAsyncOperation.h; path = Crashlytics/Crashlytics/Operations/FIRCLSAsyncOperation.h; sourceTree = ""; }; - 5C612A710CDE0A7466E945BE952BDF95 /* FBSDKLoginKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FBSDKLoginKit-prefix.pch"; sourceTree = ""; }; - 5D0ACA0EC333559A8D8E85327AB81F30 /* MPReachability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPReachability.h; path = MoPubSDK/Internal/Utility/MPReachability.h; sourceTree = ""; }; - 5D42B77EE4F038D68606FA53FEFB9FED /* MRBridge.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MRBridge.h; path = MoPubSDK/Internal/MRAID/MRBridge.h; sourceTree = ""; }; - 5D56CC1FFF1A7F8222942B0A4FDF686C /* FIRInstallationsErrorUtil.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstallationsErrorUtil.h; path = FirebaseInstallations/Source/Library/Errors/FIRInstallationsErrorUtil.h; sourceTree = ""; }; - 5DB346B4071FC4461222A71CCA838C98 /* SafariServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SafariServices.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/SafariServices.framework; sourceTree = DEVELOPER_DIR; }; - 5DE0FEFC3995E740EC1AE2611D0AEFB0 /* FBSDKLoginKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = FBSDKLoginKit.framework; path = FBSDKLoginKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5DEA59C4C687E3786486C449221FC752 /* FBSDKLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLogger.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKLogger.m; sourceTree = ""; }; - 5E382684BEE5094909BC60FB7F604CB0 /* MOPUBPlayerViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MOPUBPlayerViewController.m; path = MoPubSDK/NativeVideo/Internal/MOPUBPlayerViewController.m; sourceTree = ""; }; - 5E45B05D98A6DB306C0F1D991C952478 /* MPStreamAdPlacer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPStreamAdPlacer.m; path = MoPubSDK/NativeAds/MPStreamAdPlacer.m; sourceTree = ""; }; - 5E4A4E5B5AAEC6F872CA30828FFBF8A4 /* MRController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MRController.m; path = MoPubSDK/Internal/MRAID/MRController.m; sourceTree = ""; }; - 5E7BC7D97DDCE07D92A8206F7C9C3B81 /* MPNativeAdSourceQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPNativeAdSourceQueue.m; path = MoPubSDK/NativeAds/Internal/MPNativeAdSourceQueue.m; sourceTree = ""; }; - 5EF075FC909ABF85C4767F55F355B0BD /* FBSDKMetadataIndexer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKMetadataIndexer.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/AAM/FBSDKMetadataIndexer.m; sourceTree = ""; }; - 5F0AA226BE67D8A48FC380E6F61314BD /* FBSDKAppLinkNavigation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppLinkNavigation.m; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkNavigation.m; sourceTree = ""; }; - 5F67A36488F0D23007CC07BFF895EF33 /* GDTCORUploadPackage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORUploadPackage.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCORUploadPackage.h; sourceTree = ""; }; - 5F8764A5E1B997C46F7CE597CFC67311 /* FIRCLSCompactUnwind.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSCompactUnwind.h; path = Crashlytics/Crashlytics/Unwind/Compact/FIRCLSCompactUnwind.h; sourceTree = ""; }; - 5F8EFD9723447B23AB8B4BE7AE7EC175 /* MPCloseBtn@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MPCloseBtn@3x.png"; path = "MoPubSDK/Resources/MPCloseBtn@3x.png"; sourceTree = ""; }; - 5FC309F08A3FF395E88CBFFB5FCFE38F /* FBSDKAppEventsStateManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppEventsStateManager.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsStateManager.m; sourceTree = ""; }; - 5FEA82452BAA884766544EEBBF9282D7 /* MOPUBNativeVideoAdConfigValues.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MOPUBNativeVideoAdConfigValues.h; path = MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoAdConfigValues.h; sourceTree = ""; }; - 6002E7AA0211661BCAD58E1128B5D042 /* MPBannerCustomEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPBannerCustomEvent.h; path = MoPubSDK/MPBannerCustomEvent.h; sourceTree = ""; }; - 602D88B00295014C6D3416B1B564C904 /* MoPub_AvidDisplayAdSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MoPub_AvidDisplayAdSession.h; path = MoPubSDK/Viewability/Avid/MoPub_AvidDisplayAdSession.h; sourceTree = ""; }; - 602EB1B29BD715FAF352640E672C8846 /* MPConsentChangedNotification.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPConsentChangedNotification.h; path = MoPubSDK/MPConsentChangedNotification.h; sourceTree = ""; }; - 607C6A931EBD7D8A07E47E3C9D91E7C9 /* FIRInstallationsIDController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstallationsIDController.m; path = FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsIDController.m; sourceTree = ""; }; - 60E8AF12F0C5021D31CA113B8D72EF6C /* FirebaseCore-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FirebaseCore-umbrella.h"; sourceTree = ""; }; - 611A46F56C9CC5EEAE14D9D62EBFAE59 /* FBSDKDeviceButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKDeviceButton.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKDeviceButton.m; sourceTree = ""; }; - 612D32B43DF71DCC5029C098BACC92A0 /* FBNativeAdsManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBNativeAdsManager.h; path = Static/FBAudienceNetwork.framework/Headers/FBNativeAdsManager.h; sourceTree = ""; }; - 613FFCD960C0F7FADC0619A6DE10D332 /* MPPlayBtn@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MPPlayBtn@3x.png"; path = "MoPubSDK/Resources/MPPlayBtn@3x.png"; sourceTree = ""; }; - 61A3959E94C4B990AD422BC25379BC68 /* FBSDKAppEventsDeviceInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppEventsDeviceInfo.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsDeviceInfo.m; sourceTree = ""; }; - 61F23C9B70945D4FAE48F766E9A2C500 /* FBSDKCrashHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKCrashHandler.h; path = FBSDKCoreKit/FBSDKCoreKit/Basics/Instrument/FBSDKCrashHandler.h; sourceTree = ""; }; - 61F82186454A72DF11C5CC52E9DF8CDC /* FIRComponentContainer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRComponentContainer.m; path = FirebaseCore/Sources/FIRComponentContainer.m; sourceTree = ""; }; - 62166F441F9824895C5B5EA617A1F260 /* MPInterstitialCustomEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPInterstitialCustomEvent.h; path = MoPubSDK/MPInterstitialCustomEvent.h; sourceTree = ""; }; - 6292C6A98F9996872AB54BD78C613E8A /* MPBannerCustomEvent+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MPBannerCustomEvent+Internal.h"; path = "MoPubSDK/Internal/Banners/MPBannerCustomEvent+Internal.h"; sourceTree = ""; }; - 629C269ED1B901DA6E35ABECC58DFB27 /* FBSDKServerConfigurationManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKServerConfigurationManager.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfigurationManager.h; sourceTree = ""; }; - 62D23669A7DA2F7B7B38A21B83AD3BF3 /* GDTCCTUploader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCCTUploader.m; path = GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTUploader.m; sourceTree = ""; }; - 62E8EDABFE6152877F26EBD4926E6967 /* FBSDKLoginKit.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FBSDKLoginKit.debug.xcconfig; sourceTree = ""; }; - 63D4720EC7E5A6F375649C170EC8244D /* FBSDKMonotonicTime.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKMonotonicTime.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMonotonicTime.h; sourceTree = ""; }; - 64297E187B8947F64F1BC5AF4C4077CF /* MoPub_AvidManagedDisplayAdSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MoPub_AvidManagedDisplayAdSession.h; path = MoPubSDK/Viewability/Avid/MoPub_AvidManagedDisplayAdSession.h; sourceTree = ""; }; - 649865C666C7477BF099B7267CFCE31A /* MPLogging.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPLogging.m; path = MoPubSDK/Logging/MPLogging.m; sourceTree = ""; }; - 64EC22B43B8F81D4BCFB8A2410DE42CA /* MPAdDestinationDisplayAgent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPAdDestinationDisplayAgent.m; path = MoPubSDK/Internal/Common/MPAdDestinationDisplayAgent.m; sourceTree = ""; }; - 64F187D3903107ADC2536B804B6FEC30 /* FBSDKTypeUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKTypeUtility.m; path = FBSDKCoreKit/FBSDKCoreKit/Basics/Internal/FBSDKTypeUtility.m; sourceTree = ""; }; - 6556F6463586F6CE21E4C92A21F555B5 /* MPHTTPNetworkSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPHTTPNetworkSession.h; path = MoPubSDK/Internal/MPHTTPNetworkSession.h; sourceTree = ""; }; - 655C76ECA36A4F0C9FB4689791F8167F /* MPATSSetting.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPATSSetting.h; path = MoPubSDK/Internal/MPATSSetting.h; sourceTree = ""; }; - 65D2CF8D521040BB760BE6C73FC0C0EE /* MPReachability.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPReachability.m; path = MoPubSDK/Internal/Utility/MPReachability.m; sourceTree = ""; }; - 6607DF7BF9280EB584C65AE5A9BC6812 /* FBSDKAppLink_Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppLink_Internal.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKAppLink_Internal.h; sourceTree = ""; }; - 664E550E0F16578DFF465C830E7C7C90 /* GDTCOREvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCOREvent.m; path = GoogleDataTransport/GDTCORLibrary/GDTCOREvent.m; sourceTree = ""; }; - 668E54390266144F77D0D4EE724678EC /* FIRComponentType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRComponentType.h; path = FirebaseCore/Sources/Private/FIRComponentType.h; sourceTree = ""; }; - 669AD6FA3A83718653790465EDDA3027 /* FIRCLSUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCLSUtility.m; path = Crashlytics/Crashlytics/Helpers/FIRCLSUtility.m; sourceTree = ""; }; - 66D3D4FC9484F0491598806842479651 /* FIRDiagnosticsData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRDiagnosticsData.h; path = FirebaseCore/Sources/Private/FIRDiagnosticsData.h; sourceTree = ""; }; - 6732B7DE631E847015B1B93C9EACD554 /* MPNativeCustomEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeCustomEvent.h; path = MoPubSDK/NativeAds/MPNativeCustomEvent.h; sourceTree = ""; }; - 67542E6518C8872B2E3790707317DACE /* MPAdPositioning.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPAdPositioning.h; path = MoPubSDK/NativeAds/MPAdPositioning.h; sourceTree = ""; }; - 67716B3EA07B2120ABAC0720885B8501 /* GULReachabilityChecker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULReachabilityChecker.h; path = GoogleUtilities/Reachability/Private/GULReachabilityChecker.h; sourceTree = ""; }; - 678533E5794C45078CC325416F92CB77 /* MPVideoPlayerViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVideoPlayerViewController.h; path = MoPubSDK/Internal/VideoPlayer/MPVideoPlayerViewController.h; sourceTree = ""; }; - 678876F8D1B05FAEA1846B0C9FCD18AB /* MPHTTPNetworkSession.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPHTTPNetworkSession.m; path = MoPubSDK/Internal/MPHTTPNetworkSession.m; sourceTree = ""; }; - 67D1C3F645C22AA4329067D10A17C661 /* MPNativeAdData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPNativeAdData.m; path = MoPubSDK/NativeAds/MPNativeAdData.m; sourceTree = ""; }; - 67DB22DC05D0D7C7BC78386175B0DD41 /* MPMoPubNativeAdAdapter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPMoPubNativeAdAdapter.m; path = MoPubSDK/NativeAds/Internal/MPMoPubNativeAdAdapter.m; sourceTree = ""; }; - 68463252D5108E72747065003E605C45 /* MPDiskLRUCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPDiskLRUCache.h; path = MoPubSDK/Internal/MPDiskLRUCache.h; sourceTree = ""; }; - 68692631D9BCCC58D8F4E29423BE3DAA /* MOPUBNativeVideoCustomEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MOPUBNativeVideoCustomEvent.m; path = MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoCustomEvent.m; sourceTree = ""; }; - 689B71909B44C6D315ED26255530370F /* MPCoreInstanceProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPCoreInstanceProvider.h; path = MoPubSDK/Internal/MPCoreInstanceProvider.h; sourceTree = ""; }; - 69347F26F6C2E168061FAB817E6FC305 /* GDTCORUploadCoordinator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORUploadCoordinator.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCORUploadCoordinator.h; sourceTree = ""; }; - 6942351307BC1F54575D9853307EAE0E /* GoogleDataTransportCCTSupport.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = GoogleDataTransportCCTSupport.framework; path = GoogleDataTransportCCTSupport.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 6945279D2D882103A3A94BD9DF69667F /* FBSDKDeviceLoginManagerResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKDeviceLoginManagerResult.m; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginManagerResult.m; sourceTree = ""; }; - 69B5B729970BF657D0395816C451C10E /* MPHTMLBannerCustomEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPHTMLBannerCustomEvent.h; path = MoPubSDK/Internal/HTML/MPHTMLBannerCustomEvent.h; sourceTree = ""; }; - 6A20379BC83A1E59449FC898243F5839 /* pb.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pb.h; sourceTree = ""; }; - 6A3E4982288CC63AA00F0035B3B56A56 /* FIRCLSPackageReportOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSPackageReportOperation.h; path = Crashlytics/Crashlytics/Operations/Reports/FIRCLSPackageReportOperation.h; sourceTree = ""; }; - 6A46F5AC5336D07AD552CA25A6601BA3 /* FlurryConsent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FlurryConsent.h; path = Flurry/FlurryConsent.h; sourceTree = ""; }; - 6A479C9AC5015AE7660FBDFCFE1F2B6A /* FIRConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRConfiguration.h; path = FirebaseCore/Sources/Public/FIRConfiguration.h; sourceTree = ""; }; - 6A4CBE96AD460EE057A453A790AB8FAB /* FBSDKProfile+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKProfile+Internal.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKProfile+Internal.h"; sourceTree = ""; }; - 6A7D1EA91DD59D2BF101E37913B7F9A5 /* FBLPromise+Reduce.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Reduce.h"; path = "Sources/FBLPromises/include/FBLPromise+Reduce.h"; sourceTree = ""; }; - 6A835F54E977CDBF857C326B9889932E /* FacebookAdapterConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FacebookAdapterConfiguration.m; path = FacebookAudienceNetwork/FacebookAdapterConfiguration.m; sourceTree = ""; }; - 6AC715E90386C0DD70D7C73B370F2AD0 /* MPConsentStatus.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPConsentStatus.h; path = MoPubSDK/MPConsentStatus.h; sourceTree = ""; }; - 6ACBC2914F93D985326031BE043212AF /* FIRHeartbeatInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRHeartbeatInfo.m; path = FirebaseCore/Sources/FIRHeartbeatInfo.m; sourceTree = ""; }; - 6ADDB4B80415BC5DEB5B94D09C91A74E /* FBSDKCoreKit+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKCoreKit+Internal.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKCoreKit+Internal.h"; sourceTree = ""; }; - 6AED6248B672A00E0A269F9229742629 /* FBSDKSettings.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKSettings.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKSettings.m; sourceTree = ""; }; - 6AF16A2ABB4371388376FD7A7A89A628 /* pb_encode.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pb_encode.c; sourceTree = ""; }; - 6B09EC9CBB78F317C0E7C884C6159B17 /* MPAdPositioning.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPAdPositioning.m; path = MoPubSDK/NativeAds/MPAdPositioning.m; sourceTree = ""; }; - 6B1B828DE96AA5636DB040F928FCF93F /* MPBannerAdManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPBannerAdManager.h; path = MoPubSDK/Internal/Banners/MPBannerAdManager.h; sourceTree = ""; }; - 6B9D33C5E8A0E9DA583CB234D92CC884 /* MPConsoleLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPConsoleLogger.h; path = MoPubSDK/Logging/Internal/MPConsoleLogger.h; sourceTree = ""; }; - 6BD62F86FFA0AFECE6E9A616975A0C35 /* FBSDKAppLinkNavigation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppLinkNavigation.h; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkNavigation.h; sourceTree = ""; }; - 6BE178BA3C4DD765A4C34730B2CA5A51 /* MPCloseButtonX@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MPCloseButtonX@3x.png"; path = "MoPubSDK/Resources/MPCloseButtonX@3x.png"; sourceTree = ""; }; - 6BE57F9B0F52397966CCFD818292F142 /* FBSDKMeasurementEventListener.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKMeasurementEventListener.h; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/Internal/FBSDKMeasurementEventListener.h; sourceTree = ""; }; - 6C04688AF12D0731B86D2173C3805671 /* FIRBundleUtil.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRBundleUtil.h; path = FirebaseCore/Sources/FIRBundleUtil.h; sourceTree = ""; }; - 6C1A9B97F58FF358F9C7A7A555EA64D9 /* MPNetworkStatus.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNetworkStatus.h; path = MoPubSDK/Internal/MPNetworkStatus.h; sourceTree = ""; }; - 6C6F13156DD89CE737EA263F1E9D1187 /* GDTCCTPrioritizer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCCTPrioritizer.m; path = GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTPrioritizer.m; sourceTree = ""; }; - 6C97119CA39F4A8A3EFFC226A2E202E6 /* MPVASTDurationOffset.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVASTDurationOffset.h; path = MoPubSDK/Internal/VAST/MPVASTDurationOffset.h; sourceTree = ""; }; - 6CD5E8B3FC92723C070DBE5A7D1D7802 /* FBSDKBasicUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBasicUtility.h; path = FBSDKCoreKit/FBSDKCoreKit/Basics/Internal/FBSDKBasicUtility.h; sourceTree = ""; }; - 6D00D1C6DDE0D1977FE09A5D012C925E /* _FBSDKTemporaryErrorRecoveryAttempter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = _FBSDKTemporaryErrorRecoveryAttempter.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ErrorRecovery/_FBSDKTemporaryErrorRecoveryAttempter.m; sourceTree = ""; }; - 6D32FD4E1B6BB0BB60BE0BACE903DE48 /* MOPUBNativeVideoCustomEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MOPUBNativeVideoCustomEvent.h; path = MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoCustomEvent.h; sourceTree = ""; }; - 6D4C7A20EA95428D9E60BF3298E1B36A /* FIRCLSUUID.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSUUID.h; path = Crashlytics/Shared/FIRCLSUUID.h; sourceTree = ""; }; - 6D5194ED560355362942995C8184ED63 /* FIRCLSUUID.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCLSUUID.m; path = Crashlytics/Shared/FIRCLSUUID.m; sourceTree = ""; }; - 6D636BADD54482F811FE3768D707D049 /* FBSDKErrorReport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKErrorReport.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Instrument/ErrorReport/FBSDKErrorReport.h; sourceTree = ""; }; - 6DDFDCAD7FC9028D55EC1DA9C0ABF86F /* MPAPIEndpoints.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPAPIEndpoints.m; path = MoPubSDK/Internal/Common/MPAPIEndpoints.m; sourceTree = ""; }; - 6E1B1C323958B2683C3864841131C092 /* MPNativeAdRendererImageHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPNativeAdRendererImageHandler.m; path = MoPubSDK/NativeAds/Internal/MPNativeAdRendererImageHandler.m; sourceTree = ""; }; - 6E59FEC9A67608BADD8B56A68F9455C4 /* FBLPromise+Validate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Validate.h"; path = "Sources/FBLPromises/include/FBLPromise+Validate.h"; sourceTree = ""; }; - 6E6DC5F53026FAD96AE60CD0DEA5799B /* nanopb-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "nanopb-umbrella.h"; sourceTree = ""; }; - 6EB39E144532ABC1E978112178C709D1 /* FBSDKAppLinkTarget.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppLinkTarget.h; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkTarget.h; sourceTree = ""; }; - 6EC5F23197C2154B161169B185B9AEB1 /* MPVideoPlayerViewOverlay.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVideoPlayerViewOverlay.h; path = MoPubSDK/Internal/VideoPlayer/MPVideoPlayerViewOverlay.h; sourceTree = ""; }; - 6ECFC60B24BA7C537A28C1D6FC13648E /* FBSDKModelManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKModelManager.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/ML/FBSDKModelManager.m; sourceTree = ""; }; - 6ED1EC58452428DF46CEECD96173EC0E /* FIRCLSException.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSException.h; path = Crashlytics/Crashlytics/Handlers/FIRCLSException.h; sourceTree = ""; }; - 6F075B3C27EAE9395D49E5B682476752 /* MPImageLoader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPImageLoader.m; path = MoPubSDK/Internal/Utility/MPImageLoader.m; sourceTree = ""; }; - 6F086552A6D613F74EA4B21DAEF8CCE2 /* GULNetwork.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULNetwork.m; path = GoogleUtilities/Network/GULNetwork.m; sourceTree = ""; }; - 6F0A4355DDF80E4D44EB2799EA3D706F /* MPCollectionViewAdPlacer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPCollectionViewAdPlacer.m; path = MoPubSDK/NativeAds/MPCollectionViewAdPlacer.m; sourceTree = ""; }; - 6F21BAAA4F442FBEB12685B85F255676 /* MOPUBFullscreenPlayerViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MOPUBFullscreenPlayerViewController.h; path = MoPubSDK/NativeVideo/Internal/MOPUBFullscreenPlayerViewController.h; sourceTree = ""; }; - 6FEAF1A68C1B40539C2535E220D4AEF3 /* FIRCLSExecutionIdentifierModel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSExecutionIdentifierModel.h; path = Crashlytics/Crashlytics/Models/FIRCLSExecutionIdentifierModel.h; sourceTree = ""; }; - 7049096A71986AFBE5AA27B7616A6CD4 /* MPAdPlacerInvocation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPAdPlacerInvocation.m; path = MoPubSDK/NativeAds/Internal/MPAdPlacerInvocation.m; sourceTree = ""; }; - 707F365A6E4B98614C309D51DABBA688 /* GDTCORFlatFileStorage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORFlatFileStorage.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORFlatFileStorage.m; sourceTree = ""; }; - 709E5298AD4FBF73236F51DE25C1DA34 /* FBAdImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBAdImage.h; path = Static/FBAudienceNetwork.framework/Headers/FBAdImage.h; sourceTree = ""; }; - 709EFBD2F6AE1737C22A904822B4426B /* MPNativeAdError+VAST.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "MPNativeAdError+VAST.m"; path = "MoPubSDK/NativeAds/Internal/Categories/MPNativeAdError+VAST.m"; sourceTree = ""; }; - 70EE066314FB3E6E83F20C89E6142B1A /* FBSDKViewHierarchyMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKViewHierarchyMacros.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/ViewHierarchy/FBSDKViewHierarchyMacros.h; sourceTree = ""; }; - 7130D7140C6FE9C846F6C6FAA911B28B /* GULOriginalIMPConvenienceMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULOriginalIMPConvenienceMacros.h; path = GoogleUtilities/MethodSwizzler/Private/GULOriginalIMPConvenienceMacros.h; sourceTree = ""; }; - 7143E7FF82AB93597DAF450A09C3B3B6 /* FIRCLSUnwind.c */ = {isa = PBXFileReference; includeInIndex = 1; name = FIRCLSUnwind.c; path = Crashlytics/Crashlytics/Unwind/FIRCLSUnwind.c; sourceTree = ""; }; - 71616735BFAD1A7AE7425B7AE9F8E829 /* FBSDKRestrictiveDataFilterManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKRestrictiveDataFilterManager.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/RestrictiveDataFilter/FBSDKRestrictiveDataFilterManager.m; sourceTree = ""; }; - 716BAF382C88FD1CF7FB0F74354FA0FA /* MPNativeAdRendererSettings.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAdRendererSettings.h; path = MoPubSDK/NativeAds/MPNativeAdRendererSettings.h; sourceTree = ""; }; - 71F6DE3BF109FD746859A8C9A008D5C1 /* MPBannerCustomEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPBannerCustomEvent.m; path = MoPubSDK/MPBannerCustomEvent.m; sourceTree = ""; }; - 722251709E755801F89FFEEFD0245F77 /* MOPUBNativeVideoAdRendererSettings.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MOPUBNativeVideoAdRendererSettings.m; path = MoPubSDK/NativeVideo/MOPUBNativeVideoAdRendererSettings.m; sourceTree = ""; }; - 723816E8701B3BC8783F6024F09D9633 /* FBNativeAd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBNativeAd.h; path = Static/FBAudienceNetwork.framework/Headers/FBNativeAd.h; sourceTree = ""; }; - 726043824B0B792D392FA440DD2A5FD8 /* GULApplication.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULApplication.h; path = GoogleUtilities/AppDelegateSwizzler/Private/GULApplication.h; sourceTree = ""; }; - 72700B6C26BEB1651ADCA5EFC91C45E9 /* MOPUBPlayerView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MOPUBPlayerView.m; path = MoPubSDK/NativeVideo/Internal/MOPUBPlayerView.m; sourceTree = ""; }; - 7308B2C4895ADFCC9EFECDCB781BF3D0 /* NSError+MPAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSError+MPAdditions.m"; path = "MoPubSDK/Internal/Utility/Categories/NSError+MPAdditions.m"; sourceTree = ""; }; - 73803C1BF3262D233765F5EE4F77BF9B /* FIRCLSLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSLogger.h; path = Crashlytics/Crashlytics/Helpers/FIRCLSLogger.h; sourceTree = ""; }; - 73A1343655B87B87FCE8289DDCC312B7 /* MPURLRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPURLRequest.h; path = MoPubSDK/Internal/MPURLRequest.h; sourceTree = ""; }; - 73D633F95C5F3899CCBB137C7F13BC6D /* FBSDKKeychainStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKKeychainStore.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStore.h; sourceTree = ""; }; - 744C12FE7CEE855F769638F2ACBEFD32 /* FBSDKTimeSpentData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKTimeSpentData.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKTimeSpentData.h; sourceTree = ""; }; - 746DDFAD6C96FB57B1BAEB0980D61533 /* FirebaseCoreDiagnosticsInterop.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseCoreDiagnosticsInterop.debug.xcconfig; sourceTree = ""; }; - 74B477731B3C7233938542BE7A305320 /* FirebaseCrashlytics.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = FirebaseCrashlytics.modulemap; sourceTree = ""; }; - 74C20C30A0A1CDF0CDB25BABB7EB65CF /* FIRInstallationsVersion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstallationsVersion.h; path = FirebaseInstallations/Source/Library/Public/FIRInstallationsVersion.h; sourceTree = ""; }; - 74DD172345CA56DF751E17B590AA16D0 /* MPVASTCompanionAdView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVASTCompanionAdView.m; path = MoPubSDK/Internal/VideoPlayer/MPVASTCompanionAdView.m; sourceTree = ""; }; - 74DF685EB19AD031F2AB0E9629628E64 /* FBSDKCodelessPathComponent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKCodelessPathComponent.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessPathComponent.h; sourceTree = ""; }; - 74E403D6778A0EC368BF98556B091048 /* FBAdSize.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBAdSize.h; path = Static/FBAudienceNetwork.framework/Headers/FBAdSize.h; sourceTree = ""; }; - 74E63A0224582D4BFADBCCDD8B24B940 /* MPHTTPNetworkTaskData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPHTTPNetworkTaskData.m; path = MoPubSDK/Internal/MPHTTPNetworkTaskData.m; sourceTree = ""; }; - 75F0F0CBB17EED30B34F48D9877EB8EF /* FirebaseCoreDiagnostics-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FirebaseCoreDiagnostics-umbrella.h"; sourceTree = ""; }; - 762EF574B1B3603C4A3C95BB8BF57801 /* GDTCORTargets.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORTargets.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCORTargets.h; sourceTree = ""; }; - 763E069341A2B66FD72F055C57B14880 /* GULUserDefaults.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULUserDefaults.h; path = GoogleUtilities/UserDefaults/Private/GULUserDefaults.h; sourceTree = ""; }; - 767861614DFB87219A3F04518AC97C7E /* FIRInstallationsIIDTokenStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstallationsIIDTokenStore.m; path = FirebaseInstallations/Source/Library/IIDMigration/FIRInstallationsIIDTokenStore.m; sourceTree = ""; }; - 7680208B78CD28C051277E2A501A471B /* FBAdChoicesView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBAdChoicesView.h; path = Static/FBAudienceNetwork.framework/Headers/FBAdChoicesView.h; sourceTree = ""; }; - 768F2B19754A0B02399D291945BDC419 /* FBSDKDeviceRequestsHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKDeviceRequestsHelper.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKDeviceRequestsHelper.m; sourceTree = ""; }; - 76AB238FB89EFE9FDF32EA3ECF97DD1D /* MPProgressOverlayView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPProgressOverlayView.m; path = MoPubSDK/Internal/Common/MPProgressOverlayView.m; sourceTree = ""; }; - 76F3716DBD1D1B498123462FC4113A9A /* GoogleDataTransportCCTSupport-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "GoogleDataTransportCCTSupport-dummy.m"; sourceTree = ""; }; - 7727D060E029691BBC6B6FAD2C9823F2 /* FIRCLSUnwind_x86.c */ = {isa = PBXFileReference; includeInIndex = 1; name = FIRCLSUnwind_x86.c; path = Crashlytics/Crashlytics/Unwind/FIRCLSUnwind_x86.c; sourceTree = ""; }; - 7760A0AF86664FC43E6E281136FC37A0 /* FBSDKDeviceLoginCodeInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKDeviceLoginCodeInfo.h; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginCodeInfo.h; sourceTree = ""; }; - 7772258312F8FFBC37B1701CF91A67C4 /* MRAID.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = MRAID.bundle; path = MoPubSDK/Resources/MRAID.bundle; sourceTree = ""; }; - 779B708F23B2347E6B64C56B472C4A68 /* FBSDKAppLinkTarget.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppLinkTarget.m; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkTarget.m; sourceTree = ""; }; - 7802FB3BA994697979ED28AC90D75431 /* FIRCLSDemangleOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSDemangleOperation.h; path = Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSDemangleOperation.h; sourceTree = ""; }; - 781FC8AD51E6866D2D7CC94F5C7932E7 /* MPRewardedVideo+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MPRewardedVideo+Internal.h"; path = "MoPubSDK/RewardedVideo/Internal/MPRewardedVideo+Internal.h"; sourceTree = ""; }; - 7840536818AD62A9E1266EEB100D26B0 /* FBAdView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBAdView.h; path = Static/FBAudienceNetwork.framework/Headers/FBAdView.h; sourceTree = ""; }; - 78E569AFAEEA25A83AC62222BB6BB835 /* GDTCORReachability_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORReachability_Private.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCORReachability_Private.h; sourceTree = ""; }; - 790F348E617B892F291993FB53AAFD65 /* FIRCLSUserDefaults_private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSUserDefaults_private.h; path = Crashlytics/Crashlytics/FIRCLSUserDefaults/FIRCLSUserDefaults_private.h; sourceTree = ""; }; - 79F15A919D6DC19F44088DB016D122FF /* MPTimer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPTimer.h; path = MoPubSDK/Internal/Utility/MPTimer.h; sourceTree = ""; }; - 7A720F1AC1BBDADFB9E4F208A780720A /* FBSDKWebViewAppLinkResolver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKWebViewAppLinkResolver.h; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKWebViewAppLinkResolver.h; sourceTree = ""; }; - 7A8AC4623F10EB2A718EA1CD2D86333C /* MPNativeView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeView.h; path = MoPubSDK/NativeAds/Internal/MPNativeView.h; sourceTree = ""; }; - 7AB75C783FDB662AD33F4856BDBF5462 /* FBSDKAddressInferencer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAddressInferencer.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/RestrictiveDataFilter/FBSDKAddressInferencer.h; sourceTree = ""; }; - 7B253846CEFA62AB7AD5504A4CD1CA45 /* MPURLActionInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPURLActionInfo.m; path = MoPubSDK/Internal/Common/MPURLActionInfo.m; sourceTree = ""; }; - 7B2C64AC3A7746F39121E57C8C219D15 /* FBNativeAdBase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBNativeAdBase.h; path = Static/FBAudienceNetwork.framework/Headers/FBNativeAdBase.h; sourceTree = ""; }; - 7B4870C332847015867E0F5AA508FC12 /* NSBundle+MPAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSBundle+MPAdditions.m"; path = "MoPubSDK/Internal/Utility/Categories/NSBundle+MPAdditions.m"; sourceTree = ""; }; - 7B5802FB9F5AB8C64D72C22F77867BF0 /* libFlurry_11.1.0.a */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = archive.ar; name = libFlurry_11.1.0.a; path = Flurry/libFlurry_11.1.0.a; sourceTree = ""; }; - 7BC3F5B593BE37B9F6BD11C01F5EE0E6 /* MPLogEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPLogEvent.m; path = MoPubSDK/Logging/MPLogEvent.m; sourceTree = ""; }; - 7BF8A72C551D28B3CC11DDE9D32C067E /* FirebaseAnalytics.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseAnalytics.debug.xcconfig; sourceTree = ""; }; - 7C287BD18D5DBAF69726AC1A45CC18BE /* FirebaseCore-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FirebaseCore-dummy.m"; sourceTree = ""; }; - 7C413ED1859E211FD770AD71D1EACCCA /* MPVASTModel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVASTModel.h; path = MoPubSDK/Internal/VAST/MPVASTModel.h; sourceTree = ""; }; - 7C4CFE5B0130DF4CA31ED2DAB3DE837E /* Flurry-iOS-SDK.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Flurry-iOS-SDK.release.xcconfig"; sourceTree = ""; }; - 7C5A37AFF5C126E7407B4F7219F8ADA2 /* MPUserInteractionGestureRecognizer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPUserInteractionGestureRecognizer.h; path = MoPubSDK/Internal/Utility/MPUserInteractionGestureRecognizer.h; sourceTree = ""; }; - 7C6522F48AB08CA38170DB89C1F9C275 /* FIRInstallationsItem+RegisterInstallationAPI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FIRInstallationsItem+RegisterInstallationAPI.m"; path = "FirebaseInstallations/Source/Library/InstallationsAPI/FIRInstallationsItem+RegisterInstallationAPI.m"; sourceTree = ""; }; - 7C94E6D5E6F6E23718118536A3F070C9 /* MPMoPubRewardedVideoCustomEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPMoPubRewardedVideoCustomEvent.h; path = MoPubSDK/RewardedVideo/Internal/MPMoPubRewardedVideoCustomEvent.h; sourceTree = ""; }; - 7C9D123AD8272A1886DBF0DCC00A81D2 /* FIRCoreDiagnosticsData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCoreDiagnosticsData.h; path = Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsData.h; sourceTree = ""; }; - 7D01059659FD31111828912F1920B741 /* mopub-ios-sdk-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "mopub-ios-sdk-prefix.pch"; sourceTree = ""; }; - 7D17C78ADCC152D5E6E1B713B98248B5 /* GDTCOREvent+GDTCCTSupport.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "GDTCOREvent+GDTCCTSupport.m"; path = "GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCOREvent+GDTCCTSupport.m"; sourceTree = ""; }; - 7D3189B05FAE4A32C2818F57DCE1676E /* FBSDKLoginManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLoginManager.h; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManager.h; sourceTree = ""; }; - 7D4843A392FF3465CBE87FE5353D738A /* MPRewardedVideoCustomEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPRewardedVideoCustomEvent.h; path = MoPubSDK/RewardedVideo/MPRewardedVideoCustomEvent.h; sourceTree = ""; }; - 7D7B53AC3608534B09156655043ED56A /* MPUserInteractionGestureRecognizer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPUserInteractionGestureRecognizer.m; path = MoPubSDK/Internal/Utility/MPUserInteractionGestureRecognizer.m; sourceTree = ""; }; - 7DCAFA7DC86337CB7EF961C08CDBF7B5 /* FBSDKButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKButton.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKButton.m; sourceTree = ""; }; - 7DD3931998BB79E91A64CAB641322E97 /* FIRCLSInstallIdentifierModel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSInstallIdentifierModel.h; path = Crashlytics/Crashlytics/Models/FIRCLSInstallIdentifierModel.h; sourceTree = ""; }; - 7E4A30740F1AB99F87DB6681D366FD7B /* MPMRAIDBannerCustomEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPMRAIDBannerCustomEvent.h; path = MoPubSDK/Internal/MRAID/MPMRAIDBannerCustomEvent.h; sourceTree = ""; }; - 7E4AF3080BA22435DB8B8A52CFD044C1 /* FIRInstallationsAPIService.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstallationsAPIService.h; path = FirebaseInstallations/Source/Library/InstallationsAPI/FIRInstallationsAPIService.h; sourceTree = ""; }; - 7E4BAA7343B7F32D07C265ED1D8A2288 /* FIRCLSSignal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSSignal.h; path = Crashlytics/Crashlytics/Handlers/FIRCLSSignal.h; sourceTree = ""; }; - 7E622F34474A1058AB765526BF8520FB /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - 7E9A9B0555DE3093146BE01B837BD495 /* FirebaseCore.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseCore.debug.xcconfig; sourceTree = ""; }; - 7EBD9EAD0771D06031B94D67F42A5768 /* FBSDKEventBindingManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKEventBindingManager.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKEventBindingManager.h; sourceTree = ""; }; - 7F08BB4B4FFCD21F2A613D352040F630 /* FIRCLSAllocate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSAllocate.h; path = Crashlytics/Crashlytics/Helpers/FIRCLSAllocate.h; sourceTree = ""; }; - 7F99F2898E4CC45FA4B01D3090241531 /* GULNetworkConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULNetworkConstants.h; path = GoogleUtilities/Network/Private/GULNetworkConstants.h; sourceTree = ""; }; - 7FC8AF597BA8ABE50213AD9C432B6054 /* GoogleAppMeasurement.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GoogleAppMeasurement.debug.xcconfig; sourceTree = ""; }; - 8049CFBC0A5A3BF3A7E3EAC76FFF6FC5 /* MPAdConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPAdConfiguration.h; path = MoPubSDK/Internal/Common/MPAdConfiguration.h; sourceTree = ""; }; - 8081747B6821D47031C444F6953D8A04 /* FBSDKBase64.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBase64.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Base64/FBSDKBase64.h; sourceTree = ""; }; - 80E308E891E031A69331D98708DF15A9 /* FBLPromise+Retry.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Retry.m"; path = "Sources/FBLPromises/FBLPromise+Retry.m"; sourceTree = ""; }; - 813C80CA9D64B3BEA37763F891E1D8F8 /* MPConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPConstants.h; path = MoPubSDK/MPConstants.h; sourceTree = ""; }; - 81564D80E709216F4506C39E82682511 /* FIRCLSDataCollectionArbiter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSDataCollectionArbiter.h; path = Crashlytics/Crashlytics/DataCollection/FIRCLSDataCollectionArbiter.h; sourceTree = ""; }; - 81A559E78999AE4D2B9AFE09303A7ADA /* MPMoPubConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPMoPubConfiguration.m; path = MoPubSDK/MPMoPubConfiguration.m; sourceTree = ""; }; - 8312F28D52AEE986AC2184D2BD798B0B /* GULSecureCoding.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULSecureCoding.h; path = GoogleUtilities/Environment/Private/GULSecureCoding.h; sourceTree = ""; }; - 835D971CFA0A8E5CABFCA648B834F6C8 /* FBSDKLoginManagerLoginResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLoginManagerLoginResult.m; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManagerLoginResult.m; sourceTree = ""; }; - 83789C392F2F96731A4B8589523C1ABE /* GULNetworkLoggerProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULNetworkLoggerProtocol.h; path = GoogleUtilities/Network/Private/GULNetworkLoggerProtocol.h; sourceTree = ""; }; - 837E03BA740DC46BCFBB2E93B20251E1 /* FIRCLSGlobals.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSGlobals.h; path = Crashlytics/Crashlytics/Components/FIRCLSGlobals.h; sourceTree = ""; }; - 8400A864667A529DD818ADE71CA493FA /* FIRStackFrame.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRStackFrame.m; path = Crashlytics/Crashlytics/FIRStackFrame.m; sourceTree = ""; }; - 8421B78D82345C3C2218415460154209 /* MRVideoPlayerManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MRVideoPlayerManager.h; path = MoPubSDK/Internal/MRAID/MRVideoPlayerManager.h; sourceTree = ""; }; - 847E2A1299B889745B7CDA61402E6461 /* NSJSONSerialization+MPAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSJSONSerialization+MPAdditions.h"; path = "MoPubSDK/Internal/Utility/Categories/NSJSONSerialization+MPAdditions.h"; sourceTree = ""; }; - 854DA4404AE05EA8E1C798964EABE112 /* FBNativeAdCollectionViewAdProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBNativeAdCollectionViewAdProvider.h; path = Static/FBAudienceNetwork.framework/Headers/FBNativeAdCollectionViewAdProvider.h; sourceTree = ""; }; - 856B5CD56F194FAD26EA91620B66D614 /* GoogleDataTransport.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = GoogleDataTransport.framework; path = GoogleDataTransport.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 85788E3AF5206F9CDD220BE81B99858C /* GoogleUtilities.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GoogleUtilities.release.xcconfig; sourceTree = ""; }; - 85F31C39518A8353AF0A3D64ED99CA1F /* FIRCLSCodeMapping.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSCodeMapping.h; path = Crashlytics/Shared/FIRCLSMachO/FIRCLSCodeMapping.h; sourceTree = ""; }; - 85F3D4B1175DCF84CDF42C580CB4751F /* MPUBMoatMobileAppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MPUBMoatMobileAppKit.framework; path = MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework; sourceTree = ""; }; - 862AFAFFF836A0DB4276C126500CD3DE /* FIRErrors.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRErrors.m; path = FirebaseCore/Sources/FIRErrors.m; sourceTree = ""; }; - 86375444C196BA272DDBB8165BF64A15 /* FirebaseCrashlytics.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = FirebaseCrashlytics.framework; path = FirebaseCrashlytics.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 867272EE107E76CFD51171F4E3EA86D5 /* FlurryCCPA.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FlurryCCPA.h; path = Flurry/FlurryCCPA.h; sourceTree = ""; }; - 868363752B05CDFC7CB160C8F72458F5 /* MPClosableView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPClosableView.h; path = MoPubSDK/Internal/Common/MPClosableView.h; sourceTree = ""; }; - 868BDF2301867D3D7F4568E953FE247A /* FBInstreamAdView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBInstreamAdView.h; path = Static/FBAudienceNetwork.framework/Headers/FBInstreamAdView.h; sourceTree = ""; }; - 86DA9BEC751E73A747E1058549428A9C /* MRExpandModalViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MRExpandModalViewController.h; path = MoPubSDK/Internal/MRAID/MRExpandModalViewController.h; sourceTree = ""; }; - 86FDCE3EA2362D1553356515551EB71C /* FBNativeAdScrollView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBNativeAdScrollView.h; path = Static/FBAudienceNetwork.framework/Headers/FBNativeAdScrollView.h; sourceTree = ""; }; - 8726BEB43B1C387135FD3070176FEF0B /* FIRComponentContainerInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRComponentContainerInternal.h; path = FirebaseCore/Sources/Private/FIRComponentContainerInternal.h; sourceTree = ""; }; - 874697498891F3E60C6ED1A7D1D95A89 /* MOPUBAVPlayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MOPUBAVPlayer.m; path = MoPubSDK/NativeVideo/Internal/MOPUBAVPlayer.m; sourceTree = ""; }; - 87905D5D9620EBAA8D48F838D2DC8E2C /* FIRCLSURLSessionDownloadTask.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCLSURLSessionDownloadTask.m; path = Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionDownloadTask.m; sourceTree = ""; }; - 8803603DF776222FD24D596996D41ECB /* FIRCLSFCRAnalytics.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCLSFCRAnalytics.m; path = Crashlytics/Crashlytics/Helpers/FIRCLSFCRAnalytics.m; sourceTree = ""; }; - 88230E10D8AF4F49B0E4983659BA2151 /* GoogleUtilities-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "GoogleUtilities-Info.plist"; sourceTree = ""; }; - 88E1CFBAD4C98AAE2FE9CB856CA8BFA1 /* FIRCLSURLBuilder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCLSURLBuilder.m; path = Crashlytics/Shared/FIRCLSNetworking/FIRCLSURLBuilder.m; sourceTree = ""; }; - 89279793F9A526B0377ACD303258633D /* FIRCLSURLSession.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCLSURLSession.m; path = Crashlytics/Crashlytics/FIRCLSURLSession/FIRCLSURLSession.m; sourceTree = ""; }; - 894AE0E358FA77185A3402B4E8C5AD1C /* MPConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPConstants.m; path = MoPubSDK/MPConstants.m; sourceTree = ""; }; - 8965476885187910D2D1BA1147142172 /* MPAdPlacerInvocation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPAdPlacerInvocation.h; path = MoPubSDK/NativeAds/Internal/MPAdPlacerInvocation.h; sourceTree = ""; }; - 8978A71715A22E8C3CB2878A5D1F28DD /* FirebaseAnalyticsInterop.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseAnalyticsInterop.release.xcconfig; sourceTree = ""; }; - 898AEBA83AAE68448347BF534C69079E /* FBSDKLibAnalyzer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLibAnalyzer.h; path = FBSDKCoreKit/FBSDKCoreKit/Basics/Instrument/FBSDKLibAnalyzer.h; sourceTree = ""; }; - 89FF330A6442C677B526CB2855778A0C /* FIRCLSReport_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSReport_Private.h; path = Crashlytics/Crashlytics/Models/FIRCLSReport_Private.h; sourceTree = ""; }; - 8A018245C0828B7A86A4799C1DC5D91E /* FBSDKHybridAppEventsScriptMessageHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKHybridAppEventsScriptMessageHandler.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKHybridAppEventsScriptMessageHandler.m; sourceTree = ""; }; - 8A2079D3A3064C29D8BCF5B92737A22F /* FirebaseAnalytics.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseAnalytics.release.xcconfig; sourceTree = ""; }; - 8A32B4EC2E226FFCDC31F82E6A52B86C /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/SystemConfiguration.framework; sourceTree = DEVELOPER_DIR; }; - 8A40F24A1996380E9AC544EFBB092619 /* FBLPromise.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBLPromise.h; path = Sources/FBLPromises/include/FBLPromise.h; sourceTree = ""; }; - 8AA16CC8BD2EAD44F640A97A5349131D /* FBLPromise+Reduce.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Reduce.m"; path = "Sources/FBLPromises/FBLPromise+Reduce.m"; sourceTree = ""; }; - 8ACD209FA4CEBB607418DDCB0D89EF02 /* FBSDKErrorRecoveryAttempter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKErrorRecoveryAttempter.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ErrorRecovery/FBSDKErrorRecoveryAttempter.h; sourceTree = ""; }; - 8B29F0140CCACE6F460B67EC664AD890 /* MPViewabilityAdapter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPViewabilityAdapter.h; path = MoPubSDK/Viewability/MPViewabilityAdapter.h; sourceTree = ""; }; - 8B2D31DDF28781D80D3A1BAFF8EAC605 /* GULHeartbeatDateStorage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULHeartbeatDateStorage.m; path = GoogleUtilities/Environment/GULHeartbeatDateStorage.m; sourceTree = ""; }; - 8B5BE6A19289ABECD933850DCDB9714F /* FBLPromise+Then.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Then.h"; path = "Sources/FBLPromises/include/FBLPromise+Then.h"; sourceTree = ""; }; - 8BA5CD5A3514ED648F5A717676881B1B /* FBSDKConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKConstants.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKConstants.m; sourceTree = ""; }; - 8BAD6768EC338FEE7F2E5FE8D78BEBE6 /* FIRCLSFeatures.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSFeatures.h; path = Crashlytics/Crashlytics/Helpers/FIRCLSFeatures.h; sourceTree = ""; }; - 8BF86487A25C13CE6346CEC05715438E /* FBSDKSuggestedEventsIndexer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKSuggestedEventsIndexer.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/SuggestedEvents/FBSDKSuggestedEventsIndexer.h; sourceTree = ""; }; - 8C9122611C5B3FE38B61F8E45EF2796E /* FBSDKModelUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKModelUtility.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/ML/FBSDKModelUtility.h; sourceTree = ""; }; - 8CC9178C366942FD6FF6A115604EAD58 /* FirebaseCoreDiagnostics.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = FirebaseCoreDiagnostics.framework; path = FirebaseCoreDiagnostics.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 8D01C3C7238B2B2AD7B2A2AB9A7959E2 /* FIRCLSByteUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSByteUtility.h; path = Crashlytics/Shared/FIRCLSByteUtility.h; sourceTree = ""; }; - 8D88B2688188E9D2DCFEB9F0DC0479CA /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; - 8DCFFA7C353E76CC942338CCB28CCBD4 /* GULMutableDictionary.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULMutableDictionary.m; path = GoogleUtilities/Network/GULMutableDictionary.m; sourceTree = ""; }; - 8DD991116179CD64BA482F3F7B3514C9 /* nanopb-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "nanopb-Info.plist"; sourceTree = ""; }; - 8DF01BF3644DE8D55CB89C5D73774798 /* MPNativeAdData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAdData.h; path = MoPubSDK/NativeAds/MPNativeAdData.h; sourceTree = ""; }; - 8DF93FC81DFC41292554D069ADCDA7EB /* mopub-ios-sdk.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "mopub-ios-sdk.release.xcconfig"; sourceTree = ""; }; - 8E3ACB3228004B777C3FA1C5D04664D5 /* FBNativeAdTableViewCellProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBNativeAdTableViewCellProvider.h; path = Static/FBAudienceNetwork.framework/Headers/FBNativeAdTableViewCellProvider.h; sourceTree = ""; }; - 8E4E3180FC567C9FCDA8CD91312C90E6 /* MPUnmutedBtn.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = MPUnmutedBtn.png; path = MoPubSDK/Resources/MPUnmutedBtn.png; sourceTree = ""; }; - 8E520B664B861CE7D881084CD6886827 /* FBSDKCoreKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FBSDKCoreKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 8E64C6C8BC36D1C26456222BF7065A0B /* FacebookBannerCustomEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FacebookBannerCustomEvent.m; path = FacebookAudienceNetwork/FacebookBannerCustomEvent.m; sourceTree = ""; }; - 8EA069EFB3049E3A7B60130A4BD5D606 /* FacebookNativeAdAdapter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FacebookNativeAdAdapter.m; path = FacebookAudienceNetwork/FacebookNativeAdAdapter.m; sourceTree = ""; }; - 8EA3C5A33D9C1E8AE138CDD68C69C675 /* MPNativeAdRenderingImageLoader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPNativeAdRenderingImageLoader.m; path = MoPubSDK/NativeAds/MPNativeAdRenderingImageLoader.m; sourceTree = ""; }; - 8EADE5B5D8A27D9F974F8D699786A2A3 /* FIRCLSUserLogging.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCLSUserLogging.m; path = Crashlytics/Crashlytics/Components/FIRCLSUserLogging.m; sourceTree = ""; }; - 8EC73343422232DBD4799D037B603602 /* FBSDKBridgeAPIProtocolWebV2.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBridgeAPIProtocolWebV2.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolWebV2.h; sourceTree = ""; }; - 8EEA667CCD226FB95A7F36320AD4B4F4 /* MPCountdownTimerView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPCountdownTimerView.h; path = MoPubSDK/Internal/Common/MPCountdownTimerView.h; sourceTree = ""; }; - 8EEA761BA7B8496BB63A2A3F938E7559 /* FIRCLSDemangleOperation.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = FIRCLSDemangleOperation.mm; path = Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSDemangleOperation.mm; sourceTree = ""; }; - 8EED7D2A5C8ACBB64FE0F34920A94153 /* FBSDKCodelessParameterComponent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKCodelessParameterComponent.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessParameterComponent.m; sourceTree = ""; }; - 8F37D0042C941293047BDBFD25E23093 /* FBSDKBase64.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKBase64.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Base64/FBSDKBase64.m; sourceTree = ""; }; - 8F4C6B7F9F945BCDC1D2570556941C73 /* MPInterstitialAdManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPInterstitialAdManager.h; path = MoPubSDK/Internal/Interstitials/MPInterstitialAdManager.h; sourceTree = ""; }; - 8F5C95F06D7F106B44CA92D1BEBCC488 /* FIRCoreDiagnosticsConnector.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCoreDiagnosticsConnector.m; path = FirebaseCore/Sources/FIRCoreDiagnosticsConnector.m; sourceTree = ""; }; - 8F7424BDE45733C4DE9D510614DD8613 /* _FBSDKLoginRecoveryAttempter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = _FBSDKLoginRecoveryAttempter.m; path = FBSDKLoginKit/FBSDKLoginKit/Internal/_FBSDKLoginRecoveryAttempter.m; sourceTree = ""; }; - 8F7D5512D049686AB606130195CE0526 /* MRError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MRError.m; path = MoPubSDK/Internal/MRAID/MRError.m; sourceTree = ""; }; - 8F8470B349C63A52E3D8CF767119A42F /* FBSDKCloseIcon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKCloseIcon.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKCloseIcon.h; sourceTree = ""; }; - 8FDCD270C1EDEAC680200680C4488FCB /* FBSDKGraphRequestPiggybackManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKGraphRequestPiggybackManager.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestPiggybackManager.h; sourceTree = ""; }; - 8FEBC6B2AD39E86085910EAB5418385F /* FIRCLSMachOBinary.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCLSMachOBinary.m; path = Crashlytics/Shared/FIRCLSMachO/FIRCLSMachOBinary.m; sourceTree = ""; }; - 90429778259497EBA2033D42CA835743 /* Pods-MAPS.ME-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MAPS.ME-frameworks.sh"; sourceTree = ""; }; - 9044B3A077CAC1211E46CA82B02DC0E5 /* MPVASTCompanionAd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVASTCompanionAd.h; path = MoPubSDK/Internal/VAST/MPVASTCompanionAd.h; sourceTree = ""; }; - 9085B8A32AFF10675A22486994BEAC12 /* Pods-MAPS.ME.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MAPS.ME.release.xcconfig"; sourceTree = ""; }; - 90EC9A4F17BBFBBDEF89853FD9138867 /* GULNetworkURLSession.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULNetworkURLSession.m; path = GoogleUtilities/Network/GULNetworkURLSession.m; sourceTree = ""; }; - 91459713F98CBE00E4F4A06EAD82FCAB /* MPRealTimeTimer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPRealTimeTimer.h; path = MoPubSDK/Internal/Common/MPRealTimeTimer.h; sourceTree = ""; }; - 918CD1D8B2B01E16F21B8DCA07123528 /* GULNetworkMessageCode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULNetworkMessageCode.h; path = GoogleUtilities/Network/Private/GULNetworkMessageCode.h; sourceTree = ""; }; - 9193BBD892E8AA0FC11853055C48AB38 /* MPURL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPURL.h; path = MoPubSDK/Internal/MPURL.h; sourceTree = ""; }; - 91ADFDC1A52B47D8CB46CCC7A87E2E08 /* FIRCLSURLSessionConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSURLSessionConfiguration.h; path = Crashlytics/Crashlytics/FIRCLSURLSession/FIRCLSURLSessionConfiguration.h; sourceTree = ""; }; - 91CD1E0D9FCF5650C6EC29BA30964CAA /* MPAdapterConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPAdapterConfiguration.h; path = MoPubSDK/MPAdapterConfiguration.h; sourceTree = ""; }; - 91D5B6D34524FBC511385A6729B4F89F /* PromisesObjC-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "PromisesObjC-dummy.m"; sourceTree = ""; }; - 924EC653C3FDD2077EFC407D2052C7CF /* FIRVersion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRVersion.h; path = FirebaseCore/Sources/FIRVersion.h; sourceTree = ""; }; - 92508B11E4711DFE2426DF55E1526E60 /* FBLPromise+Retry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Retry.h"; path = "Sources/FBLPromises/include/FBLPromise+Retry.h"; sourceTree = ""; }; - 925753A299D8844E3EB342038CD6A4DD /* FBNativeBannerAdView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBNativeBannerAdView.h; path = Static/FBAudienceNetwork.framework/Headers/FBNativeBannerAdView.h; sourceTree = ""; }; - 9267DFA6F86A3639061CA2BBC44DA277 /* FBMediaViewVideoRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBMediaViewVideoRenderer.h; path = Static/FBAudienceNetwork.framework/Headers/FBMediaViewVideoRenderer.h; sourceTree = ""; }; - 927376525CE83C1EDB8B91AFEB98D554 /* MPNativeAdRequestTargeting.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAdRequestTargeting.h; path = MoPubSDK/NativeAds/MPNativeAdRequestTargeting.h; sourceTree = ""; }; - 92C2AA94501AF61B1D829065E52BD370 /* FIRInstallationsSingleOperationPromiseCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstallationsSingleOperationPromiseCache.m; path = FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsSingleOperationPromiseCache.m; sourceTree = ""; }; - 92D1CD0919924578F3F6A7EDB23592ED /* GoogleDataTransportCCTSupport-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GoogleDataTransportCCTSupport-umbrella.h"; sourceTree = ""; }; - 92D89B7674DF3CC845A670D05FD59C57 /* FBSDKCrashShield.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKCrashShield.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Instrument/CrashReport/FBSDKCrashShield.h; sourceTree = ""; }; - 92ECF2597AD03253C6B2BA7DB605A4F3 /* FIRCLSDataCollectionArbiter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCLSDataCollectionArbiter.m; path = Crashlytics/Crashlytics/DataCollection/FIRCLSDataCollectionArbiter.m; sourceTree = ""; }; - 92FC128941C72598AEE19D298137FB17 /* GULSceneDelegateSwizzler_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULSceneDelegateSwizzler_Private.h; path = GoogleUtilities/SceneDelegateSwizzler/Internal/GULSceneDelegateSwizzler_Private.h; sourceTree = ""; }; - 92FC85A9B53F3B4792D7E3BE4DFF4E0C /* MPVASTCreative.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVASTCreative.m; path = MoPubSDK/Internal/VAST/MPVASTCreative.m; sourceTree = ""; }; - 930C9A46DA6715C6092597A1D1D952DF /* MoPub_AbstractAvidAdSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MoPub_AbstractAvidAdSession.h; path = MoPubSDK/Viewability/Avid/MoPub_AbstractAvidAdSession.h; sourceTree = ""; }; - 932049BBF0F8CA72D69361B2B0754296 /* MPNativeAdSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAdSource.h; path = MoPubSDK/NativeAds/MPNativeAdSource.h; sourceTree = ""; }; - 93789485924BEE4E63DE79D583C39B1F /* MPTableViewAdPlacerCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPTableViewAdPlacerCell.h; path = MoPubSDK/NativeAds/Internal/MPTableViewAdPlacerCell.h; sourceTree = ""; }; - 9396B8263A1F8670989ED2DAEF4ECFA8 /* MPNativeAdAdapter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAdAdapter.h; path = MoPubSDK/NativeAds/MPNativeAdAdapter.h; sourceTree = ""; }; - 93A82CC75292560D9B3BC49CCA5EB6AC /* FIRInteropEventNames.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInteropEventNames.h; path = Interop/Analytics/Public/FIRInteropEventNames.h; sourceTree = ""; }; - 93B3198F5C2C4103AB18153B0A491FA8 /* FBSDKAddressInferencer.mm */ = {isa = PBXFileReference; includeInIndex = 1; name = FBSDKAddressInferencer.mm; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/RestrictiveDataFilter/FBSDKAddressInferencer.mm; sourceTree = ""; }; - 93DE406DD843F31B8DA8190102E786BC /* FIRCLSSymbolResolver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCLSSymbolResolver.m; path = Crashlytics/Crashlytics/Models/FIRCLSSymbolResolver.m; sourceTree = ""; }; - 93ECBD3546A54D7CEBC0DDCFFE3F9757 /* FBSDKAppEventsUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppEventsUtility.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsUtility.m; sourceTree = ""; }; - 941962D43D8ED080A252FC2C1F4DCB16 /* FIRCLSDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSDefines.h; path = Crashlytics/Crashlytics/Helpers/FIRCLSDefines.h; sourceTree = ""; }; - 94198D47DB7153AAB614D2BD0AD361A2 /* MoPub+Utility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MoPub+Utility.h"; path = "MoPubSDK/Internal/Utility/Categories/MoPub+Utility.h"; sourceTree = ""; }; - 9439C1DD7ADF946FA0D821414DDE15C6 /* UIView+FBNativeAdViewTag.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+FBNativeAdViewTag.h"; path = "Static/FBAudienceNetwork.framework/Headers/UIView+FBNativeAdViewTag.h"; sourceTree = ""; }; - 943F5E0AB0E3CD68128746521DD14872 /* Pods-MAPS.ME-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-MAPS.ME-umbrella.h"; sourceTree = ""; }; - 945AA54D70279B1EC6C9244FF91F432D /* GoogleDataTransport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GoogleDataTransport.h; path = GoogleDataTransport/GDTCORLibrary/Public/GoogleDataTransport.h; sourceTree = ""; }; - 9495C0D407A5084BFB7866043ED2E21F /* MPAdConversionTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPAdConversionTracker.h; path = MoPubSDK/MPAdConversionTracker.h; sourceTree = ""; }; - 9510A54071DF69DE5B3A8D4740C5F81B /* MPNativePositionSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativePositionSource.h; path = MoPubSDK/NativeAds/Internal/MPNativePositionSource.h; sourceTree = ""; }; - 9521A511D91941CC83177D3FC07C9813 /* MPVideoPlayerFullScreenVASTAdOverlay.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVideoPlayerFullScreenVASTAdOverlay.h; path = MoPubSDK/Internal/VideoPlayer/MPVideoPlayerFullScreenVASTAdOverlay.h; sourceTree = ""; }; - 9561112F6366C81B44BEADC3A6CA6547 /* FBLPromise+Delay.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Delay.m"; path = "Sources/FBLPromises/FBLPromise+Delay.m"; sourceTree = ""; }; - 95776AB0AB81357DDEDC6184CB4A2289 /* FBSDKDeviceLoginCodeInfo+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKDeviceLoginCodeInfo+Internal.h"; path = "FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKDeviceLoginCodeInfo+Internal.h"; sourceTree = ""; }; - 957C1C498CCC51E03EA45A811EDE742C /* FIRCLSCompactUnwind_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSCompactUnwind_Private.h; path = Crashlytics/Crashlytics/Unwind/Compact/FIRCLSCompactUnwind_Private.h; sourceTree = ""; }; - 959859671F5E9D4A75FC5F7B2022CC68 /* FIRCLSThreadArrayOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCLSThreadArrayOperation.m; path = Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSThreadArrayOperation.m; sourceTree = ""; }; - 95A86DBD96A14204D2A0CB87FE398574 /* MPNativeAdConfigValues+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MPNativeAdConfigValues+Internal.h"; path = "MoPubSDK/NativeAds/Internal/MPNativeAdConfigValues+Internal.h"; sourceTree = ""; }; - 961C0A65DBF056A1E8230D17274B3D31 /* MPCollectionViewAdPlacerCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPCollectionViewAdPlacerCell.m; path = MoPubSDK/NativeAds/Internal/MPCollectionViewAdPlacerCell.m; sourceTree = ""; }; - 9625FE3146AFA08C097760D0E77F9C02 /* FBSDKURLSessionTask.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKURLSessionTask.m; path = FBSDKCoreKit/FBSDKCoreKit/Basics/Internal/FBSDKURLSessionTask.m; sourceTree = ""; }; - 966A875FE0F134C6EBBD87BF8594BAE5 /* FBSDKHybridAppEventsScriptMessageHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKHybridAppEventsScriptMessageHandler.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKHybridAppEventsScriptMessageHandler.h; sourceTree = ""; }; - 966F8BC88419BB77DC9D7C6776058334 /* FirebaseCrashlytics-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FirebaseCrashlytics-umbrella.h"; sourceTree = ""; }; - 9679C9F9B72ACAC412ACC20A9A2706AA /* FBSDKInternalUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKInternalUtility.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKInternalUtility.m; sourceTree = ""; }; - 9695326230BD56D6764C9F2AEAB55012 /* MPWebView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPWebView.h; path = MoPubSDK/Internal/HTML/MPWebView.h; sourceTree = ""; }; - 96D4A3F3A2232AB164F6559BF0FA721E /* MPActivityViewControllerHelper+TweetShare.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "MPActivityViewControllerHelper+TweetShare.m"; path = "MoPubSDK/Internal/Common/MPActivityViewControllerHelper+TweetShare.m"; sourceTree = ""; }; - 96E03CC38EBF2C35270FE9DBBF9CDF93 /* FBSDKAppLinkReturnToRefererController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppLinkReturnToRefererController.m; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkReturnToRefererController.m; sourceTree = ""; }; - 96E758A6B074747019C2EFBC470CC4B3 /* MPPlayBtn.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = MPPlayBtn.png; path = MoPubSDK/Resources/MPPlayBtn.png; sourceTree = ""; }; - 96F93CB0D0E231E2B13989B1EB33113A /* MPNativeAdConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPNativeAdConstants.m; path = MoPubSDK/NativeAds/MPNativeAdConstants.m; sourceTree = ""; }; - 97271906195BB429DF95B80787A2E219 /* MPNativeAdUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAdUtils.h; path = MoPubSDK/NativeAds/Internal/MPNativeAdUtils.h; sourceTree = ""; }; - 9751A58C32A73061716D02E6A420DD63 /* FBNativeAdViewAttributes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBNativeAdViewAttributes.h; path = Static/FBAudienceNetwork.framework/Headers/FBNativeAdViewAttributes.h; sourceTree = ""; }; - 97533D5F75D6A6A71AEF127CEF57F6D6 /* MPNativeAdSourceQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAdSourceQueue.h; path = MoPubSDK/NativeAds/Internal/MPNativeAdSourceQueue.h; sourceTree = ""; }; - 9817D2EB3DE93156C745A7972CE7F294 /* GDTCORLifecycle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORLifecycle.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCORLifecycle.h; sourceTree = ""; }; - 981CC8CE87D0133EABE3AB0844A65231 /* FBSDKLoginKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLoginKit.h; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginKit.h; sourceTree = ""; }; - 9872EA1E85D6A9050EA26CABEB488BEF /* FBSDKIcon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKIcon.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKIcon.h; sourceTree = ""; }; - 98758B4440DACEE176EBB569561C60A3 /* GULSwizzler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULSwizzler.h; path = GoogleUtilities/MethodSwizzler/Private/GULSwizzler.h; sourceTree = ""; }; - 98914998F7260C49A1D2A080F55D2068 /* MPStaticNativeAdRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPStaticNativeAdRenderer.h; path = MoPubSDK/NativeAds/MPStaticNativeAdRenderer.h; sourceTree = ""; }; - 989DF90CF44F956593915A594C4902AF /* MPRewardedVideoAdManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPRewardedVideoAdManager.m; path = MoPubSDK/RewardedVideo/Internal/MPRewardedVideoAdManager.m; sourceTree = ""; }; - 98D822AC1249C4034A49ADD0F5668D2E /* MPInterstitialViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPInterstitialViewController.h; path = MoPubSDK/Internal/Interstitials/MPInterstitialViewController.h; sourceTree = ""; }; - 9945E799861FBFB5527CD163653D0FF0 /* FIRCLSContext.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCLSContext.m; path = Crashlytics/Crashlytics/Components/FIRCLSContext.m; sourceTree = ""; }; - 994DEFBADD1332AA70EA083E89DF533E /* FIRExceptionModel_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRExceptionModel_Private.h; path = Crashlytics/Crashlytics/Private/FIRExceptionModel_Private.h; sourceTree = ""; }; - 99BBE305E5668F92A7DC4A3E893C7F2F /* MPAdWebViewAgent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPAdWebViewAgent.m; path = MoPubSDK/Internal/HTML/MPAdWebViewAgent.m; sourceTree = ""; }; - 99DCB3220D0A15AB502E90628AACA5ED /* FBSDKMeasurementEventListener.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKMeasurementEventListener.m; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/Internal/FBSDKMeasurementEventListener.m; sourceTree = ""; }; - 99FA0C33F8FD705C8505C27693C46AE1 /* MPReachabilityManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPReachabilityManager.h; path = MoPubSDK/Internal/MPReachabilityManager.h; sourceTree = ""; }; - 9A0EE4D0B856820E1C49CF676DAEFCE0 /* FBSDKAppEvents.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAppEvents.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/FBSDKAppEvents.m; sourceTree = ""; }; - 9A2445CDEEDB3F456CF8A86C16411788 /* AppsFlyerFramework.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AppsFlyerFramework.debug.xcconfig; sourceTree = ""; }; - 9AAD6432F9CBA054F5118361E3C552BC /* Pods-MAPS.ME-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-MAPS.ME-dummy.m"; sourceTree = ""; }; - 9ACF948463B44B9CBCD15839A9C71A7B /* GULReachabilityMessageCode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULReachabilityMessageCode.h; path = GoogleUtilities/Reachability/Private/GULReachabilityMessageCode.h; sourceTree = ""; }; - 9AD06EB7CED79269EC3F40892B1D7811 /* FIRCLSApplication.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSApplication.h; path = Crashlytics/Crashlytics/Components/FIRCLSApplication.h; sourceTree = ""; }; - 9B90734FD1FC7BA8DABFE1C2150BBB17 /* MPImpressionTrackedNotification.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPImpressionTrackedNotification.h; path = MoPubSDK/MPImpressionTrackedNotification.h; sourceTree = ""; }; - 9B9E924D1C60C384D9FA932B85AEA5BC /* GULKeychainUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULKeychainUtils.m; path = GoogleUtilities/Environment/SecureStorage/GULKeychainUtils.m; sourceTree = ""; }; - 9BB2BE9926BB510B58ED86AC35DA702A /* MPInterstitialCustomEventDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPInterstitialCustomEventDelegate.h; path = MoPubSDK/MPInterstitialCustomEventDelegate.h; sourceTree = ""; }; - 9C284741E25807C99F2D65D97A6C0086 /* GULLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULLogger.h; path = GoogleUtilities/Logger/Private/GULLogger.h; sourceTree = ""; }; - 9C34A935350EEF589E0CB5317D5E8D7A /* FIRCLSSignal.c */ = {isa = PBXFileReference; includeInIndex = 1; name = FIRCLSSignal.c; path = Crashlytics/Crashlytics/Handlers/FIRCLSSignal.c; sourceTree = ""; }; - 9C84C2B5A4FDC3023F6F0D5ED07FAD44 /* MPMediationSettingsProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPMediationSettingsProtocol.h; path = MoPubSDK/MPMediationSettingsProtocol.h; sourceTree = ""; }; - 9D4325D5B5B5EE56512FA79B4BED8DE5 /* FBLPromise+Testing.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Testing.h"; path = "Sources/FBLPromises/include/FBLPromise+Testing.h"; sourceTree = ""; }; - 9D66005EED1D3EE319D3BCA7B2FB3F84 /* NSMutableArray+MPAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSMutableArray+MPAdditions.h"; path = "MoPubSDK/Internal/Utility/Categories/NSMutableArray+MPAdditions.h"; sourceTree = ""; }; + 0360EACFE90690434ECAC82F752F684B /* Pods-MAPS.ME.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MAPS.ME.release.xcconfig"; sourceTree = ""; }; + 0C8CDF10789D2ACF955BA20C875EEFB6 /* Pods-MAPS.ME-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-MAPS.ME-acknowledgements.markdown"; sourceTree = ""; }; + 1FEF97F4F8F5EAA30727A05FD0686A7B /* Pods-MAPS.ME-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-MAPS.ME-umbrella.h"; sourceTree = ""; }; + 48B724B519C3302CE74FB271653720A1 /* Pods-MAPS.ME-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-MAPS.ME-Info.plist"; sourceTree = ""; }; + 62FDDDBC365B77C2BBD73DAA0CB8CE60 /* Pods-MAPS.ME-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-MAPS.ME-acknowledgements.plist"; sourceTree = ""; }; + 73010CC983E3809BECEE5348DA1BB8C6 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + 7ECD07FDE7142046FDC6F59C008BB3E3 /* Pods-MAPS.ME.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MAPS.ME.debug.xcconfig"; sourceTree = ""; }; + 9A3F53459150A78B1495133DC94E9C56 /* Pods-MAPS.ME.production full.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MAPS.ME.production full.xcconfig"; sourceTree = ""; }; 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 9DA04880496478F371945535BC7E4748 /* FBSDKEventBindingManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKEventBindingManager.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKEventBindingManager.m; sourceTree = ""; }; - 9DD0DE202DCBBCA9F0AAAEE9712F3C89 /* FIRLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRLogger.h; path = FirebaseCore/Sources/Private/FIRLogger.h; sourceTree = ""; }; - 9DEE24157113083579B5D107C4C095E9 /* MoPub_ExternalAvidAdSessionContext.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MoPub_ExternalAvidAdSessionContext.h; path = MoPubSDK/Viewability/Avid/MoPub_ExternalAvidAdSessionContext.h; sourceTree = ""; }; - 9E06BD770FDEF5D528094D098622D912 /* FBSDKWebDialog.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKWebDialog.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialog.h; sourceTree = ""; }; - 9E3BB2863E3B2FBDCDC4718F0179A2C0 /* FBSDKAppEvents.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppEvents.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/FBSDKAppEvents.h; sourceTree = ""; }; - 9E6732319F91DEFF1EF5560E5E29436D /* MPNativeCustomEventDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeCustomEventDelegate.h; path = MoPubSDK/NativeAds/MPNativeCustomEventDelegate.h; sourceTree = ""; }; - 9E6C3B7537E5214A269D7C64A399804F /* MPSessionTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPSessionTracker.m; path = MoPubSDK/Internal/Utility/MPSessionTracker.m; sourceTree = ""; }; - 9E9BC0324B44256F9848043373DA73BD /* GDTCCTNanopbHelpers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCCTNanopbHelpers.h; path = GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTNanopbHelpers.h; sourceTree = ""; }; - 9EA27C27E8BE6A319F46EEFDC78434B0 /* FBSDKAppLinkResolving.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppLinkResolving.h; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkResolving.h; sourceTree = ""; }; - 9EBA8DA24D4260839318D78EC9359684 /* FIRCLSDwarfExpressionMachine.c */ = {isa = PBXFileReference; includeInIndex = 1; name = FIRCLSDwarfExpressionMachine.c; path = Crashlytics/Crashlytics/Unwind/Dwarf/FIRCLSDwarfExpressionMachine.c; sourceTree = ""; }; - 9EF90B0EE47DA618D7587ABDBEEE4CF2 /* MPMoPubAd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPMoPubAd.h; path = MoPubSDK/MPMoPubAd.h; sourceTree = ""; }; - 9F6213C0BF36AF447DD774B75A86951E /* MPRewardedVideoAdapter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPRewardedVideoAdapter.h; path = MoPubSDK/RewardedVideo/Internal/MPRewardedVideoAdapter.h; sourceTree = ""; }; - 9F8C134209ECFEE44DD30B54FA918FB1 /* FirebaseCrashlytics.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseCrashlytics.debug.xcconfig; sourceTree = ""; }; - 9F97B5802399FF5E57610E5566DBEEA6 /* FBInterstitialAd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBInterstitialAd.h; path = Static/FBAudienceNetwork.framework/Headers/FBInterstitialAd.h; sourceTree = ""; }; - 9FCFBF87BB650146BFAA6933F391DBBD /* FBSDKLoginKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FBSDKLoginKit-umbrella.h"; sourceTree = ""; }; - 9FF4BB5C84B9B9985656D28B7E279B43 /* MPBaseNativeAdRenderer+Internal.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "MPBaseNativeAdRenderer+Internal.m"; path = "MoPubSDK/NativeAds/Internal/MPBaseNativeAdRenderer+Internal.m"; sourceTree = ""; }; - A00AA76A58C027D6A9D1C2E8AD3D4F63 /* MPInterstitialAdController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPInterstitialAdController.h; path = MoPubSDK/MPInterstitialAdController.h; sourceTree = ""; }; - A03CED05C2FD88B8A24AD454A0FDCE07 /* GDTCCTPrioritizer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCCTPrioritizer.h; path = GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTPrioritizer.h; sourceTree = ""; }; - A048F7703B2EC24450F7C922DEE20108 /* FBSDKAccessTokenCaching.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAccessTokenCaching.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCaching.h; sourceTree = ""; }; - A06AB318A571F73BA73F7820EEA742FC /* FIRCrashlytics.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCrashlytics.m; path = Crashlytics/Crashlytics/FIRCrashlytics.m; sourceTree = ""; }; - A19365D49BF463A7E1597172C6E938B7 /* FBSDKModelUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKModelUtility.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/ML/FBSDKModelUtility.m; sourceTree = ""; }; - A1954E9E9F46D284C4446641C06D4670 /* FIROptions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIROptions.h; path = FirebaseCore/Sources/Public/FIROptions.h; sourceTree = ""; }; - A1D8D7A70772781F2962BAFEF6DE5BDB /* GDTCCTCompressionHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCCTCompressionHelper.m; path = GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTCompressionHelper.m; sourceTree = ""; }; - A1DDD49160D1C0592C9F38CF9D31F269 /* MPConsentDialogViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPConsentDialogViewController.h; path = MoPubSDK/Internal/MPConsentDialogViewController.h; sourceTree = ""; }; - A21BD2E784522D6515FFA0C71641B86F /* FBSDKBridgeAPIProtocolNativeV1.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBridgeAPIProtocolNativeV1.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolNativeV1.h; sourceTree = ""; }; - A254DF1F970B175B83F41E07E7B94B8E /* FIRCLSHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSHandler.h; path = Crashlytics/Crashlytics/Handlers/FIRCLSHandler.h; sourceTree = ""; }; - A256A56841F513C5029739527A8AFFF1 /* FIRCLSApplicationIdentifierModel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSApplicationIdentifierModel.h; path = Crashlytics/Crashlytics/Settings/Models/FIRCLSApplicationIdentifierModel.h; sourceTree = ""; }; - A2C33392B6A8C912027A529372226A2B /* MPAdDestinationDisplayAgent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPAdDestinationDisplayAgent.h; path = MoPubSDK/Internal/Common/MPAdDestinationDisplayAgent.h; sourceTree = ""; }; - A32789EBF7B8C2B831148E699229B60D /* MPNativeCustomEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPNativeCustomEvent.m; path = MoPubSDK/NativeAds/MPNativeCustomEvent.m; sourceTree = ""; }; - A335D2C7E61D1461D4DB838170CD9FA9 /* FBSDKAppEventsDeviceInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppEventsDeviceInfo.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKAppEventsDeviceInfo.h; sourceTree = ""; }; - A38678336EC0EBD6C70F9FAD95CBF8CF /* UIColor+MPAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIColor+MPAdditions.m"; path = "MoPubSDK/Internal/Utility/Categories/UIColor+MPAdditions.m"; sourceTree = ""; }; - A3C882A580DCCCEB28AA2ADD5A6A92C4 /* MRCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MRCommand.m; path = MoPubSDK/Internal/MRAID/MRCommand.m; sourceTree = ""; }; - A3CF869182B5F38124D11E4DB27CCFE3 /* FBLPromise+Async.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Async.m"; path = "Sources/FBLPromises/FBLPromise+Async.m"; sourceTree = ""; }; - A3DEE8684E54692925CFF9649B4B9AA7 /* FBSDKInternalUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKInternalUtility.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKInternalUtility.h; sourceTree = ""; }; - A4359A28D50110A439610CD7606A5A1D /* MPAdServerCommunicator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPAdServerCommunicator.m; path = MoPubSDK/Internal/Common/MPAdServerCommunicator.m; sourceTree = ""; }; - A45D5D9150FF9C5C0B4A63B72CA51415 /* FBSDKLoginButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLoginButton.m; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginButton.m; sourceTree = ""; }; A50D488397CF80FE035346303494968D /* Pods_MAPS_ME.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_MAPS_ME.framework; path = "Pods-MAPS.ME.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - A514772615FC436FC350277555010B19 /* FBSDKProfile.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKProfile.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKProfile.m; sourceTree = ""; }; - A52F4F9D59A0C7A0ED4F5AFFECB2C689 /* MPVASTStringUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVASTStringUtilities.m; path = MoPubSDK/Internal/VAST/MPVASTStringUtilities.m; sourceTree = ""; }; - A55461F3AB13BD236ABDC799453514B9 /* pb_encode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pb_encode.h; sourceTree = ""; }; - A57812B00DC25CFF7E42EDC259870378 /* FIRCLSReportManager_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSReportManager_Private.h; path = Crashlytics/Crashlytics/Controllers/FIRCLSReportManager_Private.h; sourceTree = ""; }; - A5A1E1AF6AC62B515EF26D84B9EFDE88 /* FBSDKGraphRequestDataAttachment.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKGraphRequestDataAttachment.m; path = FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphRequestDataAttachment.m; sourceTree = ""; }; - A5D57790DDAB444182A769246E82F50A /* pb_common.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pb_common.c; sourceTree = ""; }; - A60E9CEBF4FBB5B9DC8BCA2F72ABA9CE /* FBLPromiseError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBLPromiseError.h; path = Sources/FBLPromises/include/FBLPromiseError.h; sourceTree = ""; }; - A6AA483A3155F0243E97660634B8D8D2 /* FIRCLSUnwind_x86.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSUnwind_x86.h; path = Crashlytics/Crashlytics/Unwind/FIRCLSUnwind_x86.h; sourceTree = ""; }; - A6E962762F6A88B83E5679C3AC3ABA38 /* FIRCLSFileManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSFileManager.h; path = Crashlytics/Crashlytics/Models/FIRCLSFileManager.h; sourceTree = ""; }; - A6F6B1D66145F0029417A5AEEF792460 /* MPNativeAdConfigValues.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPNativeAdConfigValues.m; path = MoPubSDK/NativeAds/Internal/MPNativeAdConfigValues.m; sourceTree = ""; }; - A768C6F4ECAA71C67BE046B400DF33D7 /* MPNativeCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPNativeCache.m; path = MoPubSDK/Internal/Utility/MPNativeCache.m; sourceTree = ""; }; - A7B6959A2B61031F6035C416937E7160 /* MPImageDownloadQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPImageDownloadQueue.h; path = MoPubSDK/Internal/Utility/MPImageDownloadQueue.h; sourceTree = ""; }; - A7CA15EEAA0A4BF7A488B9CE88DF4E29 /* MPPrivateBannerCustomEventDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPPrivateBannerCustomEventDelegate.h; path = MoPubSDK/Internal/Banners/MPPrivateBannerCustomEventDelegate.h; sourceTree = ""; }; - A7D3EBF79A9194EA89A448F8CA040A4A /* FBLPromise+Do.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Do.m"; path = "Sources/FBLPromises/FBLPromise+Do.m"; sourceTree = ""; }; - A8378EAC3C6E8BE535B47B52F8C26B32 /* MPStreamAdPlacer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPStreamAdPlacer.h; path = MoPubSDK/NativeAds/MPStreamAdPlacer.h; sourceTree = ""; }; - A853021E473786C032DE110C8235785A /* FacebookNativeAdRenderer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FacebookNativeAdRenderer.m; path = FacebookAudienceNetwork/FacebookNativeAdRenderer.m; sourceTree = ""; }; - A85B4EF03377E5041F6806362957EE8D /* FIRCLSURLSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSURLSession.h; path = Crashlytics/Crashlytics/FIRCLSURLSession/FIRCLSURLSession.h; sourceTree = ""; }; - A86651C6B06838313991106BF034285D /* MPImageLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPImageLoader.h; path = MoPubSDK/Internal/Utility/MPImageLoader.h; sourceTree = ""; }; - A8A9FF848D3A4A0CAEF27FC84F788986 /* FBSDKDeviceDialogView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKDeviceDialogView.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Device/FBSDKDeviceDialogView.h; sourceTree = ""; }; - A8F1D03EC2B0CBEC4CB64D5960B6DB6C /* GoogleUtilities-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GoogleUtilities-umbrella.h"; sourceTree = ""; }; - A917DA6B039C44D3E23A75C7E914F622 /* MPInterstitialCustomEventAdapter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPInterstitialCustomEventAdapter.m; path = MoPubSDK/Internal/Interstitials/MPInterstitialCustomEventAdapter.m; sourceTree = ""; }; - A9652E30535656104479292E013A06EB /* FirebaseInstallations.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseInstallations.release.xcconfig; sourceTree = ""; }; - A98D29973AB061AB31F4F0D3B2018853 /* MPVideoPlayerView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVideoPlayerView.m; path = MoPubSDK/Internal/VideoPlayer/MPVideoPlayerView.m; sourceTree = ""; }; - A9D57E5C3A83B308428F74F1D92DB74D /* FBSDKLoginManagerLoginResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLoginManagerLoginResult.h; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginManagerLoginResult.h; sourceTree = ""; }; - A9E3FD759E40E665FBBE94582526D5AC /* MPVASTCompanionAdView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVASTCompanionAdView.h; path = MoPubSDK/Internal/VideoPlayer/MPVASTCompanionAdView.h; sourceTree = ""; }; - A9EB08FDFE9939C7BEE62DEA08229240 /* GDTCCTUploader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCCTUploader.h; path = GoogleDataTransportCCTSupport/GDTCCTLibrary/Private/GDTCCTUploader.h; sourceTree = ""; }; - AA0152FB55890D998513BDB0F01CD7AC /* FBAdDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBAdDefines.h; path = Static/FBAudienceNetwork.framework/Headers/FBAdDefines.h; sourceTree = ""; }; - AA01C3237A0F93559ADEEF2033DD6667 /* FIRCLSNetworkClient.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCLSNetworkClient.m; path = Crashlytics/Crashlytics/Controllers/FIRCLSNetworkClient.m; sourceTree = ""; }; - AA10F07D4170F09A2BF08F6BF7796658 /* FIRCLSOnboardingOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSOnboardingOperation.h; path = Crashlytics/Crashlytics/Settings/Operations/FIRCLSOnboardingOperation.h; sourceTree = ""; }; - AAE64F2720857AB36590DB810A3BE3E0 /* MPViewabilityAdapterMoat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPViewabilityAdapterMoat.m; path = MoPubSDK/Viewability/MOAT/MPViewabilityAdapterMoat.m; sourceTree = ""; }; - AB6990BD5609E933344C50AA1B1A1323 /* GoogleDataTransportCCTSupport.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = GoogleDataTransportCCTSupport.modulemap; sourceTree = ""; }; - ABBC5B08BCC854BD1E1B1C5D37C8E29A /* FIRCLSSerializeSymbolicatedFramesOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSSerializeSymbolicatedFramesOperation.h; path = Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSSerializeSymbolicatedFramesOperation.h; sourceTree = ""; }; - ABED847911F57D0BCB5750A6CCCF77EB /* Pushwoosh.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Pushwoosh.debug.xcconfig; sourceTree = ""; }; - AC3548AE7B5BF33A31AB4F84CF1630E8 /* FBSDKInstrumentManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKInstrumentManager.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Instrument/FBSDKInstrumentManager.m; sourceTree = ""; }; - AC65290E890725D78B78F6FC0CCD2871 /* MPHTMLInterstitialCustomEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPHTMLInterstitialCustomEvent.h; path = MoPubSDK/Internal/HTML/MPHTMLInterstitialCustomEvent.h; sourceTree = ""; }; - AC8AA52C4A392EF0B8462CB0C7712E8A /* FBSDKSwizzler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKSwizzler.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSwizzler.m; sourceTree = ""; }; - ACDADF91BDB29FA2C5AAF1B6A8DF653A /* MPBannerCustomEvent+Internal.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "MPBannerCustomEvent+Internal.m"; path = "MoPubSDK/Internal/Banners/MPBannerCustomEvent+Internal.m"; sourceTree = ""; }; - AD2254ED5E1056D4AC2BF9A9F57A51B6 /* Pods-MAPS.ME-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-MAPS.ME-acknowledgements.markdown"; sourceTree = ""; }; - AD36D3549F56921BAB6906898EE9EC02 /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/CoreLocation.framework; sourceTree = DEVELOPER_DIR; }; - AD3D91845CFBF7641C53E876757A2A18 /* FIRInstallationsStatus.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstallationsStatus.h; path = FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsStatus.h; sourceTree = ""; }; - AD4E5601CB7CBE9FE1E793A00E842797 /* FBLPromise+Any.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Any.h"; path = "Sources/FBLPromises/include/FBLPromise+Any.h"; sourceTree = ""; }; - AD8822A74DC906E65EBD794BA999AB1E /* MoPub-FacebookAudienceNetwork-Adapters.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "MoPub-FacebookAudienceNetwork-Adapters.modulemap"; sourceTree = ""; }; - ADAA7307CD9D86E713C6B772ACF1AE53 /* MPMediationManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPMediationManager.h; path = MoPubSDK/Internal/MPMediationManager.h; sourceTree = ""; }; - ADC4A2B157B2A75E74E84E0A996C0862 /* FBSDKAudioResourceLoader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAudioResourceLoader.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKAudioResourceLoader.m; sourceTree = ""; }; - ADCF01B4014B785E6A268E02A4C0F261 /* FIRExceptionModel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRExceptionModel.h; path = Crashlytics/Crashlytics/Public/FIRExceptionModel.h; sourceTree = ""; }; - ADD0E305BAAF57807F5945F54FC6DC5C /* MPVASTCreative.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVASTCreative.h; path = MoPubSDK/Internal/VAST/MPVASTCreative.h; sourceTree = ""; }; - ADD7DCF98C9AA899E012ACF4CB5AFEBB /* MPVASTMacroProcessor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVASTMacroProcessor.m; path = MoPubSDK/Internal/VAST/MPVASTMacroProcessor.m; sourceTree = ""; }; - AE4F132210F80370EC912C901003747A /* FBSDKContainerViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKContainerViewController.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKContainerViewController.h; sourceTree = ""; }; - AE539251097B63D95F4B01C077E1E161 /* GDTCORPrioritizer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORPrioritizer.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCORPrioritizer.h; sourceTree = ""; }; - AE8FE22CD866DBFE9D17DDB260181310 /* FIRCLSThreadState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSThreadState.h; path = Crashlytics/Crashlytics/Helpers/FIRCLSThreadState.h; sourceTree = ""; }; - AE9D1CCBC8BDA05B12165DA80C131740 /* FBSDKURLSession.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKURLSession.m; path = FBSDKCoreKit/FBSDKCoreKit/Basics/Internal/FBSDKURLSession.m; sourceTree = ""; }; - AF0DB818422D9C592C4F4C828C693B83 /* FBSDKGraphErrorRecoveryProcessor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKGraphErrorRecoveryProcessor.h; path = FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphErrorRecoveryProcessor.h; sourceTree = ""; }; - AF43222B6CDE64FF9412AC3E8668BE78 /* FirebaseCrashlytics.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseCrashlytics.release.xcconfig; sourceTree = ""; }; - AF9897561C3EFD3DA09DD96440FB7822 /* MPRewardedVideoError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPRewardedVideoError.m; path = MoPubSDK/RewardedVideo/MPRewardedVideoError.m; sourceTree = ""; }; - AFC0EDB3E7704218D9FF10BE3B17A29B /* MPVASTStringUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVASTStringUtilities.h; path = MoPubSDK/Internal/VAST/MPVASTStringUtilities.h; sourceTree = ""; }; - B00600852DB9D12541E4BB94785E939E /* MOPUBNativeVideoAdAdapter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MOPUBNativeVideoAdAdapter.m; path = MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoAdAdapter.m; sourceTree = ""; }; - B05757CB550DB88CD3A2586C66D30485 /* FIRCLSDataCollectionToken.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSDataCollectionToken.h; path = Crashlytics/Crashlytics/DataCollection/FIRCLSDataCollectionToken.h; sourceTree = ""; }; - B08C7788E00490B31D94946ABF8D45D1 /* FIRHeartbeatInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRHeartbeatInfo.h; path = FirebaseCore/Sources/Private/FIRHeartbeatInfo.h; sourceTree = ""; }; - B0C8D99CB0A2CB882677D2F6D49A2A97 /* GoogleAppMeasurement.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GoogleAppMeasurement.release.xcconfig; sourceTree = ""; }; - B0E634ADBC115882A4BEC536C2B70EE9 /* GDTCORUploadPackage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORUploadPackage.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORUploadPackage.m; sourceTree = ""; }; - B10E383EAC4BF17F290B67B84916643D /* FIRCLSNetworkResponseHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSNetworkResponseHandler.h; path = Crashlytics/Shared/FIRCLSNetworking/FIRCLSNetworkResponseHandler.h; sourceTree = ""; }; - B10E88F1F8E125B124CB17B68D57D921 /* MPDAAIcon@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MPDAAIcon@2x.png"; path = "MoPubSDK/Resources/MPDAAIcon@2x.png"; sourceTree = ""; }; - B185A7CAFAE029A2FAA33A84A90D99A2 /* GULKeychainStorage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULKeychainStorage.h; path = GoogleUtilities/Environment/Private/GULKeychainStorage.h; sourceTree = ""; }; - B1C5AC8EEAD861CC78B42E1F7D69A288 /* GDTCORTransformer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORTransformer.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORTransformer.m; sourceTree = ""; }; - B1C83E1CC6209D4EA4AF9E99B52CEED2 /* FIRDiagnosticsData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRDiagnosticsData.m; path = FirebaseCore/Sources/FIRDiagnosticsData.m; sourceTree = ""; }; - B1CDFFDB9885F05026F30FC74314D7A2 /* NSString+MPConsentStatus.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+MPConsentStatus.h"; path = "MoPubSDK/Internal/Utility/Categories/NSString+MPConsentStatus.h"; sourceTree = ""; }; - B1FB82AE1C58472D03C1026460955A64 /* MPMoPubAdPlacer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPMoPubAdPlacer.h; path = MoPubSDK/MPMoPubAdPlacer.h; sourceTree = ""; }; - B1FF2D47493DFA173BC3862D49D9EC29 /* FBSDKBridgeAPIProtocolType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBridgeAPIProtocolType.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIProtocolType.h; sourceTree = ""; }; - B2453CAD660824D748EB15B9F6953E75 /* MPNativeAd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAd.h; path = MoPubSDK/NativeAds/MPNativeAd.h; sourceTree = ""; }; - B26B809E9950E05E0E142F73AD56F2EE /* FIRInstallationsSingleOperationPromiseCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstallationsSingleOperationPromiseCache.h; path = FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsSingleOperationPromiseCache.h; sourceTree = ""; }; - B2D821630EF1A5C1F1B6F0040A4D37EA /* MPRateLimitConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPRateLimitConfiguration.h; path = MoPubSDK/Internal/MPRateLimitConfiguration.h; sourceTree = ""; }; - B2ECC7E20300D7768709576B691E72EE /* GDTCORAssert.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORAssert.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCORAssert.h; sourceTree = ""; }; - B2F2952698D05D04A1ED7D7AE022971C /* Flurry-iOS-SDK.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Flurry-iOS-SDK.modulemap"; sourceTree = ""; }; - B31D84E24524DF5682A267BFE7DA628D /* FIRCLSDownloadAndSaveSettingsOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCLSDownloadAndSaveSettingsOperation.m; path = Crashlytics/Crashlytics/Settings/Operations/FIRCLSDownloadAndSaveSettingsOperation.m; sourceTree = ""; }; - B3928D8C6DA55C8D5C580ACE10C351BA /* cct.nanopb.c */ = {isa = PBXFileReference; includeInIndex = 1; name = cct.nanopb.c; path = GoogleDataTransportCCTSupport/GDTCCTLibrary/Protogen/nanopb/cct.nanopb.c; sourceTree = ""; }; - B3DFC0FDC86EF24DB6AC069D767F1DC3 /* GoogleUtilities.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = GoogleUtilities.modulemap; sourceTree = ""; }; - B43874C6CBB50E7134FBEC24BABFE14F /* GoogleUtilities.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = GoogleUtilities.framework; path = GoogleUtilities.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - B4547C009592E5CCBBF54E6B4EF89A61 /* FBSDKCrashObserver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKCrashObserver.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Instrument/CrashReport/FBSDKCrashObserver.h; sourceTree = ""; }; - B45A4460D252BA2CC8BE0592A309E75E /* MPBaseInterstitialAdapter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPBaseInterstitialAdapter.h; path = MoPubSDK/Internal/Interstitials/MPBaseInterstitialAdapter.h; sourceTree = ""; }; - B4AF9B5571F3247AB21D62F4859CB9CA /* FIRInstallationsVersion.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstallationsVersion.m; path = FirebaseInstallations/Source/Library/FIRInstallationsVersion.m; sourceTree = ""; }; - B4DD97F5BFAB7D53880276803E555CCB /* FBSDKTimeSpentData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKTimeSpentData.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKTimeSpentData.m; sourceTree = ""; }; - B4DDA95AFA0A4A577D8B123C930E56E3 /* MPLogManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPLogManager.h; path = MoPubSDK/Logging/Internal/MPLogManager.h; sourceTree = ""; }; - B4DFD201F459DF4CAFEFCA0E68626FC6 /* FIRVersion.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRVersion.m; path = FirebaseCore/Sources/FIRVersion.m; sourceTree = ""; }; - B50DDFF456FD67EF4FF30BCC9EFDA92B /* FBSDKCodelessPathComponent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKCodelessPathComponent.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessPathComponent.m; sourceTree = ""; }; - B528ECD452EC3E2F8648257D69C44A33 /* FBSDKUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKUtility.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKUtility.h; sourceTree = ""; }; - B55C27E0004746FEE9DAD32ECBDB7592 /* FIRAppAssociationRegistration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAppAssociationRegistration.m; path = FirebaseCore/Sources/FIRAppAssociationRegistration.m; sourceTree = ""; }; - B55DFBA3F5028DE3FBC7BF886E768199 /* FBSDKGraphRequestBody.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKGraphRequestBody.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestBody.h; sourceTree = ""; }; - B57053868DD7EAB72E0E75813CCDC629 /* FBSDKBridgeAPIProtocolNativeV1.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKBridgeAPIProtocolNativeV1.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolNativeV1.m; sourceTree = ""; }; - B5898D4EE27C06392B0F932E7E819FDC /* GDTCORReachability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORReachability.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCORReachability.h; sourceTree = ""; }; - B58AB6FD4EB1F31BC2C06FC63B02F33F /* FIRCLSAsyncOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCLSAsyncOperation.m; path = Crashlytics/Crashlytics/Operations/FIRCLSAsyncOperation.m; sourceTree = ""; }; - B58C3ECD0C853A41A5E5577B6E57B97E /* MPMRAIDInterstitialViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPMRAIDInterstitialViewController.h; path = MoPubSDK/Internal/MRAID/MPMRAIDInterstitialViewController.h; sourceTree = ""; }; - B59D5157E18EBD43A5BBD531223E7469 /* MOPUBFullscreenPlayerViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MOPUBFullscreenPlayerViewController.m; path = MoPubSDK/NativeVideo/Internal/MOPUBFullscreenPlayerViewController.m; sourceTree = ""; }; - B5F7F774F307557AD2D36DC8260C8DC0 /* GULKeychainStorage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULKeychainStorage.m; path = GoogleUtilities/Environment/SecureStorage/GULKeychainStorage.m; sourceTree = ""; }; - B6081912F1B42D13206287414410CA92 /* MPPrivateInterstitialCustomEventDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPPrivateInterstitialCustomEventDelegate.h; path = MoPubSDK/Internal/Interstitials/MPPrivateInterstitialCustomEventDelegate.h; sourceTree = ""; }; - B631E40F190120BC8334CF9AEF1AD8C5 /* FIRCLSURLBuilder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSURLBuilder.h; path = Crashlytics/Shared/FIRCLSNetworking/FIRCLSURLBuilder.h; sourceTree = ""; }; - B63B211CE89CAA85880C54C23FBA980A /* MPNativeAdError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAdError.h; path = MoPubSDK/Internal/MPNativeAdError.h; sourceTree = ""; }; - B660581BA47FF0267E1C3FD26DB8B666 /* FIRCLSUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSUtility.h; path = Crashlytics/Crashlytics/Helpers/FIRCLSUtility.h; sourceTree = ""; }; - B6BFE2BEEAB345CC2A86394E363C10F3 /* FBSDKAudioResourceLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAudioResourceLoader.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKAudioResourceLoader.h; sourceTree = ""; }; - B6EEA83F1BE9333EC15AFF3BA55BDD4B /* Pods-MAPS.ME-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-MAPS.ME-Info.plist"; sourceTree = ""; }; - B6FF811D56B4E006CA31BA3A0AEFEA54 /* FIRCLSExecutionIdentifierModel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCLSExecutionIdentifierModel.m; path = Crashlytics/Crashlytics/Models/FIRCLSExecutionIdentifierModel.m; sourceTree = ""; }; - B736FD012871F2E9C92ADA68598F421D /* FBSDKLoginTooltipView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLoginTooltipView.h; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginTooltipView.h; sourceTree = ""; }; - B747649FBE325722E133571D1C955ED7 /* FBSDKRestrictiveDataFilterManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKRestrictiveDataFilterManager.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/RestrictiveDataFilter/FBSDKRestrictiveDataFilterManager.h; sourceTree = ""; }; - B79F8041DA08D90AB6D4D42E94532E68 /* FBSDKSettings.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKSettings.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKSettings.h; sourceTree = ""; }; - B7B2D4ACF49E72004914698667994725 /* MPBaseAdapterConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPBaseAdapterConfiguration.h; path = MoPubSDK/MPBaseAdapterConfiguration.h; sourceTree = ""; }; - B85423919F546189D5E6A7AB2542C4CE /* FBSDKURL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKURL.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKURL.h; sourceTree = ""; }; - B8C1C01874F15B848BBD56EDEB351255 /* MOPUBReplayView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MOPUBReplayView.h; path = MoPubSDK/NativeVideo/Internal/MOPUBReplayView.h; sourceTree = ""; }; - B8EF546E8BCE2DC36157D7E93DE991A8 /* FIRComponentContainer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRComponentContainer.h; path = FirebaseCore/Sources/Private/FIRComponentContainer.h; sourceTree = ""; }; - B8F7CE1222CBE0D8992328283E5D8D09 /* FIRCLSAllocate.c */ = {isa = PBXFileReference; includeInIndex = 1; name = FIRCLSAllocate.c; path = Crashlytics/Crashlytics/Helpers/FIRCLSAllocate.c; sourceTree = ""; }; - B951042AE2AEB24F45AAC599C82AE7E4 /* MPMemoryCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPMemoryCache.m; path = MoPubSDK/Internal/MPMemoryCache.m; sourceTree = ""; }; - B95E13859FA5C7BE5F2116C31054BC09 /* GoogleAppMeasurement.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GoogleAppMeasurement.framework; path = Frameworks/GoogleAppMeasurement.framework; sourceTree = ""; }; - B9A478D858F62F9F068DE83A8CBA7E8A /* MPVASTMacroProcessor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVASTMacroProcessor.h; path = MoPubSDK/Internal/VAST/MPVASTMacroProcessor.h; sourceTree = ""; }; - BA248B4C1FBEF84908D3A7D237952367 /* FBSDKButton+Subclass.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKButton+Subclass.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKButton+Subclass.h"; sourceTree = ""; }; - BA51AE9DA92117208174BD020559C328 /* FIRCLSInternalLogging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSInternalLogging.h; path = Crashlytics/Crashlytics/Helpers/FIRCLSInternalLogging.h; sourceTree = ""; }; - BA6B9C62837AA9821E4F0EBEE4FC281F /* MPActivityViewControllerHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPActivityViewControllerHelper.h; path = MoPubSDK/Internal/Common/MPActivityViewControllerHelper.h; sourceTree = ""; }; - BA7FAF644EB1430C49725BD9BBD687AC /* FBSDKTestUsersManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKTestUsersManager.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKTestUsersManager.m; sourceTree = ""; }; - BA8EB6695C215B232B216E2F9B56FB4B /* MPImpressionData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPImpressionData.m; path = MoPubSDK/MPImpressionData.m; sourceTree = ""; }; - BAAE79EE588FE282E07DE755E2288107 /* FBSDKCloseIcon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKCloseIcon.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKCloseIcon.m; sourceTree = ""; }; - BAEA23AA39E10157B79B45590DB564BC /* nanopb.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = nanopb.release.xcconfig; sourceTree = ""; }; - BB28CE7ABD1CD14783DCDE329DA90A9A /* FBSDKCoreKit.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FBSDKCoreKit.debug.xcconfig; sourceTree = ""; }; - BB3407837BF64B53877EE3975FE641F4 /* GoogleDataTransport-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "GoogleDataTransport-Info.plist"; sourceTree = ""; }; - BB3E5063A24AA0806EEA1496785F4C8C /* FIRInstallationsItem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstallationsItem.m; path = FirebaseInstallations/Source/Library/FIRInstallationsItem.m; sourceTree = ""; }; - BB58F00F1770593E5F2B2058C686CAF1 /* GDTCOREventTransformer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCOREventTransformer.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCOREventTransformer.h; sourceTree = ""; }; - BB5DD677394D34BE38E09A78356C7AE0 /* MPVASTResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVASTResponse.h; path = MoPubSDK/Internal/VAST/MPVASTResponse.h; sourceTree = ""; }; - BB8BEBDDCC541B671A9F662CEC6EFD04 /* FIRCLSDataCollectionToken.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCLSDataCollectionToken.m; path = Crashlytics/Crashlytics/DataCollection/FIRCLSDataCollectionToken.m; sourceTree = ""; }; - BBD6562C76C121588F399F470880690C /* FBSDKLoginCompletion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLoginCompletion.h; path = FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginCompletion.h; sourceTree = ""; }; - BBE76DD5925BF7F751D3FC881C48EFB3 /* FBAdBridgeContainer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBAdBridgeContainer.h; path = Static/FBAudienceNetwork.framework/Headers/FBAdBridgeContainer.h; sourceTree = ""; }; - BBED2B4463E868A903BEBBC03F711DE8 /* MPBannerAdManagerDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPBannerAdManagerDelegate.h; path = MoPubSDK/Internal/Banners/MPBannerAdManagerDelegate.h; sourceTree = ""; }; - BCC81D90AA4D9847887DF63CE8BCBE10 /* FIRCLSURLSessionDataTask_PrivateMethods.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSURLSessionDataTask_PrivateMethods.h; path = Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionDataTask_PrivateMethods.h; sourceTree = ""; }; - BD256BA47553A5AACF835AC696D625E3 /* FIRCLSFABAsyncOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSFABAsyncOperation.h; path = Crashlytics/Shared/FIRCLSOperation/FIRCLSFABAsyncOperation.h; sourceTree = ""; }; - BDA097AE57FC5E4252FA9E163E6EACB7 /* FIRCLSFABNetworkClient.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSFABNetworkClient.h; path = Crashlytics/Shared/FIRCLSNetworking/FIRCLSFABNetworkClient.h; sourceTree = ""; }; - BDD051FCAACA7AC31BD04039027B77BC /* pb_decode.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pb_decode.c; sourceTree = ""; }; - BE188B8A16FC9322DCB2ECEDAF33705A /* GDTCORFlatFileStorage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORFlatFileStorage.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCORFlatFileStorage.h; sourceTree = ""; }; - BE6706C0E91060814B4019DC196EA848 /* MPHTMLInterstitialCustomEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPHTMLInterstitialCustomEvent.m; path = MoPubSDK/Internal/HTML/MPHTMLInterstitialCustomEvent.m; sourceTree = ""; }; - BE8609CE945C9F8818FB940B4101B7C4 /* nanopb.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = nanopb.debug.xcconfig; sourceTree = ""; }; - BEB454A969CE2F9060C13662DCA0A898 /* FBLPromise+All.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+All.h"; path = "Sources/FBLPromises/include/FBLPromise+All.h"; sourceTree = ""; }; - BEC04A5F6599F3B93782C7D4FB07D8CF /* FBSDKMaleSilhouetteIcon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKMaleSilhouetteIcon.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKMaleSilhouetteIcon.m; sourceTree = ""; }; - BEE316A53B3612679CD1CA946A18D380 /* FIRCLSFABHost.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSFABHost.h; path = Crashlytics/Shared/FIRCLSFABHost.h; sourceTree = ""; }; - BEE78566C29E3922B044231B86E67331 /* FBSDKSettings+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKSettings+Internal.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSettings+Internal.h"; sourceTree = ""; }; - BF0333C24B4E2FFB8D8261E5A9270A34 /* FBAdExperienceConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBAdExperienceConfig.h; path = Static/FBAudienceNetwork.framework/Headers/FBAdExperienceConfig.h; sourceTree = ""; }; - BF35766A79CE035F6EE7F4DB56940DEF /* MPActivityViewControllerHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPActivityViewControllerHelper.m; path = MoPubSDK/Internal/Common/MPActivityViewControllerHelper.m; sourceTree = ""; }; - BF49A6CFFD4B143C9F685DD1F2E64455 /* GDTCORLifecycle.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORLifecycle.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORLifecycle.m; sourceTree = ""; }; - BF6BCF2D44C454CD22ABD63FF5D592EA /* MPAdImpressionTimer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPAdImpressionTimer.m; path = MoPubSDK/Internal/Common/MPAdImpressionTimer.m; sourceTree = ""; }; - C0540E9A58E0C9980A70CDCD727CC1D7 /* MOPUBNativeVideoAdRendererSettings.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MOPUBNativeVideoAdRendererSettings.h; path = MoPubSDK/NativeVideo/MOPUBNativeVideoAdRendererSettings.h; sourceTree = ""; }; - C114A9B9E1AED4D27E8CAF8CF3E6D64C /* FIRCLSHost.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSHost.h; path = Crashlytics/Crashlytics/Components/FIRCLSHost.h; sourceTree = ""; }; - C13C87F43E1B8C680CCBA1A887B3BAA6 /* FirebaseCoreDiagnostics.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseCoreDiagnostics.release.xcconfig; sourceTree = ""; }; - C14371F530DDF4D9F250F96A2B6AA421 /* FBSDKMaleSilhouetteIcon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKMaleSilhouetteIcon.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKMaleSilhouetteIcon.h; sourceTree = ""; }; - C1699B1297A43343DDB89495117C3F5E /* MoPub_Avid.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MoPub_Avid.h; path = MoPubSDK/Viewability/Avid/MoPub_Avid.h; sourceTree = ""; }; - C1ABE913DD8B69A5DA8473883B8FB38C /* SKStoreProductViewController+MPAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SKStoreProductViewController+MPAdditions.h"; path = "MoPubSDK/Internal/Utility/Categories/SKStoreProductViewController+MPAdditions.h"; sourceTree = ""; }; - C1D769AA69E3136DFC88E636239F82CE /* MPVASTTrackingEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVASTTrackingEvent.h; path = MoPubSDK/Internal/VAST/MPVASTTrackingEvent.h; sourceTree = ""; }; - C23BFF88CC3767DDD0AF1082A7700C5E /* UIView+MPAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+MPAdditions.h"; path = "MoPubSDK/Internal/Utility/Categories/UIView+MPAdditions.h"; sourceTree = ""; }; - C24FD1A664C7473CCFC62DE3F10D1EC2 /* MPVideoConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVideoConfig.h; path = MoPubSDK/Internal/Common/MPVideoConfig.h; sourceTree = ""; }; - C26590F88F2681CD9C907ED6B4F4D894 /* FIRInstallationsIDController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstallationsIDController.h; path = FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsIDController.h; sourceTree = ""; }; - C28848EB5D088BDBD9508A95AAF4B010 /* FBSDKKeychainStoreViaBundleID.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKKeychainStoreViaBundleID.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKKeychainStoreViaBundleID.h; sourceTree = ""; }; - C2DB1E45D2776332856E0F440BABEA51 /* MPMoPubRewardedVideoCustomEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPMoPubRewardedVideoCustomEvent.m; path = MoPubSDK/RewardedVideo/Internal/MPMoPubRewardedVideoCustomEvent.m; sourceTree = ""; }; - C308366EDCBDF0482B67674DB6BDAF17 /* GDTCORTransport.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORTransport.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORTransport.m; sourceTree = ""; }; - C331EBD13FE3B9AFCACDA8A4FF2A5368 /* FBSDKApplicationObserving.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKApplicationObserving.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKApplicationObserving.h; sourceTree = ""; }; - C373BC66DE5491E20DE03672649626EA /* FIRCLSMachOBinary.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSMachOBinary.h; path = Crashlytics/Shared/FIRCLSMachO/FIRCLSMachOBinary.h; sourceTree = ""; }; - C377E972E251580AB56B910F18A439A8 /* MPMoPubRewardedPlayableCustomEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPMoPubRewardedPlayableCustomEvent.m; path = MoPubSDK/RewardedVideo/Internal/MPMoPubRewardedPlayableCustomEvent.m; sourceTree = ""; }; - C39A9746312508F0797FBBABB8A59C33 /* MPImpressionTrackedNotification.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPImpressionTrackedNotification.m; path = MoPubSDK/MPImpressionTrackedNotification.m; sourceTree = ""; }; - C39FC8BEBD373829A619C883CB0D9E7C /* MPGeolocationProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPGeolocationProvider.h; path = MoPubSDK/Internal/Utility/MPGeolocationProvider.h; sourceTree = ""; }; - C3AE4B912AD6F08CD92E0BFA2706B656 /* MoPub_AvidAdSessionManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MoPub_AvidAdSessionManager.h; path = MoPubSDK/Viewability/Avid/MoPub_AvidAdSessionManager.h; sourceTree = ""; }; - C3D7E0D75CF14D62305E29C5D66E5337 /* FBSDKMeasurementEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKMeasurementEvent.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKMeasurementEvent.h; sourceTree = ""; }; - C420F42A793013076D91CC2D42548B2F /* FBSDKGraphRequestConnection+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKGraphRequestConnection+Internal.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestConnection+Internal.h"; sourceTree = ""; }; - C43DD2EEB36EF95BE4CF3A5AE1BF77A3 /* FIRDependency.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRDependency.m; path = FirebaseCore/Sources/FIRDependency.m; sourceTree = ""; }; - C4B1244CBA9A3C50FEAEA1AAE3B1E731 /* FBSDKLoginTooltipView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLoginTooltipView.m; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKLoginTooltipView.m; sourceTree = ""; }; - C5150E21455987525D084331795D17D9 /* GULReachabilityChecker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULReachabilityChecker.m; path = GoogleUtilities/Reachability/GULReachabilityChecker.m; sourceTree = ""; }; - C5283991687EAA1980EF248539FD7A33 /* FBLPromise+All.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+All.m"; path = "Sources/FBLPromises/FBLPromise+All.m"; sourceTree = ""; }; - C5356A1A76BA7FEBA53E6C7A25D145BB /* FirebaseInstallations.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FirebaseInstallations.h; path = FirebaseInstallations/Source/Library/Public/FirebaseInstallations.h; sourceTree = ""; }; - C54E999454DDCF12B4282697FC429B39 /* FBSDKLogo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLogo.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKLogo.h; sourceTree = ""; }; - C589FB56B571900BC8BD0463A76AB18C /* FBSDKDeviceButton+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKDeviceButton+Internal.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/Device/FBSDKDeviceButton+Internal.h"; sourceTree = ""; }; - C5A5A90A2DBA3066963D3C1480317AFB /* FBSDKBridgeAPI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBridgeAPI.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPI.h; sourceTree = ""; }; - C5DE951FFF7480D237C096DD917810DB /* NSHTTPURLResponse+MPAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSHTTPURLResponse+MPAdditions.m"; path = "MoPubSDK/Internal/Utility/Categories/NSHTTPURLResponse+MPAdditions.m"; sourceTree = ""; }; - C5EB448F6ECA0790F937ACD6C113DE79 /* MPIdentityProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPIdentityProvider.h; path = MoPubSDK/Internal/Utility/MPIdentityProvider.h; sourceTree = ""; }; - C65F6724266CC6C52BE0E93F64CEE5B8 /* FBSDKMath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKMath.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMath.h; sourceTree = ""; }; - C67890988039719A30605DDB4EA28ABD /* MPAdServerURLBuilder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPAdServerURLBuilder.m; path = MoPubSDK/Internal/Common/MPAdServerURLBuilder.m; sourceTree = ""; }; - C68405D6DB0F7882F3FF9CB54BB6A899 /* FBSDKBridgeAPIProtocolWebV1.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKBridgeAPIProtocolWebV1.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/ProtocolVersions/FBSDKBridgeAPIProtocolWebV1.m; sourceTree = ""; }; - C69EB63CF023797F10EE17492DA51BB1 /* MPContentBlocker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPContentBlocker.m; path = MoPubSDK/Internal/HTML/MPContentBlocker.m; sourceTree = ""; }; - C6A72B17CBF96370E581757D02DF3BE4 /* FBSDKUIUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKUIUtility.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKUIUtility.h; sourceTree = ""; }; - C6BBE9AC2A833F397A1559633A8BEFA0 /* mopub-ios-sdk-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "mopub-ios-sdk-dummy.m"; sourceTree = ""; }; - C6C66B56633E01B4F1E2C2FF831636A0 /* FBSDKLoginKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = FBSDKLoginKit.modulemap; sourceTree = ""; }; - C784342A4CE90756B4BA3D2244D8DC91 /* MPMediaFileCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPMediaFileCache.h; path = MoPubSDK/Internal/Utility/Protocols/MPMediaFileCache.h; sourceTree = ""; }; - C7EF157EA0534F6AEF06AE8D688C3909 /* FIRCLSApplicationIdentifierModel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCLSApplicationIdentifierModel.m; path = Crashlytics/Crashlytics/Settings/Models/FIRCLSApplicationIdentifierModel.m; sourceTree = ""; }; - C7F40C376A0563B032978251B0AFA7F4 /* FBSDKGraphRequestMetadata.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKGraphRequestMetadata.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestMetadata.m; sourceTree = ""; }; - C84B52E1C6836F235AC35B233208BB36 /* _FBSDKLoginRecoveryAttempter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _FBSDKLoginRecoveryAttempter.h; path = FBSDKLoginKit/FBSDKLoginKit/Internal/_FBSDKLoginRecoveryAttempter.h; sourceTree = ""; }; - C9CAE15BCF8B3272A9E8E8A73FF6A28A /* FIRCLSRecordBase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSRecordBase.h; path = Crashlytics/Crashlytics/Models/Record/FIRCLSRecordBase.h; sourceTree = ""; }; - C9F344B41D9C19F0AE6498C7E902BBFC /* FIRCLSHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCLSHandler.m; path = Crashlytics/Crashlytics/Handlers/FIRCLSHandler.m; sourceTree = ""; }; - CA00615483FDE747EA80EE0D18DD6700 /* NSString+MPConsentStatus.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+MPConsentStatus.m"; path = "MoPubSDK/Internal/Utility/Categories/NSString+MPConsentStatus.m"; sourceTree = ""; }; - CA28F95A677C70A2D7337932F0531D36 /* FBSDKAccessTokenExpirer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAccessTokenExpirer.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenExpirer.h; sourceTree = ""; }; - CA423C0F1A2482E5C355023D6CEFB3C7 /* MPExtendedHitBoxButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPExtendedHitBoxButton.m; path = MoPubSDK/Internal/MPExtendedHitBoxButton.m; sourceTree = ""; }; - CA442CD7CB2FFEBFC107903616DA474C /* FIRInstallationsErrors.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstallationsErrors.h; path = FirebaseInstallations/Source/Library/Public/FIRInstallationsErrors.h; sourceTree = ""; }; - CA472F6569E10D09DD80A45DB1395903 /* GULLoggerLevel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULLoggerLevel.h; path = GoogleUtilities/Logger/Public/GULLoggerLevel.h; sourceTree = ""; }; - CA5DDA7151A4B4E9A874A13E7B3E549A /* FIRCLSApplication.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCLSApplication.m; path = Crashlytics/Crashlytics/Components/FIRCLSApplication.m; sourceTree = ""; }; - CA847F9F3FE796FF799FA40B541EDF8D /* MPVASTCompanionAd.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVASTCompanionAd.m; path = MoPubSDK/Internal/VAST/MPVASTCompanionAd.m; sourceTree = ""; }; - CA903F5FAA97ECA25B62C5067EE63EBD /* MPCloseButtonX@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MPCloseButtonX@2x.png"; path = "MoPubSDK/Resources/MPCloseButtonX@2x.png"; sourceTree = ""; }; - CA971894932E0F1E1A7008FE05D6F4C8 /* FIRCLSSettingsOnboardingManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCLSSettingsOnboardingManager.m; path = Crashlytics/Crashlytics/Settings/FIRCLSSettingsOnboardingManager.m; sourceTree = ""; }; - CAD30B8E801FF58F5E3DB20D59A3DE82 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; - CAF0DB36B275BDAAD6ADE0494F63E096 /* FirebaseCoreDiagnostics-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FirebaseCoreDiagnostics-dummy.m"; sourceTree = ""; }; - CAF973ED87B9A770DF409B522A0FCD8A /* FBNativeAdBaseView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBNativeAdBaseView.h; path = Static/FBAudienceNetwork.framework/Headers/FBNativeAdBaseView.h; sourceTree = ""; }; - CB5C78A2BDB0940C7A7CF9B73D6AAB24 /* FBSDKAppLinkReturnToRefererView_Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppLinkReturnToRefererView_Internal.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKAppLinkReturnToRefererView_Internal.h; sourceTree = ""; }; - CB649F2C8A374A8C50B0735B42FB2B54 /* FBSDKBridgeAPIProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKBridgeAPIProtocol.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/BridgeAPI/FBSDKBridgeAPIProtocol.h; sourceTree = ""; }; - CB669D3EFDC482E5F2B3E7B24A14B7DD /* FacebookAdapterConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FacebookAdapterConfiguration.h; path = FacebookAudienceNetwork/FacebookAdapterConfiguration.h; sourceTree = ""; }; - CB7262061D21BA0CBCED849F6462BD50 /* FBSDKColor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKColor.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKColor.m; sourceTree = ""; }; - CB8007F0CCF389E6DB42CD523C21695E /* FBAudienceNetwork.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FBAudienceNetwork.release.xcconfig; sourceTree = ""; }; - CB8F0079CB7D26D75380BA19E4619370 /* FBSDKDeviceDialogView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKDeviceDialogView.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Device/FBSDKDeviceDialogView.m; sourceTree = ""; }; - CB9E627CDFF3E4BBC4B0931416099EE1 /* GDTCOREvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCOREvent.h; path = GoogleDataTransport/GDTCORLibrary/Public/GDTCOREvent.h; sourceTree = ""; }; - CBDDE1A08FE280FD081969F12B45D913 /* GULAppEnvironmentUtil.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULAppEnvironmentUtil.m; path = GoogleUtilities/Environment/third_party/GULAppEnvironmentUtil.m; sourceTree = ""; }; - CBEDE4A5052F3F0B1A9DE0B77FECAD6C /* FIRCLSOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSOperation.h; path = Crashlytics/Shared/FIRCLSOperation/FIRCLSOperation.h; sourceTree = ""; }; - CC00F2F5A3FF861ABEA00A5CD03564B1 /* FIRInstallations.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstallations.m; path = FirebaseInstallations/Source/Library/FIRInstallations.m; sourceTree = ""; }; - CCB7BB66C0DD94A851D46F8BC892E519 /* FBSDKGraphErrorRecoveryProcessor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKGraphErrorRecoveryProcessor.m; path = FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphErrorRecoveryProcessor.m; sourceTree = ""; }; - CD0737C003FDFEAB95209C9C5640C8DE /* FirebaseCrashlytics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FirebaseCrashlytics.h; path = Crashlytics/Crashlytics/Public/FirebaseCrashlytics.h; sourceTree = ""; }; - CD814B09D8A083F1C2A25BE3FE62D7A1 /* FIRCLSMachOSlice.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSMachOSlice.h; path = Crashlytics/Shared/FIRCLSMachO/FIRCLSMachOSlice.h; sourceTree = ""; }; - CDE6F56616CDFE7D08FCA2E61AF0A500 /* FBSDKGraphRequestDataAttachment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKGraphRequestDataAttachment.h; path = FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphRequestDataAttachment.h; sourceTree = ""; }; - CDE864CA7E3B75F5AC7DD6FA815AFCF3 /* FBSDKMath.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKMath.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKMath.m; sourceTree = ""; }; - CDED4637A3F98FF684759656A4DA142E /* FIRCLSDwarfUnwind.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSDwarfUnwind.h; path = Crashlytics/Crashlytics/Unwind/Dwarf/FIRCLSDwarfUnwind.h; sourceTree = ""; }; - CE24F219A6E71C71FAFAD9134860FBC4 /* MPURLRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPURLRequest.m; path = MoPubSDK/Internal/MPURLRequest.m; sourceTree = ""; }; - CE42AFD6D0EE8CAA561102A302064F29 /* MPInterstitialAdControllerDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPInterstitialAdControllerDelegate.h; path = MoPubSDK/MPInterstitialAdControllerDelegate.h; sourceTree = ""; }; - CE430B0B5A3471C63F31CAE393C5233E /* FBLPromise+Do.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Do.h"; path = "Sources/FBLPromises/include/FBLPromise+Do.h"; sourceTree = ""; }; - CE45DE994F60EF4FBEF3DFAD4A209FA2 /* MPVASTTracking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVASTTracking.m; path = MoPubSDK/Internal/MPVASTTracking.m; sourceTree = ""; }; - CE5B9D3AD3DB3D2A1B0F81DC562447B9 /* FBSDKCoreKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FBSDKCoreKit-dummy.m"; sourceTree = ""; }; - CE77A5C8C6CB0B51513429A87CFDE0E5 /* FBSDKLoginCompletion+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKLoginCompletion+Internal.h"; path = "FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginCompletion+Internal.h"; sourceTree = ""; }; - CEAA2C0E6036AED6BD3B183E64DFF845 /* FIRCLSReport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSReport.h; path = Crashlytics/Crashlytics/Models/FIRCLSReport.h; sourceTree = ""; }; - CEDB48D4E2F6F3F770A53D31F1856795 /* MPNativePositionSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPNativePositionSource.m; path = MoPubSDK/NativeAds/Internal/MPNativePositionSource.m; sourceTree = ""; }; - CF437374EFE55C1F6AAC583CF2438B58 /* FBLPromise+Await.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Await.h"; path = "Sources/FBLPromises/include/FBLPromise+Await.h"; sourceTree = ""; }; - CF6876AC311C8307CCF05E1196BCCF8F /* FIRCLSThreadArrayOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSThreadArrayOperation.h; path = Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSThreadArrayOperation.h; sourceTree = ""; }; - CF6A63C4B55F5F7C3CECC0DCCEE4A69F /* NSError+MPAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSError+MPAdditions.h"; path = "MoPubSDK/Internal/Utility/Categories/NSError+MPAdditions.h"; sourceTree = ""; }; - CF6CCFBF6868B0A060B6CACC63AD9715 /* FBSDKGraphRequestPiggybackManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKGraphRequestPiggybackManager.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestPiggybackManager.m; sourceTree = ""; }; - CFE2F92DC947D242323E352533FC125E /* FIRCLSInternalLogging.c */ = {isa = PBXFileReference; includeInIndex = 1; name = FIRCLSInternalLogging.c; path = Crashlytics/Crashlytics/Helpers/FIRCLSInternalLogging.c; sourceTree = ""; }; - D03B5828EB71E48F7801EC9B3A1867EE /* MPNativePositionResponseDeserializer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativePositionResponseDeserializer.h; path = MoPubSDK/NativeAds/Internal/MPNativePositionResponseDeserializer.h; sourceTree = ""; }; - D0B4B7A3C6107F9F40BDEC5A513061CE /* FBSDKLoginKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FBSDKLoginKit-dummy.m"; sourceTree = ""; }; - D0E7C1714D93675593DECCBB370D5FC8 /* FacebookNativeAdRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FacebookNativeAdRenderer.h; path = FacebookAudienceNetwork/FacebookNativeAdRenderer.h; sourceTree = ""; }; - D130F86CCEEEDDC974111ED15E976707 /* FIRCLSURLSessionTask.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSURLSessionTask.h; path = Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionTask.h; sourceTree = ""; }; - D13E918BFD440A58643A7DD1C45808A2 /* FIRCLSMultipartMimeStreamEncoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCLSMultipartMimeStreamEncoder.m; path = Crashlytics/Shared/FIRCLSNetworking/FIRCLSMultipartMimeStreamEncoder.m; sourceTree = ""; }; - D1B092F21830A7A1B6344AF7DAF3110A /* FBSDKWebDialog.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKWebDialog.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/WebDialog/FBSDKWebDialog.m; sourceTree = ""; }; - D1DBA4FCC2DFAC1117EE903439EB15E5 /* MPMoPubNativeAdAdapter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPMoPubNativeAdAdapter.h; path = MoPubSDK/NativeAds/Internal/MPMoPubNativeAdAdapter.h; sourceTree = ""; }; - D21D961446BD811641FF742E6B32E11A /* FIRCLSURLSession_PrivateMethods.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSURLSession_PrivateMethods.h; path = Crashlytics/Crashlytics/FIRCLSURLSession/FIRCLSURLSession_PrivateMethods.h; sourceTree = ""; }; - D236BDDF35357D256F15EE061D8DF285 /* FBAudienceNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FBAudienceNetwork.framework; path = Static/FBAudienceNetwork.framework; sourceTree = ""; }; - D24ADC2C26AC17986E84E6AD71B4497D /* MPRealTimeTimer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPRealTimeTimer.m; path = MoPubSDK/Internal/Common/MPRealTimeTimer.m; sourceTree = ""; }; - D2656512704728DB2DBB34BBE2165797 /* MPLastResortDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPLastResortDelegate.m; path = MoPubSDK/Internal/Common/MPLastResortDelegate.m; sourceTree = ""; }; - D2A00557E86AB985431B6EBE76C05CE9 /* firebasecore.nanopb.c */ = {isa = PBXFileReference; includeInIndex = 1; name = firebasecore.nanopb.c; path = Firebase/CoreDiagnostics/FIRCDLibrary/Protogen/nanopb/firebasecore.nanopb.c; sourceTree = ""; }; - D2E718FEBBC0B21B328F0AD4C483B85D /* FBSDKGraphRequestConnection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKGraphRequestConnection.h; path = FBSDKCoreKit/FBSDKCoreKit/GraphAPI/FBSDKGraphRequestConnection.h; sourceTree = ""; }; - D30C1A5C52F035ADBD3EEA0824B1DD27 /* FacebookInterstitialCustomEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FacebookInterstitialCustomEvent.m; path = FacebookAudienceNetwork/FacebookInterstitialCustomEvent.m; sourceTree = ""; }; - D32E916E946062051632D0E5DBE612CD /* FBSDKApplicationDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKApplicationDelegate.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKApplicationDelegate.h; sourceTree = ""; }; - D3356CCE10CEA01243A20E9ACF2923FC /* FirebaseInstallations.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseInstallations.debug.xcconfig; sourceTree = ""; }; - D3B5753F38B8B1C45A47A9CB4F5DE262 /* FIRCLSLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCLSLogger.m; path = Crashlytics/Crashlytics/Helpers/FIRCLSLogger.m; sourceTree = ""; }; - D3EF524958C2494DB7CD069BDAD74675 /* MoPub_AvidManagedVideoAdSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MoPub_AvidManagedVideoAdSession.h; path = MoPubSDK/Viewability/Avid/MoPub_AvidManagedVideoAdSession.h; sourceTree = ""; }; - D40F3EB80A82CF1EA834836E17B6AA55 /* FIRInstallationsStoredItem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstallationsStoredItem.h; path = FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStoredItem.h; sourceTree = ""; }; - D415223653ABC354C49E541E09592A9D /* FBSDKCodelessIndexer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKCodelessIndexer.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessIndexer.h; sourceTree = ""; }; - D41740737D7D65FD1EDAD94E25926D12 /* FBSDKDialogConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKDialogConfiguration.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKDialogConfiguration.h; sourceTree = ""; }; - D454164375BCE20FEAA887F05C82CA54 /* FIRCLSThreadState.c */ = {isa = PBXFileReference; includeInIndex = 1; name = FIRCLSThreadState.c; path = Crashlytics/Crashlytics/Helpers/FIRCLSThreadState.c; sourceTree = ""; }; - D48FBD5E31629FFF372284263088E2D5 /* FBSDKFeatureManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKFeatureManager.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKFeatureManager.h; sourceTree = ""; }; - D48FDFD09A08E4A5AA0B90AC469DFA8E /* FIRCLSURLSessionDownloadTask_PrivateMethods.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSURLSessionDownloadTask_PrivateMethods.h; path = Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionDownloadTask_PrivateMethods.h; sourceTree = ""; }; - D4F67A3E65CC0FC59D9E2CEDECC946BB /* FIRCLSURLSessionDownloadTask.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSURLSessionDownloadTask.h; path = Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionDownloadTask.h; sourceTree = ""; }; - D511DF32C5F107B180595A06ACB7FDF4 /* MPRewardedVideo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPRewardedVideo.m; path = MoPubSDK/RewardedVideo/MPRewardedVideo.m; sourceTree = ""; }; - D53B0C767D495F5897CFCAB1D4197223 /* FIRInstallationsIIDStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstallationsIIDStore.h; path = FirebaseInstallations/Source/Library/IIDMigration/FIRInstallationsIIDStore.h; sourceTree = ""; }; - D56AE7C88549B7EA1F0686D29FA14FF0 /* MPVideoConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVideoConfig.m; path = MoPubSDK/Internal/Common/MPVideoConfig.m; sourceTree = ""; }; - D572AB96D546D44DDB7E9B13DC71E1BF /* MPVASTModel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVASTModel.m; path = MoPubSDK/Internal/VAST/MPVASTModel.m; sourceTree = ""; }; - D63C7D1BEF95979824E596AD2C9176B7 /* GULNSData+zlib.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "GULNSData+zlib.h"; path = "GoogleUtilities/NSData+zlib/Public/GULNSData+zlib.h"; sourceTree = ""; }; - D6F73BB02D417A143A1CD80F6A5030C1 /* MPNativeAdError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPNativeAdError.m; path = MoPubSDK/Internal/MPNativeAdError.m; sourceTree = ""; }; - D70A0E6289B60C33CD61056A535F796A /* MPCloseBtn@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MPCloseBtn@2x.png"; path = "MoPubSDK/Resources/MPCloseBtn@2x.png"; sourceTree = ""; }; - D7252A72681DC1F892BBFD3ACE5AE548 /* GDTCOREvent_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCOREvent_Private.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCOREvent_Private.h; sourceTree = ""; }; - D76A6B3C4CBF23CB99E36B34D94F1033 /* FBSDKAddressFilterManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAddressFilterManager.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/RestrictiveDataFilter/FBSDKAddressFilterManager.h; sourceTree = ""; }; - D79F393250BF3A0CB9F297EAD8E1356B /* MOPUBActivityIndicatorView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MOPUBActivityIndicatorView.m; path = MoPubSDK/NativeVideo/Internal/MOPUBActivityIndicatorView.m; sourceTree = ""; }; - D7B25E151F6CEE3FCCCFFA5E45CE1958 /* MPNativePositionResponseDeserializer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPNativePositionResponseDeserializer.m; path = MoPubSDK/NativeAds/Internal/MPNativePositionResponseDeserializer.m; sourceTree = ""; }; - D7C4B4719E036C1B09595417C7D8ACA6 /* Pods-MAPS.ME.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MAPS.ME.debug.xcconfig"; sourceTree = ""; }; - D868942174467A00280EE2A3CB5E0116 /* GoogleDataTransport.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = GoogleDataTransport.modulemap; sourceTree = ""; }; - D87FE1C8DD5694CB3CD67B810B5F3E29 /* MPInterstitialAdManagerDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPInterstitialAdManagerDelegate.h; path = MoPubSDK/Internal/Interstitials/MPInterstitialAdManagerDelegate.h; sourceTree = ""; }; - D9166C142B944D31D700CCF555CF75A2 /* FIRAnalyticsInterop.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAnalyticsInterop.h; path = Interop/Analytics/Public/FIRAnalyticsInterop.h; sourceTree = ""; }; - D919AB3B7647CDE8F235DFA2ABDC7EEA /* GoogleDataTransportCCTSupport.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GoogleDataTransportCCTSupport.debug.xcconfig; sourceTree = ""; }; - D9388511DD9CA3E718B2E63D6A212C1C /* MPBaseAdapterConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPBaseAdapterConfiguration.m; path = MoPubSDK/MPBaseAdapterConfiguration.m; sourceTree = ""; }; - D94E1893022A390515E0D40305BAB20D /* MPAnalyticsTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPAnalyticsTracker.h; path = MoPubSDK/Internal/Utility/MPAnalyticsTracker.h; sourceTree = ""; }; - D96EB47E02BE9CC7D59F370B6B6F5102 /* FBSDKTooltipView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKTooltipView.m; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKTooltipView.m; sourceTree = ""; }; - D98750936C51805AF7CAA9DF93448CB8 /* crashlytics.nanopb.c */ = {isa = PBXFileReference; includeInIndex = 1; name = crashlytics.nanopb.c; path = Crashlytics/Protogen/nanopb/crashlytics.nanopb.c; sourceTree = ""; }; - D9AC0AB30DA90EB31444CDDA222D3616 /* FBSDKAccessTokenCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAccessTokenCache.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenCache.h; sourceTree = ""; }; - D9CFBF50DC6E1AE24CE04C9B70365C3D /* FBSDKWebViewAppLinkResolver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKWebViewAppLinkResolver.m; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKWebViewAppLinkResolver.m; sourceTree = ""; }; - D9D2AB59193C5DC54FA5A2775836D3F3 /* MoPub-FacebookAudienceNetwork-Adapters-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MoPub-FacebookAudienceNetwork-Adapters-umbrella.h"; sourceTree = ""; }; - DA0D0593586D782C9522C7ABEFA3ED61 /* FBSDKDynamicFrameworkLoader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKDynamicFrameworkLoader.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal_NoARC/FBSDKDynamicFrameworkLoader.m; sourceTree = ""; }; - DA7F8F9283E27B5C575D17A3B0A14E8F /* FBSDKLoginUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLoginUtility.h; path = FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginUtility.h; sourceTree = ""; }; - DA83000C88D37B03721453E6334C899E /* FBSDKPaymentObserver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKPaymentObserver.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKPaymentObserver.h; sourceTree = ""; }; - DA945CFEB939D760822C233216963059 /* FBSDKAccessTokenExpirer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAccessTokenExpirer.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/TokenCaching/FBSDKAccessTokenExpirer.m; sourceTree = ""; }; - DAA6A2DEF645DC36C5564D6FE230A762 /* MPStopwatch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPStopwatch.h; path = MoPubSDK/Internal/Utility/MPStopwatch.h; sourceTree = ""; }; - DAFE246CB253B48EDFAAD0B3458D7243 /* FBSDKModelRuntime.hpp */ = {isa = PBXFileReference; includeInIndex = 1; name = FBSDKModelRuntime.hpp; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/ML/FBSDKModelRuntime.hpp; sourceTree = ""; }; - DB2CEB0165E20DBD8F873EA9AA03E794 /* FIRCLSReportUploader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCLSReportUploader.m; path = Crashlytics/Crashlytics/Controllers/FIRCLSReportUploader.m; sourceTree = ""; }; - DB3BC2BA5F41EF53779436068A55C31B /* MPGlobal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPGlobal.h; path = MoPubSDK/Internal/Utility/MPGlobal.h; sourceTree = ""; }; - DB4CFDE48D385561DA2EA77DA34F2BDB /* Firebase.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Firebase.release.xcconfig; sourceTree = ""; }; - DB60A213EAFDDAFE44F1D320F046CB57 /* FBSDKGateKeeperManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKGateKeeperManager.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKGateKeeperManager.h; sourceTree = ""; }; - DB6C0D40004DBC7E0462A6F1C964E57A /* nanopb-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "nanopb-prefix.pch"; sourceTree = ""; }; - DBA6B3CC21109AB390353740B0099598 /* MPNativeAdConfigValues+Internal.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "MPNativeAdConfigValues+Internal.m"; path = "MoPubSDK/NativeAds/Internal/MPNativeAdConfigValues+Internal.m"; sourceTree = ""; }; - DC3279C966FBC3B094985435CC3EF5A2 /* FIRCLSInstallIdentifierModel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCLSInstallIdentifierModel.m; path = Crashlytics/Crashlytics/Models/FIRCLSInstallIdentifierModel.m; sourceTree = ""; }; - DC3A15AC175589C5B9AE31C0A379DC05 /* FBSDKFeatureExtractor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKFeatureExtractor.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/SuggestedEvents/FBSDKFeatureExtractor.m; sourceTree = ""; }; - DC562DBAE59A602484D1A827BBDEE75E /* FIRInstallationsItem+RegisterInstallationAPI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FIRInstallationsItem+RegisterInstallationAPI.h"; path = "FirebaseInstallations/Source/Library/InstallationsAPI/FIRInstallationsItem+RegisterInstallationAPI.h"; sourceTree = ""; }; - DD0ACC6E5CCF8D6CEF4B440DC7FFBB61 /* FBAdSettings.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBAdSettings.h; path = Static/FBAudienceNetwork.framework/Headers/FBAdSettings.h; sourceTree = ""; }; - DD0F6E2B57712A67FE1B4DB483A5725E /* mopub-ios-sdk-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "mopub-ios-sdk-Info.plist"; sourceTree = ""; }; - DD6AFFBE7C0032917FC59D6EFB74E582 /* FBLPromise+Testing.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Testing.m"; path = "Sources/FBLPromises/FBLPromise+Testing.m"; sourceTree = ""; }; - DD6CF9696EB61CEA0BA52DB238408B83 /* CoreMedia.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMedia.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/CoreMedia.framework; sourceTree = DEVELOPER_DIR; }; - DD7234B7909F7DC211F9EA3E427F8859 /* MPVASTError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVASTError.h; path = MoPubSDK/Internal/VAST/MPVASTError.h; sourceTree = ""; }; - DDA99B8F151A58F0B2E38FA18C211343 /* MRBridge.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MRBridge.m; path = MoPubSDK/Internal/MRAID/MRBridge.m; sourceTree = ""; }; - DDAB6FBFA511BC947E30FAC4F5A6C8B9 /* GoogleDataTransportCCTSupport.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GoogleDataTransportCCTSupport.release.xcconfig; sourceTree = ""; }; - DDB8687B80AA503F0FE43323A4A6EDE3 /* MPBLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPBLogger.h; path = MoPubSDK/Logging/MPBLogger.h; sourceTree = ""; }; - DDC042C77AE5650FDD7891DEFC48CFD1 /* FBSDKEventDeactivationManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKEventDeactivationManager.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/EventDeactivation/FBSDKEventDeactivationManager.h; sourceTree = ""; }; - DDC924443FBF390ADEE4A44A3AB1BEAF /* MPNativeAd+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MPNativeAd+Internal.h"; path = "MoPubSDK/NativeAds/Internal/MPNativeAd+Internal.h"; sourceTree = ""; }; - DDD07D4CBCCFF84C9731DFD2849E8234 /* GDTCORUploadCoordinator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORUploadCoordinator.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORUploadCoordinator.m; sourceTree = ""; }; - DDD4B27C8C7B462F918622D94C6CD29E /* MPRewardedVideoReward.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPRewardedVideoReward.h; path = MoPubSDK/RewardedVideo/MPRewardedVideoReward.h; sourceTree = ""; }; - DE356420E564FE05C9F2F80B0FC3F182 /* FBSDKImageDownloader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKImageDownloader.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKImageDownloader.m; sourceTree = ""; }; - DE5A8A6DA5F7E51F2EE6BB5322D39DF3 /* MPVideoPlayerContainerView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVideoPlayerContainerView.m; path = MoPubSDK/Internal/VideoPlayer/MPVideoPlayerContainerView.m; sourceTree = ""; }; - DE9C4BDAB5CE2D90D7EB9D366FBE1CCC /* FIRCLSdSYM.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSdSYM.h; path = Crashlytics/Shared/FIRCLSMachO/FIRCLSdSYM.h; sourceTree = ""; }; - DF0158DC127D8F5430A619C9336F0C62 /* FBSDKGraphRequestBody.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKGraphRequestBody.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Network/FBSDKGraphRequestBody.m; sourceTree = ""; }; - DF5A4A0D599D47844BEFCA576D351EAC /* FIRCLSSettings.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSSettings.h; path = Crashlytics/Crashlytics/Models/FIRCLSSettings.h; sourceTree = ""; }; - DF7D27BDD4E22812CDC9B3978B78454A /* FIRCLSMachO.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCLSMachO.m; path = Crashlytics/Shared/FIRCLSMachO/FIRCLSMachO.m; sourceTree = ""; }; - DF80F1B8CAA6C8D50609362E2A8BE8E6 /* Flurry-iOS-SDK-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Flurry-iOS-SDK-dummy.m"; sourceTree = ""; }; - DFF5B5C76F6231CCE943755B56ED7B74 /* Flurry-iOS-SDK-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Flurry-iOS-SDK-umbrella.h"; sourceTree = ""; }; - E00CDD52AFADD5EFD17A32C69C38ABEE /* FBLPromise+Delay.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Delay.h"; path = "Sources/FBLPromises/include/FBLPromise+Delay.h"; sourceTree = ""; }; - E01F03BD05CAF5227E917C0461922B8E /* FirebaseInstallations.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = FirebaseInstallations.modulemap; sourceTree = ""; }; - E0530167921E112E6D2B348B21686B78 /* GULAppDelegateSwizzler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GULAppDelegateSwizzler.m; path = GoogleUtilities/AppDelegateSwizzler/GULAppDelegateSwizzler.m; sourceTree = ""; }; - E07F8CD95E2E408F4B6C77192DEC0A1D /* Flurry-iOS-SDK-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Flurry-iOS-SDK-Info.plist"; sourceTree = ""; }; - E0AFF93F9DDD07DDE37B699A952E48C7 /* FIRInteropParameterNames.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInteropParameterNames.h; path = Interop/Analytics/Public/FIRInteropParameterNames.h; sourceTree = ""; }; - E0B971CC57D8EBB8C3EAC017D5C0A622 /* FirebaseCore.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseCore.release.xcconfig; sourceTree = ""; }; - E0E3DAADC1863DE965F304E74AF4DFB2 /* FBLPromise+Race.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Race.m"; path = "Sources/FBLPromises/FBLPromise+Race.m"; sourceTree = ""; }; - E11C44B9966BB3743A5ADCEF150C6803 /* FBSDKDeviceLoginManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKDeviceLoginManager.h; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginManager.h; sourceTree = ""; }; - E12C10BDCCB432E91925A8CE78C43506 /* NSURL+MPAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSURL+MPAdditions.h"; path = "MoPubSDK/Internal/Utility/Categories/NSURL+MPAdditions.h"; sourceTree = ""; }; - E1456C3286CD5AF8101B0A4F0E44F929 /* MediaPlayer.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MediaPlayer.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/MediaPlayer.framework; sourceTree = DEVELOPER_DIR; }; - E1520C55E8430A5535D7CA76744DE538 /* FBSDKLoginUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLoginUtility.m; path = FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginUtility.m; sourceTree = ""; }; - E15F2F19F73D395CCBF48B534933CA81 /* MPCoreInstanceProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPCoreInstanceProvider.m; path = MoPubSDK/Internal/MPCoreInstanceProvider.m; sourceTree = ""; }; - E1A12FB62545C0248DC8ED6FD6DBB88A /* FIRCLSSymbolResolver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSSymbolResolver.h; path = Crashlytics/Crashlytics/Models/FIRCLSSymbolResolver.h; sourceTree = ""; }; - E1DE133DDCCAFCD9002E34D14D1D13CB /* NSMutableArray+MPAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSMutableArray+MPAdditions.m"; path = "MoPubSDK/Internal/Utility/Categories/NSMutableArray+MPAdditions.m"; sourceTree = ""; }; - E2358BD1103DEF5DD39AB7BBB17FC9BA /* FlurryUserProperties.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FlurryUserProperties.h; path = Flurry/FlurryUserProperties.h; sourceTree = ""; }; - E238D469B16F4BF9C5B184066571C740 /* FBSDKAccessToken.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKAccessToken.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKAccessToken.m; sourceTree = ""; }; - E2434CB138B23681AD420AD601C0B50C /* FIRCLSReportAdapter_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSReportAdapter_Private.h; path = Crashlytics/Crashlytics/Models/Record/FIRCLSReportAdapter_Private.h; sourceTree = ""; }; - E2850A9DC951025A2D99B4A8D9767A80 /* FIRCLSRecordApplication.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCLSRecordApplication.m; path = Crashlytics/Crashlytics/Models/Record/FIRCLSRecordApplication.m; sourceTree = ""; }; - E2A214B17544E79689BA872946E3B1B5 /* FIRCLSDwarfExpressionMachine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSDwarfExpressionMachine.h; path = Crashlytics/Crashlytics/Unwind/Dwarf/FIRCLSDwarfExpressionMachine.h; sourceTree = ""; }; - E2A49853ADD371D4D590021CD3590E3B /* FIRCLSCompactUnwind.c */ = {isa = PBXFileReference; includeInIndex = 1; name = FIRCLSCompactUnwind.c; path = Crashlytics/Crashlytics/Unwind/Compact/FIRCLSCompactUnwind.c; sourceTree = ""; }; - E2B63D462DB7F827C4B11FD51E4F8E2D /* FirebaseCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = FirebaseCore.framework; path = FirebaseCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E37656F237661D9E974F4D92B3037597 /* FirebaseCrashlytics-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FirebaseCrashlytics-dummy.m"; sourceTree = ""; }; - E39716E612F58E64CA25C63391653747 /* FIRCLSFABHost.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCLSFABHost.m; path = Crashlytics/Shared/FIRCLSFABHost.m; sourceTree = ""; }; - E3C569EF859C4D9FE4623F2C5C81A6AF /* FBLPromise+Wrap.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Wrap.h"; path = "Sources/FBLPromises/include/FBLPromise+Wrap.h"; sourceTree = ""; }; - E40A521C2C00AA0EF6381122AC4C83DF /* MPConsentChangedReason.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPConsentChangedReason.m; path = MoPubSDK/MPConsentChangedReason.m; sourceTree = ""; }; - E44D7EA70B427A270D855EB2BD8312A7 /* MPBaseNativeAdRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPBaseNativeAdRenderer.h; path = MoPubSDK/NativeAds/MPBaseNativeAdRenderer.h; sourceTree = ""; }; - E4B3E3E6D5DB5738EA1E52DCB71B2BD6 /* MPNativeAdRendererConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAdRendererConfiguration.h; path = MoPubSDK/NativeAds/MPNativeAdRendererConfiguration.h; sourceTree = ""; }; - E54D625912BCBE72468F2F30C4DF38DB /* FIRCLSUnwind.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSUnwind.h; path = Crashlytics/Crashlytics/Unwind/FIRCLSUnwind.h; sourceTree = ""; }; - E5C658F0334DF367919639D1A7F2621E /* FBSDKTooltipView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKTooltipView.h; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKTooltipView.h; sourceTree = ""; }; - E5E1CD7CD4C2BCCBA44E40674DF55788 /* FBSDKDialogConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKDialogConfiguration.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKDialogConfiguration.m; sourceTree = ""; }; - E63DC0B8F8FBE92B8BC8447FC76E3254 /* FIRCLSUserLogging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSUserLogging.h; path = Crashlytics/Crashlytics/Components/FIRCLSUserLogging.h; sourceTree = ""; }; - E643E224BF45E9D982617BB3CF2ABC29 /* FBSDKCrypto.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKCrypto.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Cryptography/FBSDKCrypto.m; sourceTree = ""; }; - E6637C91A10A52F305D082B978E4D217 /* FIRInstallationsIIDTokenStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstallationsIIDTokenStore.h; path = FirebaseInstallations/Source/Library/IIDMigration/FIRInstallationsIIDTokenStore.h; sourceTree = ""; }; - E68CE24BC0C9734851465415E6CE2EAA /* FIRCLSURLSessionUploadTask.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCLSURLSessionUploadTask.m; path = Crashlytics/Crashlytics/FIRCLSURLSession/Tasks/FIRCLSURLSessionUploadTask.m; sourceTree = ""; }; - E6C694E1D06CCBE92BDCB8AD898FA1BF /* FIRLibrary.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRLibrary.h; path = FirebaseCore/Sources/Private/FIRLibrary.h; sourceTree = ""; }; - E6F79EA7748551BBBB3555C90E760894 /* FBSDKTriStateBOOL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKTriStateBOOL.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKTriStateBOOL.m; sourceTree = ""; }; - E705BEB20705B95E2C3F9904E1B624B2 /* FBSDKViewHierarchy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKViewHierarchy.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/ViewHierarchy/FBSDKViewHierarchy.m; sourceTree = ""; }; - E75F617DBF685C797F6E6744916C3454 /* MPStreamAdPlacementData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPStreamAdPlacementData.h; path = MoPubSDK/NativeAds/MPStreamAdPlacementData.h; sourceTree = ""; }; - E77693F20CB5B792E1850247D04663B6 /* MPVideoEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVideoEvent.m; path = MoPubSDK/Internal/VAST/MPVideoEvent.m; sourceTree = ""; }; - E7D9238E7FA56526B97258D477D14255 /* FBLPromise+Recover.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Recover.m"; path = "Sources/FBLPromises/FBLPromise+Recover.m"; sourceTree = ""; }; - E8315EC545323C2671D096C3D966CEEC /* MOPUBExperimentProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MOPUBExperimentProvider.m; path = MoPubSDK/Internal/Utility/MOPUBExperimentProvider.m; sourceTree = ""; }; - E849A31A1E8E0985EFBC42F741F15DC2 /* FBSDKLogo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLogo.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/UI/FBSDKLogo.m; sourceTree = ""; }; - E86B58A88F21F603E8766BB299416831 /* MPCountdownTimerView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPCountdownTimerView.m; path = MoPubSDK/Internal/Common/MPCountdownTimerView.m; sourceTree = ""; }; - E8875809F7FE11F70969D0129432A764 /* MPVASTInline.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVASTInline.m; path = MoPubSDK/Internal/VAST/MPVASTInline.m; sourceTree = ""; }; - E8C26C56422F31C2D61B1C25DF4AA613 /* FIRCLSRecordIdentity.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCLSRecordIdentity.m; path = Crashlytics/Crashlytics/Models/Record/FIRCLSRecordIdentity.m; sourceTree = ""; }; - E8CF3AF5233E6A2A175E5AFEF37FAE3B /* MPVASTResource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVASTResource.h; path = MoPubSDK/Internal/VAST/MPVASTResource.h; sourceTree = ""; }; - E8D545FFFFE049FA46D5668F593133EB /* FIRInstallationsStoredItem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstallationsStoredItem.m; path = FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStoredItem.m; sourceTree = ""; }; - E8D6BD93899EE72E28222BB656F26F1A /* FBSDKLoginError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLoginError.m; path = FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginError.m; sourceTree = ""; }; - E8DC29E027B7602C5C18D1D8ADED3B88 /* FBSDKServerConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKServerConfiguration.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfiguration.h; sourceTree = ""; }; - E8F44486DC896B885C65B4ADC94908D5 /* MRProperty.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MRProperty.m; path = MoPubSDK/Internal/MRAID/MRProperty.m; sourceTree = ""; }; - E93E03EC64D3F40ABB68FB16C4BC738E /* FIRCLSReportManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCLSReportManager.m; path = Crashlytics/Crashlytics/Controllers/FIRCLSReportManager.m; sourceTree = ""; }; - E99BDB290BB56F6C8161CA809DDD9AA7 /* MPDeviceInformation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPDeviceInformation.h; path = MoPubSDK/Internal/MPDeviceInformation.h; sourceTree = ""; }; - E9D7750489A49A62BB4B3740B7E31F66 /* MPServerAdPositioning.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPServerAdPositioning.h; path = MoPubSDK/NativeAds/MPServerAdPositioning.h; sourceTree = ""; }; - E9F2DAD326F9C67B2A7D41EE2353716D /* FBLPromise+Then.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Then.m"; path = "Sources/FBLPromises/FBLPromise+Then.m"; sourceTree = ""; }; - EA5EC1980295B2EDBC90190C7F9168EA /* FIRCLSNetworkResponseHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCLSNetworkResponseHandler.m; path = Crashlytics/Shared/FIRCLSNetworking/FIRCLSNetworkResponseHandler.m; sourceTree = ""; }; - EA5FD4798893B6983BA67539BA02DA02 /* NSHTTPURLResponse+MPAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSHTTPURLResponse+MPAdditions.h"; path = "MoPubSDK/Internal/Utility/Categories/NSHTTPURLResponse+MPAdditions.h"; sourceTree = ""; }; - EA6950905567E2EE57EE50535AF02CDC /* FIRInstallationsAPIService.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstallationsAPIService.m; path = FirebaseInstallations/Source/Library/InstallationsAPI/FIRInstallationsAPIService.m; sourceTree = ""; }; - EA6F8ED96B877C5A88CAEA3FB195C624 /* FirebaseCore.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = FirebaseCore.modulemap; sourceTree = ""; }; - EA71A2D0AD037B5B5FF80843D786F47B /* FBSDKAppLinkUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKAppLinkUtility.h; path = FBSDKCoreKit/FBSDKCoreKit/AppLink/FBSDKAppLinkUtility.h; sourceTree = ""; }; - EA81A87A15F979110FC3A57395BFC28D /* FBSDKDeviceLoginManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKDeviceLoginManager.m; path = FBSDKLoginKit/FBSDKLoginKit/FBSDKDeviceLoginManager.m; sourceTree = ""; }; - EA8C351C1FAEB71A3425C8C9B8998A9C /* GULLoggerCodes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULLoggerCodes.h; path = GoogleUtilities/Common/GULLoggerCodes.h; sourceTree = ""; }; - EB2E50347A2528AEA10822ECDBE3B63D /* GoogleUtilities-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GoogleUtilities-prefix.pch"; sourceTree = ""; }; - EB3DE00E8ED997E2ED90C340D08217CC /* FBSDKLoginError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKLoginError.h; path = FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginError.h; sourceTree = ""; }; - EB7114C8EA7CE8D886301589CED52B5D /* MPMRAIDBannerCustomEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPMRAIDBannerCustomEvent.m; path = MoPubSDK/Internal/MRAID/MPMRAIDBannerCustomEvent.m; sourceTree = ""; }; - EB7F69C758BF2AC1D1D6E6F58060AA00 /* FIRInstallationsStoredAuthToken.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstallationsStoredAuthToken.h; path = FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStoredAuthToken.h; sourceTree = ""; }; - EC11E09F642F377CF91A38FC771C670B /* MPLastResortDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPLastResortDelegate.h; path = MoPubSDK/Internal/Common/MPLastResortDelegate.h; sourceTree = ""; }; - EC55BD6F39BFBB8D16D185B7831D7450 /* MPStopwatch.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPStopwatch.m; path = MoPubSDK/Internal/Utility/MPStopwatch.m; sourceTree = ""; }; - EC840FB3A9B5FD39E877E39F9341CD4F /* MPVideoPlayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVideoPlayer.h; path = MoPubSDK/Internal/VideoPlayer/MPVideoPlayer.h; sourceTree = ""; }; - EC8F4D0BE3B0C192EBA4A93F8887D89F /* FBSDKCoreKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = FBSDKCoreKit.framework; path = FBSDKCoreKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - ED151E2F63278D70A065FE1B011F4ED3 /* FBSDKDeviceViewControllerBase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKDeviceViewControllerBase.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKDeviceViewControllerBase.h; sourceTree = ""; }; - EDAB3590DA5F32B3E4CEED29ED17BBA3 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; - EE25C353A9ECDB4F2E95942A94D58AC1 /* FIRCLSProcess.c */ = {isa = PBXFileReference; includeInIndex = 1; name = FIRCLSProcess.c; path = Crashlytics/Crashlytics/Components/FIRCLSProcess.c; sourceTree = ""; }; - EE420C9E6A86C5FBDF665940971F34FC /* MPBaseNativeAdRenderer+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MPBaseNativeAdRenderer+Internal.h"; path = "MoPubSDK/NativeAds/Internal/MPBaseNativeAdRenderer+Internal.h"; sourceTree = ""; }; - EE6A99FEAD1985536C3FA5E943E2B5BC /* FBLPromise+Always.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Always.m"; path = "Sources/FBLPromises/FBLPromise+Always.m"; sourceTree = ""; }; - EE7455FF496929B6E6E48108C8093444 /* FIRAnalyticsInteropListener.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAnalyticsInteropListener.h; path = Interop/Analytics/Public/FIRAnalyticsInteropListener.h; sourceTree = ""; }; - EE81F6AFB8D52A4A7042B35A0F4AA2C1 /* FacebookNativeCustomEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FacebookNativeCustomEvent.h; path = FacebookAudienceNetwork/FacebookNativeCustomEvent.h; sourceTree = ""; }; - EE866B09074DCE61CA22189AF75F00C4 /* MPConsentManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPConsentManager.m; path = MoPubSDK/Internal/MPConsentManager.m; sourceTree = ""; }; - EEF950BD1E01A501C3B394319430E8EE /* MPProgressOverlayView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPProgressOverlayView.h; path = MoPubSDK/Internal/Common/MPProgressOverlayView.h; sourceTree = ""; }; - EF0CFCC618B66B610D84E7454BF2233A /* MPViewabilityAdapterAvid.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPViewabilityAdapterAvid.m; path = MoPubSDK/Viewability/Avid/MPViewabilityAdapterAvid.m; sourceTree = ""; }; - EF26C249AA0D11F4BEA973C41B466C66 /* FIRCoreDiagnosticsInterop.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCoreDiagnosticsInterop.h; path = Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsInterop.h; sourceTree = ""; }; - EF3AB43BC7E6A650CBC5404AA0F56884 /* FIRInstallationsHTTPError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstallationsHTTPError.h; path = FirebaseInstallations/Source/Library/Errors/FIRInstallationsHTTPError.h; sourceTree = ""; }; - EF5186FFDD24F54758399C4BBC022D2C /* FIRCLSContext.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSContext.h; path = Crashlytics/Crashlytics/Components/FIRCLSContext.h; sourceTree = ""; }; - EF5B8771B5E95DC80DB1CACFEFF994DB /* MPVASTTrackingEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVASTTrackingEvent.m; path = MoPubSDK/Internal/VAST/MPVASTTrackingEvent.m; sourceTree = ""; }; - EFE8C29F86FFF4E907E7D944C96D24AD /* FirebaseAnalytics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FirebaseAnalytics.framework; path = Frameworks/FirebaseAnalytics.framework; sourceTree = ""; }; - EFF22E7B5243FA1990953BC368634C85 /* FIRCLSInternalReport.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCLSInternalReport.m; path = Crashlytics/Crashlytics/Models/FIRCLSInternalReport.m; sourceTree = ""; }; - EFF66D538C1AF71FC5D1948D532C3843 /* cct.nanopb.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = cct.nanopb.h; path = GoogleDataTransportCCTSupport/GDTCCTLibrary/Protogen/nanopb/cct.nanopb.h; sourceTree = ""; }; - F00B68518FF6DF077950DFBF0E728B52 /* FBSDKErrorReport.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKErrorReport.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Instrument/ErrorReport/FBSDKErrorReport.m; sourceTree = ""; }; - F02C33C186B41FAEFC9375CC7FAF7899 /* GDTCORDataFuture.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORDataFuture.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCORDataFuture.h; sourceTree = ""; }; - F037808B52C3604C55C12D4754D11EC9 /* AVKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/AVKit.framework; sourceTree = DEVELOPER_DIR; }; - F09341822A2A373E7AE823104DE76BAC /* MPGeolocationProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPGeolocationProvider.m; path = MoPubSDK/Internal/Utility/MPGeolocationProvider.m; sourceTree = ""; }; - F0A1F26D38C86D0DE8A04DD8906C8327 /* FirebaseCoreDiagnostics.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = FirebaseCoreDiagnostics.modulemap; sourceTree = ""; }; - F0FD980AEFBB5FCA43E9B93DC31B6417 /* MPHTMLInterstitialViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPHTMLInterstitialViewController.h; path = MoPubSDK/Internal/HTML/MPHTMLInterstitialViewController.h; sourceTree = ""; }; - F10E1CB55F68E7A3E8CF444567FC86BF /* FIRCLSUnwind_arm.c */ = {isa = PBXFileReference; includeInIndex = 1; name = FIRCLSUnwind_arm.c; path = Crashlytics/Crashlytics/Unwind/FIRCLSUnwind_arm.c; sourceTree = ""; }; - F125AD9DE4885AF2EC70BD8CFAD862E5 /* FIRInstallationsHTTPError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstallationsHTTPError.m; path = FirebaseInstallations/Source/Library/Errors/FIRInstallationsHTTPError.m; sourceTree = ""; }; - F146C0F3C905A86A8C627E45FA51B555 /* FBSDKPaymentObserver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKPaymentObserver.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/FBSDKPaymentObserver.m; sourceTree = ""; }; - F161CBD33AC7BA5D9969DDA2175F8522 /* MPInterstitialAdController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPInterstitialAdController.m; path = MoPubSDK/MPInterstitialAdController.m; sourceTree = ""; }; - F1A5A995676DFF976D2EF676371136C3 /* FBSDKProfilePictureView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKProfilePictureView.h; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKProfilePictureView.h; sourceTree = ""; }; - F1C9850B11896325FFFEEED95182C025 /* FIRInstallationsLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRInstallationsLogger.h; path = FirebaseInstallations/Source/Library/FIRInstallationsLogger.h; sourceTree = ""; }; - F2245E83269AFA0BCDB6A1697D1EC32F /* MPNativeAdRenderingImageLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAdRenderingImageLoader.h; path = MoPubSDK/NativeAds/MPNativeAdRenderingImageLoader.h; sourceTree = ""; }; - F25663286D10E1661BD1B44E6CB75BC7 /* MPNativeCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeCache.h; path = MoPubSDK/Internal/Utility/MPNativeCache.h; sourceTree = ""; }; - F25A88845B1CCF98DAC77C9E9EB2FCB3 /* GDTCORRegistrar_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GDTCORRegistrar_Private.h; path = GoogleDataTransport/GDTCORLibrary/Private/GDTCORRegistrar_Private.h; sourceTree = ""; }; - F2A77723C64C4401E3DDFADE708D5301 /* FIRCLSSymbolicationOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSSymbolicationOperation.h; path = Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSSymbolicationOperation.h; sourceTree = ""; }; - F2DE8DACF699E98BA9B8103D69297896 /* FBSDKCoreKit.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FBSDKCoreKit.release.xcconfig; sourceTree = ""; }; - F2EA102AC389AEB691486FEE64D1401F /* FIRCLSDataParsing.c */ = {isa = PBXFileReference; includeInIndex = 1; name = FIRCLSDataParsing.c; path = Crashlytics/Crashlytics/Unwind/Dwarf/FIRCLSDataParsing.c; sourceTree = ""; }; - F2EA64EFD0B3671042D6540CE86F7B17 /* MPContentBlocker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPContentBlocker.h; path = MoPubSDK/Internal/HTML/MPContentBlocker.h; sourceTree = ""; }; - F2ED25B46717EE76477932E591AF483B /* FBLPromise+Recover.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Recover.h"; path = "Sources/FBLPromises/include/FBLPromise+Recover.h"; sourceTree = ""; }; - F3066CF07AADE233E03777E43150C416 /* FIROptionsInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIROptionsInternal.h; path = FirebaseCore/Sources/Private/FIROptionsInternal.h; sourceTree = ""; }; - F385FA69C6AA0F08094D870EBF86E605 /* FBSDKCrashHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKCrashHandler.m; path = FBSDKCoreKit/FBSDKCoreKit/Basics/Instrument/FBSDKCrashHandler.m; sourceTree = ""; }; - F3C28E1208404167A9E17A14917A408E /* FBSDKSwizzler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKSwizzler.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKSwizzler.h; sourceTree = ""; }; - F3CA552ABDEE14EF06B446CFF6DBA4F8 /* FBSDKCodelessParameterComponent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKCodelessParameterComponent.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKCodelessParameterComponent.h; sourceTree = ""; }; - F3D7C4712BE4F7B21E186C453B5DCF58 /* FBRewardedVideoAdBridge.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBRewardedVideoAdBridge.h; path = Static/FBAudienceNetwork.framework/Headers/FBRewardedVideoAdBridge.h; sourceTree = ""; }; - F3E92ACDE25764C4472EB3324FB7AB23 /* MPXMLParser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPXMLParser.h; path = MoPubSDK/Internal/Common/MPXMLParser.h; sourceTree = ""; }; - F420A294AE0D493C65C20AC57A9A26D3 /* MPUnmutedBtn@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MPUnmutedBtn@3x.png"; path = "MoPubSDK/Resources/MPUnmutedBtn@3x.png"; sourceTree = ""; }; - F438283F7F2D105FBFB980A2DB1EFB1F /* MPGlobal.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPGlobal.m; path = MoPubSDK/Internal/Utility/MPGlobal.m; sourceTree = ""; }; - F46EBEB4E9EF87BD238F499E2FB95E93 /* MPAdTargeting.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPAdTargeting.h; path = MoPubSDK/MPAdTargeting.h; sourceTree = ""; }; - F48765357736CC024670A593558875CF /* FBSDKEventBinding.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKEventBinding.m; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/Codeless/FBSDKEventBinding.m; sourceTree = ""; }; - F48EAC38BEFDD31749021EC60E3886CB /* GULAppEnvironmentUtil.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULAppEnvironmentUtil.h; path = GoogleUtilities/Environment/Private/GULAppEnvironmentUtil.h; sourceTree = ""; }; - F4CB01AA9AD13CB18A92D05BE1D130DA /* FBLPromise+Race.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Race.h"; path = "Sources/FBLPromises/include/FBLPromise+Race.h"; sourceTree = ""; }; - F4FFDDBF7363DD45555E0BD0735D0F31 /* FBAdUtilityBridge.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBAdUtilityBridge.h; path = Static/FBAudienceNetwork.framework/Headers/FBAdUtilityBridge.h; sourceTree = ""; }; - F52AD2A3D0C76429C760F8CA3F01429D /* crashlytics.nanopb.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = crashlytics.nanopb.h; path = Crashlytics/Protogen/nanopb/crashlytics.nanopb.h; sourceTree = ""; }; - F538607239E8624F6F932EB08DC4BF85 /* MPTableViewAdPlacer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPTableViewAdPlacer.h; path = MoPubSDK/NativeAds/MPTableViewAdPlacer.h; sourceTree = ""; }; - F54B98000116B87B8256065D8FCB25F6 /* FIRCLSUnwind_arch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSUnwind_arch.h; path = Crashlytics/Crashlytics/Unwind/FIRCLSUnwind_arch.h; sourceTree = ""; }; - F5735015AE6CF8B64CB2E93917F4BDD1 /* MPBLogLevel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPBLogLevel.h; path = MoPubSDK/Logging/MPBLogLevel.h; sourceTree = ""; }; - F5875671B8493083F1CEF086C2DDFC65 /* MPVASTInline.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVASTInline.h; path = MoPubSDK/Internal/VAST/MPVASTInline.h; sourceTree = ""; }; - F5CEF86EE487DF24CB3CAA8E122CB110 /* MPAdConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPAdConfiguration.m; path = MoPubSDK/Internal/Common/MPAdConfiguration.m; sourceTree = ""; }; - F5FF22883B8A0858CB0F22F845D01F06 /* FBSDKDeviceRequestsHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKDeviceRequestsHelper.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKDeviceRequestsHelper.h; sourceTree = ""; }; - F62857D1469FF9547E7F14F980C10127 /* FBSDKStandaloneModel.hpp */ = {isa = PBXFileReference; includeInIndex = 1; name = FBSDKStandaloneModel.hpp; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/ML/FBSDKStandaloneModel.hpp; sourceTree = ""; }; - F640DC969DFCC5E65015B54EFCE0D2C7 /* FIRAEvent+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FIRAEvent+Internal.h"; path = "Crashlytics/Crashlytics/Helpers/FIRAEvent+Internal.h"; sourceTree = ""; }; - F64CBDEFB07B9B6EC584F4DABA5DA43D /* FIRInstallationsStoredAuthToken.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRInstallationsStoredAuthToken.m; path = FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStoredAuthToken.m; sourceTree = ""; }; - F6C66B2DC50346BD83F7B30AD6857ADE /* FIRCoreDiagnosticsData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCoreDiagnosticsData.h; path = Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsData.h; sourceTree = ""; }; - F6D4B67F4E55C11CAF1B9B4800F976A7 /* MPVASTDurationOffset.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVASTDurationOffset.m; path = MoPubSDK/Internal/VAST/MPVASTDurationOffset.m; sourceTree = ""; }; - F6EB75996E877C2CCF4A028AB758ABCB /* FBSDKLoginCompletion.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKLoginCompletion.m; path = FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKLoginCompletion.m; sourceTree = ""; }; - F6EF27B3A8A0ED713CBA81294610C639 /* FirebaseCoreDiagnostics.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FirebaseCoreDiagnostics.debug.xcconfig; sourceTree = ""; }; - F6FBAD65A0190DFEAC83A97B5BA65B49 /* MPAnalyticsTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPAnalyticsTracker.m; path = MoPubSDK/Internal/Utility/MPAnalyticsTracker.m; sourceTree = ""; }; - F72A50E89773ACAEB727FC1A2A737083 /* MoPub-FacebookAudienceNetwork-Adapters.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "MoPub-FacebookAudienceNetwork-Adapters.debug.xcconfig"; sourceTree = ""; }; - F7606C43D56B01B5133A5FB34783E93D /* FBSDKMetadataIndexer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKMetadataIndexer.h; path = FBSDKCoreKit/FBSDKCoreKit/AppEvents/Internal/AAM/FBSDKMetadataIndexer.h; sourceTree = ""; }; - F78641950FCE3D8AA36E5E33D27DED54 /* FIRErrors.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRErrors.h; path = FirebaseCore/Sources/Private/FIRErrors.h; sourceTree = ""; }; - F78AB3B1BC85252B65E595DFCB083698 /* NSDictionary+MPAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSDictionary+MPAdditions.h"; path = "MoPubSDK/Internal/Utility/Categories/NSDictionary+MPAdditions.h"; sourceTree = ""; }; - F7913CBEB5C8AE67AE965E179718578C /* FBSDKUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKUtility.m; path = FBSDKCoreKit/FBSDKCoreKit/FBSDKUtility.m; sourceTree = ""; }; - F798A8639B7D8CD9B4137A1D6E6A51E6 /* MPBannerCustomEventAdapter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPBannerCustomEventAdapter.h; path = MoPubSDK/Internal/Banners/MPBannerCustomEventAdapter.h; sourceTree = ""; }; - F7B789E7057E014FE0B42D76AFB2E9DB /* MPRewardedVideoCustomEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPRewardedVideoCustomEvent.m; path = MoPubSDK/RewardedVideo/MPRewardedVideoCustomEvent.m; sourceTree = ""; }; - F7C8334725EBCC143A4D393115BC0C68 /* FBAdBridgeCommon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBAdBridgeCommon.h; path = Static/FBAudienceNetwork.framework/Headers/FBAdBridgeCommon.h; sourceTree = ""; }; - F7CCD25B0D2AB19234EE1BF816BC753A /* pb_common.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pb_common.h; sourceTree = ""; }; - F7CD18D3CEA07372EE793CFF787FB564 /* GULKeychainUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GULKeychainUtils.h; path = GoogleUtilities/Environment/Private/GULKeychainUtils.h; sourceTree = ""; }; - F7E3E73FCA9BE81C3371693ED3B7C8CE /* FIRCLSFile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSFile.h; path = Crashlytics/Crashlytics/Helpers/FIRCLSFile.h; sourceTree = ""; }; - F7EF0BD63C84A985A8D40334BD9C845C /* MPError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPError.h; path = MoPubSDK/Internal/Utility/MPError.h; sourceTree = ""; }; - F83F6485920D620BF528120D2F66BBD4 /* FirebaseCrashlytics-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "FirebaseCrashlytics-Info.plist"; sourceTree = ""; }; - F85C177F3787114EA6BA11CB3BEAC2D0 /* FBSDKServerConfiguration+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKServerConfiguration+Internal.h"; path = "FBSDKCoreKit/FBSDKCoreKit/Internal/ServerConfiguration/FBSDKServerConfiguration+Internal.h"; sourceTree = ""; }; - F89E5E9C4209BF914E87A8D594320251 /* MPNativeView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPNativeView.m; path = MoPubSDK/NativeAds/Internal/MPNativeView.m; sourceTree = ""; }; - F8D29732A73F9BC51636E7AB7784CF5F /* FIRCLSCrashedMarkerFile.c */ = {isa = PBXFileReference; includeInIndex = 1; name = FIRCLSCrashedMarkerFile.c; path = Crashlytics/Crashlytics/Components/FIRCLSCrashedMarkerFile.c; sourceTree = ""; }; - F9240820F4BBDCCE5249EE20F406898E /* MPBannerAdManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPBannerAdManager.m; path = MoPubSDK/Internal/Banners/MPBannerAdManager.m; sourceTree = ""; }; - F92BE1CBFCF07492C50DFF3A72DBB794 /* FBSDKCoreKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FBSDKCoreKit-umbrella.h"; sourceTree = ""; }; - F92E93154C08880AB99F41FD106DCF0C /* MPVASTConstant.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVASTConstant.h; path = MoPubSDK/Internal/VAST/MPVASTConstant.h; sourceTree = ""; }; - F9354F9DFA7253DDE0B54993FD381B01 /* FBSDKDeviceLoginManagerResult+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBSDKDeviceLoginManagerResult+Internal.h"; path = "FBSDKLoginKit/FBSDKLoginKit/Internal/FBSDKDeviceLoginManagerResult+Internal.h"; sourceTree = ""; }; - F955E33F30896085B3081ADCEAB5F6AF /* GoogleDataTransport-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "GoogleDataTransport-dummy.m"; sourceTree = ""; }; - F97451120A43B3064075411F0B3D18FF /* MPVideoPlayerContainerView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVideoPlayerContainerView.h; path = MoPubSDK/Internal/VideoPlayer/MPVideoPlayerContainerView.h; sourceTree = ""; }; - F99A2B4F906DB59BFC0E6D94E541341C /* FIRCLSCrashedMarkerFile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSCrashedMarkerFile.h; path = Crashlytics/Crashlytics/Components/FIRCLSCrashedMarkerFile.h; sourceTree = ""; }; - F99D9AB50EAAF16149813029F81B0429 /* FBSDKImageDownloader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSDKImageDownloader.h; path = FBSDKCoreKit/FBSDKCoreKit/Internal/FBSDKImageDownloader.h; sourceTree = ""; }; - F9B488FFB174D39D23CFF939CF53957B /* MPVASTConstant.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVASTConstant.m; path = MoPubSDK/Internal/VAST/MPVASTConstant.m; sourceTree = ""; }; - F9C6AF6FE84006B95A8E671446098ABF /* FirebaseCoreDiagnostics-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "FirebaseCoreDiagnostics-Info.plist"; sourceTree = ""; }; - F9CC2E64A156A09363C34CD82E9994FD /* Pods-MAPS.ME.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-MAPS.ME.modulemap"; sourceTree = ""; }; - FA9F4355D52C34E7D21046BFFC2C3CD6 /* FIRCrashlytics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCrashlytics.h; path = Crashlytics/Crashlytics/Public/FIRCrashlytics.h; sourceTree = ""; }; - FADE735BAE6A83A7260221701A0BB022 /* MPConsentChangedNotification.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPConsentChangedNotification.m; path = MoPubSDK/MPConsentChangedNotification.m; sourceTree = ""; }; - FB20CA01A9BECB10E7E15F3E90D5C2B2 /* FIRCLSReportUploader_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRCLSReportUploader_Private.h; path = Crashlytics/Crashlytics/Controllers/FIRCLSReportUploader_Private.h; sourceTree = ""; }; - FB3C6A112211CDA7085A37214E8C6C47 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/Security.framework; sourceTree = DEVELOPER_DIR; }; - FB54EFA643EFE65F8B93F4ABD776A9DA /* MPRewardedVideoReward.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPRewardedVideoReward.m; path = MoPubSDK/RewardedVideo/MPRewardedVideoReward.m; sourceTree = ""; }; - FC1D22ECA07EE837606E81D89589039D /* FIRCLSDwarfUnwind.c */ = {isa = PBXFileReference; includeInIndex = 1; name = FIRCLSDwarfUnwind.c; path = Crashlytics/Crashlytics/Unwind/Dwarf/FIRCLSDwarfUnwind.c; sourceTree = ""; }; - FC1FB84E26BD003635B679C7860135AF /* FIRCLSSymbolicationOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCLSSymbolicationOperation.m; path = Crashlytics/Crashlytics/Operations/Symbolication/FIRCLSSymbolicationOperation.m; sourceTree = ""; }; - FC57614E3243EC7C555920CC8C93AEA4 /* PromisesObjC-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "PromisesObjC-umbrella.h"; sourceTree = ""; }; - FC6155FF94FD0991843109C2BAD27684 /* MOPUBNativeVideoAdAdapter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MOPUBNativeVideoAdAdapter.h; path = MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoAdAdapter.h; sourceTree = ""; }; - FCA9BFB46C6242210AC9CC24ACD94D78 /* FBSDKCrashShield.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSDKCrashShield.m; path = FBSDKCoreKit/FBSDKCoreKit/Internal/Instrument/CrashReport/FBSDKCrashShield.m; sourceTree = ""; }; - FCE764C2C52E5E7A88ED6152053E2DB8 /* FIRComponent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRComponent.h; path = FirebaseCore/Sources/Private/FIRComponent.h; sourceTree = ""; }; - FD01AB4CD97581F7758F33D1D209DC26 /* Flurry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Flurry.h; path = Flurry/Flurry.h; sourceTree = ""; }; - FD10F7B586B98E2C85696FE5DDB62D69 /* MOPUBActivityIndicatorView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MOPUBActivityIndicatorView.h; path = MoPubSDK/NativeVideo/Internal/MOPUBActivityIndicatorView.h; sourceTree = ""; }; - FD51692D8F87689DC48162E4B7AE4113 /* FIRCLSFABAsyncOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRCLSFABAsyncOperation.m; path = Crashlytics/Shared/FIRCLSOperation/FIRCLSFABAsyncOperation.m; sourceTree = ""; }; - FE1B5D53750F5F9274805FA96C0B6AD7 /* FBSDKLoginKit.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FBSDKLoginKit.release.xcconfig; sourceTree = ""; }; - FE7D6306C39968ED9DAF5FC61B68E737 /* GDTCCTNanopbHelpers.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCCTNanopbHelpers.m; path = GoogleDataTransportCCTSupport/GDTCCTLibrary/GDTCCTNanopbHelpers.m; sourceTree = ""; }; - FE938B76DD92649E97E17C2D9553D49B /* GDTCORConsoleLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GDTCORConsoleLogger.m; path = GoogleDataTransport/GDTCORLibrary/GDTCORConsoleLogger.m; sourceTree = ""; }; - FEBA4164304A01B6DD5AABD187C7917D /* MPHTMLInterstitialViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPHTMLInterstitialViewController.m; path = MoPubSDK/Internal/HTML/MPHTMLInterstitialViewController.m; sourceTree = ""; }; - FFBEE32B8EFD8D442038F94B46B33B01 /* MPClosableView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPClosableView.m; path = MoPubSDK/Internal/Common/MPClosableView.m; sourceTree = ""; }; + BCFD91FCC4D32901C2DC541CA8285D3C /* Pods-MAPS.ME-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-MAPS.ME-dummy.m"; sourceTree = ""; }; + C13DC30128F635797757F6D7CD91548C /* Pods-MAPS.ME.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-MAPS.ME.modulemap"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 003CCDF7D19521FB1907F2B8451F70FE /* Frameworks */ = { + C3C33C469B4EB3F2159A21D63574D298 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 97CAA9C5F7400E54F767AB0AE9D0CDC4 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1DD2F3CF9DADFC6ECB59E6E3F3C28185 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 79AA19D940CAA02F79AE5694BF7F5F94 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 30926F2D2E332987C660E582A02940E7 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 4EDC7FCD361905DB2545D0664967B78E /* Foundation.framework in Frameworks */, - A20422848E32BDFF28B4C729C309C35B /* Security.framework in Frameworks */, - 1D43A208D0BBDC7497886C475F618639 /* SystemConfiguration.framework in Frameworks */, - 77B447E123E813C84556EB8FCD2D0F7E /* UIKit.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 410A73630847FCC52C1CEF5B8D0AB643 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - DE320C598631BAB9557F38BC8123D664 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 4BDD2A07B4A972CD3139523FDEA60D92 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - E82630672D31CAE5E235753E2DDEBD01 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 51BBBAC7BD2B744AC10BAE8257E4898C /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 4157656E1DB7025BD53AB6149A76981E /* FBLPromises.framework in Frameworks */, - 331A0BC56AB893BFCE4E79373B3DC70E /* Foundation.framework in Frameworks */, - 24638D87CCC0A9A7FA3CCCD0F7AF50A6 /* Security.framework in Frameworks */, - 46F67DFAA8428ABBFE9768A6BCCF5967 /* SystemConfiguration.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 652A0B334A33CC46D696AC26FF111CB2 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 6A7BF400E4250A049E25364F79CF6901 /* FBSDKCoreKit.framework in Frameworks */, - B60189E62C3B6175ED602468C4274FCB /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 76637788990B469F5E8F96BB541C0809 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 689B499A61CE56A6BC195C33A9C1831A /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 771275E5276D9F7C9B00DDB6A5B072D8 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 5D6CEE38B94BBFF999ED3D7919DFB2B6 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8B4660A05DD6834E5510CFA8EDA850F9 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 1426509CE281993B4D1BB5EF9B5D48EB /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8FCFD681E9E9ED349C6B6FAB4ED7F59C /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 8461458B1E56CB89C1142F1E545D5F86 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 9F8CD5A799DCFBF96BC575C837264F8E /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - C143341EB6409B4B50EA55674554077A /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - AB691FEA424A04BD1BB3E4E889498D8A /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - CE7642E38BAC4F57A0C1BF0DF1E3435D /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - B6AEB546EACB197D75006A5D2D856BBF /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 01CC04B16416BF9AB55B0765763EDEA4 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - F75393A0F4468CBE0C87C2826ABBCD39 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - AF79B76A4BDEB6319CE95D7420FC8433 /* AVFoundation.framework in Frameworks */, - 03D6622B07CD2E50CD45BE0B22856D66 /* AVKit.framework in Frameworks */, - FD4B647BC72E3E3BFD1A6172C2B8BC9A /* CoreGraphics.framework in Frameworks */, - 3B0DB1AF0CC8E4D058BC7C8D5295601F /* CoreLocation.framework in Frameworks */, - 3F225F73CFF5A6DCC8EABF5661364D42 /* CoreMedia.framework in Frameworks */, - 6814C773B652FBF6C1915600E884974A /* CoreTelephony.framework in Frameworks */, - 75BC41719002813DB777F2FE9572A880 /* Foundation.framework in Frameworks */, - B14978598D0A5EE568385265662B9683 /* MediaPlayer.framework in Frameworks */, - 47C391F4DD047F13D7D8FFA0ADA73524 /* QuartzCore.framework in Frameworks */, - 269625BB93E40DB8767A20C928637587 /* SafariServices.framework in Frameworks */, - 8838ACE5D312457BF5812338F16CDF43 /* SystemConfiguration.framework in Frameworks */, - 9F6624869FE7051444D2571DACD717DA /* UIKit.framework in Frameworks */, + FDBD600E5F63C60CBA4F7D2D186D1F97 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 03B355A12BD3BD2DD0878E414064BFD1 /* Flurry-iOS-SDK */ = { + 0F5AA35DBA2727BE47B13E8335A097E9 /* Products */ = { isa = PBXGroup; children = ( - E757740E1432653B0E1307DE6CEDEA63 /* FlurrySDK */, - 8D03BDE90A76CFCD6FDE7AD7FED744F3 /* Support Files */, - ); - name = "Flurry-iOS-SDK"; - path = "Flurry-iOS-SDK"; - sourceTree = ""; - }; - 08D2D768F4AB8FBA4BF7CDEDC9D03588 /* Pods-MAPS.ME */ = { - isa = PBXGroup; - children = ( - F9CC2E64A156A09363C34CD82E9994FD /* Pods-MAPS.ME.modulemap */, - AD2254ED5E1056D4AC2BF9A9F57A51B6 /* Pods-MAPS.ME-acknowledgements.markdown */, - 20C31D59DA82361E25F193FABD96B204 /* Pods-MAPS.ME-acknowledgements.plist */, - 9AAD6432F9CBA054F5118361E3C552BC /* Pods-MAPS.ME-dummy.m */, - 90429778259497EBA2033D42CA835743 /* Pods-MAPS.ME-frameworks.sh */, - B6EEA83F1BE9333EC15AFF3BA55BDD4B /* Pods-MAPS.ME-Info.plist */, - 943F5E0AB0E3CD68128746521DD14872 /* Pods-MAPS.ME-umbrella.h */, - D7C4B4719E036C1B09595417C7D8ACA6 /* Pods-MAPS.ME.debug.xcconfig */, - 498A16D85D9C972689BF42A44AABE26F /* Pods-MAPS.ME.production full.xcconfig */, - 9085B8A32AFF10675A22486994BEAC12 /* Pods-MAPS.ME.release.xcconfig */, - ); - name = "Pods-MAPS.ME"; - path = "Target Support Files/Pods-MAPS.ME"; - sourceTree = ""; - }; - 09B4074386911B9369B8592F1647B2A2 /* MethodSwizzler */ = { - isa = PBXGroup; - children = ( - 7130D7140C6FE9C846F6C6FAA911B28B /* GULOriginalIMPConvenienceMacros.h */, - 98758B4440DACEE176EBB569561C60A3 /* GULSwizzler.h */, - 2745A5C1782FC07C81BF936E118AD664 /* GULSwizzler.m */, - ); - name = MethodSwizzler; - sourceTree = ""; - }; - 0BBC592DDA72493E2D5FCE571D37FE4B /* GoogleAppMeasurement */ = { - isa = PBXGroup; - children = ( - C818CC2E4650B58970671A9DD1A2E037 /* Frameworks */, - BE1B51DAC7B9284C5883D4E4D6E315B5 /* Support Files */, - ); - name = GoogleAppMeasurement; - path = GoogleAppMeasurement; - sourceTree = ""; - }; - 0EE40377755F56530C56B8A790E4D360 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 1D576253627FD030630415E9641136BC /* FBLPromises.framework */, - 8E520B664B861CE7D881084CD6886827 /* FBSDKCoreKit.framework */, - 5B54876C00EA77D1F5D15B163638391D /* iOS */, - ); - name = Frameworks; - sourceTree = ""; - }; - 122F183A68FFD3CEE2C92F5D7194CCC9 /* FirebaseCoreDiagnostics */ = { - isa = PBXGroup; - children = ( - 3A8E552AF5216AF8FBA9B2F8F702D7D8 /* FIRCoreDiagnostics.m */, - 7C9D123AD8272A1886DBF0DCC00A81D2 /* FIRCoreDiagnosticsData.h */, - EF26C249AA0D11F4BEA973C41B466C66 /* FIRCoreDiagnosticsInterop.h */, - D2A00557E86AB985431B6EBE76C05CE9 /* firebasecore.nanopb.c */, - 4778B23B1DEF6428078620DC0585878F /* firebasecore.nanopb.h */, - EC79073C077DD69464BF1EA67DE04F1D /* Support Files */, - ); - name = FirebaseCoreDiagnostics; - path = FirebaseCoreDiagnostics; - sourceTree = ""; - }; - 158FAEE637459190674181E91CD16B7C /* Frameworks */ = { - isa = PBXGroup; - children = ( - 85F3D4B1175DCF84CDF42C580CB4751F /* MPUBMoatMobileAppKit.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - 189E965C2059E6F9E5702F00FA73CF46 /* FirebaseCrashlytics */ = { - isa = PBXGroup; - children = ( - D98750936C51805AF7CAA9DF93448CB8 /* crashlytics.nanopb.c */, - F52AD2A3D0C76429C760F8CA3F01429D /* crashlytics.nanopb.h */, - 226DBDB4DFD0FA7A2D6E839D7356062C /* dwarf.h */, - 540D12E9A767E368AD86794E40D5F5C1 /* FIRAEvent.h */, - F640DC969DFCC5E65015B54EFCE0D2C7 /* FIRAEvent+Internal.h */, - 4BAB8D0089A37D166083541E36EA4365 /* FIRAEvent+Internal.m */, - 289B33331AB4638DFCA3183C947B8B5C /* FIRAValue.h */, - B8F7CE1222CBE0D8992328283E5D8D09 /* FIRCLSAllocate.c */, - 7F08BB4B4FFCD21F2A613D352040F630 /* FIRCLSAllocate.h */, - 9AD06EB7CED79269EC3F40892B1D7811 /* FIRCLSApplication.h */, - CA5DDA7151A4B4E9A874A13E7B3E549A /* FIRCLSApplication.m */, - A256A56841F513C5029739527A8AFFF1 /* FIRCLSApplicationIdentifierModel.h */, - C7EF157EA0534F6AEF06AE8D688C3909 /* FIRCLSApplicationIdentifierModel.m */, - 5C0AB88CEB3D0CED2829B2607B2CE30C /* FIRCLSAsyncOperation.h */, - B58AB6FD4EB1F31BC2C06FC63B02F33F /* FIRCLSAsyncOperation.m */, - 47F5580E8A5E5A2867781ED59A8D0F03 /* FIRCLSAsyncOperation_Private.h */, - 362680E355591DB18D19B50066F7F436 /* FIRCLSBinaryImage.h */, - 4305A38DEDC7EB019C86857376B89D52 /* FIRCLSBinaryImage.m */, - 8D01C3C7238B2B2AD7B2A2AB9A7959E2 /* FIRCLSByteUtility.h */, - 0B9850FA2AA2C7CC3026D043CAAE83A0 /* FIRCLSByteUtility.m */, - 85F31C39518A8353AF0A3D64ED99CA1F /* FIRCLSCodeMapping.h */, - 2AB4915F58E1489715FFD526F8852E21 /* FIRCLSCodeMapping.m */, - E2A49853ADD371D4D590021CD3590E3B /* FIRCLSCompactUnwind.c */, - 5F8764A5E1B997C46F7CE597CFC67311 /* FIRCLSCompactUnwind.h */, - 957C1C498CCC51E03EA45A811EDE742C /* FIRCLSCompactUnwind_Private.h */, - 4601BE7DAE01ED64AFD3E17A5AC48059 /* FIRCLSCompoundOperation.h */, - 3D1971221F882711FE5F24EC6B6155E9 /* FIRCLSCompoundOperation.m */, - 5A01FDA228A3803EEC50F531049A7885 /* FIRCLSConstants.h */, - 0C28121742F9E22DFC46E12927EE6877 /* FIRCLSConstants.m */, - EF5186FFDD24F54758399C4BBC022D2C /* FIRCLSContext.h */, - 9945E799861FBFB5527CD163653D0FF0 /* FIRCLSContext.m */, - F8D29732A73F9BC51636E7AB7784CF5F /* FIRCLSCrashedMarkerFile.c */, - F99A2B4F906DB59BFC0E6D94E541341C /* FIRCLSCrashedMarkerFile.h */, - 81564D80E709216F4506C39E82682511 /* FIRCLSDataCollectionArbiter.h */, - 92ECF2597AD03253C6B2BA7DB605A4F3 /* FIRCLSDataCollectionArbiter.m */, - B05757CB550DB88CD3A2586C66D30485 /* FIRCLSDataCollectionToken.h */, - BB8BEBDDCC541B671A9F662CEC6EFD04 /* FIRCLSDataCollectionToken.m */, - F2EA102AC389AEB691486FEE64D1401F /* FIRCLSDataParsing.c */, - 50FC5DFC998F5A83FFFBCE84EF3D0981 /* FIRCLSDataParsing.h */, - 941962D43D8ED080A252FC2C1F4DCB16 /* FIRCLSDefines.h */, - 7802FB3BA994697979ED28AC90D75431 /* FIRCLSDemangleOperation.h */, - 8EEA761BA7B8496BB63A2A3F938E7559 /* FIRCLSDemangleOperation.mm */, - 10F706CC781CCDBDCC9F2E865EBC6F42 /* FIRCLSDownloadAndSaveSettingsOperation.h */, - B31D84E24524DF5682A267BFE7DA628D /* FIRCLSDownloadAndSaveSettingsOperation.m */, - DE9C4BDAB5CE2D90D7EB9D366FBE1CCC /* FIRCLSdSYM.h */, - 3371B68B59A8A529EA0CAC88634B8CE3 /* FIRCLSdSYM.m */, - 9EBA8DA24D4260839318D78EC9359684 /* FIRCLSDwarfExpressionMachine.c */, - E2A214B17544E79689BA872946E3B1B5 /* FIRCLSDwarfExpressionMachine.h */, - FC1D22ECA07EE837606E81D89589039D /* FIRCLSDwarfUnwind.c */, - CDED4637A3F98FF684759656A4DA142E /* FIRCLSDwarfUnwind.h */, - 3A2B0638732A40ECC40426FA358663BE /* FIRCLSDwarfUnwindRegisters.h */, - 6ED1EC58452428DF46CEECD96173EC0E /* FIRCLSException.h */, - 59337EB6923721D465B4B5D0661F7FC5 /* FIRCLSException.mm */, - 6FEAF1A68C1B40539C2535E220D4AEF3 /* FIRCLSExecutionIdentifierModel.h */, - B6FF811D56B4E006CA31BA3A0AEFEA54 /* FIRCLSExecutionIdentifierModel.m */, - BD256BA47553A5AACF835AC696D625E3 /* FIRCLSFABAsyncOperation.h */, - FD51692D8F87689DC48162E4B7AE4113 /* FIRCLSFABAsyncOperation.m */, - 09CCCF25AE8724829255006464435D7B /* FIRCLSFABAsyncOperation_Private.h */, - BEE316A53B3612679CD1CA946A18D380 /* FIRCLSFABHost.h */, - E39716E612F58E64CA25C63391653747 /* FIRCLSFABHost.m */, - BDA097AE57FC5E4252FA9E163E6EACB7 /* FIRCLSFABNetworkClient.h */, - 0769F389ED5DDAF30BA2F3369F791324 /* FIRCLSFABNetworkClient.m */, - 4E612EA554E711D539292C956702FF90 /* FIRCLSFCRAnalytics.h */, - 8803603DF776222FD24D596996D41ECB /* FIRCLSFCRAnalytics.m */, - 8BAD6768EC338FEE7F2E5FE8D78BEBE6 /* FIRCLSFeatures.h */, - F7E3E73FCA9BE81C3371693ED3B7C8CE /* FIRCLSFile.h */, - 0201502435D6F659C6F8519D97C2DD95 /* FIRCLSFile.m */, - A6E962762F6A88B83E5679C3AC3ABA38 /* FIRCLSFileManager.h */, - 2F7F564C2566EDC4D46787B7925AE6AF /* FIRCLSFileManager.m */, - 837E03BA740DC46BCFBB2E93B20251E1 /* FIRCLSGlobals.h */, - A254DF1F970B175B83F41E07E7B94B8E /* FIRCLSHandler.h */, - C9F344B41D9C19F0AE6498C7E902BBFC /* FIRCLSHandler.m */, - C114A9B9E1AED4D27E8CAF8CF3E6D64C /* FIRCLSHost.h */, - 1A9B9035149FAFAB5FD6DCE6CA27B4DA /* FIRCLSHost.m */, - 7DD3931998BB79E91A64CAB641322E97 /* FIRCLSInstallIdentifierModel.h */, - DC3279C966FBC3B094985435CC3EF5A2 /* FIRCLSInstallIdentifierModel.m */, - CFE2F92DC947D242323E352533FC125E /* FIRCLSInternalLogging.c */, - BA51AE9DA92117208174BD020559C328 /* FIRCLSInternalLogging.h */, - 478C8A1E81472A084CF3C879B7513537 /* FIRCLSInternalReport.h */, - EFF22E7B5243FA1990953BC368634C85 /* FIRCLSInternalReport.m */, - 73803C1BF3262D233765F5EE4F77BF9B /* FIRCLSLogger.h */, - D3B5753F38B8B1C45A47A9CB4F5DE262 /* FIRCLSLogger.m */, - 3B31EE81E09044637137D15261EB3E0C /* FIRCLSMachException.c */, - 38A4223E9FAE359B7E337C4424C5AA21 /* FIRCLSMachException.h */, - 1D29E472CCF11BA8F9024F5B63CB6023 /* FIRCLSMachO.h */, - DF7D27BDD4E22812CDC9B3978B78454A /* FIRCLSMachO.m */, - C373BC66DE5491E20DE03672649626EA /* FIRCLSMachOBinary.h */, - 8FEBC6B2AD39E86085910EAB5418385F /* FIRCLSMachOBinary.m */, - CD814B09D8A083F1C2A25BE3FE62D7A1 /* FIRCLSMachOSlice.h */, - 031DE2703E31F3BB53D05A03FF3C4E28 /* FIRCLSMachOSlice.m */, - 430B6E5117696F2CE2356F5A84C34F16 /* FIRCLSMultipartMimeStreamEncoder.h */, - D13E918BFD440A58643A7DD1C45808A2 /* FIRCLSMultipartMimeStreamEncoder.m */, - 4D6C2071AFC4F1D068718421492696D6 /* FIRCLSNetworkClient.h */, - AA01C3237A0F93559ADEEF2033DD6667 /* FIRCLSNetworkClient.m */, - 08BF9E724C265F58FF6A09FB92D51AF5 /* FIRCLSNetworkOperation.h */, - 4CC51C655EF592F475EDE2C19CD77652 /* FIRCLSNetworkOperation.m */, - B10E383EAC4BF17F290B67B84916643D /* FIRCLSNetworkResponseHandler.h */, - EA5EC1980295B2EDBC90190C7F9168EA /* FIRCLSNetworkResponseHandler.m */, - AA10F07D4170F09A2BF08F6BF7796658 /* FIRCLSOnboardingOperation.h */, - 2A788D492DC5B99071640AD56A6564CB /* FIRCLSOnboardingOperation.m */, - CBEDE4A5052F3F0B1A9DE0B77FECAD6C /* FIRCLSOperation.h */, - 6A3E4982288CC63AA00F0035B3B56A56 /* FIRCLSPackageReportOperation.h */, - 2FD12418CC955738E4B3B0D3F8213A20 /* FIRCLSPackageReportOperation.m */, - EE25C353A9ECDB4F2E95942A94D58AC1 /* FIRCLSProcess.c */, - 2D85EDD4C0995B7C563EA29D974F6D5D /* FIRCLSProcess.h */, - 03D3D726322650EF597B9114AE00D70B /* FIRCLSProcessReportOperation.h */, - 4D4BDAF59689AE95314D5B59D6DFCAD5 /* FIRCLSProcessReportOperation.m */, - 25B285412D70A03CD380C90DC1635FCD /* FIRCLSProfiling.c */, - 32F90A5B39692428C34E3AF072FD8EA2 /* FIRCLSProfiling.h */, - 3F1DE100F7CD62079B50FCD0C9553643 /* FIRCLSRecordApplication.h */, - E2850A9DC951025A2D99B4A8D9767A80 /* FIRCLSRecordApplication.m */, - C9CAE15BCF8B3272A9E8E8A73FF6A28A /* FIRCLSRecordBase.h */, - 1C901D72535C6CA19D52C53BA1F6F98E /* FIRCLSRecordBase.m */, - 2745A65EAEA504DE4DFC17A2CC28B3E1 /* FIRCLSRecordHost.h */, - 2718ABBF5BD3936EEBCD4EE50691432D /* FIRCLSRecordHost.m */, - 0CC330BDC4FC8AAE8E7D51445487FDE1 /* FIRCLSRecordIdentity.h */, - E8C26C56422F31C2D61B1C25DF4AA613 /* FIRCLSRecordIdentity.m */, - CEAA2C0E6036AED6BD3B183E64DFF845 /* FIRCLSReport.h */, - 1980F3DCCEF53D219566696F8D4D7E45 /* FIRCLSReport.m */, - 89FF330A6442C677B526CB2855778A0C /* FIRCLSReport_Private.h */, - 24566691145B2CC0376A5196BABF4C4E /* FIRCLSReportAdapter.h */, - 2051CBB578CE971DC6FD39E549D13D0B /* FIRCLSReportAdapter.m */, - E2434CB138B23681AD420AD601C0B50C /* FIRCLSReportAdapter_Private.h */, - 0F3A09DE5943807AEF91DEAEA9E42C07 /* FIRCLSReportManager.h */, - E93E03EC64D3F40ABB68FB16C4BC738E /* FIRCLSReportManager.m */, - A57812B00DC25CFF7E42EDC259870378 /* FIRCLSReportManager_Private.h */, - 4E17D0B4C37C3337909355849072D40A /* FIRCLSReportUploader.h */, - DB2CEB0165E20DBD8F873EA9AA03E794 /* FIRCLSReportUploader.m */, - FB20CA01A9BECB10E7E15F3E90D5C2B2 /* FIRCLSReportUploader_Private.h */, - ABBC5B08BCC854BD1E1B1C5D37C8E29A /* FIRCLSSerializeSymbolicatedFramesOperation.h */, - 1A31F9E27F0F73915497E00ACBC21244 /* FIRCLSSerializeSymbolicatedFramesOperation.m */, - DF5A4A0D599D47844BEFCA576D351EAC /* FIRCLSSettings.h */, - 5471D754F7E7920830445203F67EA6D0 /* FIRCLSSettings.m */, - 579B9782511E20B022B864974C2128F5 /* FIRCLSSettingsOnboardingManager.h */, - CA971894932E0F1E1A7008FE05D6F4C8 /* FIRCLSSettingsOnboardingManager.m */, - 9C34A935350EEF589E0CB5317D5E8D7A /* FIRCLSSignal.c */, - 7E4BAA7343B7F32D07C265ED1D8A2288 /* FIRCLSSignal.h */, - F2A77723C64C4401E3DDFADE708D5301 /* FIRCLSSymbolicationOperation.h */, - FC1FB84E26BD003635B679C7860135AF /* FIRCLSSymbolicationOperation.m */, - E1A12FB62545C0248DC8ED6FD6DBB88A /* FIRCLSSymbolResolver.h */, - 93DE406DD843F31B8DA8190102E786BC /* FIRCLSSymbolResolver.m */, - CF6876AC311C8307CCF05E1196BCCF8F /* FIRCLSThreadArrayOperation.h */, - 959859671F5E9D4A75FC5F7B2022CC68 /* FIRCLSThreadArrayOperation.m */, - D454164375BCE20FEAA887F05C82CA54 /* FIRCLSThreadState.c */, - AE8FE22CD866DBFE9D17DDB260181310 /* FIRCLSThreadState.h */, - 7143E7FF82AB93597DAF450A09C3B3B6 /* FIRCLSUnwind.c */, - E54D625912BCBE72468F2F30C4DF38DB /* FIRCLSUnwind.h */, - F54B98000116B87B8256065D8FCB25F6 /* FIRCLSUnwind_arch.h */, - F10E1CB55F68E7A3E8CF444567FC86BF /* FIRCLSUnwind_arm.c */, - 7727D060E029691BBC6B6FAD2C9823F2 /* FIRCLSUnwind_x86.c */, - A6AA483A3155F0243E97660634B8D8D2 /* FIRCLSUnwind_x86.h */, - B631E40F190120BC8334CF9AEF1AD8C5 /* FIRCLSURLBuilder.h */, - 88E1CFBAD4C98AAE2FE9CB856CA8BFA1 /* FIRCLSURLBuilder.m */, - A85B4EF03377E5041F6806362957EE8D /* FIRCLSURLSession.h */, - 89279793F9A526B0377ACD303258633D /* FIRCLSURLSession.m */, - D21D961446BD811641FF742E6B32E11A /* FIRCLSURLSession_PrivateMethods.h */, - 1EB5C43F6DEDA1BF31D216EFD843E623 /* FIRCLSURLSessionAvailability.h */, - 91ADFDC1A52B47D8CB46CCC7A87E2E08 /* FIRCLSURLSessionConfiguration.h */, - 4FAC0BF61AC7A089DD0111C25B93A87B /* FIRCLSURLSessionConfiguration.m */, - 3355824F72E69EE67BE5F63F7E87F659 /* FIRCLSURLSessionDataTask.h */, - 49C70AA3C1EB95B8108211A9474D4663 /* FIRCLSURLSessionDataTask.m */, - BCC81D90AA4D9847887DF63CE8BCBE10 /* FIRCLSURLSessionDataTask_PrivateMethods.h */, - D4F67A3E65CC0FC59D9E2CEDECC946BB /* FIRCLSURLSessionDownloadTask.h */, - 87905D5D9620EBAA8D48F838D2DC8E2C /* FIRCLSURLSessionDownloadTask.m */, - D48FDFD09A08E4A5AA0B90AC469DFA8E /* FIRCLSURLSessionDownloadTask_PrivateMethods.h */, - D130F86CCEEEDDC974111ED15E976707 /* FIRCLSURLSessionTask.h */, - 18BC0DDE1F396DB4841A0415351A1CCC /* FIRCLSURLSessionTask.m */, - 46DDD295F0C2BB70C3CFA00D8D84381C /* FIRCLSURLSessionTask_PrivateMethods.h */, - 07F4CD47518D8E62FDF58C1DD413D2EB /* FIRCLSURLSessionUploadTask.h */, - E68CE24BC0C9734851465415E6CE2EAA /* FIRCLSURLSessionUploadTask.m */, - 47193C69317491589695265D8E5C2AD1 /* FIRCLSUserDefaults.h */, - 22CA7B0D27D5F9A824492E0F76291752 /* FIRCLSUserDefaults.m */, - 790F348E617B892F291993FB53AAFD65 /* FIRCLSUserDefaults_private.h */, - E63DC0B8F8FBE92B8BC8447FC76E3254 /* FIRCLSUserLogging.h */, - 8EADE5B5D8A27D9F974F8D699786A2A3 /* FIRCLSUserLogging.m */, - B660581BA47FF0267E1C3FD26DB8B666 /* FIRCLSUtility.h */, - 669AD6FA3A83718653790465EDDA3027 /* FIRCLSUtility.m */, - 6D4C7A20EA95428D9E60BF3298E1B36A /* FIRCLSUUID.h */, - 6D5194ED560355362942995C8184ED63 /* FIRCLSUUID.m */, - FA9F4355D52C34E7D21046BFFC2C3CD6 /* FIRCrashlytics.h */, - A06AB318A571F73BA73F7820EEA742FC /* FIRCrashlytics.m */, - CD0737C003FDFEAB95209C9C5640C8DE /* FirebaseCrashlytics.h */, - ADCF01B4014B785E6A268E02A4C0F261 /* FIRExceptionModel.h */, - 54456CF49552BF0EF82F68C9F02E6BA7 /* FIRExceptionModel.m */, - 994DEFBADD1332AA70EA083E89DF533E /* FIRExceptionModel_Private.h */, - 001873F285E6F5B21C6C6A7530676040 /* FIRStackFrame.h */, - 8400A864667A529DD818ADE71CA493FA /* FIRStackFrame.m */, - 363CFFF506950B66C298C2CA540247A7 /* FIRStackFrame_Private.h */, - 3EFBC0B98A3906D3EC00B4DFB926AA56 /* Support Files */, - ); - name = FirebaseCrashlytics; - path = FirebaseCrashlytics; - sourceTree = ""; - }; - 209DE454394CBADD1457A777D3584921 /* Pushwoosh */ = { - isa = PBXGroup; - children = ( - D48C095B1AAFC731B090D9900E233AB4 /* Core */, - F1D847A49496D69B7E53008DD11E97FC /* Support Files */, - ); - name = Pushwoosh; - path = Pushwoosh; - sourceTree = ""; - }; - 23F8A68C42FFC290D22B5C4019EEA2D5 /* Frameworks */ = { - isa = PBXGroup; - children = ( - D236BDDF35357D256F15EE061D8DF285 /* FBAudienceNetwork.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - 2E31191ECCE10ACE11E67BBF3E85A04C /* Support Files */ = { - isa = PBXGroup; - children = ( - E01F03BD05CAF5227E917C0461922B8E /* FirebaseInstallations.modulemap */, - 39C1BDAFA263E5AECD22151FEDDEFB3E /* FirebaseInstallations-dummy.m */, - 2D4F91EF32123CCCFB509805D9A17FE2 /* FirebaseInstallations-Info.plist */, - 03C7FA19F4FCDE9FBE532FD2FD6867CD /* FirebaseInstallations-umbrella.h */, - D3356CCE10CEA01243A20E9ACF2923FC /* FirebaseInstallations.debug.xcconfig */, - A9652E30535656104479292E013A06EB /* FirebaseInstallations.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/FirebaseInstallations"; - sourceTree = ""; - }; - 2EE80353C9BF9B43583760891D541A33 /* FBAudienceNetwork */ = { - isa = PBXGroup; - children = ( - F7C8334725EBCC143A4D393115BC0C68 /* FBAdBridgeCommon.h */, - BBE76DD5925BF7F751D3FC881C48EFB3 /* FBAdBridgeContainer.h */, - 7680208B78CD28C051277E2A501A471B /* FBAdChoicesView.h */, - AA0152FB55890D998513BDB0F01CD7AC /* FBAdDefines.h */, - BF0333C24B4E2FFB8D8261E5A9270A34 /* FBAdExperienceConfig.h */, - 25B6D7F61EA5FA07F49D1E699DFC441F /* FBAdExtraHint.h */, - 08EB1B4A9123BD74F56E943849F22160 /* FBAdIconView.h */, - 709E5298AD4FBF73236F51DE25C1DA34 /* FBAdImage.h */, - 01752D1547CBC6C496B2C955E3D828C0 /* FBAdOptionsView.h */, - DD0ACC6E5CCF8D6CEF4B440DC7FFBB61 /* FBAdSettings.h */, - 0B897F32CE3E8EFB8DA5F3826EDBF14B /* FBAdSettingsBridge.h */, - 74E403D6778A0EC368BF98556B091048 /* FBAdSize.h */, - F4FFDDBF7363DD45555E0BD0735D0F31 /* FBAdUtilityBridge.h */, - 7840536818AD62A9E1266EEB100D26B0 /* FBAdView.h */, - 18FBCB9FA68775B2AC95E32505AED926 /* FBAdViewBridge.h */, - 0A9A74A3715738F017D71D5DB5E217B1 /* FBAudienceNetwork.h */, - 014F157825595F660AF6B2FD35129CAD /* FBAudienceNetworkAds.h */, - 868BDF2301867D3D7F4568E953FE247A /* FBInstreamAdView.h */, - 9F97B5802399FF5E57610E5566DBEEA6 /* FBInterstitialAd.h */, - 3E6F2E42A6234A19EE314531187AD54B /* FBInterstitialAdBridge.h */, - 2DAFB1D25F5A598BF096706D8FCA7E39 /* FBMediaView.h */, - 9267DFA6F86A3639061CA2BBC44DA277 /* FBMediaViewVideoRenderer.h */, - 723816E8701B3BC8783F6024F09D9633 /* FBNativeAd.h */, - 7B2C64AC3A7746F39121E57C8C219D15 /* FBNativeAdBase.h */, - CAF973ED87B9A770DF409B522A0FCD8A /* FBNativeAdBaseView.h */, - 854DA4404AE05EA8E1C798964EABE112 /* FBNativeAdCollectionViewAdProvider.h */, - 08A72F75040B69AF97C5D9890A841DA2 /* FBNativeAdCollectionViewCellProvider.h */, - 86FDCE3EA2362D1553356515551EB71C /* FBNativeAdScrollView.h */, - 612D32B43DF71DCC5029C098BACC92A0 /* FBNativeAdsManager.h */, - 405EB80FC7B0EFEED5832D9846EB2134 /* FBNativeAdTableViewAdProvider.h */, - 8E3ACB3228004B777C3FA1C5D04664D5 /* FBNativeAdTableViewCellProvider.h */, - 30C63FB63058BEEC855241EA228F08D8 /* FBNativeAdView.h */, - 9751A58C32A73061716D02E6A420DD63 /* FBNativeAdViewAttributes.h */, - 25F820A8C7B3348E9C6A787AAEA9A069 /* FBNativeBannerAd.h */, - 925753A299D8844E3EB342038CD6A4DD /* FBNativeBannerAdView.h */, - 27B09CBD6843FE31BAB71DF8C7A39BCC /* FBRewardedVideoAd.h */, - F3D7C4712BE4F7B21E186C453B5DCF58 /* FBRewardedVideoAdBridge.h */, - 9439C1DD7ADF946FA0D821414DDE15C6 /* UIView+FBNativeAdViewTag.h */, - 23F8A68C42FFC290D22B5C4019EEA2D5 /* Frameworks */, - FBA7B65DB2754C32E5B754829E6DAA68 /* Support Files */, - ); - name = FBAudienceNetwork; - path = FBAudienceNetwork; - sourceTree = ""; - }; - 3002158C7B158862270FD996FB121BE2 /* CoreOnly */ = { - isa = PBXGroup; - children = ( - 58BD567248F13BB3EB88E1498E94CC54 /* Firebase.h */, - ); - name = CoreOnly; - sourceTree = ""; - }; - 3263527447C237548E056F7AB0A57089 /* Logger */ = { - isa = PBXGroup; - children = ( - 9C284741E25807C99F2D65D97A6C0086 /* GULLogger.h */, - 3CD884EC65117D32471A1C31EDB54501 /* GULLogger.m */, - CA472F6569E10D09DD80A45DB1395903 /* GULLoggerLevel.h */, - ); - name = Logger; - sourceTree = ""; - }; - 39C6C17B154525292D70DB4B964C64A8 /* Network */ = { - isa = PBXGroup; - children = ( - 13A3DFF61BC403AAA3457FFF182AD5AC /* GULMutableDictionary.h */, - 8DCFFA7C353E76CC942338CCB28CCBD4 /* GULMutableDictionary.m */, - 51A8A0867FE4D68D0E101BA97FC5F35C /* GULNetwork.h */, - 6F086552A6D613F74EA4B21DAEF8CCE2 /* GULNetwork.m */, - 7F99F2898E4CC45FA4B01D3090241531 /* GULNetworkConstants.h */, - 421B9DF04D30FF99DB8C88232986098B /* GULNetworkConstants.m */, - 83789C392F2F96731A4B8589523C1ABE /* GULNetworkLoggerProtocol.h */, - 918CD1D8B2B01E16F21B8DCA07123528 /* GULNetworkMessageCode.h */, - 3E64AB24001A99F7AA524E8B2BCCC290 /* GULNetworkURLSession.h */, - 90EC9A4F17BBFBBDEF89853FD9138867 /* GULNetworkURLSession.m */, - ); - name = Network; - sourceTree = ""; - }; - 3E0BD9FE90FF876B30A0A90EED0A4CA2 /* GoogleDataTransport */ = { - isa = PBXGroup; - children = ( - B2ECC7E20300D7768709576B691E72EE /* GDTCORAssert.h */, - 5612F192CA62DF02ADEE28C7B3E86ED4 /* GDTCORAssert.m */, - 30979C1EAFF54D6152F20715BBF0D637 /* GDTCORClock.h */, - 29C486247D229F08D7120F8394931CA4 /* GDTCORClock.m */, - 5961AFE7F12DFDE4DCF45FBD00A23ED0 /* GDTCORConsoleLogger.h */, - FE938B76DD92649E97E17C2D9553D49B /* GDTCORConsoleLogger.m */, - F02C33C186B41FAEFC9375CC7FAF7899 /* GDTCORDataFuture.h */, - 55437841B14E41C6422700977732EA03 /* GDTCORDataFuture.m */, - CB9E627CDFF3E4BBC4B0931416099EE1 /* GDTCOREvent.h */, - 664E550E0F16578DFF465C830E7C7C90 /* GDTCOREvent.m */, - D7252A72681DC1F892BBFD3ACE5AE548 /* GDTCOREvent_Private.h */, - 01465573FDAFA1F649139DF8A5A2383D /* GDTCOREventDataObject.h */, - BB58F00F1770593E5F2B2058C686CAF1 /* GDTCOREventTransformer.h */, - BE188B8A16FC9322DCB2ECEDAF33705A /* GDTCORFlatFileStorage.h */, - 707F365A6E4B98614C309D51DABBA688 /* GDTCORFlatFileStorage.m */, - 9817D2EB3DE93156C745A7972CE7F294 /* GDTCORLifecycle.h */, - BF49A6CFFD4B143C9F685DD1F2E64455 /* GDTCORLifecycle.m */, - 470D2391C5EC0995BA8077545966D64E /* GDTCORPlatform.h */, - 50B227F32681E5BDD2FDA842F591A245 /* GDTCORPlatform.m */, - AE539251097B63D95F4B01C077E1E161 /* GDTCORPrioritizer.h */, - B5898D4EE27C06392B0F932E7E819FDC /* GDTCORReachability.h */, - 020291AE06EF0A2B69213AE3963D634F /* GDTCORReachability.m */, - 78E569AFAEEA25A83AC62222BB6BB835 /* GDTCORReachability_Private.h */, - 4337D26CE3234965B0903BE0AB93D043 /* GDTCORRegistrar.h */, - 3F3A6CC51BD9267B2C86712FCDB73704 /* GDTCORRegistrar.m */, - F25A88845B1CCF98DAC77C9E9EB2FCB3 /* GDTCORRegistrar_Private.h */, - 504D6EA218588A1A39F7172B9B993052 /* GDTCORStorageProtocol.h */, - 762EF574B1B3603C4A3C95BB8BF57801 /* GDTCORTargets.h */, - 318FA1796E5735FD567BDA02BEBC70CF /* GDTCORTransformer.h */, - B1C5AC8EEAD861CC78B42E1F7D69A288 /* GDTCORTransformer.m */, - 56B2B2250679A70F1C7B60CD4D88AEFC /* GDTCORTransformer_Private.h */, - 5B7318323286498A6DF7E31AD67A204D /* GDTCORTransport.h */, - C308366EDCBDF0482B67674DB6BDAF17 /* GDTCORTransport.m */, - 1769588CCBD5C868916AAC859E9C4697 /* GDTCORTransport_Private.h */, - 69347F26F6C2E168061FAB817E6FC305 /* GDTCORUploadCoordinator.h */, - DDD07D4CBCCFF84C9731DFD2849E8234 /* GDTCORUploadCoordinator.m */, - 36EB11FA5B4F302F1740F21784FA810E /* GDTCORUploader.h */, - 5F67A36488F0D23007CC07BFF895EF33 /* GDTCORUploadPackage.h */, - B0E634ADBC115882A4BEC536C2B70EE9 /* GDTCORUploadPackage.m */, - 2E80A06C5B4E4CB381E68A56E2641F83 /* GDTCORUploadPackage_Private.h */, - 945AA54D70279B1EC6C9244FF91F432D /* GoogleDataTransport.h */, - ED9DC4DE59E75481F7028BC9072ABC3D /* Support Files */, - ); - name = GoogleDataTransport; - path = GoogleDataTransport; - sourceTree = ""; - }; - 3EFBC0B98A3906D3EC00B4DFB926AA56 /* Support Files */ = { - isa = PBXGroup; - children = ( - 74B477731B3C7233938542BE7A305320 /* FirebaseCrashlytics.modulemap */, - E37656F237661D9E974F4D92B3037597 /* FirebaseCrashlytics-dummy.m */, - F83F6485920D620BF528120D2F66BBD4 /* FirebaseCrashlytics-Info.plist */, - 966F8BC88419BB77DC9D7C6776058334 /* FirebaseCrashlytics-umbrella.h */, - 9F8C134209ECFEE44DD30B54FA918FB1 /* FirebaseCrashlytics.debug.xcconfig */, - AF43222B6CDE64FF9412AC3E8668BE78 /* FirebaseCrashlytics.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/FirebaseCrashlytics"; - sourceTree = ""; - }; - 40384E91B1C484D794E89BC10F4D952C /* FBSDKLoginKit */ = { - isa = PBXGroup; - children = ( - E7F85AAA1ADC373F06170A0B703238F7 /* Login */, - E479EA7EF2DA594C76D8A8E55BF6A6C6 /* Support Files */, - ); - name = FBSDKLoginKit; - path = FBSDKLoginKit; - sourceTree = ""; - }; - 459289723974B2E946504BDECE6941C0 /* Support Files */ = { - isa = PBXGroup; - children = ( - 9A2445CDEEDB3F456CF8A86C16411788 /* AppsFlyerFramework.debug.xcconfig */, - 2A74B788513333A85C668015CE4E8E55 /* AppsFlyerFramework.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/AppsFlyerFramework"; - sourceTree = ""; - }; - 48456C3F4BF2EA5012433C7ADCF8EB8C /* nanopb */ = { - isa = PBXGroup; - children = ( - 6A20379BC83A1E59449FC898243F5839 /* pb.h */, - A5D57790DDAB444182A769246E82F50A /* pb_common.c */, - F7CCD25B0D2AB19234EE1BF816BC753A /* pb_common.h */, - BDD051FCAACA7AC31BD04039027B77BC /* pb_decode.c */, - 572D03AA56560C804AE7D24134467E9C /* pb_decode.h */, - 6AF16A2ABB4371388376FD7A7A89A628 /* pb_encode.c */, - A55461F3AB13BD236ABDC799453514B9 /* pb_encode.h */, - A5C63034C20297FBF0011390D22F7569 /* decode */, - C6172E61DEA1B67966F863AE8D5C38AD /* encode */, - C7FA7C32EDFC3C940E87CF7A567540B4 /* Support Files */, - ); - name = nanopb; - path = nanopb; - sourceTree = ""; - }; - 48EF6767EFCEA97C815D45C152829E93 /* Resources */ = { - isa = PBXGroup; - children = ( - 24A456C85AF06212B2C2D20398ECF480 /* FacebookSDKStrings.bundle */, - ); - name = Resources; - sourceTree = ""; - }; - 4A8AB5680D2F28934E664B6707232091 /* Support Files */ = { - isa = PBXGroup; - children = ( - 1EB4C57BBE0AE8268ED31DA7203A7B82 /* mopub-ios-sdk.modulemap */, - C6BBE9AC2A833F397A1559633A8BEFA0 /* mopub-ios-sdk-dummy.m */, - DD0F6E2B57712A67FE1B4DB483A5725E /* mopub-ios-sdk-Info.plist */, - 7D01059659FD31111828912F1920B741 /* mopub-ios-sdk-prefix.pch */, - 0760BDE73BD4B2996E034191239627CD /* mopub-ios-sdk-umbrella.h */, - 09C70C47126BFEDBFCB81ACFA9563DD7 /* mopub-ios-sdk.debug.xcconfig */, - 8DF93FC81DFC41292554D069ADCDA7EB /* mopub-ios-sdk.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/mopub-ios-sdk"; - sourceTree = ""; - }; - 4CA17F5AEC9A853501943548809FDC92 /* Core */ = { - isa = PBXGroup; - children = ( - 4021CDC26216AE4683971DB5C99D2EA1 /* MoPub.h */, - 2AD0D9652F1B4132919043EF34DC2C9A /* MoPub.m */, - 94198D47DB7153AAB614D2BD0AD361A2 /* MoPub+Utility.h */, - 2D8B86C037D5002A385EDA820E7C6A37 /* MoPub+Utility.m */, - 1CDC17A5433AC0CA6DC1872840095331 /* MOPUBDisplayAgentType.h */, - 21BBC982F0017CA55E853ADE08BA2075 /* MOPUBExperimentProvider.h */, - E8315EC545323C2671D096C3D966CEEC /* MOPUBExperimentProvider.m */, - BA6B9C62837AA9821E4F0EBEE4FC281F /* MPActivityViewControllerHelper.h */, - BF35766A79CE035F6EE7F4DB56940DEF /* MPActivityViewControllerHelper.m */, - 494668B5491A9BAA3C74B35D973D9CA7 /* MPActivityViewControllerHelper+TweetShare.h */, - 96D4A3F3A2232AB164F6559BF0FA721E /* MPActivityViewControllerHelper+TweetShare.m */, - 91CD1E0D9FCF5650C6EC29BA30964CAA /* MPAdapterConfiguration.h */, - 8049CFBC0A5A3BF3A7E3EAC76FFF6FC5 /* MPAdConfiguration.h */, - F5CEF86EE487DF24CB3CAA8E122CB110 /* MPAdConfiguration.m */, - 9495C0D407A5084BFB7866043ED2E21F /* MPAdConversionTracker.h */, - 19FF630DE179BF054F08268504BD934F /* MPAdConversionTracker.m */, - A2C33392B6A8C912027A529372226A2B /* MPAdDestinationDisplayAgent.h */, - 64EC22B43B8F81D4BCFB8A2410DE42CA /* MPAdDestinationDisplayAgent.m */, - 52D3E8FBC077711468AC8CE2D0C0A3B5 /* MPAdImpressionTimer.h */, - BF6BCF2D44C454CD22ABD63FF5D592EA /* MPAdImpressionTimer.m */, - 1037B671BA987B57CA6D694962F6A280 /* MPAdServerCommunicator.h */, - A4359A28D50110A439610CD7606A5A1D /* MPAdServerCommunicator.m */, - 4F2713909BE13FE0F46B68C81B19B342 /* MPAdServerKeys.h */, - 2985B96DB73AE3F0664C1055437A2F3F /* MPAdServerKeys.m */, - 42ED84B3C267C012DFC84552AEA7DF37 /* MPAdServerURLBuilder.h */, - C67890988039719A30605DDB4EA28ABD /* MPAdServerURLBuilder.m */, - F46EBEB4E9EF87BD238F499E2FB95E93 /* MPAdTargeting.h */, - 592F0B11524968DE9F802AF5B916322C /* MPAdTargeting.m */, - 464896F1C48CA69D3718094DD5044970 /* MPAdView.h */, - 00C955418D4EA25EB44624BF3D31FBBE /* MPAdView.m */, - 383A8F7966EB8BBD1BC1CB37106EA7A0 /* MPAdViewDelegate.h */, - 0017B44EE65AC00BCC1B0FC05EB2B63F /* MPAdWebViewAgent.h */, - 99BBE305E5668F92A7DC4A3E893C7F2F /* MPAdWebViewAgent.m */, - D94E1893022A390515E0D40305BAB20D /* MPAnalyticsTracker.h */, - F6FBAD65A0190DFEAC83A97B5BA65B49 /* MPAnalyticsTracker.m */, - 3A0C3870C1CDDA701F6D1288CA47CA3D /* MPAPIEndpoints.h */, - 6DDFDCAD7FC9028D55EC1DA9C0ABF86F /* MPAPIEndpoints.m */, - 655C76ECA36A4F0C9FB4689791F8167F /* MPATSSetting.h */, - 6B1B828DE96AA5636DB040F928FCF93F /* MPBannerAdManager.h */, - F9240820F4BBDCCE5249EE20F406898E /* MPBannerAdManager.m */, - BBED2B4463E868A903BEBBC03F711DE8 /* MPBannerAdManagerDelegate.h */, - 6002E7AA0211661BCAD58E1128B5D042 /* MPBannerCustomEvent.h */, - 71F6DE3BF109FD746859A8C9A008D5C1 /* MPBannerCustomEvent.m */, - 6292C6A98F9996872AB54BD78C613E8A /* MPBannerCustomEvent+Internal.h */, - ACDADF91BDB29FA2C5AAF1B6A8DF653A /* MPBannerCustomEvent+Internal.m */, - F798A8639B7D8CD9B4137A1D6E6A51E6 /* MPBannerCustomEventAdapter.h */, - 29EE61EB9E880F4EB5F3D4D0BC556DEF /* MPBannerCustomEventAdapter.m */, - 301F1BC597BEA34F4F942DC0F56E7890 /* MPBannerCustomEventDelegate.h */, - B7B2D4ACF49E72004914698667994725 /* MPBaseAdapterConfiguration.h */, - D9388511DD9CA3E718B2E63D6A212C1C /* MPBaseAdapterConfiguration.m */, - 342C4AC1E6E0595A996ED8663BE92274 /* MPBaseBannerAdapter.h */, - 1ECC900453CA9A4DB3C74EF1C7E82EF5 /* MPBaseBannerAdapter.m */, - B45A4460D252BA2CC8BE0592A309E75E /* MPBaseInterstitialAdapter.h */, - 310038BC046C3E0F7D053797FF1BDF7B /* MPBaseInterstitialAdapter.m */, - DDB8687B80AA503F0FE43323A4A6EDE3 /* MPBLogger.h */, - F5735015AE6CF8B64CB2E93917F4BDD1 /* MPBLogLevel.h */, - 2B76E8F0D27A31151FFE888BC9735D11 /* MPBool.h */, - 868363752B05CDFC7CB160C8F72458F5 /* MPClosableView.h */, - FFBEE32B8EFD8D442038F94B46B33B01 /* MPClosableView.m */, - 602EB1B29BD715FAF352640E672C8846 /* MPConsentChangedNotification.h */, - FADE735BAE6A83A7260221701A0BB022 /* MPConsentChangedNotification.m */, - 3A899DEF6E5366BA087A2CF9EA34BC72 /* MPConsentChangedReason.h */, - E40A521C2C00AA0EF6381122AC4C83DF /* MPConsentChangedReason.m */, - A1DDD49160D1C0592C9F38CF9D31F269 /* MPConsentDialogViewController.h */, - 44C769EAB81A599496AE04D93219FD31 /* MPConsentDialogViewController.m */, - 0A91470A56EC81F0DFB8596B4AF9E7F1 /* MPConsentError.h */, - 407C425811C1E07AC1387FF972170846 /* MPConsentManager.h */, - EE866B09074DCE61CA22189AF75F00C4 /* MPConsentManager.m */, - 6AC715E90386C0DD70D7C73B370F2AD0 /* MPConsentStatus.h */, - 6B9D33C5E8A0E9DA583CB234D92CC884 /* MPConsoleLogger.h */, - 345C40FE7FC640C143E221DFF04E7776 /* MPConsoleLogger.m */, - 813C80CA9D64B3BEA37763F891E1D8F8 /* MPConstants.h */, - 894AE0E358FA77185A3402B4E8C5AD1C /* MPConstants.m */, - F2EA64EFD0B3671042D6540CE86F7B17 /* MPContentBlocker.h */, - C69EB63CF023797F10EE17492DA51BB1 /* MPContentBlocker.m */, - 689B71909B44C6D315ED26255530370F /* MPCoreInstanceProvider.h */, - E15F2F19F73D395CCBF48B534933CA81 /* MPCoreInstanceProvider.m */, - 2B1A1AACDDD2A0A3261087CD42C1616C /* MPCoreInstanceProvider+MRAID.h */, - 12B3ACF35A72BD37FA4087EA336D4FC4 /* MPCoreInstanceProvider+MRAID.m */, - 8EEA667CCD226FB95A7F36320AD4B4F4 /* MPCountdownTimerView.h */, - E86B58A88F21F603E8766BB299416831 /* MPCountdownTimerView.m */, - E99BDB290BB56F6C8161CA809DDD9AA7 /* MPDeviceInformation.h */, - 0765CB37FBB795F392FE143A06B334AA /* MPDeviceInformation.m */, - 68463252D5108E72747065003E605C45 /* MPDiskLRUCache.h */, - 42EC0B8B466D57B336E40EAB6EFC46B6 /* MPDiskLRUCache.m */, - 3691E549292195DA1DBB3A3C281B537B /* MPEngineInfo.h */, - 22031BA63BD48A1E34D4873F3B818763 /* MPEngineInfo.m */, - 22F3752BB8479C64876DF07ED9F247E4 /* MPEnhancedDeeplinkRequest.h */, - 2440EC7DD66439B164062B6764ADED43 /* MPEnhancedDeeplinkRequest.m */, - F7EF0BD63C84A985A8D40334BD9C845C /* MPError.h */, - 1F2B35A79CF27A0EF16F776BD4E43108 /* MPError.m */, - 352E091312570DC48B189549EF1887CC /* MPExtendedHitBoxButton.h */, - CA423C0F1A2482E5C355023D6CEFB3C7 /* MPExtendedHitBoxButton.m */, - 44F415FC9500027A9C088CB4268519D5 /* MPForceableOrientationProtocol.h */, - C39FC8BEBD373829A619C883CB0D9E7C /* MPGeolocationProvider.h */, - F09341822A2A373E7AE823104DE76BAC /* MPGeolocationProvider.m */, - DB3BC2BA5F41EF53779436068A55C31B /* MPGlobal.h */, - F438283F7F2D105FBFB980A2DB1EFB1F /* MPGlobal.m */, - 69B5B729970BF657D0395816C451C10E /* MPHTMLBannerCustomEvent.h */, - 182380E9950F308C42B1AB917175D87F /* MPHTMLBannerCustomEvent.m */, - AC65290E890725D78B78F6FC0CCD2871 /* MPHTMLInterstitialCustomEvent.h */, - BE6706C0E91060814B4019DC196EA848 /* MPHTMLInterstitialCustomEvent.m */, - F0FD980AEFBB5FCA43E9B93DC31B6417 /* MPHTMLInterstitialViewController.h */, - FEBA4164304A01B6DD5AABD187C7917D /* MPHTMLInterstitialViewController.m */, - 6556F6463586F6CE21E4C92A21F555B5 /* MPHTTPNetworkSession.h */, - 678876F8D1B05FAEA1846B0C9FCD18AB /* MPHTTPNetworkSession.m */, - 4920541557733F272A7C6FEACBA3CF69 /* MPHTTPNetworkTaskData.h */, - 74E63A0224582D4BFADBCCDD8B24B940 /* MPHTTPNetworkTaskData.m */, - C5EB448F6ECA0790F937ACD6C113DE79 /* MPIdentityProvider.h */, - 3B87B8633CBD396D005FFB65A57525C7 /* MPIdentityProvider.m */, - A7B6959A2B61031F6035C416937E7160 /* MPImageDownloadQueue.h */, - 0838ABB33656947F8A606B298E4D4697 /* MPImageDownloadQueue.m */, - A86651C6B06838313991106BF034285D /* MPImageLoader.h */, - 6F075B3C27EAE9395D49E5B682476752 /* MPImageLoader.m */, - 19AE5868B2E53C4428EBC2B63A6D769B /* MPImpressionData.h */, - BA8EB6695C215B232B216E2F9B56FB4B /* MPImpressionData.m */, - 9B90734FD1FC7BA8DABFE1C2150BBB17 /* MPImpressionTrackedNotification.h */, - C39A9746312508F0797FBBABB8A59C33 /* MPImpressionTrackedNotification.m */, - A00AA76A58C027D6A9D1C2E8AD3D4F63 /* MPInterstitialAdController.h */, - F161CBD33AC7BA5D9969DDA2175F8522 /* MPInterstitialAdController.m */, - CE42AFD6D0EE8CAA561102A302064F29 /* MPInterstitialAdControllerDelegate.h */, - 8F4C6B7F9F945BCDC1D2570556941C73 /* MPInterstitialAdManager.h */, - 346A399DF9C3AB14A13349EE71993860 /* MPInterstitialAdManager.m */, - D87FE1C8DD5694CB3CD67B810B5F3E29 /* MPInterstitialAdManagerDelegate.h */, - 62166F441F9824895C5B5EA617A1F260 /* MPInterstitialCustomEvent.h */, - 1720997F290E7DBBC9B82125353CEF4B /* MPInterstitialCustomEvent.m */, - 445F8ACD5773B2802105C52D62AFCB66 /* MPInterstitialCustomEventAdapter.h */, - A917DA6B039C44D3E23A75C7E914F622 /* MPInterstitialCustomEventAdapter.m */, - 9BB2BE9926BB510B58ED86AC35DA702A /* MPInterstitialCustomEventDelegate.h */, - 98D822AC1249C4034A49ADD0F5668D2E /* MPInterstitialViewController.h */, - 2424C11ADA3EF0907A7A7E430AF65B17 /* MPInterstitialViewController.m */, - EC11E09F642F377CF91A38FC771C670B /* MPLastResortDelegate.h */, - D2656512704728DB2DBB34BBE2165797 /* MPLastResortDelegate.m */, - 45822A4CD37798CFA5BA7FBF0D862256 /* MPLogEvent.h */, - 7BC3F5B593BE37B9F6BD11C01F5EE0E6 /* MPLogEvent.m */, - 507DD2C9FA6139F8331F8B843DBE80AA /* MPLogging.h */, - 649865C666C7477BF099B7267CFCE31A /* MPLogging.m */, - B4DDA95AFA0A4A577D8B123C930E56E3 /* MPLogManager.h */, - 169F447C13B9E66969C6AA90549006B3 /* MPLogManager.m */, - C784342A4CE90756B4BA3D2244D8DC91 /* MPMediaFileCache.h */, - ADAA7307CD9D86E713C6B772ACF1AE53 /* MPMediationManager.h */, - 06D395969B2EBB5BCA02301809DF7E06 /* MPMediationManager.m */, - 9C84C2B5A4FDC3023F6F0D5ED07FAD44 /* MPMediationSettingsProtocol.h */, - 00603B739498C6C22C791A2AB78F9369 /* MPMemoryCache.h */, - B951042AE2AEB24F45AAC599C82AE7E4 /* MPMemoryCache.m */, - 9EF90B0EE47DA618D7587ABDBEEE4CF2 /* MPMoPubAd.h */, - B1FB82AE1C58472D03C1026460955A64 /* MPMoPubAdPlacer.h */, - 3542266176BA99781550B58A523894F7 /* MPMoPubConfiguration.h */, - 81A559E78999AE4D2B9AFE09303A7ADA /* MPMoPubConfiguration.m */, - 2BD2F8109AED7FC1EBDF2586A1D5B482 /* MPMoPubRewardedPlayableCustomEvent.h */, - C377E972E251580AB56B910F18A439A8 /* MPMoPubRewardedPlayableCustomEvent.m */, - 7C94E6D5E6F6E23718118536A3F070C9 /* MPMoPubRewardedVideoCustomEvent.h */, - C2DB1E45D2776332856E0F440BABEA51 /* MPMoPubRewardedVideoCustomEvent.m */, - 7E4A30740F1AB99F87DB6681D366FD7B /* MPMRAIDBannerCustomEvent.h */, - EB7114C8EA7CE8D886301589CED52B5D /* MPMRAIDBannerCustomEvent.m */, - 02E085738B766EC947393C1303BD72F7 /* MPMRAIDInterstitialCustomEvent.h */, - 441C8A3576F5944E786A32028B8CA6D2 /* MPMRAIDInterstitialCustomEvent.m */, - B58C3ECD0C853A41A5E5577B6E57B97E /* MPMRAIDInterstitialViewController.h */, - 15BB88AC3E4987FBCF5DCAB97509A940 /* MPMRAIDInterstitialViewController.m */, - B63B211CE89CAA85880C54C23FBA980A /* MPNativeAdError.h */, - D6F73BB02D417A143A1CD80F6A5030C1 /* MPNativeAdError.m */, - F25663286D10E1661BD1B44E6CB75BC7 /* MPNativeCache.h */, - A768C6F4ECAA71C67BE046B400DF33D7 /* MPNativeCache.m */, - 6C1A9B97F58FF358F9C7A7A555EA64D9 /* MPNetworkStatus.h */, - A7CA15EEAA0A4BF7A488B9CE88DF4E29 /* MPPrivateBannerCustomEventDelegate.h */, - B6081912F1B42D13206287414410CA92 /* MPPrivateInterstitialCustomEventDelegate.h */, - 108253A30ED3D068BEE65AC6122695EC /* MPPrivateRewardedVideoCustomEventDelegate.h */, - EEF950BD1E01A501C3B394319430E8EE /* MPProgressOverlayView.h */, - 76AB238FB89EFE9FDF32EA3ECF97DD1D /* MPProgressOverlayView.m */, - B2D821630EF1A5C1F1B6F0040A4D37EA /* MPRateLimitConfiguration.h */, - 124B364816AA75D35B20839AE70FAE36 /* MPRateLimitConfiguration.m */, - 0916159955B5C6A4C2A8C48C0EA27A23 /* MPRateLimitManager.h */, - 53990A469C3230E8AEB44751E77A30BB /* MPRateLimitManager.m */, - 5D0ACA0EC333559A8D8E85327AB81F30 /* MPReachability.h */, - 65D2CF8D521040BB760BE6C73FC0C0EE /* MPReachability.m */, - 99FA0C33F8FD705C8505C27693C46AE1 /* MPReachabilityManager.h */, - 3F0565E0511462F920AB1A8DB02FF6CA /* MPReachabilityManager.m */, - 91459713F98CBE00E4F4A06EAD82FCAB /* MPRealTimeTimer.h */, - D24ADC2C26AC17986E84E6AD71B4497D /* MPRealTimeTimer.m */, - 077579AED437B3E8996DABD00AFC764E /* MPRewardedVideo.h */, - D511DF32C5F107B180595A06ACB7FDF4 /* MPRewardedVideo.m */, - 781FC8AD51E6866D2D7CC94F5C7932E7 /* MPRewardedVideo+Internal.h */, - 9F6213C0BF36AF447DD774B75A86951E /* MPRewardedVideoAdapter.h */, - 57CFD7B6FD61C64828745EA8FBE711D4 /* MPRewardedVideoAdapter.m */, - 52ADDFD012154C7A588A0271207FB08D /* MPRewardedVideoAdManager.h */, - 989DF90CF44F956593915A594C4902AF /* MPRewardedVideoAdManager.m */, - 1C82E8A335AE0C09FD8559157C5F3E59 /* MPRewardedVideoConnection.h */, - 52108D20F290030545FBE74D1C7B16F7 /* MPRewardedVideoConnection.m */, - 7D4843A392FF3465CBE87FE5353D738A /* MPRewardedVideoCustomEvent.h */, - F7B789E7057E014FE0B42D76AFB2E9DB /* MPRewardedVideoCustomEvent.m */, - 566E8407DDF9E83B06EFF0FD8260664B /* MPRewardedVideoError.h */, - AF9897561C3EFD3DA09DD96440FB7822 /* MPRewardedVideoError.m */, - DDD4B27C8C7B462F918622D94C6CD29E /* MPRewardedVideoReward.h */, - FB54EFA643EFE65F8B93F4ABD776A9DA /* MPRewardedVideoReward.m */, - 52DD572C811B93943E313FDC353DBC86 /* MPSessionTracker.h */, - 9E6C3B7537E5214A269D7C64A399804F /* MPSessionTracker.m */, - DAA6A2DEF645DC36C5564D6FE230A762 /* MPStopwatch.h */, - EC55BD6F39BFBB8D16D185B7831D7450 /* MPStopwatch.m */, - 79F15A919D6DC19F44088DB016D122FF /* MPTimer.h */, - 3AA24247469939DB78A0EDD3DEC90888 /* MPTimer.m */, - 9193BBD892E8AA0FC11853055C48AB38 /* MPURL.h */, - 1FF6B8F866190949844C2BAA7DA13134 /* MPURL.m */, - 555FD8DB1F7C59B471D95DC269970BFB /* MPURLActionInfo.h */, - 7B253846CEFA62AB7AD5504A4CD1CA45 /* MPURLActionInfo.m */, - 73A1343655B87B87FCE8289DDCC312B7 /* MPURLRequest.h */, - CE24F219A6E71C71FAFAD9134860FBC4 /* MPURLRequest.m */, - 39FAEF02EE72559A0E120D39532C11AC /* MPURLResolver.h */, - 292F6F2D218AED3F50A682DF46227AF0 /* MPURLResolver.m */, - 7C5A37AFF5C126E7407B4F7219F8ADA2 /* MPUserInteractionGestureRecognizer.h */, - 7D7B53AC3608534B09156655043ED56A /* MPUserInteractionGestureRecognizer.m */, - 1ADB306523399AE58770E1D0DCB152DD /* MPVASTAd.h */, - 24E53F8ED1BBCD49D4949EF09D211E66 /* MPVASTAd.m */, - 9044B3A077CAC1211E46CA82B02DC0E5 /* MPVASTCompanionAd.h */, - CA847F9F3FE796FF799FA40B541EDF8D /* MPVASTCompanionAd.m */, - A9E3FD759E40E665FBBE94582526D5AC /* MPVASTCompanionAdView.h */, - 74DD172345CA56DF751E17B590AA16D0 /* MPVASTCompanionAdView.m */, - F92E93154C08880AB99F41FD106DCF0C /* MPVASTConstant.h */, - F9B488FFB174D39D23CFF939CF53957B /* MPVASTConstant.m */, - ADD0E305BAAF57807F5945F54FC6DC5C /* MPVASTCreative.h */, - 92FC85A9B53F3B4792D7E3BE4DFF4E0C /* MPVASTCreative.m */, - 6C97119CA39F4A8A3EFFC226A2E202E6 /* MPVASTDurationOffset.h */, - F6D4B67F4E55C11CAF1B9B4800F976A7 /* MPVASTDurationOffset.m */, - DD7234B7909F7DC211F9EA3E427F8859 /* MPVASTError.h */, - 02C1942E4257913823227F7A6D847739 /* MPVASTIndustryIcon.h */, - 397525176B004A3B0D5200875274F6D3 /* MPVASTIndustryIcon.m */, - 35C3BEE2785C0C1F95529ED4BF6D224A /* MPVASTIndustryIconView.h */, - 4C5933D11E9EB4D69777185A0A94402C /* MPVASTIndustryIconView.m */, - F5875671B8493083F1CEF086C2DDFC65 /* MPVASTInline.h */, - E8875809F7FE11F70969D0129432A764 /* MPVASTInline.m */, - 476756EEA9A49E2694FB9704F7FDD305 /* MPVASTInterstitialCustomEvent.h */, - 257B2EA361B5A5232CF9ADF913D995BE /* MPVASTInterstitialCustomEvent.m */, - 35683E71093263A10A71CFA6EAF11E2E /* MPVASTLinearAd.h */, - 5955C4A26A288B10A125F3C4AB75B270 /* MPVASTLinearAd.m */, - B9A478D858F62F9F068DE83A8CBA7E8A /* MPVASTMacroProcessor.h */, - ADD7DCF98C9AA899E012ACF4CB5AFEBB /* MPVASTMacroProcessor.m */, - 1FC6506780B4D198D126223DBC80863B /* MPVASTManager.h */, - 3D214A3DF79EEFBBC661469D9E286325 /* MPVASTManager.m */, - 3C908C6185710B5680099D199AD08272 /* MPVASTMediaFile.h */, - 59737CA8CC54D572BFDD90F93E238752 /* MPVASTMediaFile.m */, - 7C413ED1859E211FD770AD71D1EACCCA /* MPVASTModel.h */, - D572AB96D546D44DDB7E9B13DC71E1BF /* MPVASTModel.m */, - E8CF3AF5233E6A2A175E5AFEF37FAE3B /* MPVASTResource.h */, - 0E16FEEB53C97C640309E95CDBB693D9 /* MPVASTResource.m */, - 129EC6EFFC7E39FDA23E0B5149E68C11 /* MPVASTResourceView.h */, - 5830BB82A4AE95BF068E973AFA080449 /* MPVASTResourceView.m */, - BB5DD677394D34BE38E09A78356C7AE0 /* MPVASTResponse.h */, - 30A8402FBAB20F15E196F376F9A9DB41 /* MPVASTResponse.m */, - AFC0EDB3E7704218D9FF10BE3B17A29B /* MPVASTStringUtilities.h */, - A52F4F9D59A0C7A0ED4F5AFFECB2C689 /* MPVASTStringUtilities.m */, - 0B7483A8401BD6AAE507C485762CFE33 /* MPVASTTracking.h */, - CE45DE994F60EF4FBEF3DFAD4A209FA2 /* MPVASTTracking.m */, - C1D769AA69E3136DFC88E636239F82CE /* MPVASTTrackingEvent.h */, - EF5B8771B5E95DC80DB1CACFEFF994DB /* MPVASTTrackingEvent.m */, - 164F9FB97B25205902BDE5DEE4E6AA0E /* MPVASTWrapper.h */, - 556BF85A3667640A4703BE446A49EB95 /* MPVASTWrapper.m */, - C24FD1A664C7473CCFC62DE3F10D1EC2 /* MPVideoConfig.h */, - D56AE7C88549B7EA1F0686D29FA14FF0 /* MPVideoConfig.m */, - 2F32FC4D6E96E0CDF17D11E535203238 /* MPVideoEvent.h */, - E77693F20CB5B792E1850247D04663B6 /* MPVideoEvent.m */, - EC840FB3A9B5FD39E877E39F9341CD4F /* MPVideoPlayer.h */, - F97451120A43B3064075411F0B3D18FF /* MPVideoPlayerContainerView.h */, - DE5A8A6DA5F7E51F2EE6BB5322D39DF3 /* MPVideoPlayerContainerView.m */, - 9521A511D91941CC83177D3FC07C9813 /* MPVideoPlayerFullScreenVASTAdOverlay.h */, - 18549790F80E0A33EC41D4492B7FA73B /* MPVideoPlayerFullScreenVASTAdOverlay.m */, - 25872DB607DB8C1D6F26B4E9B348EE02 /* MPVideoPlayerView.h */, - A98D29973AB061AB31F4F0D3B2018853 /* MPVideoPlayerView.m */, - 678533E5794C45078CC325416F92CB77 /* MPVideoPlayerViewController.h */, - 16365F7374A77C5CE9F6D6B2A02DE69E /* MPVideoPlayerViewController.m */, - 6EC5F23197C2154B161169B185B9AEB1 /* MPVideoPlayerViewOverlay.h */, - 3D0B685CF488C834960CB7534A9E1E10 /* MPVideoPlayerViewOverlay.m */, - 8B29F0140CCACE6F460B67EC664AD890 /* MPViewabilityAdapter.h */, - 2073E072928D199F39A9FACF21274996 /* MPViewabilityOption.h */, - 26280CD4EFB47654F7ADD45F31B2D30A /* MPViewabilityTracker.h */, - 4432997E54BF6578DD55CBEF2812AD46 /* MPViewabilityTracker.m */, - 12942E95450BEACE0C712F6D67AFEC63 /* MPWebBrowserUserAgentInfo.h */, - 10B9C11F52EBB8A073785586610A8D59 /* MPWebBrowserUserAgentInfo.m */, - 9695326230BD56D6764C9F2AEAB55012 /* MPWebView.h */, - 5AD02EB95D6DBE2B0CA401C6F2EF8E1B /* MPWebView.m */, - 4E56D1F0799DF117F410E1607AB5239F /* MPWebView+Viewability.h */, - 50786F73B28A0AC9BC79FC5E12E819F7 /* MPWebView+Viewability.m */, - F3E92ACDE25764C4472EB3324FB7AB23 /* MPXMLParser.h */, - 59B1A24E8C60C1CDD038F4BF22EA30CC /* MPXMLParser.m */, - 5D42B77EE4F038D68606FA53FEFB9FED /* MRBridge.h */, - DDA99B8F151A58F0B2E38FA18C211343 /* MRBridge.m */, - 0AE47E0C7C58C3899010069D11025EC8 /* MRBundleManager.h */, - 3C472CDAFF3E2AF4F0B84D8B87D7307B /* MRBundleManager.m */, - 3974275A8EE8520E2C51575A19B0B370 /* MRCommand.h */, - A3C882A580DCCCEB28AA2ADD5A6A92C4 /* MRCommand.m */, - 374B0EF37ADE73717B3ECBC0DB4BDE96 /* MRConstants.h */, - 4C266FF6F49517FD58E8723155B1D8BC /* MRConstants.m */, - 479960BF83D02BBA600BF8E16D8CB3A5 /* MRController.h */, - 5E4A4E5B5AAEC6F872CA30828FFBF8A4 /* MRController.m */, - 570B398A26A921F8FA093D9C9B07E027 /* MRError.h */, - 8F7D5512D049686AB606130195CE0526 /* MRError.m */, - 86DA9BEC751E73A747E1058549428A9C /* MRExpandModalViewController.h */, - 4E16B5453E647F089D6FD5E479D5BB5F /* MRExpandModalViewController.m */, - 4803CD876C5E2B8A1AFEB813307DD3AC /* MRNativeCommandHandler.h */, - 20CDED04B8DBFC354C29EB239CA8F428 /* MRNativeCommandHandler.m */, - 05D6CA7AC7F98CFB2E60CD6D77384EC0 /* MRProperty.h */, - E8F44486DC896B885C65B4ADC94908D5 /* MRProperty.m */, - 8421B78D82345C3C2218415460154209 /* MRVideoPlayerManager.h */, - 02F4FF6B450C0A7D3C06DA7A641FDA81 /* MRVideoPlayerManager.m */, - 397A582E29238B3DEE6741C658500F29 /* NSBundle+MPAdditions.h */, - 7B4870C332847015867E0F5AA508FC12 /* NSBundle+MPAdditions.m */, - 2B10D13E51B994B78AF5A26820D1FEC4 /* NSDate+MPAdditions.h */, - 338BDAC5E910488EB29BFAF1F8E0DD51 /* NSDate+MPAdditions.m */, - F78AB3B1BC85252B65E595DFCB083698 /* NSDictionary+MPAdditions.h */, - 15AFF8ED16FC6E7CB5CA92644D240135 /* NSDictionary+MPAdditions.m */, - CF6A63C4B55F5F7C3CECC0DCCEE4A69F /* NSError+MPAdditions.h */, - 7308B2C4895ADFCC9EFECDCB781BF3D0 /* NSError+MPAdditions.m */, - EA5FD4798893B6983BA67539BA02DA02 /* NSHTTPURLResponse+MPAdditions.h */, - C5DE951FFF7480D237C096DD917810DB /* NSHTTPURLResponse+MPAdditions.m */, - 847E2A1299B889745B7CDA61402E6461 /* NSJSONSerialization+MPAdditions.h */, - 5BBAEE1CC095D01BA59F46AFE45229A4 /* NSJSONSerialization+MPAdditions.m */, - 9D66005EED1D3EE319D3BCA7B2FB3F84 /* NSMutableArray+MPAdditions.h */, - E1DE133DDCCAFCD9002E34D14D1D13CB /* NSMutableArray+MPAdditions.m */, - 2FFA7F20C81452216AC42C752B29DD68 /* NSString+MPAdditions.h */, - 38BBA1F7B49CB582555FDEAA7AAEEE39 /* NSString+MPAdditions.m */, - B1CDFFDB9885F05026F30FC74314D7A2 /* NSString+MPConsentStatus.h */, - CA00615483FDE747EA80EE0D18DD6700 /* NSString+MPConsentStatus.m */, - E12C10BDCCB432E91925A8CE78C43506 /* NSURL+MPAdditions.h */, - 047D593E76EB49E2E716E15F76A96F2F /* NSURL+MPAdditions.m */, - C1ABE913DD8B69A5DA8473883B8FB38C /* SKStoreProductViewController+MPAdditions.h */, - 34A2C4994DA8BA507B267AF95D9FD790 /* SKStoreProductViewController+MPAdditions.m */, - 3CCACD3557439E6513F2334A6D470B76 /* UIButton+MPAdditions.h */, - 2390B971FF73244F6B1092ADAFB7B74C /* UIButton+MPAdditions.m */, - 4B52A223DC220741775717908F691CA1 /* UIColor+MPAdditions.h */, - A38678336EC0EBD6C70F9FAD95CBF8CF /* UIColor+MPAdditions.m */, - C23BFF88CC3767DDD0AF1082A7700C5E /* UIView+MPAdditions.h */, - 0678FE016B2DFDDD306A356AA16276CD /* UIView+MPAdditions.m */, - 930726743D728650CC75A995484B67B3 /* Resources */, - ); - name = Core; - sourceTree = ""; - }; - 4E97C6F45E0B60457CC7122D9FC47B23 /* AppsFlyerFramework */ = { - isa = PBXGroup; - children = ( - CB6C2C6F374D1D9F71C9E0B6025DB299 /* Frameworks */, - 459289723974B2E946504BDECE6941C0 /* Support Files */, - ); - name = AppsFlyerFramework; - path = AppsFlyerFramework; - sourceTree = ""; - }; - 5B54876C00EA77D1F5D15B163638391D /* iOS */ = { - isa = PBXGroup; - children = ( - 398D9C73F7A839DFACDA7E9381235B63 /* AVFoundation.framework */, - F037808B52C3604C55C12D4754D11EC9 /* AVKit.framework */, - EDAB3590DA5F32B3E4CEED29ED17BBA3 /* CoreGraphics.framework */, - AD36D3549F56921BAB6906898EE9EC02 /* CoreLocation.framework */, - DD6CF9696EB61CEA0BA52DB238408B83 /* CoreMedia.framework */, - 09848339CC1F184A821322EB9C266D55 /* CoreTelephony.framework */, - 7E622F34474A1058AB765526BF8520FB /* Foundation.framework */, - E1456C3286CD5AF8101B0A4F0E44F929 /* MediaPlayer.framework */, - CAD30B8E801FF58F5E3DB20D59A3DE82 /* QuartzCore.framework */, - 5DB346B4071FC4461222A71CCA838C98 /* SafariServices.framework */, - FB3C6A112211CDA7085A37214E8C6C47 /* Security.framework */, - 8A32B4EC2E226FFCDC31F82E6A52B86C /* SystemConfiguration.framework */, - 8D88B2688188E9D2DCFEB9F0DC0479CA /* UIKit.framework */, - ); - name = iOS; - sourceTree = ""; - }; - 5D92B6BDAA90B1E4FC28D93A1513B7C8 /* Products */ = { - isa = PBXGroup; - children = ( - 3347A1AB6546F0A3977529B8F199DC41 /* FBLPromises.framework */, - EC8F4D0BE3B0C192EBA4A93F8887D89F /* FBSDKCoreKit.framework */, - 5DE0FEFC3995E740EC1AE2611D0AEFB0 /* FBSDKLoginKit.framework */, - E2B63D462DB7F827C4B11FD51E4F8E2D /* FirebaseCore.framework */, - 8CC9178C366942FD6FF6A115604EAD58 /* FirebaseCoreDiagnostics.framework */, - 86375444C196BA272DDBB8165BF64A15 /* FirebaseCrashlytics.framework */, - 13C8C8B254851998F9289F71229B28A2 /* FirebaseInstallations.framework */, - 40F694279899D5DE08A1D633DAFE496B /* Flurry_iOS_SDK.framework */, - 856B5CD56F194FAD26EA91620B66D614 /* GoogleDataTransport.framework */, - 6942351307BC1F54575D9853307EAE0E /* GoogleDataTransportCCTSupport.framework */, - B43874C6CBB50E7134FBEC24BABFE14F /* GoogleUtilities.framework */, - 0A8924B6305C5116EA8035AE891818F6 /* MoPub.framework */, - 31C596999512C76A20CD0BAD735E6110 /* MoPub_FacebookAudienceNetwork_Adapters.framework */, - 06FC5C9CF96D60C50FCD47D339C91951 /* nanopb.framework */, A50D488397CF80FE035346303494968D /* Pods_MAPS_ME.framework */, ); name = Products; sourceTree = ""; }; - 5DF426BEAA099A08BD554F0C5E14FC63 /* Frameworks */ = { + 124CF13B56C609C84C529BB39D07978B /* Pods-MAPS.ME */ = { isa = PBXGroup; children = ( - 7B5802FB9F5AB8C64D72C22F77867BF0 /* libFlurry_11.1.0.a */, + C13DC30128F635797757F6D7CD91548C /* Pods-MAPS.ME.modulemap */, + 0C8CDF10789D2ACF955BA20C875EEFB6 /* Pods-MAPS.ME-acknowledgements.markdown */, + 62FDDDBC365B77C2BBD73DAA0CB8CE60 /* Pods-MAPS.ME-acknowledgements.plist */, + BCFD91FCC4D32901C2DC541CA8285D3C /* Pods-MAPS.ME-dummy.m */, + 48B724B519C3302CE74FB271653720A1 /* Pods-MAPS.ME-Info.plist */, + 1FEF97F4F8F5EAA30727A05FD0686A7B /* Pods-MAPS.ME-umbrella.h */, + 7ECD07FDE7142046FDC6F59C008BB3E3 /* Pods-MAPS.ME.debug.xcconfig */, + 9A3F53459150A78B1495133DC94E9C56 /* Pods-MAPS.ME.production full.xcconfig */, + 0360EACFE90690434ECAC82F752F684B /* Pods-MAPS.ME.release.xcconfig */, ); - name = Frameworks; + name = "Pods-MAPS.ME"; + path = "Target Support Files/Pods-MAPS.ME"; sourceTree = ""; }; - 65825434CB36C791E8F0FE3C208374BB /* Frameworks */ = { + 578452D2E740E91742655AC8F1636D1F /* iOS */ = { isa = PBXGroup; children = ( - 2F434EB928EE611EAB9AACF639563813 /* Pushwoosh.framework */, + 73010CC983E3809BECEE5348DA1BB8C6 /* Foundation.framework */, ); - name = Frameworks; + name = iOS; sourceTree = ""; }; - 6729E96275D0790704ADFA9A56EA6421 /* NSData+zlib */ = { + B4F6DEC9CE7BCEE6ECAFBFAC00D509A7 /* Targets Support Files */ = { isa = PBXGroup; children = ( - D63C7D1BEF95979824E596AD2C9176B7 /* GULNSData+zlib.h */, - 0ADCE169C2DFDCDA84BAF06B7A69AF17 /* GULNSData+zlib.m */, - 5756E1546078D0D1E4A6E0BE3F18A6A8 /* GULNSDataInternal.h */, - ); - name = "NSData+zlib"; - sourceTree = ""; - }; - 687D6E507C84C764E520B845799323B1 /* Support Files */ = { - isa = PBXGroup; - children = ( - AD8822A74DC906E65EBD794BA999AB1E /* MoPub-FacebookAudienceNetwork-Adapters.modulemap */, - 241633A4273109C52CF7080944E29E92 /* MoPub-FacebookAudienceNetwork-Adapters-dummy.m */, - 0F7B0E3F7C505262F6C97A04987D51BB /* MoPub-FacebookAudienceNetwork-Adapters-Info.plist */, - 35E139249FEF5B9E308CFEF49FC286A9 /* MoPub-FacebookAudienceNetwork-Adapters-prefix.pch */, - D9D2AB59193C5DC54FA5A2775836D3F3 /* MoPub-FacebookAudienceNetwork-Adapters-umbrella.h */, - F72A50E89773ACAEB727FC1A2A737083 /* MoPub-FacebookAudienceNetwork-Adapters.debug.xcconfig */, - 23837A4DED03B9629C929D352DB4E34E /* MoPub-FacebookAudienceNetwork-Adapters.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/MoPub-FacebookAudienceNetwork-Adapters"; - sourceTree = ""; - }; - 6C5199B1893D0EEFB743D24979A41DC5 /* Support Files */ = { - isa = PBXGroup; - children = ( - B3DFC0FDC86EF24DB6AC069D767F1DC3 /* GoogleUtilities.modulemap */, - 2D70C2E8302397BE469D6D671A61C9D9 /* GoogleUtilities-dummy.m */, - 88230E10D8AF4F49B0E4983659BA2151 /* GoogleUtilities-Info.plist */, - EB2E50347A2528AEA10822ECDBE3B63D /* GoogleUtilities-prefix.pch */, - A8F1D03EC2B0CBEC4CB64D5960B6DB6C /* GoogleUtilities-umbrella.h */, - 27888B5653D0913C4C5E5736A04AD8D1 /* GoogleUtilities.debug.xcconfig */, - 85788E3AF5206F9CDD220BE81B99858C /* GoogleUtilities.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/GoogleUtilities"; - sourceTree = ""; - }; - 6CC217FB07EA7487BFB353AEFE446E08 /* GoogleDataTransportCCTSupport */ = { - isa = PBXGroup; - children = ( - B3928D8C6DA55C8D5C580ACE10C351BA /* cct.nanopb.c */, - EFF66D538C1AF71FC5D1948D532C3843 /* cct.nanopb.h */, - 4171AD9CBF760E5D66F122F8F20C36EE /* GDTCCTCompressionHelper.h */, - A1D8D7A70772781F2962BAFEF6DE5BDB /* GDTCCTCompressionHelper.m */, - 9E9BC0324B44256F9848043373DA73BD /* GDTCCTNanopbHelpers.h */, - FE7D6306C39968ED9DAF5FC61B68E737 /* GDTCCTNanopbHelpers.m */, - A03CED05C2FD88B8A24AD454A0FDCE07 /* GDTCCTPrioritizer.h */, - 6C6F13156DD89CE737EA263F1E9D1187 /* GDTCCTPrioritizer.m */, - A9EB08FDFE9939C7BEE62DEA08229240 /* GDTCCTUploader.h */, - 62D23669A7DA2F7B7B38A21B83AD3BF3 /* GDTCCTUploader.m */, - 40FD2249472D8F7C8C8A6ACE137A1537 /* GDTCOREvent+GDTCCTSupport.h */, - 7D17C78ADCC152D5E6E1B713B98248B5 /* GDTCOREvent+GDTCCTSupport.m */, - 9D736B70E7B1E9737F3131FB00DFD729 /* Support Files */, - ); - name = GoogleDataTransportCCTSupport; - path = GoogleDataTransportCCTSupport; - sourceTree = ""; - }; - 729BBB662C6B1C14037F68A56B6920F1 /* Avid */ = { - isa = PBXGroup; - children = ( - 930C9A46DA6715C6092597A1D1D952DF /* MoPub_AbstractAvidAdSession.h */, - 200C9BC810FD120F0BDEF6B403D3284A /* MoPub_AbstractAvidManagedAdSession.h */, - C1699B1297A43343DDB89495117C3F5E /* MoPub_Avid.h */, - C3AE4B912AD6F08CD92E0BFA2706B656 /* MoPub_AvidAdSessionManager.h */, - 2EBB32E5262EDB52408506A8D23BC143 /* MoPub_AvidDeferredAdSessionListener.h */, - 602D88B00295014C6D3416B1B564C904 /* MoPub_AvidDisplayAdSession.h */, - 64297E187B8947F64F1BC5AF4C4077CF /* MoPub_AvidManagedDisplayAdSession.h */, - D3EF524958C2494DB7CD069BDAD74675 /* MoPub_AvidManagedVideoAdSession.h */, - 4C6D8A68F5E228D6D8B51D519EC81B38 /* MoPub_AvidVideoAdSession.h */, - 491287D06568031D2A46A13935EEB89E /* MoPub_AvidVideoPlaybackListener.h */, - 9DEE24157113083579B5D107C4C095E9 /* MoPub_ExternalAvidAdSessionContext.h */, - 20AFCAFAC86972789130D5D28C54E8F0 /* MPViewabilityAdapterAvid.h */, - EF0CFCC618B66B610D84E7454BF2233A /* MPViewabilityAdapterAvid.m */, - 8D7926D96AFBFB09A64964BD14C545F1 /* Frameworks */, - ); - name = Avid; - sourceTree = ""; - }; - 74EE6A31E02A2DD91F5B9AD1E51E1DAC /* FBSDKCoreKit */ = { - isa = PBXGroup; - children = ( - 957FD1CB9896D2E3AB927FC7D85CBA7F /* Basics */, - C1EA12F24D2CB9207AAB90231C12FBF7 /* Core */, - A3404E4DFB85B96522E65A91862CC6F2 /* Support Files */, - ); - name = FBSDKCoreKit; - path = FBSDKCoreKit; - sourceTree = ""; - }; - 763A5B97CBE20847E5E5CDC3CDDCC1E1 /* Reachability */ = { - isa = PBXGroup; - children = ( - 67716B3EA07B2120ABAC0720885B8501 /* GULReachabilityChecker.h */, - C5150E21455987525D084331795D17D9 /* GULReachabilityChecker.m */, - 322BE1BD10E9877A5A6E2D3B39EA1C9A /* GULReachabilityChecker+Internal.h */, - 9ACF948463B44B9CBCD15839A9C71A7B /* GULReachabilityMessageCode.h */, - ); - name = Reachability; - sourceTree = ""; - }; - 7C610A1EC4CC0E4FEFF851D152CBC251 /* Support Files */ = { - isa = PBXGroup; - children = ( - 7BF8A72C551D28B3CC11DDE9D32C067E /* FirebaseAnalytics.debug.xcconfig */, - 8A2079D3A3064C29D8BCF5B92737A22F /* FirebaseAnalytics.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/FirebaseAnalytics"; - sourceTree = ""; - }; - 843099F7439E752394584584DA07DA3B /* FirebaseCore */ = { - isa = PBXGroup; - children = ( - 542B131B0ABF21536A284C07B3FAA324 /* FIRAnalyticsConfiguration.h */, - 27DB1FB290B9134CD1AE55B9EC425A13 /* FIRAnalyticsConfiguration.m */, - 47F0C2A60BDAC27EDD167D068529AF76 /* FIRApp.h */, - 04D44923236CF63334698156AA7D0114 /* FIRApp.m */, - 2EC5E3FEE43BFD7EB302C4ADC7171929 /* FIRAppAssociationRegistration.h */, - B55C27E0004746FEE9DAD32ECBDB7592 /* FIRAppAssociationRegistration.m */, - 587FFBBCD6BB553F69A0F31CB108E118 /* FIRAppInternal.h */, - 6C04688AF12D0731B86D2173C3805671 /* FIRBundleUtil.h */, - 34FF41238BBFB358713DE7121CD3879A /* FIRBundleUtil.m */, - FCE764C2C52E5E7A88ED6152053E2DB8 /* FIRComponent.h */, - 0D1543A3445D40273F9C31523C8F92EC /* FIRComponent.m */, - B8EF546E8BCE2DC36157D7E93DE991A8 /* FIRComponentContainer.h */, - 61F82186454A72DF11C5CC52E9DF8CDC /* FIRComponentContainer.m */, - 8726BEB43B1C387135FD3070176FEF0B /* FIRComponentContainerInternal.h */, - 668E54390266144F77D0D4EE724678EC /* FIRComponentType.h */, - 33616668082F3F26DE0CE5DF7426B9BF /* FIRComponentType.m */, - 6A479C9AC5015AE7660FBDFCFE1F2B6A /* FIRConfiguration.h */, - 33ECAF322502355A7771CB5C018712BB /* FIRConfiguration.m */, - 52CE50E813C0CB6E62D37A873E3465E5 /* FIRConfigurationInternal.h */, - 015C5718742CBC0AC103C175BD154378 /* FIRCoreDiagnosticsConnector.h */, - 8F5C95F06D7F106B44CA92D1BEBCC488 /* FIRCoreDiagnosticsConnector.m */, - 3100364917F5330497CEB222F26C3BC9 /* FIRDependency.h */, - C43DD2EEB36EF95BE4CF3A5AE1BF77A3 /* FIRDependency.m */, - 66D3D4FC9484F0491598806842479651 /* FIRDiagnosticsData.h */, - B1C83E1CC6209D4EA4AF9E99B52CEED2 /* FIRDiagnosticsData.m */, - 4B7E65408B4B5868476876B2A67BB862 /* FirebaseCore.h */, - 3F1D4655AFFD835E9C2C535516F85DF1 /* FIRErrorCode.h */, - F78641950FCE3D8AA36E5E33D27DED54 /* FIRErrors.h */, - 862AFAFFF836A0DB4276C126500CD3DE /* FIRErrors.m */, - B08C7788E00490B31D94946ABF8D45D1 /* FIRHeartbeatInfo.h */, - 6ACBC2914F93D985326031BE043212AF /* FIRHeartbeatInfo.m */, - E6C694E1D06CCBE92BDCB8AD898FA1BF /* FIRLibrary.h */, - 9DD0DE202DCBBCA9F0AAAEE9712F3C89 /* FIRLogger.h */, - 2F750FF80EA8C734CF0F86AC8702C637 /* FIRLogger.m */, - 18C220367A63C478BA9150E330444821 /* FIRLoggerLevel.h */, - A1954E9E9F46D284C4446641C06D4670 /* FIROptions.h */, - 3B153F58CB062A9E3D9A640C518D4F9C /* FIROptions.m */, - F3066CF07AADE233E03777E43150C416 /* FIROptionsInternal.h */, - 924EC653C3FDD2077EFC407D2052C7CF /* FIRVersion.h */, - B4DFD201F459DF4CAFEFCA0E68626FC6 /* FIRVersion.m */, - C73D715BC7721D18A625E1448244415E /* Support Files */, - ); - name = FirebaseCore; - path = FirebaseCore; - sourceTree = ""; - }; - 8B107EAED75409DE0418AD64031AFF7A /* FirebaseCoreDiagnosticsInterop */ = { - isa = PBXGroup; - children = ( - F6C66B2DC50346BD83F7B30AD6857ADE /* FIRCoreDiagnosticsData.h */, - 30D76939E75E4FBD646C16543F4DF669 /* FIRCoreDiagnosticsInterop.h */, - C7A7BB9C5EC9A52B3F5CBD1E8A1D05D5 /* Support Files */, - ); - name = FirebaseCoreDiagnosticsInterop; - path = FirebaseCoreDiagnosticsInterop; - sourceTree = ""; - }; - 8D03BDE90A76CFCD6FDE7AD7FED744F3 /* Support Files */ = { - isa = PBXGroup; - children = ( - B2F2952698D05D04A1ED7D7AE022971C /* Flurry-iOS-SDK.modulemap */, - DF80F1B8CAA6C8D50609362E2A8BE8E6 /* Flurry-iOS-SDK-dummy.m */, - E07F8CD95E2E408F4B6C77192DEC0A1D /* Flurry-iOS-SDK-Info.plist */, - 372243DB9D9A44B6C4CCDF985C901975 /* Flurry-iOS-SDK-prefix.pch */, - DFF5B5C76F6231CCE943755B56ED7B74 /* Flurry-iOS-SDK-umbrella.h */, - 5A83A09F2C2A6E1D86439B034EFE4219 /* Flurry-iOS-SDK.debug.xcconfig */, - 7C4CFE5B0130DF4CA31ED2DAB3DE837E /* Flurry-iOS-SDK.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/Flurry-iOS-SDK"; - sourceTree = ""; - }; - 8D7926D96AFBFB09A64964BD14C545F1 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 433DC03F0862505F1FCCACBABAC878C4 /* libAvid-mopub-3.6.1.a */, - ); - name = Frameworks; - sourceTree = ""; - }; - 930726743D728650CC75A995484B67B3 /* Resources */ = { - isa = PBXGroup; - children = ( - 59348EE35CEBB5A1D8B458C9D66037B5 /* MPAdapters.plist */, - 19947711F89786514178559A44913718 /* MPCloseBtn.png */, - D70A0E6289B60C33CD61056A535F796A /* MPCloseBtn@2x.png */, - 5F8EFD9723447B23AB8B4BE7AE7EC175 /* MPCloseBtn@3x.png */, - 30E34210AA27835CDAA284576B42C1AD /* MPCloseButtonX.png */, - CA903F5FAA97ECA25B62C5067EE63EBD /* MPCloseButtonX@2x.png */, - 6BE178BA3C4DD765A4C34730B2CA5A51 /* MPCloseButtonX@3x.png */, - 377D0D37A34B69BCF8292F8B93465C1F /* MPDAAIcon.png */, - B10E88F1F8E125B124CB17B68D57D921 /* MPDAAIcon@2x.png */, - 35C39E4EB71492B4C99A57F3ABBC30A1 /* MPDAAIcon@3x.png */, - 3E5027C91576469206B65AA04B465E24 /* MPMutedBtn.png */, - 110466D95D202F08F834C72488BCE57E /* MPMutedBtn@2x.png */, - 4F0BAA6D69358801B92B1B0176998BC5 /* MPMutedBtn@3x.png */, - 96E758A6B074747019C2EFBC470CC4B3 /* MPPlayBtn.png */, - 32ADF318F72F7017909E357D87E107FB /* MPPlayBtn@2x.png */, - 613FFCD960C0F7FADC0619A6DE10D332 /* MPPlayBtn@3x.png */, - 8E4E3180FC567C9FCDA8CD91312C90E6 /* MPUnmutedBtn.png */, - 178DF744509E149AA5E2706130C399B7 /* MPUnmutedBtn@2x.png */, - F420A294AE0D493C65C20AC57A9A26D3 /* MPUnmutedBtn@3x.png */, - 7772258312F8FFBC37B1701CF91A67C4 /* MRAID.bundle */, - ); - name = Resources; - sourceTree = ""; - }; - 935FC534DB26477B93F26658B8BBC3BC /* AppDelegateSwizzler */ = { - isa = PBXGroup; - children = ( - 025436CF7D9569EB62DC3B55851351F8 /* GULAppDelegateSwizzler.h */, - E0530167921E112E6D2B348B21686B78 /* GULAppDelegateSwizzler.m */, - 2EDB90ADA9ED56EC444C22CE24A343BE /* GULAppDelegateSwizzler_Private.h */, - 726043824B0B792D392FA440DD2A5FD8 /* GULApplication.h */, - EA8C351C1FAEB71A3425C8C9B8998A9C /* GULLoggerCodes.h */, - 058A05D288334891D5D176D32DAD91D3 /* GULSceneDelegateSwizzler.h */, - 1D59315AD801D0805A2C66A20CDFCFA0 /* GULSceneDelegateSwizzler.m */, - 92FC128941C72598AEE19D298137FB17 /* GULSceneDelegateSwizzler_Private.h */, - ); - name = AppDelegateSwizzler; - sourceTree = ""; - }; - 957FD1CB9896D2E3AB927FC7D85CBA7F /* Basics */ = { - isa = PBXGroup; - children = ( - 6CD5E8B3FC92723C070DBE5A7D1D7802 /* FBSDKBasicUtility.h */, - 0CD8DD8AFF40B6AB5746108E84D5520D /* FBSDKBasicUtility.m */, - 61F23C9B70945D4FAE48F766E9A2C500 /* FBSDKCrashHandler.h */, - F385FA69C6AA0F08094D870EBF86E605 /* FBSDKCrashHandler.m */, - 16EADB58B34000FF17C58604465CC694 /* FBSDKCrashObserving.h */, - 898AEBA83AAE68448347BF534C69079E /* FBSDKLibAnalyzer.h */, - 008788AB90E92CB1D6CAC4FFA2B977DE /* FBSDKLibAnalyzer.m */, - 255544BB8527817AE5EBE5D395FA2277 /* FBSDKTypeUtility.h */, - 64F187D3903107ADC2536B804B6FEC30 /* FBSDKTypeUtility.m */, - 37BAC838FB60C21A49369903A7EB84E3 /* FBSDKURLSession.h */, - AE9D1CCBC8BDA05B12165DA80C131740 /* FBSDKURLSession.m */, - 4C42C0336E253290E026C54D5309C6CE /* FBSDKURLSessionTask.h */, - 9625FE3146AFA08C097760D0E77F9C02 /* FBSDKURLSessionTask.m */, - ); - name = Basics; - sourceTree = ""; - }; - 958170D657A14244217700620AE49314 /* Support Files */ = { - isa = PBXGroup; - children = ( - 352EA26A6A6EE212ECDD91F0185A4B85 /* Firebase.debug.xcconfig */, - DB4CFDE48D385561DA2EA77DA34F2BDB /* Firebase.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/Firebase"; - sourceTree = ""; - }; - 976622ED7437E05CE14283FD4536E7C0 /* PromisesObjC */ = { - isa = PBXGroup; - children = ( - 8A40F24A1996380E9AC544EFBB092619 /* FBLPromise.h */, - 211919002F2CA7D396CAD0FF8546330F /* FBLPromise.m */, - BEB454A969CE2F9060C13662DCA0A898 /* FBLPromise+All.h */, - C5283991687EAA1980EF248539FD7A33 /* FBLPromise+All.m */, - 37777354812FE47A944BD0FEE1B09B96 /* FBLPromise+Always.h */, - EE6A99FEAD1985536C3FA5E943E2B5BC /* FBLPromise+Always.m */, - AD4E5601CB7CBE9FE1E793A00E842797 /* FBLPromise+Any.h */, - 17B7CCEB9DB1937755D39AC2B41F7E60 /* FBLPromise+Any.m */, - 51787E462F9853181C9270EE1E23E41C /* FBLPromise+Async.h */, - A3CF869182B5F38124D11E4DB27CCFE3 /* FBLPromise+Async.m */, - CF437374EFE55C1F6AAC583CF2438B58 /* FBLPromise+Await.h */, - 56A7BDBDC4B4B68A10B672FD7D2883BB /* FBLPromise+Await.m */, - 10D2FE383B555E9DF33CBBE8010D83F3 /* FBLPromise+Catch.h */, - 2965558CDF1D7BA0D97E468AEB624D9F /* FBLPromise+Catch.m */, - E00CDD52AFADD5EFD17A32C69C38ABEE /* FBLPromise+Delay.h */, - 9561112F6366C81B44BEADC3A6CA6547 /* FBLPromise+Delay.m */, - CE430B0B5A3471C63F31CAE393C5233E /* FBLPromise+Do.h */, - A7D3EBF79A9194EA89A448F8CA040A4A /* FBLPromise+Do.m */, - F4CB01AA9AD13CB18A92D05BE1D130DA /* FBLPromise+Race.h */, - E0E3DAADC1863DE965F304E74AF4DFB2 /* FBLPromise+Race.m */, - F2ED25B46717EE76477932E591AF483B /* FBLPromise+Recover.h */, - E7D9238E7FA56526B97258D477D14255 /* FBLPromise+Recover.m */, - 6A7D1EA91DD59D2BF101E37913B7F9A5 /* FBLPromise+Reduce.h */, - 8AA16CC8BD2EAD44F640A97A5349131D /* FBLPromise+Reduce.m */, - 92508B11E4711DFE2426DF55E1526E60 /* FBLPromise+Retry.h */, - 80E308E891E031A69331D98708DF15A9 /* FBLPromise+Retry.m */, - 9D4325D5B5B5EE56512FA79B4BED8DE5 /* FBLPromise+Testing.h */, - DD6AFFBE7C0032917FC59D6EFB74E582 /* FBLPromise+Testing.m */, - 8B5BE6A19289ABECD933850DCDB9714F /* FBLPromise+Then.h */, - E9F2DAD326F9C67B2A7D41EE2353716D /* FBLPromise+Then.m */, - 1698BEAFD75D33FEEB50BF85AC0D5EDE /* FBLPromise+Timeout.h */, - 1E55BFB71A6F16FE7E26F5D49426F3C6 /* FBLPromise+Timeout.m */, - 6E59FEC9A67608BADD8B56A68F9455C4 /* FBLPromise+Validate.h */, - 298F64F4AF220C812BC1F2A42B934F50 /* FBLPromise+Validate.m */, - E3C569EF859C4D9FE4623F2C5C81A6AF /* FBLPromise+Wrap.h */, - 189656ECFEB104F73155E9AA9AD66671 /* FBLPromise+Wrap.m */, - A60E9CEBF4FBB5B9DC8BCA2F72ABA9CE /* FBLPromiseError.h */, - 26F9B818A4EA688567913EA8CD5EB7ED /* FBLPromiseError.m */, - 55471D69FCD1202E3799DF38F0B496CB /* FBLPromisePrivate.h */, - 5608D402612BADF9402F627D5A1E5E2E /* FBLPromises.h */, - A8F02C1EA4BBD13C5883DD00823DC925 /* Support Files */, - ); - name = PromisesObjC; - path = PromisesObjC; - sourceTree = ""; - }; - 99ED139B6CC5686D10B3B8A8B256CF85 /* FirebaseAnalytics */ = { - isa = PBXGroup; - children = ( - FDC3183EDD7AA86A762291114329174E /* Frameworks */, - 7C610A1EC4CC0E4FEFF851D152CBC251 /* Support Files */, - ); - name = FirebaseAnalytics; - path = FirebaseAnalytics; - sourceTree = ""; - }; - 9C3C44A6E01E382F9B078988E55D2AAA /* MoPub-FacebookAudienceNetwork-Adapters */ = { - isa = PBXGroup; - children = ( - E9F235DB6B5926ADB53A700A00189E28 /* Network */, - 687D6E507C84C764E520B845799323B1 /* Support Files */, - ); - name = "MoPub-FacebookAudienceNetwork-Adapters"; - path = "MoPub-FacebookAudienceNetwork-Adapters"; - sourceTree = ""; - }; - 9CD86C903B1656FB93853FCF161CDFAD /* GoogleUtilities */ = { - isa = PBXGroup; - children = ( - 935FC534DB26477B93F26658B8BBC3BC /* AppDelegateSwizzler */, - 9E9F3F2E9BF76705DBB41E71BD16B7AA /* Environment */, - 3263527447C237548E056F7AB0A57089 /* Logger */, - 09B4074386911B9369B8592F1647B2A2 /* MethodSwizzler */, - 39C6C17B154525292D70DB4B964C64A8 /* Network */, - 6729E96275D0790704ADFA9A56EA6421 /* NSData+zlib */, - 763A5B97CBE20847E5E5CDC3CDDCC1E1 /* Reachability */, - 6C5199B1893D0EEFB743D24979A41DC5 /* Support Files */, - D8104636AB956D21A63439A2D9B03A2D /* UserDefaults */, - ); - name = GoogleUtilities; - path = GoogleUtilities; - sourceTree = ""; - }; - 9D736B70E7B1E9737F3131FB00DFD729 /* Support Files */ = { - isa = PBXGroup; - children = ( - AB6990BD5609E933344C50AA1B1A1323 /* GoogleDataTransportCCTSupport.modulemap */, - 76F3716DBD1D1B498123462FC4113A9A /* GoogleDataTransportCCTSupport-dummy.m */, - 1E973CC4D18DF4C99759B7FC1C554998 /* GoogleDataTransportCCTSupport-Info.plist */, - 92D1CD0919924578F3F6A7EDB23592ED /* GoogleDataTransportCCTSupport-umbrella.h */, - D919AB3B7647CDE8F235DFA2ABDC7EEA /* GoogleDataTransportCCTSupport.debug.xcconfig */, - DDAB6FBFA511BC947E30FAC4F5A6C8B9 /* GoogleDataTransportCCTSupport.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/GoogleDataTransportCCTSupport"; - sourceTree = ""; - }; - 9E9F3F2E9BF76705DBB41E71BD16B7AA /* Environment */ = { - isa = PBXGroup; - children = ( - F48EAC38BEFDD31749021EC60E3886CB /* GULAppEnvironmentUtil.h */, - CBDDE1A08FE280FD081969F12B45D913 /* GULAppEnvironmentUtil.m */, - 2B8A039103F9953CD99C228EC3DDBFF5 /* GULHeartbeatDateStorage.h */, - 8B2D31DDF28781D80D3A1BAFF8EAC605 /* GULHeartbeatDateStorage.m */, - B185A7CAFAE029A2FAA33A84A90D99A2 /* GULKeychainStorage.h */, - B5F7F774F307557AD2D36DC8260C8DC0 /* GULKeychainStorage.m */, - F7CD18D3CEA07372EE793CFF787FB564 /* GULKeychainUtils.h */, - 9B9E924D1C60C384D9FA932B85AEA5BC /* GULKeychainUtils.m */, - 8312F28D52AEE986AC2184D2BD798B0B /* GULSecureCoding.h */, - 5046AB35485C26796CC427D3AAEF613A /* GULSecureCoding.m */, - ); - name = Environment; - sourceTree = ""; - }; - A0293EC14F82F44615B8FB84859CF9F0 /* NativeAds */ = { - isa = PBXGroup; - children = ( - FD10F7B586B98E2C85696FE5DDB62D69 /* MOPUBActivityIndicatorView.h */, - D79F393250BF3A0CB9F297EAD8E1356B /* MOPUBActivityIndicatorView.m */, - 2F0B3B46168693416633F9BE6AC077DC /* MOPUBAVPlayer.h */, - 874697498891F3E60C6ED1A7D1D95A89 /* MOPUBAVPlayer.m */, - 4E14D81993CFBDE06E4D0CDF3C1B8FDD /* MOPUBAVPlayerView.h */, - 03E9BAC51FCDFEFE1E4AA322E08B9C8F /* MOPUBAVPlayerView.m */, - 6F21BAAA4F442FBEB12685B85F255676 /* MOPUBFullscreenPlayerViewController.h */, - B59D5157E18EBD43A5BBD531223E7469 /* MOPUBFullscreenPlayerViewController.m */, - FC6155FF94FD0991843109C2BAD27684 /* MOPUBNativeVideoAdAdapter.h */, - B00600852DB9D12541E4BB94785E939E /* MOPUBNativeVideoAdAdapter.m */, - 5FEA82452BAA884766544EEBBF9282D7 /* MOPUBNativeVideoAdConfigValues.h */, - 4C7A3710F6ABD60965DED3142934FEBA /* MOPUBNativeVideoAdConfigValues.m */, - 11C5302E85FCD45DFA64B62C5DEC15D2 /* MOPUBNativeVideoAdRenderer.h */, - 4CEDF076873C151B52DB87AFF4D69838 /* MOPUBNativeVideoAdRenderer.m */, - C0540E9A58E0C9980A70CDCD727CC1D7 /* MOPUBNativeVideoAdRendererSettings.h */, - 722251709E755801F89FFEEFD0245F77 /* MOPUBNativeVideoAdRendererSettings.m */, - 6D32FD4E1B6BB0BB60BE0BACE903DE48 /* MOPUBNativeVideoCustomEvent.h */, - 68692631D9BCCC58D8F4E29423BE3DAA /* MOPUBNativeVideoCustomEvent.m */, - 55950CB91C9BBB3BDB1E5669E1029C17 /* MOPUBPlayerManager.h */, - 569667724A6E51485F7F6C1E29779BDE /* MOPUBPlayerManager.m */, - 18ACA8724F0F50ACD1DBFF464A5E9407 /* MOPUBPlayerView.h */, - 72700B6C26BEB1651ADCA5EFC91C45E9 /* MOPUBPlayerView.m */, - 36DA9F75953A08F4C879A0E62AFBA515 /* MOPUBPlayerViewController.h */, - 5E382684BEE5094909BC60FB7F604CB0 /* MOPUBPlayerViewController.m */, - B8C1C01874F15B848BBD56EDEB351255 /* MOPUBReplayView.h */, - 1AA80DA12D6EFABB753DCB998DB738B5 /* MOPUBReplayView.m */, - 8965476885187910D2D1BA1147142172 /* MPAdPlacerInvocation.h */, - 7049096A71986AFBE5AA27B7616A6CD4 /* MPAdPlacerInvocation.m */, - 67542E6518C8872B2E3790707317DACE /* MPAdPositioning.h */, - 6B09EC9CBB78F317C0E7C884C6159B17 /* MPAdPositioning.m */, - E44D7EA70B427A270D855EB2BD8312A7 /* MPBaseNativeAdRenderer.h */, - 2B9245C9D90906DAE40DF21994176FAD /* MPBaseNativeAdRenderer.m */, - EE420C9E6A86C5FBDF665940971F34FC /* MPBaseNativeAdRenderer+Internal.h */, - 9FF4BB5C84B9B9985656D28B7E279B43 /* MPBaseNativeAdRenderer+Internal.m */, - 06A02E80D1C5D4C73742A796CAAAA880 /* MPClientAdPositioning.h */, - 425C6C9E5BA28A9051C4DC9E95650D8E /* MPClientAdPositioning.m */, - 38DC5A3A8954173322E07CFF7B498EAE /* MPCollectionViewAdPlacer.h */, - 6F0A4355DDF80E4D44EB2799EA3D706F /* MPCollectionViewAdPlacer.m */, - 2A7C40A0D95D9AE52AA3BF5D4605A058 /* MPCollectionViewAdPlacerCell.h */, - 961C0A65DBF056A1E8230D17274B3D31 /* MPCollectionViewAdPlacerCell.m */, - 38AD7B97CFB7E70C773BFA2E198800FF /* MPCollectionViewAdPlacerDelegate.h */, - D1DBA4FCC2DFAC1117EE903439EB15E5 /* MPMoPubNativeAdAdapter.h */, - 67DB22DC05D0D7C7BC78386175B0DD41 /* MPMoPubNativeAdAdapter.m */, - 06C2D80F1174A8BD4EF3423D5064D41E /* MPMoPubNativeCustomEvent.h */, - 2D197AA74E37E0B5774E58C0B5A0A0EC /* MPMoPubNativeCustomEvent.m */, - B2453CAD660824D748EB15B9F6953E75 /* MPNativeAd.h */, - 3053929D95FA0C6E657E3BC71A12B734 /* MPNativeAd.m */, - DDC924443FBF390ADEE4A44A3AB1BEAF /* MPNativeAd+Internal.h */, - 0C601DB682823E530270E63F2D9D45B3 /* MPNativeAd+Internal.m */, - 9396B8263A1F8670989ED2DAEF4ECFA8 /* MPNativeAdAdapter.h */, - 46DA5680C87AF21DB250F1FE9744E305 /* MPNativeAdConfigValues.h */, - A6F6B1D66145F0029417A5AEEF792460 /* MPNativeAdConfigValues.m */, - 95A86DBD96A14204D2A0CB87FE398574 /* MPNativeAdConfigValues+Internal.h */, - DBA6B3CC21109AB390353740B0099598 /* MPNativeAdConfigValues+Internal.m */, - 3B792C7CD1317917125C2EB53EC15E4C /* MPNativeAdConstants.h */, - 96F93CB0D0E231E2B13989B1EB33113A /* MPNativeAdConstants.m */, - 8DF01BF3644DE8D55CB89C5D73774798 /* MPNativeAdData.h */, - 67D1C3F645C22AA4329067D10A17C661 /* MPNativeAdData.m */, - 1F87C6E65D1BE76F395ED7F1EE4A43A7 /* MPNativeAdDelegate.h */, - 52037439DED6F40B8E0F4716241CDEE5 /* MPNativeAdError+VAST.h */, - 709EFBD2F6AE1737C22A904822B4426B /* MPNativeAdError+VAST.m */, - 34FBD36A2BAECA59308A139DFC3745A2 /* MPNativeAdRenderer.h */, - E4B3E3E6D5DB5738EA1E52DCB71B2BD6 /* MPNativeAdRendererConfiguration.h */, - 09FF2C02EC266B00E1319521BF961022 /* MPNativeAdRendererConfiguration.m */, - 0D096A18FD1A4F80D68382B11D2D4D65 /* MPNativeAdRendererConstants.h */, - 2F46B051CE3F732A21FE0932DD3B4F97 /* MPNativeAdRendererImageHandler.h */, - 6E1B1C323958B2683C3864841131C092 /* MPNativeAdRendererImageHandler.m */, - 716BAF382C88FD1CF7FB0F74354FA0FA /* MPNativeAdRendererSettings.h */, - 28FA8E076B3803FC0698F0981339450F /* MPNativeAdRendering.h */, - F2245E83269AFA0BCDB6A1697D1EC32F /* MPNativeAdRenderingImageLoader.h */, - 8EA3C5A33D9C1E8AE138CDD68C69C675 /* MPNativeAdRenderingImageLoader.m */, - 2248502871E2EFB0EBA2F8948F0CC376 /* MPNativeAdRequest.h */, - 1F70D657B992CA547A3D6A86369F51FC /* MPNativeAdRequest.m */, - 3BB3871DB66CC47F507FF278708C3BD5 /* MPNativeAdRequest+MPNativeAdSource.h */, - 927376525CE83C1EDB8B91AFEB98D554 /* MPNativeAdRequestTargeting.h */, - 245D12E81EC5DD2D0D00418F125A3708 /* MPNativeAdRequestTargeting.m */, - 3B1F9758C6825FC17878A284A83F9DC6 /* MPNativeAds.h */, - 932049BBF0F8CA72D69361B2B0754296 /* MPNativeAdSource.h */, - 088FA89003CA8937C297FABCB98C888E /* MPNativeAdSource.m */, - 24EFEC7A4F9BE68DA7AA649C9B534166 /* MPNativeAdSourceDelegate.h */, - 97533D5F75D6A6A71AEF127CEF57F6D6 /* MPNativeAdSourceQueue.h */, - 5E7BC7D97DDCE07D92A8206F7C9C3B81 /* MPNativeAdSourceQueue.m */, - 97271906195BB429DF95B80787A2E219 /* MPNativeAdUtils.h */, - 2B18C03BBA4DCBE317C28B2980E00AE5 /* MPNativeAdUtils.m */, - 6732B7DE631E847015B1B93C9EACD554 /* MPNativeCustomEvent.h */, - A32789EBF7B8C2B831148E699229B60D /* MPNativeCustomEvent.m */, - 9E6732319F91DEFF1EF5560E5E29436D /* MPNativeCustomEventDelegate.h */, - D03B5828EB71E48F7801EC9B3A1867EE /* MPNativePositionResponseDeserializer.h */, - D7B25E151F6CEE3FCCCFFA5E45CE1958 /* MPNativePositionResponseDeserializer.m */, - 9510A54071DF69DE5B3A8D4740C5F81B /* MPNativePositionSource.h */, - CEDB48D4E2F6F3F770A53D31F1856795 /* MPNativePositionSource.m */, - 7A8AC4623F10EB2A718EA1CD2D86333C /* MPNativeView.h */, - F89E5E9C4209BF914E87A8D594320251 /* MPNativeView.m */, - E9D7750489A49A62BB4B3740B7E31F66 /* MPServerAdPositioning.h */, - 3E174B963665D5556326CF980DF42810 /* MPServerAdPositioning.m */, - 98914998F7260C49A1D2A080F55D2068 /* MPStaticNativeAdRenderer.h */, - 27FF64175AB8FC590892346D5B7041F4 /* MPStaticNativeAdRenderer.m */, - 3701BBDFB1DD8EFDF8920A26561EF0DD /* MPStaticNativeAdRendererSettings.h */, - 0457EF6C9EF25D313C049009B7E0CA94 /* MPStaticNativeAdRendererSettings.m */, - E75F617DBF685C797F6E6744916C3454 /* MPStreamAdPlacementData.h */, - 10F83B8580E47159C94FA05B43A920A8 /* MPStreamAdPlacementData.m */, - A8378EAC3C6E8BE535B47B52F8C26B32 /* MPStreamAdPlacer.h */, - 5E45B05D98A6DB306C0F1D991C952478 /* MPStreamAdPlacer.m */, - 291F3C6744C3D0D00FFCDB17202EFA35 /* MPStreamAdPlacerDelegate.h */, - F538607239E8624F6F932EB08DC4BF85 /* MPTableViewAdPlacer.h */, - 150923DBB7459F1982ECE83658A4FAC2 /* MPTableViewAdPlacer.m */, - 93789485924BEE4E63DE79D583C39B1F /* MPTableViewAdPlacerCell.h */, - 04AB938EF519924E1E86F4753C744F77 /* MPTableViewAdPlacerCell.m */, - 3AAF61DEF2D09996FD9D2BA4B4C8BF88 /* MPTableViewAdPlacerDelegate.h */, - ); - name = NativeAds; - sourceTree = ""; - }; - A3404E4DFB85B96522E65A91862CC6F2 /* Support Files */ = { - isa = PBXGroup; - children = ( - 17A0F63C299400C9FB5C0797EB10E006 /* FBSDKCoreKit.modulemap */, - CE5B9D3AD3DB3D2A1B0F81DC562447B9 /* FBSDKCoreKit-dummy.m */, - 30BDF99529E4432D9643AD7A0BDDEC28 /* FBSDKCoreKit-Info.plist */, - 41428B555BFE4B749A371517A2A41FE3 /* FBSDKCoreKit-prefix.pch */, - F92BE1CBFCF07492C50DFF3A72DBB794 /* FBSDKCoreKit-umbrella.h */, - BB28CE7ABD1CD14783DCDE329DA90A9A /* FBSDKCoreKit.debug.xcconfig */, - F2DE8DACF699E98BA9B8103D69297896 /* FBSDKCoreKit.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/FBSDKCoreKit"; - sourceTree = ""; - }; - A477D6BDDB57BAF6D25FA8DEDA062F9E /* Moat */ = { - isa = PBXGroup; - children = ( - 0F00F7C653C8AF0F8B1B154E5EE5A071 /* MPViewabilityAdapterMoat.h */, - AAE64F2720857AB36590DB810A3BE3E0 /* MPViewabilityAdapterMoat.m */, - 158FAEE637459190674181E91CD16B7C /* Frameworks */, - ); - name = Moat; - sourceTree = ""; - }; - A5C63034C20297FBF0011390D22F7569 /* decode */ = { - isa = PBXGroup; - children = ( - ); - name = decode; - sourceTree = ""; - }; - A8F02C1EA4BBD13C5883DD00823DC925 /* Support Files */ = { - isa = PBXGroup; - children = ( - 5291811169B0B1837EEB9FC21033FF17 /* PromisesObjC.modulemap */, - 91D5B6D34524FBC511385A6729B4F89F /* PromisesObjC-dummy.m */, - 5716D60DC5515E06A21D0521E9DAF55D /* PromisesObjC-Info.plist */, - FC57614E3243EC7C555920CC8C93AEA4 /* PromisesObjC-umbrella.h */, - 1D2230D29B8EDB91E07F7C270212E82A /* PromisesObjC.debug.xcconfig */, - 274C7A0C93E7A2D754D9A0869C090BD7 /* PromisesObjC.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/PromisesObjC"; - sourceTree = ""; - }; - BB3C9D7A012F38EC50AD9C36A2B87AB1 /* mopub-ios-sdk */ = { - isa = PBXGroup; - children = ( - 729BBB662C6B1C14037F68A56B6920F1 /* Avid */, - 4CA17F5AEC9A853501943548809FDC92 /* Core */, - A477D6BDDB57BAF6D25FA8DEDA062F9E /* Moat */, - A0293EC14F82F44615B8FB84859CF9F0 /* NativeAds */, - 4A8AB5680D2F28934E664B6707232091 /* Support Files */, - ); - name = "mopub-ios-sdk"; - path = "mopub-ios-sdk"; - sourceTree = ""; - }; - BDE0D5FDCD80D5FC2D88642960D810F9 /* Targets Support Files */ = { - isa = PBXGroup; - children = ( - 08D2D768F4AB8FBA4BF7CDEDC9D03588 /* Pods-MAPS.ME */, + 124CF13B56C609C84C529BB39D07978B /* Pods-MAPS.ME */, ); name = "Targets Support Files"; sourceTree = ""; }; - BE1B51DAC7B9284C5883D4E4D6E315B5 /* Support Files */ = { - isa = PBXGroup; - children = ( - 7FC8AF597BA8ABE50213AD9C432B6054 /* GoogleAppMeasurement.debug.xcconfig */, - B0C8D99CB0A2CB882677D2F6D49A2A97 /* GoogleAppMeasurement.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/GoogleAppMeasurement"; - sourceTree = ""; - }; - C1EA12F24D2CB9207AAB90231C12FBF7 /* Core */ = { - isa = PBXGroup; - children = ( - 170FFB1F45457129DD75B06B0F6971DF /* _FBSDKTemporaryErrorRecoveryAttempter.h */, - 6D00D1C6DDE0D1977FE09A5D012C925E /* _FBSDKTemporaryErrorRecoveryAttempter.m */, - 26676267F06027E7B2F15B0EC615B45B /* FBSDKAccessToken.h */, - E238D469B16F4BF9C5B184066571C740 /* FBSDKAccessToken.m */, - D9AC0AB30DA90EB31444CDDA222D3616 /* FBSDKAccessTokenCache.h */, - 2680511DDF46778435320A7B4840000C /* FBSDKAccessTokenCache.m */, - A048F7703B2EC24450F7C922DEE20108 /* FBSDKAccessTokenCaching.h */, - CA28F95A677C70A2D7337932F0531D36 /* FBSDKAccessTokenExpirer.h */, - DA945CFEB939D760822C233216963059 /* FBSDKAccessTokenExpirer.m */, - D76A6B3C4CBF23CB99E36B34D94F1033 /* FBSDKAddressFilterManager.h */, - 3A50BB88B83485FECE6656A05DD44F63 /* FBSDKAddressFilterManager.m */, - 7AB75C783FDB662AD33F4856BDBF5462 /* FBSDKAddressInferencer.h */, - 93B3198F5C2C4103AB18153B0A491FA8 /* FBSDKAddressInferencer.mm */, - 9E3BB2863E3B2FBDCDC4718F0179A2C0 /* FBSDKAppEvents.h */, - 9A0EE4D0B856820E1C49CF676DAEFCE0 /* FBSDKAppEvents.m */, - 53FF4CCC1FABE78426798DE1E56EC034 /* FBSDKAppEvents+Internal.h */, - A335D2C7E61D1461D4DB838170CD9FA9 /* FBSDKAppEventsDeviceInfo.h */, - 61A3959E94C4B990AD422BC25379BC68 /* FBSDKAppEventsDeviceInfo.m */, - 195DCE7FE88ADB68A034247658D98612 /* FBSDKAppEventsState.h */, - 51FBE7BF1EB7522550A924268B898BCA /* FBSDKAppEventsState.m */, - 27984B56829FFC47959C914BFCA10633 /* FBSDKAppEventsStateManager.h */, - 5FC309F08A3FF395E88CBFFB5FCFE38F /* FBSDKAppEventsStateManager.m */, - 445F34298CEC5A0DBA4CEFD646358DC0 /* FBSDKAppEventsUtility.h */, - 93ECBD3546A54D7CEBC0DDCFFE3F9757 /* FBSDKAppEventsUtility.m */, - D32E916E946062051632D0E5DBE612CD /* FBSDKApplicationDelegate.h */, - 48B4D669B585E55A8AF693DEAE17A76A /* FBSDKApplicationDelegate.m */, - 39B886D57011C9A00F3A48439B0C6332 /* FBSDKApplicationDelegate+Internal.h */, - C331EBD13FE3B9AFCACDA8A4FF2A5368 /* FBSDKApplicationObserving.h */, - 3063F76C9BB8AA8D06D25204BD51C3D0 /* FBSDKAppLink.h */, - 0EC2AE59F7922C48BC051E3E111582CC /* FBSDKAppLink.m */, - 6607DF7BF9280EB584C65AE5A9BC6812 /* FBSDKAppLink_Internal.h */, - 6BD62F86FFA0AFECE6E9A616975A0C35 /* FBSDKAppLinkNavigation.h */, - 5F0AA226BE67D8A48FC380E6F61314BD /* FBSDKAppLinkNavigation.m */, - 1AC7B2A4F058439563278763F4DFFCAD /* FBSDKAppLinkResolver.h */, - 2257D7B14B10221A39417A5F09201B0F /* FBSDKAppLinkResolver.m */, - 9EA27C27E8BE6A319F46EEFDC78434B0 /* FBSDKAppLinkResolving.h */, - 284F3FFEDAD59D2F26C9A2AFA013AFA8 /* FBSDKAppLinkReturnToRefererController.h */, - 96E03CC38EBF2C35270FE9DBBF9CDF93 /* FBSDKAppLinkReturnToRefererController.m */, - 42AA59E742D3FCDCB5BB7DFFDD4A48AB /* FBSDKAppLinkReturnToRefererView.h */, - 3032857EDF5B64F97C30227E23B7EF49 /* FBSDKAppLinkReturnToRefererView.m */, - CB5C78A2BDB0940C7A7CF9B73D6AAB24 /* FBSDKAppLinkReturnToRefererView_Internal.h */, - 6EB39E144532ABC1E978112178C709D1 /* FBSDKAppLinkTarget.h */, - 779B708F23B2347E6B64C56B472C4A68 /* FBSDKAppLinkTarget.m */, - EA71A2D0AD037B5B5FF80843D786F47B /* FBSDKAppLinkUtility.h */, - 3A0778EEA713C489035B404659220EAA /* FBSDKAppLinkUtility.m */, - B6BFE2BEEAB345CC2A86394E363C10F3 /* FBSDKAudioResourceLoader.h */, - ADC4A2B157B2A75E74E84E0A996C0862 /* FBSDKAudioResourceLoader.m */, - 8081747B6821D47031C444F6953D8A04 /* FBSDKBase64.h */, - 8F37D0042C941293047BDBFD25E23093 /* FBSDKBase64.m */, - C5A5A90A2DBA3066963D3C1480317AFB /* FBSDKBridgeAPI.h */, - 5BA7DDDA05CE66379945AAE1F4F8B2C9 /* FBSDKBridgeAPI.m */, - CB649F2C8A374A8C50B0735B42FB2B54 /* FBSDKBridgeAPIProtocol.h */, - A21BD2E784522D6515FFA0C71641B86F /* FBSDKBridgeAPIProtocolNativeV1.h */, - B57053868DD7EAB72E0E75813CCDC629 /* FBSDKBridgeAPIProtocolNativeV1.m */, - B1FF2D47493DFA173BC3862D49D9EC29 /* FBSDKBridgeAPIProtocolType.h */, - 4A3633CD85491A5F14C3E1F3813FE6A1 /* FBSDKBridgeAPIProtocolWebV1.h */, - C68405D6DB0F7882F3FF9CB54BB6A899 /* FBSDKBridgeAPIProtocolWebV1.m */, - 8EC73343422232DBD4799D037B603602 /* FBSDKBridgeAPIProtocolWebV2.h */, - 3D90F6BB2DD30A05491B08915D584EC9 /* FBSDKBridgeAPIProtocolWebV2.m */, - 3EBE6DE6AC0B3C9F3AC7DBAEB3A662C0 /* FBSDKBridgeAPIRequest.h */, - 2D1785F3D7EA2ED726C8AE9E70A51FA2 /* FBSDKBridgeAPIRequest.m */, - 4C1E69477C6B2B65E73D773DF99C41B5 /* FBSDKBridgeAPIRequest+Private.h */, - 361706AFE7E009C15E533A3D79D8F690 /* FBSDKBridgeAPIResponse.h */, - 3962610B1FEF1790157315B74C0EBD7B /* FBSDKBridgeAPIResponse.m */, - 22A1D49A4287FA4C656D559EFDAF579B /* FBSDKButton.h */, - 7DCAFA7DC86337CB7EF961C08CDBF7B5 /* FBSDKButton.m */, - BA248B4C1FBEF84908D3A7D237952367 /* FBSDKButton+Subclass.h */, - 8F8470B349C63A52E3D8CF767119A42F /* FBSDKCloseIcon.h */, - BAAE79EE588FE282E07DE755E2288107 /* FBSDKCloseIcon.m */, - D415223653ABC354C49E541E09592A9D /* FBSDKCodelessIndexer.h */, - 477C1528E6733182C0CAEC75FC8FC02D /* FBSDKCodelessIndexer.m */, - F3CA552ABDEE14EF06B446CFF6DBA4F8 /* FBSDKCodelessParameterComponent.h */, - 8EED7D2A5C8ACBB64FE0F34920A94153 /* FBSDKCodelessParameterComponent.m */, - 74DF685EB19AD031F2AB0E9629628E64 /* FBSDKCodelessPathComponent.h */, - B50DDFF456FD67EF4FF30BCC9EFDA92B /* FBSDKCodelessPathComponent.m */, - 5B577AC16FB63E4F607F0CE626AA46CA /* FBSDKColor.h */, - CB7262061D21BA0CBCED849F6462BD50 /* FBSDKColor.m */, - 2BACCBD3B52586035239BB14F98DE050 /* FBSDKConstants.h */, - 8BA5CD5A3514ED648F5A717676881B1B /* FBSDKConstants.m */, - AE4F132210F80370EC912C901003747A /* FBSDKContainerViewController.h */, - 156BBC399CEC0450CFAA331C5FC3EFC6 /* FBSDKContainerViewController.m */, - 4EB679FDEBAA60F4B4F82716D10086D6 /* FBSDKCopying.h */, - 4909BE936637CABD33F96AC6F3115619 /* FBSDKCoreKit.h */, - 6ADDB4B80415BC5DEB5B94D09C91A74E /* FBSDKCoreKit+Internal.h */, - B4547C009592E5CCBBF54E6B4EF89A61 /* FBSDKCrashObserver.h */, - 50D6C4A4C346F63447DA5E0A81CB0EFF /* FBSDKCrashObserver.m */, - 92D89B7674DF3CC845A670D05FD59C57 /* FBSDKCrashShield.h */, - FCA9BFB46C6242210AC9CC24ACD94D78 /* FBSDKCrashShield.m */, - 2B86307A69CC3C72C64019F46C6E4224 /* FBSDKCrypto.h */, - E643E224BF45E9D982617BB3CF2ABC29 /* FBSDKCrypto.m */, - 1BF338B5B623CD26B5522E29EDFAD3D3 /* FBSDKDeviceButton.h */, - 611A46F56C9CC5EEAE14D9D62EBFAE59 /* FBSDKDeviceButton.m */, - C589FB56B571900BC8BD0463A76AB18C /* FBSDKDeviceButton+Internal.h */, - A8A9FF848D3A4A0CAEF27FC84F788986 /* FBSDKDeviceDialogView.h */, - CB8F0079CB7D26D75380BA19E4619370 /* FBSDKDeviceDialogView.m */, - F5FF22883B8A0858CB0F22F845D01F06 /* FBSDKDeviceRequestsHelper.h */, - 768F2B19754A0B02399D291945BDC419 /* FBSDKDeviceRequestsHelper.m */, - 1F402E77454C20141F85F84FF06CA836 /* FBSDKDeviceUtilities.h */, - 5A8A5B09DFF1E897AA4E545FAF9FA414 /* FBSDKDeviceUtilities.m */, - ED151E2F63278D70A065FE1B011F4ED3 /* FBSDKDeviceViewControllerBase.h */, - 22E803E9065CD04E54117DF8DF6E5A45 /* FBSDKDeviceViewControllerBase.m */, - 1E0934BBF648C0C15785D9F7F9362337 /* FBSDKDeviceViewControllerBase+Internal.h */, - D41740737D7D65FD1EDAD94E25926D12 /* FBSDKDialogConfiguration.h */, - E5E1CD7CD4C2BCCBA44E40674DF55788 /* FBSDKDialogConfiguration.m */, - 47E6EBA08600541E259A0803553B60C0 /* FBSDKDynamicFrameworkLoader.h */, - DA0D0593586D782C9522C7ABEFA3ED61 /* FBSDKDynamicFrameworkLoader.m */, - 33ED135B76EB662202F2AD33A2A310F2 /* FBSDKError.h */, - 14E1D9B307BB8EF1F04A6423DA930C64 /* FBSDKError.m */, - 457BAEADB79A07BE5B6F72F6DD49293E /* FBSDKErrorConfiguration.h */, - 402AC9B1720B22AEE526DCE4416CD7F8 /* FBSDKErrorConfiguration.m */, - 8ACD209FA4CEBB607418DDCB0D89EF02 /* FBSDKErrorRecoveryAttempter.h */, - 3FAD23D5D4747F42F2D723BFA9629798 /* FBSDKErrorRecoveryAttempter.m */, - 5BC9BCACA160A3433963A90743CD4AA1 /* FBSDKErrorRecoveryConfiguration.h */, - 02DF4DAD9C174A89145A1373B5C11241 /* FBSDKErrorRecoveryConfiguration.m */, - 6D636BADD54482F811FE3768D707D049 /* FBSDKErrorReport.h */, - F00B68518FF6DF077950DFBF0E728B52 /* FBSDKErrorReport.m */, - 46286665978CB65C4EC589D9B3B11014 /* FBSDKEventBinding.h */, - F48765357736CC024670A593558875CF /* FBSDKEventBinding.m */, - 7EBD9EAD0771D06031B94D67F42A5768 /* FBSDKEventBindingManager.h */, - 9DA04880496478F371945535BC7E4748 /* FBSDKEventBindingManager.m */, - DDC042C77AE5650FDD7891DEFC48CFD1 /* FBSDKEventDeactivationManager.h */, - 223F5AE5FDFCB0E47FC5772AF7B98142 /* FBSDKEventDeactivationManager.m */, - 30B2906701FF62EA54AABC9ADEA62270 /* FBSDKEventInferencer.h */, - 28DD99903B12F6E2D89F23CFC532D07C /* FBSDKEventInferencer.mm */, - 4C6DF37E36DD4D18DABA3E364A122602 /* FBSDKFeatureExtractor.h */, - DC3A15AC175589C5B9AE31C0A379DC05 /* FBSDKFeatureExtractor.m */, - D48FBD5E31629FFF372284263088E2D5 /* FBSDKFeatureManager.h */, - 1820DDF5086BF703BB92EF583F5261A0 /* FBSDKFeatureManager.m */, - DB60A213EAFDDAFE44F1D320F046CB57 /* FBSDKGateKeeperManager.h */, - 09D25BB92FE35DE365583A0E4F0F33F8 /* FBSDKGateKeeperManager.m */, - AF0DB818422D9C592C4F4C828C693B83 /* FBSDKGraphErrorRecoveryProcessor.h */, - CCB7BB66C0DD94A851D46F8BC892E519 /* FBSDKGraphErrorRecoveryProcessor.m */, - 100B9CE6B5DF19397BE6BD4A1EE5CE21 /* FBSDKGraphRequest.h */, - 454CDE9720C69079F1DDF68FD6A04105 /* FBSDKGraphRequest.m */, - 209C35E1539CC5A6EBA80687B13EA2B3 /* FBSDKGraphRequest+Internal.h */, - B55DFBA3F5028DE3FBC7BF886E768199 /* FBSDKGraphRequestBody.h */, - DF0158DC127D8F5430A619C9336F0C62 /* FBSDKGraphRequestBody.m */, - D2E718FEBBC0B21B328F0AD4C483B85D /* FBSDKGraphRequestConnection.h */, - 4651719ECF3C9A328FE37CF2AC2482D3 /* FBSDKGraphRequestConnection.m */, - C420F42A793013076D91CC2D42548B2F /* FBSDKGraphRequestConnection+Internal.h */, - CDE6F56616CDFE7D08FCA2E61AF0A500 /* FBSDKGraphRequestDataAttachment.h */, - A5A1E1AF6AC62B515EF26D84B9EFDE88 /* FBSDKGraphRequestDataAttachment.m */, - 1B17F1B0E2D795F5BBD93ADADF3C9FA7 /* FBSDKGraphRequestMetadata.h */, - C7F40C376A0563B032978251B0AFA7F4 /* FBSDKGraphRequestMetadata.m */, - 8FDCD270C1EDEAC680200680C4488FCB /* FBSDKGraphRequestPiggybackManager.h */, - CF6CCFBF6868B0A060B6CACC63AD9715 /* FBSDKGraphRequestPiggybackManager.m */, - 966A875FE0F134C6EBBD87BF8594BAE5 /* FBSDKHybridAppEventsScriptMessageHandler.h */, - 8A018245C0828B7A86A4799C1DC5D91E /* FBSDKHybridAppEventsScriptMessageHandler.m */, - 9872EA1E85D6A9050EA26CABEB488BEF /* FBSDKIcon.h */, - 003B2E4C0A9E07A53EBBBE8C33172E6B /* FBSDKIcon.m */, - F99D9AB50EAAF16149813029F81B0429 /* FBSDKImageDownloader.h */, - DE356420E564FE05C9F2F80B0FC3F182 /* FBSDKImageDownloader.m */, - 1A0A9F1E6F77B8B13E8A26A67CE648FF /* FBSDKInstrumentManager.h */, - AC3548AE7B5BF33A31AB4F84CF1630E8 /* FBSDKInstrumentManager.m */, - A3DEE8684E54692925CFF9649B4B9AA7 /* FBSDKInternalUtility.h */, - 9679C9F9B72ACAC412ACC20A9A2706AA /* FBSDKInternalUtility.m */, - 73D633F95C5F3899CCBB137C7F13BC6D /* FBSDKKeychainStore.h */, - 14B33C6D455B374BFF40F79724EF1BC7 /* FBSDKKeychainStore.m */, - C28848EB5D088BDBD9508A95AAF4B010 /* FBSDKKeychainStoreViaBundleID.h */, - 54496EB69F67B4F596E75C2526AC0477 /* FBSDKKeychainStoreViaBundleID.m */, - 1005B3DB3030176AD2DC194EF14BC314 /* FBSDKLogger.h */, - 5DEA59C4C687E3786486C449221FC752 /* FBSDKLogger.m */, - C54E999454DDCF12B4282697FC429B39 /* FBSDKLogo.h */, - E849A31A1E8E0985EFBC42F741F15DC2 /* FBSDKLogo.m */, - C14371F530DDF4D9F250F96A2B6AA421 /* FBSDKMaleSilhouetteIcon.h */, - BEC04A5F6599F3B93782C7D4FB07D8CF /* FBSDKMaleSilhouetteIcon.m */, - C65F6724266CC6C52BE0E93F64CEE5B8 /* FBSDKMath.h */, - CDE864CA7E3B75F5AC7DD6FA815AFCF3 /* FBSDKMath.m */, - C3D7E0D75CF14D62305E29C5D66E5337 /* FBSDKMeasurementEvent.h */, - 04C628C3A291D5940749716D6D7C2801 /* FBSDKMeasurementEvent.m */, - 0A3E9520A2E59D655D6BC500A9C6E772 /* FBSDKMeasurementEvent_Internal.h */, - 6BE57F9B0F52397966CCFD818292F142 /* FBSDKMeasurementEventListener.h */, - 99DCB3220D0A15AB502E90628AACA5ED /* FBSDKMeasurementEventListener.m */, - F7606C43D56B01B5133A5FB34783E93D /* FBSDKMetadataIndexer.h */, - 5EF075FC909ABF85C4767F55F355B0BD /* FBSDKMetadataIndexer.m */, - 352FC8C029A40591F283602FCC2F95FF /* FBSDKModalFormPresentationController.h */, - 1951E99C9A1940B7B6BDA954D073BAE2 /* FBSDKModalFormPresentationController.m */, - 1864101E77EC0D309624A3116311CED8 /* FBSDKModelManager.h */, - 6ECFC60B24BA7C537A28C1D6FC13648E /* FBSDKModelManager.m */, - DAFE246CB253B48EDFAAD0B3458D7243 /* FBSDKModelRuntime.hpp */, - 8C9122611C5B3FE38B61F8E45EF2796E /* FBSDKModelUtility.h */, - A19365D49BF463A7E1597172C6E938B7 /* FBSDKModelUtility.m */, - 63D4720EC7E5A6F375649C170EC8244D /* FBSDKMonotonicTime.h */, - 4B4D4BDBEDA493A2951B9D841EEF1313 /* FBSDKMonotonicTime.m */, - 470C91BE4E4F9A0D44F41C7DEF24746D /* FBSDKMutableCopying.h */, - DA83000C88D37B03721453E6334C899E /* FBSDKPaymentObserver.h */, - F146C0F3C905A86A8C627E45FA51B555 /* FBSDKPaymentObserver.m */, - 5BE619B57DBA3309A8D50B4CF9483D91 /* FBSDKProfile.h */, - A514772615FC436FC350277555010B19 /* FBSDKProfile.m */, - 6A4CBE96AD460EE057A453A790AB8FAB /* FBSDKProfile+Internal.h */, - F1A5A995676DFF976D2EF676371136C3 /* FBSDKProfilePictureView.h */, - 1E801AAC0924C54177A9DB610CBDE680 /* FBSDKProfilePictureView.m */, - B747649FBE325722E133571D1C955ED7 /* FBSDKRestrictiveDataFilterManager.h */, - 71616735BFAD1A7AE7425B7AE9F8E829 /* FBSDKRestrictiveDataFilterManager.m */, - E8DC29E027B7602C5C18D1D8ADED3B88 /* FBSDKServerConfiguration.h */, - 437B30C5191D219946D758C77B006CE8 /* FBSDKServerConfiguration.m */, - F85C177F3787114EA6BA11CB3BEAC2D0 /* FBSDKServerConfiguration+Internal.h */, - 629C269ED1B901DA6E35ABECC58DFB27 /* FBSDKServerConfigurationManager.h */, - 50207558DADE9D705B85D71062E40772 /* FBSDKServerConfigurationManager.m */, - 3B0B28689101CE72329205323E16E5A7 /* FBSDKServerConfigurationManager+Internal.h */, - B79F8041DA08D90AB6D4D42E94532E68 /* FBSDKSettings.h */, - 6AED6248B672A00E0A269F9229742629 /* FBSDKSettings.m */, - BEE78566C29E3922B044231B86E67331 /* FBSDKSettings+Internal.h */, - 0E4F067F6B08095C2FA1BFB88F713E3B /* FBSDKSmartDeviceDialogView.h */, - 288EDF2F9D05AB94498FFAC8FE4F6DA3 /* FBSDKSmartDeviceDialogView.m */, - F62857D1469FF9547E7F14F980C10127 /* FBSDKStandaloneModel.hpp */, - 8BF86487A25C13CE6346CEC05715438E /* FBSDKSuggestedEventsIndexer.h */, - 075C4DF70B858A5DBD768F5B0923C013 /* FBSDKSuggestedEventsIndexer.m */, - F3C28E1208404167A9E17A14917A408E /* FBSDKSwizzler.h */, - AC8AA52C4A392EF0B8462CB0C7712E8A /* FBSDKSwizzler.m */, - 1B2B2FEED99DEC50D3CADC5BEC00D23C /* FBSDKTestUsersManager.h */, - BA7FAF644EB1430C49725BD9BBD687AC /* FBSDKTestUsersManager.m */, - 744C12FE7CEE855F769638F2ACBEFD32 /* FBSDKTimeSpentData.h */, - B4DD97F5BFAB7D53880276803E555CCB /* FBSDKTimeSpentData.m */, - 2F2028F22DB848AB8AFA2B75FD07A593 /* FBSDKTriStateBOOL.h */, - E6F79EA7748551BBBB3555C90E760894 /* FBSDKTriStateBOOL.m */, - C6A72B17CBF96370E581757D02DF3BE4 /* FBSDKUIUtility.h */, - B85423919F546189D5E6A7AB2542C4CE /* FBSDKURL.h */, - 272D71E886E7E0C4B9DCBF258B000834 /* FBSDKURL.m */, - 304D113D4644F30CC920849001B08531 /* FBSDKURL_Internal.h */, - 5577343C80A341DDD0DA9BF232A537FF /* FBSDKURLOpening.h */, - 2C81EA5A0AA497C64568FE4DFAADE097 /* FBSDKUserDataStore.h */, - 105C0D221E96621B0758498B90A5F78D /* FBSDKUserDataStore.m */, - B528ECD452EC3E2F8648257D69C44A33 /* FBSDKUtility.h */, - F7913CBEB5C8AE67AE965E179718578C /* FBSDKUtility.m */, - 1CE56BBAF09086D82E5C2F61AAD9BF29 /* FBSDKViewHierarchy.h */, - E705BEB20705B95E2C3F9904E1B624B2 /* FBSDKViewHierarchy.m */, - 70EE066314FB3E6E83F20C89E6142B1A /* FBSDKViewHierarchyMacros.h */, - 0CF33EBBFA2AF01CD6134E64522EC598 /* FBSDKViewImpressionTracker.h */, - 41BE4DA692A9E612FC87053CC4970AEF /* FBSDKViewImpressionTracker.m */, - 9E06BD770FDEF5D528094D098622D912 /* FBSDKWebDialog.h */, - D1B092F21830A7A1B6344AF7DAF3110A /* FBSDKWebDialog.m */, - 538C72CEFC311481D0F68961E61D9B03 /* FBSDKWebDialogView.h */, - 065608AE87A0E0699093FAA8905D6E88 /* FBSDKWebDialogView.m */, - 7A720F1AC1BBDADFB9E4F208A780720A /* FBSDKWebViewAppLinkResolver.h */, - D9CFBF50DC6E1AE24CE04C9B70365C3D /* FBSDKWebViewAppLinkResolver.m */, - 48EF6767EFCEA97C815D45C152829E93 /* Resources */, - ); - name = Core; - sourceTree = ""; - }; - C56E013057D4748C019E233BCD8B395D /* Pods */ = { - isa = PBXGroup; - children = ( - 4E97C6F45E0B60457CC7122D9FC47B23 /* AppsFlyerFramework */, - 2EE80353C9BF9B43583760891D541A33 /* FBAudienceNetwork */, - 74EE6A31E02A2DD91F5B9AD1E51E1DAC /* FBSDKCoreKit */, - 40384E91B1C484D794E89BC10F4D952C /* FBSDKLoginKit */, - C8AC2BA963031932EFFE49E9260788A2 /* Firebase */, - 99ED139B6CC5686D10B3B8A8B256CF85 /* FirebaseAnalytics */, - F68CF2D2ACD5A03F107DC9735EEEBBF9 /* FirebaseAnalyticsInterop */, - 843099F7439E752394584584DA07DA3B /* FirebaseCore */, - 122F183A68FFD3CEE2C92F5D7194CCC9 /* FirebaseCoreDiagnostics */, - 8B107EAED75409DE0418AD64031AFF7A /* FirebaseCoreDiagnosticsInterop */, - 189E965C2059E6F9E5702F00FA73CF46 /* FirebaseCrashlytics */, - DCB795A59C419CD6404257EB50528625 /* FirebaseInstallations */, - 03B355A12BD3BD2DD0878E414064BFD1 /* Flurry-iOS-SDK */, - 0BBC592DDA72493E2D5FCE571D37FE4B /* GoogleAppMeasurement */, - 3E0BD9FE90FF876B30A0A90EED0A4CA2 /* GoogleDataTransport */, - 6CC217FB07EA7487BFB353AEFE446E08 /* GoogleDataTransportCCTSupport */, - 9CD86C903B1656FB93853FCF161CDFAD /* GoogleUtilities */, - 9C3C44A6E01E382F9B078988E55D2AAA /* MoPub-FacebookAudienceNetwork-Adapters */, - BB3C9D7A012F38EC50AD9C36A2B87AB1 /* mopub-ios-sdk */, - 48456C3F4BF2EA5012433C7ADCF8EB8C /* nanopb */, - 976622ED7437E05CE14283FD4536E7C0 /* PromisesObjC */, - 209DE454394CBADD1457A777D3584921 /* Pushwoosh */, - ); - name = Pods; - sourceTree = ""; - }; - C6172E61DEA1B67966F863AE8D5C38AD /* encode */ = { - isa = PBXGroup; - children = ( - ); - name = encode; - sourceTree = ""; - }; - C73D715BC7721D18A625E1448244415E /* Support Files */ = { - isa = PBXGroup; - children = ( - EA6F8ED96B877C5A88CAEA3FB195C624 /* FirebaseCore.modulemap */, - 7C287BD18D5DBAF69726AC1A45CC18BE /* FirebaseCore-dummy.m */, - 5855A197DFB6E0A46D8D95E916DFF85D /* FirebaseCore-Info.plist */, - 60E8AF12F0C5021D31CA113B8D72EF6C /* FirebaseCore-umbrella.h */, - 7E9A9B0555DE3093146BE01B837BD495 /* FirebaseCore.debug.xcconfig */, - E0B971CC57D8EBB8C3EAC017D5C0A622 /* FirebaseCore.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/FirebaseCore"; - sourceTree = ""; - }; - C7A7BB9C5EC9A52B3F5CBD1E8A1D05D5 /* Support Files */ = { - isa = PBXGroup; - children = ( - 746DDFAD6C96FB57B1BAEB0980D61533 /* FirebaseCoreDiagnosticsInterop.debug.xcconfig */, - 0165D1E31F273763104B57739B29D6FD /* FirebaseCoreDiagnosticsInterop.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/FirebaseCoreDiagnosticsInterop"; - sourceTree = ""; - }; - C7FA7C32EDFC3C940E87CF7A567540B4 /* Support Files */ = { - isa = PBXGroup; - children = ( - 556273F990A1FA242E6BA43DCE3C361D /* nanopb.modulemap */, - 52040BAE2CE0BD9905C7C1250F48CB7C /* nanopb-dummy.m */, - 8DD991116179CD64BA482F3F7B3514C9 /* nanopb-Info.plist */, - DB6C0D40004DBC7E0462A6F1C964E57A /* nanopb-prefix.pch */, - 6E6DC5F53026FAD96AE60CD0DEA5799B /* nanopb-umbrella.h */, - BE8609CE945C9F8818FB940B4101B7C4 /* nanopb.debug.xcconfig */, - BAEA23AA39E10157B79B45590DB564BC /* nanopb.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/nanopb"; - sourceTree = ""; - }; - C818CC2E4650B58970671A9DD1A2E037 /* Frameworks */ = { - isa = PBXGroup; - children = ( - B95E13859FA5C7BE5F2116C31054BC09 /* GoogleAppMeasurement.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - C8AC2BA963031932EFFE49E9260788A2 /* Firebase */ = { - isa = PBXGroup; - children = ( - 3002158C7B158862270FD996FB121BE2 /* CoreOnly */, - 958170D657A14244217700620AE49314 /* Support Files */, - ); - name = Firebase; - path = Firebase; - sourceTree = ""; - }; - CB6C2C6F374D1D9F71C9E0B6025DB299 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 1EC8BDF8694355AA6AC990265EA96629 /* AppsFlyerLib.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; CF1408CF629C7361332E53B88F7BD30C = { isa = PBXGroup; children = ( 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, - 0EE40377755F56530C56B8A790E4D360 /* Frameworks */, - C56E013057D4748C019E233BCD8B395D /* Pods */, - 5D92B6BDAA90B1E4FC28D93A1513B7C8 /* Products */, - BDE0D5FDCD80D5FC2D88642960D810F9 /* Targets Support Files */, + D210D550F4EA176C3123ED886F8F87F5 /* Frameworks */, + 0F5AA35DBA2727BE47B13E8335A097E9 /* Products */, + B4F6DEC9CE7BCEE6ECAFBFAC00D509A7 /* Targets Support Files */, ); sourceTree = ""; }; - D48C095B1AAFC731B090D9900E233AB4 /* Core */ = { + D210D550F4EA176C3123ED886F8F87F5 /* Frameworks */ = { isa = PBXGroup; children = ( - 65825434CB36C791E8F0FE3C208374BB /* Frameworks */, - ); - name = Core; - sourceTree = ""; - }; - D6C82ADDD501DAB4A017FD133999973D /* Support Files */ = { - isa = PBXGroup; - children = ( - 326871F700D630BC7DADFB958059DE48 /* FirebaseAnalyticsInterop.debug.xcconfig */, - 8978A71715A22E8C3CB2878A5D1F28DD /* FirebaseAnalyticsInterop.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/FirebaseAnalyticsInterop"; - sourceTree = ""; - }; - D8104636AB956D21A63439A2D9B03A2D /* UserDefaults */ = { - isa = PBXGroup; - children = ( - 763E069341A2B66FD72F055C57B14880 /* GULUserDefaults.h */, - 2B9B747882B68BFF1758D7429091E275 /* GULUserDefaults.m */, - ); - name = UserDefaults; - sourceTree = ""; - }; - DCB795A59C419CD6404257EB50528625 /* FirebaseInstallations */ = { - isa = PBXGroup; - children = ( - C5356A1A76BA7FEBA53E6C7A25D145BB /* FirebaseInstallations.h */, - 04F78786D869A61160530A6B299171B1 /* FIRInstallations.h */, - CC00F2F5A3FF861ABEA00A5CD03564B1 /* FIRInstallations.m */, - 7E4AF3080BA22435DB8B8A52CFD044C1 /* FIRInstallationsAPIService.h */, - EA6950905567E2EE57EE50535AF02CDC /* FIRInstallationsAPIService.m */, - 079E8901A9A2334D64914A0F971A01AD /* FIRInstallationsAuthTokenResult.h */, - 2613A58B6E7EDEF087018D8366169C3D /* FIRInstallationsAuthTokenResult.m */, - 4143B3D7FE43215066031B5F2FFA889E /* FIRInstallationsAuthTokenResultInternal.h */, - CA442CD7CB2FFEBFC107903616DA474C /* FIRInstallationsErrors.h */, - 5D56CC1FFF1A7F8222942B0A4FDF686C /* FIRInstallationsErrorUtil.h */, - 314EA77948709322D61FDC3575D424E6 /* FIRInstallationsErrorUtil.m */, - EF3AB43BC7E6A650CBC5404AA0F56884 /* FIRInstallationsHTTPError.h */, - F125AD9DE4885AF2EC70BD8CFAD862E5 /* FIRInstallationsHTTPError.m */, - C26590F88F2681CD9C907ED6B4F4D894 /* FIRInstallationsIDController.h */, - 607C6A931EBD7D8A07E47E3C9D91E7C9 /* FIRInstallationsIDController.m */, - D53B0C767D495F5897CFCAB1D4197223 /* FIRInstallationsIIDStore.h */, - 201EF89A0869D923453D72DFC52D89D3 /* FIRInstallationsIIDStore.m */, - E6637C91A10A52F305D082B978E4D217 /* FIRInstallationsIIDTokenStore.h */, - 767861614DFB87219A3F04518AC97C7E /* FIRInstallationsIIDTokenStore.m */, - 59E2F60221D281B6066A27C66F271475 /* FIRInstallationsItem.h */, - BB3E5063A24AA0806EEA1496785F4C8C /* FIRInstallationsItem.m */, - DC562DBAE59A602484D1A827BBDEE75E /* FIRInstallationsItem+RegisterInstallationAPI.h */, - 7C6522F48AB08CA38170DB89C1F9C275 /* FIRInstallationsItem+RegisterInstallationAPI.m */, - F1C9850B11896325FFFEEED95182C025 /* FIRInstallationsLogger.h */, - 4A95F89D46A4178EE091F54A96F44043 /* FIRInstallationsLogger.m */, - B26B809E9950E05E0E142F73AD56F2EE /* FIRInstallationsSingleOperationPromiseCache.h */, - 92C2AA94501AF61B1D829065E52BD370 /* FIRInstallationsSingleOperationPromiseCache.m */, - AD3D91845CFBF7641C53E876757A2A18 /* FIRInstallationsStatus.h */, - 16F5D92F54EC778599150F6FAC0F4D94 /* FIRInstallationsStore.h */, - 485D4D48BAA45CE617F64DCC7B486D6A /* FIRInstallationsStore.m */, - EB7F69C758BF2AC1D1D6E6F58060AA00 /* FIRInstallationsStoredAuthToken.h */, - F64CBDEFB07B9B6EC584F4DABA5DA43D /* FIRInstallationsStoredAuthToken.m */, - D40F3EB80A82CF1EA834836E17B6AA55 /* FIRInstallationsStoredItem.h */, - E8D545FFFFE049FA46D5668F593133EB /* FIRInstallationsStoredItem.m */, - 74C20C30A0A1CDF0CDB25BABB7EB65CF /* FIRInstallationsVersion.h */, - B4AF9B5571F3247AB21D62F4859CB9CA /* FIRInstallationsVersion.m */, - 2E31191ECCE10ACE11E67BBF3E85A04C /* Support Files */, - ); - name = FirebaseInstallations; - path = FirebaseInstallations; - sourceTree = ""; - }; - E479EA7EF2DA594C76D8A8E55BF6A6C6 /* Support Files */ = { - isa = PBXGroup; - children = ( - C6C66B56633E01B4F1E2C2FF831636A0 /* FBSDKLoginKit.modulemap */, - D0B4B7A3C6107F9F40BDEC5A513061CE /* FBSDKLoginKit-dummy.m */, - 2EE4A19E76510377B2E1A6ED921746AB /* FBSDKLoginKit-Info.plist */, - 5C612A710CDE0A7466E945BE952BDF95 /* FBSDKLoginKit-prefix.pch */, - 9FCFBF87BB650146BFAA6933F391DBBD /* FBSDKLoginKit-umbrella.h */, - 62E8EDABFE6152877F26EBD4926E6967 /* FBSDKLoginKit.debug.xcconfig */, - FE1B5D53750F5F9274805FA96C0B6AD7 /* FBSDKLoginKit.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/FBSDKLoginKit"; - sourceTree = ""; - }; - E757740E1432653B0E1307DE6CEDEA63 /* FlurrySDK */ = { - isa = PBXGroup; - children = ( - FD01AB4CD97581F7758F33D1D209DC26 /* Flurry.h */, - 867272EE107E76CFD51171F4E3EA86D5 /* FlurryCCPA.h */, - 6A46F5AC5336D07AD552CA25A6601BA3 /* FlurryConsent.h */, - 3E65293B030BE772658220223FD0DFB5 /* FlurryEmpty.m */, - 582B0F4F139E3CF295CBEC2779104615 /* FlurrySessionBuilder.h */, - 07685B4C5D5224A31054F4BF901AB1D3 /* FlurrySKAdNetwork.h */, - E2358BD1103DEF5DD39AB7BBB17FC9BA /* FlurryUserProperties.h */, - 5DF426BEAA099A08BD554F0C5E14FC63 /* Frameworks */, - ); - name = FlurrySDK; - sourceTree = ""; - }; - E7F85AAA1ADC373F06170A0B703238F7 /* Login */ = { - isa = PBXGroup; - children = ( - C84B52E1C6836F235AC35B233208BB36 /* _FBSDKLoginRecoveryAttempter.h */, - 8F7424BDE45733C4DE9D510614DD8613 /* _FBSDKLoginRecoveryAttempter.m */, - 7760A0AF86664FC43E6E281136FC37A0 /* FBSDKDeviceLoginCodeInfo.h */, - 2B131F514D6F49BC7F68CDBE82D8D3F1 /* FBSDKDeviceLoginCodeInfo.m */, - 95776AB0AB81357DDEDC6184CB4A2289 /* FBSDKDeviceLoginCodeInfo+Internal.h */, - E11C44B9966BB3743A5ADCEF150C6803 /* FBSDKDeviceLoginManager.h */, - EA81A87A15F979110FC3A57395BFC28D /* FBSDKDeviceLoginManager.m */, - 5B8C247DAD4C621881FED270DC9AAFB2 /* FBSDKDeviceLoginManagerResult.h */, - 6945279D2D882103A3A94BD9DF69667F /* FBSDKDeviceLoginManagerResult.m */, - F9354F9DFA7253DDE0B54993FD381B01 /* FBSDKDeviceLoginManagerResult+Internal.h */, - 09252C0CBCEB24CB026EBD6B934C8121 /* FBSDKLoginButton.h */, - A45D5D9150FF9C5C0B4A63B72CA51415 /* FBSDKLoginButton.m */, - BBD6562C76C121588F399F470880690C /* FBSDKLoginCompletion.h */, - F6EB75996E877C2CCF4A028AB758ABCB /* FBSDKLoginCompletion.m */, - CE77A5C8C6CB0B51513429A87CFDE0E5 /* FBSDKLoginCompletion+Internal.h */, - 3B3965F2BF5CFBC6A077C1220BA1E7AB /* FBSDKLoginConstants.h */, - 5AA5FB41E65CD965B073E4992E5A2C73 /* FBSDKLoginConstants.m */, - EB3DE00E8ED997E2ED90C340D08217CC /* FBSDKLoginError.h */, - E8D6BD93899EE72E28222BB656F26F1A /* FBSDKLoginError.m */, - 981CC8CE87D0133EABE3AB0844A65231 /* FBSDKLoginKit.h */, - 548D16A91F8262E0926DDF6B0CD35B02 /* FBSDKLoginKit+Internal.h */, - 7D3189B05FAE4A32C2818F57DCE1676E /* FBSDKLoginManager.h */, - 01C505769F8A9606771AD3DD4AA8AADE /* FBSDKLoginManager.m */, - 386B19EDB0975A5BCD862DB7DBE7C160 /* FBSDKLoginManager+Internal.h */, - 0FB8C73C055CB40B5FA38FB3415B48F0 /* FBSDKLoginManagerLogger.h */, - 31B8E32F09C1F35A17ECED05EA3E86A4 /* FBSDKLoginManagerLogger.m */, - A9D57E5C3A83B308428F74F1D92DB74D /* FBSDKLoginManagerLoginResult.h */, - 835D971CFA0A8E5CABFCA648B834F6C8 /* FBSDKLoginManagerLoginResult.m */, - 07A24A76299EF8E854CFE54D4B4FEE4A /* FBSDKLoginManagerLoginResult+Internal.h */, - B736FD012871F2E9C92ADA68598F421D /* FBSDKLoginTooltipView.h */, - C4B1244CBA9A3C50FEAEA1AAE3B1E731 /* FBSDKLoginTooltipView.m */, - DA7F8F9283E27B5C575D17A3B0A14E8F /* FBSDKLoginUtility.h */, - E1520C55E8430A5535D7CA76744DE538 /* FBSDKLoginUtility.m */, - E5C658F0334DF367919639D1A7F2621E /* FBSDKTooltipView.h */, - D96EB47E02BE9CC7D59F370B6B6F5102 /* FBSDKTooltipView.m */, - ); - name = Login; - sourceTree = ""; - }; - E9F235DB6B5926ADB53A700A00189E28 /* Network */ = { - isa = PBXGroup; - children = ( - CB669D3EFDC482E5F2B3E7B24A14B7DD /* FacebookAdapterConfiguration.h */, - 6A835F54E977CDBF857C326B9889932E /* FacebookAdapterConfiguration.m */, - 0D3CAD0D679131771D896B7209104FE9 /* FacebookBannerCustomEvent.h */, - 8E64C6C8BC36D1C26456222BF7065A0B /* FacebookBannerCustomEvent.m */, - 193B020564F2B2FD41D7659EF313E73D /* FacebookInterstitialCustomEvent.h */, - D30C1A5C52F035ADBD3EEA0824B1DD27 /* FacebookInterstitialCustomEvent.m */, - 379C4A3543F0A2552A926842977174AD /* FacebookNativeAdAdapter.h */, - 8EA069EFB3049E3A7B60130A4BD5D606 /* FacebookNativeAdAdapter.m */, - D0E7C1714D93675593DECCBB370D5FC8 /* FacebookNativeAdRenderer.h */, - A853021E473786C032DE110C8235785A /* FacebookNativeAdRenderer.m */, - EE81F6AFB8D52A4A7042B35A0F4AA2C1 /* FacebookNativeCustomEvent.h */, - 3CDBFB2925E6DF8B3BDCCCAED2DE688A /* FacebookNativeCustomEvent.m */, - 293534B9953D2C3BCF59EC650757914B /* FacebookRewardedVideoCustomEvent.h */, - 0FE37E511A2572985CA8E982EF114A0D /* FacebookRewardedVideoCustomEvent.m */, - ); - name = Network; - sourceTree = ""; - }; - EC79073C077DD69464BF1EA67DE04F1D /* Support Files */ = { - isa = PBXGroup; - children = ( - F0A1F26D38C86D0DE8A04DD8906C8327 /* FirebaseCoreDiagnostics.modulemap */, - CAF0DB36B275BDAAD6ADE0494F63E096 /* FirebaseCoreDiagnostics-dummy.m */, - F9C6AF6FE84006B95A8E671446098ABF /* FirebaseCoreDiagnostics-Info.plist */, - 75F0F0CBB17EED30B34F48D9877EB8EF /* FirebaseCoreDiagnostics-umbrella.h */, - F6EF27B3A8A0ED713CBA81294610C639 /* FirebaseCoreDiagnostics.debug.xcconfig */, - C13C87F43E1B8C680CCBA1A887B3BAA6 /* FirebaseCoreDiagnostics.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/FirebaseCoreDiagnostics"; - sourceTree = ""; - }; - ED9DC4DE59E75481F7028BC9072ABC3D /* Support Files */ = { - isa = PBXGroup; - children = ( - D868942174467A00280EE2A3CB5E0116 /* GoogleDataTransport.modulemap */, - F955E33F30896085B3081ADCEAB5F6AF /* GoogleDataTransport-dummy.m */, - BB3407837BF64B53877EE3975FE641F4 /* GoogleDataTransport-Info.plist */, - 291F84318AAFF66696583D3C33938B0C /* GoogleDataTransport-umbrella.h */, - 50DA138470CD831835AFC7F2FD5A1778 /* GoogleDataTransport.debug.xcconfig */, - 12842DDDEF3AF99466F01F05F1E12F79 /* GoogleDataTransport.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/GoogleDataTransport"; - sourceTree = ""; - }; - F1D847A49496D69B7E53008DD11E97FC /* Support Files */ = { - isa = PBXGroup; - children = ( - ABED847911F57D0BCB5750A6CCCF77EB /* Pushwoosh.debug.xcconfig */, - 04711A607F16F2B84569E72C42E97689 /* Pushwoosh.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/Pushwoosh"; - sourceTree = ""; - }; - F68CF2D2ACD5A03F107DC9735EEEBBF9 /* FirebaseAnalyticsInterop */ = { - isa = PBXGroup; - children = ( - D9166C142B944D31D700CCF555CF75A2 /* FIRAnalyticsInterop.h */, - EE7455FF496929B6E6E48108C8093444 /* FIRAnalyticsInteropListener.h */, - 93A82CC75292560D9B3BC49CCA5EB6AC /* FIRInteropEventNames.h */, - E0AFF93F9DDD07DDE37B699A952E48C7 /* FIRInteropParameterNames.h */, - D6C82ADDD501DAB4A017FD133999973D /* Support Files */, - ); - name = FirebaseAnalyticsInterop; - path = FirebaseAnalyticsInterop; - sourceTree = ""; - }; - FBA7B65DB2754C32E5B754829E6DAA68 /* Support Files */ = { - isa = PBXGroup; - children = ( - 2FC44B94F52B771F14BF14EB8E499BBB /* FBAudienceNetwork.debug.xcconfig */, - CB8007F0CCF389E6DB42CD523C21695E /* FBAudienceNetwork.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/FBAudienceNetwork"; - sourceTree = ""; - }; - FDC3183EDD7AA86A762291114329174E /* Frameworks */ = { - isa = PBXGroup; - children = ( - 1320DC94A7C81519A9ED20DDDC21D335 /* FIRAnalyticsConnector.framework */, - EFE8C29F86FFF4E907E7D944C96D24AD /* FirebaseAnalytics.framework */, + 578452D2E740E91742655AC8F1636D1F /* iOS */, ); name = Frameworks; sourceTree = ""; @@ -5438,1110 +101,35 @@ /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ - 12544DFF1195C2DE38E0BD35D9827981 /* Headers */ = { + CEBEE05309172EA3BF318240228D8C33 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - DDE78FA161BE5BC8EED61FEE5B3E6606 /* Flurry-iOS-SDK-umbrella.h in Headers */, - 0F14A429375771C394A94B2B454AA2F6 /* Flurry.h in Headers */, - 1CAAD18B801D115B856C49F0A4131C70 /* FlurryCCPA.h in Headers */, - 67F368D8CDA6F2E2451429CCE27B0702 /* FlurryConsent.h in Headers */, - 03DC24B3279D1C0F65C5844A1325C2D4 /* FlurrySessionBuilder.h in Headers */, - 0286B6C0CC498A5313B1C5D82AC49339 /* FlurrySKAdNetwork.h in Headers */, - 04AF396EE038EA6EA049C418AECEC47D /* FlurryUserProperties.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 12549671050076AC1420437011198E9A /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 7D0F3FBEA5F386B8557230E34FCDC8EC /* GoogleUtilities-umbrella.h in Headers */, - 2E0AFCB02847476D44FEFC60BFAB4876 /* GULAppDelegateSwizzler.h in Headers */, - 70F4D32E827E51E240FE0693A3B51366 /* GULAppDelegateSwizzler_Private.h in Headers */, - 684EB70CD79CECA5FEE2A831AB13C165 /* GULAppEnvironmentUtil.h in Headers */, - 462735587B1877D85670B079E7A5DCB2 /* GULApplication.h in Headers */, - 90378B390BAAD5DD444E2B086CEFF4A1 /* GULHeartbeatDateStorage.h in Headers */, - 8A4641DA19A86E79B30F4C19DB82FE2D /* GULKeychainStorage.h in Headers */, - 23D86ABD997707389808345C52AC75E1 /* GULKeychainUtils.h in Headers */, - E980CEBE094080C262232461E4953AF9 /* GULLogger.h in Headers */, - 460CE03F485F8C8B98E5DDF93B5CE5D5 /* GULLoggerCodes.h in Headers */, - 234DF20AAA7B270D5A9F0AE979C6A606 /* GULLoggerLevel.h in Headers */, - A988C6721469D1B93CB8BC4CA4E1EE0E /* GULMutableDictionary.h in Headers */, - 0640DA11718B06B65921FDF1BE19D02F /* GULNetwork.h in Headers */, - A265BAECC9B3953FF80B2020202217DE /* GULNetworkConstants.h in Headers */, - 728673AD553A9E596A6305250E08E471 /* GULNetworkLoggerProtocol.h in Headers */, - D0051AF0EF78315C13137BB157505144 /* GULNetworkMessageCode.h in Headers */, - 6F37590B1582CBE0C54DBA01AC3A7C32 /* GULNetworkURLSession.h in Headers */, - E166870E8A4BDBA10366486BA514154A /* GULNSData+zlib.h in Headers */, - 35ECAC88BAE135CEF17F86C9942CD779 /* GULNSDataInternal.h in Headers */, - A3CB7461A6773AD45A4087455DE3999D /* GULOriginalIMPConvenienceMacros.h in Headers */, - 894DF601F95FE0A219BD09A145FE1C82 /* GULReachabilityChecker+Internal.h in Headers */, - D504CFC2476267B83D8504D5C7E26B93 /* GULReachabilityChecker.h in Headers */, - 7DC541A92D828A0B7324788E9F14C97D /* GULReachabilityMessageCode.h in Headers */, - F89240CCD254B38B0855C765E415AFDE /* GULSceneDelegateSwizzler.h in Headers */, - D7B0175AA5B2F42800F6F4D9108F7A90 /* GULSceneDelegateSwizzler_Private.h in Headers */, - 350259B7BDB0C87E19EF13C98C4FDCD1 /* GULSecureCoding.h in Headers */, - 2AD62E943FF9082E2258446FB458C467 /* GULSwizzler.h in Headers */, - 52291E134D53A8369CC75698205CCA3E /* GULUserDefaults.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5EB178B5C58B93F9DEFB5199D7F22AB0 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - B13A55211C521D4AE5741922B4160394 /* FIRCoreDiagnosticsData.h in Headers */, - A56C615EFEAA8CF767D52D2F05F43BD2 /* FIRCoreDiagnosticsInterop.h in Headers */, - 431AA4E81B33C3B4527045572DE4C35F /* firebasecore.nanopb.h in Headers */, - B44AAF0E725F345AE4029FE8F06FC8BF /* FirebaseCoreDiagnostics-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5F3991EA161F226C4229BA52A74DE261 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - FCEF799828E6AAAAC50E49EB32FD4249 /* cct.nanopb.h in Headers */, - E62BEAD12C9FD7F3F7758B818E8D4C1B /* GDTCCTCompressionHelper.h in Headers */, - 8D84249D59B184ED3483EE8AC2CB8CCD /* GDTCCTNanopbHelpers.h in Headers */, - 074F91E3A771F1D71A8D8EAD1ACB1796 /* GDTCCTPrioritizer.h in Headers */, - C4E3100670E46E708B87A35D15179A51 /* GDTCCTUploader.h in Headers */, - 0F0D0F61402D96A68B334289CEEE38C4 /* GDTCOREvent+GDTCCTSupport.h in Headers */, - 2A37708938D86136CC496D5777A302B2 /* GoogleDataTransportCCTSupport-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 62FA46089F7FADD399ACA4FD4B07A2E6 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - BD790B96988940CEB3705ADCE6011F6F /* GDTCORAssert.h in Headers */, - F6D973F85567BF70141B2917ACFBBBA9 /* GDTCORClock.h in Headers */, - 84D517B83C99558CFC179462FEF7A4F2 /* GDTCORConsoleLogger.h in Headers */, - E95B7E9D1F26909B82824F467BEFFD50 /* GDTCORDataFuture.h in Headers */, - BB8F8D0CA03C5F26AD4571BF03FAE3EB /* GDTCOREvent.h in Headers */, - 08702BD218BCE7301CD5DEAA2DB392F4 /* GDTCOREvent_Private.h in Headers */, - A1FCABCDEC705D5813527CEF47250626 /* GDTCOREventDataObject.h in Headers */, - 0C207C134ED07368AB0C5675427659C9 /* GDTCOREventTransformer.h in Headers */, - 71F1D8547E1B96A51707DF73891878B5 /* GDTCORFlatFileStorage.h in Headers */, - 78E21609CFE99F2CC126C47E4D6D411A /* GDTCORLifecycle.h in Headers */, - F5B83B899458418C40448B8703B01E68 /* GDTCORPlatform.h in Headers */, - 334CA252C68E6E0EE687A031D9EC8A70 /* GDTCORPrioritizer.h in Headers */, - 7C7F9FB942D97E3CD5772BC4FA0FFF96 /* GDTCORReachability.h in Headers */, - 5AFF3350DDCEB791767B6BCE6B326A12 /* GDTCORReachability_Private.h in Headers */, - 637C60FD6B58311A6E0AA6CA758AE4D3 /* GDTCORRegistrar.h in Headers */, - 40D4C93BD0644ADB0E7B30D146AF5A5C /* GDTCORRegistrar_Private.h in Headers */, - 2856456CA2599D900C8C314FB80878DB /* GDTCORStorageProtocol.h in Headers */, - ADAE990ED96EAF7E60282B64DC8F3A51 /* GDTCORTargets.h in Headers */, - 405C142FD528F90F0BEED838A9222959 /* GDTCORTransformer.h in Headers */, - D58568BE127CC13B4F7F4AAF96144662 /* GDTCORTransformer_Private.h in Headers */, - C7AE2AB2ECBD750BEFA894F9A1CC93BA /* GDTCORTransport.h in Headers */, - 20FCC5A11C0A0CD7BB81023146C5B586 /* GDTCORTransport_Private.h in Headers */, - BC5F4E976013FA6C9A403872C71AA0EF /* GDTCORUploadCoordinator.h in Headers */, - EAD6827B084E49152AE8AAD8698099B6 /* GDTCORUploader.h in Headers */, - 4CDDCAA262DCE17E16480689D40699F1 /* GDTCORUploadPackage.h in Headers */, - CDA6EA8BC8203B620A9BFA2C25FB4C47 /* GDTCORUploadPackage_Private.h in Headers */, - 29D6D453B4819E69CBA1698395F9FCCE /* GoogleDataTransport-umbrella.h in Headers */, - 938D19AEE0A72150342E2726DE93DE58 /* GoogleDataTransport.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8005A5FFCBA39C9C7C7A42C06A4EAE30 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 0264A37FF26A9497E25396ABD2A28649 /* FirebaseInstallations-umbrella.h in Headers */, - 1E53EF265CB5B9FD2201231C44715735 /* FirebaseInstallations.h in Headers */, - 123741BA9017024F52FDDA3C15BA9404 /* FIRInstallations.h in Headers */, - 799CC4DBD4659B8224093EA9CC751532 /* FIRInstallationsAPIService.h in Headers */, - EB0147ADA9D442DD07193EE0ED7D0666 /* FIRInstallationsAuthTokenResult.h in Headers */, - 4B52DC1A093AA6C705EACF122CD708AD /* FIRInstallationsAuthTokenResultInternal.h in Headers */, - FE6E869FC23597AAD6CD8590909FD360 /* FIRInstallationsErrors.h in Headers */, - 0773078D73AEA28B7F93A2827262AC36 /* FIRInstallationsErrorUtil.h in Headers */, - CF91D713F7DD5FB3D0E3B9952E1DF83E /* FIRInstallationsHTTPError.h in Headers */, - 09FB59E693E3AB9D9C5C7AE93248E9E7 /* FIRInstallationsIDController.h in Headers */, - 7DA75B9AC0E428D3DF8BD6AFCC1A60B0 /* FIRInstallationsIIDStore.h in Headers */, - F7FC4BDF64E5057DB25FD3F944B160E8 /* FIRInstallationsIIDTokenStore.h in Headers */, - 836AE2EE8A1B4D44F8DC66D9EEAFCAFC /* FIRInstallationsItem+RegisterInstallationAPI.h in Headers */, - D019FA421AEE7CD13D379DF85F2FAAC8 /* FIRInstallationsItem.h in Headers */, - 337244D6B2CFCFB6420AFACB60542888 /* FIRInstallationsLogger.h in Headers */, - 2DC2EA0CF0BA1B96479952CB1FC902C4 /* FIRInstallationsSingleOperationPromiseCache.h in Headers */, - B8B78A5A040E6E278AB174DB7FC4BEB2 /* FIRInstallationsStatus.h in Headers */, - 2B4AA1E3E2FCB1CA632D71B6DA5943A6 /* FIRInstallationsStore.h in Headers */, - ACE5A5A9EE5A390F7B8CF89869FF0237 /* FIRInstallationsStoredAuthToken.h in Headers */, - DE8DDFF95F94675A7E6DB9E4F6193695 /* FIRInstallationsStoredItem.h in Headers */, - 17F41D6CFF94F0D40E00142515EC0755 /* FIRInstallationsVersion.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 9395F0C1FE38C34E86588E144CED6687 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - CA48F24590F676CD28AF58F068002E5A /* Pods-MAPS.ME-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 98B441522EC333E213348E49AB0418A6 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - C00663E9E4E926A5817AEF04C7F9D3EF /* FacebookAdapterConfiguration.h in Headers */, - 1B8C79F3F7156B713A9FDFCEADC56F54 /* FacebookBannerCustomEvent.h in Headers */, - AE085290F5C1F2ED8FCABE8F75058048 /* FacebookInterstitialCustomEvent.h in Headers */, - C8F374528B52EB196555F20202BB1A36 /* FacebookNativeAdAdapter.h in Headers */, - 18CE3D1EDDCF0F13F6022442AA694723 /* FacebookNativeAdRenderer.h in Headers */, - 1ADE7C49BD055ACA045E9E6079B2E858 /* FacebookNativeCustomEvent.h in Headers */, - 0BED26739BA510CC88C5A5980F3FB544 /* FacebookRewardedVideoCustomEvent.h in Headers */, - 4D5C737B335008A7551E058DAD370D70 /* MoPub-FacebookAudienceNetwork-Adapters-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - CBE0BCFC13B794E61558E8B306D982A7 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 289790E597976A7420B5DECA22E9BCD8 /* MoPub+Utility.h in Headers */, - 9F4464E9B53C189E29079FCE5D105FC8 /* mopub-ios-sdk-umbrella.h in Headers */, - 3509015F78A557143A494A392A8B3D34 /* MoPub.h in Headers */, - EAB067AA9ECA2D3A1F0E189A47308A88 /* MoPub_AbstractAvidAdSession.h in Headers */, - E47AF3CDEB82139EE9D225BC6009ADEF /* MoPub_AbstractAvidManagedAdSession.h in Headers */, - 60A4EC4A90EC1228430F1D227BD69573 /* MoPub_Avid.h in Headers */, - 060FD8C32FA79C72171B56088688ED47 /* MoPub_AvidAdSessionManager.h in Headers */, - B8CEE522B8B51C66892A174047AE6DB9 /* MoPub_AvidDeferredAdSessionListener.h in Headers */, - BCC9783091DED50008DBF49817BCDB0A /* MoPub_AvidDisplayAdSession.h in Headers */, - 46FD5467CFE79441BC9EAF4026C57035 /* MoPub_AvidManagedDisplayAdSession.h in Headers */, - 37B149B66D82931244BC371B8145C710 /* MoPub_AvidManagedVideoAdSession.h in Headers */, - 826C0516CD5E303AB8422AC213A2F933 /* MoPub_AvidVideoAdSession.h in Headers */, - E79ED1E4F913DC4659E98CE5135F9524 /* MoPub_AvidVideoPlaybackListener.h in Headers */, - C56A04A3ACACB110272E5A074FFC3611 /* MoPub_ExternalAvidAdSessionContext.h in Headers */, - C20F1A138E762B29899C51182348C092 /* MOPUBActivityIndicatorView.h in Headers */, - DDD494D59A289D3FE6109AC88EE74834 /* MOPUBAVPlayer.h in Headers */, - 57D67EAF540B12DC1418DFD3CB741D59 /* MOPUBAVPlayerView.h in Headers */, - D3E7B3C6DBA9E97E639813B86E37C9CD /* MOPUBDisplayAgentType.h in Headers */, - CC06C9A49B4291C14FDAB20BD8E05E2D /* MOPUBExperimentProvider.h in Headers */, - 2B8B4A8C352AC9E8047D27F5E403B33E /* MOPUBFullscreenPlayerViewController.h in Headers */, - F565BD9E053B3787FDC187A27693BA09 /* MOPUBNativeVideoAdAdapter.h in Headers */, - 88CBD092DE39C956D260BA33F6E2CAC9 /* MOPUBNativeVideoAdConfigValues.h in Headers */, - 6FA6C189B5651567539705795BF7B346 /* MOPUBNativeVideoAdRenderer.h in Headers */, - 3349DC00FD375010760A2CEDB25D7282 /* MOPUBNativeVideoAdRendererSettings.h in Headers */, - 0E664034D130EBF5BC4D3173524FEF72 /* MOPUBNativeVideoCustomEvent.h in Headers */, - C826CDA7F544A989CC57C5227FB88ED8 /* MOPUBPlayerManager.h in Headers */, - BA7D435B074FCCA3F54A13D6FD8740EE /* MOPUBPlayerView.h in Headers */, - E9E3809F1BB295DB403D340521C0E6D1 /* MOPUBPlayerViewController.h in Headers */, - F44DE7768156CC132214A52E56EBC54A /* MOPUBReplayView.h in Headers */, - FA6CB32C31B96E6A7A8DD091D3315BB6 /* MPActivityViewControllerHelper+TweetShare.h in Headers */, - 799696E4320BB759534B18AA82AAD027 /* MPActivityViewControllerHelper.h in Headers */, - 2F4F03D5F1C39F72B74A6F1643774477 /* MPAdapterConfiguration.h in Headers */, - B79DC3982448D8308BF796E59F920250 /* MPAdConfiguration.h in Headers */, - BBE2DABEC09341AA55B702EC7654524C /* MPAdConversionTracker.h in Headers */, - E781311FCFD371844736E1E139BC16D3 /* MPAdDestinationDisplayAgent.h in Headers */, - B98967648F50D17AFA030A18BE7FAEEA /* MPAdImpressionTimer.h in Headers */, - 106F0B7DA2BFED7D399EC650DD787FF2 /* MPAdPlacerInvocation.h in Headers */, - F13A123EC174783D11A96C7C87CE64D7 /* MPAdPositioning.h in Headers */, - 2D90B7DE2B11044D111076FE645AFF31 /* MPAdServerCommunicator.h in Headers */, - 687636F6135F2052EAE4BA203F199DC3 /* MPAdServerKeys.h in Headers */, - 8F81A38AF8F85676F00CC876BE663564 /* MPAdServerURLBuilder.h in Headers */, - A52AA7A55C7AF0E3D8325DEDDE2F6ABE /* MPAdTargeting.h in Headers */, - CB7276C260D353105D61E32F9180BE5C /* MPAdView.h in Headers */, - D0E2F151A5AA34F37ADD9C187B5C21D0 /* MPAdViewDelegate.h in Headers */, - E1596B78A0CAE82C0B72469CF72ABC39 /* MPAdWebViewAgent.h in Headers */, - 7E5CCE2C71C635DB11723B587A18108A /* MPAnalyticsTracker.h in Headers */, - A132FEC9489398DDF0945D9071B26AE3 /* MPAPIEndpoints.h in Headers */, - 846FC499B63EF0B6E4709411D64AF09F /* MPATSSetting.h in Headers */, - 32423A791AD289849D7603957E877E6A /* MPBannerAdManager.h in Headers */, - 77FC13E5482B4A98FFEA7C297CC3FDED /* MPBannerAdManagerDelegate.h in Headers */, - 67BD57566075CACD4ACAC85DCB255418 /* MPBannerCustomEvent+Internal.h in Headers */, - 3CD40AF6287E539FFCDD95322C80A51E /* MPBannerCustomEvent.h in Headers */, - 6705903811C0A82E6802B5008DCCDF23 /* MPBannerCustomEventAdapter.h in Headers */, - 1DACEAE169B1F37AD7917884F19BDEE0 /* MPBannerCustomEventDelegate.h in Headers */, - 41968E1D9399C2D2F42DE49420929C4A /* MPBaseAdapterConfiguration.h in Headers */, - C37DF57D86C678C6332C55965737B1DE /* MPBaseBannerAdapter.h in Headers */, - 4ED2C4FE3CFC1C00D88AB88BA2D7AE62 /* MPBaseInterstitialAdapter.h in Headers */, - A980A312BB8316E21684645C350916E1 /* MPBaseNativeAdRenderer+Internal.h in Headers */, - 14E10FF5967EB1619663B672BDB3EA9D /* MPBaseNativeAdRenderer.h in Headers */, - B4760D940A02C7791F82C797E0C1EA9B /* MPBLogger.h in Headers */, - 3B180DB68EBCB7F908B6F52663A30E33 /* MPBLogLevel.h in Headers */, - DAC0A98C7A1D1E64CAEF5A01D7843DDC /* MPBool.h in Headers */, - 1CCB3231E49FDBFDFB9F34B0574D9980 /* MPClientAdPositioning.h in Headers */, - 25D6B93171DDAA0DD6B6355A2611A441 /* MPClosableView.h in Headers */, - 2EF7FAFD7BBEA481C724A46EF56BB9A8 /* MPCollectionViewAdPlacer.h in Headers */, - CE550C4538BB8932C7A65BB89BB1FFF5 /* MPCollectionViewAdPlacerCell.h in Headers */, - 4F29681FAED17B9F69BD41151C10E0EF /* MPCollectionViewAdPlacerDelegate.h in Headers */, - A547220839D67BB7E4CE26D2583BE8FD /* MPConsentChangedNotification.h in Headers */, - 9688F82BE1C867164B755B7BD9B0ECBB /* MPConsentChangedReason.h in Headers */, - 10E1A1D4F4B82988FB7C918DA6068962 /* MPConsentDialogViewController.h in Headers */, - 37EDA0D2A2641976E5F56ACF09B6FB53 /* MPConsentError.h in Headers */, - 741E3305451A9A11338287F6CA1B54C9 /* MPConsentManager.h in Headers */, - 3FB9234C526FCC082198EE493C9AC5FD /* MPConsentStatus.h in Headers */, - C0C56216E937946B350B50A16DAA8B6B /* MPConsoleLogger.h in Headers */, - F5068670924362F48A4BDF1348883AF3 /* MPConstants.h in Headers */, - 26BBD681C663744B026B90A2B8F665A1 /* MPContentBlocker.h in Headers */, - FC87C2EF85DC8FBD8E96B5EFA626F0B7 /* MPCoreInstanceProvider+MRAID.h in Headers */, - A13D89B0250706065DAD41C2CEDCBF29 /* MPCoreInstanceProvider.h in Headers */, - 6FC373BB403447102ADCFC79DB5B2758 /* MPCountdownTimerView.h in Headers */, - C46DBC44B2B430358520A0058F5BE8D2 /* MPDeviceInformation.h in Headers */, - 10B4B0F92A025495F09FD23F4B117A60 /* MPDiskLRUCache.h in Headers */, - 3E949ADCCDC924345FBAB70EBF86F98D /* MPEngineInfo.h in Headers */, - D662340EC2962B60A45B347DEB3AEF33 /* MPEnhancedDeeplinkRequest.h in Headers */, - BE2C1A16EFF3B487C4759CC1A1E8DA84 /* MPError.h in Headers */, - 1E0CE250E4F4FA3DCC87F85CAB623EA9 /* MPExtendedHitBoxButton.h in Headers */, - B411D4F07A79F09949EDD3AB9C5E850E /* MPForceableOrientationProtocol.h in Headers */, - 39B22B1B4422EE09975B45D6EF053DB5 /* MPGeolocationProvider.h in Headers */, - 88E27037BB9CBA9C78EAC080F9EBB9E8 /* MPGlobal.h in Headers */, - 9FB59B1CA88D062C22DD2BAA6F1208B1 /* MPHTMLBannerCustomEvent.h in Headers */, - 9EBDB00A85BDCD0142FC15691335CABD /* MPHTMLInterstitialCustomEvent.h in Headers */, - 707440D1D2A1E148392709B73AB9C9B3 /* MPHTMLInterstitialViewController.h in Headers */, - CE24DD4A38909AA42A09D7E48BA3A4AE /* MPHTTPNetworkSession.h in Headers */, - 83BB619C62887CF14F8C34A8AAE57D7D /* MPHTTPNetworkTaskData.h in Headers */, - 6515E017C238F3E8DAE6235B186CD675 /* MPIdentityProvider.h in Headers */, - BD70F91B6ACEBCB344F6601A40B980A0 /* MPImageDownloadQueue.h in Headers */, - B6BD1618685614F02A4CB7B283990402 /* MPImageLoader.h in Headers */, - 419A5187D19B5B0B8F1046248AD4DA5B /* MPImpressionData.h in Headers */, - 15301937D3C4BEA3DE851B04DA1543CF /* MPImpressionTrackedNotification.h in Headers */, - 94697B1FC522D5CDA159BA710E313DF4 /* MPInterstitialAdController.h in Headers */, - BC1AE6AF335DD592900B424AD25C153D /* MPInterstitialAdControllerDelegate.h in Headers */, - B1322AD7E338BD1F83D4C1F403B85DBF /* MPInterstitialAdManager.h in Headers */, - 4CE29B3C7D46BA9A0AD993F823D6DB88 /* MPInterstitialAdManagerDelegate.h in Headers */, - 4BAE6A5AE51D640B909A349108ABCD9A /* MPInterstitialCustomEvent.h in Headers */, - 30C01D92219BA89DC0B0433E788D2C9C /* MPInterstitialCustomEventAdapter.h in Headers */, - 53770D273879B61F54065158F7AD670C /* MPInterstitialCustomEventDelegate.h in Headers */, - E1AD7F4C9A5B2161C50369FB63874897 /* MPInterstitialViewController.h in Headers */, - 1B316747453534BC118296AA5D42D930 /* MPLastResortDelegate.h in Headers */, - FD52C33EE15AA10D907E1CD3D13EE57D /* MPLogEvent.h in Headers */, - ED74A633FDE2402C86FF5A4C1F66C68A /* MPLogging.h in Headers */, - DB4F688272CFD8AB4ACC6433288E8875 /* MPLogManager.h in Headers */, - 6BA319704C8BC9815CB80EE2D5E4B7CC /* MPMediaFileCache.h in Headers */, - 01ABC64A44B8E5639C4968C066D486E6 /* MPMediationManager.h in Headers */, - 87890F004A42DC398C64143F84548126 /* MPMediationSettingsProtocol.h in Headers */, - A4529AE979D1156E7C6BF43889DB4863 /* MPMemoryCache.h in Headers */, - 4E37F28884CB6A44F499C90FCA8A8EBA /* MPMoPubAd.h in Headers */, - 78B467E73E736C2F4CF467B6906266F6 /* MPMoPubAdPlacer.h in Headers */, - 5221C1566261892F473697FD737567AE /* MPMoPubConfiguration.h in Headers */, - 47727FFCA5992A0831A5F4D9F6FD9658 /* MPMoPubNativeAdAdapter.h in Headers */, - D4CD833AAE81E77AF4F5DDA413429A53 /* MPMoPubNativeCustomEvent.h in Headers */, - FF206B45345DDAEE81C6BC3730B8D79B /* MPMoPubRewardedPlayableCustomEvent.h in Headers */, - 08F472038396C0F1EEAF3615CA4292C6 /* MPMoPubRewardedVideoCustomEvent.h in Headers */, - 3440689FB5797F965AD03B25E92DA013 /* MPMRAIDBannerCustomEvent.h in Headers */, - 607F8848B8F6D1D5035C2362443E5419 /* MPMRAIDInterstitialCustomEvent.h in Headers */, - D9E8428EA1C8604908FF791A43D301C9 /* MPMRAIDInterstitialViewController.h in Headers */, - 5026653B632A226D359A14342A4B3A75 /* MPNativeAd+Internal.h in Headers */, - 466316A11D8D1AF9E2A9386A0D769801 /* MPNativeAd.h in Headers */, - 549153DD95408BE41053F69CEC23591C /* MPNativeAdAdapter.h in Headers */, - 4450CCCEB35A406FFD37267413713675 /* MPNativeAdConfigValues+Internal.h in Headers */, - F5BF7B6C4B694A72353B8C2BE67069D8 /* MPNativeAdConfigValues.h in Headers */, - 8175D2E77882927351EBDABD287F3AB1 /* MPNativeAdConstants.h in Headers */, - A69B9917BC4E37FCCF14B35D11A97B0C /* MPNativeAdData.h in Headers */, - 1B16008515AAF37046A5DFD36D49B7E2 /* MPNativeAdDelegate.h in Headers */, - 7191CF8EF6F87B18B08DE650A88A0DC3 /* MPNativeAdError+VAST.h in Headers */, - ADFFFE613C32BE7F96DFDB41F6F4B83D /* MPNativeAdError.h in Headers */, - 03EBB6635435EB209953BB576013BDB1 /* MPNativeAdRenderer.h in Headers */, - 551CBBAFCA26883B139A02C53C758FF6 /* MPNativeAdRendererConfiguration.h in Headers */, - 7B74BF561ECE94E97E8A9C4B674C502B /* MPNativeAdRendererConstants.h in Headers */, - 318C85B55D0EE386811B7BF4FC199570 /* MPNativeAdRendererImageHandler.h in Headers */, - 9CECC506A2D874862561025F1FFA3A4C /* MPNativeAdRendererSettings.h in Headers */, - C2AEA4AD0256ACDE5CA6F1C09185E86B /* MPNativeAdRendering.h in Headers */, - F7A64B58F84130024C239FEAD682E2AA /* MPNativeAdRenderingImageLoader.h in Headers */, - DDA432F3A8A316FB7DEE7F7730B925FC /* MPNativeAdRequest+MPNativeAdSource.h in Headers */, - 15F2BF67327FF41637A2753666978971 /* MPNativeAdRequest.h in Headers */, - B1BD20350FE34CE4AC61262D8ED4EA2E /* MPNativeAdRequestTargeting.h in Headers */, - 99ECF34366107412F28585B91756EEE8 /* MPNativeAds.h in Headers */, - 0637E0CC36906565A27E876245149FF8 /* MPNativeAdSource.h in Headers */, - 7B156BCBA0E2054F47A066B83BD0B059 /* MPNativeAdSourceDelegate.h in Headers */, - 72F1647F81E490C4B9150E86690EC3A4 /* MPNativeAdSourceQueue.h in Headers */, - 7A466AE770C874A1C1E161AD21D239A9 /* MPNativeAdUtils.h in Headers */, - 3B31BECE1D1950047380FBFBDF5A0BBE /* MPNativeCache.h in Headers */, - DCF00E725AFECD4AD6E102D1E8480B97 /* MPNativeCustomEvent.h in Headers */, - F5FF1AEE1C43FE00412F6DCCDF40D006 /* MPNativeCustomEventDelegate.h in Headers */, - 3931DCE9C724119E8F71003B2044816C /* MPNativePositionResponseDeserializer.h in Headers */, - DA5CC2D93111D7FC22DBBC1111B95D9A /* MPNativePositionSource.h in Headers */, - CCD8A35E2C13918DB42CF7B88540C5EA /* MPNativeView.h in Headers */, - 437B05D70FD64832983CABB35FD156CA /* MPNetworkStatus.h in Headers */, - E133CAB71B25DADEDAC27C722F387451 /* MPPrivateBannerCustomEventDelegate.h in Headers */, - 69B6137F7F7FAF58C0662E537AA141C1 /* MPPrivateInterstitialCustomEventDelegate.h in Headers */, - B7A33BAD9064AA0AD1C4EAA2E09DA605 /* MPPrivateRewardedVideoCustomEventDelegate.h in Headers */, - E292143116F19E0BD410567723081451 /* MPProgressOverlayView.h in Headers */, - D9A57E0A4BE70D30B89333C068CB7148 /* MPRateLimitConfiguration.h in Headers */, - 0C30E340886CA3221FEF213E8DB3314F /* MPRateLimitManager.h in Headers */, - 9BE6A36174D72D202DD37B2172566D4B /* MPReachability.h in Headers */, - F374C4C98B96C0A09D5672B3A04B6DB6 /* MPReachabilityManager.h in Headers */, - 99667E3E8864C69F9A5251FDA2E4FA62 /* MPRealTimeTimer.h in Headers */, - 51D09FDB004DF67DCA7D982150E1DFB7 /* MPRewardedVideo+Internal.h in Headers */, - CD5FB67F16839C5D00B6CF12F326F63D /* MPRewardedVideo.h in Headers */, - CE3B53ADCD86AED4C150CBD19CD54725 /* MPRewardedVideoAdapter.h in Headers */, - 8B5939A9CFEEF3CDB5DB42AEAE30B2C7 /* MPRewardedVideoAdManager.h in Headers */, - DF1D59235CA14DA33D1DE7D06B9A9B90 /* MPRewardedVideoConnection.h in Headers */, - E62135525F30D270AE8CD64E06E2830B /* MPRewardedVideoCustomEvent.h in Headers */, - E2EEE81A39A26C7D6C08E34B8B990389 /* MPRewardedVideoError.h in Headers */, - 50763A46EE286C727A9FA7CB31CEBD87 /* MPRewardedVideoReward.h in Headers */, - E43E719188165A40EC54DA171FDB72A6 /* MPServerAdPositioning.h in Headers */, - 96547B08A5B8075981DD297FFEE2EEC2 /* MPSessionTracker.h in Headers */, - 08A10D77C8E00A72A60D1D0C5D36549F /* MPStaticNativeAdRenderer.h in Headers */, - B190F06EBF0D9B4634B847C97EAF6FEA /* MPStaticNativeAdRendererSettings.h in Headers */, - 5A1B778B3967675284513AB66C544DD8 /* MPStopwatch.h in Headers */, - 323BCB7CC244AFFE76C5A7C5584EB40A /* MPStreamAdPlacementData.h in Headers */, - CDC16E57D72F1F9832E97EDBCFA29181 /* MPStreamAdPlacer.h in Headers */, - 26974052B4812135DE0021617B03EEAE /* MPStreamAdPlacerDelegate.h in Headers */, - D6C30311EB2D7AA9026CFF49C395C07A /* MPTableViewAdPlacer.h in Headers */, - 27AA35A6E3C617367BC2449EA49DF787 /* MPTableViewAdPlacerCell.h in Headers */, - 578AB140325441AEF7198B1FBDD60BB2 /* MPTableViewAdPlacerDelegate.h in Headers */, - F0D6A8E3A38B2E57F18CB822B64674E4 /* MPTimer.h in Headers */, - 909F8C0B314CD0A57963E31EA2C96124 /* MPURL.h in Headers */, - 18FA9366C4AA4382DE609A5B88F4A8B5 /* MPURLActionInfo.h in Headers */, - B526F7450AD0DF8F56B8E3AAAF48D301 /* MPURLRequest.h in Headers */, - 70FF61432737006E7757971A434A5CD0 /* MPURLResolver.h in Headers */, - 7116221FCE021A95F4C5A49F1A7408C9 /* MPUserInteractionGestureRecognizer.h in Headers */, - DEA8AF33938820C7BCD68895788B2DE9 /* MPVASTAd.h in Headers */, - 5451131DD3D68878FD24A7816E4E556B /* MPVASTCompanionAd.h in Headers */, - D542499A7528D695FD29D5AD67D6B5FC /* MPVASTCompanionAdView.h in Headers */, - CC8AFA83E5BFE5A27D55295DC8DF5017 /* MPVASTConstant.h in Headers */, - 0DDCA213B5B822119A9C32DCBAE826EB /* MPVASTCreative.h in Headers */, - 3FB221D12944DFD2CE853814FA576DA9 /* MPVASTDurationOffset.h in Headers */, - 5FB4B673675F5C7B84E1BF6F2DFCE797 /* MPVASTError.h in Headers */, - C08DCB181595BECB915ABC0B9B565E6F /* MPVASTIndustryIcon.h in Headers */, - 6FCAFACF6D49192B35E2B5FE8AB132BE /* MPVASTIndustryIconView.h in Headers */, - 8AC6AB969218811C32327660E20F278B /* MPVASTInline.h in Headers */, - 127684A70C4BA92892A537B440AFF82D /* MPVASTInterstitialCustomEvent.h in Headers */, - 30881FA475491CF6A0516E29FFB7DC53 /* MPVASTLinearAd.h in Headers */, - 84C6A02C6EA671C778FE9FB51D876C71 /* MPVASTMacroProcessor.h in Headers */, - 06314CC92758678AD7B14CBFBAADFD08 /* MPVASTManager.h in Headers */, - 385923A5818323809CE093E8CB3F478D /* MPVASTMediaFile.h in Headers */, - CBD66720E254265D68AD31E045CA626F /* MPVASTModel.h in Headers */, - 404685461953B8A4BC3772EF43CAA035 /* MPVASTResource.h in Headers */, - 0F618197C31DD693254928078568B171 /* MPVASTResourceView.h in Headers */, - 17ADC055EB08053038C8A4E9018A88BA /* MPVASTResponse.h in Headers */, - 5A9CFD1BEAC4B9F32D619D428B3455B9 /* MPVASTStringUtilities.h in Headers */, - 2FCE2D3B6DE76F1E12FDD9192FD7A233 /* MPVASTTracking.h in Headers */, - C0D8AA00761C253306934500D944ABB3 /* MPVASTTrackingEvent.h in Headers */, - 3DAF4D87181CC7D0D97E656D5E575553 /* MPVASTWrapper.h in Headers */, - 5663985CA9BEE0CF645A801D31A31443 /* MPVideoConfig.h in Headers */, - C261619ABF9B8BB999EC2C7E257FF9B3 /* MPVideoEvent.h in Headers */, - 504263DB71DB27CA8C35A0EF736199E3 /* MPVideoPlayer.h in Headers */, - 2BB62984D7DDC695A96C172956850057 /* MPVideoPlayerContainerView.h in Headers */, - 6260494D6403239473C75C1D5A342D11 /* MPVideoPlayerFullScreenVASTAdOverlay.h in Headers */, - 2E988695CEB5D93A4268BB328982ECBD /* MPVideoPlayerView.h in Headers */, - 4C89B59231A3B9D43D8F426778723321 /* MPVideoPlayerViewController.h in Headers */, - 46D07808B16EC10BC25C50227D120CF4 /* MPVideoPlayerViewOverlay.h in Headers */, - E56843CB26D51C72750523020F6F0073 /* MPViewabilityAdapter.h in Headers */, - 6FC33F923B3610AE5F53A413577363EA /* MPViewabilityAdapterAvid.h in Headers */, - EA56F7B428C6B0208518C1AE698006C7 /* MPViewabilityAdapterMoat.h in Headers */, - 780DC24D52F5CDCE69CA12C74AAE642E /* MPViewabilityOption.h in Headers */, - 5D514347EDC693DE33BFF52FCC08C0F3 /* MPViewabilityTracker.h in Headers */, - A83B0C9C722E148E4F5870C750445D6A /* MPWebBrowserUserAgentInfo.h in Headers */, - 07C44EEBD9B95F270604C72201BE1A15 /* MPWebView+Viewability.h in Headers */, - 182FF28BD38E32DC98DAEC0E6059F1BE /* MPWebView.h in Headers */, - 6885B43147AC9579E906A23DA01E17D0 /* MPXMLParser.h in Headers */, - FA680DD060BD6D96ED64A18431BC363A /* MRBridge.h in Headers */, - AEA08C192DB61F3BDB57D3054A32DED8 /* MRBundleManager.h in Headers */, - 5F85ED61875B7E8A6DFCC9B575AC9287 /* MRCommand.h in Headers */, - 2423A445B43E4914FACE51893076C549 /* MRConstants.h in Headers */, - AF524D9BF722D0B8CFED5EB7F5ECD886 /* MRController.h in Headers */, - 551FF6C21D36ED3BF0DD26D430960EF8 /* MRError.h in Headers */, - CB3E999995BCB4BD2F0B1E8D73446D2D /* MRExpandModalViewController.h in Headers */, - F4F95EEBE4C6684069A9034887BC26F3 /* MRNativeCommandHandler.h in Headers */, - 93A732E5E3408558985E3EAD3E5EEED1 /* MRProperty.h in Headers */, - 075E4261A163D7737CFAE98571C5A669 /* MRVideoPlayerManager.h in Headers */, - 063D930144D3A60F86ACBA4026F7D51A /* NSBundle+MPAdditions.h in Headers */, - AD8C5FC092A1E29618955FAE3D2393D4 /* NSDate+MPAdditions.h in Headers */, - 688469947AF68FD17738BB60A86F99D5 /* NSDictionary+MPAdditions.h in Headers */, - 9680FA8E2BA22BFF782B1332EFCBDA60 /* NSError+MPAdditions.h in Headers */, - AF5385F1C2E9B295E65DEE4CD6A86E7F /* NSHTTPURLResponse+MPAdditions.h in Headers */, - F87119E892C6296CAE7C86CF2DC7C570 /* NSJSONSerialization+MPAdditions.h in Headers */, - 180AAFFC64170A5232CE356FC5A2E526 /* NSMutableArray+MPAdditions.h in Headers */, - 4C7D6AFE7DC1C4D01CF79EDDAE120D4C /* NSString+MPAdditions.h in Headers */, - 88507A86805FC8A59E1FB85465BD8650 /* NSString+MPConsentStatus.h in Headers */, - 559E6262F1F705C918C3EC027EDEF12E /* NSURL+MPAdditions.h in Headers */, - 59B62532F24EC6EC03CA017D6815298B /* SKStoreProductViewController+MPAdditions.h in Headers */, - 80FF9F4622F0C5A4082236CA04A3AA4E /* UIButton+MPAdditions.h in Headers */, - 627366EE5AB201652636661AF059BFC0 /* UIColor+MPAdditions.h in Headers */, - 60029ABC6B43D3A9AC05AF8514EA9B79 /* UIView+MPAdditions.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - CD7101BCA05B08F7B301B28EAD2317FE /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - CACE6CC767F30F6A26220D5028646C00 /* FBLPromise+All.h in Headers */, - AB7806C94B1B70E8D077F347A6473C3D /* FBLPromise+Always.h in Headers */, - EC4AC2CCD3C3C8103B9558397DAEDF8F /* FBLPromise+Any.h in Headers */, - 18056456D771BA3EEA70DAF17C12FC4C /* FBLPromise+Async.h in Headers */, - 511909DDE1143920BAD203F38125BA10 /* FBLPromise+Await.h in Headers */, - 65BA4D1F48A3E8FEF358A718CD0DAE82 /* FBLPromise+Catch.h in Headers */, - 2B8F9A7F8DACF4ABE8E196E911F90D89 /* FBLPromise+Delay.h in Headers */, - 61E9DDF7AA9C6454DE0576CE98F83776 /* FBLPromise+Do.h in Headers */, - 509CCD2D6D5583B56E93FFEE374E803A /* FBLPromise+Race.h in Headers */, - 597E402BA142235B01F14DC862532A4D /* FBLPromise+Recover.h in Headers */, - 5EE81FE20A4EC0A3E6800A228E6BFDE9 /* FBLPromise+Reduce.h in Headers */, - 60293FD35F84039C91258DD9F35CA4DB /* FBLPromise+Retry.h in Headers */, - 10436C6DD7A46D29950E1EE044BE64BB /* FBLPromise+Testing.h in Headers */, - 2908236A225CABE00DEA8D7523948176 /* FBLPromise+Then.h in Headers */, - F447604AB167DE1ECB15305F793B3643 /* FBLPromise+Timeout.h in Headers */, - 6C58CBE13E124917E8F2901D8B79CEFA /* FBLPromise+Validate.h in Headers */, - A129B7496BFCFE6AB2492F7375D81346 /* FBLPromise+Wrap.h in Headers */, - AF6A8F4E7AE5A059E3404A8FDC3633A8 /* FBLPromise.h in Headers */, - 8DF2CC2F9D356593179E3718851D70F5 /* FBLPromiseError.h in Headers */, - 9605BA10B9A338AF46577D767B91A729 /* FBLPromisePrivate.h in Headers */, - C8B47E08496E8B76ABEA984EECFD7186 /* FBLPromises.h in Headers */, - 52B9BB4B0CA23FEDA4FD65F7F6A0CB5E /* PromisesObjC-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D95240D485432EB765A1181DB6A618AD /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 37444A104D6DC70453ECC941411364B7 /* nanopb-umbrella.h in Headers */, - 3F287886910A5383E8CFB7849B2CB79E /* pb.h in Headers */, - BA37EFEAE3102B9B77D362DD8AFF26B9 /* pb_common.h in Headers */, - 990A5F6F772521B4AF0FB83F904ED285 /* pb_decode.h in Headers */, - 10F221584A76A8566ED0B8B1D51EE913 /* pb_encode.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - F883D70A9FA28816EAAF4F72C7575788 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 60E92DDC5D9601D9BBDBA26E2DF70019 /* _FBSDKLoginRecoveryAttempter.h in Headers */, - AC61CFE710BE9831BE69FBD28AEA1E9D /* FBSDKDeviceLoginCodeInfo+Internal.h in Headers */, - D6D305285373C5940EE93C3C6231670D /* FBSDKDeviceLoginCodeInfo.h in Headers */, - E729D4B701AAFAA3AF72663371F747C6 /* FBSDKDeviceLoginManager.h in Headers */, - 315F85C3E25032148882E4C18B7A1A8B /* FBSDKDeviceLoginManagerResult+Internal.h in Headers */, - 0B504BBE177C09200825153297E49498 /* FBSDKDeviceLoginManagerResult.h in Headers */, - 594D333186F9B680AF8B51F2CA9E7942 /* FBSDKLoginButton.h in Headers */, - 74E37B0932605757FD37BB96469332E4 /* FBSDKLoginCompletion+Internal.h in Headers */, - 91F307FA599F4F0CFB5FC1A746528D03 /* FBSDKLoginCompletion.h in Headers */, - 3B886B160F5F2DC7ADBA196A4C52E9D0 /* FBSDKLoginConstants.h in Headers */, - B83D1BE0E09EB8E323EC25E273FA1074 /* FBSDKLoginError.h in Headers */, - 27323B7C0289E44D84697EB8027D8D1F /* FBSDKLoginKit+Internal.h in Headers */, - D21C63819AC495AEF5247F55C9BD3F8D /* FBSDKLoginKit-umbrella.h in Headers */, - 4A2AD8B664EF45D1519F68309A85A71F /* FBSDKLoginKit.h in Headers */, - DD210DE71D1F9F5342829B425381A308 /* FBSDKLoginManager+Internal.h in Headers */, - 8F782E4EEF2AAC8097A0031767802B2D /* FBSDKLoginManager.h in Headers */, - 1FE6DFD22D9A49865F23D918FA7E1E61 /* FBSDKLoginManagerLogger.h in Headers */, - 38586397CB98AE2CAD0B350CA264D100 /* FBSDKLoginManagerLoginResult+Internal.h in Headers */, - 0FB26479937E8EC33D3C5EA9AC0D8FF9 /* FBSDKLoginManagerLoginResult.h in Headers */, - 3C974B55AA239364E7C534A9AF15ABE0 /* FBSDKLoginTooltipView.h in Headers */, - 38113DF815A6135E2ACC74DC1F2F3CB3 /* FBSDKLoginUtility.h in Headers */, - C66BA434C46E63690A53CF20B65E1DE3 /* FBSDKTooltipView.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - F96B83D89AE5057CEA72C4AA98B5F65D /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - F684193C8547C2C89D3A2751911D8F8E /* FIRAnalyticsConfiguration.h in Headers */, - F8A52C74109311B59066A6A61BC4CA4E /* FIRApp.h in Headers */, - 469628456D727B032CD854462F682051 /* FIRAppAssociationRegistration.h in Headers */, - 6C413E800EC7563F7C9F3E99487914F0 /* FIRAppInternal.h in Headers */, - AC5792586B0B11A88FAE5BE6B1A167FC /* FIRBundleUtil.h in Headers */, - 0FE35B1BEE85F78A90F5D99C2A101969 /* FIRComponent.h in Headers */, - 0F73F8CC0790CD51C371D4B3D6479833 /* FIRComponentContainer.h in Headers */, - C13C16A662BBD500F77197267D581A29 /* FIRComponentContainerInternal.h in Headers */, - 97F785D75418A33B3B30895C212027C4 /* FIRComponentType.h in Headers */, - 6EE6F173FE556915F5374986328374AA /* FIRConfiguration.h in Headers */, - A47FE5F7C4BBE54C0C9C23370F2C3F6D /* FIRConfigurationInternal.h in Headers */, - A2A45DF5FDA4F1D1DD575DBB80106CF0 /* FIRCoreDiagnosticsConnector.h in Headers */, - 1E2899591463C9FC3FA369F879A36393 /* FIRDependency.h in Headers */, - BAF170BD66CF3F1353CE5706B8757D62 /* FIRDiagnosticsData.h in Headers */, - AE704E581396B3FAAB9CA0F17C15D9CC /* FirebaseCore-umbrella.h in Headers */, - 490CE063DC7274B2458EEA08BB1D6024 /* FirebaseCore.h in Headers */, - 814651F196D0EAC8809A3D3FBEE6ACB2 /* FIRErrorCode.h in Headers */, - BCDDD0D362C9A8BCD65B3EC11F70CA48 /* FIRErrors.h in Headers */, - 39C0B51503336B1312136C7ED4EC08E7 /* FIRHeartbeatInfo.h in Headers */, - 49492EBD39BA084417577672502AE04A /* FIRLibrary.h in Headers */, - 2D15C79867CFF0C814F7315AC57EAF35 /* FIRLogger.h in Headers */, - C3CE19B5D4D4BD3FE77C86A02E75E83B /* FIRLoggerLevel.h in Headers */, - C9462FF3241214FCC419E05A07573519 /* FIROptions.h in Headers */, - E33810CA80C50E29C618CCBA065A8BD4 /* FIROptionsInternal.h in Headers */, - FC5252C42FA21B81D64E5699698E6969 /* FIRVersion.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FA32D279F24D8C1545013335FA20A572 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - C71E52208FB1CD40D295CFD4A8D4A6C5 /* crashlytics.nanopb.h in Headers */, - 825F39212A3E2B082355FD90F37745B6 /* dwarf.h in Headers */, - 3F9210BE51860B7E32B7DB20CE319E8A /* FIRAEvent+Internal.h in Headers */, - 4E615FB9D2F01A9DD32E73BEE7A0661B /* FIRAEvent.h in Headers */, - 5050B03AF56241CB8820E401A5672728 /* FIRAValue.h in Headers */, - 87B40CD013D1BC533A7217548D6FC2A1 /* FIRCLSAllocate.h in Headers */, - AB145E29BC5DFCB463392E78611B519A /* FIRCLSApplication.h in Headers */, - 356CC51EF3D416AB1C2F45F5B5A2857C /* FIRCLSApplicationIdentifierModel.h in Headers */, - 0A18B6B74AEF2A481A8F16BE6BF91609 /* FIRCLSAsyncOperation.h in Headers */, - 9934A4F0FC73A08CD48F8C03F98E5CA9 /* FIRCLSAsyncOperation_Private.h in Headers */, - 80FE052CE9CF0128C3DEDA32AC977648 /* FIRCLSBinaryImage.h in Headers */, - E4C4ACD0C26939410F4FA1CDF1EDFDB2 /* FIRCLSByteUtility.h in Headers */, - 61230E60197C8D3C7A313A3FC445B9F6 /* FIRCLSCodeMapping.h in Headers */, - 96E46630336E84490A2416C48169E7F4 /* FIRCLSCompactUnwind.h in Headers */, - 702CF02866100617D20EF392C1F66AD7 /* FIRCLSCompactUnwind_Private.h in Headers */, - 37217D7C5DFA080E9F436E533494D1E2 /* FIRCLSCompoundOperation.h in Headers */, - 941795BCAF76D63B5206389206F4DF50 /* FIRCLSConstants.h in Headers */, - 4BB4B523251D8DDBE689F02730D45933 /* FIRCLSContext.h in Headers */, - 661690D05224FA3764F6BDEE5DFF4A99 /* FIRCLSCrashedMarkerFile.h in Headers */, - B166100B024372E7C748937B49C390DC /* FIRCLSDataCollectionArbiter.h in Headers */, - EDB2E85125C725015F52BBA6FD82B293 /* FIRCLSDataCollectionToken.h in Headers */, - DE63D76953D039579ACB5156388D7293 /* FIRCLSDataParsing.h in Headers */, - A5116B955E75DD8928C1D88ABF192BB7 /* FIRCLSDefines.h in Headers */, - E0F660C4D5F2270E7C33E1A89AAEF765 /* FIRCLSDemangleOperation.h in Headers */, - C337DC89C114AB07863D49F5BEE82C51 /* FIRCLSDownloadAndSaveSettingsOperation.h in Headers */, - 586D7BE6DE179AB46292A124C804A71F /* FIRCLSdSYM.h in Headers */, - 1B5D69AC4D4B3C0DC7024134DEC3A028 /* FIRCLSDwarfExpressionMachine.h in Headers */, - 497C377C42DCE7834016625F648830CC /* FIRCLSDwarfUnwind.h in Headers */, - D34444D0871C2AB211DD55487C03F4C6 /* FIRCLSDwarfUnwindRegisters.h in Headers */, - 1932ABE22993729534DC274BB938CA03 /* FIRCLSException.h in Headers */, - 09D9CA1C8A65675DB549CC09E06D1201 /* FIRCLSExecutionIdentifierModel.h in Headers */, - 6C6FA74221C8DCDF526BB298E147218A /* FIRCLSFABAsyncOperation.h in Headers */, - BF14F9FB8598E02E71BB106DAF499A85 /* FIRCLSFABAsyncOperation_Private.h in Headers */, - 149D026BBBFFF6A5AE21753F9469C742 /* FIRCLSFABHost.h in Headers */, - A2F240D427B3A825E31AD32414BBE1FE /* FIRCLSFABNetworkClient.h in Headers */, - 332DD4EE86BB78FA54BEDA3BCE5314EA /* FIRCLSFCRAnalytics.h in Headers */, - 0A3D295AB776852F91A80DAD2942A02A /* FIRCLSFeatures.h in Headers */, - 53E22C5366A7D66D80E31F10ACC8043A /* FIRCLSFile.h in Headers */, - 6FE43EE100DDE479C086D1B761ABD28F /* FIRCLSFileManager.h in Headers */, - D27C4B5B5DFB9CFCED7958CF27EF8411 /* FIRCLSGlobals.h in Headers */, - 358B934DF47BED1EF0D6C5C8B97375CA /* FIRCLSHandler.h in Headers */, - B34EE7385E16A363CFABBA516CE54639 /* FIRCLSHost.h in Headers */, - 91E5DE5B0257E0F644D4830B23B422E5 /* FIRCLSInstallIdentifierModel.h in Headers */, - 604064D035035C7B701AF655DFCCF636 /* FIRCLSInternalLogging.h in Headers */, - DB67EDEE08A7CCF9D48959B2B8A7C022 /* FIRCLSInternalReport.h in Headers */, - 4F8805F64FA46611D50FCEB341C49A24 /* FIRCLSLogger.h in Headers */, - 2AB16C2CA61ED7ED180F551A9D1567E9 /* FIRCLSMachException.h in Headers */, - FE5756BBBAB3AFDB2F2264176805398E /* FIRCLSMachO.h in Headers */, - DF369F209F1FA904E2DF33FB176F34CA /* FIRCLSMachOBinary.h in Headers */, - F0B566D62BCBE89F6FC71A84042B3A78 /* FIRCLSMachOSlice.h in Headers */, - 7632D1820DC2B2038C40F8A43F3DC0B6 /* FIRCLSMultipartMimeStreamEncoder.h in Headers */, - C081EF908C4CDDBD27A2664E384FCB71 /* FIRCLSNetworkClient.h in Headers */, - 26F8CBF565E2ADEA71F7A94B3D85AF01 /* FIRCLSNetworkOperation.h in Headers */, - 0BB52236366FE3FC9FFB7108EA7FA81E /* FIRCLSNetworkResponseHandler.h in Headers */, - 8931DF356009A868EC06934367E781B5 /* FIRCLSOnboardingOperation.h in Headers */, - 2FB595C947C2C19447D27ED069EF7504 /* FIRCLSOperation.h in Headers */, - 138A899F97E807A3CD92888F9974267C /* FIRCLSPackageReportOperation.h in Headers */, - EE9B5EA3E64BA9165906B16FB451ED30 /* FIRCLSProcess.h in Headers */, - E0C67C40691A0CAAA18220B515317892 /* FIRCLSProcessReportOperation.h in Headers */, - 2C5F01FC056A9896B692628B70B55A0C /* FIRCLSProfiling.h in Headers */, - 64039789BDF5F502B6134E418DD73277 /* FIRCLSRecordApplication.h in Headers */, - 98A72554FDCB2D2ED465A24EBFEB1849 /* FIRCLSRecordBase.h in Headers */, - 138B5E01551650EE9E68DD865E4701BC /* FIRCLSRecordHost.h in Headers */, - B5520006591764BE52836E99DAF852E4 /* FIRCLSRecordIdentity.h in Headers */, - B1DA2B594C654861ECCF1BE312B86DB5 /* FIRCLSReport.h in Headers */, - 5B75E0E4F7C4F64242A3DD404B98DE42 /* FIRCLSReport_Private.h in Headers */, - 59A7D7FC75CC9CA08CF40AB3473A992E /* FIRCLSReportAdapter.h in Headers */, - 6E4D2ED515CDE0D97E07738B55C7C2B1 /* FIRCLSReportAdapter_Private.h in Headers */, - 0225B356354DEECE9030C4A57FFF1D80 /* FIRCLSReportManager.h in Headers */, - D7F92888B4DA6D81649BF636FD461AC2 /* FIRCLSReportManager_Private.h in Headers */, - E9AF4799FADB183B075E81DD5ACBBDB6 /* FIRCLSReportUploader.h in Headers */, - A149B8576CCF4634C46E787BE13F18FB /* FIRCLSReportUploader_Private.h in Headers */, - D20E2128DDAE98484480C6979CBEFE66 /* FIRCLSSerializeSymbolicatedFramesOperation.h in Headers */, - 58C9711EFDED12380372B54B0EFD01C3 /* FIRCLSSettings.h in Headers */, - 9C99DD6631EF53C7FD93AFB2F78D817E /* FIRCLSSettingsOnboardingManager.h in Headers */, - AA6526AB4DF674E2175B6E7C6BEBAE71 /* FIRCLSSignal.h in Headers */, - 7E66AD9BCE4466541B9752189D069387 /* FIRCLSSymbolicationOperation.h in Headers */, - ACE067B8B930147B485E594D9E8991C3 /* FIRCLSSymbolResolver.h in Headers */, - 7F871EC44EFCA911D8FCA7E87B3CCF7D /* FIRCLSThreadArrayOperation.h in Headers */, - 685D49C9F836024C4A285F8071290575 /* FIRCLSThreadState.h in Headers */, - 2048BD95C2D80E2FE3AE3E55A7149B73 /* FIRCLSUnwind.h in Headers */, - 48FF4A5B6DDAC4D44986960CD0F265F9 /* FIRCLSUnwind_arch.h in Headers */, - BAC0CE1A52FA33E98BEC553ACD9C85E5 /* FIRCLSUnwind_x86.h in Headers */, - 618503356F9132B41D0AB5F23266E742 /* FIRCLSURLBuilder.h in Headers */, - CA6E16013BE31ABC208DB12C0A16F63D /* FIRCLSURLSession.h in Headers */, - A39086A3A7938F6235075CF103191D2E /* FIRCLSURLSession_PrivateMethods.h in Headers */, - 7FC0559896593DA3C5B32FF75B1E166B /* FIRCLSURLSessionAvailability.h in Headers */, - 2BC820F5560D600B662D62C9A7C633E1 /* FIRCLSURLSessionConfiguration.h in Headers */, - BA87C3D390594CB71AA0331622EB8EAC /* FIRCLSURLSessionDataTask.h in Headers */, - D6C9B62760FEE5FE4E71C27AFEFF0A61 /* FIRCLSURLSessionDataTask_PrivateMethods.h in Headers */, - 633C5C0C3A2764BF3F9E72F4849EEA18 /* FIRCLSURLSessionDownloadTask.h in Headers */, - 1BD041DBEC3848B7B0F5AE4972B4BD3F /* FIRCLSURLSessionDownloadTask_PrivateMethods.h in Headers */, - 8D0850BE3578759557D0A1E7D38F17D7 /* FIRCLSURLSessionTask.h in Headers */, - 131CABC4BA97FDBFF6621617F373670E /* FIRCLSURLSessionTask_PrivateMethods.h in Headers */, - 579999E3932BA05A98B100E8B4E03D34 /* FIRCLSURLSessionUploadTask.h in Headers */, - 5008728C302336AA30CDE92F1303688D /* FIRCLSUserDefaults.h in Headers */, - C0E1401F8EBA57A58162669B1E4EC740 /* FIRCLSUserDefaults_private.h in Headers */, - B59DB1FBE68F68F2195BF387B44C5859 /* FIRCLSUserLogging.h in Headers */, - 91501F9658C57826AF613B2BFEE16E81 /* FIRCLSUtility.h in Headers */, - 8E1835494345E631D6864883D7B9DA3B /* FIRCLSUUID.h in Headers */, - F9AB124BEE7C3C1EF0AA4A09B073D355 /* FIRCrashlytics.h in Headers */, - D14C76952C1C53F200CA3E779F002A96 /* FirebaseCrashlytics-umbrella.h in Headers */, - E978E72672F27A295D5D0BE95E08E60D /* FirebaseCrashlytics.h in Headers */, - 8CD50CCA07F6184FD3C1D0725B5A6D5F /* FIRExceptionModel.h in Headers */, - 0142150FF4BB31F9AA9CAF1215EEB7CF /* FIRExceptionModel_Private.h in Headers */, - 6BDB23B514A94519340E839D4F570046 /* FIRStackFrame.h in Headers */, - 58A3182E37F2B732EF53F50D062F4190 /* FIRStackFrame_Private.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FA4C30F39E15395B7EDE3588EBB96166 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 9BD4C893AA617EA90314F64B40594C63 /* _FBSDKTemporaryErrorRecoveryAttempter.h in Headers */, - 3CFDB070B6DAF0D6A02A422C8A7D8BFD /* FBSDKAccessToken.h in Headers */, - 6A58E6C9B06348192330EF74F4724645 /* FBSDKAccessTokenCache.h in Headers */, - F569E430559522FBD0B873EBDF85CB94 /* FBSDKAccessTokenCaching.h in Headers */, - 82AE82BCB1C3508340F3B994F9A2E7E7 /* FBSDKAccessTokenExpirer.h in Headers */, - 38023580C0633F011899FFD60D1D9B40 /* FBSDKAddressFilterManager.h in Headers */, - 8BDCD24EFE5E40D90E1D1AAFAAADC4AB /* FBSDKAddressInferencer.h in Headers */, - 896E869A8723DD185ED82A4408056DCF /* FBSDKAppEvents+Internal.h in Headers */, - 3AC00D6AA9FB5593E7FF27166AFAD428 /* FBSDKAppEvents.h in Headers */, - 38D816A420F923EDFAD0486AF7DDD333 /* FBSDKAppEventsDeviceInfo.h in Headers */, - 22990B2D0036FB7B6F23778BA8663CE6 /* FBSDKAppEventsState.h in Headers */, - 913D81CD220947103F69E100F3F919FD /* FBSDKAppEventsStateManager.h in Headers */, - DF6C48CC82F4A3C2E2B285C1ABF7747B /* FBSDKAppEventsUtility.h in Headers */, - E5BF7F56202B8E7520E540F8F9524054 /* FBSDKApplicationDelegate+Internal.h in Headers */, - 73716F06976C91E6D256F75F3C17E4DC /* FBSDKApplicationDelegate.h in Headers */, - EFB429F7365F77EC2E5547D2855ACD17 /* FBSDKApplicationObserving.h in Headers */, - 60D92E4439E70D020AC454D089F8D0D9 /* FBSDKAppLink.h in Headers */, - 402D2A5BB1054B6D3D04F7EB0AF5A2BA /* FBSDKAppLink_Internal.h in Headers */, - C64D62FF9261D3F09FC9D4572C9B0913 /* FBSDKAppLinkNavigation.h in Headers */, - C71B0206427F0382F9612ED41B48A420 /* FBSDKAppLinkResolver.h in Headers */, - 8B6CC835DE0A44ED6706A52D2E893BFD /* FBSDKAppLinkResolving.h in Headers */, - C0A30CE516796258299416AF3D12027D /* FBSDKAppLinkReturnToRefererController.h in Headers */, - 1FBBAA79EA1101B2F89A76F675C62AD5 /* FBSDKAppLinkReturnToRefererView.h in Headers */, - 66E8667F85E51D243BE5866BAA68B1F5 /* FBSDKAppLinkReturnToRefererView_Internal.h in Headers */, - D0EDA8C227C69B58E4FABA1072DCB8B0 /* FBSDKAppLinkTarget.h in Headers */, - 0615F95D6BBC374F313420D1B1548297 /* FBSDKAppLinkUtility.h in Headers */, - 2CA0DDC0E6E560C57D6EE63FD89DBF28 /* FBSDKAudioResourceLoader.h in Headers */, - 0EBB3E760C7BF3D4BDE99F26C832ED14 /* FBSDKBase64.h in Headers */, - 1E6F2BC1F7632BFE9DDF2314F6D4705D /* FBSDKBasicUtility.h in Headers */, - CC106B91B9FA443B43DEA4EAC328B3B8 /* FBSDKBridgeAPI.h in Headers */, - B0384E2272E1CB95BCB3A4DC495F2224 /* FBSDKBridgeAPIProtocol.h in Headers */, - 70FCA4189E6482C6E9318938382D452A /* FBSDKBridgeAPIProtocolNativeV1.h in Headers */, - BDE0B1140FD18657B6BEFFF6A34C134D /* FBSDKBridgeAPIProtocolType.h in Headers */, - C33838A082CEE1E46E445E90BE8745E4 /* FBSDKBridgeAPIProtocolWebV1.h in Headers */, - 9D6E2FCAD8725D527340A0AB860C50A9 /* FBSDKBridgeAPIProtocolWebV2.h in Headers */, - FC4310349E38DF0B2FEE5D46472A556E /* FBSDKBridgeAPIRequest+Private.h in Headers */, - 4D446BE962C96AA3CE693AC0E3BD8147 /* FBSDKBridgeAPIRequest.h in Headers */, - BB394C2162B2E80C648A0C258026E2DE /* FBSDKBridgeAPIResponse.h in Headers */, - 61314A61677B0EC6EF674461A94C3398 /* FBSDKButton+Subclass.h in Headers */, - 34733576B12CA7BCAD3ECAD7A584AEFD /* FBSDKButton.h in Headers */, - F154D2151F26700F7C05E42980E24467 /* FBSDKCloseIcon.h in Headers */, - 987F5C0374DC4A67E2B5429F3A1C2863 /* FBSDKCodelessIndexer.h in Headers */, - 61D496B0D230F4865E05E039A3DEB9A9 /* FBSDKCodelessParameterComponent.h in Headers */, - EE36CA09161DC5695B9CF68F7FEBD365 /* FBSDKCodelessPathComponent.h in Headers */, - 137881FA0B70E8CA2E6866A1D55E3EF0 /* FBSDKColor.h in Headers */, - 09F2148B88F742CC4331E1879E33AA89 /* FBSDKConstants.h in Headers */, - 0C4D6986D849FC1DBC55A34F0C55E561 /* FBSDKContainerViewController.h in Headers */, - 7FB7E9D0996C29C26814C8220E22079E /* FBSDKCopying.h in Headers */, - F2F7769A7BCDA49AFDF6E2E44537B93C /* FBSDKCoreKit+Internal.h in Headers */, - DD3A63B7FFC38BFFB40060CEAE2DC8B7 /* FBSDKCoreKit-umbrella.h in Headers */, - 2E33FAF85E688B7DAB451993124F6030 /* FBSDKCoreKit.h in Headers */, - DA5EFF7EF6F1D875E2EF81648439CCCD /* FBSDKCrashHandler.h in Headers */, - A02588BE9A7E3021BC28C6D09D04AD5D /* FBSDKCrashObserver.h in Headers */, - B2DC422B4058C15026ADA15DE39F179F /* FBSDKCrashObserving.h in Headers */, - A6C306D5A1143ECE63F34DC0D158FC00 /* FBSDKCrashShield.h in Headers */, - 8AE9F950A6725B9C075033AF48B6C6B6 /* FBSDKCrypto.h in Headers */, - 8F1E4292ECBDC10EBD8B1F612EB1B5A1 /* FBSDKDeviceButton+Internal.h in Headers */, - AB74881C8085A6DA48305365FE49CCD6 /* FBSDKDeviceButton.h in Headers */, - 929170D718A8AE3052402F6F810C05B3 /* FBSDKDeviceDialogView.h in Headers */, - 77B563105B266440928E6F7A06063D8F /* FBSDKDeviceRequestsHelper.h in Headers */, - 12B85C862FD7881DA650F4E8275A5497 /* FBSDKDeviceUtilities.h in Headers */, - 30D4F376A7C8BD7FA9964D458BB163E5 /* FBSDKDeviceViewControllerBase+Internal.h in Headers */, - 86C22B0B48D3E7DB5105806396350A40 /* FBSDKDeviceViewControllerBase.h in Headers */, - B339E6D8F3F26D40E543365AACE9C458 /* FBSDKDialogConfiguration.h in Headers */, - CD48ACF6531580D2FF1FBD6BE7CA3DA4 /* FBSDKDynamicFrameworkLoader.h in Headers */, - 37D19BA0D4F7EF05803B31CA5C1ED7BF /* FBSDKError.h in Headers */, - A422A9425BB250102E7C6E3BDFE8F4C6 /* FBSDKErrorConfiguration.h in Headers */, - 095393DB195261068CF5AED2F76E3477 /* FBSDKErrorRecoveryAttempter.h in Headers */, - C82F426CC90F306CC3F843B5B0180B70 /* FBSDKErrorRecoveryConfiguration.h in Headers */, - 14B4AFE836240CB278AF782DA356400C /* FBSDKErrorReport.h in Headers */, - 3F3984013AD7161AE68E36513BC9B1F9 /* FBSDKEventBinding.h in Headers */, - 20E4978A740F0417FC4CE8531560CF00 /* FBSDKEventBindingManager.h in Headers */, - 29B9051B82A41B9C57C1EFC33EDAF9AD /* FBSDKEventDeactivationManager.h in Headers */, - 4DD45648BC542376089F51DFA0E0082A /* FBSDKEventInferencer.h in Headers */, - A8F5926361672E90BB80EBF512B2CA9A /* FBSDKFeatureExtractor.h in Headers */, - 12706A16D1F59A0D639A863B7E03757A /* FBSDKFeatureManager.h in Headers */, - 3D4CC14791261B086E27A678883BECB4 /* FBSDKGateKeeperManager.h in Headers */, - 8666B87FD75BCF4B91E2FF9517962B8D /* FBSDKGraphErrorRecoveryProcessor.h in Headers */, - BA9D696C1078C68CB044CDA99A2E37B2 /* FBSDKGraphRequest+Internal.h in Headers */, - 5EAC3F224B4DD2F58DBE530B475BCC74 /* FBSDKGraphRequest.h in Headers */, - 92D0805E53D05CA68827F30C3D17F7DB /* FBSDKGraphRequestBody.h in Headers */, - F6844B74A899EB0CCD85C91E41CE1696 /* FBSDKGraphRequestConnection+Internal.h in Headers */, - C0E57DD6D4EDC93F38260CF28834EAEB /* FBSDKGraphRequestConnection.h in Headers */, - 57EB123AFA6F82579BB60A0482329FB3 /* FBSDKGraphRequestDataAttachment.h in Headers */, - B059A8B319A76BE9A3637FAD830D9594 /* FBSDKGraphRequestMetadata.h in Headers */, - D96700B161652265FBE723D8B011F579 /* FBSDKGraphRequestPiggybackManager.h in Headers */, - 8861E0C90501B90A6B4157D755A51405 /* FBSDKHybridAppEventsScriptMessageHandler.h in Headers */, - 4A05AB92F99D86FC02CF101A5CD82D36 /* FBSDKIcon.h in Headers */, - 0E946AAB81B32593ED4E5FC9FD129BD8 /* FBSDKImageDownloader.h in Headers */, - A9206D9832CCBA289352C307AD229F7A /* FBSDKInstrumentManager.h in Headers */, - F2860F43DED10504255DCF622244EB46 /* FBSDKInternalUtility.h in Headers */, - FD3C1F7BB55BC0509877635BE39C1566 /* FBSDKKeychainStore.h in Headers */, - 52A0493BCE3067305F086D63353D98BA /* FBSDKKeychainStoreViaBundleID.h in Headers */, - A73A366B4FEF1C588D30C6C0263A2280 /* FBSDKLibAnalyzer.h in Headers */, - DA07C8096E53E097D8EF857BCAC687EF /* FBSDKLogger.h in Headers */, - 09640EC6FDA32F21A82AD6C4B2798821 /* FBSDKLogo.h in Headers */, - B75E6F1450FAFA33F6B2E14DDEDC0998 /* FBSDKMaleSilhouetteIcon.h in Headers */, - 26B23CADC8D67EA938F9C48DC8EB663E /* FBSDKMath.h in Headers */, - C5972AC893E4CAB0AB8925A7A2FAA1E8 /* FBSDKMeasurementEvent.h in Headers */, - 4F6EDFD3863398E67D7123DAA56C8343 /* FBSDKMeasurementEvent_Internal.h in Headers */, - 960623BBE8E28986B47439CB896D5E11 /* FBSDKMeasurementEventListener.h in Headers */, - D1DE2BB6946810684DD199C5549193F1 /* FBSDKMetadataIndexer.h in Headers */, - D74F349C4421647685A30049D4B590A8 /* FBSDKModalFormPresentationController.h in Headers */, - 010FC1AC018EA54F9A4807EE53E3B6AC /* FBSDKModelManager.h in Headers */, - D4A72B0AE87E0EAC9B25B88B886F3234 /* FBSDKModelRuntime.hpp in Headers */, - 7723AF0B087DA608DF733CD51B6A1574 /* FBSDKModelUtility.h in Headers */, - CC5A09817B365DBF0C91ECF8CFB27E61 /* FBSDKMonotonicTime.h in Headers */, - 6C065CEE543E0CC447F00A7E0D6B24DB /* FBSDKMutableCopying.h in Headers */, - 11C1A7140BFAC798555927476894C4FA /* FBSDKPaymentObserver.h in Headers */, - CEB2575A8F4757F021B6C21CAC8FC328 /* FBSDKProfile+Internal.h in Headers */, - E7CA4DA497CB638A2CCDF8098A03D82E /* FBSDKProfile.h in Headers */, - 158776E03483C9766C3A6A23F49DDFFF /* FBSDKProfilePictureView.h in Headers */, - 7A8F1F11AA09A180A30E57F7AAE6E81F /* FBSDKRestrictiveDataFilterManager.h in Headers */, - 97620AED8EA094A972F8B3D6664E2EEF /* FBSDKServerConfiguration+Internal.h in Headers */, - BB6CA36DB789362132DF000BD1E44FDB /* FBSDKServerConfiguration.h in Headers */, - 7BD058DF1E47EE285C72C89FBE23BC75 /* FBSDKServerConfigurationManager+Internal.h in Headers */, - BBDCEE3A76D594BD1354FA5EE4408F50 /* FBSDKServerConfigurationManager.h in Headers */, - B9FC019FF030AA481604045125FEFBA8 /* FBSDKSettings+Internal.h in Headers */, - F0733CFDC2B5BCA3789EA5144B9811C5 /* FBSDKSettings.h in Headers */, - CF913107EBB6F46699128FD6BBCE4DA4 /* FBSDKSmartDeviceDialogView.h in Headers */, - 3E351F61FE4BFA3021DD628D8AD108C3 /* FBSDKStandaloneModel.hpp in Headers */, - 53EB7434675BA7817418C05A9110A655 /* FBSDKSuggestedEventsIndexer.h in Headers */, - 19CF3D9E64861B5D79B710F98C278439 /* FBSDKSwizzler.h in Headers */, - CA65A645CE1590FBF6F956A4CB0D4A65 /* FBSDKTestUsersManager.h in Headers */, - 8A721501B941BBD4C1BF439D061FD7FD /* FBSDKTimeSpentData.h in Headers */, - 3AA85EE5E5AB88C1F894959188FE9B27 /* FBSDKTriStateBOOL.h in Headers */, - E29EEB71B9C1B48B47F63CA26CE3DF55 /* FBSDKTypeUtility.h in Headers */, - 4B7F52B26E02824FE056D8794389063A /* FBSDKUIUtility.h in Headers */, - ED76B0466BD65B9017BDFCD5E0C0B3BC /* FBSDKURL.h in Headers */, - D9BA7A17F01914F65AFC836A0E048F02 /* FBSDKURL_Internal.h in Headers */, - 80874354AF36025E48F64E477C0F037E /* FBSDKURLOpening.h in Headers */, - 1F5BDF3E1A92A062967F1EBAA041C1AC /* FBSDKURLSession.h in Headers */, - 7F7086C601FF567A898741BD589AE189 /* FBSDKURLSessionTask.h in Headers */, - 07FDBDBC82FC6FD62A83773EDA6D0D3F /* FBSDKUserDataStore.h in Headers */, - DD09C2CAE75DFD214DBABB94C71278CA /* FBSDKUtility.h in Headers */, - 96B1DEEB2A19123EB062F651ED13F2DE /* FBSDKViewHierarchy.h in Headers */, - 1CAAB53078FDB8E3E2F23530AC35DAC7 /* FBSDKViewHierarchyMacros.h in Headers */, - 0C7836BE6333774780E4C381A9622583 /* FBSDKViewImpressionTracker.h in Headers */, - 3C8E0383C777A52D570997C0A5686406 /* FBSDKWebDialog.h in Headers */, - 752794A1B8D467E16FBEF8868CC12231 /* FBSDKWebDialogView.h in Headers */, - 3FA6AAEACA76FAFD424B7411A039F058 /* FBSDKWebViewAppLinkResolver.h in Headers */, + 52D58B5E0F07636EF5E2F3BC51E378F0 /* Pods-MAPS.ME-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ - 10C5885FCB0908EF785774EE52473DAB /* FBSDKLoginKit */ = { - isa = PBXNativeTarget; - buildConfigurationList = 5DE062DE241768818BF83AA923395848 /* Build configuration list for PBXNativeTarget "FBSDKLoginKit" */; - buildPhases = ( - F883D70A9FA28816EAAF4F72C7575788 /* Headers */, - DBA8681A8E73448AFA4D8F8B488647C1 /* Sources */, - 652A0B334A33CC46D696AC26FF111CB2 /* Frameworks */, - A35B45FA2A38E83B25BE05C027E9DA4F /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 86FAC6B31304E089EFB5763A173B5B2B /* PBXTargetDependency */, - ); - name = FBSDKLoginKit; - productName = FBSDKLoginKit; - productReference = 5DE0FEFC3995E740EC1AE2611D0AEFB0 /* FBSDKLoginKit.framework */; - productType = "com.apple.product-type.framework"; - }; - 23EE62D8F7B4475F49FFAC72AEF81FAF /* Flurry-iOS-SDK */ = { - isa = PBXNativeTarget; - buildConfigurationList = 1E3283EF13AA3D4451AF2D8D898D6150 /* Build configuration list for PBXNativeTarget "Flurry-iOS-SDK" */; - buildPhases = ( - 12544DFF1195C2DE38E0BD35D9827981 /* Headers */, - 423CDEBF315EFD04A195072939A50F7B /* Sources */, - 30926F2D2E332987C660E582A02940E7 /* Frameworks */, - C0D3BF0A4E7B6C290F0139257EEE6524 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "Flurry-iOS-SDK"; - productName = "Flurry-iOS-SDK"; - productReference = 40F694279899D5DE08A1D633DAFE496B /* Flurry_iOS_SDK.framework */; - productType = "com.apple.product-type.framework"; - }; - 28907903AF6DD0AD321D92CD660E7E23 /* FBSDKCoreKit */ = { - isa = PBXNativeTarget; - buildConfigurationList = FC24463618BACAFC5CF9C1786BB4B065 /* Build configuration list for PBXNativeTarget "FBSDKCoreKit" */; - buildPhases = ( - FA4C30F39E15395B7EDE3588EBB96166 /* Headers */, - 561A310D5167368C48511E611016259C /* Sources */, - 76637788990B469F5E8F96BB541C0809 /* Frameworks */, - AB2FE729EF8600AD03EEEC766BCEF7B3 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = FBSDKCoreKit; - productName = FBSDKCoreKit; - productReference = EC8F4D0BE3B0C192EBA4A93F8887D89F /* FBSDKCoreKit.framework */; - productType = "com.apple.product-type.framework"; - }; - 2BBF7206D7FAC92C82A042A99C4A98F8 /* PromisesObjC */ = { - isa = PBXNativeTarget; - buildConfigurationList = BF839B0494D6AB6D13C3BD6D6E43FD36 /* Build configuration list for PBXNativeTarget "PromisesObjC" */; - buildPhases = ( - CD7101BCA05B08F7B301B28EAD2317FE /* Headers */, - 85A9D082DDE5B68FFB8F9FF0F120DF29 /* Copy . Private Headers */, - B37F6D879042E1949943617516E472B2 /* Copy . Public Headers */, - 0E1F5E28EA1852D31462B401739CEEE7 /* Sources */, - 9F8CD5A799DCFBF96BC575C837264F8E /* Frameworks */, - A688558D1F0EC55BF0D6BAF1F89D164D /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = PromisesObjC; - productName = PromisesObjC; - productReference = 3347A1AB6546F0A3977529B8F199DC41 /* FBLPromises.framework */; - productType = "com.apple.product-type.framework"; - }; - 4402AFF83DBDC4DD07E198685FDC2DF2 /* FirebaseCore */ = { - isa = PBXNativeTarget; - buildConfigurationList = 8D0443A52BA7F7ACA9608213C3B09A0D /* Build configuration list for PBXNativeTarget "FirebaseCore" */; - buildPhases = ( - F96B83D89AE5057CEA72C4AA98B5F65D /* Headers */, - 6BF16FBE34F4D8B09099DBFB25EC223E /* Sources */, - 771275E5276D9F7C9B00DDB6A5B072D8 /* Frameworks */, - 1D6710EA70C972AD272936319C68E19B /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - D42B037DDDCD0B5D300DB7BF89C3ED2C /* PBXTargetDependency */, - 20FF012670312A28126A6D9FAEA647FB /* PBXTargetDependency */, - 1C1A78B0FD3D38DC0DD6079869FDF58F /* PBXTargetDependency */, - ); - name = FirebaseCore; - productName = FirebaseCore; - productReference = E2B63D462DB7F827C4B11FD51E4F8E2D /* FirebaseCore.framework */; - productType = "com.apple.product-type.framework"; - }; - 526C4398D095B3704EB933DADBC30093 /* FirebaseCrashlytics */ = { - isa = PBXNativeTarget; - buildConfigurationList = 4C93BC65445977F31B5A9A4E63CB6F77 /* Build configuration list for PBXNativeTarget "FirebaseCrashlytics" */; - buildPhases = ( - FA32D279F24D8C1545013335FA20A572 /* Headers */, - 279FCB64699875BCA3A6E675EDFE6F62 /* Sources */, - 8FCFD681E9E9ED349C6B6FAB4ED7F59C /* Frameworks */, - E75481148C1FF533725419733F40BA80 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 1127103A280E97143518C6D8D3CC1577 /* PBXTargetDependency */, - B9D6995D66470C2696BE2976D006DAE6 /* PBXTargetDependency */, - 78A528FD5572AECD12FB7837D0962353 /* PBXTargetDependency */, - D4B9ED2063009AB9FD975D0D38F4B041 /* PBXTargetDependency */, - 16AE1F330E51058F3326B992CB6B4BEB /* PBXTargetDependency */, - 43D51FD1B2F20609A51FF0EB85C383FE /* PBXTargetDependency */, - D8BB378ED939AB3FAEF7D021E5E3974D /* PBXTargetDependency */, - ); - name = FirebaseCrashlytics; - productName = FirebaseCrashlytics; - productReference = 86375444C196BA272DDBB8165BF64A15 /* FirebaseCrashlytics.framework */; - productType = "com.apple.product-type.framework"; - }; - 5C0371EE948D0357B8EE0E34ABB44BF0 /* GoogleDataTransport */ = { - isa = PBXNativeTarget; - buildConfigurationList = C8BEA7DEEE5C3A984C905106131B73A2 /* Build configuration list for PBXNativeTarget "GoogleDataTransport" */; - buildPhases = ( - 62FA46089F7FADD399ACA4FD4B07A2E6 /* Headers */, - F6BA1B0C34853A0D85CC55683AF90BCE /* Sources */, - B6AEB546EACB197D75006A5D2D856BBF /* Frameworks */, - 93EACBE40DC9CA9CEB0B66EA972F819D /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = GoogleDataTransport; - productName = GoogleDataTransport; - productReference = 856B5CD56F194FAD26EA91620B66D614 /* GoogleDataTransport.framework */; - productType = "com.apple.product-type.framework"; - }; - 620E05868772C10B4920DC7E324F2C87 /* FirebaseCoreDiagnostics */ = { - isa = PBXNativeTarget; - buildConfigurationList = 590B7692C2DA48F8E077563FC4348118 /* Build configuration list for PBXNativeTarget "FirebaseCoreDiagnostics" */; - buildPhases = ( - 5EB178B5C58B93F9DEFB5199D7F22AB0 /* Headers */, - CF920831D9458CC223BD6B4C50E20E88 /* Sources */, - 1DD2F3CF9DADFC6ECB59E6E3F3C28185 /* Frameworks */, - 5511F6CD4AFF82398A2677EA6865CD43 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - B224983A7E1FF41ECADC21506B963A2E /* PBXTargetDependency */, - 9E9694AD6D1D44A6C2D6803FB7D7C6FC /* PBXTargetDependency */, - 93633D8F33D8E1132405AB9AE852AAC5 /* PBXTargetDependency */, - ); - name = FirebaseCoreDiagnostics; - productName = FirebaseCoreDiagnostics; - productReference = 8CC9178C366942FD6FF6A115604EAD58 /* FirebaseCoreDiagnostics.framework */; - productType = "com.apple.product-type.framework"; - }; - 87803597EB3F20FC46472B85392EC4FD /* FirebaseInstallations */ = { - isa = PBXNativeTarget; - buildConfigurationList = 336C02EF8C4F2ACF4662F1021254F8F8 /* Build configuration list for PBXNativeTarget "FirebaseInstallations" */; - buildPhases = ( - 8005A5FFCBA39C9C7C7A42C06A4EAE30 /* Headers */, - A7F8A47CBF5254286BA4DFD235968B17 /* Sources */, - 410A73630847FCC52C1CEF5B8D0AB643 /* Frameworks */, - 127EAB127AABEA347486FEB63E1F364D /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 9D052EF5093719A281FAC4A132A04C19 /* PBXTargetDependency */, - 2730673D242B5E3FBD1163769673BC97 /* PBXTargetDependency */, - 60D9E428593F59AF217B1624A36C90E3 /* PBXTargetDependency */, - ); - name = FirebaseInstallations; - productName = FirebaseInstallations; - productReference = 13C8C8B254851998F9289F71229B28A2 /* FirebaseInstallations.framework */; - productType = "com.apple.product-type.framework"; - }; - 8D115411ACEA387C9D854E11FDDD914F /* MoPub-FacebookAudienceNetwork-Adapters */ = { - isa = PBXNativeTarget; - buildConfigurationList = 6467A492CB7F2CDA57A7B1127E43210E /* Build configuration list for PBXNativeTarget "MoPub-FacebookAudienceNetwork-Adapters" */; - buildPhases = ( - 98B441522EC333E213348E49AB0418A6 /* Headers */, - 911B7659FF10A26A728604C6E0CAA769 /* Sources */, - 4BDD2A07B4A972CD3139523FDEA60D92 /* Frameworks */, - 3BB8DDC327C6DE21FA1A3DB88241EF6E /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - D449E4C85571BC13902E9FEB79DFF7D3 /* PBXTargetDependency */, - 96B62C1492075FAB87ACB7D3DECE8266 /* PBXTargetDependency */, - ); - name = "MoPub-FacebookAudienceNetwork-Adapters"; - productName = "MoPub-FacebookAudienceNetwork-Adapters"; - productReference = 31C596999512C76A20CD0BAD735E6110 /* MoPub_FacebookAudienceNetwork_Adapters.framework */; - productType = "com.apple.product-type.framework"; - }; - 8D7F5D5DD528D21A72DC87ADA5B12E2D /* GoogleUtilities */ = { - isa = PBXNativeTarget; - buildConfigurationList = E83F558F165F887DA6CC0A016A8FAFF3 /* Build configuration list for PBXNativeTarget "GoogleUtilities" */; - buildPhases = ( - 12549671050076AC1420437011198E9A /* Headers */, - FE88A8B01837278D3FA8A083B58EA281 /* Sources */, - 51BBBAC7BD2B744AC10BAE8257E4898C /* Frameworks */, - B92FE7D76158CBDC49B6A5001E163C7A /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - F7607640BCAB182DC1220242D530C652 /* PBXTargetDependency */, - ); - name = GoogleUtilities; - productName = GoogleUtilities; - productReference = B43874C6CBB50E7134FBEC24BABFE14F /* GoogleUtilities.framework */; - productType = "com.apple.product-type.framework"; - }; A05F1244859CDEEE96C5DBB250BB0266 /* Pods-MAPS.ME */ = { isa = PBXNativeTarget; - buildConfigurationList = 8EF55EC51F3CC9B2741B66428B85C34E /* Build configuration list for PBXNativeTarget "Pods-MAPS.ME" */; + buildConfigurationList = BD42FE63D2CE91AA7EDC5B6CE0497FCD /* Build configuration list for PBXNativeTarget "Pods-MAPS.ME" */; buildPhases = ( - 9395F0C1FE38C34E86588E144CED6687 /* Headers */, - 98CB9DDC1782D7D36AB2113B5F2484EA /* Sources */, - 8B4660A05DD6834E5510CFA8EDA850F9 /* Frameworks */, - AD4590614B2E63C42FDC323275B091F3 /* Resources */, + CEBEE05309172EA3BF318240228D8C33 /* Headers */, + D590A9B134664B6F3750D65646C14E56 /* Sources */, + C3C33C469B4EB3F2159A21D63574D298 /* Frameworks */, + 13F769C6010A650892DE1F3ABB1E14D7 /* Resources */, ); buildRules = ( ); dependencies = ( - F33454F2C679148D1B709D18E5C38A6F /* PBXTargetDependency */, - 34177EE4582A35A6D103E2D6425740D3 /* PBXTargetDependency */, - 7DA5A58C2C65AA512EE03D63BA49CF7B /* PBXTargetDependency */, - CE381B526A44A3216538681531905C6E /* PBXTargetDependency */, - F91518187133EE7A005071081E23B430 /* PBXTargetDependency */, - B1E1DC3941038B0FEA2351C54C60AAB5 /* PBXTargetDependency */, - 3E9F62B9EA9E383627AE8F98A685DF7F /* PBXTargetDependency */, - DE4FE72501BD517D4719E145A6E99106 /* PBXTargetDependency */, - 4A64CA0DFA6FC56D3DFD08D0E72EBAD2 /* PBXTargetDependency */, - 9198041BA0A5953A4BE992C3497C40A8 /* PBXTargetDependency */, - 1F2F91C494E7A67218C63A61FBBE579C /* PBXTargetDependency */, - 35F38645E05456B15E307B9FCCBE3EF3 /* PBXTargetDependency */, - 41D19F4DCACA58D4D8EDAC0938419F15 /* PBXTargetDependency */, - 1ECE2FB927558493ED3D5B5F2046B25F /* PBXTargetDependency */, - E85A1688C50DE96D4216366D9220901E /* PBXTargetDependency */, - 68B056AB9770A46E4A19DB60D2F7B080 /* PBXTargetDependency */, - 0F7FA25BF31DD893D383172A8BA71C92 /* PBXTargetDependency */, - B5875B5A690F6211776564800109685A /* PBXTargetDependency */, - 30FFCA9356D9FC71B8E00AFF7D4CA57C /* PBXTargetDependency */, - D54DA9096EEF842FE6B73E96DE596C63 /* PBXTargetDependency */, - 0CD942F9F089C5621A5110F8605D28FF /* PBXTargetDependency */, - FCFC8A20880EE7408BEDE03683A5523E /* PBXTargetDependency */, ); name = "Pods-MAPS.ME"; productName = "Pods-MAPS.ME"; productReference = A50D488397CF80FE035346303494968D /* Pods_MAPS_ME.framework */; productType = "com.apple.product-type.framework"; }; - BE4A4ECC8A801924F03DA6FFE943E04C /* mopub-ios-sdk */ = { - isa = PBXNativeTarget; - buildConfigurationList = 00C533DF171C8547226B2B734D5A5F1E /* Build configuration list for PBXNativeTarget "mopub-ios-sdk" */; - buildPhases = ( - CBE0BCFC13B794E61558E8B306D982A7 /* Headers */, - 264E729BDE89E2C5D610E0898C5DC7C4 /* Sources */, - F75393A0F4468CBE0C87C2826ABBCD39 /* Frameworks */, - 02BE8CBB91279CAB109B65A253F9A8D5 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "mopub-ios-sdk"; - productName = "mopub-ios-sdk"; - productReference = 0A8924B6305C5116EA8035AE891818F6 /* MoPub.framework */; - productType = "com.apple.product-type.framework"; - }; - D2B5E7DCCBBFB32341D857D01211A1A3 /* nanopb */ = { - isa = PBXNativeTarget; - buildConfigurationList = 56117E68495456EB7E1BB45D74EB57C8 /* Build configuration list for PBXNativeTarget "nanopb" */; - buildPhases = ( - D95240D485432EB765A1181DB6A618AD /* Headers */, - D4F43D428E6B413FBABEE342C01141EA /* Sources */, - 003CCDF7D19521FB1907F2B8451F70FE /* Frameworks */, - 11C812951B38EE5F426DF0509D506DA0 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = nanopb; - productName = nanopb; - productReference = 06FC5C9CF96D60C50FCD47D339C91951 /* nanopb.framework */; - productType = "com.apple.product-type.framework"; - }; - F4F25FCAC51B51FD5F986EB939BF1F87 /* GoogleDataTransportCCTSupport */ = { - isa = PBXNativeTarget; - buildConfigurationList = D2FA00DC9B655AADDD1A925B37D2B465 /* Build configuration list for PBXNativeTarget "GoogleDataTransportCCTSupport" */; - buildPhases = ( - 5F3991EA161F226C4229BA52A74DE261 /* Headers */, - 4EDAA99AE1C045ECCCB0E2E6A3116573 /* Sources */, - AB691FEA424A04BD1BB3E4E889498D8A /* Frameworks */, - 2D1F456414B7B8E8213379687E15A829 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 48F52AD51CAC51BC3F942C027806177F /* PBXTargetDependency */, - 86F8BB540E12F645DCF26B059FEDB6B6 /* PBXTargetDependency */, - ); - name = GoogleDataTransportCCTSupport; - productName = GoogleDataTransportCCTSupport; - productReference = 6942351307BC1F54575D9853307EAE0E /* GoogleDataTransportCCTSupport.framework */; - productType = "com.apple.product-type.framework"; - }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ @@ -6560,158 +148,17 @@ Base, ); mainGroup = CF1408CF629C7361332E53B88F7BD30C; - productRefGroup = 5D92B6BDAA90B1E4FC28D93A1513B7C8 /* Products */; + productRefGroup = 0F5AA35DBA2727BE47B13E8335A097E9 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( - B0B23938B1EBCBAD2419AB6E9D222A0B /* AppsFlyerFramework */, - D53454FBB630479B01CA0A777383E94F /* FBAudienceNetwork */, - 28907903AF6DD0AD321D92CD660E7E23 /* FBSDKCoreKit */, - 10C5885FCB0908EF785774EE52473DAB /* FBSDKLoginKit */, - 072CEA044D2EF26F03496D5996BBF59F /* Firebase */, - C49E7A4D59E5C8BE8DE9FB1EFB150185 /* FirebaseAnalytics */, - D372E53E2E8FEAA06A0439FB85E65767 /* FirebaseAnalyticsInterop */, - 4402AFF83DBDC4DD07E198685FDC2DF2 /* FirebaseCore */, - 620E05868772C10B4920DC7E324F2C87 /* FirebaseCoreDiagnostics */, - 5EB4B0B6DA6D5C0C3365733BEAA1C485 /* FirebaseCoreDiagnosticsInterop */, - 526C4398D095B3704EB933DADBC30093 /* FirebaseCrashlytics */, - 87803597EB3F20FC46472B85392EC4FD /* FirebaseInstallations */, - 23EE62D8F7B4475F49FFAC72AEF81FAF /* Flurry-iOS-SDK */, - B53D977A951AFC38B21751B706C1DF83 /* GoogleAppMeasurement */, - 5C0371EE948D0357B8EE0E34ABB44BF0 /* GoogleDataTransport */, - F4F25FCAC51B51FD5F986EB939BF1F87 /* GoogleDataTransportCCTSupport */, - 8D7F5D5DD528D21A72DC87ADA5B12E2D /* GoogleUtilities */, - 8D115411ACEA387C9D854E11FDDD914F /* MoPub-FacebookAudienceNetwork-Adapters */, - BE4A4ECC8A801924F03DA6FFE943E04C /* mopub-ios-sdk */, - D2B5E7DCCBBFB32341D857D01211A1A3 /* nanopb */, A05F1244859CDEEE96C5DBB250BB0266 /* Pods-MAPS.ME */, - 2BBF7206D7FAC92C82A042A99C4A98F8 /* PromisesObjC */, - 803EF1AFD27445A470912B1033353BFC /* Pushwoosh */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 02BE8CBB91279CAB109B65A253F9A8D5 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 1D490444ADF54DB9C4F6572AF980085D /* MPAdapters.plist in Resources */, - 3C29F1ACB40CD867FBF2EC08F788B668 /* MPCloseBtn.png in Resources */, - 8EED1C46AB0A0518D2DE1CDDA9197088 /* MPCloseBtn@2x.png in Resources */, - 642471BE17717F210A258039FB5062EA /* MPCloseBtn@3x.png in Resources */, - 0CE643FFBE05968F87561EC329B1E0B7 /* MPCloseButtonX.png in Resources */, - 6EBA909B78D0F0D09B4169FED4D8617C /* MPCloseButtonX@2x.png in Resources */, - 239399F17DB1423B5057610BD5390E46 /* MPCloseButtonX@3x.png in Resources */, - 1E3E1FFC86CC621064B77D1E6EF48FA2 /* MPDAAIcon.png in Resources */, - 79A1386E88608F2D5D3C81A7E3E36656 /* MPDAAIcon@2x.png in Resources */, - CA7F708AE4336734906A85A91531B8A1 /* MPDAAIcon@3x.png in Resources */, - 50994462F6030A41F776295A34EF4BF3 /* MPMutedBtn.png in Resources */, - D9A8F72B96701A0A554CE812141F1E20 /* MPMutedBtn@2x.png in Resources */, - 13A7C5428A7DA8F386EC46275748E2DB /* MPMutedBtn@3x.png in Resources */, - 84C839492862EC82CEB1A5E50BC85F8A /* MPPlayBtn.png in Resources */, - CFC7544CF83B2FFA2403C2DA17E0111F /* MPPlayBtn@2x.png in Resources */, - 75CE9C9C5B3E5A782B127F47A351DA91 /* MPPlayBtn@3x.png in Resources */, - 68FE9A22A38C52A39A4C59265B69AB07 /* MPUnmutedBtn.png in Resources */, - A7059D455854AC776B0B9FBC7766EFDC /* MPUnmutedBtn@2x.png in Resources */, - A3078A2B1DCDE4D735FE48A11B969769 /* MPUnmutedBtn@3x.png in Resources */, - 38F1D5F69E02340734D9442A3450996F /* MRAID.bundle in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 11C812951B38EE5F426DF0509D506DA0 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 127EAB127AABEA347486FEB63E1F364D /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1D6710EA70C972AD272936319C68E19B /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 2D1F456414B7B8E8213379687E15A829 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 3BB8DDC327C6DE21FA1A3DB88241EF6E /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5511F6CD4AFF82398A2677EA6865CD43 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 93EACBE40DC9CA9CEB0B66EA972F819D /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - A35B45FA2A38E83B25BE05C027E9DA4F /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - A688558D1F0EC55BF0D6BAF1F89D164D /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - AB2FE729EF8600AD03EEEC766BCEF7B3 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 5EABC87411588B735ACAD2100DECA512 /* FacebookSDKStrings.bundle in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - AD4590614B2E63C42FDC323275B091F3 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - B92FE7D76158CBDC49B6A5001E163C7A /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - C0D3BF0A4E7B6C290F0139257EEE6524 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - E75481148C1FF533725419733F40BA80 /* Resources */ = { + 13F769C6010A650892DE1F3ABB1E14D7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( @@ -6721,1158 +168,24 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - 0E1F5E28EA1852D31462B401739CEEE7 /* Sources */ = { + D590A9B134664B6F3750D65646C14E56 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 49E2714155453549CB6BBF9DDD45150C /* FBLPromise+All.m in Sources */, - E9DD1714965871670C4D48DAAAB76973 /* FBLPromise+Always.m in Sources */, - 9FA4195D47B4DE9464D246CF7710E302 /* FBLPromise+Any.m in Sources */, - CB66474ABC7BA85B87E092352309003C /* FBLPromise+Async.m in Sources */, - 34CD6BF0F41A87F79A7FFF83308E0916 /* FBLPromise+Await.m in Sources */, - 60C2235B6D9633B2B77462EB36576EE2 /* FBLPromise+Catch.m in Sources */, - 59454B0A9C125E5D33B8CEA66BB1A81A /* FBLPromise+Delay.m in Sources */, - 487BC3C213938B20CB827C59F9AFF8A1 /* FBLPromise+Do.m in Sources */, - 524C975D2C32DC9F665BFF6A6311B359 /* FBLPromise+Race.m in Sources */, - 38E1C8E3D33E0A00929B05EF29115052 /* FBLPromise+Recover.m in Sources */, - EB19925F56CC9E52557053605724689B /* FBLPromise+Reduce.m in Sources */, - D46C26610FBBB5C4FAC4849418978F41 /* FBLPromise+Retry.m in Sources */, - 3DC16F64F4C3B689ADBAE2B46B41714B /* FBLPromise+Testing.m in Sources */, - F5EDE8C6A2B9A5E1503064C876091B92 /* FBLPromise+Then.m in Sources */, - EF0687DF4FB10C16DF8A0FB93F51823F /* FBLPromise+Timeout.m in Sources */, - 513D53424E6FC80C23E2FEAC0C0323C8 /* FBLPromise+Validate.m in Sources */, - F5A30DAD1E4BBD5CA57F1E7E127FC779 /* FBLPromise+Wrap.m in Sources */, - E8D7E5E9111A9FFC70294A48A8C8F716 /* FBLPromise.m in Sources */, - 79BE2EF6EF0450EB2263294D8ADE5AA9 /* FBLPromiseError.m in Sources */, - 91F1D998BEAA1F01DBEEC34C1105B333 /* PromisesObjC-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 264E729BDE89E2C5D610E0898C5DC7C4 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - D21BF21BC22BDBC53057A7E40368B178 /* MoPub+Utility.m in Sources */, - 96082F6CB4C628062F2FE597497FEE36 /* mopub-ios-sdk-dummy.m in Sources */, - 738A23F8635EFC2E1F12C5C8E6B5E57D /* MoPub.m in Sources */, - F42CABE9524BFEC4C00FBC1395D3A611 /* MOPUBActivityIndicatorView.m in Sources */, - E5F90F1F0C3FBDBED6A293AAA528B3CA /* MOPUBAVPlayer.m in Sources */, - 3F23A03E2EB47189F18634419F0EADB2 /* MOPUBAVPlayerView.m in Sources */, - 9F48A238750F49FD52473879BBC32F87 /* MOPUBExperimentProvider.m in Sources */, - 164137424845EDA24D6515272361FFD2 /* MOPUBFullscreenPlayerViewController.m in Sources */, - 9F7C8F1E213C262EED5FF1D769CAE129 /* MOPUBNativeVideoAdAdapter.m in Sources */, - 3DAD246B5F6103C608181DBBBDC19166 /* MOPUBNativeVideoAdConfigValues.m in Sources */, - 56AB2D44D8B20798AAD03DFFB27F94FC /* MOPUBNativeVideoAdRenderer.m in Sources */, - 495F98F743EFAB58C13BD2A3C526BF4C /* MOPUBNativeVideoAdRendererSettings.m in Sources */, - EDFD5124E0DAA85572C2EE0F88F4A101 /* MOPUBNativeVideoCustomEvent.m in Sources */, - CC51E51D8FD81A846DA1EB6F5CA2113A /* MOPUBPlayerManager.m in Sources */, - 455BCB3A8C1797F40F5ECAC845528CEC /* MOPUBPlayerView.m in Sources */, - EB628EB9D695A92BDF70678F13A1CB29 /* MOPUBPlayerViewController.m in Sources */, - CB12D124A1E578B5C03B891E8A30F9DE /* MOPUBReplayView.m in Sources */, - 2B34A9EF7378D8AB272CDCAAFF5ABAE9 /* MPActivityViewControllerHelper+TweetShare.m in Sources */, - 2D7AB9360D750578008CC3A3DA29F2F2 /* MPActivityViewControllerHelper.m in Sources */, - 0B151AFB6B446B915806FCB3153789EC /* MPAdConfiguration.m in Sources */, - 95A2016882661FE2E80E90F683E0F8F2 /* MPAdConversionTracker.m in Sources */, - C1B842957E3A32ECEC9BF18ADDFC6CFA /* MPAdDestinationDisplayAgent.m in Sources */, - 0ED8E25C8989172D8941970A1D74A027 /* MPAdImpressionTimer.m in Sources */, - 1358BE91271C7A2B2369D5A5212D866A /* MPAdPlacerInvocation.m in Sources */, - 463C25924F5DB5F92452EC44CBDCC7D8 /* MPAdPositioning.m in Sources */, - 993D978846B7C71AE6327D949486F291 /* MPAdServerCommunicator.m in Sources */, - 40978CA0C37D7AC845193380504B7EFF /* MPAdServerKeys.m in Sources */, - FE99205C394E281BCA97A7DA56FB7D2A /* MPAdServerURLBuilder.m in Sources */, - CA7D8516D787FACA64D31A6A104C453A /* MPAdTargeting.m in Sources */, - C3279127D117D68B27E2FA96E60B0C94 /* MPAdView.m in Sources */, - 6A30571E5A47E711C295FE299C88361A /* MPAdWebViewAgent.m in Sources */, - 839C853FE7124CFC971F19F8651B66BB /* MPAnalyticsTracker.m in Sources */, - 419E4DE45C680CB7E13F7794D4F3AAB6 /* MPAPIEndpoints.m in Sources */, - 2C9173F4178C0D9A8E4FEE140728EA4D /* MPBannerAdManager.m in Sources */, - E402C25DC616EA67211562FBC7030B9A /* MPBannerCustomEvent+Internal.m in Sources */, - 34BF300F66FDCA07E5C769E573603B9B /* MPBannerCustomEvent.m in Sources */, - 9B08181EB4786BE6FE8BE0105B92DD65 /* MPBannerCustomEventAdapter.m in Sources */, - F31AF0FD9F5E797B616757BA28A89219 /* MPBaseAdapterConfiguration.m in Sources */, - 0994A6A44593185C2B1181677C21D884 /* MPBaseBannerAdapter.m in Sources */, - 14A805A3BBB9E001EE711CD44989C974 /* MPBaseInterstitialAdapter.m in Sources */, - 35D3B5140F5328B2CCD9F4A8C8BD7B02 /* MPBaseNativeAdRenderer+Internal.m in Sources */, - 6CF8CC58626330C65EDE069BA78FC7D8 /* MPBaseNativeAdRenderer.m in Sources */, - 13C39EEAF61505F41D53993CB2B71DF4 /* MPClientAdPositioning.m in Sources */, - BDFF8400A71E11AB8A1351E4FE89CE1C /* MPClosableView.m in Sources */, - 036CDD1AD06687F2B75E924F2265653C /* MPCollectionViewAdPlacer.m in Sources */, - BF8F034F6F2D216DAB6DB6DC781ABCCC /* MPCollectionViewAdPlacerCell.m in Sources */, - 70BDC6FE5BE9E7E98D2CF6672B2A492D /* MPConsentChangedNotification.m in Sources */, - E184AA538CF0E50B553F5F5D8DC4B821 /* MPConsentChangedReason.m in Sources */, - B2FF1B9BE29CC5BF7BFA6FF6F73816F4 /* MPConsentDialogViewController.m in Sources */, - FA6D9F4401C8A33D00F089E5B07B80E5 /* MPConsentManager.m in Sources */, - D23909E9B7102A41B94B30B2F9C501C4 /* MPConsoleLogger.m in Sources */, - 40F029E2BD1F2AC346D42E4AAE4C9C77 /* MPConstants.m in Sources */, - 676AC8B36483DB9094A624687ABDA411 /* MPContentBlocker.m in Sources */, - 1AFDBA2CBC973BB3694C4956B5A2EC41 /* MPCoreInstanceProvider+MRAID.m in Sources */, - 6363B4E053E27FDB6345E651200CAFA4 /* MPCoreInstanceProvider.m in Sources */, - 6D575D3BE35633CCBFA09D603205A236 /* MPCountdownTimerView.m in Sources */, - 482FA071DE21BA82DE0F1CC3A7850B5A /* MPDeviceInformation.m in Sources */, - 5E04820A9B1374CD66E0F7B12FD8C782 /* MPDiskLRUCache.m in Sources */, - 0B127F5EEAC16211906E274A70DA41D4 /* MPEngineInfo.m in Sources */, - 1D215D515F6C2E07F7EEF9AC1C620A90 /* MPEnhancedDeeplinkRequest.m in Sources */, - 0BEE0164A8562FA5D7190C6E396E5EFB /* MPError.m in Sources */, - 9000B08254D6019B651FF2822B1C5653 /* MPExtendedHitBoxButton.m in Sources */, - FA93831868CC49BCDF236F15C3A80FFA /* MPGeolocationProvider.m in Sources */, - B0C975B48B2D3A73BDA51BFB6AFB508D /* MPGlobal.m in Sources */, - FE051329F7C9AA711392BC95BC276C48 /* MPHTMLBannerCustomEvent.m in Sources */, - 460387971A8FEEB049AEA4B0AD3B646D /* MPHTMLInterstitialCustomEvent.m in Sources */, - F92B0B10C38D066BB6A117DC06749833 /* MPHTMLInterstitialViewController.m in Sources */, - EF373D2C9144FA247E9150AC3C1DCDE2 /* MPHTTPNetworkSession.m in Sources */, - 6ABD8DC7697C6CAFA9B5439190BE517C /* MPHTTPNetworkTaskData.m in Sources */, - A15CC8DB859C2CC53721D364313BA9C1 /* MPIdentityProvider.m in Sources */, - B22BC7DC50CE7EFB53FE1F58E7A4B4BB /* MPImageDownloadQueue.m in Sources */, - A98CC72E14CE85A1D978AE9B16AAF7FA /* MPImageLoader.m in Sources */, - 544D620E15A964622159FC2935BB91A1 /* MPImpressionData.m in Sources */, - 94205895D350FE5EBCD0AE3DAFD531CD /* MPImpressionTrackedNotification.m in Sources */, - 999188AAD897041C2BD53608419149A1 /* MPInterstitialAdController.m in Sources */, - C4DEF69EE709156F47F265A4B5D70EC3 /* MPInterstitialAdManager.m in Sources */, - 090320471E87F5F6A582ABC45F35AF6C /* MPInterstitialCustomEvent.m in Sources */, - CB137B261ACA70970DEF3FFE1ACF2AE4 /* MPInterstitialCustomEventAdapter.m in Sources */, - C7D6661E63CC6B182A785D73FC5FFC45 /* MPInterstitialViewController.m in Sources */, - 7E1123AC6D48E6F19959C5A6EC530434 /* MPLastResortDelegate.m in Sources */, - 0DC80CF051ECB309CFCA4D476B504730 /* MPLogEvent.m in Sources */, - F573BE9F8FB6B8C4A5DD935572E9E2CF /* MPLogging.m in Sources */, - 77359BA4A4335BD345CB14B628B2E6B0 /* MPLogManager.m in Sources */, - 782F26A35281BD2B4BE360EBB2B4BC83 /* MPMediationManager.m in Sources */, - 4589BEB528C02656E477055BA75EBB70 /* MPMemoryCache.m in Sources */, - 70EE3978736A3F465C63ACF58DF97A27 /* MPMoPubConfiguration.m in Sources */, - 7C862961C2295CD795FD270879AC9303 /* MPMoPubNativeAdAdapter.m in Sources */, - 785BC8D74AA8D6A5E51608A7A28CB3D5 /* MPMoPubNativeCustomEvent.m in Sources */, - D7218CFBDB4D766D90161EBA1730430A /* MPMoPubRewardedPlayableCustomEvent.m in Sources */, - B056851FA68CB56894830D9BC276EFE9 /* MPMoPubRewardedVideoCustomEvent.m in Sources */, - 836442FB8F1743DC87123F53026A4CEC /* MPMRAIDBannerCustomEvent.m in Sources */, - 1E4AA6E0C6E39E9D53F0833B1DC38C4F /* MPMRAIDInterstitialCustomEvent.m in Sources */, - F0FADDC644AF1A248A0F323A8A90C3A6 /* MPMRAIDInterstitialViewController.m in Sources */, - 8A67AF5C0FAF6509FF13641CA0CAE43F /* MPNativeAd+Internal.m in Sources */, - 5FB886151AE357F85620397EFBB17CD4 /* MPNativeAd.m in Sources */, - 758E9DF37D8F12014A9EA49C68D15314 /* MPNativeAdConfigValues+Internal.m in Sources */, - DA9C082DDF1D5EB689022EE71AB9ECCB /* MPNativeAdConfigValues.m in Sources */, - A6311E9BB95FA1D4EC4A1B4A138CB148 /* MPNativeAdConstants.m in Sources */, - 463C8C5AEAD90DBB7CFA691992E0C3A7 /* MPNativeAdData.m in Sources */, - BFA0C793B683420C6AA9CFD5A3FC39C9 /* MPNativeAdError+VAST.m in Sources */, - E0C3B5628F503F7FDDBC1C2DF2E220B0 /* MPNativeAdError.m in Sources */, - 758F7E13ABE1E88DB17A2CC59E8A94B0 /* MPNativeAdRendererConfiguration.m in Sources */, - 217526BD3020E6283E8EA47BA8A617BF /* MPNativeAdRendererImageHandler.m in Sources */, - A1EE8BFCE4E0BA2ABAC20609B921ED8E /* MPNativeAdRenderingImageLoader.m in Sources */, - 3B350208CEDDD5F27F7B01284D0F897F /* MPNativeAdRequest.m in Sources */, - A856C9D0657505694C900C0576996E8A /* MPNativeAdRequestTargeting.m in Sources */, - 557512E6F1251F169EB00557722C1903 /* MPNativeAdSource.m in Sources */, - 39A3B011E1634626B9322F78CF13F511 /* MPNativeAdSourceQueue.m in Sources */, - C3D15BC3BEF28FAF849F346D22F06A66 /* MPNativeAdUtils.m in Sources */, - A7C322038322A67FB79FCEF6C8F14955 /* MPNativeCache.m in Sources */, - FB0C6FC26FEE56643C0555E39E483ABA /* MPNativeCustomEvent.m in Sources */, - 48CDE5FB051E8FBE6D1BEC34702F81FC /* MPNativePositionResponseDeserializer.m in Sources */, - BE7CC6821B756E937DF2C33C46049437 /* MPNativePositionSource.m in Sources */, - DE449A0AEC6D18055E52C2C5BBB83866 /* MPNativeView.m in Sources */, - 52C6E0C4D40C4DFB263B024EDE65E8EC /* MPProgressOverlayView.m in Sources */, - 489340AAC77117F86F980D68E5A3FFF3 /* MPRateLimitConfiguration.m in Sources */, - 795C791BD387D6E5AAE481C01CC376B6 /* MPRateLimitManager.m in Sources */, - 3CE7B1BFD4218B7505E83A3E5DC18B2C /* MPReachability.m in Sources */, - C5F71D5AD33BB5C1D31927FD903AACFF /* MPReachabilityManager.m in Sources */, - C0E38A2AB4F71DE2B885F2B02AF083FE /* MPRealTimeTimer.m in Sources */, - 9743EDC85861CF194FAD3794CB8E53ED /* MPRewardedVideo.m in Sources */, - 58474485773F225AE1DD2C314A22F05D /* MPRewardedVideoAdapter.m in Sources */, - 69561B4A1F5A4D3921D3E0A3C9595329 /* MPRewardedVideoAdManager.m in Sources */, - 56ADED00DA376496DF3BFF44AE10F738 /* MPRewardedVideoConnection.m in Sources */, - 507FBF8CE326BF48F2C92D69D19C59EB /* MPRewardedVideoCustomEvent.m in Sources */, - A442AF6D8E7E36F402A221FE9155BEA3 /* MPRewardedVideoError.m in Sources */, - 347841BFDF339E55FE8D6F380AFC554A /* MPRewardedVideoReward.m in Sources */, - 4D3AEFC7132B11D05784B40C6C4BFE76 /* MPServerAdPositioning.m in Sources */, - 28C76714EE0D01E3FB768B8531960B8A /* MPSessionTracker.m in Sources */, - E0618BAAC4312934079D76D304958BFA /* MPStaticNativeAdRenderer.m in Sources */, - 0A398D895C50B1B5A3198EF9D4C3B7E2 /* MPStaticNativeAdRendererSettings.m in Sources */, - F09F24FFFD77DE5B7839FB1AD5A4CCC6 /* MPStopwatch.m in Sources */, - A635560049C382A30474A5DA9B68AB8C /* MPStreamAdPlacementData.m in Sources */, - 4C43BF28D10D36560D0116FA559B13F0 /* MPStreamAdPlacer.m in Sources */, - E01957FA036E794D6E56A055E961C9F9 /* MPTableViewAdPlacer.m in Sources */, - BD180EDAF46C2876FED6F8F8B3E4CD30 /* MPTableViewAdPlacerCell.m in Sources */, - 0AEC50395BEEB8CE18851DBA93781A1A /* MPTimer.m in Sources */, - 11230D9A0418F0AAD89C82A4E1918E33 /* MPURL.m in Sources */, - E7B75D9C5047BD8054CD2CF04E57107C /* MPURLActionInfo.m in Sources */, - 351D59DB82EB2D05E8EA43E476301488 /* MPURLRequest.m in Sources */, - 082DC372356AC7F3DB0DACF7DE927B91 /* MPURLResolver.m in Sources */, - A4B4B55B71ADC4E75B01C42784D95C81 /* MPUserInteractionGestureRecognizer.m in Sources */, - 86CF5170EFAC0D24216689420D802FDD /* MPVASTAd.m in Sources */, - D57EAE995F379D767B49936DAEBFD87A /* MPVASTCompanionAd.m in Sources */, - B6AA4AD38A0A1BD91B7534A1C325D441 /* MPVASTCompanionAdView.m in Sources */, - 51108EAA328F11B7A5FB3616FD18C417 /* MPVASTConstant.m in Sources */, - AB828CAC986D239A59ABD050079B3AAE /* MPVASTCreative.m in Sources */, - 81426D6A03724115102662C9030DCC8E /* MPVASTDurationOffset.m in Sources */, - F67074A6426AE792ED262C23A7F6C174 /* MPVASTIndustryIcon.m in Sources */, - BB7B60B1F72F451A41A119DB8563C37C /* MPVASTIndustryIconView.m in Sources */, - D3D462957934A5ABA3EB19E793B840DE /* MPVASTInline.m in Sources */, - 4F756E7674C3BEFA6C085C7F3ABBE239 /* MPVASTInterstitialCustomEvent.m in Sources */, - D0FACCB353EDAAF98A0861B4B4CC2FC0 /* MPVASTLinearAd.m in Sources */, - 46270CA99BEC26BD1EC761AD08E5D78D /* MPVASTMacroProcessor.m in Sources */, - 779CF94BCD0FBBB4935206A4BA271CBF /* MPVASTManager.m in Sources */, - C112AABDD12E40D776C3B11EA6DE4939 /* MPVASTMediaFile.m in Sources */, - 76E5713A1850B8CE7D3D3BDBBA1B3EB4 /* MPVASTModel.m in Sources */, - E1E389C02E55A8D7227ABD4B335F3428 /* MPVASTResource.m in Sources */, - 93E601D15FC5809E091E87056D6E4D8B /* MPVASTResourceView.m in Sources */, - 4F941068D769F43C5FA4EA8B3E09E4A8 /* MPVASTResponse.m in Sources */, - FE999CE557BC942EC10E50CE6230B807 /* MPVASTStringUtilities.m in Sources */, - 9518D82AB4236204E54A588871FDCFB2 /* MPVASTTracking.m in Sources */, - 12FBF25FCC7F1505BCE6139F70A5C034 /* MPVASTTrackingEvent.m in Sources */, - E4A4779459FCBD4B09729066A0AD77A7 /* MPVASTWrapper.m in Sources */, - 00DC4BEA495F98FCD749993A1BF06F3B /* MPVideoConfig.m in Sources */, - 0B168048D631FB5833A05BF4B25F1754 /* MPVideoEvent.m in Sources */, - 57FE77F8B76814AD30C840BFF56FF512 /* MPVideoPlayerContainerView.m in Sources */, - BCA6DED2CB3CB59F6A62AAEFA530C3F1 /* MPVideoPlayerFullScreenVASTAdOverlay.m in Sources */, - 6195E1E1267810D8E6159EB1A3D50F4B /* MPVideoPlayerView.m in Sources */, - 3979EF4AB078EA92C00EEB6538B4E8DC /* MPVideoPlayerViewController.m in Sources */, - 9241D6FA724A64BAC8643992873D4C96 /* MPVideoPlayerViewOverlay.m in Sources */, - 8A6B95EA6984F5355C48A688483132F5 /* MPViewabilityAdapterAvid.m in Sources */, - CDDA20F58C7D11ED8B5EAFA849EF3589 /* MPViewabilityAdapterMoat.m in Sources */, - 87374F040A7E38765C3728E0ACCA358F /* MPViewabilityTracker.m in Sources */, - 5942354AA61C2412000E83B79EE7FC73 /* MPWebBrowserUserAgentInfo.m in Sources */, - D1B5C11BCA5E41A4FD4A9D351BA2A878 /* MPWebView+Viewability.m in Sources */, - 4B28E3EE71A73A1F18B3A64DDE955F09 /* MPWebView.m in Sources */, - EC56B039D94C5830322DFA9018E80E67 /* MPXMLParser.m in Sources */, - 30B5F17811DB2BA280C6D92233F8DAF9 /* MRBridge.m in Sources */, - DDEAD77343E6224EEB574FB6E999632C /* MRBundleManager.m in Sources */, - 53C3392AAF7640FA8292CEE6C3FA9457 /* MRCommand.m in Sources */, - 2493234B247BC18D7E071A2588093AF2 /* MRConstants.m in Sources */, - 00CA5A7952428E7B681D8D8EA4B15147 /* MRController.m in Sources */, - EC79632B21CBB2567E7AB3196F049C68 /* MRError.m in Sources */, - 5CDD0EEC01EADAF510A5D43826E74E88 /* MRExpandModalViewController.m in Sources */, - 41D45479479EFDF4AC72ADF4C28A267D /* MRNativeCommandHandler.m in Sources */, - 8032908D5A1979E6A5C0C82E3FEDD212 /* MRProperty.m in Sources */, - 9138565E1EEB77F3F263E035513BE5FC /* MRVideoPlayerManager.m in Sources */, - C9A74F8683FDE7056600B9EC17EDBE07 /* NSBundle+MPAdditions.m in Sources */, - 03B341CD6A6F1D2D4BE8A49BF883DC9B /* NSDate+MPAdditions.m in Sources */, - 851B117D7488525F15CB7F714AECE722 /* NSDictionary+MPAdditions.m in Sources */, - 6552FC57EB470FE855CC0AA33B4F6097 /* NSError+MPAdditions.m in Sources */, - 0F968E43EC26FDDE4B5033A11ED7BD51 /* NSHTTPURLResponse+MPAdditions.m in Sources */, - 23F1B065B182DE73EE7C3F2B895481C5 /* NSJSONSerialization+MPAdditions.m in Sources */, - 827FB62D0A85F823898398B49AF8FA78 /* NSMutableArray+MPAdditions.m in Sources */, - D95F6F9EC7F669D9635D848D8783E22F /* NSString+MPAdditions.m in Sources */, - 4D1DF833128823B52778058AD15DC879 /* NSString+MPConsentStatus.m in Sources */, - D75E8C7C87742A002A8897A664DD4F45 /* NSURL+MPAdditions.m in Sources */, - 3D0623D12A81F24BA9BDE41A54A6C2DF /* SKStoreProductViewController+MPAdditions.m in Sources */, - 57EA323E965F284A91847A184574BA49 /* UIButton+MPAdditions.m in Sources */, - C6A725A5F8F76F74EE523E6AA5B0BC0D /* UIColor+MPAdditions.m in Sources */, - B0B6C22C0E40FD9370866E2D1B19D9E4 /* UIView+MPAdditions.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 279FCB64699875BCA3A6E675EDFE6F62 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 98137C37B3860A9A7A32B51F9D1C93BF /* crashlytics.nanopb.c in Sources */, - 6A8098082AE33CA628B00C423A7C2694 /* FIRAEvent+Internal.m in Sources */, - CD62F7461AA92699AF6A3531479D957E /* FIRCLSAllocate.c in Sources */, - 04C7B32B83982E2BDF5AAAAB02625FC8 /* FIRCLSApplication.m in Sources */, - 8E1679169966C22869578CCCBF96EF42 /* FIRCLSApplicationIdentifierModel.m in Sources */, - 61E7DF5A6FDE3A90B2DE147016DC7220 /* FIRCLSAsyncOperation.m in Sources */, - 7E05E44EF5E08B4E7DAE972309DEAA6E /* FIRCLSBinaryImage.m in Sources */, - 961FE546AB9FD363622325ADE45D6F99 /* FIRCLSByteUtility.m in Sources */, - E72C48A2FA1F59ED02349D6BD819F42E /* FIRCLSCodeMapping.m in Sources */, - 83FD06F80C8DB07B46C2B29818B821FB /* FIRCLSCompactUnwind.c in Sources */, - CC3034AFA08B9AF54A5A71CC220E6605 /* FIRCLSCompoundOperation.m in Sources */, - 46722B678C5E8D768CD47751B5FC9C47 /* FIRCLSConstants.m in Sources */, - 8B7ADF547FC4ACE10FDFE39D0C3CDAF6 /* FIRCLSContext.m in Sources */, - 0A17FFBA8F4012801C2F1A8CD7A0F4D8 /* FIRCLSCrashedMarkerFile.c in Sources */, - C950851E3F33634EF798AC563B445BB8 /* FIRCLSDataCollectionArbiter.m in Sources */, - 895ABA980BE55108FC977DA39F5F9AC7 /* FIRCLSDataCollectionToken.m in Sources */, - C0F8520AE121E516C9A85DA3B36D5169 /* FIRCLSDataParsing.c in Sources */, - E05157C9BF521FBB734915B35ECF2803 /* FIRCLSDemangleOperation.mm in Sources */, - D88B1BAAE41C6E6EB1E3C6A3702B1109 /* FIRCLSDownloadAndSaveSettingsOperation.m in Sources */, - B93B6572393D60C4D642F0EB97A6212D /* FIRCLSdSYM.m in Sources */, - 6AA270DECF8DEF69F5A35D4C2FC66A8A /* FIRCLSDwarfExpressionMachine.c in Sources */, - 923D9C25E57A10A08FB60C14C0DC5A1F /* FIRCLSDwarfUnwind.c in Sources */, - 05CFDF74857A78A5FCDC9F7ECD50C7A2 /* FIRCLSException.mm in Sources */, - 116C2AF8431A116E2A7FBF9522C5B226 /* FIRCLSExecutionIdentifierModel.m in Sources */, - 1C0898AA4088D962C26940D064EABC82 /* FIRCLSFABAsyncOperation.m in Sources */, - AC11E4A627F9AD4B76C396431FA67DB6 /* FIRCLSFABHost.m in Sources */, - 7D2E04178CB603C3AFFC9BA7EE1388F1 /* FIRCLSFABNetworkClient.m in Sources */, - 64AD6216060AFC03118684FE8D069B1A /* FIRCLSFCRAnalytics.m in Sources */, - 4A80BA82036D206D5DC8B298273365CF /* FIRCLSFile.m in Sources */, - 1F4DC631D6664A5D92224D3ECCA84F15 /* FIRCLSFileManager.m in Sources */, - BC04B1F6D658246A40EB33DB5BDFCF6B /* FIRCLSHandler.m in Sources */, - D3D978E6CFBC68F7AB1E68AFB37911F4 /* FIRCLSHost.m in Sources */, - EBC4602EE74BA654C4A9CA619387E5CF /* FIRCLSInstallIdentifierModel.m in Sources */, - 4B4B9B6EE3146C14A85D325AB18F63BE /* FIRCLSInternalLogging.c in Sources */, - 62D75F2CAFB529E4F4522509FAC40A51 /* FIRCLSInternalReport.m in Sources */, - 6ECABA34606420810EB7C44894D56857 /* FIRCLSLogger.m in Sources */, - 75743FC7F16A92F10B9B2102D3064554 /* FIRCLSMachException.c in Sources */, - 73DFEAFE83A9F9D7373E04C7EA5FA0F2 /* FIRCLSMachO.m in Sources */, - E050DC68F118BB1A2A9375C274E6937F /* FIRCLSMachOBinary.m in Sources */, - BF4E5A07271C2A2F1F796A4B21E30502 /* FIRCLSMachOSlice.m in Sources */, - 82DDAF6EA18ADD7873D0159A7F1B6249 /* FIRCLSMultipartMimeStreamEncoder.m in Sources */, - 95AA2F0142473CC4162A9C9C2067F2CC /* FIRCLSNetworkClient.m in Sources */, - F0B18D575EAF400AAFBC2FE2148F0CDE /* FIRCLSNetworkOperation.m in Sources */, - FEFCE2071905AF897B4D872243489401 /* FIRCLSNetworkResponseHandler.m in Sources */, - 08AD0E3CFAAD294AEBF79502AC5CCDE7 /* FIRCLSOnboardingOperation.m in Sources */, - E2DDCB02B67287471B099555591F8F3E /* FIRCLSPackageReportOperation.m in Sources */, - A38DC5053AAF09DC387DE8DCF6C521BE /* FIRCLSProcess.c in Sources */, - 90B6521BD99C26E5912F38D6E83E0D91 /* FIRCLSProcessReportOperation.m in Sources */, - F10E2CE324B413E090A102B56EA002ED /* FIRCLSProfiling.c in Sources */, - 80C6AE0D71B7F73C71D88EF24930DDE1 /* FIRCLSRecordApplication.m in Sources */, - 39FE203A2D9408AFA2CA006AD6A9309B /* FIRCLSRecordBase.m in Sources */, - 64724F4666669A6DC33713CEEC3D3A29 /* FIRCLSRecordHost.m in Sources */, - E19EF2348D04CCD16F02B0796CB31DF2 /* FIRCLSRecordIdentity.m in Sources */, - 5C700E7BB4A5CD846F52F3887B7A7BD3 /* FIRCLSReport.m in Sources */, - 50CED11F19ACA388FC641281532D51C8 /* FIRCLSReportAdapter.m in Sources */, - 72694B79C3100537BE447B12C9A2A614 /* FIRCLSReportManager.m in Sources */, - 653F8A1FE32DC5353FC8EC35A7EB4731 /* FIRCLSReportUploader.m in Sources */, - 7BF8560F482BD93B88E27C60812A4AAE /* FIRCLSSerializeSymbolicatedFramesOperation.m in Sources */, - 15B59ED5A50CD168E7FF464B620519DF /* FIRCLSSettings.m in Sources */, - 239D976860F53954C4C0A2FA41D1DC79 /* FIRCLSSettingsOnboardingManager.m in Sources */, - D72E3116E751EFDA887B9F96AC424642 /* FIRCLSSignal.c in Sources */, - 5364E7E5814CA27DD5326480ADB3FA54 /* FIRCLSSymbolicationOperation.m in Sources */, - EED38C6D7BAEA9C452117D4168F415BE /* FIRCLSSymbolResolver.m in Sources */, - 92F63FC36D4CEB41B172FF4DAA3337B3 /* FIRCLSThreadArrayOperation.m in Sources */, - FD012BECDA9F040447BA7EC04869A348 /* FIRCLSThreadState.c in Sources */, - 9ECFD2EA62EF1199589A8D261739D4A9 /* FIRCLSUnwind.c in Sources */, - 37F594E59F59E54775F0256D366AB6C7 /* FIRCLSUnwind_arm.c in Sources */, - 6468289903F4D235754F7D15812DBE49 /* FIRCLSUnwind_x86.c in Sources */, - 5A0F315FBA909920F082A6D9992B1226 /* FIRCLSURLBuilder.m in Sources */, - BB60870E4DC9505A62E4BF4628294C63 /* FIRCLSURLSession.m in Sources */, - 61EDD907BD3C04EC1164F45E1058789F /* FIRCLSURLSessionConfiguration.m in Sources */, - 3ABDF9E9541951FAC71A64D95D2761C6 /* FIRCLSURLSessionDataTask.m in Sources */, - 37CA8AFE4A64C7AC73C81CBB6DC99B2A /* FIRCLSURLSessionDownloadTask.m in Sources */, - DB1D86340BD57354C0D95DBC235F7CE7 /* FIRCLSURLSessionTask.m in Sources */, - 9C4BBCEAF8D3D1D2F54A625C08A742CA /* FIRCLSURLSessionUploadTask.m in Sources */, - CB461C37D3D6DD4B3499DABCBC64EE9D /* FIRCLSUserDefaults.m in Sources */, - 8B255F70EDC8AC9F1FBE5B86005647AA /* FIRCLSUserLogging.m in Sources */, - C96572D70A9385094FDE1DDC74272E4F /* FIRCLSUtility.m in Sources */, - 7E995A582A65F47BF9E259D962C7EB13 /* FIRCLSUUID.m in Sources */, - BC015EF9D4D69A4C3B6A12AE5B069BA7 /* FIRCrashlytics.m in Sources */, - A6CED9B56633EFBBD7A9EEA14640D3AE /* FirebaseCrashlytics-dummy.m in Sources */, - B9987FFAE0DE39279B705AD89B3CE4D0 /* FIRExceptionModel.m in Sources */, - 28E42B12C4F82BCE5D503C39C0AD55B2 /* FIRStackFrame.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 423CDEBF315EFD04A195072939A50F7B /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - D33EF6F5A6474A3006C742DA00AACCBB /* Flurry-iOS-SDK-dummy.m in Sources */, - FC781BFC452CF1C98513B505854DF23B /* FlurryEmpty.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 4EDAA99AE1C045ECCCB0E2E6A3116573 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 8654387B2349179E108534159FEF6747 /* cct.nanopb.c in Sources */, - 161A03114DF78691114070803CBC4E75 /* GDTCCTCompressionHelper.m in Sources */, - 6591110BBFC472759E589A44F409C7EE /* GDTCCTNanopbHelpers.m in Sources */, - F69927184ADBBA9EA3223D5186211308 /* GDTCCTPrioritizer.m in Sources */, - FF2163B30F4F35645B7FE4DAEAA64DCA /* GDTCCTUploader.m in Sources */, - B48C66154561F496F9958F34FCCB75A7 /* GDTCOREvent+GDTCCTSupport.m in Sources */, - 6A7E3B7592239E8561EB2BB86D0DF367 /* GoogleDataTransportCCTSupport-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 561A310D5167368C48511E611016259C /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 8C36DC6A0CAF87670A6419AF2D6FA79D /* _FBSDKTemporaryErrorRecoveryAttempter.m in Sources */, - F19479B9593D3ED564CDADF473F93938 /* FBSDKAccessToken.m in Sources */, - F5A48EA38A66E84D1D6779AEDB5401BD /* FBSDKAccessTokenCache.m in Sources */, - 8B2BE364252A96ABF6DF7D043A1275B3 /* FBSDKAccessTokenExpirer.m in Sources */, - 35E259F44C8F402E86B25C6B1CDE069C /* FBSDKAddressFilterManager.m in Sources */, - 76781A49BD18D6873883C7F0E93FCD4B /* FBSDKAddressInferencer.mm in Sources */, - 2C2C9005A0DD26EDE90163BFBD37C7D0 /* FBSDKAppEvents.m in Sources */, - 0DB0696892FC586A9F733B0E9987FE1F /* FBSDKAppEventsDeviceInfo.m in Sources */, - 4DFB107BB83DBDDA9A27E0ADE1503209 /* FBSDKAppEventsState.m in Sources */, - 2B776D699C09FE415E9B12C8B2AA3DD1 /* FBSDKAppEventsStateManager.m in Sources */, - 772172475F877A93480610CCF7F114DB /* FBSDKAppEventsUtility.m in Sources */, - 8F9BAA65C0A197222B22CE56577A7FAB /* FBSDKApplicationDelegate.m in Sources */, - 1E22C3C52D0B2429557640BA41AC2B51 /* FBSDKAppLink.m in Sources */, - CC3CA4C4AE46B5D6A60036EA8B72120D /* FBSDKAppLinkNavigation.m in Sources */, - D44311DA5836E856294C097BD317DB31 /* FBSDKAppLinkResolver.m in Sources */, - 975EE629438A0D4FD12E6EAF1A77E87F /* FBSDKAppLinkReturnToRefererController.m in Sources */, - BEA1BC7E39640B5EFEF3E3F3A7304809 /* FBSDKAppLinkReturnToRefererView.m in Sources */, - 9D668CD055CC9423B769EB05149591B8 /* FBSDKAppLinkTarget.m in Sources */, - 63A46DD6064B9215937ACD45FE0C7312 /* FBSDKAppLinkUtility.m in Sources */, - FD8E9ED4496186B98EF18A5D00D9D659 /* FBSDKAudioResourceLoader.m in Sources */, - 66F18808294602218109BCA88795D66C /* FBSDKBase64.m in Sources */, - DAEAD09BDE308F790790B17640D87259 /* FBSDKBasicUtility.m in Sources */, - 9DE178EC28B9DEFA691079BB9679E55E /* FBSDKBridgeAPI.m in Sources */, - BE043C544093129B3D332E22B013326C /* FBSDKBridgeAPIProtocolNativeV1.m in Sources */, - 3DE0460C0E25532A278543619A1DEADB /* FBSDKBridgeAPIProtocolWebV1.m in Sources */, - FEAC2B737D5D53E08CF6FA290DB93198 /* FBSDKBridgeAPIProtocolWebV2.m in Sources */, - 8846AA8EA8B8FD4BF8715C5A537C8FBD /* FBSDKBridgeAPIRequest.m in Sources */, - 2514DAD863B06F7E3F46877AC00EDDA1 /* FBSDKBridgeAPIResponse.m in Sources */, - 16BB2A0D00A6FE12A37A08E361B5CCD7 /* FBSDKButton.m in Sources */, - 3FA63A2A89BBEABD2E63B719F71E7801 /* FBSDKCloseIcon.m in Sources */, - 9C4A3DA1CBB2C57928EA8E3F29689006 /* FBSDKCodelessIndexer.m in Sources */, - AB8C88D3240B018A49B8EFA21D82914A /* FBSDKCodelessParameterComponent.m in Sources */, - 6C2765CE74AD476666EF4FFA92BAC50D /* FBSDKCodelessPathComponent.m in Sources */, - AFD22090F5A62987258202AF974882B0 /* FBSDKColor.m in Sources */, - 1133E37BB019C9F922838F6A6395279A /* FBSDKConstants.m in Sources */, - 96244699275375B6D15327552489DEA7 /* FBSDKContainerViewController.m in Sources */, - 225CC06789A62B435F9E611CA2CE15F5 /* FBSDKCoreKit-dummy.m in Sources */, - 2BD404FFD392D8CBB9664684E69844AB /* FBSDKCrashHandler.m in Sources */, - 74F9D7AA4B2E780653FED31639875253 /* FBSDKCrashObserver.m in Sources */, - F6F05DFBF4DCADFAEA81419A2DD2F2AC /* FBSDKCrashShield.m in Sources */, - EB0180BF39FBBE593B03DC684BB81A90 /* FBSDKCrypto.m in Sources */, - 467311F71BDD0B57128B576D5966A6AA /* FBSDKDeviceButton.m in Sources */, - 77565625E0B9461B685A6F14A00F4513 /* FBSDKDeviceDialogView.m in Sources */, - 7B2F956C340258B7E125DAFFF13990D7 /* FBSDKDeviceRequestsHelper.m in Sources */, - CD7B018DE84042FA6A700D30E064D578 /* FBSDKDeviceUtilities.m in Sources */, - 768B8580FC7B3E324DFB0500FAE9BAE1 /* FBSDKDeviceViewControllerBase.m in Sources */, - 67BB18286F92EF3BC35FD3210B0A809C /* FBSDKDialogConfiguration.m in Sources */, - AD4278DC279247A02719E34504A77055 /* FBSDKDynamicFrameworkLoader.m in Sources */, - 232EC64918937365784F7FACC0905F8E /* FBSDKError.m in Sources */, - FA378690414BA8DBCF782F20CF15D2CB /* FBSDKErrorConfiguration.m in Sources */, - 49D88851330EF0D2114B778B8436DA88 /* FBSDKErrorRecoveryAttempter.m in Sources */, - 38D541C6EF9CA5FA90DD30846DA65C71 /* FBSDKErrorRecoveryConfiguration.m in Sources */, - B18F42E81204D80FD1BD14DD11B5BF7A /* FBSDKErrorReport.m in Sources */, - D23E48B183D3207BB1E6E6F014B034CD /* FBSDKEventBinding.m in Sources */, - 9CF316FAAEDF6696445CD05273F924DC /* FBSDKEventBindingManager.m in Sources */, - D98F5E2ACE757387596E9D46ED2A581A /* FBSDKEventDeactivationManager.m in Sources */, - EBD79E091CC2EFFCA87E02D93DC6BCE5 /* FBSDKEventInferencer.mm in Sources */, - 7DA69E75B05EFE1598934F1AE736F1E3 /* FBSDKFeatureExtractor.m in Sources */, - 704AF2F8052A14EDB49F1442972FC146 /* FBSDKFeatureManager.m in Sources */, - 770A4EB8F37D9FB5BB29FAC4F26CDA90 /* FBSDKGateKeeperManager.m in Sources */, - 9CFD0AB5C108C0515D3C09183F613E57 /* FBSDKGraphErrorRecoveryProcessor.m in Sources */, - FE69F4219B75E3EC9DE03D8CEFF76C0A /* FBSDKGraphRequest.m in Sources */, - 39AF6B52D487F5EAAD424A42BA73C70C /* FBSDKGraphRequestBody.m in Sources */, - 7DC1A3B687434B548ED05D03E12C5A99 /* FBSDKGraphRequestConnection.m in Sources */, - B7ACD43333CF5FCABB359B756546F44D /* FBSDKGraphRequestDataAttachment.m in Sources */, - A06BB8F02BD517032C31028A1BA3CF14 /* FBSDKGraphRequestMetadata.m in Sources */, - 65C216C17BD5C795B37D22AEACA67C0E /* FBSDKGraphRequestPiggybackManager.m in Sources */, - DC7B237C7D51FC70F3E8592C082045A6 /* FBSDKHybridAppEventsScriptMessageHandler.m in Sources */, - F8098577205BA404DC0660D5030F17E0 /* FBSDKIcon.m in Sources */, - 12002EFFA144B3617303D4F923536549 /* FBSDKImageDownloader.m in Sources */, - 5996C8F42BE9D088A8C1AA830E9E58CC /* FBSDKInstrumentManager.m in Sources */, - 5448F617E26E899BC4ACE2F01981021A /* FBSDKInternalUtility.m in Sources */, - 0A65B519AD71C7EEB23B4C1326AA6D6C /* FBSDKKeychainStore.m in Sources */, - D8D0C340350BEDE1C5B2CADBE19E417D /* FBSDKKeychainStoreViaBundleID.m in Sources */, - DB8FE764B9B80632A587EEA8F852A7C3 /* FBSDKLibAnalyzer.m in Sources */, - 244C7B52882A57417DCAD10250E777C5 /* FBSDKLogger.m in Sources */, - 619AEC318C6D1C3F97391855F5707EB6 /* FBSDKLogo.m in Sources */, - 339BD784850CFFE6D91C5FEC641B5389 /* FBSDKMaleSilhouetteIcon.m in Sources */, - 745E74323EFDC6C44F144581F2FC5F60 /* FBSDKMath.m in Sources */, - 77D1D5958B72556CA537EE050D7B06D3 /* FBSDKMeasurementEvent.m in Sources */, - B2F75843DA927EA114D9F6F00C4C21A8 /* FBSDKMeasurementEventListener.m in Sources */, - 9AE7CD06FCB017138D9E65097F454596 /* FBSDKMetadataIndexer.m in Sources */, - A63DEC61D88647A54F4DC231BEE68E37 /* FBSDKModalFormPresentationController.m in Sources */, - D7B6E43E8AFCD194A510F8128362AAE7 /* FBSDKModelManager.m in Sources */, - 2C9A6D00CA73FB7AE587C2188A63ED69 /* FBSDKModelUtility.m in Sources */, - D6CD2FA2FCA23ABAF0A06C7A8AA0CB1A /* FBSDKMonotonicTime.m in Sources */, - 7EBF030079CCE544890509ADD48C1656 /* FBSDKPaymentObserver.m in Sources */, - B3FF2BB02E2B32D7181C2CBBBA384D5A /* FBSDKProfile.m in Sources */, - A68FB662A147CB1B7E8F414B9809892F /* FBSDKProfilePictureView.m in Sources */, - 83C0BB9C1BA9928AE03DB63496094930 /* FBSDKRestrictiveDataFilterManager.m in Sources */, - 1D76726C258F67AEFC1477DADEDC9D0D /* FBSDKServerConfiguration.m in Sources */, - 58BAF638757DA8E0FD2A74CA28844319 /* FBSDKServerConfigurationManager.m in Sources */, - FFA5E45EA4ADB1710EC65AF248C13881 /* FBSDKSettings.m in Sources */, - 69A7E3AD494AEFA301D236F678A7D3E4 /* FBSDKSmartDeviceDialogView.m in Sources */, - 932CAC7EF609E2E176D80C09918B96B1 /* FBSDKSuggestedEventsIndexer.m in Sources */, - 0F4752D1B3614E3F88AF51A6C8A9E1ED /* FBSDKSwizzler.m in Sources */, - E56A3E7FEA5A9C3F6D395874321B735C /* FBSDKTestUsersManager.m in Sources */, - 15578F7B4A1A4945698B31EAC595407A /* FBSDKTimeSpentData.m in Sources */, - 46A6226FB203D0ECCC88515BFC357144 /* FBSDKTriStateBOOL.m in Sources */, - 739CD00D382B3DB204C21A50061BB0FC /* FBSDKTypeUtility.m in Sources */, - A6A03F54152D344C7C65DDCAB7EEB1BC /* FBSDKURL.m in Sources */, - 2807EB640023CDD68D5DE56B374FD19E /* FBSDKURLSession.m in Sources */, - BB600F1A464E10FD3C6BC82FD4107434 /* FBSDKURLSessionTask.m in Sources */, - B96B1D5D59BE19D38C871127E5793FF1 /* FBSDKUserDataStore.m in Sources */, - 2AA8B0D394D039848BA27D210928A3CF /* FBSDKUtility.m in Sources */, - 7DBB4283291E92DCA68DC802752298A0 /* FBSDKViewHierarchy.m in Sources */, - 70CEA4D8FCCC8748E5313DFC3AB80033 /* FBSDKViewImpressionTracker.m in Sources */, - 0408D6FD2312BE856DC49B973F2D5732 /* FBSDKWebDialog.m in Sources */, - 4585274D96BAE979434BC16EE67BF15E /* FBSDKWebDialogView.m in Sources */, - C78B9F96B78AB8B05B4D996235749BD9 /* FBSDKWebViewAppLinkResolver.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 6BF16FBE34F4D8B09099DBFB25EC223E /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 920E0808E31354355465CD808B4E085D /* FIRAnalyticsConfiguration.m in Sources */, - EE28DCC4B1F1BA50A76D5B2CF081CC33 /* FIRApp.m in Sources */, - 06CACE1F17D164165857B85771D94ABB /* FIRAppAssociationRegistration.m in Sources */, - 669932B33FF85B028B9F2DEC1CE48788 /* FIRBundleUtil.m in Sources */, - 25E9EF6B0BFB3463F3F9493FA59BCD94 /* FIRComponent.m in Sources */, - 77D9DFECD376F8608F6E5E4BA7E82A51 /* FIRComponentContainer.m in Sources */, - BEA5A75A2FCD15D8E6BEEE6F9D4CCD5A /* FIRComponentType.m in Sources */, - AFF3C74204577C3C3726188C0FDB795B /* FIRConfiguration.m in Sources */, - 5C45ED3F2C343D3C75283FA3F08F49F6 /* FIRCoreDiagnosticsConnector.m in Sources */, - 57555104BDCA33FD34B042FC4E8930BE /* FIRDependency.m in Sources */, - 4252E18642A4512BB73865A9DE40E0B7 /* FIRDiagnosticsData.m in Sources */, - E55A95C87E4C1CAED43D459D7B07789C /* FirebaseCore-dummy.m in Sources */, - B72B4F6F1CC8C9E66147104E7572B194 /* FIRErrors.m in Sources */, - 7858439C2AAD2B96795D64B5D4232C46 /* FIRHeartbeatInfo.m in Sources */, - 8EAB7B27DD6C5A25D69857AD368716F3 /* FIRLogger.m in Sources */, - 71FD6878A01E0FF4F17405F683A4B33D /* FIROptions.m in Sources */, - 7D6C31A22160BD753F56B01FD6E5C63C /* FIRVersion.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 911B7659FF10A26A728604C6E0CAA769 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 8F4FCF1DA7EB990D27C0613C7C5DD97E /* FacebookAdapterConfiguration.m in Sources */, - 8CBC1CE8D723559AE87097E4837F82F5 /* FacebookBannerCustomEvent.m in Sources */, - DCA49FD15085E4E66CCD6ED29C86E17A /* FacebookInterstitialCustomEvent.m in Sources */, - B3D35783D2FCD6170A7C9B8A7296BA2C /* FacebookNativeAdAdapter.m in Sources */, - 8CA53DC4E904722FDBA4B3C87200AA15 /* FacebookNativeAdRenderer.m in Sources */, - BF18D0E1989CA160ECC324AF463590E8 /* FacebookNativeCustomEvent.m in Sources */, - E9FB5B532E41E0F96340DB2111B09DA6 /* FacebookRewardedVideoCustomEvent.m in Sources */, - B507C76B6D8D94B3B2B5EE9C95F0C2BD /* MoPub-FacebookAudienceNetwork-Adapters-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 98CB9DDC1782D7D36AB2113B5F2484EA /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 78A928121EAF60C2561F74610A97D7A8 /* Pods-MAPS.ME-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - A7F8A47CBF5254286BA4DFD235968B17 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 714F8559DA8A5C72512DEA719D7B7D53 /* FirebaseInstallations-dummy.m in Sources */, - 5A21F9FC060DA320A34BB60C11306B94 /* FIRInstallations.m in Sources */, - B97ABBF606D9B8950EC010D4A1AA1A05 /* FIRInstallationsAPIService.m in Sources */, - 2E95FE8AB88517AB0DD758F020EE784D /* FIRInstallationsAuthTokenResult.m in Sources */, - 0830DED0F656D7E5F6A5747ADA345DB2 /* FIRInstallationsErrorUtil.m in Sources */, - 69C577B10BC0BB88EA374A939EE93E1B /* FIRInstallationsHTTPError.m in Sources */, - 3451C9E1CDCBF87C779593FF56234836 /* FIRInstallationsIDController.m in Sources */, - 7741E7FD670D651ACB5B85537F277B49 /* FIRInstallationsIIDStore.m in Sources */, - 84E10CCE343A6C2B7089239E014C31E7 /* FIRInstallationsIIDTokenStore.m in Sources */, - F68020EB780172DFFDA7AC05ED264B58 /* FIRInstallationsItem+RegisterInstallationAPI.m in Sources */, - D6E931BFB42873269BD7A761019270FF /* FIRInstallationsItem.m in Sources */, - 4705C1A3813C1E249AF3746E74F8E4B2 /* FIRInstallationsLogger.m in Sources */, - EC0FA058FE62435BB2517F9A8C52351B /* FIRInstallationsSingleOperationPromiseCache.m in Sources */, - 30700A00569086128C5C889A65F20B34 /* FIRInstallationsStore.m in Sources */, - 7558921767A2B717C226C3539EAFE209 /* FIRInstallationsStoredAuthToken.m in Sources */, - C64FBD8E2893ED65736E026FD243A7D0 /* FIRInstallationsStoredItem.m in Sources */, - AC34336AD17D5EE06592D3C086971352 /* FIRInstallationsVersion.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - CF920831D9458CC223BD6B4C50E20E88 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - E9402CFF6FD764C72C25A125B2196A96 /* FIRCoreDiagnostics.m in Sources */, - FE6C192F83012653A805848EA57027AF /* firebasecore.nanopb.c in Sources */, - DD34F6FF4A7119255BDDDF915D2C7BAF /* FirebaseCoreDiagnostics-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D4F43D428E6B413FBABEE342C01141EA /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - C479C2C1070FBC1C341B5A3BC26FD88F /* nanopb-dummy.m in Sources */, - CDF60D2824F304FA8B8C602072EAE56C /* pb_common.c in Sources */, - 7DA99EE6BC107B90F5A32EE7D253453F /* pb_decode.c in Sources */, - 863D25D03F04E5F3AD030F1C4DF9B735 /* pb_encode.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DBA8681A8E73448AFA4D8F8B488647C1 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - C5361D9F5EB1CD0DD2288BADA41B08C9 /* _FBSDKLoginRecoveryAttempter.m in Sources */, - BBDF9CDD0AA2805D79D6722902D70A46 /* FBSDKDeviceLoginCodeInfo.m in Sources */, - 8F1AF8C0BEBFC11520A243262F755ABF /* FBSDKDeviceLoginManager.m in Sources */, - 32EC7A1A5A27128E47B1B3C08E20687B /* FBSDKDeviceLoginManagerResult.m in Sources */, - 41C62032D172E997D178BDC5CBC9236D /* FBSDKLoginButton.m in Sources */, - 998C135CDAA3BB0DCD1ED88C83ACCC20 /* FBSDKLoginCompletion.m in Sources */, - 84F8C88DD4E2ED263038E52CDB9DD938 /* FBSDKLoginConstants.m in Sources */, - 8AE0FBEF9845D711F0AB63BEB3E53E2D /* FBSDKLoginError.m in Sources */, - 56AF0E80A30E49DF4A9F248CEE9036A5 /* FBSDKLoginKit-dummy.m in Sources */, - 80B79D1CAC653DCA8E459D4704E27808 /* FBSDKLoginManager.m in Sources */, - 8D09160B1513FC39001B07AA65DD747C /* FBSDKLoginManagerLogger.m in Sources */, - 9E07E42E10880D634CDEF2ECB983F4B9 /* FBSDKLoginManagerLoginResult.m in Sources */, - 4711266518B83DFC51BF44C4D366ECAD /* FBSDKLoginTooltipView.m in Sources */, - 8BE7F37D566430939E0E3516341F032A /* FBSDKLoginUtility.m in Sources */, - 53B9A123C0A077C75DB2FC899048A029 /* FBSDKTooltipView.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - F6BA1B0C34853A0D85CC55683AF90BCE /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 9D065EF907813FF600B796FC206A5A66 /* GDTCORAssert.m in Sources */, - 7D07E768A50331E30F186BA0B9FAB98D /* GDTCORClock.m in Sources */, - 741DBB9F69177C7578D3AE149C7E1574 /* GDTCORConsoleLogger.m in Sources */, - CEF8C0BA07ABE7E71A3EB340D6E6D3AF /* GDTCORDataFuture.m in Sources */, - 1053DDFF2C348717A7651C1B876FE5FB /* GDTCOREvent.m in Sources */, - EC6E97910F8EA279C1663772773B70DE /* GDTCORFlatFileStorage.m in Sources */, - AE0F9D7A7D965C88F7C6F45C45BFD5C8 /* GDTCORLifecycle.m in Sources */, - 3DE43978E7FDDC160B758A9B90B5563D /* GDTCORPlatform.m in Sources */, - 857BE047CE045AA29BE17530A6C16254 /* GDTCORReachability.m in Sources */, - A8DB9824EABB0031FFD34C784BF3CE11 /* GDTCORRegistrar.m in Sources */, - 2406CFE92CE399698FF00BA60E39D69A /* GDTCORTransformer.m in Sources */, - B561CA0E43DB6009C98DEE54A620B138 /* GDTCORTransport.m in Sources */, - 10D72CEFD0608B279975A2568D52C7E0 /* GDTCORUploadCoordinator.m in Sources */, - 7B59E01CE52E6396DA3CF6BE496CC4F2 /* GDTCORUploadPackage.m in Sources */, - 2671EC45A26402A738C612584C922D6B /* GoogleDataTransport-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FE88A8B01837278D3FA8A083B58EA281 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - EC6F5935EA38D8A891BE295E7AB86777 /* GoogleUtilities-dummy.m in Sources */, - 90CEE0DC7065FCF4531962997BB9A5FE /* GULAppDelegateSwizzler.m in Sources */, - 1568E8A1953C36B63EB9AC1E50771DAD /* GULAppEnvironmentUtil.m in Sources */, - EBEF26D35F2A3BB95C7DF79065CF5192 /* GULHeartbeatDateStorage.m in Sources */, - DBEC0F404AC892346B76285DF2E6CC34 /* GULKeychainStorage.m in Sources */, - 30D8DAC3545028496DC66659C5431BB1 /* GULKeychainUtils.m in Sources */, - D00B2DDE796A4D3EAD7C779D9F1E24C2 /* GULLogger.m in Sources */, - 6828B6B292C86A72E8A29D93F4401B34 /* GULMutableDictionary.m in Sources */, - E352032E57FD449CA5E43AFE78402BCE /* GULNetwork.m in Sources */, - 5E68D81680AC450E47C83251C4AAF7F4 /* GULNetworkConstants.m in Sources */, - 1185056851991054DC0C2915652B7F0A /* GULNetworkURLSession.m in Sources */, - 94E6A680F6FE45BA450F3B7B808BFD36 /* GULNSData+zlib.m in Sources */, - 460811328DC3AF9839EC435E06460114 /* GULReachabilityChecker.m in Sources */, - AE5EA2D4D0C9A524AF9FC7B6DA52FF4D /* GULSceneDelegateSwizzler.m in Sources */, - DE7A6D20D20464ADC9519D56AFD74547 /* GULSecureCoding.m in Sources */, - 69FB909E83BC8214DE072190BBCE4D79 /* GULSwizzler.m in Sources */, - 3EBA8C06DCA758DF4F05EB4AA06310AA /* GULUserDefaults.m in Sources */, + FA200221239880CD7A192ED0F1180B4D /* Pods-MAPS.ME-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ -/* Begin PBXTargetDependency section */ - 00CD3353F1CCC85F6440EB3CCACE84A6 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = FirebaseCrashlytics; - target = 526C4398D095B3704EB933DADBC30093 /* FirebaseCrashlytics */; - targetProxy = F0DA23923A1B5AA24755CE52F8512A53 /* PBXContainerItemProxy */; - }; - 0C12850A8B9416E3F529351252093AF4 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = GoogleUtilities; - target = 8D7F5D5DD528D21A72DC87ADA5B12E2D /* GoogleUtilities */; - targetProxy = EA3AE5C607DDE2E213C72609F8001442 /* PBXContainerItemProxy */; - }; - 0CD942F9F089C5621A5110F8605D28FF /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "mopub-ios-sdk"; - target = BE4A4ECC8A801924F03DA6FFE943E04C /* mopub-ios-sdk */; - targetProxy = E3599E9B95963B2F5C41A817965A9099 /* PBXContainerItemProxy */; - }; - 0F7FA25BF31DD893D383172A8BA71C92 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = GoogleUtilities; - target = 8D7F5D5DD528D21A72DC87ADA5B12E2D /* GoogleUtilities */; - targetProxy = 15FECE96DFC39351545A7024FFAB8EE3 /* PBXContainerItemProxy */; - }; - 1127103A280E97143518C6D8D3CC1577 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = FirebaseAnalyticsInterop; - target = D372E53E2E8FEAA06A0439FB85E65767 /* FirebaseAnalyticsInterop */; - targetProxy = 498DD29925E9A03EBD3A2ACAB8BB2C7F /* PBXContainerItemProxy */; - }; - 16AE1F330E51058F3326B992CB6B4BEB /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = GoogleDataTransportCCTSupport; - target = F4F25FCAC51B51FD5F986EB939BF1F87 /* GoogleDataTransportCCTSupport */; - targetProxy = 71D8C0621DBE37F6DB123547478BB28C /* PBXContainerItemProxy */; - }; - 1C1A78B0FD3D38DC0DD6079869FDF58F /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = GoogleUtilities; - target = 8D7F5D5DD528D21A72DC87ADA5B12E2D /* GoogleUtilities */; - targetProxy = DAF733AC9A15541FBA3E93FA487CD253 /* PBXContainerItemProxy */; - }; - 1ECE2FB927558493ED3D5B5F2046B25F /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = GoogleAppMeasurement; - target = B53D977A951AFC38B21751B706C1DF83 /* GoogleAppMeasurement */; - targetProxy = F81A3726CE45FD570B53473A621892C9 /* PBXContainerItemProxy */; - }; - 1F2F91C494E7A67218C63A61FBBE579C /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = FirebaseCrashlytics; - target = 526C4398D095B3704EB933DADBC30093 /* FirebaseCrashlytics */; - targetProxy = EF8DF69AF18794FB1B6B2B0A803CD52C /* PBXContainerItemProxy */; - }; - 20FF012670312A28126A6D9FAEA647FB /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = FirebaseCoreDiagnosticsInterop; - target = 5EB4B0B6DA6D5C0C3365733BEAA1C485 /* FirebaseCoreDiagnosticsInterop */; - targetProxy = F235134E27D9F50E4A3272A8E3C7811B /* PBXContainerItemProxy */; - }; - 2730673D242B5E3FBD1163769673BC97 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = GoogleUtilities; - target = 8D7F5D5DD528D21A72DC87ADA5B12E2D /* GoogleUtilities */; - targetProxy = BAA4B73D86809C65C4D627FED95F2022 /* PBXContainerItemProxy */; - }; - 30FFCA9356D9FC71B8E00AFF7D4CA57C /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = PromisesObjC; - target = 2BBF7206D7FAC92C82A042A99C4A98F8 /* PromisesObjC */; - targetProxy = E47E16537EF84979F921F7DEC7FA5336 /* PBXContainerItemProxy */; - }; - 34177EE4582A35A6D103E2D6425740D3 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = FBAudienceNetwork; - target = D53454FBB630479B01CA0A777383E94F /* FBAudienceNetwork */; - targetProxy = B016ED63B183F2304F840C4B66C7C203 /* PBXContainerItemProxy */; - }; - 35F38645E05456B15E307B9FCCBE3EF3 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = FirebaseInstallations; - target = 87803597EB3F20FC46472B85392EC4FD /* FirebaseInstallations */; - targetProxy = 90915D854B979ACF5A3DA449824A18AA /* PBXContainerItemProxy */; - }; - 3BC8FD2068D59EEF0A6026C4C145811B /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = nanopb; - target = D2B5E7DCCBBFB32341D857D01211A1A3 /* nanopb */; - targetProxy = 06525BCA6DB3D9BD0BD2E37D02F9E59D /* PBXContainerItemProxy */; - }; - 3E9F62B9EA9E383627AE8F98A685DF7F /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = FirebaseAnalyticsInterop; - target = D372E53E2E8FEAA06A0439FB85E65767 /* FirebaseAnalyticsInterop */; - targetProxy = 4230849FF50126FBFD5AE60BBDE81F76 /* PBXContainerItemProxy */; - }; - 3F29A4DBA277C7737F741AEB4B280C61 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = GoogleAppMeasurement; - target = B53D977A951AFC38B21751B706C1DF83 /* GoogleAppMeasurement */; - targetProxy = 7A676BE49BF71CB93B733FA3F66283F1 /* PBXContainerItemProxy */; - }; - 41D19F4DCACA58D4D8EDAC0938419F15 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "Flurry-iOS-SDK"; - target = 23EE62D8F7B4475F49FFAC72AEF81FAF /* Flurry-iOS-SDK */; - targetProxy = D042998F1BF1A23A9EBACE4A4DA009BB /* PBXContainerItemProxy */; - }; - 432222FC3724482DA420A70080E77416 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = FBSDKCoreKit; - target = 28907903AF6DD0AD321D92CD660E7E23 /* FBSDKCoreKit */; - targetProxy = 0A5F4F384190748021FF13CDBBC16250 /* PBXContainerItemProxy */; - }; - 43D51FD1B2F20609A51FF0EB85C383FE /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = PromisesObjC; - target = 2BBF7206D7FAC92C82A042A99C4A98F8 /* PromisesObjC */; - targetProxy = 02BD44E0FCB59FABFACFD57A0335E04D /* PBXContainerItemProxy */; - }; - 48F52AD51CAC51BC3F942C027806177F /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = GoogleDataTransport; - target = 5C0371EE948D0357B8EE0E34ABB44BF0 /* GoogleDataTransport */; - targetProxy = 4189DF6CD2170EB288411D499A9B1CDB /* PBXContainerItemProxy */; - }; - 4A64CA0DFA6FC56D3DFD08D0E72EBAD2 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = FirebaseCoreDiagnostics; - target = 620E05868772C10B4920DC7E324F2C87 /* FirebaseCoreDiagnostics */; - targetProxy = 8BF3ED0092223A6F9A52967E0D917A91 /* PBXContainerItemProxy */; - }; - 56826B99CA8B67319903693E53A13B58 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = FirebaseCore; - target = 4402AFF83DBDC4DD07E198685FDC2DF2 /* FirebaseCore */; - targetProxy = 8B168196A8B74B47EC0B33F62506D0A9 /* PBXContainerItemProxy */; - }; - 60D9E428593F59AF217B1624A36C90E3 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = PromisesObjC; - target = 2BBF7206D7FAC92C82A042A99C4A98F8 /* PromisesObjC */; - targetProxy = 9F5C4B8DFF3C0E6BFF8BDB977E2D3B8C /* PBXContainerItemProxy */; - }; - 68B056AB9770A46E4A19DB60D2F7B080 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = GoogleDataTransportCCTSupport; - target = F4F25FCAC51B51FD5F986EB939BF1F87 /* GoogleDataTransportCCTSupport */; - targetProxy = F8FAC0D40D4BF0C86A9D50E11D11EEB5 /* PBXContainerItemProxy */; - }; - 6E1D8382715BA53FBFD0864A55CDDF64 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = FirebaseInstallations; - target = 87803597EB3F20FC46472B85392EC4FD /* FirebaseInstallations */; - targetProxy = 8BBB9B6978916C219804A25075E1FC92 /* PBXContainerItemProxy */; - }; - 78A528FD5572AECD12FB7837D0962353 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = FirebaseInstallations; - target = 87803597EB3F20FC46472B85392EC4FD /* FirebaseInstallations */; - targetProxy = BE9D5C5D06458B4F136CC6914F697E66 /* PBXContainerItemProxy */; - }; - 7DA5A58C2C65AA512EE03D63BA49CF7B /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = FBSDKCoreKit; - target = 28907903AF6DD0AD321D92CD660E7E23 /* FBSDKCoreKit */; - targetProxy = 3328B0ED604A59E63C12DB5BE776FD76 /* PBXContainerItemProxy */; - }; - 86F8BB540E12F645DCF26B059FEDB6B6 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = nanopb; - target = D2B5E7DCCBBFB32341D857D01211A1A3 /* nanopb */; - targetProxy = 821E5747969E9D7A605D58F01DBFE5EE /* PBXContainerItemProxy */; - }; - 86FAC6B31304E089EFB5763A173B5B2B /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = FBSDKCoreKit; - target = 28907903AF6DD0AD321D92CD660E7E23 /* FBSDKCoreKit */; - targetProxy = B2C5173BA3B8EC3EC2B3C15605063072 /* PBXContainerItemProxy */; - }; - 8DA43453DD426F213EACE133ED917BB7 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = GoogleUtilities; - target = 8D7F5D5DD528D21A72DC87ADA5B12E2D /* GoogleUtilities */; - targetProxy = 1559F2CC36A61C1D28F7166939C37B1E /* PBXContainerItemProxy */; - }; - 9198041BA0A5953A4BE992C3497C40A8 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = FirebaseCoreDiagnosticsInterop; - target = 5EB4B0B6DA6D5C0C3365733BEAA1C485 /* FirebaseCoreDiagnosticsInterop */; - targetProxy = ACDD0FEA0384D7ADBC2C2E319EDA4BDD /* PBXContainerItemProxy */; - }; - 93633D8F33D8E1132405AB9AE852AAC5 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = nanopb; - target = D2B5E7DCCBBFB32341D857D01211A1A3 /* nanopb */; - targetProxy = 723CEBAFA1B6093BF5668713FC589C93 /* PBXContainerItemProxy */; - }; - 96B62C1492075FAB87ACB7D3DECE8266 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "mopub-ios-sdk"; - target = BE4A4ECC8A801924F03DA6FFE943E04C /* mopub-ios-sdk */; - targetProxy = CFBA8F383CDE605AE6735922D17801DF /* PBXContainerItemProxy */; - }; - 9AE698479AC7EB0324A264ED96C6CD58 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = nanopb; - target = D2B5E7DCCBBFB32341D857D01211A1A3 /* nanopb */; - targetProxy = 8D3783AEF130DCBD4543102A9BB5475B /* PBXContainerItemProxy */; - }; - 9CA43EE8FFD21E33ABCE9B9D57F00B79 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = FirebaseCore; - target = 4402AFF83DBDC4DD07E198685FDC2DF2 /* FirebaseCore */; - targetProxy = E73A113F7FCEA2DF50CFB537E9DDD9F8 /* PBXContainerItemProxy */; - }; - 9D052EF5093719A281FAC4A132A04C19 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = FirebaseCore; - target = 4402AFF83DBDC4DD07E198685FDC2DF2 /* FirebaseCore */; - targetProxy = 2381B76798653075E727F736D061AC85 /* PBXContainerItemProxy */; - }; - 9E9694AD6D1D44A6C2D6803FB7D7C6FC /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = GoogleUtilities; - target = 8D7F5D5DD528D21A72DC87ADA5B12E2D /* GoogleUtilities */; - targetProxy = 37FA74316796D76E7AE3AEFCEE707701 /* PBXContainerItemProxy */; - }; - A6EEE4294414A3A92D223ADB0A2DFCCD /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = FirebaseAnalytics; - target = C49E7A4D59E5C8BE8DE9FB1EFB150185 /* FirebaseAnalytics */; - targetProxy = F3359FE2C480BA46A5BFCF3478909B7E /* PBXContainerItemProxy */; - }; - B1E1DC3941038B0FEA2351C54C60AAB5 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = FirebaseAnalytics; - target = C49E7A4D59E5C8BE8DE9FB1EFB150185 /* FirebaseAnalytics */; - targetProxy = BFBEC99882555BBA4E5DA0B62DBBDB28 /* PBXContainerItemProxy */; - }; - B224983A7E1FF41ECADC21506B963A2E /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = GoogleDataTransportCCTSupport; - target = F4F25FCAC51B51FD5F986EB939BF1F87 /* GoogleDataTransportCCTSupport */; - targetProxy = 1C284AAC4DB6AEE40E03FC942F354A50 /* PBXContainerItemProxy */; - }; - B5875B5A690F6211776564800109685A /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "MoPub-FacebookAudienceNetwork-Adapters"; - target = 8D115411ACEA387C9D854E11FDDD914F /* MoPub-FacebookAudienceNetwork-Adapters */; - targetProxy = F3711A35570FA6A1622BFB46F45FBD86 /* PBXContainerItemProxy */; - }; - B9D6995D66470C2696BE2976D006DAE6 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = FirebaseCore; - target = 4402AFF83DBDC4DD07E198685FDC2DF2 /* FirebaseCore */; - targetProxy = 7880C190813461AF05092E27F49A40E7 /* PBXContainerItemProxy */; - }; - CE381B526A44A3216538681531905C6E /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = FBSDKLoginKit; - target = 10C5885FCB0908EF785774EE52473DAB /* FBSDKLoginKit */; - targetProxy = 77873F5C6ED5BFB61118EE06E1A8F4C9 /* PBXContainerItemProxy */; - }; - D42B037DDDCD0B5D300DB7BF89C3ED2C /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = FirebaseCoreDiagnostics; - target = 620E05868772C10B4920DC7E324F2C87 /* FirebaseCoreDiagnostics */; - targetProxy = 9039456C1C910D165999EE87DDDB26AD /* PBXContainerItemProxy */; - }; - D449E4C85571BC13902E9FEB79DFF7D3 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = FBAudienceNetwork; - target = D53454FBB630479B01CA0A777383E94F /* FBAudienceNetwork */; - targetProxy = 2F85C9D731CD0533B439FA9223350ECE /* PBXContainerItemProxy */; - }; - D4B9ED2063009AB9FD975D0D38F4B041 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = GoogleDataTransport; - target = 5C0371EE948D0357B8EE0E34ABB44BF0 /* GoogleDataTransport */; - targetProxy = 32B37E9D98B8A3586848607B0B2E013D /* PBXContainerItemProxy */; - }; - D54DA9096EEF842FE6B73E96DE596C63 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Pushwoosh; - target = 803EF1AFD27445A470912B1033353BFC /* Pushwoosh */; - targetProxy = 9945C39F0E78F7D499E5BF921A377886 /* PBXContainerItemProxy */; - }; - D8BB378ED939AB3FAEF7D021E5E3974D /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = nanopb; - target = D2B5E7DCCBBFB32341D857D01211A1A3 /* nanopb */; - targetProxy = 3BF797F0613CBBD2D98DCCCF146709A7 /* PBXContainerItemProxy */; - }; - DE4FE72501BD517D4719E145A6E99106 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = FirebaseCore; - target = 4402AFF83DBDC4DD07E198685FDC2DF2 /* FirebaseCore */; - targetProxy = F6F4516DE56159958BD8F5029103F3A9 /* PBXContainerItemProxy */; - }; - E85A1688C50DE96D4216366D9220901E /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = GoogleDataTransport; - target = 5C0371EE948D0357B8EE0E34ABB44BF0 /* GoogleDataTransport */; - targetProxy = 83C025231CC535104969403DCCD6D346 /* PBXContainerItemProxy */; - }; - F33454F2C679148D1B709D18E5C38A6F /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = AppsFlyerFramework; - target = B0B23938B1EBCBAD2419AB6E9D222A0B /* AppsFlyerFramework */; - targetProxy = AAE508C69CE1D32FCC0F38FB0038A253 /* PBXContainerItemProxy */; - }; - F7607640BCAB182DC1220242D530C652 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = PromisesObjC; - target = 2BBF7206D7FAC92C82A042A99C4A98F8 /* PromisesObjC */; - targetProxy = C3FE2103B8E08D82FD28D956379DCC11 /* PBXContainerItemProxy */; - }; - F91518187133EE7A005071081E23B430 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Firebase; - target = 072CEA044D2EF26F03496D5996BBF59F /* Firebase */; - targetProxy = E3414C5966797B929D9E84C324F9663C /* PBXContainerItemProxy */; - }; - FCFC8A20880EE7408BEDE03683A5523E /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = nanopb; - target = D2B5E7DCCBBFB32341D857D01211A1A3 /* nanopb */; - targetProxy = 4E73164D479C1603F3022749B54B6A02 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - /* Begin XCBuildConfiguration section */ - 04AAFBCC44E7CB7676DB8679F41A0DD0 /* Release */ = { + 05C5F654C9A746ACAB4E86915362ECB5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F2DE8DACF699E98BA9B8103D69297896 /* FBSDKCoreKit.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/FBSDKCoreKit/FBSDKCoreKit-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/FBSDKCoreKit/FBSDKCoreKit-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/FBSDKCoreKit/FBSDKCoreKit.modulemap"; - PRODUCT_MODULE_NAME = FBSDKCoreKit; - PRODUCT_NAME = FBSDKCoreKit; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 08AC221D277D74EDC70ACA993A08D00B /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = F72A50E89773ACAEB727FC1A2A737083 /* MoPub-FacebookAudienceNetwork-Adapters.debug.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/MoPub-FacebookAudienceNetwork-Adapters/MoPub-FacebookAudienceNetwork-Adapters-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/MoPub-FacebookAudienceNetwork-Adapters/MoPub-FacebookAudienceNetwork-Adapters-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/MoPub-FacebookAudienceNetwork-Adapters/MoPub-FacebookAudienceNetwork-Adapters.modulemap"; - PRODUCT_MODULE_NAME = MoPub_FacebookAudienceNetwork_Adapters; - PRODUCT_NAME = MoPub_FacebookAudienceNetwork_Adapters; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 0E095DE4CF8656278DE0EA87793F6334 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D919AB3B7647CDE8F235DFA2ABDC7EEA /* GoogleDataTransportCCTSupport.debug.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.modulemap"; - PRODUCT_MODULE_NAME = GoogleDataTransportCCTSupport; - PRODUCT_NAME = GoogleDataTransportCCTSupport; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 0ED2EACCEF4088C12FB1099A005D824A /* Production Full */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = C13C87F43E1B8C680CCBA1A887B3BAA6 /* FirebaseCoreDiagnostics.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.modulemap"; - PRODUCT_MODULE_NAME = FirebaseCoreDiagnostics; - PRODUCT_NAME = FirebaseCoreDiagnostics; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = "Production Full"; - }; - 0F92D2D160E43EBE6163B8A5558ECA1C /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = DB4CFDE48D385561DA2EA77DA34F2BDB /* Firebase.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 0FF3A071C7D78D7EED388AA458FAD39A /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9085B8A32AFF10675A22486994BEAC12 /* Pods-MAPS.ME.release.xcconfig */; + baseConfigurationReference = 7ECD07FDE7142046FDC6F59C008BB3E3 /* Pods-MAPS.ME.debug.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 12F99B1499F3E2B056C7CF01CFD36B3C /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D7C4B4719E036C1B09595417C7D8ACA6 /* Pods-MAPS.ME.debug.xcconfig */; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -7900,1381 +213,11 @@ }; name = Debug; }; - 1D92180F04A964D667A777E2FB24CBF3 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 1D2230D29B8EDB91E07F7C270212E82A /* PromisesObjC.debug.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/PromisesObjC/PromisesObjC-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/PromisesObjC/PromisesObjC.modulemap"; - PRODUCT_MODULE_NAME = FBLPromises; - PRODUCT_NAME = FBLPromises; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 221300B3DF3124DABFD5E60AA108D9D8 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = ABED847911F57D0BCB5750A6CCCF77EB /* Pushwoosh.debug.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 223D0B54CB0A3AD25FCAF7C6F529B21B /* Production Full */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 498A16D85D9C972689BF42A44AABE26F /* Pods-MAPS.ME.production full.xcconfig */; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = "Production Full"; - }; - 257497152829C177993B5EC99C1D227A /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "POD_CONFIGURATION_RELEASE=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - STRIP_INSTALLED_PRODUCT = NO; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - SWIFT_VERSION = 5.0; - SYMROOT = "${SRCROOT}/../build"; - }; - name = Release; - }; - 2666503327C61D6E6B4D998D7523E2DF /* Production Full */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = A9652E30535656104479292E013A06EB /* FirebaseInstallations.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/FirebaseInstallations/FirebaseInstallations-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/FirebaseInstallations/FirebaseInstallations.modulemap"; - PRODUCT_MODULE_NAME = FirebaseInstallations; - PRODUCT_NAME = FirebaseInstallations; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = "Production Full"; - }; - 308101CFF7137B23FE1B40128996C5DC /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 352EA26A6A6EE212ECDD91F0185A4B85 /* Firebase.debug.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 33D46A18604DC350C13264AC1AABD91D /* Production Full */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = AF43222B6CDE64FF9412AC3E8668BE78 /* FirebaseCrashlytics.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/FirebaseCrashlytics/FirebaseCrashlytics-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/FirebaseCrashlytics/FirebaseCrashlytics.modulemap"; - PRODUCT_MODULE_NAME = FirebaseCrashlytics; - PRODUCT_NAME = FirebaseCrashlytics; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = "Production Full"; - }; - 343DABA67094A14FA4BF6C653439AF6F /* Production Full */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 8978A71715A22E8C3CB2878A5D1F28DD /* FirebaseAnalyticsInterop.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = "Production Full"; - }; - 387E98E17D95763F05671BB98A0BB665 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 8978A71715A22E8C3CB2878A5D1F28DD /* FirebaseAnalyticsInterop.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 3BD1DB8FE7A2A7F952D622786CD45084 /* Production Full */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 8DF93FC81DFC41292554D069ADCDA7EB /* mopub-ios-sdk.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/mopub-ios-sdk/mopub-ios-sdk-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/mopub-ios-sdk/mopub-ios-sdk-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/mopub-ios-sdk/mopub-ios-sdk.modulemap"; - PRODUCT_MODULE_NAME = MoPub; - PRODUCT_NAME = MoPub; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = "Production Full"; - }; - 3E95379735112F8385896D5CC86C0162 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 746DDFAD6C96FB57B1BAEB0980D61533 /* FirebaseCoreDiagnosticsInterop.debug.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 402382DBB626247E2971E64F078D1218 /* Production Full */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = B0C8D99CB0A2CB882677D2F6D49A2A97 /* GoogleAppMeasurement.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = "Production Full"; - }; - 429C42A7A06E3B8EB4E749D19210A55C /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 85788E3AF5206F9CDD220BE81B99858C /* GoogleUtilities.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/GoogleUtilities/GoogleUtilities-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/GoogleUtilities/GoogleUtilities-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/GoogleUtilities/GoogleUtilities.modulemap"; - PRODUCT_MODULE_NAME = GoogleUtilities; - PRODUCT_NAME = GoogleUtilities; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 433621F604B33F3559FB63965E03F7DF /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 8DF93FC81DFC41292554D069ADCDA7EB /* mopub-ios-sdk.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/mopub-ios-sdk/mopub-ios-sdk-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/mopub-ios-sdk/mopub-ios-sdk-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/mopub-ios-sdk/mopub-ios-sdk.modulemap"; - PRODUCT_MODULE_NAME = MoPub; - PRODUCT_NAME = MoPub; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 4DDEE909C61F25254222EF43539340D2 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 04711A607F16F2B84569E72C42E97689 /* Pushwoosh.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 4ED1FBD705D160A2AB0FD78D1E439AD9 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 2A74B788513333A85C668015CE4E8E55 /* AppsFlyerFramework.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 51168BFCAAACFD2BD41E5403D55F1AE2 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = F6EF27B3A8A0ED713CBA81294610C639 /* FirebaseCoreDiagnostics.debug.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.modulemap"; - PRODUCT_MODULE_NAME = FirebaseCoreDiagnostics; - PRODUCT_NAME = FirebaseCoreDiagnostics; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 52E65B3786D3E3E52DD74B4D639BD1D8 /* Production Full */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 0165D1E31F273763104B57739B29D6FD /* FirebaseCoreDiagnosticsInterop.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = "Production Full"; - }; - 578B376F2E58894E181E8A4D82D92864 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7BF8A72C551D28B3CC11DDE9D32C067E /* FirebaseAnalytics.debug.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 5D9AE93FE8AA5E35EFD1B02EB7146AFD /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D3356CCE10CEA01243A20E9ACF2923FC /* FirebaseInstallations.debug.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/FirebaseInstallations/FirebaseInstallations-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/FirebaseInstallations/FirebaseInstallations.modulemap"; - PRODUCT_MODULE_NAME = FirebaseInstallations; - PRODUCT_NAME = FirebaseInstallations; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 5F71C9BBF2A45E9D02A33559E610F77E /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = BAEA23AA39E10157B79B45590DB564BC /* nanopb.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/nanopb/nanopb-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/nanopb/nanopb-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/nanopb/nanopb.modulemap"; - PRODUCT_MODULE_NAME = nanopb; - PRODUCT_NAME = nanopb; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 6089B1FE2CA36464CBCC2B4D0F0E9FEC /* Production Full */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 12842DDDEF3AF99466F01F05F1E12F79 /* GoogleDataTransport.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/GoogleDataTransport/GoogleDataTransport-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/GoogleDataTransport/GoogleDataTransport.modulemap"; - PRODUCT_MODULE_NAME = GoogleDataTransport; - PRODUCT_NAME = GoogleDataTransport; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = "Production Full"; - }; - 61953440118CC4D081FD993AB3A1CA0D /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = A9652E30535656104479292E013A06EB /* FirebaseInstallations.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/FirebaseInstallations/FirebaseInstallations-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/FirebaseInstallations/FirebaseInstallations.modulemap"; - PRODUCT_MODULE_NAME = FirebaseInstallations; - PRODUCT_NAME = FirebaseInstallations; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 62851C82FC650EA474A45E33F0FC0244 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9A2445CDEEDB3F456CF8A86C16411788 /* AppsFlyerFramework.debug.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 69C68C174CC9FA70F4675EE0A6E48C1F /* Production Full */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 23837A4DED03B9629C929D352DB4E34E /* MoPub-FacebookAudienceNetwork-Adapters.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/MoPub-FacebookAudienceNetwork-Adapters/MoPub-FacebookAudienceNetwork-Adapters-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/MoPub-FacebookAudienceNetwork-Adapters/MoPub-FacebookAudienceNetwork-Adapters-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/MoPub-FacebookAudienceNetwork-Adapters/MoPub-FacebookAudienceNetwork-Adapters.modulemap"; - PRODUCT_MODULE_NAME = MoPub_FacebookAudienceNetwork_Adapters; - PRODUCT_NAME = MoPub_FacebookAudienceNetwork_Adapters; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = "Production Full"; - }; - 6A18EE31277DB2F88F7DE2A4A45CAD7F /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9F8C134209ECFEE44DD30B54FA918FB1 /* FirebaseCrashlytics.debug.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/FirebaseCrashlytics/FirebaseCrashlytics-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/FirebaseCrashlytics/FirebaseCrashlytics.modulemap"; - PRODUCT_MODULE_NAME = FirebaseCrashlytics; - PRODUCT_NAME = FirebaseCrashlytics; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 6C72532465FB6221096B085742C2C05F /* Production Full */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 274C7A0C93E7A2D754D9A0869C090BD7 /* PromisesObjC.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/PromisesObjC/PromisesObjC-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/PromisesObjC/PromisesObjC.modulemap"; - PRODUCT_MODULE_NAME = FBLPromises; - PRODUCT_NAME = FBLPromises; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = "Production Full"; - }; - 7787BF45A75A482D8A4D1D1C3AF7D40E /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7FC8AF597BA8ABE50213AD9C432B6054 /* GoogleAppMeasurement.debug.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 7827B05670D79358A6668766048FCEB1 /* Production Full */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 04711A607F16F2B84569E72C42E97689 /* Pushwoosh.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = "Production Full"; - }; - 79C06979E5F0129A3DFC77A8922738F1 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = BB28CE7ABD1CD14783DCDE329DA90A9A /* FBSDKCoreKit.debug.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/FBSDKCoreKit/FBSDKCoreKit-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/FBSDKCoreKit/FBSDKCoreKit-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/FBSDKCoreKit/FBSDKCoreKit.modulemap"; - PRODUCT_MODULE_NAME = FBSDKCoreKit; - PRODUCT_NAME = FBSDKCoreKit; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 85F6347A6FE95B0F77E9E02E5F456046 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = C13C87F43E1B8C680CCBA1A887B3BAA6 /* FirebaseCoreDiagnostics.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.modulemap"; - PRODUCT_MODULE_NAME = FirebaseCoreDiagnostics; - PRODUCT_NAME = FirebaseCoreDiagnostics; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 8673A37FB85BAEA0FFA82A8C6CF3CD67 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 23837A4DED03B9629C929D352DB4E34E /* MoPub-FacebookAudienceNetwork-Adapters.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/MoPub-FacebookAudienceNetwork-Adapters/MoPub-FacebookAudienceNetwork-Adapters-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/MoPub-FacebookAudienceNetwork-Adapters/MoPub-FacebookAudienceNetwork-Adapters-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/MoPub-FacebookAudienceNetwork-Adapters/MoPub-FacebookAudienceNetwork-Adapters.modulemap"; - PRODUCT_MODULE_NAME = MoPub_FacebookAudienceNetwork_Adapters; - PRODUCT_NAME = MoPub_FacebookAudienceNetwork_Adapters; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 8CA6823AD9498BA0B5484303A6B5ECDA /* Production Full */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = BAEA23AA39E10157B79B45590DB564BC /* nanopb.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/nanopb/nanopb-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/nanopb/nanopb-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/nanopb/nanopb.modulemap"; - PRODUCT_MODULE_NAME = nanopb; - PRODUCT_NAME = nanopb; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = "Production Full"; - }; - 8F19A97FEEFB5E5D7F07D785BA5151CB /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7E9A9B0555DE3093146BE01B837BD495 /* FirebaseCore.debug.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/FirebaseCore/FirebaseCore-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/FirebaseCore/FirebaseCore.modulemap"; - PRODUCT_MODULE_NAME = FirebaseCore; - PRODUCT_NAME = FirebaseCore; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 8F8B440061E647404649AAB3DD6D2E00 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 326871F700D630BC7DADFB958059DE48 /* FirebaseAnalyticsInterop.debug.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 9947237A0FEB14B3DFAA22165BCB46A9 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7C4CFE5B0130DF4CA31ED2DAB3DE837E /* Flurry-iOS-SDK.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/Flurry-iOS-SDK/Flurry-iOS-SDK-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Flurry-iOS-SDK/Flurry-iOS-SDK-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Flurry-iOS-SDK/Flurry-iOS-SDK.modulemap"; - PRODUCT_MODULE_NAME = Flurry_iOS_SDK; - PRODUCT_NAME = Flurry_iOS_SDK; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 99832703C25B3019F2909303B91B92EC /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = AF43222B6CDE64FF9412AC3E8668BE78 /* FirebaseCrashlytics.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/FirebaseCrashlytics/FirebaseCrashlytics-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/FirebaseCrashlytics/FirebaseCrashlytics.modulemap"; - PRODUCT_MODULE_NAME = FirebaseCrashlytics; - PRODUCT_NAME = FirebaseCrashlytics; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 9D1E8EA6D2D6B3503096007040E3D315 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 62E8EDABFE6152877F26EBD4926E6967 /* FBSDKLoginKit.debug.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/FBSDKLoginKit/FBSDKLoginKit-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/FBSDKLoginKit/FBSDKLoginKit-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/FBSDKLoginKit/FBSDKLoginKit.modulemap"; - PRODUCT_MODULE_NAME = FBSDKLoginKit; - PRODUCT_NAME = FBSDKLoginKit; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 9D7736D53CB6385F7B5A8A060D308374 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = B0C8D99CB0A2CB882677D2F6D49A2A97 /* GoogleAppMeasurement.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - A0CD05EA230CCEC116A514122001A8EE /* Production Full */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = FE1B5D53750F5F9274805FA96C0B6AD7 /* FBSDKLoginKit.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/FBSDKLoginKit/FBSDKLoginKit-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/FBSDKLoginKit/FBSDKLoginKit-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/FBSDKLoginKit/FBSDKLoginKit.modulemap"; - PRODUCT_MODULE_NAME = FBSDKLoginKit; - PRODUCT_NAME = FBSDKLoginKit; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = "Production Full"; - }; - A6216AAA5F62F9198D892B29366D948E /* Production Full */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 8A2079D3A3064C29D8BCF5B92737A22F /* FirebaseAnalytics.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = "Production Full"; - }; - AA30D7F3EA49B467E26F02E1BC75054F /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 12842DDDEF3AF99466F01F05F1E12F79 /* GoogleDataTransport.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/GoogleDataTransport/GoogleDataTransport-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/GoogleDataTransport/GoogleDataTransport.modulemap"; - PRODUCT_MODULE_NAME = GoogleDataTransport; - PRODUCT_NAME = GoogleDataTransport; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - AEEA052FB917FFE4FA3CA1B1BA740607 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 50DA138470CD831835AFC7F2FD5A1778 /* GoogleDataTransport.debug.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/GoogleDataTransport/GoogleDataTransport-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/GoogleDataTransport/GoogleDataTransport.modulemap"; - PRODUCT_MODULE_NAME = GoogleDataTransport; - PRODUCT_NAME = GoogleDataTransport; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - B0373EC824A1F6DD74EFCE69C4B57CA7 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 27888B5653D0913C4C5E5736A04AD8D1 /* GoogleUtilities.debug.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/GoogleUtilities/GoogleUtilities-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/GoogleUtilities/GoogleUtilities-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/GoogleUtilities/GoogleUtilities.modulemap"; - PRODUCT_MODULE_NAME = GoogleUtilities; - PRODUCT_NAME = GoogleUtilities; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - B512611D0A40634D0A4153885998F8B2 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 09C70C47126BFEDBFCB81ACFA9563DD7 /* mopub-ios-sdk.debug.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/mopub-ios-sdk/mopub-ios-sdk-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/mopub-ios-sdk/mopub-ios-sdk-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/mopub-ios-sdk/mopub-ios-sdk.modulemap"; - PRODUCT_MODULE_NAME = MoPub; - PRODUCT_NAME = MoPub; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - BACF9EE1388DA19250814DBF905C2DD8 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = E0B971CC57D8EBB8C3EAC017D5C0A622 /* FirebaseCore.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/FirebaseCore/FirebaseCore-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/FirebaseCore/FirebaseCore.modulemap"; - PRODUCT_MODULE_NAME = FirebaseCore; - PRODUCT_NAME = FirebaseCore; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - C1AD48820FBA8D9504A57A234B5D2D65 /* Production Full */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = CB8007F0CCF389E6DB42CD523C21695E /* FBAudienceNetwork.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = "Production Full"; - }; - C4F08A2C1CCF34C1603B6CFB28F35D91 /* Production Full */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7C4CFE5B0130DF4CA31ED2DAB3DE837E /* Flurry-iOS-SDK.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/Flurry-iOS-SDK/Flurry-iOS-SDK-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Flurry-iOS-SDK/Flurry-iOS-SDK-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Flurry-iOS-SDK/Flurry-iOS-SDK.modulemap"; - PRODUCT_MODULE_NAME = Flurry_iOS_SDK; - PRODUCT_NAME = Flurry_iOS_SDK; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = "Production Full"; - }; - C4FF72D8525F18FAD8147020FB2C531F /* Production Full */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = E0B971CC57D8EBB8C3EAC017D5C0A622 /* FirebaseCore.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/FirebaseCore/FirebaseCore-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/FirebaseCore/FirebaseCore.modulemap"; - PRODUCT_MODULE_NAME = FirebaseCore; - PRODUCT_NAME = FirebaseCore; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = "Production Full"; - }; - C5EF6CAC8B48EFBEE80B8AF66FB1CBC3 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 274C7A0C93E7A2D754D9A0869C090BD7 /* PromisesObjC.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/PromisesObjC/PromisesObjC-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/PromisesObjC/PromisesObjC.modulemap"; - PRODUCT_MODULE_NAME = FBLPromises; - PRODUCT_NAME = FBLPromises; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - CE3C4D9F6A13BEEC324474922D1FAB7D /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 8A2079D3A3064C29D8BCF5B92737A22F /* FirebaseAnalytics.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - D6D5F1759D9469CD5C77DD43119F4ADC /* Production Full */ = { + 1E7386C2F5C719CC424581B523EE5002 /* Production Full */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; @@ -9297,6 +240,7 @@ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; @@ -9331,12 +275,13 @@ }; name = "Production Full"; }; - DD19DA3D8510488E00A58815C3C081E5 /* Production Full */ = { + 58F0E785E0C0F91FCCBDC479BBC9FDB2 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DDAB6FBFA511BC947E30FAC4F5A6C8B9 /* GoogleDataTransportCCTSupport.release.xcconfig */; + baseConfigurationReference = 0360EACFE90690434ECAC82F752F684B /* Pods-MAPS.ME.release.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CODE_SIGN_IDENTITY = ""; + CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -9345,18 +290,54 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport-Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.modulemap"; - PRODUCT_MODULE_NAME = GoogleDataTransportCCTSupport; - PRODUCT_NAME = GoogleDataTransportCCTSupport; + MODULEMAP_FILE = "Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 6A2632790B6034FA6EFE48A3CC282384 /* Production Full */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9A3F53459150A78B1495133DC94E9C56 /* Pods-MAPS.ME.production full.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_WEAK = NO; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = "Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; @@ -9364,25 +345,11 @@ }; name = "Production Full"; }; - DD3F7AA231D0CB07ECCB4651E7ECB56E /* Production Full */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 2A74B788513333A85C668015CE4E8E55 /* AppsFlyerFramework.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = "Production Full"; - }; - DD8F832993327D1DD8046C3CBCBD97CD /* Debug */ = { + 903A0004D3E6651EFD5D2E16214D101B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; @@ -9405,6 +372,69 @@ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_RELEASE=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + STRIP_INSTALLED_PRODUCT = NO; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + SWIFT_VERSION = 5.0; + SYMROOT = "${SRCROOT}/../build"; + }; + name = Release; + }; + B4EFE046ACF8F37157F6E322C7FCFC28 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; @@ -9443,500 +473,25 @@ }; name = Debug; }; - E3DDB4EEBDEF4D35D9CD20479EBB08D9 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = BE8609CE945C9F8818FB940B4101B7C4 /* nanopb.debug.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/nanopb/nanopb-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/nanopb/nanopb-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/nanopb/nanopb.modulemap"; - PRODUCT_MODULE_NAME = nanopb; - PRODUCT_NAME = nanopb; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - E63B5636068C311A921B3B3A4916CDF8 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 0165D1E31F273763104B57739B29D6FD /* FirebaseCoreDiagnosticsInterop.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - EB34AE1D7DB072BE7008583DD356260B /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = CB8007F0CCF389E6DB42CD523C21695E /* FBAudienceNetwork.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - EF54062655BD89DA9C5CE798C3658C0B /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 5A83A09F2C2A6E1D86439B034EFE4219 /* Flurry-iOS-SDK.debug.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/Flurry-iOS-SDK/Flurry-iOS-SDK-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Flurry-iOS-SDK/Flurry-iOS-SDK-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Flurry-iOS-SDK/Flurry-iOS-SDK.modulemap"; - PRODUCT_MODULE_NAME = Flurry_iOS_SDK; - PRODUCT_NAME = Flurry_iOS_SDK; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - F037E0679B101EC609FBC1ADBAA648B5 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = FE1B5D53750F5F9274805FA96C0B6AD7 /* FBSDKLoginKit.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/FBSDKLoginKit/FBSDKLoginKit-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/FBSDKLoginKit/FBSDKLoginKit-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/FBSDKLoginKit/FBSDKLoginKit.modulemap"; - PRODUCT_MODULE_NAME = FBSDKLoginKit; - PRODUCT_NAME = FBSDKLoginKit; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - F101C4D8C1D2E2F61BD9F9DFA98424F7 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 2FC44B94F52B771F14BF14EB8E499BBB /* FBAudienceNetwork.debug.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - F2AD6A4595876CB8299EA1A8E32615C5 /* Production Full */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 85788E3AF5206F9CDD220BE81B99858C /* GoogleUtilities.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/GoogleUtilities/GoogleUtilities-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/GoogleUtilities/GoogleUtilities-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/GoogleUtilities/GoogleUtilities.modulemap"; - PRODUCT_MODULE_NAME = GoogleUtilities; - PRODUCT_NAME = GoogleUtilities; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = "Production Full"; - }; - F67551618952105F2FFD6305203CD00F /* Production Full */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = F2DE8DACF699E98BA9B8103D69297896 /* FBSDKCoreKit.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/FBSDKCoreKit/FBSDKCoreKit-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/FBSDKCoreKit/FBSDKCoreKit-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/FBSDKCoreKit/FBSDKCoreKit.modulemap"; - PRODUCT_MODULE_NAME = FBSDKCoreKit; - PRODUCT_NAME = FBSDKCoreKit; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = "Production Full"; - }; - FDB863D5EC1556D9B281FE9AF20847F3 /* Production Full */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = DB4CFDE48D385561DA2EA77DA34F2BDB /* Firebase.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = "Production Full"; - }; - FFBCF50458B5F8AFCA8C48E753CD32F5 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = DDAB6FBFA511BC947E30FAC4F5A6C8B9 /* GoogleDataTransportCCTSupport.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.modulemap"; - PRODUCT_MODULE_NAME = GoogleDataTransportCCTSupport; - PRODUCT_NAME = GoogleDataTransportCCTSupport; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 00C533DF171C8547226B2B734D5A5F1E /* Build configuration list for PBXNativeTarget "mopub-ios-sdk" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - B512611D0A40634D0A4153885998F8B2 /* Debug */, - 3BD1DB8FE7A2A7F952D622786CD45084 /* Production Full */, - 433621F604B33F3559FB63965E03F7DF /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 0EEA329DC76CD5F88CC0C61390B632E2 /* Build configuration list for PBXAggregateTarget "FirebaseAnalyticsInterop" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 8F8B440061E647404649AAB3DD6D2E00 /* Debug */, - 343DABA67094A14FA4BF6C653439AF6F /* Production Full */, - 387E98E17D95763F05671BB98A0BB665 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 148EF6C494C229CEF85E66DCBBE7845B /* Build configuration list for PBXAggregateTarget "FirebaseAnalytics" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 578B376F2E58894E181E8A4D82D92864 /* Debug */, - A6216AAA5F62F9198D892B29366D948E /* Production Full */, - CE3C4D9F6A13BEEC324474922D1FAB7D /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 1E3283EF13AA3D4451AF2D8D898D6150 /* Build configuration list for PBXNativeTarget "Flurry-iOS-SDK" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - EF54062655BD89DA9C5CE798C3658C0B /* Debug */, - C4F08A2C1CCF34C1603B6CFB28F35D91 /* Production Full */, - 9947237A0FEB14B3DFAA22165BCB46A9 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 256CBFB856AF512FAE3E1735FE4D1BAA /* Build configuration list for PBXAggregateTarget "FBAudienceNetwork" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - F101C4D8C1D2E2F61BD9F9DFA98424F7 /* Debug */, - C1AD48820FBA8D9504A57A234B5D2D65 /* Production Full */, - EB34AE1D7DB072BE7008583DD356260B /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 2E4EF7C2118ECB5D4BF4C68E63768578 /* Build configuration list for PBXAggregateTarget "GoogleAppMeasurement" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 7787BF45A75A482D8A4D1D1C3AF7D40E /* Debug */, - 402382DBB626247E2971E64F078D1218 /* Production Full */, - 9D7736D53CB6385F7B5A8A060D308374 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 336C02EF8C4F2ACF4662F1021254F8F8 /* Build configuration list for PBXNativeTarget "FirebaseInstallations" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 5D9AE93FE8AA5E35EFD1B02EB7146AFD /* Debug */, - 2666503327C61D6E6B4D998D7523E2DF /* Production Full */, - 61953440118CC4D081FD993AB3A1CA0D /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 34CE123EFD4B4DB877950D1ED1B2A296 /* Build configuration list for PBXAggregateTarget "Pushwoosh" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 221300B3DF3124DABFD5E60AA108D9D8 /* Debug */, - 7827B05670D79358A6668766048FCEB1 /* Production Full */, - 4DDEE909C61F25254222EF43539340D2 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { isa = XCConfigurationList; buildConfigurations = ( - DD8F832993327D1DD8046C3CBCBD97CD /* Debug */, - D6D5F1759D9469CD5C77DD43119F4ADC /* Production Full */, - 257497152829C177993B5EC99C1D227A /* Release */, + B4EFE046ACF8F37157F6E322C7FCFC28 /* Debug */, + 1E7386C2F5C719CC424581B523EE5002 /* Production Full */, + 903A0004D3E6651EFD5D2E16214D101B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 4C93BC65445977F31B5A9A4E63CB6F77 /* Build configuration list for PBXNativeTarget "FirebaseCrashlytics" */ = { + BD42FE63D2CE91AA7EDC5B6CE0497FCD /* Build configuration list for PBXNativeTarget "Pods-MAPS.ME" */ = { isa = XCConfigurationList; buildConfigurations = ( - 6A18EE31277DB2F88F7DE2A4A45CAD7F /* Debug */, - 33D46A18604DC350C13264AC1AABD91D /* Production Full */, - 99832703C25B3019F2909303B91B92EC /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 5418348C4E12C2FA948C40C515696052 /* Build configuration list for PBXAggregateTarget "AppsFlyerFramework" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 62851C82FC650EA474A45E33F0FC0244 /* Debug */, - DD3F7AA231D0CB07ECCB4651E7ECB56E /* Production Full */, - 4ED1FBD705D160A2AB0FD78D1E439AD9 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 56117E68495456EB7E1BB45D74EB57C8 /* Build configuration list for PBXNativeTarget "nanopb" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - E3DDB4EEBDEF4D35D9CD20479EBB08D9 /* Debug */, - 8CA6823AD9498BA0B5484303A6B5ECDA /* Production Full */, - 5F71C9BBF2A45E9D02A33559E610F77E /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 590B7692C2DA48F8E077563FC4348118 /* Build configuration list for PBXNativeTarget "FirebaseCoreDiagnostics" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 51168BFCAAACFD2BD41E5403D55F1AE2 /* Debug */, - 0ED2EACCEF4088C12FB1099A005D824A /* Production Full */, - 85F6347A6FE95B0F77E9E02E5F456046 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 5921552366ED7C5BBE0EDD81AAD70102 /* Build configuration list for PBXAggregateTarget "FirebaseCoreDiagnosticsInterop" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 3E95379735112F8385896D5CC86C0162 /* Debug */, - 52E65B3786D3E3E52DD74B4D639BD1D8 /* Production Full */, - E63B5636068C311A921B3B3A4916CDF8 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 5DE062DE241768818BF83AA923395848 /* Build configuration list for PBXNativeTarget "FBSDKLoginKit" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 9D1E8EA6D2D6B3503096007040E3D315 /* Debug */, - A0CD05EA230CCEC116A514122001A8EE /* Production Full */, - F037E0679B101EC609FBC1ADBAA648B5 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 6467A492CB7F2CDA57A7B1127E43210E /* Build configuration list for PBXNativeTarget "MoPub-FacebookAudienceNetwork-Adapters" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 08AC221D277D74EDC70ACA993A08D00B /* Debug */, - 69C68C174CC9FA70F4675EE0A6E48C1F /* Production Full */, - 8673A37FB85BAEA0FFA82A8C6CF3CD67 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 848EDB835E7C50754E53EBF20A5DB6F0 /* Build configuration list for PBXAggregateTarget "Firebase" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 308101CFF7137B23FE1B40128996C5DC /* Debug */, - FDB863D5EC1556D9B281FE9AF20847F3 /* Production Full */, - 0F92D2D160E43EBE6163B8A5558ECA1C /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 8D0443A52BA7F7ACA9608213C3B09A0D /* Build configuration list for PBXNativeTarget "FirebaseCore" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 8F19A97FEEFB5E5D7F07D785BA5151CB /* Debug */, - C4FF72D8525F18FAD8147020FB2C531F /* Production Full */, - BACF9EE1388DA19250814DBF905C2DD8 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 8EF55EC51F3CC9B2741B66428B85C34E /* Build configuration list for PBXNativeTarget "Pods-MAPS.ME" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 12F99B1499F3E2B056C7CF01CFD36B3C /* Debug */, - 223D0B54CB0A3AD25FCAF7C6F529B21B /* Production Full */, - 0FF3A071C7D78D7EED388AA458FAD39A /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - BF839B0494D6AB6D13C3BD6D6E43FD36 /* Build configuration list for PBXNativeTarget "PromisesObjC" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1D92180F04A964D667A777E2FB24CBF3 /* Debug */, - 6C72532465FB6221096B085742C2C05F /* Production Full */, - C5EF6CAC8B48EFBEE80B8AF66FB1CBC3 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - C8BEA7DEEE5C3A984C905106131B73A2 /* Build configuration list for PBXNativeTarget "GoogleDataTransport" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - AEEA052FB917FFE4FA3CA1B1BA740607 /* Debug */, - 6089B1FE2CA36464CBCC2B4D0F0E9FEC /* Production Full */, - AA30D7F3EA49B467E26F02E1BC75054F /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - D2FA00DC9B655AADDD1A925B37D2B465 /* Build configuration list for PBXNativeTarget "GoogleDataTransportCCTSupport" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 0E095DE4CF8656278DE0EA87793F6334 /* Debug */, - DD19DA3D8510488E00A58815C3C081E5 /* Production Full */, - FFBCF50458B5F8AFCA8C48E753CD32F5 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - E83F558F165F887DA6CC0A016A8FAFF3 /* Build configuration list for PBXNativeTarget "GoogleUtilities" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - B0373EC824A1F6DD74EFCE69C4B57CA7 /* Debug */, - F2AD6A4595876CB8299EA1A8E32615C5 /* Production Full */, - 429C42A7A06E3B8EB4E749D19210A55C /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - FC24463618BACAFC5CF9C1786BB4B065 /* Build configuration list for PBXNativeTarget "FBSDKCoreKit" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 79C06979E5F0129A3DFC77A8922738F1 /* Debug */, - F67551618952105F2FFD6305203CD00F /* Production Full */, - 04AAFBCC44E7CB7676DB8679F41A0DD0 /* Release */, + 05C5F654C9A746ACAB4E86915362ECB5 /* Debug */, + 6A2632790B6034FA6EFE48A3CC282384 /* Production Full */, + 58F0E785E0C0F91FCCBDC479BBC9FDB2 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/iphone/Maps/Pods/PromisesObjC/LICENSE b/iphone/Maps/Pods/PromisesObjC/LICENSE deleted file mode 100644 index d645695673..0000000000 --- a/iphone/Maps/Pods/PromisesObjC/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/iphone/Maps/Pods/PromisesObjC/README.md b/iphone/Maps/Pods/PromisesObjC/README.md deleted file mode 100644 index 0eecbb12f4..0000000000 --- a/iphone/Maps/Pods/PromisesObjC/README.md +++ /dev/null @@ -1,60 +0,0 @@ -[![Apache -License](https://img.shields.io/github/license/google/promises.svg)](LICENSE) -[![Travis](https://api.travis-ci.org/google/promises.svg?branch=master)](https://travis-ci.org/google/promises) -[![Gitter Chat](https://badges.gitter.im/google/promises.svg)](https://gitter.im/google/promises) - -![Platforms](https://img.shields.io/badge/platforms-macOS%20%7C%20iOS%20%7C%20tvOS%20%7C%20watchOS-blue.svg?longCache=true&style=flat) -![Languages](https://img.shields.io/badge/languages-Swift%20%7C%20ObjC-orange.svg?longCache=true&style=flat) -![Package Managers](https://img.shields.io/badge/supports-Bazel%20%7C%20SwiftPM%20%7C%20CocoaPods%20%7C%20Carthage-yellow.svg?longCache=true&style=flat) - -# Promises - -Promises is a modern framework that provides a synchronization construct for -Objective-C and Swift to facilitate writing asynchronous code. - -* [Introduction](g3doc/index.md) - * [The problem with async - code](g3doc/index.md#the-problem-with-async-code) - * [Promises to the rescue](g3doc/index.md#promises-to-the-rescue) - * [What is a promise?](g3doc/index.md#what-is-a-promise) -* [Framework](g3doc/index.md#framework) - * [Features](g3doc/index.md#features) - * [Benchmark](g3doc/index.md#benchmark) -* [Getting started](g3doc/index.md#getting-started) - * [Add dependency](g3doc/index.md#add-dependency) - * [Import](g3doc/index.md#import) - * [Adopt](g3doc/index.md#adopt) -* [Basics](g3doc/index.md#basics) - * [Creating promises](g3doc/index.md#creating-promises) - * [Async](g3doc/index.md#async) - * [Do](g3doc/index.md#do) - * [Pending](g3doc/index.md#pending) - * [Resolved](g3doc/index.md#create-a-resolved-promise) - * [Observing fulfillment](g3doc/index.md#observing-fulfillment) - * [Then](g3doc/index.md#then) - * [Observing rejection](g3doc/index.md#observing-rejection) - * [Catch](g3doc/index.md#catch) -* [Extensions](g3doc/index.md#extensions) - * [All](g3doc/index.md#all) - * [Always](g3doc/index.md#always) - * [Any](g3doc/index.md#any) - * [Await](g3doc/index.md#await) - * [Delay](g3doc/index.md#delay) - * [Race](g3doc/index.md#race) - * [Recover](g3doc/index.md#recover) - * [Reduce](g3doc/index.md#reduce) - * [Retry](g3doc/index.md#retry) - * [Timeout](g3doc/index.md#timeout) - * [Validate](g3doc/index.md#validate) - * [Wrap](g3doc/index.md#wrap) -* [Advanced topics](g3doc/index.md#advanced-topics) - * [Default dispatch queue](g3doc/index.md#default-dispatch-queue) - * [Ownership and retain - cycles](g3doc/index.md#ownership-and-retain-cycles) - * [Testing](g3doc/index.md#testing) - * [Objective-C <-> Swift - interoperability](g3doc/index.md#objective-c---swift-interoperability) - * [Dot-syntax in Objective-C](g3doc/index.md#dot-syntax-in-objective-c) -* [Anti-patterns](g3doc/index.md#anti-patterns) - * [Broken chain](g3doc/index.md#broken-chain) - * [Nested promises](g3doc/index.md#nested-promises) diff --git a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+All.m b/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+All.m deleted file mode 100644 index c21f30efc8..0000000000 --- a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+All.m +++ /dev/null @@ -1,86 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise+All.h" - -#import "FBLPromise+Async.h" -#import "FBLPromisePrivate.h" - -@implementation FBLPromise (AllAdditions) - -+ (FBLPromise *)all:(NSArray *)promises { - return [self onQueue:self.defaultDispatchQueue all:promises]; -} - -+ (FBLPromise *)onQueue:(dispatch_queue_t)queue all:(NSArray *)allPromises { - NSParameterAssert(queue); - NSParameterAssert(allPromises); - - if (allPromises.count == 0) { - return [[FBLPromise alloc] initWithResolution:@[]]; - } - NSMutableArray *promises = [allPromises mutableCopy]; - return [FBLPromise - onQueue:queue - async:^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock reject) { - for (NSUInteger i = 0; i < promises.count; ++i) { - id promise = promises[i]; - if ([promise isKindOfClass:self]) { - continue; - } else if ([promise isKindOfClass:[NSError class]]) { - reject(promise); - return; - } else { - [promises replaceObjectAtIndex:i - withObject:[[FBLPromise alloc] initWithResolution:promise]]; - } - } - for (FBLPromise *promise in promises) { - [promise observeOnQueue:queue - fulfill:^(id __unused _) { - // Wait until all are fulfilled. - for (FBLPromise *promise in promises) { - if (!promise.isFulfilled) { - return; - } - } - // If called multiple times, only the first one affects the result. - fulfill([promises valueForKey:NSStringFromSelector(@selector(value))]); - } - reject:^(NSError *error) { - reject(error); - }]; - } - }]; -} - -@end - -@implementation FBLPromise (DotSyntax_AllAdditions) - -+ (FBLPromise * (^)(NSArray *))all { - return ^(NSArray *promises) { - return [self all:promises]; - }; -} - -+ (FBLPromise * (^)(dispatch_queue_t, NSArray *))allOn { - return ^(dispatch_queue_t queue, NSArray *promises) { - return [self onQueue:queue all:promises]; - }; -} - -@end diff --git a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Always.m b/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Always.m deleted file mode 100644 index 692744287d..0000000000 --- a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Always.m +++ /dev/null @@ -1,58 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise+Always.h" - -#import "FBLPromisePrivate.h" - -@implementation FBLPromise (AlwaysAdditions) - -- (FBLPromise *)always:(FBLPromiseAlwaysWorkBlock)work { - return [self onQueue:FBLPromise.defaultDispatchQueue always:work]; -} - -- (FBLPromise *)onQueue:(dispatch_queue_t)queue always:(FBLPromiseAlwaysWorkBlock)work { - NSParameterAssert(queue); - NSParameterAssert(work); - - return [self chainOnQueue:queue - chainedFulfill:^id(id value) { - work(); - return value; - } - chainedReject:^id(NSError *error) { - work(); - return error; - }]; -} - -@end - -@implementation FBLPromise (DotSyntax_AlwaysAdditions) - -- (FBLPromise * (^)(FBLPromiseAlwaysWorkBlock))always { - return ^(FBLPromiseAlwaysWorkBlock work) { - return [self always:work]; - }; -} - -- (FBLPromise * (^)(dispatch_queue_t, FBLPromiseAlwaysWorkBlock))alwaysOn { - return ^(dispatch_queue_t queue, FBLPromiseAlwaysWorkBlock work) { - return [self onQueue:queue always:work]; - }; -} - -@end diff --git a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Any.m b/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Any.m deleted file mode 100644 index e101c98dda..0000000000 --- a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Any.m +++ /dev/null @@ -1,112 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise+Any.h" - -#import "FBLPromise+Async.h" -#import "FBLPromisePrivate.h" - -static NSArray *FBLPromiseCombineValuesAndErrors(NSArray *promises) { - NSMutableArray *combinedValuesAndErrors = [[NSMutableArray alloc] init]; - for (FBLPromise *promise in promises) { - if (promise.isFulfilled) { - [combinedValuesAndErrors addObject:promise.value ?: [NSNull null]]; - continue; - } - if (promise.isRejected) { - [combinedValuesAndErrors addObject:promise.error]; - continue; - } - assert(!promise.isPending); - }; - return combinedValuesAndErrors; -} - -@implementation FBLPromise (AnyAdditions) - -+ (FBLPromise *)any:(NSArray *)promises { - return [self onQueue:FBLPromise.defaultDispatchQueue any:promises]; -} - -+ (FBLPromise *)onQueue:(dispatch_queue_t)queue any:(NSArray *)anyPromises { - NSParameterAssert(queue); - NSParameterAssert(anyPromises); - - if (anyPromises.count == 0) { - return [[FBLPromise alloc] initWithResolution:@[]]; - } - NSMutableArray *promises = [anyPromises mutableCopy]; - return [FBLPromise - onQueue:queue - async:^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock reject) { - for (NSUInteger i = 0; i < promises.count; ++i) { - id promise = promises[i]; - if ([promise isKindOfClass:self]) { - continue; - } else { - [promises replaceObjectAtIndex:i - withObject:[[FBLPromise alloc] initWithResolution:promise]]; - } - } - for (FBLPromise *promise in promises) { - [promise observeOnQueue:queue - fulfill:^(id __unused _) { - // Wait until all are resolved. - for (FBLPromise *promise in promises) { - if (promise.isPending) { - return; - } - } - // If called multiple times, only the first one affects the result. - fulfill(FBLPromiseCombineValuesAndErrors(promises)); - } - reject:^(NSError *error) { - BOOL atLeastOneIsFulfilled = NO; - for (FBLPromise *promise in promises) { - if (promise.isPending) { - return; - } - if (promise.isFulfilled) { - atLeastOneIsFulfilled = YES; - } - } - if (atLeastOneIsFulfilled) { - fulfill(FBLPromiseCombineValuesAndErrors(promises)); - } else { - reject(error); - } - }]; - } - }]; -} - -@end - -@implementation FBLPromise (DotSyntax_AnyAdditions) - -+ (FBLPromise * (^)(NSArray *))any { - return ^(NSArray *promises) { - return [self any:promises]; - }; -} - -+ (FBLPromise * (^)(dispatch_queue_t, NSArray *))anyOn { - return ^(dispatch_queue_t queue, NSArray *promises) { - return [self onQueue:queue any:promises]; - }; -} - -@end diff --git a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Async.m b/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Async.m deleted file mode 100644 index 249158ce32..0000000000 --- a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Async.m +++ /dev/null @@ -1,70 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise+Async.h" - -#import "FBLPromisePrivate.h" - -@implementation FBLPromise (AsyncAdditions) - -+ (instancetype)async:(FBLPromiseAsyncWorkBlock)work { - return [self onQueue:self.defaultDispatchQueue async:work]; -} - -+ (instancetype)onQueue:(dispatch_queue_t)queue async:(FBLPromiseAsyncWorkBlock)work { - NSParameterAssert(queue); - NSParameterAssert(work); - - FBLPromise *promise = [[FBLPromise alloc] initPending]; - dispatch_group_async(FBLPromise.dispatchGroup, queue, ^{ - work( - ^(id __nullable value) { - if ([value isKindOfClass:[FBLPromise class]]) { - [(FBLPromise *)value observeOnQueue:queue - fulfill:^(id __nullable value) { - [promise fulfill:value]; - } - reject:^(NSError *error) { - [promise reject:error]; - }]; - } else { - [promise fulfill:value]; - } - }, - ^(NSError *error) { - [promise reject:error]; - }); - }); - return promise; -} - -@end - -@implementation FBLPromise (DotSyntax_AsyncAdditions) - -+ (FBLPromise* (^)(FBLPromiseAsyncWorkBlock))async { - return ^(FBLPromiseAsyncWorkBlock work) { - return [self async:work]; - }; -} - -+ (FBLPromise* (^)(dispatch_queue_t, FBLPromiseAsyncWorkBlock))asyncOn { - return ^(dispatch_queue_t queue, FBLPromiseAsyncWorkBlock work) { - return [self onQueue:queue async:work]; - }; -} - -@end diff --git a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Await.m b/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Await.m deleted file mode 100644 index ea3b87a3d5..0000000000 --- a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Await.m +++ /dev/null @@ -1,48 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise+Await.h" - -#import "FBLPromisePrivate.h" - -id __nullable FBLPromiseAwait(FBLPromise *promise, NSError **outError) { - assert(promise); - - static dispatch_once_t onceToken; - static dispatch_queue_t queue; - dispatch_once(&onceToken, ^{ - queue = dispatch_queue_create("com.google.FBLPromises.Await", DISPATCH_QUEUE_CONCURRENT); - }); - dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); - id __block resolution; - NSError __block *blockError; - [promise chainOnQueue:queue - chainedFulfill:^id(id value) { - resolution = value; - dispatch_semaphore_signal(semaphore); - return value; - } - chainedReject:^id(NSError *error) { - blockError = error; - dispatch_semaphore_signal(semaphore); - return error; - }]; - dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); - if (outError) { - *outError = blockError; - } - return resolution; -} diff --git a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Catch.m b/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Catch.m deleted file mode 100644 index 25e8ce63e6..0000000000 --- a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Catch.m +++ /dev/null @@ -1,55 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise+Catch.h" - -#import "FBLPromisePrivate.h" - -@implementation FBLPromise (CatchAdditions) - -- (FBLPromise *)catch:(FBLPromiseCatchWorkBlock)reject { - return [self onQueue:FBLPromise.defaultDispatchQueue catch:reject]; -} - -- (FBLPromise *)onQueue:(dispatch_queue_t)queue catch:(FBLPromiseCatchWorkBlock)reject { - NSParameterAssert(queue); - NSParameterAssert(reject); - - return [self chainOnQueue:queue - chainedFulfill:nil - chainedReject:^id(NSError *error) { - reject(error); - return error; - }]; -} - -@end - -@implementation FBLPromise (DotSyntax_CatchAdditions) - -- (FBLPromise* (^)(FBLPromiseCatchWorkBlock))catch { - return ^(FBLPromiseCatchWorkBlock catch) { - return [self catch:catch]; - }; -} - -- (FBLPromise* (^)(dispatch_queue_t, FBLPromiseCatchWorkBlock))catchOn { - return ^(dispatch_queue_t queue, FBLPromiseCatchWorkBlock catch) { - return [self onQueue:queue catch:catch]; - }; -} - -@end diff --git a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Delay.m b/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Delay.m deleted file mode 100644 index ce94c33687..0000000000 --- a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Delay.m +++ /dev/null @@ -1,59 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise+Delay.h" - -#import "FBLPromisePrivate.h" - -@implementation FBLPromise (DelayAdditions) - -- (FBLPromise *)delay:(NSTimeInterval)interval { - return [self onQueue:FBLPromise.defaultDispatchQueue delay:interval]; -} - -- (FBLPromise *)onQueue:(dispatch_queue_t)queue delay:(NSTimeInterval)interval { - NSParameterAssert(queue); - - FBLPromise *promise = [[FBLPromise alloc] initPending]; - [self observeOnQueue:queue - fulfill:^(id __nullable value) { - dispatch_after(dispatch_time(0, (int64_t)(interval * NSEC_PER_SEC)), queue, ^{ - [promise fulfill:value]; - }); - } - reject:^(NSError *error) { - [promise reject:error]; - }]; - return promise; -} - -@end - -@implementation FBLPromise (DotSyntax_DelayAdditions) - -- (FBLPromise * (^)(NSTimeInterval))delay { - return ^(NSTimeInterval interval) { - return [self delay:interval]; - }; -} - -- (FBLPromise * (^)(dispatch_queue_t, NSTimeInterval))delayOn { - return ^(dispatch_queue_t queue, NSTimeInterval interval) { - return [self onQueue:queue delay:interval]; - }; -} - -@end diff --git a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Do.m b/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Do.m deleted file mode 100644 index eb7e10dc00..0000000000 --- a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Do.m +++ /dev/null @@ -1,59 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise+Do.h" - -#import "FBLPromisePrivate.h" - -@implementation FBLPromise (DoAdditions) - -+ (instancetype)do:(FBLPromiseDoWorkBlock)work { - return [self onQueue:self.defaultDispatchQueue do:work]; -} - -+ (instancetype)onQueue:(dispatch_queue_t)queue do:(FBLPromiseDoWorkBlock)work { - NSParameterAssert(queue); - NSParameterAssert(work); - - FBLPromise *promise = [[FBLPromise alloc] initPending]; - dispatch_group_async(FBLPromise.dispatchGroup, queue, ^{ - id value = work(); - if ([value isKindOfClass:[FBLPromise class]]) { - [(FBLPromise *)value observeOnQueue:queue - fulfill:^(id __nullable value) { - [promise fulfill:value]; - } - reject:^(NSError *error) { - [promise reject:error]; - }]; - } else { - [promise fulfill:value]; - } - }); - return promise; -} - -@end - -@implementation FBLPromise (DotSyntax_DoAdditions) - -+ (FBLPromise* (^)(dispatch_queue_t, FBLPromiseDoWorkBlock))doOn { - return ^(dispatch_queue_t queue, FBLPromiseDoWorkBlock work) { - return [self onQueue:queue do:work]; - }; -} - -@end diff --git a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Race.m b/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Race.m deleted file mode 100644 index b5bd9f1407..0000000000 --- a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Race.m +++ /dev/null @@ -1,65 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise+Race.h" - -#import "FBLPromise+Async.h" -#import "FBLPromisePrivate.h" - -@implementation FBLPromise (RaceAdditions) - -+ (instancetype)race:(NSArray *)promises { - return [self onQueue:self.defaultDispatchQueue race:promises]; -} - -+ (instancetype)onQueue:(dispatch_queue_t)queue race:(NSArray *)racePromises { - NSParameterAssert(queue); - NSAssert(racePromises.count > 0, @"No promises to observe"); - - NSArray *promises = [racePromises copy]; - return [FBLPromise onQueue:queue - async:^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock reject) { - for (id promise in promises) { - if (![promise isKindOfClass:self]) { - fulfill(promise); - return; - } - } - // Subscribe all, but only the first one to resolve will change - // the resulting promise's state. - for (FBLPromise *promise in promises) { - [promise observeOnQueue:queue fulfill:fulfill reject:reject]; - } - }]; -} - -@end - -@implementation FBLPromise (DotSyntax_RaceAdditions) - -+ (FBLPromise * (^)(NSArray *))race { - return ^(NSArray *promises) { - return [self race:promises]; - }; -} - -+ (FBLPromise * (^)(dispatch_queue_t, NSArray *))raceOn { - return ^(dispatch_queue_t queue, NSArray *promises) { - return [self onQueue:queue race:promises]; - }; -} - -@end diff --git a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Recover.m b/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Recover.m deleted file mode 100644 index 0c9326afc5..0000000000 --- a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Recover.m +++ /dev/null @@ -1,54 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise+Recover.h" - -#import "FBLPromisePrivate.h" - -@implementation FBLPromise (RecoverAdditions) - -- (FBLPromise *)recover:(FBLPromiseRecoverWorkBlock)recovery { - return [self onQueue:FBLPromise.defaultDispatchQueue recover:recovery]; -} - -- (FBLPromise *)onQueue:(dispatch_queue_t)queue recover:(FBLPromiseRecoverWorkBlock)recovery { - NSParameterAssert(queue); - NSParameterAssert(recovery); - - return [self chainOnQueue:queue - chainedFulfill:nil - chainedReject:^id(NSError *error) { - return recovery(error); - }]; -} - -@end - -@implementation FBLPromise (DotSyntax_RecoverAdditions) - -- (FBLPromise * (^)(FBLPromiseRecoverWorkBlock))recover { - return ^(FBLPromiseRecoverWorkBlock recovery) { - return [self recover:recovery]; - }; -} - -- (FBLPromise * (^)(dispatch_queue_t, FBLPromiseRecoverWorkBlock))recoverOn { - return ^(dispatch_queue_t queue, FBLPromiseRecoverWorkBlock recovery) { - return [self onQueue:queue recover:recovery]; - }; -} - -@end diff --git a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Reduce.m b/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Reduce.m deleted file mode 100644 index 1f3fc50dcb..0000000000 --- a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Reduce.m +++ /dev/null @@ -1,61 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise+Reduce.h" - -#import "FBLPromisePrivate.h" - -@implementation FBLPromise (ReduceAdditions) - -- (FBLPromise *)reduce:(NSArray *)items combine:(FBLPromiseReducerBlock)reducer { - return [self onQueue:FBLPromise.defaultDispatchQueue reduce:items combine:reducer]; -} - -- (FBLPromise *)onQueue:(dispatch_queue_t)queue - reduce:(NSArray *)items - combine:(FBLPromiseReducerBlock)reducer { - NSParameterAssert(queue); - NSParameterAssert(items); - NSParameterAssert(reducer); - - FBLPromise *promise = self; - for (id item in items) { - promise = [promise chainOnQueue:queue - chainedFulfill:^id(id value) { - return reducer(value, item); - } - chainedReject:nil]; - } - return promise; -} - -@end - -@implementation FBLPromise (DotSyntax_ReduceAdditions) - -- (FBLPromise * (^)(NSArray *, FBLPromiseReducerBlock))reduce { - return ^(NSArray *items, FBLPromiseReducerBlock reducer) { - return [self reduce:items combine:reducer]; - }; -} - -- (FBLPromise * (^)(dispatch_queue_t, NSArray *, FBLPromiseReducerBlock))reduceOn { - return ^(dispatch_queue_t queue, NSArray *items, FBLPromiseReducerBlock reducer) { - return [self onQueue:queue reduce:items combine:reducer]; - }; -} - -@end diff --git a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Retry.m b/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Retry.m deleted file mode 100644 index 37c557624c..0000000000 --- a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Retry.m +++ /dev/null @@ -1,128 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise+Retry.h" - -#import "FBLPromisePrivate.h" - -NSInteger const FBLPromiseRetryDefaultAttemptsCount = 1; -NSTimeInterval const FBLPromiseRetryDefaultDelayInterval = 1.0; - -static void FBLPromiseRetryAttempt(FBLPromise *promise, dispatch_queue_t queue, NSInteger count, - NSTimeInterval interval, FBLPromiseRetryPredicateBlock predicate, - FBLPromiseRetryWorkBlock work) { - __auto_type retrier = ^(id __nullable value) { - if ([value isKindOfClass:[NSError class]]) { - if (count <= 0 || (predicate && !predicate(count, value))) { - [promise reject:value]; - } else { - dispatch_after(dispatch_time(0, (int64_t)(interval * NSEC_PER_SEC)), queue, ^{ - FBLPromiseRetryAttempt(promise, queue, count - 1, interval, predicate, work); - }); - } - } else { - [promise fulfill:value]; - } - }; - id value = work(); - if ([value isKindOfClass:[FBLPromise class]]) { - [(FBLPromise *)value observeOnQueue:queue fulfill:retrier reject:retrier]; - } else { - retrier(value); - } -} - -@implementation FBLPromise (RetryAdditions) - -+ (FBLPromise *)retry:(FBLPromiseRetryWorkBlock)work { - return [self onQueue:FBLPromise.defaultDispatchQueue retry:work]; -} - -+ (FBLPromise *)onQueue:(dispatch_queue_t)queue retry:(FBLPromiseRetryWorkBlock)work { - return [self onQueue:queue attempts:FBLPromiseRetryDefaultAttemptsCount retry:work]; -} - -+ (FBLPromise *)attempts:(NSInteger)count retry:(FBLPromiseRetryWorkBlock)work { - return [self onQueue:FBLPromise.defaultDispatchQueue attempts:count retry:work]; -} - -+ (FBLPromise *)onQueue:(dispatch_queue_t)queue - attempts:(NSInteger)count - retry:(FBLPromiseRetryWorkBlock)work { - return [self onQueue:queue - attempts:count - delay:FBLPromiseRetryDefaultDelayInterval - condition:nil - retry:work]; -} - -+ (FBLPromise *)attempts:(NSInteger)count - delay:(NSTimeInterval)interval - condition:(nullable FBLPromiseRetryPredicateBlock)predicate - retry:(FBLPromiseRetryWorkBlock)work { - return [self onQueue:FBLPromise.defaultDispatchQueue - attempts:count - delay:interval - condition:predicate - retry:work]; -} - -+ (FBLPromise *)onQueue:(dispatch_queue_t)queue - attempts:(NSInteger)count - delay:(NSTimeInterval)interval - condition:(nullable FBLPromiseRetryPredicateBlock)predicate - retry:(FBLPromiseRetryWorkBlock)work { - NSParameterAssert(queue); - NSParameterAssert(work); - - FBLPromise *promise = [[FBLPromise alloc] initPending]; - FBLPromiseRetryAttempt(promise, queue, count, interval, predicate, work); - return promise; -} - -@end - -@implementation FBLPromise (DotSyntax_RetryAdditions) - -+ (FBLPromise * (^)(FBLPromiseRetryWorkBlock))retry { - return ^id(FBLPromiseRetryWorkBlock work) { - return [self retry:work]; - }; -} - -+ (FBLPromise * (^)(dispatch_queue_t, FBLPromiseRetryWorkBlock))retryOn { - return ^id(dispatch_queue_t queue, FBLPromiseRetryWorkBlock work) { - return [self onQueue:queue retry:work]; - }; -} - -+ (FBLPromise * (^)(NSInteger, NSTimeInterval, FBLPromiseRetryPredicateBlock, - FBLPromiseRetryWorkBlock))retryAgain { - return ^id(NSInteger count, NSTimeInterval interval, FBLPromiseRetryPredicateBlock predicate, - FBLPromiseRetryWorkBlock work) { - return [self attempts:count delay:interval condition:predicate retry:work]; - }; -} - -+ (FBLPromise * (^)(dispatch_queue_t, NSInteger, NSTimeInterval, FBLPromiseRetryPredicateBlock, - FBLPromiseRetryWorkBlock))retryAgainOn { - return ^id(dispatch_queue_t queue, NSInteger count, NSTimeInterval interval, - FBLPromiseRetryPredicateBlock predicate, FBLPromiseRetryWorkBlock work) { - return [self onQueue:queue attempts:count delay:interval condition:predicate retry:work]; - }; -} - -@end diff --git a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Testing.m b/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Testing.m deleted file mode 100644 index 33d353680a..0000000000 --- a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Testing.m +++ /dev/null @@ -1,55 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise+Testing.h" - -BOOL FBLWaitForPromisesWithTimeout(NSTimeInterval timeout) { - BOOL isTimedOut = NO; - NSDate *timeoutDate = [NSDate dateWithTimeIntervalSinceNow:timeout]; - static NSTimeInterval const minimalTimeout = 0.01; - static int64_t const minimalTimeToWait = (int64_t)(minimalTimeout * NSEC_PER_SEC); - dispatch_time_t waitTime = dispatch_time(DISPATCH_TIME_NOW, minimalTimeToWait); - dispatch_group_t dispatchGroup = FBLPromise.dispatchGroup; - NSRunLoop *runLoop = NSRunLoop.currentRunLoop; - while (dispatch_group_wait(dispatchGroup, waitTime)) { - isTimedOut = timeoutDate.timeIntervalSinceNow < 0.0; - if (isTimedOut) { - break; - } - [runLoop runUntilDate:[NSDate dateWithTimeIntervalSinceNow:minimalTimeout]]; - } - return !isTimedOut; -} - -@implementation FBLPromise (TestingAdditions) - -// These properties are implemented in the FBLPromise class itself. -@dynamic isPending; -@dynamic isFulfilled; -@dynamic isRejected; -@dynamic value; -@dynamic error; - -+ (dispatch_group_t)dispatchGroup { - static dispatch_group_t gDispatchGroup; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - gDispatchGroup = dispatch_group_create(); - }); - return gDispatchGroup; -} - -@end diff --git a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Then.m b/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Then.m deleted file mode 100644 index ab03bd1263..0000000000 --- a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Then.m +++ /dev/null @@ -1,50 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise+Then.h" - -#import "FBLPromisePrivate.h" - -@implementation FBLPromise (ThenAdditions) - -- (FBLPromise *)then:(FBLPromiseThenWorkBlock)work { - return [self onQueue:FBLPromise.defaultDispatchQueue then:work]; -} - -- (FBLPromise *)onQueue:(dispatch_queue_t)queue then:(FBLPromiseThenWorkBlock)work { - NSParameterAssert(queue); - NSParameterAssert(work); - - return [self chainOnQueue:queue chainedFulfill:work chainedReject:nil]; -} - -@end - -@implementation FBLPromise (DotSyntax_ThenAdditions) - -- (FBLPromise* (^)(FBLPromiseThenWorkBlock))then { - return ^(FBLPromiseThenWorkBlock work) { - return [self then:work]; - }; -} - -- (FBLPromise* (^)(dispatch_queue_t, FBLPromiseThenWorkBlock))thenOn { - return ^(dispatch_queue_t queue, FBLPromiseThenWorkBlock work) { - return [self onQueue:queue then:work]; - }; -} - -@end diff --git a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Timeout.m b/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Timeout.m deleted file mode 100644 index a2252e65bc..0000000000 --- a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Timeout.m +++ /dev/null @@ -1,64 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise+Timeout.h" - -#import "FBLPromisePrivate.h" - -@implementation FBLPromise (TimeoutAdditions) - -- (FBLPromise *)timeout:(NSTimeInterval)interval { - return [self onQueue:FBLPromise.defaultDispatchQueue timeout:interval]; -} - -- (FBLPromise *)onQueue:(dispatch_queue_t)queue timeout:(NSTimeInterval)interval { - NSParameterAssert(queue); - - FBLPromise *promise = [[FBLPromise alloc] initPending]; - [self observeOnQueue:queue - fulfill:^(id __nullable value) { - [promise fulfill:value]; - } - reject:^(NSError *error) { - [promise reject:error]; - }]; - typeof(self) __weak weakPromise = promise; - dispatch_after(dispatch_time(0, (int64_t)(interval * NSEC_PER_SEC)), queue, ^{ - NSError *timedOutError = [[NSError alloc] initWithDomain:FBLPromiseErrorDomain - code:FBLPromiseErrorCodeTimedOut - userInfo:nil]; - [weakPromise reject:timedOutError]; - }); - return promise; -} - -@end - -@implementation FBLPromise (DotSyntax_TimeoutAdditions) - -- (FBLPromise* (^)(NSTimeInterval))timeout { - return ^(NSTimeInterval interval) { - return [self timeout:interval]; - }; -} - -- (FBLPromise* (^)(dispatch_queue_t, NSTimeInterval))timeoutOn { - return ^(dispatch_queue_t queue, NSTimeInterval interval) { - return [self onQueue:queue timeout:interval]; - }; -} - -@end diff --git a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Validate.m b/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Validate.m deleted file mode 100644 index 1e21e81b35..0000000000 --- a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Validate.m +++ /dev/null @@ -1,56 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise+Validate.h" - -#import "FBLPromisePrivate.h" - -@implementation FBLPromise (ValidateAdditions) - -- (FBLPromise*)validate:(FBLPromiseValidateWorkBlock)predicate { - return [self onQueue:FBLPromise.defaultDispatchQueue validate:predicate]; -} - -- (FBLPromise*)onQueue:(dispatch_queue_t)queue validate:(FBLPromiseValidateWorkBlock)predicate { - NSParameterAssert(queue); - NSParameterAssert(predicate); - - FBLPromiseChainedFulfillBlock chainedFulfill = ^id(id value) { - return predicate(value) ? value : - [[NSError alloc] initWithDomain:FBLPromiseErrorDomain - code:FBLPromiseErrorCodeValidationFailure - userInfo:nil]; - }; - return [self chainOnQueue:queue chainedFulfill:chainedFulfill chainedReject:nil]; -} - -@end - -@implementation FBLPromise (DotSyntax_ValidateAdditions) - -- (FBLPromise* (^)(FBLPromiseValidateWorkBlock))validate { - return ^(FBLPromiseValidateWorkBlock predicate) { - return [self validate:predicate]; - }; -} - -- (FBLPromise* (^)(dispatch_queue_t, FBLPromiseValidateWorkBlock))validateOn { - return ^(dispatch_queue_t queue, FBLPromiseValidateWorkBlock predicate) { - return [self onQueue:queue validate:predicate]; - }; -} - -@end diff --git a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Wrap.m b/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Wrap.m deleted file mode 100644 index 3d3341eb51..0000000000 --- a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Wrap.m +++ /dev/null @@ -1,420 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise+Wrap.h" - -#import "FBLPromise+Async.h" - -@implementation FBLPromise (WrapAdditions) - -+ (instancetype)wrapCompletion:(void (^)(FBLPromiseCompletion))work { - return [self onQueue:self.defaultDispatchQueue wrapCompletion:work]; -} - -+ (instancetype)onQueue:(dispatch_queue_t)queue - wrapCompletion:(void (^)(FBLPromiseCompletion))work { - NSParameterAssert(queue); - NSParameterAssert(work); - - return [self onQueue:queue - async:^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock __unused _) { - work(^{ - fulfill(nil); - }); - }]; -} - -+ (instancetype)wrapObjectCompletion:(void (^)(FBLPromiseObjectCompletion))work { - return [self onQueue:self.defaultDispatchQueue wrapObjectCompletion:work]; -} - -+ (instancetype)onQueue:(dispatch_queue_t)queue - wrapObjectCompletion:(void (^)(FBLPromiseObjectCompletion))work { - NSParameterAssert(queue); - NSParameterAssert(work); - - return [self onQueue:queue - async:^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock __unused _) { - work(^(id __nullable value) { - fulfill(value); - }); - }]; -} - -+ (instancetype)wrapErrorCompletion:(void (^)(FBLPromiseErrorCompletion))work { - return [self onQueue:self.defaultDispatchQueue wrapErrorCompletion:work]; -} - -+ (instancetype)onQueue:(dispatch_queue_t)queue - wrapErrorCompletion:(void (^)(FBLPromiseErrorCompletion))work { - NSParameterAssert(queue); - NSParameterAssert(work); - - return [self onQueue:queue - async:^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock reject) { - work(^(NSError *__nullable error) { - if (error) { - reject(error); - } else { - fulfill(nil); - } - }); - }]; -} - -+ (instancetype)wrapObjectOrErrorCompletion:(void (^)(FBLPromiseObjectOrErrorCompletion))work { - return [self onQueue:self.defaultDispatchQueue wrapObjectOrErrorCompletion:work]; -} - -+ (instancetype)onQueue:(dispatch_queue_t)queue - wrapObjectOrErrorCompletion:(void (^)(FBLPromiseObjectOrErrorCompletion))work { - NSParameterAssert(queue); - NSParameterAssert(work); - - return [self onQueue:queue - async:^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock reject) { - work(^(id __nullable value, NSError *__nullable error) { - if (error) { - reject(error); - } else { - fulfill(value); - } - }); - }]; -} - -+ (instancetype)wrapErrorOrObjectCompletion:(void (^)(FBLPromiseErrorOrObjectCompletion))work { - return [self onQueue:self.defaultDispatchQueue wrapErrorOrObjectCompletion:work]; -} - -+ (instancetype)onQueue:(dispatch_queue_t)queue - wrapErrorOrObjectCompletion:(void (^)(FBLPromiseErrorOrObjectCompletion))work { - NSParameterAssert(queue); - NSParameterAssert(work); - - return [self onQueue:queue - async:^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock reject) { - work(^(NSError *__nullable error, id __nullable value) { - if (error) { - reject(error); - } else { - fulfill(value); - } - }); - }]; -} - -+ (FBLPromise *)wrap2ObjectsOrErrorCompletion: - (void (^)(FBLPromise2ObjectsOrErrorCompletion))work { - return [self onQueue:self.defaultDispatchQueue wrap2ObjectsOrErrorCompletion:work]; -} - -+ (FBLPromise *)onQueue:(dispatch_queue_t)queue - wrap2ObjectsOrErrorCompletion:(void (^)(FBLPromise2ObjectsOrErrorCompletion))work { - NSParameterAssert(queue); - NSParameterAssert(work); - - return [self onQueue:queue - async:^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock reject) { - work(^(id __nullable value1, id __nullable value2, NSError *__nullable error) { - if (error) { - reject(error); - } else { - fulfill(@[ value1, value2 ]); - } - }); - }]; -} - -+ (FBLPromise *)wrapBoolCompletion:(void (^)(FBLPromiseBoolCompletion))work { - return [self onQueue:self.defaultDispatchQueue wrapBoolCompletion:work]; -} - -+ (FBLPromise *)onQueue:(dispatch_queue_t)queue - wrapBoolCompletion:(void (^)(FBLPromiseBoolCompletion))work { - NSParameterAssert(queue); - NSParameterAssert(work); - - return [self onQueue:queue - async:^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock __unused _) { - work(^(BOOL value) { - fulfill(@(value)); - }); - }]; -} - -+ (FBLPromise *)wrapBoolOrErrorCompletion: - (void (^)(FBLPromiseBoolOrErrorCompletion))work { - return [self onQueue:self.defaultDispatchQueue wrapBoolOrErrorCompletion:work]; -} - -+ (FBLPromise *)onQueue:(dispatch_queue_t)queue - wrapBoolOrErrorCompletion:(void (^)(FBLPromiseBoolOrErrorCompletion))work { - NSParameterAssert(queue); - NSParameterAssert(work); - - return [self onQueue:queue - async:^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock reject) { - work(^(BOOL value, NSError *__nullable error) { - if (error) { - reject(error); - } else { - fulfill(@(value)); - } - }); - }]; -} - -+ (FBLPromise *)wrapIntegerCompletion:(void (^)(FBLPromiseIntegerCompletion))work { - return [self onQueue:self.defaultDispatchQueue wrapIntegerCompletion:work]; -} - -+ (FBLPromise *)onQueue:(dispatch_queue_t)queue - wrapIntegerCompletion:(void (^)(FBLPromiseIntegerCompletion))work { - NSParameterAssert(queue); - NSParameterAssert(work); - - return [self onQueue:queue - async:^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock __unused _) { - work(^(NSInteger value) { - fulfill(@(value)); - }); - }]; -} - -+ (FBLPromise *)wrapIntegerOrErrorCompletion: - (void (^)(FBLPromiseIntegerOrErrorCompletion))work { - return [self onQueue:self.defaultDispatchQueue wrapIntegerOrErrorCompletion:work]; -} - -+ (FBLPromise *)onQueue:(dispatch_queue_t)queue - wrapIntegerOrErrorCompletion:(void (^)(FBLPromiseIntegerOrErrorCompletion))work { - NSParameterAssert(queue); - NSParameterAssert(work); - - return [self onQueue:queue - async:^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock reject) { - work(^(NSInteger value, NSError *__nullable error) { - if (error) { - reject(error); - } else { - fulfill(@(value)); - } - }); - }]; -} - -+ (FBLPromise *)wrapDoubleCompletion:(void (^)(FBLPromiseDoubleCompletion))work { - return [self onQueue:self.defaultDispatchQueue wrapDoubleCompletion:work]; -} - -+ (FBLPromise *)onQueue:(dispatch_queue_t)queue - wrapDoubleCompletion:(void (^)(FBLPromiseDoubleCompletion))work { - NSParameterAssert(queue); - NSParameterAssert(work); - - return [self onQueue:(dispatch_queue_t)queue - async:^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock __unused _) { - work(^(double value) { - fulfill(@(value)); - }); - }]; -} - -+ (FBLPromise *)wrapDoubleOrErrorCompletion: - (void (^)(FBLPromiseDoubleOrErrorCompletion))work { - return [self onQueue:self.defaultDispatchQueue wrapDoubleOrErrorCompletion:work]; -} - -+ (FBLPromise *)onQueue:(dispatch_queue_t)queue - wrapDoubleOrErrorCompletion:(void (^)(FBLPromiseDoubleOrErrorCompletion))work { - NSParameterAssert(queue); - NSParameterAssert(work); - - return [self onQueue:queue - async:^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock reject) { - work(^(double value, NSError *__nullable error) { - if (error) { - reject(error); - } else { - fulfill(@(value)); - } - }); - }]; -} - -@end - -@implementation FBLPromise (DotSyntax_WrapAdditions) - -+ (FBLPromise * (^)(void (^)(FBLPromiseCompletion)))wrapCompletion { - return ^(void (^work)(FBLPromiseCompletion)) { - return [self wrapCompletion:work]; - }; -} - -+ (FBLPromise * (^)(dispatch_queue_t, void (^)(FBLPromiseCompletion)))wrapCompletionOn { - return ^(dispatch_queue_t queue, void (^work)(FBLPromiseCompletion)) { - return [self onQueue:queue wrapCompletion:work]; - }; -} - -+ (FBLPromise * (^)(void (^)(FBLPromiseObjectCompletion)))wrapObjectCompletion { - return ^(void (^work)(FBLPromiseObjectCompletion)) { - return [self wrapObjectCompletion:work]; - }; -} - -+ (FBLPromise * (^)(dispatch_queue_t, void (^)(FBLPromiseObjectCompletion)))wrapObjectCompletionOn { - return ^(dispatch_queue_t queue, void (^work)(FBLPromiseObjectCompletion)) { - return [self onQueue:queue wrapObjectCompletion:work]; - }; -} - -+ (FBLPromise * (^)(void (^)(FBLPromiseErrorCompletion)))wrapErrorCompletion { - return ^(void (^work)(FBLPromiseErrorCompletion)) { - return [self wrapErrorCompletion:work]; - }; -} - -+ (FBLPromise * (^)(dispatch_queue_t, void (^)(FBLPromiseErrorCompletion)))wrapErrorCompletionOn { - return ^(dispatch_queue_t queue, void (^work)(FBLPromiseErrorCompletion)) { - return [self onQueue:queue wrapErrorCompletion:work]; - }; -} - -+ (FBLPromise * (^)(void (^)(FBLPromiseObjectOrErrorCompletion)))wrapObjectOrErrorCompletion { - return ^(void (^work)(FBLPromiseObjectOrErrorCompletion)) { - return [self wrapObjectOrErrorCompletion:work]; - }; -} - -+ (FBLPromise * (^)(dispatch_queue_t, - void (^)(FBLPromiseObjectOrErrorCompletion)))wrapObjectOrErrorCompletionOn { - return ^(dispatch_queue_t queue, void (^work)(FBLPromiseObjectOrErrorCompletion)) { - return [self onQueue:queue wrapObjectOrErrorCompletion:work]; - }; -} - -+ (FBLPromise * (^)(void (^)(FBLPromiseErrorOrObjectCompletion)))wrapErrorOrObjectCompletion { - return ^(void (^work)(FBLPromiseErrorOrObjectCompletion)) { - return [self wrapErrorOrObjectCompletion:work]; - }; -} - -+ (FBLPromise * (^)(dispatch_queue_t, - void (^)(FBLPromiseErrorOrObjectCompletion)))wrapErrorOrObjectCompletionOn { - return ^(dispatch_queue_t queue, void (^work)(FBLPromiseErrorOrObjectCompletion)) { - return [self onQueue:queue wrapErrorOrObjectCompletion:work]; - }; -} - -+ (FBLPromise * (^)(void (^)(FBLPromise2ObjectsOrErrorCompletion))) - wrap2ObjectsOrErrorCompletion { - return ^(void (^work)(FBLPromise2ObjectsOrErrorCompletion)) { - return [self wrap2ObjectsOrErrorCompletion:work]; - }; -} - -+ (FBLPromise * (^)(dispatch_queue_t, void (^)(FBLPromise2ObjectsOrErrorCompletion))) - wrap2ObjectsOrErrorCompletionOn { - return ^(dispatch_queue_t queue, void (^work)(FBLPromise2ObjectsOrErrorCompletion)) { - return [self onQueue:queue wrap2ObjectsOrErrorCompletion:work]; - }; -} - -+ (FBLPromise * (^)(void (^)(FBLPromiseBoolCompletion)))wrapBoolCompletion { - return ^(void (^work)(FBLPromiseBoolCompletion)) { - return [self wrapBoolCompletion:work]; - }; -} - -+ (FBLPromise * (^)(dispatch_queue_t, - void (^)(FBLPromiseBoolCompletion)))wrapBoolCompletionOn { - return ^(dispatch_queue_t queue, void (^work)(FBLPromiseBoolCompletion)) { - return [self onQueue:queue wrapBoolCompletion:work]; - }; -} - -+ (FBLPromise * (^)(void (^)(FBLPromiseBoolOrErrorCompletion))) - wrapBoolOrErrorCompletion { - return ^(void (^work)(FBLPromiseBoolOrErrorCompletion)) { - return [self wrapBoolOrErrorCompletion:work]; - }; -} - -+ (FBLPromise * (^)(dispatch_queue_t, void (^)(FBLPromiseBoolOrErrorCompletion))) - wrapBoolOrErrorCompletionOn { - return ^(dispatch_queue_t queue, void (^work)(FBLPromiseBoolOrErrorCompletion)) { - return [self onQueue:queue wrapBoolOrErrorCompletion:work]; - }; -} - -+ (FBLPromise * (^)(void (^)(FBLPromiseIntegerCompletion)))wrapIntegerCompletion { - return ^(void (^work)(FBLPromiseIntegerCompletion)) { - return [self wrapIntegerCompletion:work]; - }; -} - -+ (FBLPromise * (^)(dispatch_queue_t, - void (^)(FBLPromiseIntegerCompletion)))wrapIntegerCompletionOn { - return ^(dispatch_queue_t queue, void (^work)(FBLPromiseIntegerCompletion)) { - return [self onQueue:queue wrapIntegerCompletion:work]; - }; -} - -+ (FBLPromise * (^)(void (^)(FBLPromiseIntegerOrErrorCompletion))) - wrapIntegerOrErrorCompletion { - return ^(void (^work)(FBLPromiseIntegerOrErrorCompletion)) { - return [self wrapIntegerOrErrorCompletion:work]; - }; -} - -+ (FBLPromise * (^)(dispatch_queue_t, void (^)(FBLPromiseIntegerOrErrorCompletion))) - wrapIntegerOrErrorCompletionOn { - return ^(dispatch_queue_t queue, void (^work)(FBLPromiseIntegerOrErrorCompletion)) { - return [self onQueue:queue wrapIntegerOrErrorCompletion:work]; - }; -} - -+ (FBLPromise * (^)(void (^)(FBLPromiseDoubleCompletion)))wrapDoubleCompletion { - return ^(void (^work)(FBLPromiseDoubleCompletion)) { - return [self wrapDoubleCompletion:work]; - }; -} - -+ (FBLPromise * (^)(dispatch_queue_t, - void (^)(FBLPromiseDoubleCompletion)))wrapDoubleCompletionOn { - return ^(dispatch_queue_t queue, void (^work)(FBLPromiseDoubleCompletion)) { - return [self onQueue:queue wrapDoubleCompletion:work]; - }; -} - -+ (FBLPromise * (^)(void (^)(FBLPromiseDoubleOrErrorCompletion))) - wrapDoubleOrErrorCompletion { - return ^(void (^work)(FBLPromiseDoubleOrErrorCompletion)) { - return [self wrapDoubleOrErrorCompletion:work]; - }; -} - -+ (FBLPromise * (^)(dispatch_queue_t, void (^)(FBLPromiseDoubleOrErrorCompletion))) - wrapDoubleOrErrorCompletionOn { - return ^(dispatch_queue_t queue, void (^work)(FBLPromiseDoubleOrErrorCompletion)) { - return [self onQueue:queue wrapDoubleOrErrorCompletion:work]; - }; -} - -@end diff --git a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise.m b/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise.m deleted file mode 100644 index c12ad32887..0000000000 --- a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise.m +++ /dev/null @@ -1,299 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromisePrivate.h" - -/** All states a promise can be in. */ -typedef NS_ENUM(NSInteger, FBLPromiseState) { - FBLPromiseStatePending = 0, - FBLPromiseStateFulfilled, - FBLPromiseStateRejected, -}; - -typedef void (^FBLPromiseObserver)(FBLPromiseState state, id __nullable resolution); - -static dispatch_queue_t gFBLPromiseDefaultDispatchQueue; - -@implementation FBLPromise { - /** Current state of the promise. */ - FBLPromiseState _state; - /** - Set of arbitrary objects to keep strongly while the promise is pending. - Becomes nil after the promise has been resolved. - */ - NSMutableSet *__nullable _pendingObjects; - /** - Value to fulfill the promise with. - Can be nil if the promise is still pending, was resolved with nil or after it has been rejected. - */ - id __nullable _value; - /** - Error to reject the promise with. - Can be nil if the promise is still pending or after it has been fulfilled. - */ - NSError *__nullable _error; - /** List of observers to notify when the promise gets resolved. */ - NSMutableArray *_observers; -} - -+ (void)initialize { - if (self == [FBLPromise class]) { - gFBLPromiseDefaultDispatchQueue = dispatch_get_main_queue(); - } -} - -+ (dispatch_queue_t)defaultDispatchQueue { - @synchronized(self) { - return gFBLPromiseDefaultDispatchQueue; - } -} - -+ (void)setDefaultDispatchQueue:(dispatch_queue_t)queue { - NSParameterAssert(queue); - - @synchronized(self) { - gFBLPromiseDefaultDispatchQueue = queue; - } -} - -+ (instancetype)pendingPromise { - return [[self alloc] initPending]; -} - -+ (instancetype)resolvedWith:(nullable id)resolution { - return [[self alloc] initWithResolution:resolution]; -} - -- (void)fulfill:(nullable id)value { - if ([value isKindOfClass:[NSError class]]) { - [self reject:(NSError *)value]; - } else { - @synchronized(self) { - if (_state == FBLPromiseStatePending) { - _state = FBLPromiseStateFulfilled; - _value = value; - _pendingObjects = nil; - for (FBLPromiseObserver observer in _observers) { - observer(_state, _value); - } - _observers = nil; - dispatch_group_leave(FBLPromise.dispatchGroup); - } - } - } -} - -- (void)reject:(NSError *)error { - NSAssert([error isKindOfClass:[NSError class]], @"Invalid error type."); - - if (![error isKindOfClass:[NSError class]]) { - // Give up on invalid error type in Release mode. - @throw error; // NOLINT - } - @synchronized(self) { - if (_state == FBLPromiseStatePending) { - _state = FBLPromiseStateRejected; - _error = error; - _pendingObjects = nil; - for (FBLPromiseObserver observer in _observers) { - observer(_state, _error); - } - _observers = nil; - dispatch_group_leave(FBLPromise.dispatchGroup); - } - } -} - -#pragma mark - NSObject - -- (NSString *)description { - if (self.isFulfilled) { - return [NSString stringWithFormat:@"<%@ %p> Fulfilled: %@", NSStringFromClass([self class]), - self, self.value]; - } - if (self.isRejected) { - return [NSString stringWithFormat:@"<%@ %p> Rejected: %@", NSStringFromClass([self class]), - self, self.error]; - } - return [NSString stringWithFormat:@"<%@ %p> Pending", NSStringFromClass([self class]), self]; -} - -#pragma mark - Private - -- (instancetype)initPending { - self = [super init]; - if (self) { - dispatch_group_enter(FBLPromise.dispatchGroup); - } - return self; -} - -- (instancetype)initWithResolution:(nullable id)resolution { - self = [super init]; - if (self) { - if ([resolution isKindOfClass:[NSError class]]) { - _state = FBLPromiseStateRejected; - _error = (NSError *)resolution; - } else { - _state = FBLPromiseStateFulfilled; - _value = resolution; - } - } - return self; -} - -- (void)dealloc { - if (_state == FBLPromiseStatePending) { - dispatch_group_leave(FBLPromise.dispatchGroup); - } -} - -- (BOOL)isPending { - @synchronized(self) { - return _state == FBLPromiseStatePending; - } -} - -- (BOOL)isFulfilled { - @synchronized(self) { - return _state == FBLPromiseStateFulfilled; - } -} - -- (BOOL)isRejected { - @synchronized(self) { - return _state == FBLPromiseStateRejected; - } -} - -- (nullable id)value { - @synchronized(self) { - return _value; - } -} - -- (NSError *__nullable)error { - @synchronized(self) { - return _error; - } -} - -- (void)addPendingObject:(id)object { - NSParameterAssert(object); - - @synchronized(self) { - if (_state == FBLPromiseStatePending) { - if (!_pendingObjects) { - _pendingObjects = [[NSMutableSet alloc] init]; - } - [_pendingObjects addObject:object]; - } - } -} - -- (void)observeOnQueue:(dispatch_queue_t)queue - fulfill:(FBLPromiseOnFulfillBlock)onFulfill - reject:(FBLPromiseOnRejectBlock)onReject { - NSParameterAssert(queue); - NSParameterAssert(onFulfill); - NSParameterAssert(onReject); - - @synchronized(self) { - switch (_state) { - case FBLPromiseStatePending: { - if (!_observers) { - _observers = [[NSMutableArray alloc] init]; - } - [_observers addObject:^(FBLPromiseState state, id __nullable resolution) { - dispatch_group_async(FBLPromise.dispatchGroup, queue, ^{ - switch (state) { - case FBLPromiseStatePending: - break; - case FBLPromiseStateFulfilled: - onFulfill(resolution); - break; - case FBLPromiseStateRejected: - onReject(resolution); - break; - } - }); - }]; - break; - } - case FBLPromiseStateFulfilled: { - dispatch_group_async(FBLPromise.dispatchGroup, queue, ^{ - onFulfill(self->_value); - }); - break; - } - case FBLPromiseStateRejected: { - dispatch_group_async(FBLPromise.dispatchGroup, queue, ^{ - onReject(self->_error); - }); - break; - } - } - } -} - -- (FBLPromise *)chainOnQueue:(dispatch_queue_t)queue - chainedFulfill:(FBLPromiseChainedFulfillBlock)chainedFulfill - chainedReject:(FBLPromiseChainedRejectBlock)chainedReject { - NSParameterAssert(queue); - - FBLPromise *promise = [[FBLPromise alloc] initPending]; - __auto_type resolver = ^(id __nullable value) { - if ([value isKindOfClass:[FBLPromise class]]) { - [(FBLPromise *)value observeOnQueue:queue - fulfill:^(id __nullable value) { - [promise fulfill:value]; - } - reject:^(NSError *error) { - [promise reject:error]; - }]; - } else { - [promise fulfill:value]; - } - }; - [self observeOnQueue:queue - fulfill:^(id __nullable value) { - value = chainedFulfill ? chainedFulfill(value) : value; - resolver(value); - } - reject:^(NSError *error) { - id value = chainedReject ? chainedReject(error) : error; - resolver(value); - }]; - return promise; -} - -@end - -@implementation FBLPromise (DotSyntaxAdditions) - -+ (instancetype (^)(void))pending { - return ^(void) { - return [self pendingPromise]; - }; -} - -+ (instancetype (^)(id __nullable))resolved { - return ^(id resolution) { - return [self resolvedWith:resolution]; - }; -} - -@end diff --git a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/FBLPromiseError.m b/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/FBLPromiseError.m deleted file mode 100644 index 1cc181adee..0000000000 --- a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/FBLPromiseError.m +++ /dev/null @@ -1,19 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromiseError.h" - -NSErrorDomain const FBLPromiseErrorDomain = @"com.google.FBLPromises.Error"; diff --git a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+All.h b/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+All.h deleted file mode 100644 index 9c0090e242..0000000000 --- a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+All.h +++ /dev/null @@ -1,63 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FBLPromise(AllAdditions) - -/** - Wait until all of the given promises are fulfilled. - If one of the given promises is rejected, then the returned promise is rejected with same error. - If any other arbitrary value or `NSError` appears in the array instead of `FBLPromise`, - it's implicitly considered a pre-fulfilled or pre-rejected `FBLPromise` correspondingly. - Promises resolved with `nil` become `NSNull` instances in the resulting array. - - @param promises Promises to wait for. - @return Promise of an array containing the values of input promises in the same order. - */ -+ (FBLPromise *)all:(NSArray *)promises NS_SWIFT_UNAVAILABLE(""); - -/** - Wait until all of the given promises are fulfilled. - If one of the given promises is rejected, then the returned promise is rejected with same error. - If any other arbitrary value or `NSError` appears in the array instead of `FBLPromise`, - it's implicitly considered a pre-fulfilled or pre-rejected FBLPromise correspondingly. - Promises resolved with `nil` become `NSNull` instances in the resulting array. - - @param queue A queue to dispatch on. - @param promises Promises to wait for. - @return Promise of an array containing the values of input promises in the same order. - */ -+ (FBLPromise *)onQueue:(dispatch_queue_t)queue - all:(NSArray *)promises NS_REFINED_FOR_SWIFT; - -@end - -/** - Convenience dot-syntax wrappers for `FBLPromise` `all` operators. - Usage: FBLPromise.all(@[ ... ]) - */ -@interface FBLPromise(DotSyntax_AllAdditions) - -+ (FBLPromise * (^)(NSArray *))all FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); -+ (FBLPromise * (^)(dispatch_queue_t, NSArray *))allOn FBL_PROMISES_DOT_SYNTAX - NS_SWIFT_UNAVAILABLE(""); - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Always.h b/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Always.h deleted file mode 100644 index 13000f5b45..0000000000 --- a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Always.h +++ /dev/null @@ -1,54 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FBLPromise(AlwaysAdditions) - -typedef void (^FBLPromiseAlwaysWorkBlock)(void) NS_SWIFT_UNAVAILABLE(""); - -/** - @param work A block that always executes, no matter if the receiver is rejected or fulfilled. - @return A new pending promise to be resolved with same resolution as the receiver. - */ -- (FBLPromise *)always:(FBLPromiseAlwaysWorkBlock)work NS_SWIFT_UNAVAILABLE(""); - -/** - @param queue A queue to dispatch on. - @param work A block that always executes, no matter if the receiver is rejected or fulfilled. - @return A new pending promise to be resolved with same resolution as the receiver. - */ -- (FBLPromise *)onQueue:(dispatch_queue_t)queue - always:(FBLPromiseAlwaysWorkBlock)work NS_REFINED_FOR_SWIFT; - -@end - -/** - Convenience dot-syntax wrappers for `FBLPromise` `always` operators. - Usage: promise.always(^{...}) - */ -@interface FBLPromise(DotSyntax_AlwaysAdditions) - -- (FBLPromise* (^)(FBLPromiseAlwaysWorkBlock))always FBL_PROMISES_DOT_SYNTAX - NS_SWIFT_UNAVAILABLE(""); -- (FBLPromise* (^)(dispatch_queue_t, FBLPromiseAlwaysWorkBlock))alwaysOn FBL_PROMISES_DOT_SYNTAX - NS_SWIFT_UNAVAILABLE(""); - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Any.h b/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Any.h deleted file mode 100644 index 82875bf77f..0000000000 --- a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Any.h +++ /dev/null @@ -1,69 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FBLPromise(AnyAdditions) - -/** - Waits until all of the given promises are either fulfilled or rejected. - If all promises are rejected, then the returned promise is rejected with same error - as the last one rejected. - If at least one of the promises is fulfilled, the resulting promise is fulfilled with an array of - values or `NSErrors`, matching the original order of fulfilled or rejected promises respectively. - If any other arbitrary value or `NSError` appears in the array instead of `FBLPromise`, - it's implicitly considered a pre-fulfilled or pre-rejected `FBLPromise` correspondingly. - Promises resolved with `nil` become `NSNull` instances in the resulting array. - - @param promises Promises to wait for. - @return Promise of array containing the values or `NSError`s of input promises in the same order. - */ -+ (FBLPromise *)any:(NSArray *)promises NS_SWIFT_UNAVAILABLE(""); - -/** - Waits until all of the given promises are either fulfilled or rejected. - If all promises are rejected, then the returned promise is rejected with same error - as the last one rejected. - If at least one of the promises is fulfilled, the resulting promise is fulfilled with an array of - values or `NSError`s, matching the original order of fulfilled or rejected promises respectively. - If any other arbitrary value or `NSError` appears in the array instead of `FBLPromise`, - it's implicitly considered a pre-fulfilled or pre-rejected `FBLPromise` correspondingly. - Promises resolved with `nil` become `NSNull` instances in the resulting array. - - @param queue A queue to dispatch on. - @param promises Promises to wait for. - @return Promise of array containing the values or `NSError`s of input promises in the same order. - */ -+ (FBLPromise *)onQueue:(dispatch_queue_t)queue - any:(NSArray *)promises NS_REFINED_FOR_SWIFT; - -@end - -/** - Convenience dot-syntax wrappers for `FBLPromise` `any` operators. - Usage: FBLPromise.any(@[ ... ]) - */ -@interface FBLPromise(DotSyntax_AnyAdditions) - -+ (FBLPromise * (^)(NSArray *))any FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); -+ (FBLPromise * (^)(dispatch_queue_t, NSArray *))anyOn FBL_PROMISES_DOT_SYNTAX - NS_SWIFT_UNAVAILABLE(""); - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Async.h b/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Async.h deleted file mode 100644 index 0588a9eafa..0000000000 --- a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Async.h +++ /dev/null @@ -1,60 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FBLPromise(AsyncAdditions) - -typedef void (^FBLPromiseFulfillBlock)(Value __nullable value) NS_SWIFT_UNAVAILABLE(""); -typedef void (^FBLPromiseRejectBlock)(NSError *error) NS_SWIFT_UNAVAILABLE(""); -typedef void (^FBLPromiseAsyncWorkBlock)(FBLPromiseFulfillBlock fulfill, - FBLPromiseRejectBlock reject) NS_SWIFT_UNAVAILABLE(""); - -/** - Creates a pending promise and executes `work` block asynchronously. - - @param work A block to perform any operations needed to resolve the promise. - @return A new pending promise. - */ -+ (instancetype)async:(FBLPromiseAsyncWorkBlock)work NS_SWIFT_UNAVAILABLE(""); - -/** - Creates a pending promise and executes `work` block asynchronously on the given queue. - - @param queue A queue to invoke the `work` block on. - @param work A block to perform any operations needed to resolve the promise. - @return A new pending promise. - */ -+ (instancetype)onQueue:(dispatch_queue_t)queue - async:(FBLPromiseAsyncWorkBlock)work NS_REFINED_FOR_SWIFT; - -@end - -/** - Convenience dot-syntax wrappers for `FBLPromise` `async` operators. - Usage: FBLPromise.async(^(FBLPromiseFulfillBlock fulfill, FBLPromiseRejectBlock reject) { ... }) - */ -@interface FBLPromise(DotSyntax_AsyncAdditions) - -+ (FBLPromise* (^)(FBLPromiseAsyncWorkBlock))async FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); -+ (FBLPromise* (^)(dispatch_queue_t, FBLPromiseAsyncWorkBlock))asyncOn FBL_PROMISES_DOT_SYNTAX - NS_SWIFT_UNAVAILABLE(""); - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Await.h b/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Await.h deleted file mode 100644 index c97a1baf41..0000000000 --- a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Await.h +++ /dev/null @@ -1,32 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - Waits for promise resolution. The current thread blocks until the promise is resolved. - - @param promise Promise to wait for. - @param error Error the promise was rejected with, or `nil` if the promise was fulfilled. - @return Value the promise was fulfilled with. If the promise was rejected, the return value - is always `nil`, but the error out arg is not. - */ -FOUNDATION_EXTERN id __nullable FBLPromiseAwait(FBLPromise *promise, - NSError **error) NS_REFINED_FOR_SWIFT; - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Catch.h b/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Catch.h deleted file mode 100644 index a9ff170fc5..0000000000 --- a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Catch.h +++ /dev/null @@ -1,59 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FBLPromise(CatchAdditions) - -typedef void (^FBLPromiseCatchWorkBlock)(NSError *error) NS_SWIFT_UNAVAILABLE(""); - -/** - Creates a pending promise which eventually gets resolved with same resolution as the receiver. - If receiver is rejected, then `reject` block is executed asynchronously. - - @param reject A block to handle the error that receiver was rejected with. - @return A new pending promise. - */ -- (FBLPromise *)catch:(FBLPromiseCatchWorkBlock)reject NS_SWIFT_UNAVAILABLE(""); - -/** - Creates a pending promise which eventually gets resolved with same resolution as the receiver. - If receiver is rejected, then `reject` block is executed asynchronously on the given queue. - - @param queue A queue to invoke the `reject` block on. - @param reject A block to handle the error that receiver was rejected with. - @return A new pending promise. - */ -- (FBLPromise *)onQueue:(dispatch_queue_t)queue - catch:(FBLPromiseCatchWorkBlock)reject NS_REFINED_FOR_SWIFT; - -@end - -/** - Convenience dot-syntax wrappers for `FBLPromise` `catch` operators. - Usage: promise.catch(^(NSError *error) { ... }) - */ -@interface FBLPromise(DotSyntax_CatchAdditions) - -- (FBLPromise* (^)(FBLPromiseCatchWorkBlock))catch FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); -- (FBLPromise* (^)(dispatch_queue_t, FBLPromiseCatchWorkBlock))catchOn FBL_PROMISES_DOT_SYNTAX - NS_SWIFT_UNAVAILABLE(""); - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Delay.h b/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Delay.h deleted file mode 100644 index 557df4850f..0000000000 --- a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Delay.h +++ /dev/null @@ -1,59 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FBLPromise(DelayAdditions) - -/** - Creates a new pending promise that fulfills with the same value as `self` after the `delay`, or - rejects with the same error immediately. - - @param interval Time to wait in seconds. - @return A new pending promise that fulfills at least `delay` seconds later than `self`, or rejects - with the same error immediately. - */ -- (FBLPromise *)delay:(NSTimeInterval)interval NS_SWIFT_UNAVAILABLE(""); - -/** - Creates a new pending promise that fulfills with the same value as `self` after the `delay`, or - rejects with the same error immediately. - - @param queue A queue to dispatch on. - @param interval Time to wait in seconds. - @return A new pending promise that fulfills at least `delay` seconds later than `self`, or rejects - with the same error immediately. - */ -- (FBLPromise *)onQueue:(dispatch_queue_t)queue - delay:(NSTimeInterval)interval NS_REFINED_FOR_SWIFT; - -@end - -/** - Convenience dot-syntax wrappers for `FBLPromise` `delay` operators. - Usage: promise.delay(...) - */ -@interface FBLPromise(DotSyntax_DelayAdditions) - -- (FBLPromise * (^)(NSTimeInterval))delay FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); -- (FBLPromise * (^)(dispatch_queue_t, NSTimeInterval))delayOn FBL_PROMISES_DOT_SYNTAX - NS_SWIFT_UNAVAILABLE(""); - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Do.h b/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Do.h deleted file mode 100644 index 6838e0adf0..0000000000 --- a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Do.h +++ /dev/null @@ -1,55 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FBLPromise(DoAdditions) - -typedef id __nullable (^FBLPromiseDoWorkBlock)(void) NS_SWIFT_UNAVAILABLE(""); - -/** - Creates a pending promise and executes `work` block asynchronously. - - @param work A block that returns a value or an error used to resolve the promise. - @return A new pending promise. - */ -+ (instancetype)do:(FBLPromiseDoWorkBlock)work NS_SWIFT_UNAVAILABLE(""); - -/** - Creates a pending promise and executes `work` block asynchronously on the given queue. - - @param queue A queue to invoke the `work` block on. - @param work A block that returns a value or an error used to resolve the promise. - @return A new pending promise. - */ -+ (instancetype)onQueue:(dispatch_queue_t)queue do:(FBLPromiseDoWorkBlock)work NS_REFINED_FOR_SWIFT; - -@end - -/** - Convenience dot-syntax wrappers for `FBLPromise` `do` operators. - Usage: FBLPromise.doOn(queue, ^(NSError *error) { ... }) - */ -@interface FBLPromise(DotSyntax_DoAdditions) - -+ (FBLPromise * (^)(dispatch_queue_t, FBLPromiseDoWorkBlock))doOn FBL_PROMISES_DOT_SYNTAX - NS_SWIFT_UNAVAILABLE(""); - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Race.h b/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Race.h deleted file mode 100644 index 2f67258dea..0000000000 --- a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Race.h +++ /dev/null @@ -1,62 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FBLPromise(RaceAdditions) - -/** - Wait until any of the given promises are fulfilled. - If one of the promises is rejected, then the returned promise is rejected with same error. - If any other arbitrary value or `NSError` appears in the array instead of `FBLPromise`, - it's implicitly considered a pre-fulfilled or pre-rejected `FBLPromise` correspondingly. - - @param promises Promises to wait for. - @return A new pending promise to be resolved with the same resolution as the first promise, among - the given ones, which was resolved. - */ -+ (instancetype)race:(NSArray *)promises NS_SWIFT_UNAVAILABLE(""); - -/** - Wait until any of the given promises are fulfilled. - If one of the promises is rejected, then the returned promise is rejected with same error. - If any other arbitrary value or `NSError` appears in the array instead of `FBLPromise`, - it's implicitly considered a pre-fulfilled or pre-rejected `FBLPromise` correspondingly. - - @param queue A queue to dispatch on. - @param promises Promises to wait for. - @return A new pending promise to be resolved with the same resolution as the first promise, among - the given ones, which was resolved. - */ -+ (instancetype)onQueue:(dispatch_queue_t)queue race:(NSArray *)promises NS_REFINED_FOR_SWIFT; - -@end - -/** - Convenience dot-syntax wrappers for `FBLPromise` `race` operators. - Usage: FBLPromise.race(@[ ... ]) - */ -@interface FBLPromise(DotSyntax_RaceAdditions) - -+ (FBLPromise * (^)(NSArray *))race FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); -+ (FBLPromise * (^)(dispatch_queue_t, NSArray *))raceOn FBL_PROMISES_DOT_SYNTAX - NS_SWIFT_UNAVAILABLE(""); - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Recover.h b/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Recover.h deleted file mode 100644 index bb7df7ecfa..0000000000 --- a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Recover.h +++ /dev/null @@ -1,60 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FBLPromise(RecoverAdditions) - -typedef id __nullable (^FBLPromiseRecoverWorkBlock)(NSError *error) NS_SWIFT_UNAVAILABLE(""); - -/** - Provides a new promise to recover in case the receiver gets rejected. - - @param recovery A block to handle the error that the receiver was rejected with. - @return A new pending promise to use instead of the rejected one that gets resolved with resolution - returned from `recovery` block. - */ -- (FBLPromise *)recover:(FBLPromiseRecoverWorkBlock)recovery NS_SWIFT_UNAVAILABLE(""); - -/** - Provides a new promise to recover in case the receiver gets rejected. - - @param queue A queue to dispatch on. - @param recovery A block to handle the error that the receiver was rejected with. - @return A new pending promise to use instead of the rejected one that gets resolved with resolution - returned from `recovery` block. - */ -- (FBLPromise *)onQueue:(dispatch_queue_t)queue - recover:(FBLPromiseRecoverWorkBlock)recovery NS_REFINED_FOR_SWIFT; - -@end - -/** - Convenience dot-syntax wrappers for `FBLPromise` `recover` operators. - Usage: promise.recover(^id(NSError *error) {...}) - */ -@interface FBLPromise(DotSyntax_RecoverAdditions) - -- (FBLPromise * (^)(FBLPromiseRecoverWorkBlock))recover FBL_PROMISES_DOT_SYNTAX - NS_SWIFT_UNAVAILABLE(""); -- (FBLPromise * (^)(dispatch_queue_t, FBLPromiseRecoverWorkBlock))recoverOn FBL_PROMISES_DOT_SYNTAX - NS_SWIFT_UNAVAILABLE(""); - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Reduce.h b/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Reduce.h deleted file mode 100644 index 5bb1eeee47..0000000000 --- a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Reduce.h +++ /dev/null @@ -1,71 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FBLPromise(ReduceAdditions) - -typedef id __nullable (^FBLPromiseReducerBlock)(Value __nullable partial, id next) - NS_SWIFT_UNAVAILABLE(""); - -/** - Sequentially reduces a collection of values to a single promise using a given combining block - and the value `self` resolves with as initial value. - - @param items An array of values to process in order. - @param reducer A block to combine an accumulating value and an element of the sequence into - the new accumulating value or a promise resolved with it, to be used in the next - call of the `reducer` or returned to the caller. - @return A new pending promise returned from the last `reducer` invocation. - Or `self` if `items` is empty. - */ -- (FBLPromise *)reduce:(NSArray *)items - combine:(FBLPromiseReducerBlock)reducer NS_SWIFT_UNAVAILABLE(""); - -/** - Sequentially reduces a collection of values to a single promise using a given combining block - and the value `self` resolves with as initial value. - - @param queue A queue to dispatch on. - @param items An array of values to process in order. - @param reducer A block to combine an accumulating value and an element of the sequence into - the new accumulating value or a promise resolved with it, to be used in the next - call of the `reducer` or returned to the caller. - @return A new pending promise returned from the last `reducer` invocation. - Or `self` if `items` is empty. - */ -- (FBLPromise *)onQueue:(dispatch_queue_t)queue - reduce:(NSArray *)items - combine:(FBLPromiseReducerBlock)reducer NS_SWIFT_UNAVAILABLE(""); - -@end - -/** - Convenience dot-syntax wrappers for `FBLPromise` `reduce` operators. - Usage: promise.reduce(values, ^id(id partial, id next) { ... }) - */ -@interface FBLPromise(DotSyntax_ReduceAdditions) - -- (FBLPromise * (^)(NSArray *, FBLPromiseReducerBlock))reduce FBL_PROMISES_DOT_SYNTAX - NS_SWIFT_UNAVAILABLE(""); -- (FBLPromise * (^)(dispatch_queue_t, NSArray *, FBLPromiseReducerBlock))reduceOn - FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Retry.h b/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Retry.h deleted file mode 100644 index 98ef558c08..0000000000 --- a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Retry.h +++ /dev/null @@ -1,165 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise.h" - -NS_ASSUME_NONNULL_BEGIN - -/** The default number of retry attempts is 1. */ -FOUNDATION_EXTERN NSInteger const FBLPromiseRetryDefaultAttemptsCount NS_REFINED_FOR_SWIFT; - -/** The default delay interval before making a retry attempt is 1.0 second. */ -FOUNDATION_EXTERN NSTimeInterval const FBLPromiseRetryDefaultDelayInterval NS_REFINED_FOR_SWIFT; - -@interface FBLPromise(RetryAdditions) - -typedef id __nullable (^FBLPromiseRetryWorkBlock)(void) NS_SWIFT_UNAVAILABLE(""); -typedef BOOL (^FBLPromiseRetryPredicateBlock)(NSInteger, NSError *) NS_SWIFT_UNAVAILABLE(""); - -/** - Creates a pending promise that fulfills with the same value as the promise returned from `work` - block, which executes asynchronously, or rejects with the same error after all retry attempts have - been exhausted. Defaults to `FBLPromiseRetryDefaultAttemptsCount` attempt(s) on rejection where the - `work` block is retried after a delay of `FBLPromiseRetryDefaultDelayInterval` second(s). - - @param work A block that executes asynchronously on the default queue and returns a value or an - error used to resolve the promise. - @return A new pending promise that fulfills with the same value as the promise returned from `work` - block, or rejects with the same error after all retry attempts have been exhausted. - */ -+ (FBLPromise *)retry:(FBLPromiseRetryWorkBlock)work NS_SWIFT_UNAVAILABLE(""); - -/** - Creates a pending promise that fulfills with the same value as the promise returned from `work` - block, which executes asynchronously on the given `queue`, or rejects with the same error after all - retry attempts have been exhausted. Defaults to `FBLPromiseRetryDefaultAttemptsCount` attempt(s) on - rejection where the `work` block is retried on the given `queue` after a delay of - `FBLPromiseRetryDefaultDelayInterval` second(s). - - @param queue A queue to invoke the `work` block on. - @param work A block that executes asynchronously on the given `queue` and returns a value or an - error used to resolve the promise. - @return A new pending promise that fulfills with the same value as the promise returned from `work` - block, or rejects with the same error after all retry attempts have been exhausted. - */ -+ (FBLPromise *)onQueue:(dispatch_queue_t)queue - retry:(FBLPromiseRetryWorkBlock)work NS_SWIFT_UNAVAILABLE(""); - -/** - Creates a pending promise that fulfills with the same value as the promise returned from `work` - block, which executes asynchronously, or rejects with the same error after all retry attempts have - been exhausted. - - @param count Max number of retry attempts. The `work` block will be executed once if the specified - count is less than or equal to zero. - @param work A block that executes asynchronously on the default queue and returns a value or an - error used to resolve the promise. - @return A new pending promise that fulfills with the same value as the promise returned from `work` - block, or rejects with the same error after all retry attempts have been exhausted. - */ -+ (FBLPromise *)attempts:(NSInteger)count - retry:(FBLPromiseRetryWorkBlock)work NS_SWIFT_UNAVAILABLE(""); - -/** - Creates a pending promise that fulfills with the same value as the promise returned from `work` - block, which executes asynchronously on the given `queue`, or rejects with the same error after all - retry attempts have been exhausted. - - @param queue A queue to invoke the `work` block on. - @param count Max number of retry attempts. The `work` block will be executed once if the specified - count is less than or equal to zero. - @param work A block that executes asynchronously on the given `queue` and returns a value or an - error used to resolve the promise. - @return A new pending promise that fulfills with the same value as the promise returned from `work` - block, or rejects with the same error after all retry attempts have been exhausted. - */ -+ (FBLPromise *)onQueue:(dispatch_queue_t)queue - attempts:(NSInteger)count - retry:(FBLPromiseRetryWorkBlock)work NS_SWIFT_UNAVAILABLE(""); - -/** - Creates a pending promise that fulfills with the same value as the promise returned from `work` - block, which executes asynchronously, or rejects with the same error after all retry attempts have - been exhausted. On rejection, the `work` block is retried after the given delay `interval` and will - continue to retry until the number of specified attempts have been exhausted or will bail early if - the given condition is not met. - - @param count Max number of retry attempts. The `work` block will be executed once if the specified - count is less than or equal to zero. - @param interval Time to wait before the next retry attempt. - @param predicate Condition to check before the next retry attempt. The predicate block provides the - the number of remaining retry attempts and the error that the promise was rejected - with. - @param work A block that executes asynchronously on the default queue and returns a value or an - error used to resolve the promise. - @return A new pending promise that fulfills with the same value as the promise returned from `work` - block, or rejects with the same error after all retry attempts have been exhausted or if - the given condition is not met. - */ -+ (FBLPromise *)attempts:(NSInteger)count - delay:(NSTimeInterval)interval - condition:(nullable FBLPromiseRetryPredicateBlock)predicate - retry:(FBLPromiseRetryWorkBlock)work NS_SWIFT_UNAVAILABLE(""); - -/** - Creates a pending promise that fulfills with the same value as the promise returned from `work` - block, which executes asynchronously on the given `queue`, or rejects with the same error after all - retry attempts have been exhausted. On rejection, the `work` block is retried after the given - delay `interval` and will continue to retry until the number of specified attempts have been - exhausted or will bail early if the given condition is not met. - - @param queue A queue to invoke the `work` block on. - @param count Max number of retry attempts. The `work` block will be executed once if the specified - count is less than or equal to zero. - @param interval Time to wait before the next retry attempt. - @param predicate Condition to check before the next retry attempt. The predicate block provides the - the number of remaining retry attempts and the error that the promise was rejected - with. - @param work A block that executes asynchronously on the given `queue` and returns a value or an - error used to resolve the promise. - @return A new pending promise that fulfills with the same value as the promise returned from `work` - block, or rejects with the same error after all retry attempts have been exhausted or if - the given condition is not met. - */ -+ (FBLPromise *)onQueue:(dispatch_queue_t)queue - attempts:(NSInteger)count - delay:(NSTimeInterval)interval - condition:(nullable FBLPromiseRetryPredicateBlock)predicate - retry:(FBLPromiseRetryWorkBlock)work NS_REFINED_FOR_SWIFT; - -@end - -/** - Convenience dot-syntax wrappers for `FBLPromise+Retry` operators. - Usage: FBLPromise.retry(^id { ... }) - */ -@interface FBLPromise(DotSyntax_RetryAdditions) - -+ (FBLPromise * (^)(FBLPromiseRetryWorkBlock))retry FBL_PROMISES_DOT_SYNTAX - NS_SWIFT_UNAVAILABLE(""); -+ (FBLPromise * (^)(dispatch_queue_t, FBLPromiseRetryWorkBlock))retryOn FBL_PROMISES_DOT_SYNTAX - NS_SWIFT_UNAVAILABLE(""); -+ (FBLPromise * (^)(NSInteger, NSTimeInterval, FBLPromiseRetryPredicateBlock __nullable, - FBLPromiseRetryWorkBlock))retryAgain FBL_PROMISES_DOT_SYNTAX - NS_SWIFT_UNAVAILABLE(""); -+ (FBLPromise * (^)(dispatch_queue_t, NSInteger, NSTimeInterval, - FBLPromiseRetryPredicateBlock __nullable, - FBLPromiseRetryWorkBlock))retryAgainOn FBL_PROMISES_DOT_SYNTAX - NS_SWIFT_UNAVAILABLE(""); - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Testing.h b/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Testing.h deleted file mode 100644 index 8478ae2293..0000000000 --- a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Testing.h +++ /dev/null @@ -1,57 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - Waits for all scheduled promises blocks. - - @param timeout Maximum time to wait. - @return YES if all promises blocks have completed before the timeout and NO otherwise. - */ -FOUNDATION_EXTERN BOOL FBLWaitForPromisesWithTimeout(NSTimeInterval timeout) NS_REFINED_FOR_SWIFT; - -@interface FBLPromise(TestingAdditions) - -/** - Dispatch group for promises that is typically used to wait for all scheduled blocks. - */ -@property(class, nonatomic, readonly) dispatch_group_t dispatchGroup NS_REFINED_FOR_SWIFT; - -/** - Properties to get the current state of the promise. - */ -@property(nonatomic, readonly) BOOL isPending NS_REFINED_FOR_SWIFT; -@property(nonatomic, readonly) BOOL isFulfilled NS_REFINED_FOR_SWIFT; -@property(nonatomic, readonly) BOOL isRejected NS_REFINED_FOR_SWIFT; - -/** - Value the promise was fulfilled with. - Can be nil if the promise is still pending, was resolved with nil or after it has been rejected. - */ -@property(nonatomic, readonly, nullable) Value value NS_REFINED_FOR_SWIFT; - -/** - Error the promise was rejected with. - Can be nil if the promise is still pending or after it has been fulfilled. - */ -@property(nonatomic, readonly, nullable) NSError *error NS_REFINED_FOR_SWIFT; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Then.h b/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Then.h deleted file mode 100644 index 32027e6973..0000000000 --- a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Then.h +++ /dev/null @@ -1,63 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FBLPromise(ThenAdditions) - -typedef id __nullable (^FBLPromiseThenWorkBlock)(Value __nullable value) NS_SWIFT_UNAVAILABLE(""); - -/** - Creates a pending promise which eventually gets resolved with resolution returned from `work` - block: either value, error or another promise. The `work` block is executed asynchronously only - when the receiver is fulfilled. If receiver is rejected, the returned promise is also rejected with - the same error. - - @param work A block to handle the value that receiver was fulfilled with. - @return A new pending promise to be resolved with resolution returned from the `work` block. - */ -- (FBLPromise *)then:(FBLPromiseThenWorkBlock)work NS_SWIFT_UNAVAILABLE(""); - -/** - Creates a pending promise which eventually gets resolved with resolution returned from `work` - block: either value, error or another promise. The `work` block is executed asynchronously when the - receiver is fulfilled. If receiver is rejected, the returned promise is also rejected with the same - error. - - @param queue A queue to invoke the `work` block on. - @param work A block to handle the value that receiver was fulfilled with. - @return A new pending promise to be resolved with resolution returned from the `work` block. - */ -- (FBLPromise *)onQueue:(dispatch_queue_t)queue - then:(FBLPromiseThenWorkBlock)work NS_REFINED_FOR_SWIFT; - -@end - -/** - Convenience dot-syntax wrappers for `FBLPromise` `then` operators. - Usage: promise.then(^id(id value) { ... }) - */ -@interface FBLPromise(DotSyntax_ThenAdditions) - -- (FBLPromise* (^)(FBLPromiseThenWorkBlock))then FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); -- (FBLPromise* (^)(dispatch_queue_t, FBLPromiseThenWorkBlock))thenOn FBL_PROMISES_DOT_SYNTAX - NS_SWIFT_UNAVAILABLE(""); - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Timeout.h b/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Timeout.h deleted file mode 100644 index 184ba166fa..0000000000 --- a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Timeout.h +++ /dev/null @@ -1,57 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FBLPromise(TimeoutAdditions) - -/** - Waits for a promise with the specified `timeout`. - - @param interval Time to wait in seconds. - @return A new pending promise that gets either resolved with same resolution as the receiver or - rejected with `FBLPromiseErrorCodeTimedOut` error code in `FBLPromiseErrorDomain`. - */ -- (FBLPromise *)timeout:(NSTimeInterval)interval NS_SWIFT_UNAVAILABLE(""); - -/** - Waits for a promise with the specified `timeout`. - - @param queue A queue to dispatch on. - @param interval Time to wait in seconds. - @return A new pending promise that gets either resolved with same resolution as the receiver or - rejected with `FBLPromiseErrorCodeTimedOut` error code in `FBLPromiseErrorDomain`. - */ -- (FBLPromise *)onQueue:(dispatch_queue_t)queue - timeout:(NSTimeInterval)interval NS_REFINED_FOR_SWIFT; - -@end - -/** - Convenience dot-syntax wrappers for `FBLPromise` `timeout` operators. - Usage: promise.timeout(...) - */ -@interface FBLPromise(DotSyntax_TimeoutAdditions) - -- (FBLPromise* (^)(NSTimeInterval))timeout FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); -- (FBLPromise* (^)(dispatch_queue_t, NSTimeInterval))timeoutOn FBL_PROMISES_DOT_SYNTAX - NS_SWIFT_UNAVAILABLE(""); - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Validate.h b/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Validate.h deleted file mode 100644 index 9dfa2f16ae..0000000000 --- a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Validate.h +++ /dev/null @@ -1,60 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface FBLPromise(ValidateAdditions) - -typedef BOOL (^FBLPromiseValidateWorkBlock)(Value __nullable value) NS_SWIFT_UNAVAILABLE(""); - -/** - Validates a fulfilled value or rejects the value if it can not be validated. - - @param predicate An expression to validate. - @return A new pending promise that gets either resolved with same resolution as the receiver or - rejected with `FBLPromiseErrorCodeValidationFailure` error code in `FBLPromiseErrorDomain`. - */ -- (FBLPromise *)validate:(FBLPromiseValidateWorkBlock)predicate NS_SWIFT_UNAVAILABLE(""); - -/** - Validates a fulfilled value or rejects the value if it can not be validated. - - @param queue A queue to dispatch on. - @param predicate An expression to validate. - @return A new pending promise that gets either resolved with same resolution as the receiver or - rejected with `FBLPromiseErrorCodeValidationFailure` error code in `FBLPromiseErrorDomain`. - */ -- (FBLPromise *)onQueue:(dispatch_queue_t)queue - validate:(FBLPromiseValidateWorkBlock)predicate NS_REFINED_FOR_SWIFT; - -@end - -/** - Convenience dot-syntax wrappers for `FBLPromise` `validate` operators. - Usage: promise.validate(^BOOL(id value) { ... }) - */ -@interface FBLPromise(DotSyntax_ValidateAdditions) - -- (FBLPromise * (^)(FBLPromiseValidateWorkBlock))validate FBL_PROMISES_DOT_SYNTAX - NS_SWIFT_UNAVAILABLE(""); -- (FBLPromise * (^)(dispatch_queue_t, FBLPromiseValidateWorkBlock))validateOn - FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Wrap.h b/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Wrap.h deleted file mode 100644 index 664e1bbffb..0000000000 --- a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Wrap.h +++ /dev/null @@ -1,316 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - Different types of completion handlers available to be wrapped with promise. - */ -typedef void (^FBLPromiseCompletion)(void) NS_SWIFT_UNAVAILABLE(""); -typedef void (^FBLPromiseObjectCompletion)(id __nullable) NS_SWIFT_UNAVAILABLE(""); -typedef void (^FBLPromiseErrorCompletion)(NSError* __nullable) NS_SWIFT_UNAVAILABLE(""); -typedef void (^FBLPromiseObjectOrErrorCompletion)(id __nullable, NSError* __nullable) - NS_SWIFT_UNAVAILABLE(""); -typedef void (^FBLPromiseErrorOrObjectCompletion)(NSError* __nullable, id __nullable) - NS_SWIFT_UNAVAILABLE(""); -typedef void (^FBLPromise2ObjectsOrErrorCompletion)(id __nullable, id __nullable, - NSError* __nullable) NS_SWIFT_UNAVAILABLE(""); -typedef void (^FBLPromiseBoolCompletion)(BOOL) NS_SWIFT_UNAVAILABLE(""); -typedef void (^FBLPromiseBoolOrErrorCompletion)(BOOL, NSError* __nullable) NS_SWIFT_UNAVAILABLE(""); -typedef void (^FBLPromiseIntegerCompletion)(NSInteger) NS_SWIFT_UNAVAILABLE(""); -typedef void (^FBLPromiseIntegerOrErrorCompletion)(NSInteger, NSError* __nullable) - NS_SWIFT_UNAVAILABLE(""); -typedef void (^FBLPromiseDoubleCompletion)(double) NS_SWIFT_UNAVAILABLE(""); -typedef void (^FBLPromiseDoubleOrErrorCompletion)(double, NSError* __nullable) - NS_SWIFT_UNAVAILABLE(""); - -/** - Provides an easy way to convert methods that use common callback patterns into promises. - */ -@interface FBLPromise(WrapAdditions) - -/** - @param work A block to perform any operations needed to resolve the promise. - @returns A promise that resolves with `nil` when completion handler is invoked. - */ -+ (instancetype)wrapCompletion:(void (^)(FBLPromiseCompletion handler))work - NS_SWIFT_UNAVAILABLE(""); - -/** - @param queue A queue to invoke the `work` block on. - @param work A block to perform any operations needed to resolve the promise. - @returns A promise that resolves with `nil` when completion handler is invoked. - */ -+ (instancetype)onQueue:(dispatch_queue_t)queue - wrapCompletion:(void (^)(FBLPromiseCompletion handler))work NS_SWIFT_UNAVAILABLE(""); - -/** - @param work A block to perform any operations needed to resolve the promise. - @returns A promise that resolves with an object provided by completion handler. - */ -+ (instancetype)wrapObjectCompletion:(void (^)(FBLPromiseObjectCompletion handler))work - NS_SWIFT_UNAVAILABLE(""); - -/** - @param queue A queue to invoke the `work` block on. - @param work A block to perform any operations needed to resolve the promise. - @returns A promise that resolves with an object provided by completion handler. - */ -+ (instancetype)onQueue:(dispatch_queue_t)queue - wrapObjectCompletion:(void (^)(FBLPromiseObjectCompletion handler))work - NS_SWIFT_UNAVAILABLE(""); - -/** - @param work A block to perform any operations needed to resolve the promise. - @returns A promise that resolves with an error provided by completion handler. - If error is `nil`, fulfills with `nil`, otherwise rejects with the error. - */ -+ (instancetype)wrapErrorCompletion:(void (^)(FBLPromiseErrorCompletion handler))work - NS_SWIFT_UNAVAILABLE(""); - -/** - @param queue A queue to invoke the `work` block on. - @param work A block to perform any operations needed to resolve the promise. - @returns A promise that resolves with an error provided by completion handler. - If error is `nil`, fulfills with `nil`, otherwise rejects with the error. - */ -+ (instancetype)onQueue:(dispatch_queue_t)queue - wrapErrorCompletion:(void (^)(FBLPromiseErrorCompletion handler))work NS_SWIFT_UNAVAILABLE(""); - -/** - @param work A block to perform any operations needed to resolve the promise. - @returns A promise that resolves with an object provided by completion handler if error is `nil`. - Otherwise, rejects with the error. - */ -+ (instancetype)wrapObjectOrErrorCompletion: - (void (^)(FBLPromiseObjectOrErrorCompletion handler))work NS_SWIFT_UNAVAILABLE(""); - -/** - @param queue A queue to invoke the `work` block on. - @param work A block to perform any operations needed to resolve the promise. - @returns A promise that resolves with an object provided by completion handler if error is `nil`. - Otherwise, rejects with the error. - */ -+ (instancetype)onQueue:(dispatch_queue_t)queue - wrapObjectOrErrorCompletion:(void (^)(FBLPromiseObjectOrErrorCompletion handler))work - NS_SWIFT_UNAVAILABLE(""); - -/** - @param work A block to perform any operations needed to resolve the promise. - @returns A promise that resolves with an error or object provided by completion handler. If error - is not `nil`, rejects with the error. - */ -+ (instancetype)wrapErrorOrObjectCompletion: - (void (^)(FBLPromiseErrorOrObjectCompletion handler))work NS_SWIFT_UNAVAILABLE(""); - -/** - @param queue A queue to invoke the `work` block on. - @param work A block to perform any operations needed to resolve the promise. - @returns A promise that resolves with an error or object provided by completion handler. If error - is not `nil`, rejects with the error. - */ -+ (instancetype)onQueue:(dispatch_queue_t)queue - wrapErrorOrObjectCompletion:(void (^)(FBLPromiseErrorOrObjectCompletion handler))work - NS_SWIFT_UNAVAILABLE(""); - -/** - @param work A block to perform any operations needed to resolve the promise. - @returns A promise that resolves with an array of objects provided by completion handler in order - if error is `nil`. Otherwise, rejects with the error. - */ -+ (FBLPromise*)wrap2ObjectsOrErrorCompletion: - (void (^)(FBLPromise2ObjectsOrErrorCompletion handler))work NS_SWIFT_UNAVAILABLE(""); - -/** - @param queue A queue to invoke the `work` block on. - @param work A block to perform any operations needed to resolve the promise. - @returns A promise that resolves with an array of objects provided by completion handler in order - if error is `nil`. Otherwise, rejects with the error. - */ -+ (FBLPromise*)onQueue:(dispatch_queue_t)queue - wrap2ObjectsOrErrorCompletion:(void (^)(FBLPromise2ObjectsOrErrorCompletion handler))work - NS_SWIFT_UNAVAILABLE(""); - -/** - @param work A block to perform any operations needed to resolve the promise. - @returns A promise that resolves with an `NSNumber` wrapping YES/NO. - */ -+ (FBLPromise*)wrapBoolCompletion:(void (^)(FBLPromiseBoolCompletion handler))work - NS_SWIFT_UNAVAILABLE(""); - -/** - @param queue A queue to invoke the `work` block on. - @param work A block to perform any operations needed to resolve the promise. - @returns A promise that resolves with an `NSNumber` wrapping YES/NO. - */ -+ (FBLPromise*)onQueue:(dispatch_queue_t)queue - wrapBoolCompletion:(void (^)(FBLPromiseBoolCompletion handler))work - NS_SWIFT_UNAVAILABLE(""); - -/** - @param work A block to perform any operations needed to resolve the promise. - @returns A promise that resolves with an `NSNumber` wrapping YES/NO when error is `nil`. - Otherwise rejects with the error. - */ -+ (FBLPromise*)wrapBoolOrErrorCompletion: - (void (^)(FBLPromiseBoolOrErrorCompletion handler))work NS_SWIFT_UNAVAILABLE(""); - -/** - @param queue A queue to invoke the `work` block on. - @param work A block to perform any operations needed to resolve the promise. - @returns A promise that resolves with an `NSNumber` wrapping YES/NO when error is `nil`. - Otherwise rejects with the error. - */ -+ (FBLPromise*)onQueue:(dispatch_queue_t)queue - wrapBoolOrErrorCompletion:(void (^)(FBLPromiseBoolOrErrorCompletion handler))work - NS_SWIFT_UNAVAILABLE(""); - -/** - @param work A block to perform any operations needed to resolve the promise. - @returns A promise that resolves with an `NSNumber` wrapping an integer. - */ -+ (FBLPromise*)wrapIntegerCompletion:(void (^)(FBLPromiseIntegerCompletion handler))work - NS_SWIFT_UNAVAILABLE(""); - -/** - @param queue A queue to invoke the `work` block on. - @param work A block to perform any operations needed to resolve the promise. - @returns A promise that resolves with an `NSNumber` wrapping an integer. - */ -+ (FBLPromise*)onQueue:(dispatch_queue_t)queue - wrapIntegerCompletion:(void (^)(FBLPromiseIntegerCompletion handler))work - NS_SWIFT_UNAVAILABLE(""); - -/** - @param work A block to perform any operations needed to resolve the promise. - @returns A promise that resolves with an `NSNumber` wrapping an integer when error is `nil`. - Otherwise rejects with the error. - */ -+ (FBLPromise*)wrapIntegerOrErrorCompletion: - (void (^)(FBLPromiseIntegerOrErrorCompletion handler))work NS_SWIFT_UNAVAILABLE(""); - -/** - @param queue A queue to invoke the `work` block on. - @param work A block to perform any operations needed to resolve the promise. - @returns A promise that resolves with an `NSNumber` wrapping an integer when error is `nil`. - Otherwise rejects with the error. - */ -+ (FBLPromise*)onQueue:(dispatch_queue_t)queue - wrapIntegerOrErrorCompletion:(void (^)(FBLPromiseIntegerOrErrorCompletion handler))work - NS_SWIFT_UNAVAILABLE(""); - -/** - @param work A block to perform any operations needed to resolve the promise. - @returns A promise that resolves with an `NSNumber` wrapping a double. - */ -+ (FBLPromise*)wrapDoubleCompletion:(void (^)(FBLPromiseDoubleCompletion handler))work - NS_SWIFT_UNAVAILABLE(""); - -/** - @param queue A queue to invoke the `work` block on. - @param work A block to perform any operations needed to resolve the promise. - @returns A promise that resolves with an `NSNumber` wrapping a double. - */ -+ (FBLPromise*)onQueue:(dispatch_queue_t)queue - wrapDoubleCompletion:(void (^)(FBLPromiseDoubleCompletion handler))work - NS_SWIFT_UNAVAILABLE(""); - -/** - @param work A block to perform any operations needed to resolve the promise. - @returns A promise that resolves with an `NSNumber` wrapping a double when error is `nil`. - Otherwise rejects with the error. - */ -+ (FBLPromise*)wrapDoubleOrErrorCompletion: - (void (^)(FBLPromiseDoubleOrErrorCompletion handler))work NS_SWIFT_UNAVAILABLE(""); - -/** - @param queue A queue to invoke the `work` block on. - @param work A block to perform any operations needed to resolve the promise. - @returns A promise that resolves with an `NSNumber` wrapping a double when error is `nil`. - Otherwise rejects with the error. - */ -+ (FBLPromise*)onQueue:(dispatch_queue_t)queue - wrapDoubleOrErrorCompletion:(void (^)(FBLPromiseDoubleOrErrorCompletion handler))work - NS_SWIFT_UNAVAILABLE(""); - -@end - -/** - Convenience dot-syntax wrappers for `FBLPromise` `wrap` operators. - Usage: FBLPromise.wrapCompletion(^(FBLPromiseCompletion handler) {...}) - */ -@interface FBLPromise(DotSyntax_WrapAdditions) - -+ (FBLPromise* (^)(void (^)(FBLPromiseCompletion)))wrapCompletion FBL_PROMISES_DOT_SYNTAX - NS_SWIFT_UNAVAILABLE(""); -+ (FBLPromise* (^)(dispatch_queue_t, void (^)(FBLPromiseCompletion)))wrapCompletionOn - FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); -+ (FBLPromise* (^)(void (^)(FBLPromiseObjectCompletion)))wrapObjectCompletion - FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); -+ (FBLPromise* (^)(dispatch_queue_t, void (^)(FBLPromiseObjectCompletion)))wrapObjectCompletionOn - FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); -+ (FBLPromise* (^)(void (^)(FBLPromiseErrorCompletion)))wrapErrorCompletion FBL_PROMISES_DOT_SYNTAX - NS_SWIFT_UNAVAILABLE(""); -+ (FBLPromise* (^)(dispatch_queue_t, void (^)(FBLPromiseErrorCompletion)))wrapErrorCompletionOn - FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); -+ (FBLPromise* (^)(void (^)(FBLPromiseObjectOrErrorCompletion)))wrapObjectOrErrorCompletion - FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); -+ (FBLPromise* (^)(dispatch_queue_t, - void (^)(FBLPromiseObjectOrErrorCompletion)))wrapObjectOrErrorCompletionOn - FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); -+ (FBLPromise* (^)(void (^)(FBLPromiseErrorOrObjectCompletion)))wrapErrorOrObjectCompletion - FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); -+ (FBLPromise* (^)(dispatch_queue_t, - void (^)(FBLPromiseErrorOrObjectCompletion)))wrapErrorOrObjectCompletionOn - FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); -+ (FBLPromise* (^)(void (^)(FBLPromise2ObjectsOrErrorCompletion))) - wrap2ObjectsOrErrorCompletion FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); -+ (FBLPromise* (^)(dispatch_queue_t, void (^)(FBLPromise2ObjectsOrErrorCompletion))) - wrap2ObjectsOrErrorCompletionOn FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); -+ (FBLPromise* (^)(void (^)(FBLPromiseBoolCompletion)))wrapBoolCompletion - FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); -+ (FBLPromise* (^)(dispatch_queue_t, - void (^)(FBLPromiseBoolCompletion)))wrapBoolCompletionOn - FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); -+ (FBLPromise* (^)(void (^)(FBLPromiseBoolOrErrorCompletion)))wrapBoolOrErrorCompletion - FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); -+ (FBLPromise* (^)(dispatch_queue_t, - void (^)(FBLPromiseBoolOrErrorCompletion)))wrapBoolOrErrorCompletionOn - FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); -+ (FBLPromise* (^)(void (^)(FBLPromiseIntegerCompletion)))wrapIntegerCompletion - FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); -+ (FBLPromise* (^)(dispatch_queue_t, - void (^)(FBLPromiseIntegerCompletion)))wrapIntegerCompletionOn - FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); -+ (FBLPromise* (^)(void (^)(FBLPromiseIntegerOrErrorCompletion))) - wrapIntegerOrErrorCompletion FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); -+ (FBLPromise* (^)(dispatch_queue_t, void (^)(FBLPromiseIntegerOrErrorCompletion))) - wrapIntegerOrErrorCompletionOn FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); -+ (FBLPromise* (^)(void (^)(FBLPromiseDoubleCompletion)))wrapDoubleCompletion - FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); -+ (FBLPromise* (^)(dispatch_queue_t, - void (^)(FBLPromiseDoubleCompletion)))wrapDoubleCompletionOn - FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); -+ (FBLPromise* (^)(void (^)(FBLPromiseDoubleOrErrorCompletion))) - wrapDoubleOrErrorCompletion FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); -+ (FBLPromise* (^)(dispatch_queue_t, void (^)(FBLPromiseDoubleOrErrorCompletion))) - wrapDoubleOrErrorCompletionOn FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise.h b/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise.h deleted file mode 100644 index b1380dc738..0000000000 --- a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise.h +++ /dev/null @@ -1,93 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromiseError.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - Promises synchronization construct in Objective-C. - */ -@interface FBLPromise<__covariant Value> : NSObject - -/** - Default dispatch queue used for `FBLPromise`, which is `main` if a queue is not specified. - */ -@property(class) dispatch_queue_t defaultDispatchQueue NS_REFINED_FOR_SWIFT; - -/** - Creates a pending promise. - */ -+ (instancetype)pendingPromise NS_REFINED_FOR_SWIFT; - -/** - Creates a resolved promise. - - @param resolution An object to resolve the promise with: either a value or an error. - @return A new resolved promise. - */ -+ (instancetype)resolvedWith:(nullable id)resolution NS_REFINED_FOR_SWIFT; - -/** - Synchronously fulfills the promise with a value. - - @param value An arbitrary value to fulfill the promise with, including `nil`. - */ -- (void)fulfill:(nullable Value)value NS_REFINED_FOR_SWIFT; - -/** - Synchronously rejects the promise with an error. - - @param error An error to reject the promise with. - */ -- (void)reject:(NSError *)error NS_REFINED_FOR_SWIFT; - -+ (instancetype)new NS_UNAVAILABLE; -- (instancetype)init NS_UNAVAILABLE; -@end - -@interface FBLPromise() - -/** - Adds an object to the set of pending objects to keep strongly while the promise is pending. - Used by the Swift wrappers to keep them alive until the underlying ObjC promise is resolved. - - @param object An object to add. - */ -- (void)addPendingObject:(id)object NS_REFINED_FOR_SWIFT; - -@end - -#ifdef FBL_PROMISES_DOT_SYNTAX_IS_DEPRECATED -#define FBL_PROMISES_DOT_SYNTAX __attribute__((deprecated)) -#else -#define FBL_PROMISES_DOT_SYNTAX -#endif - -@interface FBLPromise(DotSyntaxAdditions) - -/** - Convenience dot-syntax wrappers for FBLPromise. - Usage: FBLPromise.pending() - FBLPromise.resolved(value) - - */ -+ (instancetype (^)(void))pending FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); -+ (instancetype (^)(id __nullable))resolved FBL_PROMISES_DOT_SYNTAX NS_SWIFT_UNAVAILABLE(""); - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromiseError.h b/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromiseError.h deleted file mode 100644 index d37af536c6..0000000000 --- a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromiseError.h +++ /dev/null @@ -1,43 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -FOUNDATION_EXTERN NSErrorDomain const FBLPromiseErrorDomain NS_REFINED_FOR_SWIFT; - -/** - Possible error codes in `FBLPromiseErrorDomain`. - */ -typedef NS_ENUM(NSInteger, FBLPromiseErrorCode) { - /** Promise failed to resolve in time. */ - FBLPromiseErrorCodeTimedOut = 1, - /** Validation predicate returned false. */ - FBLPromiseErrorCodeValidationFailure = 2, -} NS_REFINED_FOR_SWIFT; - -NS_INLINE BOOL FBLPromiseErrorIsTimedOut(NSError *error) NS_SWIFT_UNAVAILABLE("") { - return error.domain == FBLPromiseErrorDomain && - error.code == FBLPromiseErrorCodeTimedOut; -} - -NS_INLINE BOOL FBLPromiseErrorIsValidationFailure(NSError *error) NS_SWIFT_UNAVAILABLE("") { - return error.domain == FBLPromiseErrorDomain && - error.code == FBLPromiseErrorCodeValidationFailure; -} - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromisePrivate.h b/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromisePrivate.h deleted file mode 100644 index 7a132f2030..0000000000 --- a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromisePrivate.h +++ /dev/null @@ -1,66 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise+Testing.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - Miscellaneous low-level private interfaces available to extend standard FBLPromise functionality. - */ -@interface FBLPromise() - -typedef void (^FBLPromiseOnFulfillBlock)(Value __nullable value) NS_SWIFT_UNAVAILABLE(""); -typedef void (^FBLPromiseOnRejectBlock)(NSError *error) NS_SWIFT_UNAVAILABLE(""); -typedef id __nullable (^__nullable FBLPromiseChainedFulfillBlock)(Value __nullable value) - NS_SWIFT_UNAVAILABLE(""); -typedef id __nullable (^__nullable FBLPromiseChainedRejectBlock)(NSError *error) - NS_SWIFT_UNAVAILABLE(""); - -/** - Creates a pending promise. - */ -- (instancetype)initPending NS_SWIFT_UNAVAILABLE(""); - -/** - Creates a resolved promise. - - @param resolution An object to resolve the promise with: either a value or an error. - @return A new resolved promise. - */ -- (instancetype)initWithResolution:(nullable id)resolution NS_SWIFT_UNAVAILABLE(""); - -/** - Invokes `fulfill` and `reject` blocks on `queue` when the receiver gets either fulfilled or - rejected respectively. - */ -- (void)observeOnQueue:(dispatch_queue_t)queue - fulfill:(FBLPromiseOnFulfillBlock)onFulfill - reject:(FBLPromiseOnRejectBlock)onReject NS_SWIFT_UNAVAILABLE(""); - -/** - Returns a new promise which gets resolved with the return value of `chainedFulfill` or - `chainedReject` blocks respectively. The blocks are invoked when the receiver gets either - fulfilled or rejected. If `nil` is passed to either block arg, the returned promise is resolved - with the same resolution as the receiver. - */ -- (FBLPromise *)chainOnQueue:(dispatch_queue_t)queue - chainedFulfill:(FBLPromiseChainedFulfillBlock)chainedFulfill - chainedReject:(FBLPromiseChainedRejectBlock)chainedReject NS_SWIFT_UNAVAILABLE(""); - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromises.h b/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromises.h deleted file mode 100644 index 2d90badb17..0000000000 --- a/iphone/Maps/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromises.h +++ /dev/null @@ -1,32 +0,0 @@ -/** - Copyright 2018 Google Inc. All rights reserved. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "FBLPromise+All.h" -#import "FBLPromise+Always.h" -#import "FBLPromise+Any.h" -#import "FBLPromise+Async.h" -#import "FBLPromise+Await.h" -#import "FBLPromise+Catch.h" -#import "FBLPromise+Delay.h" -#import "FBLPromise+Do.h" -#import "FBLPromise+Race.h" -#import "FBLPromise+Recover.h" -#import "FBLPromise+Reduce.h" -#import "FBLPromise+Retry.h" -#import "FBLPromise+Then.h" -#import "FBLPromise+Timeout.h" -#import "FBLPromise+Validate.h" -#import "FBLPromise+Wrap.h" diff --git a/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Headers b/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Headers deleted file mode 120000 index a177d2a6b9..0000000000 --- a/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Headers +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Headers \ No newline at end of file diff --git a/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Modules/module.modulemap b/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Modules/module.modulemap deleted file mode 100644 index a31d09abdb..0000000000 --- a/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Modules/module.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module Pushwoosh { - umbrella header "Pushwoosh.h" - - export * - module * { export * } -} diff --git a/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Pushwoosh b/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Pushwoosh deleted file mode 120000 index b002d72473..0000000000 --- a/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Pushwoosh +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Pushwoosh \ No newline at end of file diff --git a/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/PWAppDelegate.h b/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/PWAppDelegate.h deleted file mode 100644 index 78bb14bc99..0000000000 --- a/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/PWAppDelegate.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// PWAppDelegate.h -// Pushwoosh SDK -// (c) Pushwoosh 2018 -// - -#if TARGET_OS_IPHONE - -#import - -/* - Base AppDelegate class for easier integration. - */ -@interface PWAppDelegate : UIResponder - -@property (nonatomic, strong) UIWindow *window; - -@end - -#endif diff --git a/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/PWGDPRManager.h b/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/PWGDPRManager.h deleted file mode 100644 index c9210b24d7..0000000000 --- a/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/PWGDPRManager.h +++ /dev/null @@ -1,42 +0,0 @@ -// -// PWGDPRManager.h -// Pushwoosh SDK -// (c) Pushwoosh 2018 -// - -#import - -/* - `PWGDPRManager` class offers access to the singleton-instance of the manager responsible for channels management required by GDPR. - */ - -FOUNDATION_EXPORT NSString * const PWGDPRStatusDidChangeNotification; - -@interface PWGDPRManager : NSObject - -/** -Indicates availability of the GDPR compliance solution. -*/ -@property (nonatomic, readonly, getter=isAvailable) BOOL available; - -@property (nonatomic, readonly, getter=isCommunicationEnabled) BOOL communicationEnabled; - -@property (nonatomic, readonly, getter=isDeviceDataRemoved) BOOL deviceDataRemoved; - -+ (instancetype)sharedManager; - -/** - Enable/disable all communication with Pushwoosh. Enabled by default. - */ -- (void)setCommunicationEnabled:(BOOL)enabled completion:(void (^)(NSError *error))completion; - -/** - Removes all device data from Pushwoosh and stops all interactions and communication permanently. - */ -- (void)removeAllDeviceDataWithCompletion:(void (^)(NSError *error))completion; - -- (void)showGDPRConsentUI; - -- (void)showGDPRDeletionUI; - -@end diff --git a/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/PWInAppManager.h b/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/PWInAppManager.h deleted file mode 100644 index 94c72fd2fd..0000000000 --- a/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/PWInAppManager.h +++ /dev/null @@ -1,139 +0,0 @@ -// -// PWInAppManager.h -// Pushwoosh SDK -// (c) Pushwoosh 2017 -// - -#import - -#if TARGET_OS_IPHONE - -/** - `PWJavaScriptInterface` protocol is a representation of Javascript object that can be added at runtime into In-App Message HTML page - to provide native calls and callbacks to Objective-C/Swift. - - Example: - - ```ObjC - @implementation JavaScriptInterface - - - (void)nativeCall:(NSString*)str :(PWJavaScriptCallback*)callback { - [callback executeWithParam:str]; - } - - @end - - ... - - [[PWInAppManager sharedManager] addJavascriptInterface:[JavaScriptInterface new] withName:@"ObjC"]; - ``` - - ```javascript - ObjC.nativeCall("exampleString", function(str) { - console.log(str); - }); - ``` - */ -@protocol PWJavaScriptInterface - -@optional - -/** - Tells the delegate that In-App Message load stated - */ -- (void)onWebViewStartLoad:(UIWebView*)webView; - -/** - Tells the delegate that In-App Message load finished - */ -- (void)onWebViewFinishLoad:(UIWebView*)webView; - -/** - Tells the delegate that In-App Message is closing - */ -- (void)onWebViewStartClose:(UIWebView*)webView; - -@end - -/** - `PWJavaScriptCallback` is a representation of Javascript function - */ -@interface PWJavaScriptCallback : NSObject - -/** - Invokes callback with no arguments - */ -- (NSString*) execute; - -/** - Invokes callback with one argument - */ -- (NSString*) executeWithParam: (NSString*) param; - -/** - Invokes callback with multiple arguments - */ -- (NSString*) executeWithParams: (NSArray*) params; - -@end - -#endif - - -/* - `PWInAppManager` class offers access to the singleton-instance of the inapp messages manager responsible for sending events and managing inapp message notifications. - */ -@interface PWInAppManager : NSObject - -+ (instancetype)sharedManager; - -/** - Resets capping of the Pushwoosh out-of-the-box In-App solutions. - */ -- (void)resetBusinessCasesFrequencyCapping; - -/** - Set User indentifier. This could be Facebook ID, username or email, or any other user ID. - This allows data and events to be matched across multiple user devices. - */ -- (void)setUserId:(NSString *)userId; - -/** - Move all events from oldUserId to newUserId if doMerge is true. If doMerge is false all events for oldUserId are removed. - - @param oldUserId source user - @param newUserId destination user - @param doMerge if false all events for oldUserId are removed, if true all events for oldUserId are moved to newUserId - @param completion callback - */ -- (void)mergeUserId:(NSString *)oldUserId to:(NSString *)newUserId doMerge:(BOOL)doMerge completion:(void (^)(NSError *error))completion; - -/** - Post events for In-App Messages. This can trigger In-App message display as specified in Pushwoosh Control Panel. - - Example: - - [[PWInAppManager sharedManager] setUserId:@"96da2f590cd7246bbde0051047b0d6f7"]; - [[PWInAppManager sharedManager] postEvent:@"buttonPressed" withAttributes:@{ @"buttonNumber" : @"4", @"buttonLabel" : @"Banner" } completion:nil]; - - @param event name of the event - @param attributes NSDictionary of event attributes - @param completion function to call after posting event - */ -- (void)postEvent:(NSString *)event withAttributes:(NSDictionary *)attributes completion:(void (^)(NSError *error))completion; - -/** - See `postEvent:withAttributes:completion:` - */ -- (void)postEvent:(NSString *)event withAttributes:(NSDictionary *)attributes; - -#if TARGET_OS_IPHONE - -/** - Adds javascript interface for In-App Messages. Interface will be accessible from javascript as object with specified `name` and functions defined in `interface` class. - */ -- (void)addJavascriptInterface:(NSObject*)interface withName:(NSString*)name; - -#endif - -@end diff --git a/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/PWInbox.h b/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/PWInbox.h deleted file mode 100644 index d9e178dbb1..0000000000 --- a/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/PWInbox.h +++ /dev/null @@ -1,129 +0,0 @@ -// -// PWInbox.h -// Pushwoosh SDK -// (c) Pushwoosh 2017 -// - -#import - - -/** - The notification arriving on the Inbox messages renewal - */ -FOUNDATION_EXPORT NSString * const PWInboxMessagesDidUpdateNotification; - -/** - The notification arriving when a push message is added to Inbox - */ -FOUNDATION_EXPORT NSString * const PWInboxMessagesDidReceiveInPushNotification; - -/** - The Inbox message type. Plain = without any action, Richmedia = contains a Rich media page, URL = contains remote URL, Deeplink = contains Deeplink - */ -typedef NS_ENUM(NSInteger, PWInboxMessageType) { - PWInboxMessageTypePlain = 0, - PWInboxMessageTypeRichmedia = 1, - PWInboxMessageTypeURL = 2, - PWInboxMessageTypeDeeplink = 3 -}; - - -/** - `PWInboxMessageProtocol` The protocol describing the Inbox message. - */ -@protocol PWInboxMessageProtocol - -@required - -@property (readonly, nonatomic) NSString *code; -@property (readonly, nonatomic) NSString *title; -@property (readonly, nonatomic) NSString *imageUrl; -@property (readonly, nonatomic) NSString *message; -@property (readonly, nonatomic) NSDate *sendDate; -@property (readonly, nonatomic) PWInboxMessageType type; -//! Inbox Message which is read, see + (void)readMessagesWithCodes:(NSArray *)codes -@property (readonly, nonatomic) BOOL isRead; -//! Action of the Inbox Message is performed (if true, an action was performed in the Inbox see + (void)performActionForMessageWithCode:(NSString *)code or an action was performed on the push tap ) -@property (readonly, nonatomic) BOOL isActionPerformed; -@property (readonly, nonatomic) NSDictionary *actionParams; -@property (readonly, nonatomic) NSString *attachmentUrl; - -@end - -@interface PWInbox : NSObject - -- (instancetype)init NS_UNAVAILABLE; - -/** - Get the number of the PWInboxMessageProtocol with no action performed - - @param completion - if successful, return the number of the InboxMessages with no action performed. Otherwise, return error - */ -+ (void)messagesWithNoActionPerformedCountWithCompletion:(void (^)(NSInteger count, NSError *error))completion; - -/** - Get the number of the unread PWInboxMessageProtocol - - @param completion - if successful, return the number of the unread InboxMessages. Otherwise, return error - */ -+ (void)unreadMessagesCountWithCompletion:(void (^)(NSInteger count, NSError *error))completion; - -/** - Get the total number of the PWInboxMessageProtocol - - @param completion - if successful, return the total number of the InboxMessages. Otherwise, return error - */ -+ (void)messagesCountWithCompletion:(void (^)(NSInteger count, NSError *error))completion; - -/** - Get the collection of the PWInboxMessageProtocol that the user received - - @param completion - if successful, return the collection of the InboxMessages. Otherwise, return error - */ -+ (void)loadMessagesWithCompletion:(void (^)(NSArray *> *messages, NSError *error))completion; - -/** - Call this method to mark the list of InboxMessageProtocol as read - - @param codes of the inboxMessages - */ -+ (void)readMessagesWithCodes:(NSArray *)codes; - -/** - Call this method, when the user clicks on the InboxMessageProtocol and the message’s action is performed - - @param code of the inboxMessage that the user tapped - */ -+ (void)performActionForMessageWithCode:(NSString *)code; - -/** - Call this method, when the user deletes the list of InboxMessageProtocol manually - - @param codes of the list of InboxMessageProtocol.code that the user deleted - */ -+ (void)deleteMessagesWithCodes:(NSArray *)codes; - -/** - Subscribe for messages arriving with push notifications. @warning You need to unsubscribe by calling the removeObserver method, if you don't want to receive notifications - - @param completion - return the collection of the InboxMessages. - */ -+ (id)addObserverForDidReceiveInPushNotificationCompletion:(void (^)(NSArray *> *messagesAdded))completion; - -/** - Subscribe for messages arriving when a message is deleted, added, or updated. @warning You need to unsubscribe by calling the removeObserver method, if you don't want to receive notifications - - @param completion - return the collection of the InboxMessages. - */ -+ (id)addObserverForUpdateInboxMessagesCompletion:(void (^)(NSArray *messagesDeleted, - NSArray *> *messagesAdded, - NSArray *> *messagesUpdated))completion; - -/** - Unsubscribes from notifications - - @param observer - Unsubscribes observer - */ -+ (void)removeObserver:(id)observer; - -@end diff --git a/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/PWInlineInAppView.h b/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/PWInlineInAppView.h deleted file mode 100644 index 330e109527..0000000000 --- a/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/PWInlineInAppView.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// PWInlineInAppView.h -// Pushwoosh -// -// Created by Fectum on 22/10/2018. -// Copyright © 2018 Pushwoosh. All rights reserved. -// - -#import - -@interface PWInlineInAppView : UIView - -@property (nonatomic) IBInspectable NSString *identifier; - -@end diff --git a/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/PWLog.h b/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/PWLog.h deleted file mode 100644 index 7d83acfa70..0000000000 --- a/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/PWLog.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// PWLog.h -// Pushwoosh SDK -// (c) Pushwoosh 2016 -// - -#import - -typedef NSString *PWLogLevel NS_EXTENSIBLE_STRING_ENUM; - -extern PWLogLevel const PWLogLevelNone; -extern PWLogLevel const PWLogLevelError; -extern PWLogLevel const PWLogLevelWarning; -extern PWLogLevel const PWLogLevelInfo; -extern PWLogLevel const PWLogLevelDebug; -extern PWLogLevel const PWLogLevelVerbose; - -@interface PWLog : NSObject - -+ (void)setLogsHandler:(void(^)(PWLogLevel level, NSString *description))logsHandler; -+ (void)removeLogsHandler; - -@end diff --git a/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/PWRichMediaManager.h b/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/PWRichMediaManager.h deleted file mode 100644 index d67c98102b..0000000000 --- a/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/PWRichMediaManager.h +++ /dev/null @@ -1,113 +0,0 @@ -// -// PWRichMediaManager.h -// Pushwoosh SDK -// (c) Pushwoosh 2018 -// - -#import - -#if TARGET_OS_IPHONE - -#import "PWRichMediaStyle.h" - -#endif - -typedef NS_ENUM(NSUInteger, PWRichMediaSource) { - /** - RichMedia is presented from push notification. - */ - PWRichMediaSourcePush, - - /** - RichMedia is presented from In-App. - */ - PWRichMediaSourceInApp -}; - - -/* - `PWRichMedia` class represents Rich Media page object. - */ -@interface PWRichMedia: NSObject - -/** - Rich Media presenter type. - */ -@property (nonatomic, readonly) PWRichMediaSource source; - -/** - Content of the Rich Media. For PWRichMediaSourceInApp it's equal to In-App code, for PWRichMediaSourcePush it's equal to Rich Media code. - */ -@property (nonatomic, readonly) NSString *content; - -/** - Checks if PWRichMediaSourceInApp is a required In-App. Always returns YES for PWRichMediaSourcePush. - */ -@property (nonatomic, readonly, getter=isRequired) BOOL required; - -@end - - -@class PWRichMediaManager; - -/** - Interface for Rich Media presentation managing. - */ -@protocol PWRichMediaPresentingDelegate - -@optional - -/** - Checks the delegate whether the Rich Media should be displayed. - */ -- (BOOL)richMediaManager:(PWRichMediaManager *)richMediaManager shouldPresentRichMedia:(PWRichMedia *)richMedia; - -/** - Tells the delegate that Rich Media has been displayed. - */ -- (void)richMediaManager:(PWRichMediaManager *)richMediaManager didPresentRichMedia:(PWRichMedia *)richMedia; - -/** - Tells the delegate that Rich Media has been closed. - */ -- (void)richMediaManager:(PWRichMediaManager *)richMediaManager didCloseRichMedia:(PWRichMedia *)richMedia; - -/** - Tells the delegate that error during Rich Media presenting has been occured. - */ -- (void)richMediaManager:(PWRichMediaManager *)richMediaManager presentingDidFailForRichMedia:(PWRichMedia *)richMedia withError:(NSError *)error; - -@end - - -/* - `PWRichMediaManager` class offers access to the singleton-instance of the manager responsible for Rich Media presentation. - */ -@interface PWRichMediaManager : NSObject - -#if TARGET_OS_IPHONE - -/** - Style for Rich Media presenting. - */ -@property (nonatomic) PWRichMediaStyle *richMediaStyle; - -#endif - -/** - Delegate for Rich Media presentation managing. - */ -@property (nonatomic) id delegate; - -/** - A singleton object that represents the rich media manager. - */ -+ (instancetype)sharedManager; - -/** - Presents the rich media object. - */ -- (void)presentRichMedia:(PWRichMedia *)richMedia; - -@end - diff --git a/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/PWRichMediaStyle.h b/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/PWRichMediaStyle.h deleted file mode 100644 index c84780ae85..0000000000 --- a/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/PWRichMediaStyle.h +++ /dev/null @@ -1,113 +0,0 @@ -// -// PWRichMediaStyle.h -// Pushwoosh SDK -// (c) Pushwoosh 2018 -// - -#import - -FOUNDATION_EXPORT NSTimeInterval const PWRichMediaStyleDefaultAnimationDuration; - -/** - Interface for Rich Media Custom Animation. - */ -@protocol PWRichMediaStyleAnimationDelegate - -/** - This method can be used to animate Rich Media presenting view. - */ -- (void)runPresentingAnimationWithContentView:(UIView *)contentView parentView:(UIView *)parentView completion:(dispatch_block_t)completion; - -/** - This method can be used to animate Rich Media dismissing view. - */ -- (void)runDismissingAnimationWithContentView:(UIView *)contentView parentView:(UIView *)parentView completion:(dispatch_block_t)completion; - -@end - -/** - Built-in Rich Media presenting animations. - - Example: - - style.animationDelegate = [PWRichMediaStyleSlideLeftAnimation new]; - - */ -@interface PWRichMediaStyleSlideLeftAnimation : NSObject -@end - -@interface PWRichMediaStyleSlideRightAnimation : NSObject -@end - -@interface PWRichMediaStyleSlideTopAnimation : NSObject -@end - -@interface PWRichMediaStyleSlideBottomAnimation : NSObject -@end - -@interface PWRichMediaStyleCrossFadeAnimation : NSObject -@end - -/** - Custom Rich Media loading view. It is shown while Rich Media is loading. - */ -@interface PWLoadingView : UIView - -@property (nonatomic) IBOutlet UIActivityIndicatorView *activityIndicatorView; -@property (nonatomic) IBOutlet UIButton *cancelLoadingButton; - -@end - - -typedef PWLoadingView *(^PWRichMediaLoadingViewBlock)(void); - - -/** - 'PWRichMediaStyle' class allows customizing the appearance of Rich Media pages. - */ -@interface PWRichMediaStyle : NSObject - -/** - Background color of Rich Media pages. - */ -@property (nonatomic) UIColor *backgroundColor; - -/** - Delegate to manage Rich Media presenting animation. - */ -@property (nonatomic) id animationDelegate; - -/** - Block to customize Rich Media loading view. - - Example: - - style.loadingViewBlock = ^PWLoadingView *{ - return [[[NSBundle mainBundle] loadNibNamed:@"LoadingView" owner:self options:nil] lastObject]; - }; - - */ -@property (nonatomic) PWRichMediaLoadingViewBlock loadingViewBlock; - -/** - Delay of the close button presenting in seconds. - */ -@property (nonatomic) NSTimeInterval closeButtonPresentingDelay; - -/** - Should status bar to be hidden or not while Rich Media page is presented. Default is 'YES'. - */ -@property (nonatomic) BOOL shouldHideStatusBar; - -/** - A Boolean value that determines whether HTML5 videos play inline or use the native full-screen controller. - */ -@property (nonatomic) NSNumber *allowsInlineMediaPlayback; - -/** - A Boolean value that determines whether HTML5 videos can play automatically or require the user to start playing them. - */ -@property (nonatomic) NSNumber *mediaPlaybackRequiresUserAction; - -@end - diff --git a/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/PushNotificationManager.h b/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/PushNotificationManager.h deleted file mode 100644 index 6a37e4307b..0000000000 --- a/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/PushNotificationManager.h +++ /dev/null @@ -1,553 +0,0 @@ -// -// PushNotificationManager.h -// Pushwoosh SDK -// (c) Pushwoosh 2014 -// - -#import - -#if TARGET_OS_IPHONE -#import -#import -#import -#endif - -#define PUSHWOOSH_VERSION @"5.16.0" - - -@class PushNotificationManager; - -#if TARGET_OS_IPHONE -@class CLLocation; -#endif - -typedef void (^PushwooshGetTagsHandler)(NSDictionary *tags); -typedef void (^PushwooshErrorHandler)(NSError *error); - -/** - `PushNotificationDelegate` protocol defines the methods that can be implemented in the delegate of the `PushNotificationManager` class' singleton object. - These methods provide information about the key events for push notification manager such as registering with APS services, receiving push notifications or working with the received notification. - These methods implementation allows to react on these events properly. - */ -@protocol PushNotificationDelegate - -@optional -/** - Tells the delegate that the application has registered with Apple Push Service (APS) successfully. - - @param token A token used for identifying the device with APS. - */ -- (void)onDidRegisterForRemoteNotificationsWithDeviceToken:(NSString *)token; - -/** - Sent to the delegate when Apple Push Service (APS) could not complete the registration process successfully. - - @param error An NSError object encapsulating the information about the reason of the registration failure. Within this method you can define application's behaviour in case of registration failure. - */ -- (void)onDidFailToRegisterForRemoteNotificationsWithError:(NSError *)error; - -/** - Tells the delegate that the push manager has received a remote notification. - - @param pushManager The push manager that received the remote notification. - @param pushNotification A dictionary that contains information referring to the remote notification, potentially including a badge number for the application icon, an alert sound, an alert message to display to the user, a notification identifier, and custom data. - The provider originates it as a JSON-defined dictionary that iOS converts to an NSDictionary object; the dictionary may contain only property-list objects plus NSNull. -@param onStart If the application was not foreground when the push notification was received, the application will be opened with this parameter equal to `YES`, otherwise the parameter will be `NO`. - */ -- (void)onPushReceived:(PushNotificationManager *)pushManager withNotification:(NSDictionary *)pushNotification onStart:(BOOL)onStart; - -/** - Tells the delegate that the user has pressed OK on the push notification. - IMPORTANT: This method is used for backwards compatibility and is deprecated. Please use the `onPushAccepted:withNotification:onStart:` method instead - - @param pushManager The push manager that received the remote notification. - @param pushNotification A dictionary that contains information referring to the remote notification, potentially including a badge number for the application icon, an alert sound, an alert message to display to the user, a notification identifier, and custom data. - The provider originates it as a JSON-defined dictionary that iOS converts to an NSDictionary object; the dictionary may contain only property-list objects plus NSNull. - Push dictionary sample: - - { - aps = { - alert = "Some text."; - sound = default; - }; - p = 1pb; - } - - */ -- (void)onPushAccepted:(PushNotificationManager *)pushManager withNotification:(NSDictionary *)pushNotification DEPRECATED_ATTRIBUTE; - -/** - Tells the delegate that the user has pressed on the push notification banner. - - @param pushManager The push manager that received the remote notification. - @param pushNotification A dictionary that contains information about the remote notification, potentially including a badge number for the application icon, an alert sound, an alert message to display to the user, a notification identifier, and custom data. - The provider originates it as a JSON-defined dictionary that iOS converts to an NSDictionary object; the dictionary may contain only property-list objects plus NSNull. - Push dictionary sample: - - { - aps = { - alert = "Some text."; - sound = default; - }; - p = 1pb; - } - - @param onStart If the application was not foreground when the push notification was received, the application will be opened with this parameter equal to `YES`, otherwise the parameter will be `NO`. - */ -- (void)onPushAccepted:(PushNotificationManager *)pushManager withNotification:(NSDictionary *)pushNotification onStart:(BOOL)onStart; - -/** - Tells the delegate that the push manager has received tags from the server. - - @param tags Dictionary representation of received tags. - Dictionary example: - - { - Country = ru; - Language = ru; - } - - */ -- (void)onTagsReceived:(NSDictionary *)tags; - -/** - Sent to the delegate when push manager could not complete the tags receiving process successfully. - - @param error An NSError object that encapsulates information why receiving tags did not succeed. - */ -- (void)onTagsFailedToReceive:(NSError *)error; - -/** - Tells the delegate that In-App with specified code has been closed - - @param code In-App code - */ -- (void)onInAppClosed:(NSString *)code __attribute__((deprecated("Use PWRichMediaPresentingDelegate protocol from PWRichMediaManager.h"))); - -/** - Tells the delegate that In-App with specified code has been displayed - - @param code In-App code - */ -- (void)onInAppDisplayed:(NSString *)code __attribute__((deprecated("Use PWRichMediaPresentingDelegate protocol from PWRichMediaManager.h"))); - - -#if TARGET_OS_IPHONE -/** - The method will be called on the delegate when the application is launched in response to the user's request to view in-app notification settings. - Add UNAuthorizationOptionProvidesAppNotificationSettings as an option in [PushNotificationManager pushManager].additionalAuthorizationOptions to add a button to inline notification settings view and the notification settings view in Settings. - The notification will be nil when opened from Settings. - - @param pushManager PushNotificationManager instance - @param notification Source notification - */ -- (void)pushManager:(PushNotificationManager *)pushManager openSettingsForNotification:(UNNotification *)notification __IOS_AVAILABLE(12.0); - -#endif - -@end - -/** - `PWTags` class encapsulates the methods for creating tags parameters for sending them to the server. - */ -@interface PWTags : NSObject - -/** - Creates a dictionary for incrementing/decrementing a numeric tag on the server. - - Example: - - NSDictionary *tags = [NSDictionary dictionaryWithObjectsAndKeys: - aliasField.text, @"Alias", - [NSNumber numberWithInt:[favNumField.text intValue]], @"FavNumber", - [PWTags incrementalTagWithInteger:5], @"price", - nil]; - - [[PushNotificationManager pushManager] setTags:tags]; - - @param delta Difference that needs to be applied to the tag's counter. - - @return Dictionary, that needs to be sent as the value for the tag - */ -+ (NSDictionary *)incrementalTagWithInteger:(NSInteger)delta; - -/** - Creates a dictionary for extending Tag’s values list with additional values - - Example: - - NSDictionary *tags = \@{ - \@"Alias" : aliasField.text, - \@"FavNumber" : \@([favNumField.text intValue]), - \@"List" : [PWTags appendValuesToListTag:@[ @"Item1" ]] - }; - - [[PushNotificationManager pushManager] setTags:tags]; - - @param array Array of values to be added to the tag. - - @return Dictionary to be sent as the value for the tag - */ -+ (NSDictionary *)appendValuesToListTag:(NSArray *)array; - -@end - -/** - `PushNotificationManager` class offers access to the singleton-instance of the push manager responsible for registering the device with the APS servers, receiving and processing push notifications. - */ -@interface PushNotificationManager : NSObject { -} - -/** - Pushwoosh Application ID. Usually retrieved automatically from Info.plist parameter `Pushwoosh_APPID` - */ -@property (nonatomic, copy, readonly) NSString *appCode; - -/** - Application name. Usually retrieved automatically from Info.plist bundle name (CFBundleDisplayName). Could be used to override bundle name. In addition could be set in Info.plist as `Pushwoosh_APPNAME` parameter. - */ -@property (nonatomic, copy, readonly) NSString *appName; - -/** - `PushNotificationDelegate` protocol delegate that would receive the information about events for push notification manager such as registering with APS services, receiving push notifications or working with the received notification. - Pushwoosh Runtime sets it to ApplicationDelegate by default - */ -@property (nonatomic, weak) NSObject *delegate; - -#if TARGET_OS_IPHONE - -/** - Show push notifications alert when push notification is received while the app is running, default is `YES` - */ -@property (nonatomic, assign) BOOL showPushnotificationAlert; - -/** - Authorization options in addition to UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionCarPlay. - */ -@property (nonatomic) UNAuthorizationOptions additionalAuthorizationOptions __IOS_AVAILABLE(12.0); - -#endif - -/** - Returns push notification payload if the app was started in response to push notification or null otherwise - */ -@property (nonatomic, copy, readonly) NSDictionary *launchNotification; - -#if TARGET_OS_IPHONE - -/** - Returns UNUserNotificationCenterDelegate that handles foreground push notifications on iOS10 - */ -@property (nonatomic, strong, readonly) id notificationCenterDelegate; - -#else - -@property (nonatomic, strong, readonly) id notificationCenterDelegate; - -#endif - -/** - Set custom application language. Must be a lowercase two-letter code according to ISO-639-1 standard ("en", "de", "fr", etc.). - Device language used by default. - Set to nil if you want to use device language again. - */ -@property (nonatomic) NSString *language; - -/** - Initializes PushNotificationManager. Usually called by Pushwoosh Runtime internally. - @param appCode Pushwoosh App ID. - @param appName Application name. - */ -+ (void)initializeWithAppCode:(NSString *)appCode appName:(NSString *)appName; - -/** - Returns an object representing the current push manager. - - @return A singleton object that represents the push manager. - */ -+ (PushNotificationManager *)pushManager; - -/** - Registers for push notifications. By default registeres for "UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert" flags. - Automatically detects if you have "newsstand-content" in "UIBackgroundModes" and adds "UIRemoteNotificationTypeNewsstandContentAvailability" flag. - */ -- (void)registerForPushNotifications; - -/** - Unregisters from push notifications. - */ -- (void)unregisterForPushNotificationsWithCompletion:(void (^)(NSError *error))completion; - -/** - Deprecated. Use unregisterForPushNotificationsWithCompletion: method instead - */ -- (void)unregisterForPushNotifications __attribute__((deprecated)); - -/** - Deprecated. Use initializeWithAppCode:appName: method instead - */ -- (instancetype)initWithApplicationCode:(NSString *)appCode appName:(NSString *)appName __attribute__((deprecated)); - -#if TARGET_OS_IPHONE - -/** - Deprecated. Use initializeWithAppCode:appName: method instead - */ -- (id)initWithApplicationCode:(NSString *)appCode navController:(UIViewController *)navController appName:(NSString *)appName __attribute__((deprecated)); - -/** - Start location tracking. - - Deprecated. Use PushwooshGeozones framework. - */ -- (void)startLocationTracking __attribute__((deprecated("Use PushwooshGeozones framework"))); - -/** - Stops location tracking - - Deprecated. Use PushwooshGeozones framework. - */ -- (void)stopLocationTracking __attribute__((deprecated("Use PushwooshGeozones framework"))); - -/** - Explicitly sends geolocation to the server for GeoFencing push technology. Also called internally, please use `startLocationTracking` and `stopLocationTracking` functions. - - @param location Location to be sent. - - Deprecated. Use PushwooshGeozones framework. - */ -- (void)sendLocation:(CLLocation *)location __attribute__((deprecated("Use PushwooshGeozones framework"))); - -#endif - -/** - Send tags to server. Tag names have to be created in the Pushwoosh Control Panel. Possible tag types: Integer, String, Incremental (integer only), List tags (array of values). - - Example: - - NSDictionary *tags = [NSDictionary dictionaryWithObjectsAndKeys: - aliasField.text, @"Alias", - [NSNumber numberWithInt:[favNumField.text intValue]], @"FavNumber", - [PWTags incrementalTagWithInteger:5], @"price", - [NSArray arrayWithObjects:@"Item1", @"Item2", @"Item3", nil], @"List", - nil]; - - [[PushNotificationManager pushManager] setTags:tags]; - - @param tags Dictionary representation of tags to send. - */ -- (void)setTags:(NSDictionary *)tags; - -/** - Send tags to server with completion block. If setTags succeeds competion is called with nil argument. If setTags fails completion is called with error. - */ -- (void)setTags:(NSDictionary *)tags withCompletion:(void (^)(NSError *error))completion; - -/** - Get tags from the server. Calls delegate method `onTagsReceived:` or `onTagsFailedToReceive:` depending on the results. - */ -- (void)loadTags; - -/** - Get tags from server. Calls delegate method if exists and handler (block). - - @param successHandler The block is executed on the successful completion of the request. This block has no return value and takes one argument: the dictionary representation of the recieved tags. - Example of the dictionary representation of the received tags: - - { - Country = ru; - Language = ru; - } - - @param errorHandler The block is executed on the unsuccessful completion of the request. This block has no return value and takes one argument: the error that occurred during the request. - */ -- (void)loadTags:(PushwooshGetTagsHandler)successHandler error:(PushwooshErrorHandler)errorHandler; - -/** - Informs the Pushwoosh about the app being launched. Usually called internally by SDK Runtime. - */ -- (void)sendAppOpen; - -/** - Sends current badge value to server. Called internally by SDK Runtime when `UIApplication` `setApplicationBadgeNumber:` is set. This function is used for "auto-incremeting" badges to work. - This way Pushwoosh server can know what current badge value is set for the application. - - @param badge Current badge value. - */ -- (void)sendBadges:(NSInteger)badge; - -+ (NSString *)pushwooshVersion; - -#if TARGET_OS_IPHONE -/** - Sends in-app purchases to Pushwoosh. Use in paymentQueue:updatedTransactions: payment queue method (see example). - - Example: - - - (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions { - [[PushNotificationManager pushManager] sendSKPaymentTransactions:transactions]; - } - - @param transactions Array of SKPaymentTransaction items as received in the payment queue. - */ -- (void)sendSKPaymentTransactions:(NSArray *)transactions; -#endif - -/** - Tracks individual in-app purchase. See recommended `sendSKPaymentTransactions:` method. - - @param productIdentifier purchased product ID - @param price price for the product - @param currencyCode currency of the price (ex: @"USD") - @param date time of the purchase (ex: [NSDate now]) - */ -- (void)sendPurchase:(NSString *)productIdentifier withPrice:(NSDecimalNumber *)price currencyCode:(NSString *)currencyCode andDate:(NSDate *)date; - -/** - Gets current push token. - - @return Current push token. May be nil if no push token is available yet. - */ -- (NSString *)getPushToken; - -/** - Gets HWID. Unique device identifier that used in all API calls with Pushwoosh. - This is identifierForVendor for iOS >= 7. - - @return Unique device identifier. - */ -- (NSString *)getHWID; - -- (void)handlePushRegistration:(NSData *)devToken; -- (void)handlePushRegistrationString:(NSString *)deviceID; - -- (void)handlePushRegistrationFailure:(NSError *)error; - -//If the push is received while the app is running. Call it only for iOS version < 10. For iOS 10 and higher use notificationCenterDelegate. -- (BOOL)handlePushReceived:(NSDictionary *)userInfo; - -/** - Gets APN payload from push notifications dictionary. - - Example: - - - (void) onPushAccepted:(PushNotificationManager *)pushManager withNotification:(NSDictionary *)pushNotification onStart:(BOOL)onStart { - NSDictionary * apnPayload = [[PushNotificationsManager pushManager] getApnPayload:pushNotification]; - NSLog(@"%@", apnPayload); - } - - For Push dictionary sample: - - { - aps = { - alert = "Some text."; - sound = default; - }; - p = 1pb; - } - - Result is: - - { - alert = "Some text."; - sound = default; - }; - - @param pushNotification Push notifications dictionary as received in `onPushAccepted: withNotification: onStart:` - */ -- (NSDictionary *)getApnPayload:(NSDictionary *)pushNotification; - -/** - Gets custom JSON string data from push notifications dictionary as specified in Pushwoosh Control Panel. - - Example: - - - (void) onPushAccepted:(PushNotificationManager *)pushManager withNotification:(NSDictionary *)pushNotification onStart:(BOOL)onStart { - NSString * customData = [[PushNotificationsManager pushManager] getCustomPushData:pushNotification]; - NSLog(@"%@", customData); - } - - @param pushNotification Push notifications dictionary as received in `onPushAccepted: withNotification: onStart:` - */ -- (NSString *)getCustomPushData:(NSDictionary *)pushNotification; - -/** - The same as getCustomPushData but returns NSDictionary rather than JSON string (converts JSON string into NSDictionary). - */ -- (NSDictionary *)getCustomPushDataAsNSDict:(NSDictionary *)pushNotification; - -/** - Returns dictionary with enabled remove notificaton types. - Example enabled push: - { - enabled = 1; - pushAlert = 1; - pushBadge = 1; - pushSound = 1; - type = 7; - } - - where "type" field is UIUserNotificationType - - Disabled push: - { - enabled = 1; - pushAlert = 0; - pushBadge = 0; - pushSound = 0; - type = 0; - } - - Note: In the latter example "enabled" field means that device can receive push notification but could not display alerts (ex: silent push) - */ -+ (NSMutableDictionary *)getRemoteNotificationStatus; - -/** - Clears the notifications from the notification center. - */ -+ (void)clearNotificationCenter; - -/** - Set User indentifier. This could be Facebook ID, username or email, or any other user ID. - This allows data and events to be matched across multiple user devices. - - Deprecated. Use PWInAppManager setUserId method instead - */ -- (void)setUserId:(NSString *)userId __attribute__ ((deprecated));; - -/** - Move all events from oldUserId to newUserId if doMerge is true. If doMerge is false all events for oldUserId are removed. - - @param oldUserId source user - @param newUserId destination user - @param doMerge if false all events for oldUserId are removed, if true all events for oldUserId are moved to newUserId - @param completion callback - - Deprecated. Use PWInAppManager mergeUserId method instead - */ -- (void)mergeUserId:(NSString *)oldUserId to:(NSString *)newUserId doMerge:(BOOL)doMerge completion:(void (^)(NSError *error))completion __attribute__ ((deprecated)); - -/** - Post events for In-App Messages. This can trigger In-App message display as specified in Pushwoosh Control Panel. - - Example: - - [[PushNotificationManager pushManager] setUserId:@"96da2f590cd7246bbde0051047b0d6f7"]; - [[PushNotificationManager pushManager] postEvent:@"buttonPressed" withAttributes:@{ @"buttonNumber" : @"4", @"buttonLabel" : @"Banner" } completion:nil]; - - @param event name of the event - @param attributes NSDictionary of event attributes - @param completion function to call after posting event - - Deprecated. Use PWInAppManager postEvent method instead - */ -- (void)postEvent:(NSString *)event withAttributes:(NSDictionary *)attributes completion:(void (^)(NSError *error))completion __attribute__ ((deprecated)); - -/** - See `postEvent:withAttributes:completion:` - - Deprecated. Use PWInAppManager postEvent method instead - */ -- (void)postEvent:(NSString *)event withAttributes:(NSDictionary *)attributes __attribute__ ((deprecated)); - -@end diff --git a/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/Pushwoosh.h b/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/Pushwoosh.h deleted file mode 100644 index 88cbdb58c9..0000000000 --- a/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Headers/Pushwoosh.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// Pushwoosh.h -// Pushwoosh SDK -// (c) Pushwoosh 2016 -// - -#import "PushNotificationManager.h" -#import "PWInAppManager.h" -#import "PWLog.h" -#import "PWGDPRManager.h" -#import "PWAppDelegate.h" - -#if TARGET_OS_IPHONE - #import "PWRichMediaManager.h" - #import "PWRichMediaStyle.h" - #import "PWInbox.h" - #import "PWInlineInAppView.h" -#endif diff --git a/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Pushwoosh b/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Pushwoosh deleted file mode 100644 index e8c1776444..0000000000 Binary files a/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/A/Pushwoosh and /dev/null differ diff --git a/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/Current b/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/Current deleted file mode 120000 index 8c7e5a667f..0000000000 --- a/iphone/Maps/Pods/Pushwoosh/Framework/Pushwoosh.framework/Versions/Current +++ /dev/null @@ -1 +0,0 @@ -A \ No newline at end of file diff --git a/iphone/Maps/Pods/Pushwoosh/LICENSE b/iphone/Maps/Pods/Pushwoosh/LICENSE deleted file mode 100644 index 0f64c06476..0000000000 --- a/iphone/Maps/Pods/Pushwoosh/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2014 Pushwoosh (http://www.pushwoosh.com) - -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: - -(i) the original and/or modified Software should be used exclusively to work with Pushwoosh services, - -(ii) 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. \ No newline at end of file diff --git a/iphone/Maps/Pods/Pushwoosh/README.md b/iphone/Maps/Pods/Pushwoosh/README.md deleted file mode 100644 index d181fa912e..0000000000 --- a/iphone/Maps/Pods/Pushwoosh/README.md +++ /dev/null @@ -1,21 +0,0 @@ -Pushwoosh iOS SDK -===================== - -[![GitHub release](https://img.shields.io/github/release/Pushwoosh/pushwoosh-ios-sdk.svg?style=flat-square)](https://github.com/Pushwoosh/pushwoosh-ios-sdk/releases) -[![CocoaPods compatible](https://img.shields.io/cocoapods/v/Pushwoosh.svg)](https://cocoapods.org/?q=pushwoosh) -[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) - -[![Guide](https://img.shields.io/badge/guide-latest-brightgreen.svg?style=flat-square)](http://docs.pushwoosh.com/docs/native-ios-sdk) -[![Documentation](https://img.shields.io/badge/docs-latest-brightgreen.svg?style=flat-square)](https://github.com/Pushwoosh/pushwoosh-ios-sdk/tree/master/Documentation) - -The guide for SDK integration is available on Pushwoosh website: -https://www.pushwoosh.com/platform-docs/pushwoosh-sdk/ios-push-notifications/setting-up-pushwoosh-ios-sdk - -The sample project is available here: -https://github.com/Pushwoosh/pushwoosh-ios-sdk/tree/master/Samples/iPhone - -Documentation: -https://github.com/Pushwoosh/pushwoosh-ios-sdk/tree/master/Documentation - -Pushwoosh team -http://www.pushwoosh.com diff --git a/iphone/Maps/Pods/Target Support Files/AppsFlyerFramework/AppsFlyerFramework.debug.xcconfig b/iphone/Maps/Pods/Target Support Files/AppsFlyerFramework/AppsFlyerFramework.debug.xcconfig deleted file mode 100644 index 94cf3b02f8..0000000000 --- a/iphone/Maps/Pods/Target Support Files/AppsFlyerFramework/AppsFlyerFramework.debug.xcconfig +++ /dev/null @@ -1,11 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/AppsFlyerFramework -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/AppsFlyerFramework" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -framework "AdSupport" -framework "CoreTelephony" -framework "Security" -framework "SystemConfiguration" -framework "iAd" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/AppsFlyerFramework -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/AppsFlyerFramework/AppsFlyerFramework.release.xcconfig b/iphone/Maps/Pods/Target Support Files/AppsFlyerFramework/AppsFlyerFramework.release.xcconfig deleted file mode 100644 index 94cf3b02f8..0000000000 --- a/iphone/Maps/Pods/Target Support Files/AppsFlyerFramework/AppsFlyerFramework.release.xcconfig +++ /dev/null @@ -1,11 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/AppsFlyerFramework -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/AppsFlyerFramework" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -framework "AdSupport" -framework "CoreTelephony" -framework "Security" -framework "SystemConfiguration" -framework "iAd" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/AppsFlyerFramework -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/AppsFlyerFramework/AppsFlyerFramework.xcconfig b/iphone/Maps/Pods/Target Support Files/AppsFlyerFramework/AppsFlyerFramework.xcconfig deleted file mode 100644 index 94cf3b02f8..0000000000 --- a/iphone/Maps/Pods/Target Support Files/AppsFlyerFramework/AppsFlyerFramework.xcconfig +++ /dev/null @@ -1,11 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/AppsFlyerFramework -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/AppsFlyerFramework" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -framework "AdSupport" -framework "CoreTelephony" -framework "Security" -framework "SystemConfiguration" -framework "iAd" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/AppsFlyerFramework -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/FBAudienceNetwork/FBAudienceNetwork.debug.xcconfig b/iphone/Maps/Pods/Target Support Files/FBAudienceNetwork/FBAudienceNetwork.debug.xcconfig deleted file mode 100644 index a009e2abcc..0000000000 --- a/iphone/Maps/Pods/Target Support Files/FBAudienceNetwork/FBAudienceNetwork.debug.xcconfig +++ /dev/null @@ -1,11 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FBAudienceNetwork -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKCoreKit" "${PODS_ROOT}/FBAudienceNetwork/Static" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -l"c++" -l"xml2" -framework "AVFoundation" -framework "AudioToolbox" -framework "CoreGraphics" -framework "CoreImage" -framework "CoreMedia" -framework "Foundation" -framework "Security" -framework "StoreKit" -framework "UIKit" -weak_framework "Accelerate" -weak_framework "Accounts" -weak_framework "AdSupport" -weak_framework "AudioToolbox" -weak_framework "CFNetwork" -weak_framework "CoreGraphics" -weak_framework "CoreLocation" -weak_framework "CoreMotion" -weak_framework "CoreTelephony" -weak_framework "Foundation" -weak_framework "LocalAuthentication" -weak_framework "QuartzCore" -weak_framework "SafariServices" -weak_framework "Security" -weak_framework "Social" -weak_framework "SystemConfiguration" -weak_framework "UIKit" -weak_framework "VideoToolbox" -weak_framework "WebKit" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/FBAudienceNetwork -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/FBAudienceNetwork/FBAudienceNetwork.release.xcconfig b/iphone/Maps/Pods/Target Support Files/FBAudienceNetwork/FBAudienceNetwork.release.xcconfig deleted file mode 100644 index a009e2abcc..0000000000 --- a/iphone/Maps/Pods/Target Support Files/FBAudienceNetwork/FBAudienceNetwork.release.xcconfig +++ /dev/null @@ -1,11 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FBAudienceNetwork -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKCoreKit" "${PODS_ROOT}/FBAudienceNetwork/Static" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -l"c++" -l"xml2" -framework "AVFoundation" -framework "AudioToolbox" -framework "CoreGraphics" -framework "CoreImage" -framework "CoreMedia" -framework "Foundation" -framework "Security" -framework "StoreKit" -framework "UIKit" -weak_framework "Accelerate" -weak_framework "Accounts" -weak_framework "AdSupport" -weak_framework "AudioToolbox" -weak_framework "CFNetwork" -weak_framework "CoreGraphics" -weak_framework "CoreLocation" -weak_framework "CoreMotion" -weak_framework "CoreTelephony" -weak_framework "Foundation" -weak_framework "LocalAuthentication" -weak_framework "QuartzCore" -weak_framework "SafariServices" -weak_framework "Security" -weak_framework "Social" -weak_framework "SystemConfiguration" -weak_framework "UIKit" -weak_framework "VideoToolbox" -weak_framework "WebKit" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/FBAudienceNetwork -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/FBAudienceNetwork/FBAudienceNetwork.xcconfig b/iphone/Maps/Pods/Target Support Files/FBAudienceNetwork/FBAudienceNetwork.xcconfig deleted file mode 100644 index a009e2abcc..0000000000 --- a/iphone/Maps/Pods/Target Support Files/FBAudienceNetwork/FBAudienceNetwork.xcconfig +++ /dev/null @@ -1,11 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FBAudienceNetwork -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKCoreKit" "${PODS_ROOT}/FBAudienceNetwork/Static" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -l"c++" -l"xml2" -framework "AVFoundation" -framework "AudioToolbox" -framework "CoreGraphics" -framework "CoreImage" -framework "CoreMedia" -framework "Foundation" -framework "Security" -framework "StoreKit" -framework "UIKit" -weak_framework "Accelerate" -weak_framework "Accounts" -weak_framework "AdSupport" -weak_framework "AudioToolbox" -weak_framework "CFNetwork" -weak_framework "CoreGraphics" -weak_framework "CoreLocation" -weak_framework "CoreMotion" -weak_framework "CoreTelephony" -weak_framework "Foundation" -weak_framework "LocalAuthentication" -weak_framework "QuartzCore" -weak_framework "SafariServices" -weak_framework "Security" -weak_framework "Social" -weak_framework "SystemConfiguration" -weak_framework "UIKit" -weak_framework "VideoToolbox" -weak_framework "WebKit" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/FBAudienceNetwork -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/FBSDKCoreKit/FBSDKCoreKit-Info.plist b/iphone/Maps/Pods/Target Support Files/FBSDKCoreKit/FBSDKCoreKit-Info.plist deleted file mode 100644 index 47b5b05f14..0000000000 --- a/iphone/Maps/Pods/Target Support Files/FBSDKCoreKit/FBSDKCoreKit-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 5.15.1 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/iphone/Maps/Pods/Target Support Files/FBSDKCoreKit/FBSDKCoreKit-dummy.m b/iphone/Maps/Pods/Target Support Files/FBSDKCoreKit/FBSDKCoreKit-dummy.m deleted file mode 100644 index eb4f9dff86..0000000000 --- a/iphone/Maps/Pods/Target Support Files/FBSDKCoreKit/FBSDKCoreKit-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_FBSDKCoreKit : NSObject -@end -@implementation PodsDummy_FBSDKCoreKit -@end diff --git a/iphone/Maps/Pods/Target Support Files/FBSDKCoreKit/FBSDKCoreKit-prefix.pch b/iphone/Maps/Pods/Target Support Files/FBSDKCoreKit/FBSDKCoreKit-prefix.pch deleted file mode 100644 index beb2a24418..0000000000 --- a/iphone/Maps/Pods/Target Support Files/FBSDKCoreKit/FBSDKCoreKit-prefix.pch +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - diff --git a/iphone/Maps/Pods/Target Support Files/FBSDKCoreKit/FBSDKCoreKit-umbrella.h b/iphone/Maps/Pods/Target Support Files/FBSDKCoreKit/FBSDKCoreKit-umbrella.h deleted file mode 100644 index 8c8cda4f2d..0000000000 --- a/iphone/Maps/Pods/Target Support Files/FBSDKCoreKit/FBSDKCoreKit-umbrella.h +++ /dev/null @@ -1,46 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#import "FBSDKAccessToken.h" -#import "FBSDKApplicationDelegate.h" -#import "FBSDKButton.h" -#import "FBSDKConstants.h" -#import "FBSDKCopying.h" -#import "FBSDKCoreKit.h" -#import "FBSDKDeviceButton.h" -#import "FBSDKDeviceViewControllerBase.h" -#import "FBSDKMeasurementEvent.h" -#import "FBSDKMutableCopying.h" -#import "FBSDKProfile.h" -#import "FBSDKProfilePictureView.h" -#import "FBSDKSettings.h" -#import "FBSDKTestUsersManager.h" -#import "FBSDKURL.h" -#import "FBSDKUtility.h" -#import "FBSDKAppEvents.h" -#import "FBSDKAppLink.h" -#import "FBSDKAppLinkNavigation.h" -#import "FBSDKAppLinkResolver.h" -#import "FBSDKAppLinkResolving.h" -#import "FBSDKAppLinkReturnToRefererController.h" -#import "FBSDKAppLinkReturnToRefererView.h" -#import "FBSDKAppLinkTarget.h" -#import "FBSDKAppLinkUtility.h" -#import "FBSDKWebViewAppLinkResolver.h" -#import "FBSDKGraphErrorRecoveryProcessor.h" -#import "FBSDKGraphRequest.h" -#import "FBSDKGraphRequestConnection.h" -#import "FBSDKGraphRequestDataAttachment.h" - -FOUNDATION_EXPORT double FBSDKCoreKitVersionNumber; -FOUNDATION_EXPORT const unsigned char FBSDKCoreKitVersionString[]; - diff --git a/iphone/Maps/Pods/Target Support Files/FBSDKCoreKit/FBSDKCoreKit.debug.xcconfig b/iphone/Maps/Pods/Target Support Files/FBSDKCoreKit/FBSDKCoreKit.debug.xcconfig deleted file mode 100644 index c9cd4b67a5..0000000000 --- a/iphone/Maps/Pods/Target Support Files/FBSDKCoreKit/FBSDKCoreKit.debug.xcconfig +++ /dev/null @@ -1,10 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FBSDKCoreKit -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 $(inherited) FBSDKCOCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -l"c++" -l"stdc++" -l"z" -weak_framework "Accelerate" -weak_framework "Accounts" -weak_framework "AudioToolbox" -weak_framework "CoreGraphics" -weak_framework "CoreLocation" -weak_framework "Foundation" -weak_framework "QuartzCore" -weak_framework "Security" -weak_framework "Social" -weak_framework "UIKit" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/FBSDKCoreKit -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/FBSDKCoreKit/FBSDKCoreKit.modulemap b/iphone/Maps/Pods/Target Support Files/FBSDKCoreKit/FBSDKCoreKit.modulemap deleted file mode 100644 index f9847ad6f8..0000000000 --- a/iphone/Maps/Pods/Target Support Files/FBSDKCoreKit/FBSDKCoreKit.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module FBSDKCoreKit { - umbrella header "FBSDKCoreKit-umbrella.h" - - export * - module * { export * } -} diff --git a/iphone/Maps/Pods/Target Support Files/FBSDKCoreKit/FBSDKCoreKit.release.xcconfig b/iphone/Maps/Pods/Target Support Files/FBSDKCoreKit/FBSDKCoreKit.release.xcconfig deleted file mode 100644 index c9cd4b67a5..0000000000 --- a/iphone/Maps/Pods/Target Support Files/FBSDKCoreKit/FBSDKCoreKit.release.xcconfig +++ /dev/null @@ -1,10 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FBSDKCoreKit -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 $(inherited) FBSDKCOCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -l"c++" -l"stdc++" -l"z" -weak_framework "Accelerate" -weak_framework "Accounts" -weak_framework "AudioToolbox" -weak_framework "CoreGraphics" -weak_framework "CoreLocation" -weak_framework "Foundation" -weak_framework "QuartzCore" -weak_framework "Security" -weak_framework "Social" -weak_framework "UIKit" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/FBSDKCoreKit -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/FBSDKCoreKit/FBSDKCoreKit.xcconfig b/iphone/Maps/Pods/Target Support Files/FBSDKCoreKit/FBSDKCoreKit.xcconfig deleted file mode 100644 index c9cd4b67a5..0000000000 --- a/iphone/Maps/Pods/Target Support Files/FBSDKCoreKit/FBSDKCoreKit.xcconfig +++ /dev/null @@ -1,10 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FBSDKCoreKit -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 $(inherited) FBSDKCOCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -l"c++" -l"stdc++" -l"z" -weak_framework "Accelerate" -weak_framework "Accounts" -weak_framework "AudioToolbox" -weak_framework "CoreGraphics" -weak_framework "CoreLocation" -weak_framework "Foundation" -weak_framework "QuartzCore" -weak_framework "Security" -weak_framework "Social" -weak_framework "UIKit" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/FBSDKCoreKit -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/FBSDKLoginKit/FBSDKLoginKit-Info.plist b/iphone/Maps/Pods/Target Support Files/FBSDKLoginKit/FBSDKLoginKit-Info.plist deleted file mode 100644 index 47b5b05f14..0000000000 --- a/iphone/Maps/Pods/Target Support Files/FBSDKLoginKit/FBSDKLoginKit-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 5.15.1 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/iphone/Maps/Pods/Target Support Files/FBSDKLoginKit/FBSDKLoginKit-dummy.m b/iphone/Maps/Pods/Target Support Files/FBSDKLoginKit/FBSDKLoginKit-dummy.m deleted file mode 100644 index ff16b395f4..0000000000 --- a/iphone/Maps/Pods/Target Support Files/FBSDKLoginKit/FBSDKLoginKit-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_FBSDKLoginKit : NSObject -@end -@implementation PodsDummy_FBSDKLoginKit -@end diff --git a/iphone/Maps/Pods/Target Support Files/FBSDKLoginKit/FBSDKLoginKit-prefix.pch b/iphone/Maps/Pods/Target Support Files/FBSDKLoginKit/FBSDKLoginKit-prefix.pch deleted file mode 100644 index ea160349b1..0000000000 --- a/iphone/Maps/Pods/Target Support Files/FBSDKLoginKit/FBSDKLoginKit-prefix.pch +++ /dev/null @@ -1,13 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#define FBSDKCOCOAPODS diff --git a/iphone/Maps/Pods/Target Support Files/FBSDKLoginKit/FBSDKLoginKit-umbrella.h b/iphone/Maps/Pods/Target Support Files/FBSDKLoginKit/FBSDKLoginKit-umbrella.h deleted file mode 100644 index b68b38c507..0000000000 --- a/iphone/Maps/Pods/Target Support Files/FBSDKLoginKit/FBSDKLoginKit-umbrella.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#import "FBSDKDeviceLoginCodeInfo.h" -#import "FBSDKDeviceLoginManager.h" -#import "FBSDKDeviceLoginManagerResult.h" -#import "FBSDKLoginButton.h" -#import "FBSDKLoginConstants.h" -#import "FBSDKLoginKit.h" -#import "FBSDKLoginManager.h" -#import "FBSDKLoginManagerLoginResult.h" -#import "FBSDKLoginTooltipView.h" -#import "FBSDKTooltipView.h" - -FOUNDATION_EXPORT double FBSDKLoginKitVersionNumber; -FOUNDATION_EXPORT const unsigned char FBSDKLoginKitVersionString[]; - diff --git a/iphone/Maps/Pods/Target Support Files/FBSDKLoginKit/FBSDKLoginKit.debug.xcconfig b/iphone/Maps/Pods/Target Support Files/FBSDKLoginKit/FBSDKLoginKit.debug.xcconfig deleted file mode 100644 index ce081a80d6..0000000000 --- a/iphone/Maps/Pods/Target Support Files/FBSDKLoginKit/FBSDKLoginKit.debug.xcconfig +++ /dev/null @@ -1,11 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FBSDKLoginKit -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKCoreKit" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -weak_framework "Accelerate" -weak_framework "Accounts" -weak_framework "AudioToolbox" -weak_framework "CoreGraphics" -weak_framework "CoreLocation" -weak_framework "Foundation" -weak_framework "QuartzCore" -weak_framework "Security" -weak_framework "Social" -weak_framework "UIKit" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/FBSDKLoginKit -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/FBSDKLoginKit/FBSDKLoginKit.modulemap b/iphone/Maps/Pods/Target Support Files/FBSDKLoginKit/FBSDKLoginKit.modulemap deleted file mode 100644 index ce4ca1eba8..0000000000 --- a/iphone/Maps/Pods/Target Support Files/FBSDKLoginKit/FBSDKLoginKit.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module FBSDKLoginKit { - umbrella header "FBSDKLoginKit-umbrella.h" - - export * - module * { export * } -} diff --git a/iphone/Maps/Pods/Target Support Files/FBSDKLoginKit/FBSDKLoginKit.release.xcconfig b/iphone/Maps/Pods/Target Support Files/FBSDKLoginKit/FBSDKLoginKit.release.xcconfig deleted file mode 100644 index ce081a80d6..0000000000 --- a/iphone/Maps/Pods/Target Support Files/FBSDKLoginKit/FBSDKLoginKit.release.xcconfig +++ /dev/null @@ -1,11 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FBSDKLoginKit -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKCoreKit" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -weak_framework "Accelerate" -weak_framework "Accounts" -weak_framework "AudioToolbox" -weak_framework "CoreGraphics" -weak_framework "CoreLocation" -weak_framework "Foundation" -weak_framework "QuartzCore" -weak_framework "Security" -weak_framework "Social" -weak_framework "UIKit" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/FBSDKLoginKit -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/FBSDKLoginKit/FBSDKLoginKit.xcconfig b/iphone/Maps/Pods/Target Support Files/FBSDKLoginKit/FBSDKLoginKit.xcconfig deleted file mode 100644 index ce081a80d6..0000000000 --- a/iphone/Maps/Pods/Target Support Files/FBSDKLoginKit/FBSDKLoginKit.xcconfig +++ /dev/null @@ -1,11 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FBSDKLoginKit -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKCoreKit" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -weak_framework "Accelerate" -weak_framework "Accounts" -weak_framework "AudioToolbox" -weak_framework "CoreGraphics" -weak_framework "CoreLocation" -weak_framework "Foundation" -weak_framework "QuartzCore" -weak_framework "Security" -weak_framework "Social" -weak_framework "UIKit" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/FBSDKLoginKit -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/Firebase/Firebase.debug.xcconfig b/iphone/Maps/Pods/Target Support Files/Firebase/Firebase.debug.xcconfig deleted file mode 100644 index 55e08771f8..0000000000 --- a/iphone/Maps/Pods/Target Support Files/Firebase/Firebase.debug.xcconfig +++ /dev/null @@ -1,12 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Firebase -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCrashlytics" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstallations" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" "${PODS_ROOT}/FirebaseAnalytics/Frameworks" "${PODS_ROOT}/GoogleAppMeasurement/Frameworks" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Firebase" "${PODS_ROOT}/Headers/Public" -OTHER_LDFLAGS = $(inherited) -framework "StoreKit" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/Firebase -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/Firebase/Firebase.release.xcconfig b/iphone/Maps/Pods/Target Support Files/Firebase/Firebase.release.xcconfig deleted file mode 100644 index 55e08771f8..0000000000 --- a/iphone/Maps/Pods/Target Support Files/Firebase/Firebase.release.xcconfig +++ /dev/null @@ -1,12 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Firebase -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCrashlytics" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstallations" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" "${PODS_ROOT}/FirebaseAnalytics/Frameworks" "${PODS_ROOT}/GoogleAppMeasurement/Frameworks" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Firebase" "${PODS_ROOT}/Headers/Public" -OTHER_LDFLAGS = $(inherited) -framework "StoreKit" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/Firebase -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/Firebase/Firebase.xcconfig b/iphone/Maps/Pods/Target Support Files/Firebase/Firebase.xcconfig deleted file mode 100644 index 55e08771f8..0000000000 --- a/iphone/Maps/Pods/Target Support Files/Firebase/Firebase.xcconfig +++ /dev/null @@ -1,12 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Firebase -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCrashlytics" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstallations" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" "${PODS_ROOT}/FirebaseAnalytics/Frameworks" "${PODS_ROOT}/GoogleAppMeasurement/Frameworks" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Firebase" "${PODS_ROOT}/Headers/Public" -OTHER_LDFLAGS = $(inherited) -framework "StoreKit" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/Firebase -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/FirebaseAnalytics/FirebaseAnalytics.debug.xcconfig b/iphone/Maps/Pods/Target Support Files/FirebaseAnalytics/FirebaseAnalytics.debug.xcconfig deleted file mode 100644 index 16bbbd8cc0..0000000000 --- a/iphone/Maps/Pods/Target Support Files/FirebaseAnalytics/FirebaseAnalytics.debug.xcconfig +++ /dev/null @@ -1,12 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAnalytics -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstallations" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" "${PODS_ROOT}/FirebaseAnalytics/Frameworks" "${PODS_ROOT}/GoogleAppMeasurement/Frameworks" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" -OTHER_LDFLAGS = $(inherited) -l"c++" -l"sqlite3" -l"z" -framework "StoreKit" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/FirebaseAnalytics -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/FirebaseAnalytics/FirebaseAnalytics.release.xcconfig b/iphone/Maps/Pods/Target Support Files/FirebaseAnalytics/FirebaseAnalytics.release.xcconfig deleted file mode 100644 index 16bbbd8cc0..0000000000 --- a/iphone/Maps/Pods/Target Support Files/FirebaseAnalytics/FirebaseAnalytics.release.xcconfig +++ /dev/null @@ -1,12 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAnalytics -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstallations" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" "${PODS_ROOT}/FirebaseAnalytics/Frameworks" "${PODS_ROOT}/GoogleAppMeasurement/Frameworks" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" -OTHER_LDFLAGS = $(inherited) -l"c++" -l"sqlite3" -l"z" -framework "StoreKit" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/FirebaseAnalytics -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/FirebaseAnalytics/FirebaseAnalytics.xcconfig b/iphone/Maps/Pods/Target Support Files/FirebaseAnalytics/FirebaseAnalytics.xcconfig deleted file mode 100644 index 16bbbd8cc0..0000000000 --- a/iphone/Maps/Pods/Target Support Files/FirebaseAnalytics/FirebaseAnalytics.xcconfig +++ /dev/null @@ -1,12 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAnalytics -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstallations" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" "${PODS_ROOT}/FirebaseAnalytics/Frameworks" "${PODS_ROOT}/GoogleAppMeasurement/Frameworks" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" -OTHER_LDFLAGS = $(inherited) -l"c++" -l"sqlite3" -l"z" -framework "StoreKit" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/FirebaseAnalytics -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/FirebaseAnalyticsInterop/FirebaseAnalyticsInterop.debug.xcconfig b/iphone/Maps/Pods/Target Support Files/FirebaseAnalyticsInterop/FirebaseAnalyticsInterop.debug.xcconfig deleted file mode 100644 index b4498ac94e..0000000000 --- a/iphone/Maps/Pods/Target Support Files/FirebaseAnalyticsInterop/FirebaseAnalyticsInterop.debug.xcconfig +++ /dev/null @@ -1,10 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAnalyticsInterop -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/FirebaseAnalyticsInterop" "${PODS_ROOT}/Headers/Public" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/FirebaseAnalyticsInterop -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/FirebaseAnalyticsInterop/FirebaseAnalyticsInterop.release.xcconfig b/iphone/Maps/Pods/Target Support Files/FirebaseAnalyticsInterop/FirebaseAnalyticsInterop.release.xcconfig deleted file mode 100644 index b4498ac94e..0000000000 --- a/iphone/Maps/Pods/Target Support Files/FirebaseAnalyticsInterop/FirebaseAnalyticsInterop.release.xcconfig +++ /dev/null @@ -1,10 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAnalyticsInterop -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/FirebaseAnalyticsInterop" "${PODS_ROOT}/Headers/Public" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/FirebaseAnalyticsInterop -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/FirebaseAnalyticsInterop/FirebaseAnalyticsInterop.xcconfig b/iphone/Maps/Pods/Target Support Files/FirebaseAnalyticsInterop/FirebaseAnalyticsInterop.xcconfig deleted file mode 100644 index b4498ac94e..0000000000 --- a/iphone/Maps/Pods/Target Support Files/FirebaseAnalyticsInterop/FirebaseAnalyticsInterop.xcconfig +++ /dev/null @@ -1,10 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAnalyticsInterop -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/FirebaseAnalyticsInterop" "${PODS_ROOT}/Headers/Public" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/FirebaseAnalyticsInterop -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/FirebaseCore/FirebaseCore-Info.plist b/iphone/Maps/Pods/Target Support Files/FirebaseCore/FirebaseCore-Info.plist deleted file mode 100644 index 86a76b45db..0000000000 --- a/iphone/Maps/Pods/Target Support Files/FirebaseCore/FirebaseCore-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 6.7.2 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/iphone/Maps/Pods/Target Support Files/FirebaseCore/FirebaseCore-dummy.m b/iphone/Maps/Pods/Target Support Files/FirebaseCore/FirebaseCore-dummy.m deleted file mode 100644 index 4f1eb273a4..0000000000 --- a/iphone/Maps/Pods/Target Support Files/FirebaseCore/FirebaseCore-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_FirebaseCore : NSObject -@end -@implementation PodsDummy_FirebaseCore -@end diff --git a/iphone/Maps/Pods/Target Support Files/FirebaseCore/FirebaseCore-umbrella.h b/iphone/Maps/Pods/Target Support Files/FirebaseCore/FirebaseCore-umbrella.h deleted file mode 100644 index 102aecb860..0000000000 --- a/iphone/Maps/Pods/Target Support Files/FirebaseCore/FirebaseCore-umbrella.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#import "FIRApp.h" -#import "FIRConfiguration.h" -#import "FirebaseCore.h" -#import "FIRLoggerLevel.h" -#import "FIROptions.h" - -FOUNDATION_EXPORT double FirebaseCoreVersionNumber; -FOUNDATION_EXPORT const unsigned char FirebaseCoreVersionString[]; - diff --git a/iphone/Maps/Pods/Target Support Files/FirebaseCore/FirebaseCore.debug.xcconfig b/iphone/Maps/Pods/Target Support Files/FirebaseCore/FirebaseCore.debug.xcconfig deleted file mode 100644 index 017b8428d1..0000000000 --- a/iphone/Maps/Pods/Target Support Files/FirebaseCore/FirebaseCore.debug.xcconfig +++ /dev/null @@ -1,13 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" -GCC_C_LANGUAGE_STANDARD = c99 -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 FIRCore_VERSION=6.7.2 Firebase_VERSION=6.26.0 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_TARGET_SRCROOT}" -OTHER_CFLAGS = $(inherited) -fno-autolink -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/FirebaseCore -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/FirebaseCore/FirebaseCore.modulemap b/iphone/Maps/Pods/Target Support Files/FirebaseCore/FirebaseCore.modulemap deleted file mode 100644 index 4c38b871a1..0000000000 --- a/iphone/Maps/Pods/Target Support Files/FirebaseCore/FirebaseCore.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module FirebaseCore { - umbrella header "FirebaseCore-umbrella.h" - - export * - module * { export * } -} diff --git a/iphone/Maps/Pods/Target Support Files/FirebaseCore/FirebaseCore.release.xcconfig b/iphone/Maps/Pods/Target Support Files/FirebaseCore/FirebaseCore.release.xcconfig deleted file mode 100644 index 017b8428d1..0000000000 --- a/iphone/Maps/Pods/Target Support Files/FirebaseCore/FirebaseCore.release.xcconfig +++ /dev/null @@ -1,13 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" -GCC_C_LANGUAGE_STANDARD = c99 -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 FIRCore_VERSION=6.7.2 Firebase_VERSION=6.26.0 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_TARGET_SRCROOT}" -OTHER_CFLAGS = $(inherited) -fno-autolink -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/FirebaseCore -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/FirebaseCore/FirebaseCore.xcconfig b/iphone/Maps/Pods/Target Support Files/FirebaseCore/FirebaseCore.xcconfig deleted file mode 100644 index 017b8428d1..0000000000 --- a/iphone/Maps/Pods/Target Support Files/FirebaseCore/FirebaseCore.xcconfig +++ /dev/null @@ -1,13 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" -GCC_C_LANGUAGE_STANDARD = c99 -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 FIRCore_VERSION=6.7.2 Firebase_VERSION=6.26.0 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_TARGET_SRCROOT}" -OTHER_CFLAGS = $(inherited) -fno-autolink -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/FirebaseCore -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics-Info.plist b/iphone/Maps/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics-Info.plist deleted file mode 100644 index 7b6b52a408..0000000000 --- a/iphone/Maps/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.4.0 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/iphone/Maps/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics-dummy.m b/iphone/Maps/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics-dummy.m deleted file mode 100644 index 224d263ef9..0000000000 --- a/iphone/Maps/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_FirebaseCoreDiagnostics : NSObject -@end -@implementation PodsDummy_FirebaseCoreDiagnostics -@end diff --git a/iphone/Maps/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics-umbrella.h b/iphone/Maps/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics-umbrella.h deleted file mode 100644 index 11dc659975..0000000000 --- a/iphone/Maps/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics-umbrella.h +++ /dev/null @@ -1,19 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#import "firebasecore.nanopb.h" -#import "FIRCoreDiagnosticsData.h" -#import "FIRCoreDiagnosticsInterop.h" - -FOUNDATION_EXPORT double FirebaseCoreDiagnosticsVersionNumber; -FOUNDATION_EXPORT const unsigned char FirebaseCoreDiagnosticsVersionString[]; - diff --git a/iphone/Maps/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.debug.xcconfig b/iphone/Maps/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.debug.xcconfig deleted file mode 100644 index fcfb7aa370..0000000000 --- a/iphone/Maps/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.debug.xcconfig +++ /dev/null @@ -1,14 +0,0 @@ -CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" -GCC_C_LANGUAGE_STANDARD = c99 -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1 PB_ENABLE_MALLOC=1 -GCC_TREAT_WARNINGS_AS_ERRORS = YES -HEADER_SEARCH_PATHS = $(inherited) "${PODS_TARGET_SRCROOT}" "${PODS_TARGET_SRCROOT}/Firebase/CoreDiagnostics/" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/FirebaseCoreDiagnostics -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.modulemap b/iphone/Maps/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.modulemap deleted file mode 100644 index d9cad8bc95..0000000000 --- a/iphone/Maps/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module FirebaseCoreDiagnostics { - umbrella header "FirebaseCoreDiagnostics-umbrella.h" - - export * - module * { export * } -} diff --git a/iphone/Maps/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.release.xcconfig b/iphone/Maps/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.release.xcconfig deleted file mode 100644 index fcfb7aa370..0000000000 --- a/iphone/Maps/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.release.xcconfig +++ /dev/null @@ -1,14 +0,0 @@ -CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" -GCC_C_LANGUAGE_STANDARD = c99 -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1 PB_ENABLE_MALLOC=1 -GCC_TREAT_WARNINGS_AS_ERRORS = YES -HEADER_SEARCH_PATHS = $(inherited) "${PODS_TARGET_SRCROOT}" "${PODS_TARGET_SRCROOT}/Firebase/CoreDiagnostics/" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/FirebaseCoreDiagnostics -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.xcconfig b/iphone/Maps/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.xcconfig deleted file mode 100644 index fcfb7aa370..0000000000 --- a/iphone/Maps/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.xcconfig +++ /dev/null @@ -1,14 +0,0 @@ -CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" -GCC_C_LANGUAGE_STANDARD = c99 -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1 PB_ENABLE_MALLOC=1 -GCC_TREAT_WARNINGS_AS_ERRORS = YES -HEADER_SEARCH_PATHS = $(inherited) "${PODS_TARGET_SRCROOT}" "${PODS_TARGET_SRCROOT}/Firebase/CoreDiagnostics/" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/FirebaseCoreDiagnostics -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/FirebaseCoreDiagnosticsInterop/FirebaseCoreDiagnosticsInterop.debug.xcconfig b/iphone/Maps/Pods/Target Support Files/FirebaseCoreDiagnosticsInterop/FirebaseCoreDiagnosticsInterop.debug.xcconfig deleted file mode 100644 index 66fd960664..0000000000 --- a/iphone/Maps/Pods/Target Support Files/FirebaseCoreDiagnosticsInterop/FirebaseCoreDiagnosticsInterop.debug.xcconfig +++ /dev/null @@ -1,10 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnosticsInterop -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/FirebaseCoreDiagnosticsInterop" "${PODS_ROOT}/Headers/Public" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/FirebaseCoreDiagnosticsInterop -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/FirebaseCoreDiagnosticsInterop/FirebaseCoreDiagnosticsInterop.release.xcconfig b/iphone/Maps/Pods/Target Support Files/FirebaseCoreDiagnosticsInterop/FirebaseCoreDiagnosticsInterop.release.xcconfig deleted file mode 100644 index 66fd960664..0000000000 --- a/iphone/Maps/Pods/Target Support Files/FirebaseCoreDiagnosticsInterop/FirebaseCoreDiagnosticsInterop.release.xcconfig +++ /dev/null @@ -1,10 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnosticsInterop -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/FirebaseCoreDiagnosticsInterop" "${PODS_ROOT}/Headers/Public" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/FirebaseCoreDiagnosticsInterop -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/FirebaseCoreDiagnosticsInterop/FirebaseCoreDiagnosticsInterop.xcconfig b/iphone/Maps/Pods/Target Support Files/FirebaseCoreDiagnosticsInterop/FirebaseCoreDiagnosticsInterop.xcconfig deleted file mode 100644 index 66fd960664..0000000000 --- a/iphone/Maps/Pods/Target Support Files/FirebaseCoreDiagnosticsInterop/FirebaseCoreDiagnosticsInterop.xcconfig +++ /dev/null @@ -1,10 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnosticsInterop -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/FirebaseCoreDiagnosticsInterop" "${PODS_ROOT}/Headers/Public" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/FirebaseCoreDiagnosticsInterop -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/FirebaseCrashlytics/FirebaseCrashlytics-Info.plist b/iphone/Maps/Pods/Target Support Files/FirebaseCrashlytics/FirebaseCrashlytics-Info.plist deleted file mode 100644 index cd98f8af78..0000000000 --- a/iphone/Maps/Pods/Target Support Files/FirebaseCrashlytics/FirebaseCrashlytics-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 4.1.1 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/iphone/Maps/Pods/Target Support Files/FirebaseCrashlytics/FirebaseCrashlytics-dummy.m b/iphone/Maps/Pods/Target Support Files/FirebaseCrashlytics/FirebaseCrashlytics-dummy.m deleted file mode 100644 index b9c73b14ca..0000000000 --- a/iphone/Maps/Pods/Target Support Files/FirebaseCrashlytics/FirebaseCrashlytics-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_FirebaseCrashlytics : NSObject -@end -@implementation PodsDummy_FirebaseCrashlytics -@end diff --git a/iphone/Maps/Pods/Target Support Files/FirebaseCrashlytics/FirebaseCrashlytics-umbrella.h b/iphone/Maps/Pods/Target Support Files/FirebaseCrashlytics/FirebaseCrashlytics-umbrella.h deleted file mode 100644 index 5e7f17972f..0000000000 --- a/iphone/Maps/Pods/Target Support Files/FirebaseCrashlytics/FirebaseCrashlytics-umbrella.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#import "FIRCrashlytics.h" -#import "FirebaseCrashlytics.h" -#import "FIRExceptionModel.h" -#import "FIRStackFrame.h" - -FOUNDATION_EXPORT double FirebaseCrashlyticsVersionNumber; -FOUNDATION_EXPORT const unsigned char FirebaseCrashlyticsVersionString[]; - diff --git a/iphone/Maps/Pods/Target Support Files/FirebaseCrashlytics/FirebaseCrashlytics.debug.xcconfig b/iphone/Maps/Pods/Target Support Files/FirebaseCrashlytics/FirebaseCrashlytics.debug.xcconfig deleted file mode 100644 index d20eac44c1..0000000000 --- a/iphone/Maps/Pods/Target Support Files/FirebaseCrashlytics/FirebaseCrashlytics.debug.xcconfig +++ /dev/null @@ -1,13 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCrashlytics -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstallations" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" -GCC_C_LANGUAGE_STANDARD = c99 -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 DISPLAY_VERSION=4.1.1 CLS_SDK_NAME="Crashlytics iOS SDK" PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1 PB_ENABLE_MALLOC=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" -OTHER_LD_FLAGS = $(inherited) -sectcreate __TEXT __info_plist -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/FirebaseCrashlytics -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/FirebaseCrashlytics/FirebaseCrashlytics.modulemap b/iphone/Maps/Pods/Target Support Files/FirebaseCrashlytics/FirebaseCrashlytics.modulemap deleted file mode 100644 index 90dc252d2f..0000000000 --- a/iphone/Maps/Pods/Target Support Files/FirebaseCrashlytics/FirebaseCrashlytics.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module FirebaseCrashlytics { - umbrella header "FirebaseCrashlytics-umbrella.h" - - export * - module * { export * } -} diff --git a/iphone/Maps/Pods/Target Support Files/FirebaseCrashlytics/FirebaseCrashlytics.release.xcconfig b/iphone/Maps/Pods/Target Support Files/FirebaseCrashlytics/FirebaseCrashlytics.release.xcconfig deleted file mode 100644 index d20eac44c1..0000000000 --- a/iphone/Maps/Pods/Target Support Files/FirebaseCrashlytics/FirebaseCrashlytics.release.xcconfig +++ /dev/null @@ -1,13 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCrashlytics -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstallations" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" -GCC_C_LANGUAGE_STANDARD = c99 -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 DISPLAY_VERSION=4.1.1 CLS_SDK_NAME="Crashlytics iOS SDK" PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1 PB_ENABLE_MALLOC=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" -OTHER_LD_FLAGS = $(inherited) -sectcreate __TEXT __info_plist -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/FirebaseCrashlytics -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/FirebaseCrashlytics/FirebaseCrashlytics.xcconfig b/iphone/Maps/Pods/Target Support Files/FirebaseCrashlytics/FirebaseCrashlytics.xcconfig deleted file mode 100644 index d20eac44c1..0000000000 --- a/iphone/Maps/Pods/Target Support Files/FirebaseCrashlytics/FirebaseCrashlytics.xcconfig +++ /dev/null @@ -1,13 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCrashlytics -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstallations" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" -GCC_C_LANGUAGE_STANDARD = c99 -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 DISPLAY_VERSION=4.1.1 CLS_SDK_NAME="Crashlytics iOS SDK" PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1 PB_ENABLE_MALLOC=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" -OTHER_LD_FLAGS = $(inherited) -sectcreate __TEXT __info_plist -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/FirebaseCrashlytics -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/FirebaseInstallations/FirebaseInstallations-Info.plist b/iphone/Maps/Pods/Target Support Files/FirebaseInstallations/FirebaseInstallations-Info.plist deleted file mode 100644 index b6b2813dd8..0000000000 --- a/iphone/Maps/Pods/Target Support Files/FirebaseInstallations/FirebaseInstallations-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.3.0 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/iphone/Maps/Pods/Target Support Files/FirebaseInstallations/FirebaseInstallations-dummy.m b/iphone/Maps/Pods/Target Support Files/FirebaseInstallations/FirebaseInstallations-dummy.m deleted file mode 100644 index ae19551aa7..0000000000 --- a/iphone/Maps/Pods/Target Support Files/FirebaseInstallations/FirebaseInstallations-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_FirebaseInstallations : NSObject -@end -@implementation PodsDummy_FirebaseInstallations -@end diff --git a/iphone/Maps/Pods/Target Support Files/FirebaseInstallations/FirebaseInstallations-umbrella.h b/iphone/Maps/Pods/Target Support Files/FirebaseInstallations/FirebaseInstallations-umbrella.h deleted file mode 100644 index 78e5979584..0000000000 --- a/iphone/Maps/Pods/Target Support Files/FirebaseInstallations/FirebaseInstallations-umbrella.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#import "FirebaseInstallations.h" -#import "FIRInstallations.h" -#import "FIRInstallationsAuthTokenResult.h" -#import "FIRInstallationsErrors.h" -#import "FIRInstallationsVersion.h" - -FOUNDATION_EXPORT double FirebaseInstallationsVersionNumber; -FOUNDATION_EXPORT const unsigned char FirebaseInstallationsVersionString[]; - diff --git a/iphone/Maps/Pods/Target Support Files/FirebaseInstallations/FirebaseInstallations.debug.xcconfig b/iphone/Maps/Pods/Target Support Files/FirebaseInstallations/FirebaseInstallations.debug.xcconfig deleted file mode 100644 index b89936c712..0000000000 --- a/iphone/Maps/Pods/Target Support Files/FirebaseInstallations/FirebaseInstallations.debug.xcconfig +++ /dev/null @@ -1,12 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstallations -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" -GCC_C_LANGUAGE_STANDARD = c99 -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 FIRInstallations_LIB_VERSION=1.3.0 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/FirebaseInstallations -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/FirebaseInstallations/FirebaseInstallations.modulemap b/iphone/Maps/Pods/Target Support Files/FirebaseInstallations/FirebaseInstallations.modulemap deleted file mode 100644 index f6e2a2952b..0000000000 --- a/iphone/Maps/Pods/Target Support Files/FirebaseInstallations/FirebaseInstallations.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module FirebaseInstallations { - umbrella header "FirebaseInstallations-umbrella.h" - - export * - module * { export * } -} diff --git a/iphone/Maps/Pods/Target Support Files/FirebaseInstallations/FirebaseInstallations.release.xcconfig b/iphone/Maps/Pods/Target Support Files/FirebaseInstallations/FirebaseInstallations.release.xcconfig deleted file mode 100644 index b89936c712..0000000000 --- a/iphone/Maps/Pods/Target Support Files/FirebaseInstallations/FirebaseInstallations.release.xcconfig +++ /dev/null @@ -1,12 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstallations -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" -GCC_C_LANGUAGE_STANDARD = c99 -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 FIRInstallations_LIB_VERSION=1.3.0 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/FirebaseInstallations -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/FirebaseInstallations/FirebaseInstallations.xcconfig b/iphone/Maps/Pods/Target Support Files/FirebaseInstallations/FirebaseInstallations.xcconfig deleted file mode 100644 index b89936c712..0000000000 --- a/iphone/Maps/Pods/Target Support Files/FirebaseInstallations/FirebaseInstallations.xcconfig +++ /dev/null @@ -1,12 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstallations -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" -GCC_C_LANGUAGE_STANDARD = c99 -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 FIRInstallations_LIB_VERSION=1.3.0 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/FirebaseInstallations -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/Flurry-iOS-SDK/Flurry-iOS-SDK-Info.plist b/iphone/Maps/Pods/Target Support Files/Flurry-iOS-SDK/Flurry-iOS-SDK-Info.plist deleted file mode 100644 index a526f2fe50..0000000000 --- a/iphone/Maps/Pods/Target Support Files/Flurry-iOS-SDK/Flurry-iOS-SDK-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 11.1.0 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/iphone/Maps/Pods/Target Support Files/Flurry-iOS-SDK/Flurry-iOS-SDK-dummy.m b/iphone/Maps/Pods/Target Support Files/Flurry-iOS-SDK/Flurry-iOS-SDK-dummy.m deleted file mode 100644 index 49a63b9aa7..0000000000 --- a/iphone/Maps/Pods/Target Support Files/Flurry-iOS-SDK/Flurry-iOS-SDK-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_Flurry_iOS_SDK : NSObject -@end -@implementation PodsDummy_Flurry_iOS_SDK -@end diff --git a/iphone/Maps/Pods/Target Support Files/Flurry-iOS-SDK/Flurry-iOS-SDK-prefix.pch b/iphone/Maps/Pods/Target Support Files/Flurry-iOS-SDK/Flurry-iOS-SDK-prefix.pch deleted file mode 100644 index beb2a24418..0000000000 --- a/iphone/Maps/Pods/Target Support Files/Flurry-iOS-SDK/Flurry-iOS-SDK-prefix.pch +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - diff --git a/iphone/Maps/Pods/Target Support Files/Flurry-iOS-SDK/Flurry-iOS-SDK-umbrella.h b/iphone/Maps/Pods/Target Support Files/Flurry-iOS-SDK/Flurry-iOS-SDK-umbrella.h deleted file mode 100644 index c35d553394..0000000000 --- a/iphone/Maps/Pods/Target Support Files/Flurry-iOS-SDK/Flurry-iOS-SDK-umbrella.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#import "Flurry.h" -#import "FlurrySessionBuilder.h" -#import "FlurryConsent.h" -#import "FlurryUserProperties.h" -#import "FlurryCCPA.h" -#import "FlurrySKAdNetwork.h" - -FOUNDATION_EXPORT double Flurry_iOS_SDKVersionNumber; -FOUNDATION_EXPORT const unsigned char Flurry_iOS_SDKVersionString[]; - diff --git a/iphone/Maps/Pods/Target Support Files/Flurry-iOS-SDK/Flurry-iOS-SDK.debug.xcconfig b/iphone/Maps/Pods/Target Support Files/Flurry-iOS-SDK/Flurry-iOS-SDK.debug.xcconfig deleted file mode 100644 index 762e3c870c..0000000000 --- a/iphone/Maps/Pods/Target Support Files/Flurry-iOS-SDK/Flurry-iOS-SDK.debug.xcconfig +++ /dev/null @@ -1,11 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Flurry-iOS-SDK -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Flurry-iOS-SDK/Flurry" -OTHER_LDFLAGS = $(inherited) -l"Flurry_11.1.0" -framework "Foundation" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/Flurry-iOS-SDK -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/Flurry-iOS-SDK/Flurry-iOS-SDK.modulemap b/iphone/Maps/Pods/Target Support Files/Flurry-iOS-SDK/Flurry-iOS-SDK.modulemap deleted file mode 100644 index da85c68fe0..0000000000 --- a/iphone/Maps/Pods/Target Support Files/Flurry-iOS-SDK/Flurry-iOS-SDK.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module Flurry_iOS_SDK { - umbrella header "Flurry-iOS-SDK-umbrella.h" - - export * - module * { export * } -} diff --git a/iphone/Maps/Pods/Target Support Files/Flurry-iOS-SDK/Flurry-iOS-SDK.release.xcconfig b/iphone/Maps/Pods/Target Support Files/Flurry-iOS-SDK/Flurry-iOS-SDK.release.xcconfig deleted file mode 100644 index 762e3c870c..0000000000 --- a/iphone/Maps/Pods/Target Support Files/Flurry-iOS-SDK/Flurry-iOS-SDK.release.xcconfig +++ /dev/null @@ -1,11 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Flurry-iOS-SDK -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Flurry-iOS-SDK/Flurry" -OTHER_LDFLAGS = $(inherited) -l"Flurry_11.1.0" -framework "Foundation" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/Flurry-iOS-SDK -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/Flurry-iOS-SDK/Flurry-iOS-SDK.xcconfig b/iphone/Maps/Pods/Target Support Files/Flurry-iOS-SDK/Flurry-iOS-SDK.xcconfig deleted file mode 100644 index 5220947364..0000000000 --- a/iphone/Maps/Pods/Target Support Files/Flurry-iOS-SDK/Flurry-iOS-SDK.xcconfig +++ /dev/null @@ -1,11 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Flurry-iOS-SDK -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Flurry-iOS-SDK/Flurry" -OTHER_LDFLAGS = $(inherited) -l"Flurry_10.1.0" -framework "Foundation" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/Flurry-iOS-SDK -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/GoogleAppMeasurement/GoogleAppMeasurement.debug.xcconfig b/iphone/Maps/Pods/Target Support Files/GoogleAppMeasurement/GoogleAppMeasurement.debug.xcconfig deleted file mode 100644 index 7a8ce57a7e..0000000000 --- a/iphone/Maps/Pods/Target Support Files/GoogleAppMeasurement/GoogleAppMeasurement.debug.xcconfig +++ /dev/null @@ -1,11 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/GoogleAppMeasurement -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" "${PODS_ROOT}/GoogleAppMeasurement/Frameworks" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -l"c++" -l"sqlite3" -l"z" -framework "StoreKit" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/GoogleAppMeasurement -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/GoogleAppMeasurement/GoogleAppMeasurement.release.xcconfig b/iphone/Maps/Pods/Target Support Files/GoogleAppMeasurement/GoogleAppMeasurement.release.xcconfig deleted file mode 100644 index 7a8ce57a7e..0000000000 --- a/iphone/Maps/Pods/Target Support Files/GoogleAppMeasurement/GoogleAppMeasurement.release.xcconfig +++ /dev/null @@ -1,11 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/GoogleAppMeasurement -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" "${PODS_ROOT}/GoogleAppMeasurement/Frameworks" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -l"c++" -l"sqlite3" -l"z" -framework "StoreKit" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/GoogleAppMeasurement -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/GoogleAppMeasurement/GoogleAppMeasurement.xcconfig b/iphone/Maps/Pods/Target Support Files/GoogleAppMeasurement/GoogleAppMeasurement.xcconfig deleted file mode 100644 index 7a8ce57a7e..0000000000 --- a/iphone/Maps/Pods/Target Support Files/GoogleAppMeasurement/GoogleAppMeasurement.xcconfig +++ /dev/null @@ -1,11 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/GoogleAppMeasurement -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" "${PODS_ROOT}/GoogleAppMeasurement/Frameworks" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -l"c++" -l"sqlite3" -l"z" -framework "StoreKit" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/GoogleAppMeasurement -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport-Info.plist b/iphone/Maps/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport-Info.plist deleted file mode 100644 index 7e52625a6e..0000000000 --- a/iphone/Maps/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 6.2.1 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/iphone/Maps/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport-dummy.m b/iphone/Maps/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport-dummy.m deleted file mode 100644 index 9a08ec35ed..0000000000 --- a/iphone/Maps/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_GoogleDataTransport : NSObject -@end -@implementation PodsDummy_GoogleDataTransport -@end diff --git a/iphone/Maps/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport-umbrella.h b/iphone/Maps/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport-umbrella.h deleted file mode 100644 index eb436e1ebd..0000000000 --- a/iphone/Maps/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport-umbrella.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#import "GDTCORAssert.h" -#import "GDTCORClock.h" -#import "GDTCORConsoleLogger.h" -#import "GDTCOREvent.h" -#import "GDTCOREventDataObject.h" -#import "GDTCOREventTransformer.h" -#import "GDTCORLifecycle.h" -#import "GDTCORPlatform.h" -#import "GDTCORPrioritizer.h" -#import "GDTCORReachability.h" -#import "GDTCORRegistrar.h" -#import "GDTCORStorageProtocol.h" -#import "GDTCORTargets.h" -#import "GDTCORTransport.h" -#import "GDTCORUploader.h" -#import "GDTCORUploadPackage.h" -#import "GoogleDataTransport.h" - -FOUNDATION_EXPORT double GoogleDataTransportVersionNumber; -FOUNDATION_EXPORT const unsigned char GoogleDataTransportVersionString[]; - diff --git a/iphone/Maps/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport.debug.xcconfig b/iphone/Maps/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport.debug.xcconfig deleted file mode 100644 index 9eb91b6e42..0000000000 --- a/iphone/Maps/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport.debug.xcconfig +++ /dev/null @@ -1,13 +0,0 @@ -CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport -GCC_C_LANGUAGE_STANDARD = c99 -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 GDTCOR_VERSION=6.2.1 -GCC_TREAT_WARNINGS_AS_ERRORS = YES -HEADER_SEARCH_PATHS = $(inherited) "${PODS_TARGET_SRCROOT}/GoogleDataTransport/" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/GoogleDataTransport -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport.modulemap b/iphone/Maps/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport.modulemap deleted file mode 100644 index 8a67414a1f..0000000000 --- a/iphone/Maps/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module GoogleDataTransport { - umbrella header "GoogleDataTransport-umbrella.h" - - export * - module * { export * } -} diff --git a/iphone/Maps/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport.release.xcconfig b/iphone/Maps/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport.release.xcconfig deleted file mode 100644 index 9eb91b6e42..0000000000 --- a/iphone/Maps/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport.release.xcconfig +++ /dev/null @@ -1,13 +0,0 @@ -CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport -GCC_C_LANGUAGE_STANDARD = c99 -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 GDTCOR_VERSION=6.2.1 -GCC_TREAT_WARNINGS_AS_ERRORS = YES -HEADER_SEARCH_PATHS = $(inherited) "${PODS_TARGET_SRCROOT}/GoogleDataTransport/" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/GoogleDataTransport -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport.xcconfig b/iphone/Maps/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport.xcconfig deleted file mode 100644 index 9eb91b6e42..0000000000 --- a/iphone/Maps/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport.xcconfig +++ /dev/null @@ -1,13 +0,0 @@ -CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport -GCC_C_LANGUAGE_STANDARD = c99 -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 GDTCOR_VERSION=6.2.1 -GCC_TREAT_WARNINGS_AS_ERRORS = YES -HEADER_SEARCH_PATHS = $(inherited) "${PODS_TARGET_SRCROOT}/GoogleDataTransport/" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/GoogleDataTransport -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport-Info.plist b/iphone/Maps/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport-Info.plist deleted file mode 100644 index 9ae03a0c13..0000000000 --- a/iphone/Maps/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 3.2.0 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/iphone/Maps/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport-dummy.m b/iphone/Maps/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport-dummy.m deleted file mode 100644 index 3c7f556984..0000000000 --- a/iphone/Maps/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_GoogleDataTransportCCTSupport : NSObject -@end -@implementation PodsDummy_GoogleDataTransportCCTSupport -@end diff --git a/iphone/Maps/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport-umbrella.h b/iphone/Maps/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport-umbrella.h deleted file mode 100644 index f17d9d865a..0000000000 --- a/iphone/Maps/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport-umbrella.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#import "GDTCOREvent+GDTCCTSupport.h" - -FOUNDATION_EXPORT double GoogleDataTransportCCTSupportVersionNumber; -FOUNDATION_EXPORT const unsigned char GoogleDataTransportCCTSupportVersionString[]; - diff --git a/iphone/Maps/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.debug.xcconfig b/iphone/Maps/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.debug.xcconfig deleted file mode 100644 index ede445cd59..0000000000 --- a/iphone/Maps/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.debug.xcconfig +++ /dev/null @@ -1,14 +0,0 @@ -CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" -GCC_C_LANGUAGE_STANDARD = c99 -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1 PB_ENABLE_MALLOC=1 GDTCCTSUPPORT_VERSION=3.2.0 -GCC_TREAT_WARNINGS_AS_ERRORS = YES -HEADER_SEARCH_PATHS = $(inherited) "${PODS_TARGET_SRCROOT}/GoogleDataTransportCCTSupport/" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/GoogleDataTransportCCTSupport -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.modulemap b/iphone/Maps/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.modulemap deleted file mode 100644 index 7cec8f02ec..0000000000 --- a/iphone/Maps/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module GoogleDataTransportCCTSupport { - umbrella header "GoogleDataTransportCCTSupport-umbrella.h" - - export * - module * { export * } -} diff --git a/iphone/Maps/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.release.xcconfig b/iphone/Maps/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.release.xcconfig deleted file mode 100644 index ede445cd59..0000000000 --- a/iphone/Maps/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.release.xcconfig +++ /dev/null @@ -1,14 +0,0 @@ -CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" -GCC_C_LANGUAGE_STANDARD = c99 -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1 PB_ENABLE_MALLOC=1 GDTCCTSUPPORT_VERSION=3.2.0 -GCC_TREAT_WARNINGS_AS_ERRORS = YES -HEADER_SEARCH_PATHS = $(inherited) "${PODS_TARGET_SRCROOT}/GoogleDataTransportCCTSupport/" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/GoogleDataTransportCCTSupport -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.xcconfig b/iphone/Maps/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.xcconfig deleted file mode 100644 index ede445cd59..0000000000 --- a/iphone/Maps/Pods/Target Support Files/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.xcconfig +++ /dev/null @@ -1,14 +0,0 @@ -CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" -GCC_C_LANGUAGE_STANDARD = c99 -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1 PB_ENABLE_MALLOC=1 GDTCCTSUPPORT_VERSION=3.2.0 -GCC_TREAT_WARNINGS_AS_ERRORS = YES -HEADER_SEARCH_PATHS = $(inherited) "${PODS_TARGET_SRCROOT}/GoogleDataTransportCCTSupport/" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/GoogleDataTransportCCTSupport -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-Info.plist b/iphone/Maps/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-Info.plist deleted file mode 100644 index 73ed6d891a..0000000000 --- a/iphone/Maps/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 6.7.1 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/iphone/Maps/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-dummy.m b/iphone/Maps/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-dummy.m deleted file mode 100644 index 98ac4e956a..0000000000 --- a/iphone/Maps/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_GoogleUtilities : NSObject -@end -@implementation PodsDummy_GoogleUtilities -@end diff --git a/iphone/Maps/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-prefix.pch b/iphone/Maps/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-prefix.pch deleted file mode 100644 index beb2a24418..0000000000 --- a/iphone/Maps/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-prefix.pch +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - diff --git a/iphone/Maps/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-umbrella.h b/iphone/Maps/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-umbrella.h deleted file mode 100644 index 508e6310f3..0000000000 --- a/iphone/Maps/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-umbrella.h +++ /dev/null @@ -1,19 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#import "GULLoggerLevel.h" -#import "GULLoggerCodes.h" -#import "GULNSData+zlib.h" - -FOUNDATION_EXPORT double GoogleUtilitiesVersionNumber; -FOUNDATION_EXPORT const unsigned char GoogleUtilitiesVersionString[]; - diff --git a/iphone/Maps/Pods/Target Support Files/GoogleUtilities/GoogleUtilities.debug.xcconfig b/iphone/Maps/Pods/Target Support Files/GoogleUtilities/GoogleUtilities.debug.xcconfig deleted file mode 100644 index 07b83c7f18..0000000000 --- a/iphone/Maps/Pods/Target Support Files/GoogleUtilities/GoogleUtilities.debug.xcconfig +++ /dev/null @@ -1,13 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" -GCC_C_LANGUAGE_STANDARD = c99 -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_TARGET_SRCROOT}" -OTHER_LDFLAGS = $(inherited) -l"z" -framework "Security" -framework "SystemConfiguration" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/GoogleUtilities -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/GoogleUtilities/GoogleUtilities.modulemap b/iphone/Maps/Pods/Target Support Files/GoogleUtilities/GoogleUtilities.modulemap deleted file mode 100644 index 491dd0a17a..0000000000 --- a/iphone/Maps/Pods/Target Support Files/GoogleUtilities/GoogleUtilities.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module GoogleUtilities { - umbrella header "GoogleUtilities-umbrella.h" - - export * - module * { export * } -} diff --git a/iphone/Maps/Pods/Target Support Files/GoogleUtilities/GoogleUtilities.release.xcconfig b/iphone/Maps/Pods/Target Support Files/GoogleUtilities/GoogleUtilities.release.xcconfig deleted file mode 100644 index 07b83c7f18..0000000000 --- a/iphone/Maps/Pods/Target Support Files/GoogleUtilities/GoogleUtilities.release.xcconfig +++ /dev/null @@ -1,13 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" -GCC_C_LANGUAGE_STANDARD = c99 -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_TARGET_SRCROOT}" -OTHER_LDFLAGS = $(inherited) -l"z" -framework "Security" -framework "SystemConfiguration" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/GoogleUtilities -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/GoogleUtilities/GoogleUtilities.xcconfig b/iphone/Maps/Pods/Target Support Files/GoogleUtilities/GoogleUtilities.xcconfig deleted file mode 100644 index 07b83c7f18..0000000000 --- a/iphone/Maps/Pods/Target Support Files/GoogleUtilities/GoogleUtilities.xcconfig +++ /dev/null @@ -1,13 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" -GCC_C_LANGUAGE_STANDARD = c99 -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_TARGET_SRCROOT}" -OTHER_LDFLAGS = $(inherited) -l"z" -framework "Security" -framework "SystemConfiguration" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/GoogleUtilities -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/MoPub-FacebookAudienceNetwork-Adapters/MoPub-FacebookAudienceNetwork-Adapters-Info.plist b/iphone/Maps/Pods/Target Support Files/MoPub-FacebookAudienceNetwork-Adapters/MoPub-FacebookAudienceNetwork-Adapters-Info.plist deleted file mode 100644 index 928480f442..0000000000 --- a/iphone/Maps/Pods/Target Support Files/MoPub-FacebookAudienceNetwork-Adapters/MoPub-FacebookAudienceNetwork-Adapters-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 5.9.0 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/iphone/Maps/Pods/Target Support Files/MoPub-FacebookAudienceNetwork-Adapters/MoPub-FacebookAudienceNetwork-Adapters-dummy.m b/iphone/Maps/Pods/Target Support Files/MoPub-FacebookAudienceNetwork-Adapters/MoPub-FacebookAudienceNetwork-Adapters-dummy.m deleted file mode 100644 index e993e8853e..0000000000 --- a/iphone/Maps/Pods/Target Support Files/MoPub-FacebookAudienceNetwork-Adapters/MoPub-FacebookAudienceNetwork-Adapters-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_MoPub_FacebookAudienceNetwork_Adapters : NSObject -@end -@implementation PodsDummy_MoPub_FacebookAudienceNetwork_Adapters -@end diff --git a/iphone/Maps/Pods/Target Support Files/MoPub-FacebookAudienceNetwork-Adapters/MoPub-FacebookAudienceNetwork-Adapters-prefix.pch b/iphone/Maps/Pods/Target Support Files/MoPub-FacebookAudienceNetwork-Adapters/MoPub-FacebookAudienceNetwork-Adapters-prefix.pch deleted file mode 100644 index beb2a24418..0000000000 --- a/iphone/Maps/Pods/Target Support Files/MoPub-FacebookAudienceNetwork-Adapters/MoPub-FacebookAudienceNetwork-Adapters-prefix.pch +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - diff --git a/iphone/Maps/Pods/Target Support Files/MoPub-FacebookAudienceNetwork-Adapters/MoPub-FacebookAudienceNetwork-Adapters-umbrella.h b/iphone/Maps/Pods/Target Support Files/MoPub-FacebookAudienceNetwork-Adapters/MoPub-FacebookAudienceNetwork-Adapters-umbrella.h deleted file mode 100644 index 3580bf0160..0000000000 --- a/iphone/Maps/Pods/Target Support Files/MoPub-FacebookAudienceNetwork-Adapters/MoPub-FacebookAudienceNetwork-Adapters-umbrella.h +++ /dev/null @@ -1,23 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#import "FacebookAdapterConfiguration.h" -#import "FacebookBannerCustomEvent.h" -#import "FacebookInterstitialCustomEvent.h" -#import "FacebookNativeAdAdapter.h" -#import "FacebookNativeAdRenderer.h" -#import "FacebookNativeCustomEvent.h" -#import "FacebookRewardedVideoCustomEvent.h" - -FOUNDATION_EXPORT double MoPub_FacebookAudienceNetwork_AdaptersVersionNumber; -FOUNDATION_EXPORT const unsigned char MoPub_FacebookAudienceNetwork_AdaptersVersionString[]; - diff --git a/iphone/Maps/Pods/Target Support Files/MoPub-FacebookAudienceNetwork-Adapters/MoPub-FacebookAudienceNetwork-Adapters.debug.xcconfig b/iphone/Maps/Pods/Target Support Files/MoPub-FacebookAudienceNetwork-Adapters/MoPub-FacebookAudienceNetwork-Adapters.debug.xcconfig deleted file mode 100644 index 52bd147104..0000000000 --- a/iphone/Maps/Pods/Target Support Files/MoPub-FacebookAudienceNetwork-Adapters/MoPub-FacebookAudienceNetwork-Adapters.debug.xcconfig +++ /dev/null @@ -1,10 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/MoPub-FacebookAudienceNetwork-Adapters -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKCoreKit" "${PODS_CONFIGURATION_BUILD_DIR}/mopub-ios-sdk" "${PODS_ROOT}/FBAudienceNetwork/Static" "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Viewability/MOAT" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/MoPub-FacebookAudienceNetwork-Adapters -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/MoPub-FacebookAudienceNetwork-Adapters/MoPub-FacebookAudienceNetwork-Adapters.modulemap b/iphone/Maps/Pods/Target Support Files/MoPub-FacebookAudienceNetwork-Adapters/MoPub-FacebookAudienceNetwork-Adapters.modulemap deleted file mode 100644 index 510bc74f31..0000000000 --- a/iphone/Maps/Pods/Target Support Files/MoPub-FacebookAudienceNetwork-Adapters/MoPub-FacebookAudienceNetwork-Adapters.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module MoPub_FacebookAudienceNetwork_Adapters { - umbrella header "MoPub-FacebookAudienceNetwork-Adapters-umbrella.h" - - export * - module * { export * } -} diff --git a/iphone/Maps/Pods/Target Support Files/MoPub-FacebookAudienceNetwork-Adapters/MoPub-FacebookAudienceNetwork-Adapters.release.xcconfig b/iphone/Maps/Pods/Target Support Files/MoPub-FacebookAudienceNetwork-Adapters/MoPub-FacebookAudienceNetwork-Adapters.release.xcconfig deleted file mode 100644 index 52bd147104..0000000000 --- a/iphone/Maps/Pods/Target Support Files/MoPub-FacebookAudienceNetwork-Adapters/MoPub-FacebookAudienceNetwork-Adapters.release.xcconfig +++ /dev/null @@ -1,10 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/MoPub-FacebookAudienceNetwork-Adapters -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKCoreKit" "${PODS_CONFIGURATION_BUILD_DIR}/mopub-ios-sdk" "${PODS_ROOT}/FBAudienceNetwork/Static" "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Viewability/MOAT" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/MoPub-FacebookAudienceNetwork-Adapters -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/MoPub-FacebookAudienceNetwork-Adapters/MoPub-FacebookAudienceNetwork-Adapters.xcconfig b/iphone/Maps/Pods/Target Support Files/MoPub-FacebookAudienceNetwork-Adapters/MoPub-FacebookAudienceNetwork-Adapters.xcconfig deleted file mode 100644 index 52bd147104..0000000000 --- a/iphone/Maps/Pods/Target Support Files/MoPub-FacebookAudienceNetwork-Adapters/MoPub-FacebookAudienceNetwork-Adapters.xcconfig +++ /dev/null @@ -1,10 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/MoPub-FacebookAudienceNetwork-Adapters -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKCoreKit" "${PODS_CONFIGURATION_BUILD_DIR}/mopub-ios-sdk" "${PODS_ROOT}/FBAudienceNetwork/Static" "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Viewability/MOAT" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/MoPub-FacebookAudienceNetwork-Adapters -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME-acknowledgements.markdown b/iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME-acknowledgements.markdown index c0838bb9d1..102af75385 100644 --- a/iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME-acknowledgements.markdown +++ b/iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME-acknowledgements.markdown @@ -1,2482 +1,3 @@ # Acknowledgements This application makes use of the following third party libraries: - -## AppsFlyerFramework - -Copyright 2018 AppsFlyer Ltd. All rights reserved. - -## FBAudienceNetwork - -Copyright 2004-present Facebook. All Rights Reserved. - -You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -copy, modify, and distribute this software in source code or binary form for use -in connection with the web services and APIs provided by Facebook. - -As with any software that integrates with the Facebook platform, your use of -this software is subject to the Facebook Developer Principles and Policies -[http://developers.facebook.com/policy/]. This copyright 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. - - -## FBSDKCoreKit - -Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - -You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -copy, modify, and distribute this software in source code or binary form for use -in connection with the web services and APIs provided by Facebook. - -As with any software that integrates with the Facebook platform, your use of -this software is subject to the Facebook Developer Principles and Policies -[http://developers.facebook.com/policy/]. This copyright 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. - - -## FBSDKLoginKit - -Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - -You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -copy, modify, and distribute this software in source code or binary form for use -in connection with the web services and APIs provided by Facebook. - -As with any software that integrates with the Facebook platform, your use of -this software is subject to the Facebook Developer Principles and Policies -[http://developers.facebook.com/policy/]. This copyright 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. - - -## Firebase - - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -## FirebaseAnalytics - -Copyright 2020 Google - -## FirebaseAnalyticsInterop - - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -## FirebaseCore - - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -## FirebaseCoreDiagnostics - - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -## FirebaseCoreDiagnosticsInterop - - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -## FirebaseCrashlytics - - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -================================================================================ - -The following copyright from Hewlett-Packard Development Company, L.P. -applies to the dwarf.h file in third_party/libunwind - - libunwind - a platform-independent unwind library - Copyright (c) 2003-2005 Hewlett-Packard Development Company, L.P. - Contributed by David Mosberger-Tang - -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. - - -## FirebaseInstallations - - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -## Flurry-iOS-SDK - -Developer's use of the SDK is governed by the license in the applicable Flurry Terms of Service. Some components of the SDK are governed by open source software licenses. In the event of any conflict between the license in the applicable Flurry Terms of Service and the applicable open source license, the terms of the open source license shall prevail with respect to those components. - - -## GoogleAppMeasurement - -Copyright 2020 Google - -## GoogleDataTransport - - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -## GoogleDataTransportCCTSupport - - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -## GoogleUtilities - - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -================================================================================ - -The following copyright from Landon J. Fuller applies to the isAppEncrypted -function in Environment/third_party/GULAppEnvironmentUtil.m. - -Copyright (c) 2017 Landon J. Fuller -All rights reserved. - -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. - -Comment from -iPhone Dev Wiki -Crack Prevention: App Store binaries are signed by both their developer -and Apple. This encrypts the binary so that decryption keys are needed in order -to make the binary readable. When iOS executes the binary, the decryption keys -are used to decrypt the binary into a readable state where it is then loaded -into memory and executed. iOS can tell the encryption status of a binary via the -cryptid structure member of LC_ENCRYPTION_INFO MachO load command. If cryptid is -a non-zero value then the binary is encrypted. - -'Cracking' works by letting the kernel decrypt the binary then siphoning the -decrypted data into a new binary file, resigning, and repackaging. This will -only work on jailbroken devices as codesignature validation has been removed. -Resigning takes place because while the codesignature doesn't have to be valid -thanks to the jailbreak, it does have to be in place unless you have AppSync or -similar to disable codesignature checks. - -More information at Landon -Fuller's blog - - -## MoPub-FacebookAudienceNetwork-Adapters - - The MoPub SDK License can be found at http://www.mopub.com/legal/sdk-license-agreement/ - - - - -## PromisesObjC - - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -## Pushwoosh - -Copyright (c) 2014 Pushwoosh (http://www.pushwoosh.com) - -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: - -(i) the original and/or modified Software should be used exclusively to work with Pushwoosh services, - -(ii) 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. - -## mopub-ios-sdk - -The MoPub SDK License can be found at http://www.mopub.com/legal/sdk-license-agreement/ - -## nanopb - -Copyright (c) 2011 Petteri Aimonen - -This software is provided 'as-is', without any express or -implied warranty. In no event will the authors be held liable -for any damages arising from the use of this software. - -Permission is granted to anyone to use this software for any -purpose, including commercial applications, and to alter it and -redistribute it freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you - must not claim that you wrote the original software. If you use - this software in a product, an acknowledgment in the product - documentation would be appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and - must not be misrepresented as being the original software. - -3. This notice may not be removed or altered from any source - distribution. - Generated by CocoaPods - https://cocoapods.org diff --git a/iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME-acknowledgements.plist b/iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME-acknowledgements.plist index dae8e8d07b..7acbad1eab 100644 --- a/iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME-acknowledgements.plist +++ b/iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME-acknowledgements.plist @@ -12,2617 +12,6 @@ Type PSGroupSpecifier - - FooterText - Copyright 2018 AppsFlyer Ltd. All rights reserved. - License - Proprietary - Title - AppsFlyerFramework - Type - PSGroupSpecifier - - - FooterText - Copyright 2004-present Facebook. All Rights Reserved. - -You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -copy, modify, and distribute this software in source code or binary form for use -in connection with the web services and APIs provided by Facebook. - -As with any software that integrates with the Facebook platform, your use of -this software is subject to the Facebook Developer Principles and Policies -[http://developers.facebook.com/policy/]. This copyright 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. - - License - Copyright - Title - FBAudienceNetwork - Type - PSGroupSpecifier - - - FooterText - Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - -You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -copy, modify, and distribute this software in source code or binary form for use -in connection with the web services and APIs provided by Facebook. - -As with any software that integrates with the Facebook platform, your use of -this software is subject to the Facebook Developer Principles and Policies -[http://developers.facebook.com/policy/]. This copyright 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. - - License - Facebook Platform License - Title - FBSDKCoreKit - Type - PSGroupSpecifier - - - FooterText - Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - -You are hereby granted a non-exclusive, worldwide, royalty-free license to use, -copy, modify, and distribute this software in source code or binary form for use -in connection with the web services and APIs provided by Facebook. - -As with any software that integrates with the Facebook platform, your use of -this software is subject to the Facebook Developer Principles and Policies -[http://developers.facebook.com/policy/]. This copyright 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. - - License - Facebook Platform License - Title - FBSDKLoginKit - Type - PSGroupSpecifier - - - FooterText - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - License - Apache - Title - Firebase - Type - PSGroupSpecifier - - - FooterText - Copyright 2020 Google - License - Copyright - Title - FirebaseAnalytics - Type - PSGroupSpecifier - - - FooterText - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - License - Apache - Title - FirebaseAnalyticsInterop - Type - PSGroupSpecifier - - - FooterText - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - License - Apache - Title - FirebaseCore - Type - PSGroupSpecifier - - - FooterText - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - License - Apache - Title - FirebaseCoreDiagnostics - Type - PSGroupSpecifier - - - FooterText - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - License - Apache - Title - FirebaseCoreDiagnosticsInterop - Type - PSGroupSpecifier - - - FooterText - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -================================================================================ - -The following copyright from Hewlett-Packard Development Company, L.P. -applies to the dwarf.h file in third_party/libunwind - - libunwind - a platform-independent unwind library - Copyright (c) 2003-2005 Hewlett-Packard Development Company, L.P. - Contributed by David Mosberger-Tang <davidm@hpl.hp.com> - -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. - - License - Apache - Title - FirebaseCrashlytics - Type - PSGroupSpecifier - - - FooterText - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - License - Apache - Title - FirebaseInstallations - Type - PSGroupSpecifier - - - FooterText - Developer's use of the SDK is governed by the license in the applicable Flurry Terms of Service. Some components of the SDK are governed by open source software licenses. In the event of any conflict between the license in the applicable Flurry Terms of Service and the applicable open source license, the terms of the open source license shall prevail with respect to those components. - - License - Commercial - Title - Flurry-iOS-SDK - Type - PSGroupSpecifier - - - FooterText - Copyright 2020 Google - License - Copyright - Title - GoogleAppMeasurement - Type - PSGroupSpecifier - - - FooterText - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - License - Apache - Title - GoogleDataTransport - Type - PSGroupSpecifier - - - FooterText - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - License - Apache - Title - GoogleDataTransportCCTSupport - Type - PSGroupSpecifier - - - FooterText - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -================================================================================ - -The following copyright from Landon J. Fuller applies to the isAppEncrypted -function in Environment/third_party/GULAppEnvironmentUtil.m. - -Copyright (c) 2017 Landon J. Fuller <landon@landonf.org> -All rights reserved. - -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. - -Comment from -<a href="http://iphonedevwiki.net/index.php/Crack_prevention">iPhone Dev Wiki -Crack Prevention</a>: App Store binaries are signed by both their developer -and Apple. This encrypts the binary so that decryption keys are needed in order -to make the binary readable. When iOS executes the binary, the decryption keys -are used to decrypt the binary into a readable state where it is then loaded -into memory and executed. iOS can tell the encryption status of a binary via the -cryptid structure member of LC_ENCRYPTION_INFO MachO load command. If cryptid is -a non-zero value then the binary is encrypted. - -'Cracking' works by letting the kernel decrypt the binary then siphoning the -decrypted data into a new binary file, resigning, and repackaging. This will -only work on jailbroken devices as codesignature validation has been removed. -Resigning takes place because while the codesignature doesn't have to be valid -thanks to the jailbreak, it does have to be in place unless you have AppSync or -similar to disable codesignature checks. - -More information at <a href="http://landonf.org/2009/02/index.html">Landon -Fuller's blog</a> - - License - Apache - Title - GoogleUtilities - Type - PSGroupSpecifier - - - FooterText - The MoPub SDK License can be found at http://www.mopub.com/legal/sdk-license-agreement/ - - - - License - New BSD - Title - MoPub-FacebookAudienceNetwork-Adapters - Type - PSGroupSpecifier - - - FooterText - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - License - Apache - Title - PromisesObjC - Type - PSGroupSpecifier - - - FooterText - Copyright (c) 2014 Pushwoosh (http://www.pushwoosh.com) - -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: - -(i) the original and/or modified Software should be used exclusively to work with Pushwoosh services, - -(ii) 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. - License - MIT - Title - Pushwoosh - Type - PSGroupSpecifier - - - FooterText - The MoPub SDK License can be found at http://www.mopub.com/legal/sdk-license-agreement/ - License - New BSD - Title - mopub-ios-sdk - Type - PSGroupSpecifier - - - FooterText - Copyright (c) 2011 Petteri Aimonen <jpa at nanopb.mail.kapsi.fi> - -This software is provided 'as-is', without any express or -implied warranty. In no event will the authors be held liable -for any damages arising from the use of this software. - -Permission is granted to anyone to use this software for any -purpose, including commercial applications, and to alter it and -redistribute it freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you - must not claim that you wrote the original software. If you use - this software in a product, an acknowledgment in the product - documentation would be appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and - must not be misrepresented as being the original software. - -3. This notice may not be removed or altered from any source - distribution. - - License - zlib - Title - nanopb - Type - PSGroupSpecifier - FooterText Generated by CocoaPods - https://cocoapods.org diff --git a/iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME.debug.xcconfig b/iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME.debug.xcconfig index 5148148471..26f2c77366 100644 --- a/iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME.debug.xcconfig +++ b/iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME.debug.xcconfig @@ -1,11 +1,8 @@ -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKCoreKit" "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKLoginKit" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCrashlytics" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstallations" "${PODS_CONFIGURATION_BUILD_DIR}/Flurry-iOS-SDK" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/MoPub-FacebookAudienceNetwork-Adapters" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/mopub-ios-sdk" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" "${PODS_ROOT}/AppsFlyerFramework" "${PODS_ROOT}/FBAudienceNetwork/Static" "${PODS_ROOT}/FirebaseAnalytics/Frameworks" "${PODS_ROOT}/GoogleAppMeasurement/Frameworks" "${PODS_ROOT}/Pushwoosh/Framework" "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Viewability/MOAT" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 $(inherited) FBSDKCOCOAPODS=1 $(inherited) PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1 PB_ENABLE_MALLOC=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKCoreKit/FBSDKCoreKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKLoginKit/FBSDKLoginKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore/FirebaseCore.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCrashlytics/FirebaseCrashlytics.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstallations/FirebaseInstallations.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Flurry-iOS-SDK/Flurry_iOS_SDK.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport/GoogleDataTransport.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities/GoogleUtilities.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MoPub-FacebookAudienceNetwork-Adapters/MoPub_FacebookAudienceNetwork_Adapters.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC/FBLPromises.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/mopub-ios-sdk/MoPub.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb/nanopb.framework/Headers" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Firebase" "${PODS_ROOT}/Headers/Public/FirebaseAnalyticsInterop" "${PODS_ROOT}/Headers/Public/FirebaseCoreDiagnosticsInterop" $(inherited) ${PODS_ROOT}/Firebase/CoreOnly/Sources "${PODS_TARGET_SRCROOT}/Sources/FBLPromises/include" -LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Flurry-iOS-SDK/Flurry" "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Viewability/Avid" -OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"sqlite3" -l"stdc++" -l"xml2" -l"z" -framework "AVFoundation" -framework "AVKit" -framework "AdSupport" -framework "AppsFlyerLib" -framework "AudioToolbox" -framework "CoreGraphics" -framework "CoreImage" -framework "CoreLocation" -framework "CoreMedia" -framework "CoreTelephony" -framework "FBAudienceNetwork" -framework "FBLPromises" -framework "FBSDKCoreKit" -framework "FBSDKLoginKit" -framework "FIRAnalyticsConnector" -framework "FirebaseAnalytics" -framework "FirebaseCore" -framework "FirebaseCoreDiagnostics" -framework "FirebaseCrashlytics" -framework "FirebaseInstallations" -framework "Flurry_iOS_SDK" -framework "Foundation" -framework "GoogleAppMeasurement" -framework "GoogleDataTransport" -framework "GoogleDataTransportCCTSupport" -framework "GoogleUtilities" -framework "MediaPlayer" -framework "MoPub" -framework "MoPub_FacebookAudienceNetwork_Adapters" -framework "Pushwoosh" -framework "QuartzCore" -framework "SafariServices" -framework "Security" -framework "StoreKit" -framework "SystemConfiguration" -framework "UIKit" -framework "iAd" -framework "nanopb" -weak_framework "Accelerate" -weak_framework "Accounts" -weak_framework "AdSupport" -weak_framework "AudioToolbox" -weak_framework "CFNetwork" -weak_framework "CoreGraphics" -weak_framework "CoreLocation" -weak_framework "CoreMotion" -weak_framework "CoreTelephony" -weak_framework "Foundation" -weak_framework "LocalAuthentication" -weak_framework "QuartzCore" -weak_framework "SafariServices" -weak_framework "Security" -weak_framework "Social" -weak_framework "StoreKit" -weak_framework "SystemConfiguration" -weak_framework "UIKit" -weak_framework "VideoToolbox" -weak_framework "WebKit" +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME.release.xcconfig b/iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME.release.xcconfig index 5148148471..26f2c77366 100644 --- a/iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME.release.xcconfig +++ b/iphone/Maps/Pods/Target Support Files/Pods-MAPS.ME/Pods-MAPS.ME.release.xcconfig @@ -1,11 +1,8 @@ -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKCoreKit" "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKLoginKit" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCrashlytics" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstallations" "${PODS_CONFIGURATION_BUILD_DIR}/Flurry-iOS-SDK" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/MoPub-FacebookAudienceNetwork-Adapters" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/mopub-ios-sdk" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" "${PODS_ROOT}/AppsFlyerFramework" "${PODS_ROOT}/FBAudienceNetwork/Static" "${PODS_ROOT}/FirebaseAnalytics/Frameworks" "${PODS_ROOT}/GoogleAppMeasurement/Frameworks" "${PODS_ROOT}/Pushwoosh/Framework" "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Viewability/MOAT" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 $(inherited) FBSDKCOCOAPODS=1 $(inherited) PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1 PB_ENABLE_MALLOC=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKCoreKit/FBSDKCoreKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKLoginKit/FBSDKLoginKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore/FirebaseCore.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCrashlytics/FirebaseCrashlytics.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstallations/FirebaseInstallations.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Flurry-iOS-SDK/Flurry_iOS_SDK.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport/GoogleDataTransport.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport/GoogleDataTransportCCTSupport.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities/GoogleUtilities.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MoPub-FacebookAudienceNetwork-Adapters/MoPub_FacebookAudienceNetwork_Adapters.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC/FBLPromises.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/mopub-ios-sdk/MoPub.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb/nanopb.framework/Headers" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Firebase" "${PODS_ROOT}/Headers/Public/FirebaseAnalyticsInterop" "${PODS_ROOT}/Headers/Public/FirebaseCoreDiagnosticsInterop" $(inherited) ${PODS_ROOT}/Firebase/CoreOnly/Sources "${PODS_TARGET_SRCROOT}/Sources/FBLPromises/include" -LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Flurry-iOS-SDK/Flurry" "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Viewability/Avid" -OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"sqlite3" -l"stdc++" -l"xml2" -l"z" -framework "AVFoundation" -framework "AVKit" -framework "AdSupport" -framework "AppsFlyerLib" -framework "AudioToolbox" -framework "CoreGraphics" -framework "CoreImage" -framework "CoreLocation" -framework "CoreMedia" -framework "CoreTelephony" -framework "FBAudienceNetwork" -framework "FBLPromises" -framework "FBSDKCoreKit" -framework "FBSDKLoginKit" -framework "FIRAnalyticsConnector" -framework "FirebaseAnalytics" -framework "FirebaseCore" -framework "FirebaseCoreDiagnostics" -framework "FirebaseCrashlytics" -framework "FirebaseInstallations" -framework "Flurry_iOS_SDK" -framework "Foundation" -framework "GoogleAppMeasurement" -framework "GoogleDataTransport" -framework "GoogleDataTransportCCTSupport" -framework "GoogleUtilities" -framework "MediaPlayer" -framework "MoPub" -framework "MoPub_FacebookAudienceNetwork_Adapters" -framework "Pushwoosh" -framework "QuartzCore" -framework "SafariServices" -framework "Security" -framework "StoreKit" -framework "SystemConfiguration" -framework "UIKit" -framework "iAd" -framework "nanopb" -weak_framework "Accelerate" -weak_framework "Accounts" -weak_framework "AdSupport" -weak_framework "AudioToolbox" -weak_framework "CFNetwork" -weak_framework "CoreGraphics" -weak_framework "CoreLocation" -weak_framework "CoreMotion" -weak_framework "CoreTelephony" -weak_framework "Foundation" -weak_framework "LocalAuthentication" -weak_framework "QuartzCore" -weak_framework "SafariServices" -weak_framework "Security" -weak_framework "Social" -weak_framework "StoreKit" -weak_framework "SystemConfiguration" -weak_framework "UIKit" -weak_framework "VideoToolbox" -weak_framework "WebKit" +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/PromisesObjC/PromisesObjC-Info.plist b/iphone/Maps/Pods/Target Support Files/PromisesObjC/PromisesObjC-Info.plist deleted file mode 100644 index 57e52a19c5..0000000000 --- a/iphone/Maps/Pods/Target Support Files/PromisesObjC/PromisesObjC-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.2.9 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/iphone/Maps/Pods/Target Support Files/PromisesObjC/PromisesObjC-dummy.m b/iphone/Maps/Pods/Target Support Files/PromisesObjC/PromisesObjC-dummy.m deleted file mode 100644 index ab1f210400..0000000000 --- a/iphone/Maps/Pods/Target Support Files/PromisesObjC/PromisesObjC-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_PromisesObjC : NSObject -@end -@implementation PodsDummy_PromisesObjC -@end diff --git a/iphone/Maps/Pods/Target Support Files/PromisesObjC/PromisesObjC-umbrella.h b/iphone/Maps/Pods/Target Support Files/PromisesObjC/PromisesObjC-umbrella.h deleted file mode 100644 index 5b014a8b3f..0000000000 --- a/iphone/Maps/Pods/Target Support Files/PromisesObjC/PromisesObjC-umbrella.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#import "FBLPromise+All.h" -#import "FBLPromise+Always.h" -#import "FBLPromise+Any.h" -#import "FBLPromise+Async.h" -#import "FBLPromise+Await.h" -#import "FBLPromise+Catch.h" -#import "FBLPromise+Delay.h" -#import "FBLPromise+Do.h" -#import "FBLPromise+Race.h" -#import "FBLPromise+Recover.h" -#import "FBLPromise+Reduce.h" -#import "FBLPromise+Retry.h" -#import "FBLPromise+Testing.h" -#import "FBLPromise+Then.h" -#import "FBLPromise+Timeout.h" -#import "FBLPromise+Validate.h" -#import "FBLPromise+Wrap.h" -#import "FBLPromise.h" -#import "FBLPromiseError.h" -#import "FBLPromises.h" - -FOUNDATION_EXPORT double FBLPromisesVersionNumber; -FOUNDATION_EXPORT const unsigned char FBLPromisesVersionString[]; - diff --git a/iphone/Maps/Pods/Target Support Files/PromisesObjC/PromisesObjC.debug.xcconfig b/iphone/Maps/Pods/Target Support Files/PromisesObjC/PromisesObjC.debug.xcconfig deleted file mode 100644 index dac127e67a..0000000000 --- a/iphone/Maps/Pods/Target Support Files/PromisesObjC/PromisesObjC.debug.xcconfig +++ /dev/null @@ -1,10 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_TARGET_SRCROOT}/Sources/FBLPromises/include" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/PromisesObjC -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/PromisesObjC/PromisesObjC.modulemap b/iphone/Maps/Pods/Target Support Files/PromisesObjC/PromisesObjC.modulemap deleted file mode 100644 index 7d485cdcd1..0000000000 --- a/iphone/Maps/Pods/Target Support Files/PromisesObjC/PromisesObjC.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module FBLPromises { - umbrella header "PromisesObjC-umbrella.h" - - export * - module * { export * } -} diff --git a/iphone/Maps/Pods/Target Support Files/PromisesObjC/PromisesObjC.release.xcconfig b/iphone/Maps/Pods/Target Support Files/PromisesObjC/PromisesObjC.release.xcconfig deleted file mode 100644 index dac127e67a..0000000000 --- a/iphone/Maps/Pods/Target Support Files/PromisesObjC/PromisesObjC.release.xcconfig +++ /dev/null @@ -1,10 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_TARGET_SRCROOT}/Sources/FBLPromises/include" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/PromisesObjC -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/PromisesObjC/PromisesObjC.xcconfig b/iphone/Maps/Pods/Target Support Files/PromisesObjC/PromisesObjC.xcconfig deleted file mode 100644 index dac127e67a..0000000000 --- a/iphone/Maps/Pods/Target Support Files/PromisesObjC/PromisesObjC.xcconfig +++ /dev/null @@ -1,10 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_TARGET_SRCROOT}/Sources/FBLPromises/include" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/PromisesObjC -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/Pushwoosh/Pushwoosh.debug.xcconfig b/iphone/Maps/Pods/Target Support Files/Pushwoosh/Pushwoosh.debug.xcconfig deleted file mode 100644 index 203983aca7..0000000000 --- a/iphone/Maps/Pods/Target Support Files/Pushwoosh/Pushwoosh.debug.xcconfig +++ /dev/null @@ -1,11 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Pushwoosh -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Pushwoosh/Framework" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"z" -framework "Security" -framework "StoreKit" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/Pushwoosh -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/Pushwoosh/Pushwoosh.release.xcconfig b/iphone/Maps/Pods/Target Support Files/Pushwoosh/Pushwoosh.release.xcconfig deleted file mode 100644 index 203983aca7..0000000000 --- a/iphone/Maps/Pods/Target Support Files/Pushwoosh/Pushwoosh.release.xcconfig +++ /dev/null @@ -1,11 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Pushwoosh -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Pushwoosh/Framework" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"z" -framework "Security" -framework "StoreKit" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/Pushwoosh -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/Pushwoosh/Pushwoosh.xcconfig b/iphone/Maps/Pods/Target Support Files/Pushwoosh/Pushwoosh.xcconfig deleted file mode 100644 index 203983aca7..0000000000 --- a/iphone/Maps/Pods/Target Support Files/Pushwoosh/Pushwoosh.xcconfig +++ /dev/null @@ -1,11 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Pushwoosh -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Pushwoosh/Framework" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"z" -framework "Security" -framework "StoreKit" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/Pushwoosh -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/mopub-ios-sdk/ResourceBundle-MoPubResources-mopub-ios-sdk-Info.plist b/iphone/Maps/Pods/Target Support Files/mopub-ios-sdk/ResourceBundle-MoPubResources-mopub-ios-sdk-Info.plist deleted file mode 100644 index 8d0c9d1268..0000000000 --- a/iphone/Maps/Pods/Target Support Files/mopub-ios-sdk/ResourceBundle-MoPubResources-mopub-ios-sdk-Info.plist +++ /dev/null @@ -1,24 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - BNDL - CFBundleShortVersionString - 5.13.1 - CFBundleSignature - ???? - CFBundleVersion - 1 - NSPrincipalClass - - - diff --git a/iphone/Maps/Pods/Target Support Files/mopub-ios-sdk/mopub-ios-sdk-Info.plist b/iphone/Maps/Pods/Target Support Files/mopub-ios-sdk/mopub-ios-sdk-Info.plist deleted file mode 100644 index a42aa5207c..0000000000 --- a/iphone/Maps/Pods/Target Support Files/mopub-ios-sdk/mopub-ios-sdk-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 5.12.0 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/iphone/Maps/Pods/Target Support Files/mopub-ios-sdk/mopub-ios-sdk-dummy.m b/iphone/Maps/Pods/Target Support Files/mopub-ios-sdk/mopub-ios-sdk-dummy.m deleted file mode 100644 index 8cd65a3e95..0000000000 --- a/iphone/Maps/Pods/Target Support Files/mopub-ios-sdk/mopub-ios-sdk-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_mopub_ios_sdk : NSObject -@end -@implementation PodsDummy_mopub_ios_sdk -@end diff --git a/iphone/Maps/Pods/Target Support Files/mopub-ios-sdk/mopub-ios-sdk-prefix.pch b/iphone/Maps/Pods/Target Support Files/mopub-ios-sdk/mopub-ios-sdk-prefix.pch deleted file mode 100644 index beb2a24418..0000000000 --- a/iphone/Maps/Pods/Target Support Files/mopub-ios-sdk/mopub-ios-sdk-prefix.pch +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - diff --git a/iphone/Maps/Pods/Target Support Files/mopub-ios-sdk/mopub-ios-sdk-umbrella.h b/iphone/Maps/Pods/Target Support Files/mopub-ios-sdk/mopub-ios-sdk-umbrella.h deleted file mode 100644 index 2f2ccaa27c..0000000000 --- a/iphone/Maps/Pods/Target Support Files/mopub-ios-sdk/mopub-ios-sdk-umbrella.h +++ /dev/null @@ -1,269 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#import "MoPub_AbstractAvidAdSession.h" -#import "MoPub_AbstractAvidManagedAdSession.h" -#import "MoPub_Avid.h" -#import "MoPub_AvidAdSessionManager.h" -#import "MoPub_AvidDeferredAdSessionListener.h" -#import "MoPub_AvidDisplayAdSession.h" -#import "MoPub_AvidManagedDisplayAdSession.h" -#import "MoPub_AvidManagedVideoAdSession.h" -#import "MoPub_AvidVideoAdSession.h" -#import "MoPub_AvidVideoPlaybackListener.h" -#import "MoPub_ExternalAvidAdSessionContext.h" -#import "MPViewabilityAdapterAvid.h" -#import "MPBannerAdManager.h" -#import "MPBannerAdManagerDelegate.h" -#import "MPBannerCustomEvent+Internal.h" -#import "MPBannerCustomEventAdapter.h" -#import "MPBaseBannerAdapter.h" -#import "MPPrivateBannerCustomEventDelegate.h" -#import "MPActivityViewControllerHelper+TweetShare.h" -#import "MPActivityViewControllerHelper.h" -#import "MPAdConfiguration.h" -#import "MPAdDestinationDisplayAgent.h" -#import "MPAdImpressionTimer.h" -#import "MPAdServerCommunicator.h" -#import "MPAdServerURLBuilder.h" -#import "MPAPIEndpoints.h" -#import "MPClosableView.h" -#import "MPCountdownTimerView.h" -#import "MPEnhancedDeeplinkRequest.h" -#import "MPLastResortDelegate.h" -#import "MPProgressOverlayView.h" -#import "MPRealTimeTimer.h" -#import "MPURLActionInfo.h" -#import "MPURLResolver.h" -#import "MPVideoConfig.h" -#import "MPXMLParser.h" -#import "MPAdWebViewAgent.h" -#import "MPContentBlocker.h" -#import "MPHTMLBannerCustomEvent.h" -#import "MPHTMLInterstitialCustomEvent.h" -#import "MPHTMLInterstitialViewController.h" -#import "MPWebView.h" -#import "MPBaseInterstitialAdapter.h" -#import "MPInterstitialAdManager.h" -#import "MPInterstitialAdManagerDelegate.h" -#import "MPInterstitialCustomEventAdapter.h" -#import "MPInterstitialViewController.h" -#import "MPPrivateInterstitialCustomEventDelegate.h" -#import "MPAdServerKeys.h" -#import "MPATSSetting.h" -#import "MPConsentDialogViewController.h" -#import "MPConsentManager.h" -#import "MPCoreInstanceProvider+MRAID.h" -#import "MPCoreInstanceProvider.h" -#import "MPDeviceInformation.h" -#import "MPDiskLRUCache.h" -#import "MPExtendedHitBoxButton.h" -#import "MPHTTPNetworkSession.h" -#import "MPHTTPNetworkTaskData.h" -#import "MPMediationManager.h" -#import "MPMemoryCache.h" -#import "MPNativeAdError.h" -#import "MPNetworkStatus.h" -#import "MPRateLimitConfiguration.h" -#import "MPRateLimitManager.h" -#import "MPReachabilityManager.h" -#import "MPURL.h" -#import "MPURLRequest.h" -#import "MPVASTInterstitialCustomEvent.h" -#import "MPVASTTracking.h" -#import "MPWebBrowserUserAgentInfo.h" -#import "MPForceableOrientationProtocol.h" -#import "MPMRAIDBannerCustomEvent.h" -#import "MPMRAIDInterstitialCustomEvent.h" -#import "MPMRAIDInterstitialViewController.h" -#import "MRBridge.h" -#import "MRBundleManager.h" -#import "MRCommand.h" -#import "MRConstants.h" -#import "MRController.h" -#import "MRError.h" -#import "MRExpandModalViewController.h" -#import "MRNativeCommandHandler.h" -#import "MRProperty.h" -#import "MRVideoPlayerManager.h" -#import "MoPub+Utility.h" -#import "NSBundle+MPAdditions.h" -#import "NSDate+MPAdditions.h" -#import "NSDictionary+MPAdditions.h" -#import "NSError+MPAdditions.h" -#import "NSHTTPURLResponse+MPAdditions.h" -#import "NSJSONSerialization+MPAdditions.h" -#import "NSMutableArray+MPAdditions.h" -#import "NSString+MPAdditions.h" -#import "NSString+MPConsentStatus.h" -#import "NSURL+MPAdditions.h" -#import "SKStoreProductViewController+MPAdditions.h" -#import "UIButton+MPAdditions.h" -#import "UIColor+MPAdditions.h" -#import "UIView+MPAdditions.h" -#import "MOPUBExperimentProvider.h" -#import "MPAnalyticsTracker.h" -#import "MPError.h" -#import "MPGeolocationProvider.h" -#import "MPGlobal.h" -#import "MPIdentityProvider.h" -#import "MPImageDownloadQueue.h" -#import "MPImageLoader.h" -#import "MPNativeCache.h" -#import "MPReachability.h" -#import "MPSessionTracker.h" -#import "MPStopwatch.h" -#import "MPTimer.h" -#import "MPUserInteractionGestureRecognizer.h" -#import "MPMediaFileCache.h" -#import "MPVASTAd.h" -#import "MPVASTCompanionAd.h" -#import "MPVASTConstant.h" -#import "MPVASTCreative.h" -#import "MPVASTDurationOffset.h" -#import "MPVASTError.h" -#import "MPVASTIndustryIcon.h" -#import "MPVASTInline.h" -#import "MPVASTLinearAd.h" -#import "MPVASTMacroProcessor.h" -#import "MPVASTManager.h" -#import "MPVASTMediaFile.h" -#import "MPVASTModel.h" -#import "MPVASTResource.h" -#import "MPVASTResponse.h" -#import "MPVASTStringUtilities.h" -#import "MPVASTTrackingEvent.h" -#import "MPVASTWrapper.h" -#import "MPVideoEvent.h" -#import "MPVASTCompanionAdView.h" -#import "MPVASTIndustryIconView.h" -#import "MPVASTResourceView.h" -#import "MPVideoPlayer.h" -#import "MPVideoPlayerContainerView.h" -#import "MPVideoPlayerFullScreenVASTAdOverlay.h" -#import "MPVideoPlayerView.h" -#import "MPVideoPlayerViewController.h" -#import "MPVideoPlayerViewOverlay.h" -#import "MPConsoleLogger.h" -#import "MPLogManager.h" -#import "MPBLogger.h" -#import "MPBLogLevel.h" -#import "MPLogEvent.h" -#import "MPLogging.h" -#import "MoPub.h" -#import "MOPUBDisplayAgentType.h" -#import "MPAdapterConfiguration.h" -#import "MPAdConversionTracker.h" -#import "MPAdTargeting.h" -#import "MPAdView.h" -#import "MPAdViewDelegate.h" -#import "MPBannerCustomEvent.h" -#import "MPBannerCustomEventDelegate.h" -#import "MPBaseAdapterConfiguration.h" -#import "MPBool.h" -#import "MPConsentChangedNotification.h" -#import "MPConsentChangedReason.h" -#import "MPConsentError.h" -#import "MPConsentStatus.h" -#import "MPConstants.h" -#import "MPEngineInfo.h" -#import "MPImpressionData.h" -#import "MPImpressionTrackedNotification.h" -#import "MPInterstitialAdController.h" -#import "MPInterstitialAdControllerDelegate.h" -#import "MPInterstitialCustomEvent.h" -#import "MPInterstitialCustomEventDelegate.h" -#import "MPMediationSettingsProtocol.h" -#import "MPMoPubAd.h" -#import "MPMoPubAdPlacer.h" -#import "MPMoPubConfiguration.h" -#import "MPMoPubRewardedPlayableCustomEvent.h" -#import "MPMoPubRewardedVideoCustomEvent.h" -#import "MPPrivateRewardedVideoCustomEventDelegate.h" -#import "MPRewardedVideo+Internal.h" -#import "MPRewardedVideoAdapter.h" -#import "MPRewardedVideoAdManager.h" -#import "MPRewardedVideoConnection.h" -#import "MPRewardedVideo.h" -#import "MPRewardedVideoCustomEvent.h" -#import "MPRewardedVideoError.h" -#import "MPRewardedVideoReward.h" -#import "MPViewabilityAdapter.h" -#import "MPViewabilityOption.h" -#import "MPViewabilityTracker.h" -#import "MPWebView+Viewability.h" -#import "MPViewabilityAdapterMoat.h" -#import "MPNativeAdError+VAST.h" -#import "MPNativeAdRequest+MPNativeAdSource.h" -#import "MPAdPlacerInvocation.h" -#import "MPBaseNativeAdRenderer+Internal.h" -#import "MPCollectionViewAdPlacerCell.h" -#import "MPMoPubNativeAdAdapter.h" -#import "MPMoPubNativeCustomEvent.h" -#import "MPNativeAd+Internal.h" -#import "MPNativeAdConfigValues+Internal.h" -#import "MPNativeAdConfigValues.h" -#import "MPNativeAdRendererConstants.h" -#import "MPNativeAdRendererImageHandler.h" -#import "MPNativeAdSourceQueue.h" -#import "MPNativeAdUtils.h" -#import "MPNativePositionResponseDeserializer.h" -#import "MPNativePositionSource.h" -#import "MPNativeView.h" -#import "MPStreamAdPlacerDelegate.h" -#import "MPTableViewAdPlacerCell.h" -#import "MPAdPositioning.h" -#import "MPBaseNativeAdRenderer.h" -#import "MPClientAdPositioning.h" -#import "MPCollectionViewAdPlacer.h" -#import "MPCollectionViewAdPlacerDelegate.h" -#import "MPNativeAd.h" -#import "MPNativeAdAdapter.h" -#import "MPNativeAdConstants.h" -#import "MPNativeAdData.h" -#import "MPNativeAdDelegate.h" -#import "MPNativeAdRenderer.h" -#import "MPNativeAdRendererConfiguration.h" -#import "MPNativeAdRendererSettings.h" -#import "MPNativeAdRendering.h" -#import "MPNativeAdRenderingImageLoader.h" -#import "MPNativeAdRequest.h" -#import "MPNativeAdRequestTargeting.h" -#import "MPNativeAds.h" -#import "MPNativeAdSource.h" -#import "MPNativeAdSourceDelegate.h" -#import "MPNativeCustomEvent.h" -#import "MPNativeCustomEventDelegate.h" -#import "MPServerAdPositioning.h" -#import "MPStaticNativeAdRenderer.h" -#import "MPStaticNativeAdRendererSettings.h" -#import "MPStreamAdPlacementData.h" -#import "MPStreamAdPlacer.h" -#import "MPTableViewAdPlacer.h" -#import "MPTableViewAdPlacerDelegate.h" -#import "MOPUBActivityIndicatorView.h" -#import "MOPUBAVPlayer.h" -#import "MOPUBAVPlayerView.h" -#import "MOPUBFullscreenPlayerViewController.h" -#import "MOPUBNativeVideoAdAdapter.h" -#import "MOPUBNativeVideoAdConfigValues.h" -#import "MOPUBNativeVideoCustomEvent.h" -#import "MOPUBPlayerManager.h" -#import "MOPUBPlayerView.h" -#import "MOPUBPlayerViewController.h" -#import "MOPUBReplayView.h" -#import "MOPUBNativeVideoAdRenderer.h" -#import "MOPUBNativeVideoAdRendererSettings.h" - -FOUNDATION_EXPORT double MoPubVersionNumber; -FOUNDATION_EXPORT const unsigned char MoPubVersionString[]; - diff --git a/iphone/Maps/Pods/Target Support Files/mopub-ios-sdk/mopub-ios-sdk.debug.xcconfig b/iphone/Maps/Pods/Target Support Files/mopub-ios-sdk/mopub-ios-sdk.debug.xcconfig deleted file mode 100644 index cc8b98d3ec..0000000000 --- a/iphone/Maps/Pods/Target Support Files/mopub-ios-sdk/mopub-ios-sdk.debug.xcconfig +++ /dev/null @@ -1,12 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/mopub-ios-sdk -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Viewability/MOAT" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Viewability/Avid" -OTHER_LDFLAGS = $(inherited) -l"Avid-mopub-3.6.1" -framework "AVFoundation" -framework "AVKit" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreMedia" -framework "CoreTelephony" -framework "Foundation" -framework "MPUBMoatMobileAppKit" -framework "MediaPlayer" -framework "QuartzCore" -framework "SafariServices" -framework "SystemConfiguration" -framework "UIKit" -weak_framework "AdSupport" -weak_framework "StoreKit" -weak_framework "WebKit" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/mopub-ios-sdk -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/mopub-ios-sdk/mopub-ios-sdk.modulemap b/iphone/Maps/Pods/Target Support Files/mopub-ios-sdk/mopub-ios-sdk.modulemap deleted file mode 100644 index be0aa9779e..0000000000 --- a/iphone/Maps/Pods/Target Support Files/mopub-ios-sdk/mopub-ios-sdk.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module MoPub { - umbrella header "mopub-ios-sdk-umbrella.h" - - export * - module * { export * } -} diff --git a/iphone/Maps/Pods/Target Support Files/mopub-ios-sdk/mopub-ios-sdk.release.xcconfig b/iphone/Maps/Pods/Target Support Files/mopub-ios-sdk/mopub-ios-sdk.release.xcconfig deleted file mode 100644 index cc8b98d3ec..0000000000 --- a/iphone/Maps/Pods/Target Support Files/mopub-ios-sdk/mopub-ios-sdk.release.xcconfig +++ /dev/null @@ -1,12 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/mopub-ios-sdk -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Viewability/MOAT" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Viewability/Avid" -OTHER_LDFLAGS = $(inherited) -l"Avid-mopub-3.6.1" -framework "AVFoundation" -framework "AVKit" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreMedia" -framework "CoreTelephony" -framework "Foundation" -framework "MPUBMoatMobileAppKit" -framework "MediaPlayer" -framework "QuartzCore" -framework "SafariServices" -framework "SystemConfiguration" -framework "UIKit" -weak_framework "AdSupport" -weak_framework "StoreKit" -weak_framework "WebKit" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/mopub-ios-sdk -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/mopub-ios-sdk/mopub-ios-sdk.xcconfig b/iphone/Maps/Pods/Target Support Files/mopub-ios-sdk/mopub-ios-sdk.xcconfig deleted file mode 100644 index cc8b98d3ec..0000000000 --- a/iphone/Maps/Pods/Target Support Files/mopub-ios-sdk/mopub-ios-sdk.xcconfig +++ /dev/null @@ -1,12 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/mopub-ios-sdk -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Viewability/MOAT" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Viewability/Avid" -OTHER_LDFLAGS = $(inherited) -l"Avid-mopub-3.6.1" -framework "AVFoundation" -framework "AVKit" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreMedia" -framework "CoreTelephony" -framework "Foundation" -framework "MPUBMoatMobileAppKit" -framework "MediaPlayer" -framework "QuartzCore" -framework "SafariServices" -framework "SystemConfiguration" -framework "UIKit" -weak_framework "AdSupport" -weak_framework "StoreKit" -weak_framework "WebKit" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/mopub-ios-sdk -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/nanopb/nanopb-Info.plist b/iphone/Maps/Pods/Target Support Files/nanopb/nanopb-Info.plist deleted file mode 100644 index aaca2d5cb1..0000000000 --- a/iphone/Maps/Pods/Target Support Files/nanopb/nanopb-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.30905.0 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/iphone/Maps/Pods/Target Support Files/nanopb/nanopb-dummy.m b/iphone/Maps/Pods/Target Support Files/nanopb/nanopb-dummy.m deleted file mode 100644 index b3fa5956e6..0000000000 --- a/iphone/Maps/Pods/Target Support Files/nanopb/nanopb-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_nanopb : NSObject -@end -@implementation PodsDummy_nanopb -@end diff --git a/iphone/Maps/Pods/Target Support Files/nanopb/nanopb-prefix.pch b/iphone/Maps/Pods/Target Support Files/nanopb/nanopb-prefix.pch deleted file mode 100644 index beb2a24418..0000000000 --- a/iphone/Maps/Pods/Target Support Files/nanopb/nanopb-prefix.pch +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - diff --git a/iphone/Maps/Pods/Target Support Files/nanopb/nanopb-umbrella.h b/iphone/Maps/Pods/Target Support Files/nanopb/nanopb-umbrella.h deleted file mode 100644 index 07e77b38a5..0000000000 --- a/iphone/Maps/Pods/Target Support Files/nanopb/nanopb-umbrella.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#import "pb.h" -#import "pb_common.h" -#import "pb_decode.h" -#import "pb_encode.h" -#import "pb.h" -#import "pb_decode.h" -#import "pb_common.h" -#import "pb.h" -#import "pb_encode.h" -#import "pb_common.h" - -FOUNDATION_EXPORT double nanopbVersionNumber; -FOUNDATION_EXPORT const unsigned char nanopbVersionString[]; - diff --git a/iphone/Maps/Pods/Target Support Files/nanopb/nanopb.debug.xcconfig b/iphone/Maps/Pods/Target Support Files/nanopb/nanopb.debug.xcconfig deleted file mode 100644 index 8e7193b49b..0000000000 --- a/iphone/Maps/Pods/Target Support Files/nanopb/nanopb.debug.xcconfig +++ /dev/null @@ -1,9 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/nanopb -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 $(inherited) PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1 PB_ENABLE_MALLOC=1 -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/nanopb -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/nanopb/nanopb.modulemap b/iphone/Maps/Pods/Target Support Files/nanopb/nanopb.modulemap deleted file mode 100644 index e8d4b53243..0000000000 --- a/iphone/Maps/Pods/Target Support Files/nanopb/nanopb.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module nanopb { - umbrella header "nanopb-umbrella.h" - - export * - module * { export * } -} diff --git a/iphone/Maps/Pods/Target Support Files/nanopb/nanopb.release.xcconfig b/iphone/Maps/Pods/Target Support Files/nanopb/nanopb.release.xcconfig deleted file mode 100644 index 8e7193b49b..0000000000 --- a/iphone/Maps/Pods/Target Support Files/nanopb/nanopb.release.xcconfig +++ /dev/null @@ -1,9 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/nanopb -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 $(inherited) PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1 PB_ENABLE_MALLOC=1 -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/nanopb -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/Target Support Files/nanopb/nanopb.xcconfig b/iphone/Maps/Pods/Target Support Files/nanopb/nanopb.xcconfig deleted file mode 100644 index 8e7193b49b..0000000000 --- a/iphone/Maps/Pods/Target Support Files/nanopb/nanopb.xcconfig +++ /dev/null @@ -1,9 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/nanopb -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 $(inherited) PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1 PB_ENABLE_MALLOC=1 -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/nanopb -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iphone/Maps/Pods/mopub-ios-sdk/LICENSE b/iphone/Maps/Pods/mopub-ios-sdk/LICENSE deleted file mode 100644 index dbbea5c1fa..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/LICENSE +++ /dev/null @@ -1 +0,0 @@ -The MoPub SDK License can be found at http://www.mopub.com/legal/sdk-license-agreement/ \ No newline at end of file diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerAdManager.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerAdManager.h deleted file mode 100644 index 30d1471b78..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerAdManager.h +++ /dev/null @@ -1,30 +0,0 @@ -// -// MPBannerAdManager.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPAdServerCommunicator.h" -#import "MPBaseBannerAdapter.h" - -@class MPAdTargeting; - -@protocol MPBannerAdManagerDelegate; - -@interface MPBannerAdManager : NSObject - -@property (nonatomic, weak) id delegate; -@property (nonatomic, readonly) BOOL isMraidAd; - -- (id)initWithDelegate:(id)delegate; - -- (void)loadAdWithTargeting:(MPAdTargeting *)targeting; -- (void)forceRefreshAd; -- (void)stopAutomaticallyRefreshingContents; -- (void)startAutomaticallyRefreshingContents; -- (void)rotateToOrientation:(UIInterfaceOrientation)orientation; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerAdManager.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerAdManager.m deleted file mode 100644 index 07e0d92a1a..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerAdManager.m +++ /dev/null @@ -1,448 +0,0 @@ -// -// MPBannerAdManager.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPBannerAdManager.h" -#import "MPAdServerURLBuilder.h" -#import "MPAdTargeting.h" -#import "MPCoreInstanceProvider.h" -#import "MPBannerAdManagerDelegate.h" -#import "MPError.h" -#import "MPTimer.h" -#import "MPConstants.h" -#import "MPLogging.h" -#import "MPStopwatch.h" -#import "MPBannerCustomEventAdapter.h" -#import "NSMutableArray+MPAdditions.h" -#import "NSDate+MPAdditions.h" -#import "NSError+MPAdditions.h" - -@interface MPBannerAdManager () - -@property (nonatomic, strong) MPAdServerCommunicator *communicator; -@property (nonatomic, strong) MPBaseBannerAdapter *onscreenAdapter; -@property (nonatomic, strong) MPBaseBannerAdapter *requestingAdapter; -@property (nonatomic, strong) UIView *requestingAdapterAdContentView; -@property (nonatomic, strong) MPAdConfiguration *requestingConfiguration; -@property (nonatomic, strong) MPAdTargeting *targeting; -@property (nonatomic, strong) NSMutableArray *remainingConfigurations; -@property (nonatomic, strong) MPTimer *refreshTimer; -@property (nonatomic, strong) NSURL *mostRecentlyLoadedURL; // ADF-4286: avoid infinite ad reloads -@property (nonatomic, assign) BOOL adActionInProgress; -@property (nonatomic, assign) BOOL automaticallyRefreshesContents; -@property (nonatomic, assign) BOOL hasRequestedAtLeastOneAd; -@property (nonatomic, assign) UIInterfaceOrientation currentOrientation; -@property (nonatomic, strong) MPStopwatch *loadStopwatch; - -- (void)loadAdWithURL:(NSURL *)URL; -- (void)applicationWillEnterForeground; -- (void)scheduleRefreshTimer; -- (void)refreshTimerDidFire; - -@end - -@implementation MPBannerAdManager - -- (id)initWithDelegate:(id)delegate -{ - self = [super init]; - if (self) { - self.delegate = delegate; - - self.communicator = [[MPAdServerCommunicator alloc] initWithDelegate:self]; - - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(applicationWillEnterForeground) - name:UIApplicationWillEnterForegroundNotification - object:[UIApplication sharedApplication]]; - - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(applicationDidEnterBackground) - name:UIApplicationDidEnterBackgroundNotification - object:[UIApplication sharedApplication]]; - - self.automaticallyRefreshesContents = YES; - self.currentOrientation = MPInterfaceOrientation(); - - _loadStopwatch = MPStopwatch.new; - } - return self; -} - -- (void)dealloc -{ - [[NSNotificationCenter defaultCenter] removeObserver:self]; - - [self.communicator cancel]; - [self.communicator setDelegate:nil]; - - [self.refreshTimer invalidate]; - - [self.onscreenAdapter unregisterDelegate]; - - [self.requestingAdapter unregisterDelegate]; - -} - -- (BOOL)loading -{ - return self.communicator.loading || self.requestingAdapter; -} - -- (void)loadAdWithTargeting:(MPAdTargeting *)targeting -{ - MPLogAdEvent(MPLogEvent.adLoadAttempt, self.delegate.adUnitId); - - if (!self.hasRequestedAtLeastOneAd) { - self.hasRequestedAtLeastOneAd = YES; - } - - if (self.loading) { - MPLogEvent([MPLogEvent error:NSError.adAlreadyLoading message:nil]); - return; - } - - self.targeting = targeting; - [self loadAdWithURL:nil]; -} - -- (void)forceRefreshAd -{ - [self loadAdWithURL:nil]; -} - -- (void)applicationWillEnterForeground -{ - if (self.automaticallyRefreshesContents && self.hasRequestedAtLeastOneAd) { - [self loadAdWithURL:nil]; - } -} - -- (void)applicationDidEnterBackground -{ - [self pauseRefreshTimer]; -} - -- (void)pauseRefreshTimer -{ - if ([self.refreshTimer isValid]) { - [self.refreshTimer pause]; - } -} - -- (void)resumeRefreshTimer -{ - if ([self.refreshTimer isValid]) { - [self.refreshTimer resume]; - } -} - -- (void)stopAutomaticallyRefreshingContents -{ - self.automaticallyRefreshesContents = NO; - - [self pauseRefreshTimer]; -} - -- (void)startAutomaticallyRefreshingContents -{ - self.automaticallyRefreshesContents = YES; - - if ([self.refreshTimer isValid]) { - [self.refreshTimer resume]; - } else if (self.refreshTimer) { - [self scheduleRefreshTimer]; - } -} - -- (void)loadAdWithURL:(NSURL *)URL -{ - URL = [URL copy]; //if this is the URL from the requestingConfiguration, it's about to die... - // Cancel the current request/requesting adapter - self.requestingConfiguration = nil; - [self.requestingAdapter unregisterDelegate]; - self.requestingAdapter = nil; - self.requestingAdapterAdContentView = nil; - - [self.communicator cancel]; - - URL = (URL) ? URL : [MPAdServerURLBuilder URLWithAdUnitID:[self.delegate adUnitId] targeting:self.targeting]; - - self.mostRecentlyLoadedURL = URL; - - [self.communicator loadURL:URL]; -} - -- (void)rotateToOrientation:(UIInterfaceOrientation)orientation -{ - self.currentOrientation = orientation; - [self.requestingAdapter rotateToOrientation:orientation]; - [self.onscreenAdapter rotateToOrientation:orientation]; -} - -- (BOOL)isMraidAd -{ - return self.requestingConfiguration.isMraidAd; -} - -#pragma mark - Internal - -- (void)scheduleRefreshTimer -{ - [self.refreshTimer invalidate]; - NSTimeInterval timeInterval = self.requestingConfiguration ? self.requestingConfiguration.refreshInterval : DEFAULT_BANNER_REFRESH_INTERVAL; - - if (self.automaticallyRefreshesContents && timeInterval > 0) { - self.refreshTimer = [MPTimer timerWithTimeInterval:timeInterval - target:self - selector:@selector(refreshTimerDidFire) - repeats:NO]; - [self.refreshTimer scheduleNow]; - MPLogDebug(@"Scheduled the autorefresh timer to fire in %.1f seconds (%p).", timeInterval, self.refreshTimer); - } -} - -- (void)refreshTimerDidFire -{ - if (!self.loading) { - // Instead of reusing the existing `MPAdTargeting` that is potentially outdated, ask the - // delegate to provide the `MPAdTargeting` so that it's the latest. - [self loadAdWithTargeting:self.delegate.adTargeting]; - } -} - -- (void)fetchAdWithConfiguration:(MPAdConfiguration *)configuration { - MPLogInfo(@"Banner ad view is fetching ad type: %@", configuration.adType); - - if (configuration.adUnitWarmingUp) { - MPLogInfo(kMPWarmingUpErrorLogFormatWithAdUnitID, self.delegate.adUnitId); - [self didFailToLoadAdapterWithError:[NSError errorWithCode:MOPUBErrorAdUnitWarmingUp]]; - return; - } - - if ([configuration.adType isEqualToString:kAdTypeClear]) { - MPLogInfo(kMPClearErrorLogFormatWithAdUnitID, self.delegate.adUnitId); - [self didFailToLoadAdapterWithError:[NSError errorWithCode:MOPUBErrorNoInventory]]; - return; - } - - // Notify Ad Server of the ad fetch attempt. This is fire and forget. - [self.communicator sendBeforeLoadUrlWithConfiguration:configuration]; - - // Start the stopwatch for the adapter load. - [self.loadStopwatch start]; - - self.requestingAdapter = [[MPBannerCustomEventAdapter alloc] initWithConfiguration:configuration - delegate:self]; - if (self.requestingAdapter == nil) { - [self adapter:nil didFailToLoadAdWithError:nil]; - return; - } - - [self.requestingAdapter _getAdWithConfiguration:configuration targeting:self.targeting containerSize:self.delegate.containerSize]; -} - -#pragma mark - - -- (void)communicatorDidReceiveAdConfigurations:(NSArray *)configurations -{ - self.remainingConfigurations = [configurations mutableCopy]; - self.requestingConfiguration = [self.remainingConfigurations removeFirst]; - - // There are no configurations to try. Consider this a clear response by the server. - if (self.remainingConfigurations.count == 0 && self.requestingConfiguration == nil) { - MPLogInfo(kMPClearErrorLogFormatWithAdUnitID, self.delegate.adUnitId); - [self didFailToLoadAdapterWithError:[NSError errorWithCode:MOPUBErrorNoInventory]]; - return; - } - - [self fetchAdWithConfiguration:self.requestingConfiguration]; -} - -- (void)communicatorDidFailWithError:(NSError *)error -{ - [self didFailToLoadAdapterWithError:error]; -} - -- (void)didFailToLoadAdapterWithError:(NSError *)error -{ - [self.delegate managerDidFailToLoadAdWithError:error]; - [self scheduleRefreshTimer]; -} - -- (BOOL)isFullscreenAd { - return NO; -} - -- (NSString *)adUnitId { - return [self.delegate adUnitId]; -} - -#pragma mark - - -- (MPAdView *)banner -{ - return [self.delegate banner]; -} - -- (id)bannerDelegate -{ - return [self.delegate bannerDelegate]; -} - -- (UIViewController *)viewControllerForPresentingModalView -{ - return [self.delegate viewControllerForPresentingModalView]; -} - -- (MPNativeAdOrientation)allowedNativeAdsOrientation -{ - return [self.delegate allowedNativeAdsOrientation]; -} - -- (CLLocation *)location -{ - return nil; -} - -- (BOOL)requestingAdapterIsReadyToBePresented -{ - return !!self.requestingAdapterAdContentView; -} - -- (void)presentRequestingAdapter -{ - if (!self.adActionInProgress && self.requestingAdapterIsReadyToBePresented) { - [self.onscreenAdapter unregisterDelegate]; - self.onscreenAdapter = self.requestingAdapter; - self.requestingAdapter = nil; - - [self.onscreenAdapter rotateToOrientation:self.currentOrientation]; - [self.delegate managerDidLoadAd:self.requestingAdapterAdContentView]; - [self.onscreenAdapter didDisplayAd]; - - self.requestingAdapterAdContentView = nil; - } -} - -- (void)adapter:(MPBaseBannerAdapter *)adapter didFinishLoadingAd:(UIView *)ad -{ - if (self.requestingAdapter == adapter) { - self.remainingConfigurations = nil; - self.requestingAdapterAdContentView = ad; - - // Record the end of the adapter load and send off the fire and forget after-load-url tracker. - NSTimeInterval duration = [self.loadStopwatch stop]; - [self.communicator sendAfterLoadUrlWithConfiguration:self.requestingConfiguration adapterLoadDuration:duration adapterLoadResult:MPAfterLoadResultAdLoaded]; - - MPLogAdEvent(MPLogEvent.adDidLoad, self.delegate.banner.adUnitId); - [self presentRequestingAdapter]; - } -} - -- (void)adapter:(MPBaseBannerAdapter *)adapter didFailToLoadAdWithError:(NSError *)error -{ - // Record the end of the adapter load and send off the fire and forget after-load-url tracker - // with the appropriate error code result. - NSTimeInterval duration = [self.loadStopwatch stop]; - MPAfterLoadResult result = (error.isAdRequestTimedOutError ? MPAfterLoadResultTimeout : (adapter == nil ? MPAfterLoadResultMissingAdapter : MPAfterLoadResultError)); - [self.communicator sendAfterLoadUrlWithConfiguration:self.requestingConfiguration adapterLoadDuration:duration adapterLoadResult:result]; - - if (self.requestingAdapter == adapter) { - // There are more ad configurations to try. - if (self.remainingConfigurations.count > 0) { - self.requestingConfiguration = [self.remainingConfigurations removeFirst]; - [self fetchAdWithConfiguration:self.requestingConfiguration]; - } - // No more configurations to try. Send new request to Ads server to get more Ads. - else if (self.requestingConfiguration.nextURL != nil - && [self.requestingConfiguration.nextURL isEqual:self.mostRecentlyLoadedURL] == false) { - [self loadAdWithURL:self.requestingConfiguration.nextURL]; - } - // No more configurations to try and no more pages to load. - else { - NSError * clearResponseError = [NSError errorWithCode:MOPUBErrorNoInventory localizedDescription:[NSString stringWithFormat:kMPClearErrorLogFormatWithAdUnitID, self.delegate.banner.adUnitId]]; - MPLogAdEvent([MPLogEvent adFailedToLoadWithError:clearResponseError], self.delegate.banner.adUnitId); - [self didFailToLoadAdapterWithError:clearResponseError]; - } - } - - if (self.onscreenAdapter == adapter && adapter != nil) { - // the onscreen adapter has failed. we need to: - // 1) remove it - // 2) and note that there can't possibly be a modal on display any more - [self.delegate invalidateContentView]; - [self.onscreenAdapter unregisterDelegate]; - self.onscreenAdapter = nil; - if (self.adActionInProgress) { - [self.delegate userActionDidFinish]; - self.adActionInProgress = NO; - } - if (self.requestingAdapterIsReadyToBePresented) { - [self presentRequestingAdapter]; - } else { - [self loadAdWithTargeting:self.targeting]; - } - } -} - -- (void)adapterDidTrackImpressionForAd:(MPBaseBannerAdapter *)adapter { - if (self.onscreenAdapter == adapter) { - [self scheduleRefreshTimer]; - } - - [self.delegate impressionDidFireWithImpressionData:self.requestingConfiguration.impressionData]; -} - -- (void)userActionWillBeginForAdapter:(MPBaseBannerAdapter *)adapter -{ - if (self.onscreenAdapter == adapter) { - self.adActionInProgress = YES; - - MPLogAdEvent(MPLogEvent.adTapped, self.delegate.banner.adUnitId); - MPLogAdEvent(MPLogEvent.adWillPresentModal, self.delegate.banner.adUnitId); - [self.delegate userActionWillBegin]; - } -} - -- (void)userActionDidFinishForAdapter:(MPBaseBannerAdapter *)adapter -{ - if (self.onscreenAdapter == adapter) { - MPLogAdEvent(MPLogEvent.adDidDismissModal, self.delegate.banner.adUnitId); - [self.delegate userActionDidFinish]; - - self.adActionInProgress = NO; - [self presentRequestingAdapter]; - } -} - -- (void)userWillLeaveApplicationFromAdapter:(MPBaseBannerAdapter *)adapter -{ - if (self.onscreenAdapter == adapter) { - MPLogAdEvent(MPLogEvent.adTapped, self.delegate.banner.adUnitId); - MPLogAdEvent(MPLogEvent.adWillLeaveApplication, self.delegate.banner.adUnitId); - [self.delegate userWillLeaveApplication]; - } -} - -- (void)adWillExpandForAdapter:(MPBaseBannerAdapter *)adapter -{ - // While the banner ad is in an expanded state, the refresh timer should be paused - // since the user is interacting with the ad experience. - [self pauseRefreshTimer]; -} - -- (void)adDidCollapseForAdapter:(MPBaseBannerAdapter *)adapter -{ - // Once the banner ad is collapsed back into its default state, the refresh timer - // should be resumed to queue up the next ad. - [self resumeRefreshTimer]; -} - -@end - - diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerAdManagerDelegate.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerAdManagerDelegate.h deleted file mode 100644 index 23d2df482e..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerAdManagerDelegate.h +++ /dev/null @@ -1,39 +0,0 @@ -// -// MPBannerAdManagerDelegate.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@class MPAdView; -@class MPAdTargeting; - -@protocol MPAdViewDelegate; - -@protocol MPBannerAdManagerDelegate - -- (NSString *)adUnitId; -- (MPNativeAdOrientation)allowedNativeAdsOrientation; -- (MPAdView *)banner; -- (id)bannerDelegate; -- (CGSize)containerSize; -- (UIViewController *)viewControllerForPresentingModalView; - -/** - * The latest ad targeting information for ad refresh and other scenarios. - */ -- (MPAdTargeting *)adTargeting; - -- (void)invalidateContentView; - -- (void)managerDidLoadAd:(UIView *)ad; -- (void)managerDidFailToLoadAdWithError:(NSError *)error; -- (void)userActionWillBegin; -- (void)userActionDidFinish; -- (void)userWillLeaveApplication; -- (void)impressionDidFireWithImpressionData:(MPImpressionData *)impressionData; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerCustomEvent+Internal.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerCustomEvent+Internal.h deleted file mode 100644 index 34c3c9dea3..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerCustomEvent+Internal.h +++ /dev/null @@ -1,27 +0,0 @@ -// -// MPBannerCustomEvent+Internal.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPBannerCustomEvent.h" - -@interface MPBannerCustomEvent (Internal) - -/** - * Track impressions for trackers that are included in the creative's markup. - * Extended class implements this method if necessary. - * Currently, only HTML and MRAID banners use trackers included in markup. - * Mediated networks track impressions via their own means. - */ -- (void)trackImpressionsIncludedInMarkup; - -/** - * Start viewability tracker. The default implementation of this method does nothing. - * Subclasses can override this method if necessary. - */ -- (void)startViewabilityTracker; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerCustomEvent+Internal.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerCustomEvent+Internal.m deleted file mode 100644 index 75583414d3..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerCustomEvent+Internal.m +++ /dev/null @@ -1,23 +0,0 @@ -// -// MPBannerCustomEvent+Internal.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPBannerCustomEvent+Internal.h" - -@implementation MPBannerCustomEvent (Internal) - -- (void)trackImpressionsIncludedInMarkup -{ - // no-op. -} - -- (void)startViewabilityTracker -{ - // no-op -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerCustomEventAdapter.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerCustomEventAdapter.h deleted file mode 100644 index 9941819f3c..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerCustomEventAdapter.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// MPBannerCustomEventAdapter.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPBaseBannerAdapter.h" - -#import "MPPrivateBannerCustomEventDelegate.h" - -@class MPBannerCustomEvent; - -@interface MPBannerCustomEventAdapter : MPBaseBannerAdapter - -- (instancetype)initWithConfiguration:(MPAdConfiguration *)configuration delegate:(id)delegate; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerCustomEventAdapter.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerCustomEventAdapter.m deleted file mode 100644 index 1305507fd7..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerCustomEventAdapter.m +++ /dev/null @@ -1,207 +0,0 @@ -// -// MPBannerCustomEventAdapter.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPBannerCustomEventAdapter.h" - -#import "MPAdConfiguration.h" -#import "MPAdTargeting.h" -#import "MPBannerCustomEvent.h" -#import "MPCoreInstanceProvider.h" -#import "MPError.h" -#import "MPLogging.h" -#import "MPAdImpressionTimer.h" -#import "MPBannerCustomEvent+Internal.h" - -static CGFloat const kDefaultRequiredPixelsInViewForImpression = 1.0; -static NSTimeInterval const kDefaultRequiredSecondsInViewForImpression = 0.0; - -@interface MPBannerCustomEventAdapter () - -@property (nonatomic, strong) MPBannerCustomEvent *bannerCustomEvent; -@property (nonatomic, strong) MPAdConfiguration *configuration; -@property (nonatomic, assign) BOOL hasTrackedImpression; -@property (nonatomic, assign) BOOL hasTrackedClick; -@property (nonatomic) MPAdImpressionTimer *impressionTimer; -@property (nonatomic) UIView *adView; - -@end - -@implementation MPBannerCustomEventAdapter - -- (instancetype)initWithConfiguration:(MPAdConfiguration *)configuration delegate:(id)delegate -{ - if (!configuration.customEventClass) { - return nil; - } - return [self initWithDelegate:delegate]; -} - -- (void)unregisterDelegate -{ - if ([self.bannerCustomEvent respondsToSelector:@selector(invalidate)]) { - // Secret API to allow us to detach the custom event from (shared instance) routers synchronously - [self.bannerCustomEvent performSelector:@selector(invalidate)]; - } - self.bannerCustomEvent.delegate = nil; - - // make sure the custom event isn't released synchronously as objects owned by the custom event - // may do additional work after a callback that results in unregisterDelegate being called - [[MPCoreInstanceProvider sharedProvider] keepObjectAliveForCurrentRunLoopIteration:_bannerCustomEvent]; - - [super unregisterDelegate]; -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -- (void)getAdWithConfiguration:(MPAdConfiguration *)configuration targeting:(MPAdTargeting *)targeting containerSize:(CGSize)size -{ - MPLogInfo(@"Looking for custom event class named %@.", configuration.customEventClass); - self.configuration = configuration; - - MPBannerCustomEvent *customEvent = [[configuration.customEventClass alloc] init]; - if (![customEvent isKindOfClass:[MPBannerCustomEvent class]]) { - NSError * error = [NSError customEventClass:configuration.customEventClass doesNotInheritFrom:MPBannerCustomEvent.class]; - MPLogEvent([MPLogEvent error:error message:nil]); - [self.delegate adapter:self didFailToLoadAdWithError:error]; - return; - } - - - self.bannerCustomEvent = customEvent; - self.bannerCustomEvent.delegate = self; - self.bannerCustomEvent.localExtras = targeting.localExtras; - - [self.bannerCustomEvent requestAdWithSize:size customEventInfo:configuration.customEventClassData adMarkup:configuration.advancedBidPayload]; -} - -- (void)rotateToOrientation:(UIInterfaceOrientation)newOrientation -{ - [self.bannerCustomEvent rotateToOrientation:newOrientation]; -} - -- (void)didDisplayAd -{ - if ([self.bannerCustomEvent enableAutomaticImpressionAndClickTracking]) { - [self startViewableTrackingTimer]; - } - - [self.bannerCustomEvent didDisplayAd]; -} - -#pragma mark - 1px impression tracking methods - -- (void)startViewableTrackingTimer -{ - // Use defaults if server did not send values - NSTimeInterval minimumSecondsForImpression = self.configuration.impressionMinVisibleTimeInSec >= 0 ? self.configuration.impressionMinVisibleTimeInSec : kDefaultRequiredSecondsInViewForImpression; - CGFloat minimumPixelsForImpression = self.configuration.impressionMinVisiblePixels >= 0 ? self.configuration.impressionMinVisiblePixels : kDefaultRequiredPixelsInViewForImpression; - - self.impressionTimer = [[MPAdImpressionTimer alloc] initWithRequiredSecondsForImpression:minimumSecondsForImpression - requiredViewVisibilityPixels:minimumPixelsForImpression]; - self.impressionTimer.delegate = self; - [self.impressionTimer startTrackingView:self.adView]; -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -#pragma mark - MPPrivateBannerCustomEventDelegate - -- (NSString *)adUnitId -{ - return [self.delegate banner].adUnitId; -} - -- (UIViewController *)viewControllerForPresentingModalView -{ - return [self.delegate viewControllerForPresentingModalView]; -} - -- (id)bannerDelegate -{ - return [self.delegate bannerDelegate]; -} - -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wdeprecated-implementations" -- (CLLocation *)location -{ - return [self.delegate location]; -} -#pragma GCC diagnostic pop - -- (void)bannerCustomEvent:(MPBannerCustomEvent *)event didLoadAd:(UIView *)ad -{ - [self didStopLoading]; - if (ad) { - self.adView = ad; - [self.delegate adapter:self didFinishLoadingAd:ad]; - } else { - [self.delegate adapter:self didFailToLoadAdWithError:nil]; - } -} - -- (void)bannerCustomEvent:(MPBannerCustomEvent *)event didFailToLoadAdWithError:(NSError *)error -{ - [self didStopLoading]; - [self.delegate adapter:self didFailToLoadAdWithError:error]; -} - -- (void)bannerCustomEventWillBeginAction:(MPBannerCustomEvent *)event -{ - [self.delegate userActionWillBeginForAdapter:self]; -} - -- (void)bannerCustomEventDidFinishAction:(MPBannerCustomEvent *)event -{ - [self.delegate userActionDidFinishForAdapter:self]; -} - -- (void)bannerCustomEventWillLeaveApplication:(MPBannerCustomEvent *)event -{ - [self.delegate userWillLeaveApplicationFromAdapter:self]; -} - -- (void)trackClick -{ - // unlike `[super trackClick]`, this `trackClick` ensures the click is tracked only once - if ([self.bannerCustomEvent enableAutomaticImpressionAndClickTracking] && !self.hasTrackedClick) { - self.hasTrackedClick = YES; - [super trackClick]; - } -} - -- (void)bannerCustomEventWillExpandAd:(MPBannerCustomEvent *)event -{ - [self.delegate adWillExpandForAdapter:self]; -} - -- (void)bannerCustomEventDidCollapseAd:(MPBannerCustomEvent *)event -{ - [self.delegate adDidCollapseForAdapter:self]; -} - -- (void)trackImpression { - [super trackImpression]; - - // Notify delegate that an impression tracker was fired - [self.delegate adapterDidTrackImpressionForAd:self]; -} - -#pragma mark - MPAdImpressionTimerDelegate - -- (void)adViewWillLogImpression:(UIView *)adView -{ - // Track impression for all impression trackers known by the SDK - [self trackImpression]; - // Track impression for all impression trackers included in the markup - [self.bannerCustomEvent trackImpressionsIncludedInMarkup]; - // Start viewability tracking - [self.bannerCustomEvent startViewabilityTracker]; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBaseBannerAdapter.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBaseBannerAdapter.h deleted file mode 100644 index 3bd404b9a9..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBaseBannerAdapter.h +++ /dev/null @@ -1,92 +0,0 @@ -// -// MPBaseBannerAdapter.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import -#import "MPAdView.h" - -@protocol MPBannerAdapterDelegate; -@class MPAdConfiguration; -@class MPAdTargeting; - -@interface MPBaseBannerAdapter : NSObject - -@property (nonatomic, weak) id delegate; -@property (nonatomic, copy) NSURL *impressionTrackingURL; -@property (nonatomic, copy) NSURL *clickTrackingURL; - -- (instancetype)initWithDelegate:(id)delegate; - -/* - * Sets the adapter's delegate to nil. - */ -- (void)unregisterDelegate; - -/* - * -_getAdWithConfiguration creates a strong reference to self before calling - * -getAdWithConfiguration to prevent the adapter from being prematurely deallocated. - */ -- (void)getAdWithConfiguration:(MPAdConfiguration *)configuration targeting:(MPAdTargeting *)targeting containerSize:(CGSize)size; -- (void)_getAdWithConfiguration:(MPAdConfiguration *)configuration targeting:(MPAdTargeting *)targeting containerSize:(CGSize)size; - -- (void)didStopLoading; -- (void)didDisplayAd; - -/* - * Your subclass should implement this method if your native ads vary depending on orientation. - */ -- (void)rotateToOrientation:(UIInterfaceOrientation)newOrientation; - -- (void)trackImpression; - -- (void)trackClick; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@protocol MPBannerAdapterDelegate - -@required - -- (MPAdView *)banner; -- (id)bannerDelegate; -- (UIViewController *)viewControllerForPresentingModalView; -- (MPNativeAdOrientation)allowedNativeAdsOrientation; -- (CLLocation *)location; - -/* - * These callbacks notify you that the adapter (un)successfully loaded an ad. - */ -- (void)adapter:(MPBaseBannerAdapter *)adapter didFailToLoadAdWithError:(NSError *)error; -- (void)adapter:(MPBaseBannerAdapter *)adapter didFinishLoadingAd:(UIView *)ad; - -/* - * These callbacks notify you that the user interacted (or stopped interacting) with the native ad. - */ -- (void)userActionWillBeginForAdapter:(MPBaseBannerAdapter *)adapter; -- (void)userActionDidFinishForAdapter:(MPBaseBannerAdapter *)adapter; - -/* - * This callback notifies you that user has tapped on an ad which will cause them to leave the - * current application (e.g. the ad action opens the iTunes store, Mobile Safari, etc). - */ -- (void)userWillLeaveApplicationFromAdapter:(MPBaseBannerAdapter *)adapter; - -/** - * Fires when the impression tracker has been sent. - */ -- (void)adapterDidTrackImpressionForAd:(MPBaseBannerAdapter *)adapter; - -/** - * Fires when the banner ad is expanding/resizing and collapsing. - */ -- (void)adWillExpandForAdapter:(MPBaseBannerAdapter *)adapter; -- (void)adDidCollapseForAdapter:(MPBaseBannerAdapter *)adapter; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBaseBannerAdapter.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBaseBannerAdapter.m deleted file mode 100644 index b3cd3dbbfc..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBaseBannerAdapter.m +++ /dev/null @@ -1,117 +0,0 @@ -// -// MPBaseBannerAdapter.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPBaseBannerAdapter.h" -#import "MPConstants.h" - -#import "MPAdConfiguration.h" -#import "MPLogging.h" -#import "MPCoreInstanceProvider.h" -#import "MPAnalyticsTracker.h" -#import "MPTimer.h" -#import "MPError.h" - -@interface MPBaseBannerAdapter () - -@property (nonatomic, strong) MPAdConfiguration *configuration; -@property (nonatomic, strong) MPTimer *timeoutTimer; - -- (void)startTimeoutTimer; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MPBaseBannerAdapter - -- (instancetype)initWithDelegate:(id)delegate -{ - if (self = [super init]) { - self.delegate = delegate; - } - return self; -} - -- (void)dealloc -{ - [self unregisterDelegate]; - [self.timeoutTimer invalidate]; -} - -- (void)unregisterDelegate -{ - self.delegate = nil; -} - -#pragma mark - Requesting Ads - -- (void)getAdWithConfiguration:(MPAdConfiguration *)configuration targeting:(MPAdTargeting *)targeting containerSize:(CGSize)size -{ - // To be implemented by subclasses. - [self doesNotRecognizeSelector:_cmd]; -} - -- (void)_getAdWithConfiguration:(MPAdConfiguration *)configuration targeting:(MPAdTargeting *)targeting containerSize:(CGSize)size -{ - self.configuration = configuration; - - [self startTimeoutTimer]; - [self getAdWithConfiguration:configuration targeting:targeting containerSize:size]; -} - -- (void)didStopLoading -{ - [self.timeoutTimer invalidate]; -} - -- (void)didDisplayAd -{ - [self trackImpression]; -} - -- (void)startTimeoutTimer -{ - NSTimeInterval timeInterval = (self.configuration && self.configuration.adTimeoutInterval >= 0) ? - self.configuration.adTimeoutInterval : BANNER_TIMEOUT_INTERVAL; - - if (timeInterval > 0) { - self.timeoutTimer = [MPTimer timerWithTimeInterval:timeInterval - target:self - selector:@selector(timeout) - repeats:NO]; - [self.timeoutTimer scheduleNow]; - } -} - -- (void)timeout -{ - NSError * error = [NSError errorWithCode:MOPUBErrorAdRequestTimedOut - localizedDescription:@"Banner ad request timed out"]; - [self.delegate adapter:self didFailToLoadAdWithError:error]; -} - -#pragma mark - Rotation - -- (void)rotateToOrientation:(UIInterfaceOrientation)newOrientation -{ - // Do nothing by default. Subclasses can override. -} - -#pragma mark - Metrics - -- (void)trackImpression -{ - [[MPAnalyticsTracker sharedTracker] trackImpressionForConfiguration:self.configuration]; -} - -- (void)trackClick -{ - [[MPAnalyticsTracker sharedTracker] trackClickForConfiguration:self.configuration]; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPPrivateBannerCustomEventDelegate.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPPrivateBannerCustomEventDelegate.h deleted file mode 100644 index 0607d342dd..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPPrivateBannerCustomEventDelegate.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// MPPrivateBannerCustomEventDelegate.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPBannerCustomEventDelegate.h" - -@class MPAdConfiguration; - -@protocol MPPrivateBannerCustomEventDelegate - -- (NSString *)adUnitId; -- (MPAdConfiguration *)configuration; -- (id)bannerDelegate; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAPIEndpoints.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAPIEndpoints.h deleted file mode 100644 index d65dfd2628..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAPIEndpoints.h +++ /dev/null @@ -1,25 +0,0 @@ -// -// MPAPIEndpoints.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -#define MOPUB_API_PATH_AD_REQUEST @"/m/ad" -#define MOPUB_API_PATH_NATIVE_POSITIONING @"/m/pos" -#define MOPUB_API_PATH_OPEN @"/m/open" -#define MOPUB_API_PATH_CONSENT_DIALOG @"/m/gdpr_consent_dialog" -#define MOPUB_API_PATH_CONSENT_SYNC @"/m/gdpr_sync" - -@interface MPAPIEndpoints : NSObject - -@property (nonatomic, copy, class) NSString * baseHostname; -@property (nonatomic, copy, readonly, class) NSString * baseURL; - -+ (void)setUsesHTTPS:(BOOL)usesHTTPS; -+ (NSURLComponents *)baseURLComponentsWithPath:(NSString *)path; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAPIEndpoints.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAPIEndpoints.m deleted file mode 100644 index e09954ab1e..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAPIEndpoints.m +++ /dev/null @@ -1,66 +0,0 @@ -// -// MPAPIEndpoints.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPAPIEndpoints.h" -#import "MPConstants.h" -#import "MPDeviceInformation.h" - -// URL scheme constants -static NSString * const kUrlSchemeHttp = @"http"; -static NSString * const kUrlSchemeHttps = @"https"; - -// Base URL constant -static NSString * const kMoPubBaseHostname = @"ads.mopub.com"; - -@implementation MPAPIEndpoints - -#pragma mark - baseHostname property - -static NSString * _baseHostname = nil; -+ (void)setBaseHostname:(NSString *)baseHostname { - _baseHostname = baseHostname; -} - -+ (NSString *)baseHostname { - if (_baseHostname == nil || [_baseHostname isEqualToString:@""]) { - return kMoPubBaseHostname; - } - - return _baseHostname; -} - -#pragma mark - setUsesHTTPS - -static BOOL sUsesHTTPS = YES; -+ (void)setUsesHTTPS:(BOOL)usesHTTPS -{ - sUsesHTTPS = usesHTTPS; -} - -#pragma mark - baseURL - -+ (NSString *)baseURL -{ - if (MPDeviceInformation.appTransportSecuritySettings == MPATSSettingEnabled) { - return [@"https://" stringByAppendingString:self.baseHostname]; - } - - return [@"http://" stringByAppendingString:self.baseHostname]; -} - -+ (NSURLComponents *)baseURLComponentsWithPath:(NSString *)path -{ - NSURLComponents * components = [[NSURLComponents alloc] init]; - components.scheme = (sUsesHTTPS ? kUrlSchemeHttps : kUrlSchemeHttp); - components.host = self.baseHostname; - components.path = path; - - return components; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPActivityViewControllerHelper+TweetShare.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPActivityViewControllerHelper+TweetShare.h deleted file mode 100644 index f099756963..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPActivityViewControllerHelper+TweetShare.h +++ /dev/null @@ -1,32 +0,0 @@ -// -// MPActivityViewControllerHelper+TweetShare.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPActivityViewControllerHelper.h" - -/** - * `TweetShare` category added to MPActivityViewController to add functionality - * for sharing a tweet. - */ - -@interface MPActivityViewControllerHelper (TweetShare) - -/** - * Present the UIActivityViewController as specified by the - * provided URL. - * - * @param URL Instance of NSURL to be used for generating - * the share sheet. Should be of the format: - * mopubshare://tweet?screen_name=&tweet_id= - * - * @return a BOOL indicating whether or not the tweet share url was successfully shown - */ - -- (BOOL)presentActivityViewControllerWithTweetShareURL:(NSURL *)URL; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPActivityViewControllerHelper+TweetShare.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPActivityViewControllerHelper+TweetShare.m deleted file mode 100644 index 3bcd4ff229..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPActivityViewControllerHelper+TweetShare.m +++ /dev/null @@ -1,72 +0,0 @@ -// -// MPActivityViewControllerHelper+TweetShare.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPActivityViewControllerHelper+TweetShare.h" -#import "MPLogging.h" -#import "NSURL+MPAdditions.h" - -static NSString * const kShareTweetScreenName = @"screen_name"; -static NSString * const kShareTweetId = @"tweet_id"; -static NSString * const kShareTweetURLTemplate = @"https://twitter.com/%@/status/%@"; -static NSString * const kShareTweetMessageTemplate = @"Check out @%@'s Tweet: %@"; - -/** - * MPSharedTweet parses an NSURL and stores the specified screenName and tweetURL. - */ - -@interface MPSharedTweet : NSObject - -@property (nonatomic, readonly) NSString *screenName; -@property (nonatomic, readonly) NSString *tweetURL; - -- (instancetype)initWithShareURL:(NSURL *)URL; - -@end - -@implementation MPSharedTweet - -- (instancetype)initWithShareURL:(NSURL *)URL -{ - self = [super init]; - if (self) { - NSDictionary *queryParamDict = [URL mp_queryAsDictionary]; - id screenName = [queryParamDict objectForKey:kShareTweetScreenName]; - id tweetId = [queryParamDict objectForKey:kShareTweetId]; - - // Fail initialization if the provided URL is not of the correct format. - // Both parameters are required. - if (screenName && tweetId) { - _screenName = screenName; - _tweetURL = [NSString stringWithFormat:kShareTweetURLTemplate, screenName, tweetId]; - } else { - MPLogDebug(@"MPActivityViewControllerHelper+TweetShare - \ - unable to initWithShareURL for share URL: %@. \ - screen_name or tweet_id missing or of the wrong \ - format", [URL absoluteString]); - return nil; - } - } - return self; -} - -@end - -@implementation MPActivityViewControllerHelper (TweetShare) - -- (BOOL)presentActivityViewControllerWithTweetShareURL:(NSURL *)URL -{ - MPSharedTweet *sharedTweet = [[MPSharedTweet alloc] initWithShareURL:URL]; - if (sharedTweet) { - NSString *tweetMessage = [NSString stringWithFormat:kShareTweetMessageTemplate, - sharedTweet.screenName, sharedTweet.tweetURL]; - return [self presentActivityViewControllerWithSubject:tweetMessage body:tweetMessage]; - } - return NO; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPActivityViewControllerHelper.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPActivityViewControllerHelper.h deleted file mode 100644 index 2ea384e018..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPActivityViewControllerHelper.h +++ /dev/null @@ -1,81 +0,0 @@ -// -// MPActivityViewControllerHelper.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@protocol MPActivityViewControllerHelperDelegate; - -/** - * The MPActivityViewControllerHelper provides a wrapper around a UIActvityViewController - * and provides hooks via the MPActivityViewControllerHelperDelegate to handle the - * lifecycle of the underlying UIActivityViewController. - */ - -@interface MPActivityViewControllerHelper : NSObject - -/** - * The delegate (`MPActivityViewControllerHelperDelegate`) of the - * MPActivityViewControllerHelper. - */ - -@property (nonatomic, weak) id delegate; - -/** - * Initializes the MPActivityViewControllerHelper and stores a weak reference - * to the supplied delegate. - * - * @param delegate Optional callback delegate - */ -- (instancetype)initWithDelegate:(id)delegate; - -/** - * Instantiates and displays the underlying UIActivityViewController with the - * the specified `subject` and `body`. - * - * @param subject The subject to be displayed in the UIActivityViewController. - * @param body The body to be displayed in the UIActivityViewController. - * - * @return a BOOL indicating whether or not the UIActivityViewController was successfully shown. - */ -- (BOOL)presentActivityViewControllerWithSubject:(NSString *)subject body:(NSString *)body; - -@end - - -/** - * The delegate of a `MPActivityViewController` must adopt the `MPActivityViewController` - * protocol. It must implement `viewControllerForPresentingActivityViewController` to - * provide a root view controller from which to display content. - * - * Optional methods of this protocol allow the delegate to be notified before - * presenting and after dismissal. - */ -@protocol MPActivityViewControllerHelperDelegate - -@required - -/** - * Asks the delegate for a view controller to use for presenting content. - * - * @return A view controller that should be used for presenting content. - */ -- (UIViewController *)viewControllerForPresentingActivityViewController; - -@optional - -/** - * Sent before the UIActivityViewController is presented. - */ -- (void)activityViewControllerWillPresent; - -/** - * Sent after the UIActivityViewController has been dismissed. - */ -- (void)activityViewControllerDidDismiss; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPActivityViewControllerHelper.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPActivityViewControllerHelper.m deleted file mode 100644 index 45a2339da2..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPActivityViewControllerHelper.m +++ /dev/null @@ -1,113 +0,0 @@ -// -// MPActivityViewControllerHelper.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPActivityViewControllerHelper.h" - -/** - * MPActivityItemProviderWithSubject subclasses UIActivityItemProvider - * to provide a subject for email activity types. - */ - -@interface MPActivityItemProviderWithSubject : UIActivityItemProvider - -@property (nonatomic, readonly) NSString *subject; -@property (nonatomic, readonly) NSString *body; - -- (instancetype)initWithSubject:(NSString *)subject body:(NSString *)body; - -@end - -@implementation MPActivityItemProviderWithSubject - -- (instancetype)initWithSubject:(NSString *)subject body:(NSString *)body -{ - self = [super initWithPlaceholderItem:body]; - if (self) { - _subject = [subject copy]; - _body = [body copy]; - } - return self; -} - -- (id)item -{ - return self.body; -} - -- (NSString *)activityViewController:(UIActivityViewController *)activityViewController subjectForActivityType:(NSString *)activityType -{ - return self.subject; -} - -@end - -@interface MPActivityViewControllerHelper() - -- (UIActivityViewController *)initializeActivityViewControllerWithSubject:(NSString *)subject body:(NSString *)body; - -@end - -@implementation MPActivityViewControllerHelper - -- (instancetype)initWithDelegate:(id)delegate -{ - self = [super init]; - if (self) { - _delegate = delegate; - } - return self; -} - -- (UIActivityViewController *)initializeActivityViewControllerWithSubject:(NSString *)subject body:(NSString *)body -{ - if (NSClassFromString(@"UIActivityViewController") && NSClassFromString(@"UIActivityItemProvider")) { - MPActivityItemProviderWithSubject *activityItemProvider = - [[MPActivityItemProviderWithSubject alloc] initWithSubject:subject body:body]; - UIActivityViewController *activityViewController = - [[UIActivityViewController alloc] initWithActivityItems:@[activityItemProvider] applicationActivities:nil]; - activityViewController.completionWithItemsHandler = ^(UIActivityType _Nullable activityType, BOOL completed, NSArray * _Nullable returnedItems, NSError * _Nullable activityError) { - if ([self.delegate respondsToSelector:@selector(activityViewControllerDidDismiss)]) { - [self.delegate activityViewControllerDidDismiss]; - } - }; - return activityViewController; - } else { - return nil; - } -} - -- (BOOL)presentActivityViewControllerWithSubject:(NSString *)subject body:(NSString *)body -{ - if (NSClassFromString(@"UIActivityViewController")) { - UIActivityViewController *activityViewController = [self initializeActivityViewControllerWithSubject:subject body:body]; - if (activityViewController) { - if ([self.delegate respondsToSelector:@selector(activityViewControllerWillPresent)]) { - [self.delegate activityViewControllerWillPresent]; - } - - UIUserInterfaceIdiom userInterfaceIdiom = UIDevice.currentDevice.userInterfaceIdiom; - // iPad must present as popover on iOS >= 8 - if (userInterfaceIdiom == UIUserInterfaceIdiomPad) { - if ([activityViewController respondsToSelector:@selector(popoverPresentationController)]) { - activityViewController.popoverPresentationController.sourceView = - [self.delegate viewControllerForPresentingActivityViewController].view; - } - } - - UIViewController *viewController = [self.delegate viewControllerForPresentingActivityViewController]; - [viewController presentViewController:activityViewController - animated:YES - completion:nil]; - return YES; - } - } - - return NO; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdConfiguration.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdConfiguration.h deleted file mode 100644 index ba135bf289..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdConfiguration.h +++ /dev/null @@ -1,148 +0,0 @@ -// -// MPAdConfiguration.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPGlobal.h" -#import "MPImpressionData.h" -#import "MPVideoEvent.h" - -@class MPRewardedVideoReward; -@class MPVASTTrackingEvent; - -typedef NS_ENUM(NSUInteger, MPAfterLoadResult) { - MPAfterLoadResultMissingAdapter, - MPAfterLoadResultAdLoaded, - MPAfterLoadResultError, - MPAfterLoadResultTimeout -}; - -extern NSString * const kAdTypeMetadataKey; -extern NSString * const kAdUnitWarmingUpMetadataKey; -extern NSString * const kClickthroughMetadataKey; -extern NSString * const kCreativeIdMetadataKey; -extern NSString * const kCustomEventClassNameMetadataKey; -extern NSString * const kCustomEventClassDataMetadataKey; -extern NSString * const kNextUrlMetadataKey; -extern NSString * const kFormatMetadataKey; -extern NSString * const kBeforeLoadUrlMetadataKey; -extern NSString * const kAfterLoadUrlMetadataKey; -extern NSString * const kAfterLoadSuccessUrlMetadataKey; -extern NSString * const kAfterLoadFailureUrlMetadataKey; -extern NSString * const kHeightMetadataKey; -extern NSString * const kImpressionTrackerMetadataKey; -extern NSString * const kImpressionTrackersMetadataKey; -extern NSString * const kNativeSDKParametersMetadataKey; -extern NSString * const kNetworkTypeMetadataKey; -extern NSString * const kRefreshTimeMetadataKey; -extern NSString * const kAdTimeoutMetadataKey; -extern NSString * const kWidthMetadataKey; -extern NSString * const kDspCreativeIdKey; -extern NSString * const kPrecacheRequiredKey; -extern NSString * const kIsVastVideoPlayerKey; -extern NSString * const kRewardedVideoCurrencyNameMetadataKey; -extern NSString * const kRewardedVideoCurrencyAmountMetadataKey; -extern NSString * const kRewardedVideoCompletionUrlMetadataKey; -extern NSString * const kRewardedCurrenciesMetadataKey; -extern NSString * const kRewardedPlayableDurationMetadataKey; -extern NSString * const kRewardedPlayableRewardOnClickMetadataKey; -extern NSString * const kImpressionDataMetadataKey; -extern NSString * const kVASTVideoTrackersMetadataKey; - -extern NSString * const kFullAdTypeMetadataKey; -extern NSString * const kOrientationTypeMetadataKey; - -extern NSString * const kAdTypeHtml; -extern NSString * const kAdTypeInterstitial; -extern NSString * const kAdTypeMraid; -extern NSString * const kAdTypeClear; -extern NSString * const kAdTypeNative; -extern NSString * const kAdTypeNativeVideo; -extern NSString * const kAdTypeRewardedVideo; -extern NSString * const kAdTypeRewardedPlayable; - -extern NSString * const kClickthroughExperimentBrowserAgent; - -extern NSString * const kViewabilityDisableMetadataKey; - -extern NSString * const kBannerImpressionVisableMsMetadataKey; -extern NSString * const kBannerImpressionMinPixelMetadataKey; - -@interface MPAdConfiguration : NSObject - -@property (nonatomic, readonly) BOOL isFullscreenAd; -@property (nonatomic, assign) BOOL adUnitWarmingUp; -@property (nonatomic, readonly) BOOL isMraidAd; -@property (nonatomic, copy) NSString *adType; // the value is a `kAdType` constant from "x-adtype" -// If this flag is YES, it implies that we've reached the end of the waterfall for the request -// and there is no need to hit ad server again. -@property (nonatomic) BOOL isEndOfWaterfall; -@property (nonatomic, assign) CGSize preferredSize; -@property (nonatomic, strong) NSURL *clickTrackingURL; -@property (nonatomic, strong) NSArray * impressionTrackingURLs; -@property (nonatomic, strong) NSURL *nextURL; -@property (nonatomic, strong) NSURL *beforeLoadURL; -@property (nonatomic, assign) NSTimeInterval refreshInterval; -@property (nonatomic, assign) NSTimeInterval adTimeoutInterval; -@property (nonatomic, copy) NSData *adResponseData; -@property (nonatomic, strong) NSDictionary *nativeSDKParameters; -@property (nonatomic, assign) Class customEventClass; -@property (nonatomic, strong) NSDictionary *customEventClassData; -@property (nonatomic, assign) MPInterstitialOrientationType orientationType; -@property (nonatomic, copy) NSString *dspCreativeId; -@property (nonatomic, assign) BOOL precacheRequired; -@property (nonatomic, assign) BOOL isVastVideoPlayer; -@property (nonatomic, strong) NSDate *creationTimestamp; -@property (nonatomic, copy) NSString *creativeId; -@property (nonatomic, copy) NSString *metadataAdType; -@property (nonatomic, assign) NSInteger nativeVideoPlayVisiblePercent; -@property (nonatomic, assign) NSInteger nativeVideoPauseVisiblePercent; -@property (nonatomic, assign) CGFloat nativeImpressionMinVisiblePixels; -@property (nonatomic, assign) NSInteger nativeImpressionMinVisiblePercent; // The pixels Metadata takes priority over percentage, but percentage is left for backwards compatibility -@property (nonatomic, assign) NSTimeInterval nativeImpressionMinVisibleTimeInterval; -@property (nonatomic, assign) NSTimeInterval nativeVideoMaxBufferingTime; -@property (nonatomic) NSDictionary *> *vastVideoTrackers; -@property (nonatomic, readonly) NSArray *availableRewards; -@property (nonatomic, strong) MPRewardedVideoReward *selectedReward; -@property (nonatomic, copy) NSString *rewardedVideoCompletionUrl; -@property (nonatomic, assign) NSTimeInterval rewardedPlayableDuration; -@property (nonatomic, assign) BOOL rewardedPlayableShouldRewardOnClick; -@property (nonatomic, copy) NSString *advancedBidPayload; -@property (nonatomic, strong) MPImpressionData *impressionData; -@property (nonatomic, assign) BOOL enableEarlyClickthroughForNonRewardedVideo; -@property (nonatomic, readonly) BOOL isMoVideo; -/** - MRAID `useCustomClose()` functionality is available for use. - */ -@property (nonatomic, readonly) BOOL mraidAllowCustomClose; - -/** - Unified ad unit format in its raw string representation. - */ -@property (nonatomic, copy) NSString *format; - -// viewable impression tracking -@property (nonatomic) NSTimeInterval impressionMinVisibleTimeInSec; -@property (nonatomic) CGFloat impressionMinVisiblePixels; - -/** - When there is no actual reward, `availableRewards` contains a default reward with the type - `kMPRewardedVideoRewardCurrencyTypeUnspecified`, thus we cannot simply count the array size - of `availableRewards` to tell whether there is a valid reward. - */ -@property (nonatomic, readonly) BOOL hasValidReward; - -- (instancetype)initWithMetadata:(NSDictionary *)metadata data:(NSData *)data isFullscreenAd:(BOOL)isFullscreenAd; - -// Default @c init is unavailable -- (instancetype)init NS_UNAVAILABLE; - -- (BOOL)hasPreferredSize; -- (NSString *)adResponseHTMLString; -- (NSArray *)afterLoadUrlsWithLoadDuration:(NSTimeInterval)duration loadResult:(MPAfterLoadResult)result; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdConfiguration.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdConfiguration.m deleted file mode 100644 index b4dd0d392b..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdConfiguration.m +++ /dev/null @@ -1,745 +0,0 @@ -// -// MPAdConfiguration.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MOPUBExperimentProvider.h" -#import "MPAdConfiguration.h" -#import "MPAdServerKeys.h" -#import "MPConstants.h" -#import "MPHTMLBannerCustomEvent.h" -#import "MPHTMLInterstitialCustomEvent.h" -#import "MPLogging.h" -#import "MPMoPubRewardedPlayableCustomEvent.h" -#import "MPMoPubRewardedVideoCustomEvent.h" -#import "MPMRAIDBannerCustomEvent.h" -#import "MPMRAIDInterstitialCustomEvent.h" -#import "MPRewardedVideoReward.h" -#import "MPVASTInterstitialCustomEvent.h" -#import "MPVASTTracking.h" -#import "MPViewabilityTracker.h" -#import "NSDictionary+MPAdditions.h" -#import "NSJSONSerialization+MPAdditions.h" -#import "NSString+MPAdditions.h" - -#if __has_include("MOPUBNativeVideoCustomEvent.h") -#import "MOPUBNativeVideoCustomEvent.h" -#endif - -#if __has_include("MPMoPubNativeCustomEvent.h") -#import "MPMoPubNativeCustomEvent.h" -#endif - -#if __has_include("MPVASTTrackingEvent.h") -#import "MPVASTTrackingEvent.h" -#endif - -// MACROS -#define AFTER_LOAD_DURATION_MACRO @"%%LOAD_DURATION_MS%%" -#define AFTER_LOAD_RESULT_MACRO @"%%LOAD_RESULT%%" - -typedef NS_ENUM(NSUInteger, MPVASTPlayerVersion) { - MPVASTPlayerVersionUndetermined = 0, // default value, should be treated as web view player - MPVASTPlayerVersionWebViewPlayer = 1, - MPVASTPlayerVersionNativePlayer = 2 -}; - -NSString * const kAdTypeMetadataKey = @"x-adtype"; -NSString * const kAdUnitWarmingUpMetadataKey = @"x-warmup"; -NSString * const kClickthroughMetadataKey = @"x-clickthrough"; -NSString * const kCreativeIdMetadataKey = @"x-creativeid"; -NSString * const kCustomEventClassNameMetadataKey = @"x-custom-event-class-name"; -NSString * const kCustomEventClassDataMetadataKey = @"x-custom-event-class-data"; -NSString * const kNextUrlMetadataKey = @"x-next-url"; -NSString * const kFormatMetadataKey = @"adunit-format"; -NSString * const kBeforeLoadUrlMetadataKey = @"x-before-load-url"; -NSString * const kAfterLoadUrlMetadataKey = @"x-after-load-url"; -NSString * const kAfterLoadSuccessUrlMetadataKey = @"x-after-load-success-url"; -NSString * const kAfterLoadFailureUrlMetadataKey = @"x-after-load-fail-url"; -NSString * const kHeightMetadataKey = @"x-height"; -NSString * const kImpressionTrackerMetadataKey = @"x-imptracker"; // Deprecated; "imptrackers" if available -NSString * const kImpressionTrackersMetadataKey = @"imptrackers"; -NSString * const kNativeSDKParametersMetadataKey = @"x-nativeparams"; -NSString * const kNetworkTypeMetadataKey = @"x-networktype"; -NSString * const kRefreshTimeMetadataKey = @"x-refreshtime"; -NSString * const kAdTimeoutMetadataKey = @"x-ad-timeout-ms"; -NSString * const kWidthMetadataKey = @"x-width"; -NSString * const kDspCreativeIdKey = @"x-dspcreativeid"; -NSString * const kPrecacheRequiredKey = @"x-precacherequired"; -NSString * const kIsVastVideoPlayerKey = @"x-vastvideoplayer"; -NSString * const kImpressionDataMetadataKey = @"impdata"; - -NSString * const kFullAdTypeMetadataKey = @"x-fulladtype"; -NSString * const kOrientationTypeMetadataKey = @"x-orientation"; - -NSString * const kNativeImpressionMinVisiblePixelsMetadataKey = @"x-native-impression-min-px"; // The pixels Metadata takes priority over percentage, but percentage is left for backwards compatibility -NSString * const kNativeImpressionMinVisiblePercentMetadataKey = @"x-impression-min-visible-percent"; -NSString * const kNativeImpressionVisibleMsMetadataKey = @"x-impression-visible-ms"; -NSString * const kNativeVideoPlayVisiblePercentMetadataKey = @"x-play-visible-percent"; -NSString * const kNativeVideoPauseVisiblePercentMetadataKey = @"x-pause-visible-percent"; -NSString * const kNativeVideoMaxBufferingTimeMsMetadataKey = @"x-max-buffer-ms"; -NSString * const kVASTVideoTrackersMetadataKey = @"x-video-trackers"; - -NSString * const kBannerImpressionVisableMsMetadataKey = @"x-banner-impression-min-ms"; -NSString * const kBannerImpressionMinPixelMetadataKey = @"x-banner-impression-min-pixels"; - -NSString * const kAdTypeHtml = @"html"; -NSString * const kAdTypeInterstitial = @"interstitial"; -NSString * const kAdTypeMraid = @"mraid"; -NSString * const kAdTypeClear = @"clear"; -NSString * const kAdTypeNative = @"json"; -NSString * const kAdTypeNativeVideo = @"json_video"; -NSString * const kAdTypeRewardedVideo = @"rewarded_video"; -NSString * const kAdTypeRewardedPlayable = @"rewarded_playable"; -NSString * const kAdTypeVAST = @"vast"; // a possible value of "x-fulladtype" - -// rewarded video -NSString * const kRewardedVideoCurrencyNameMetadataKey = @"x-rewarded-video-currency-name"; -NSString * const kRewardedVideoCurrencyAmountMetadataKey = @"x-rewarded-video-currency-amount"; -NSString * const kRewardedVideoCompletionUrlMetadataKey = @"x-rewarded-video-completion-url"; -NSString * const kRewardedCurrenciesMetadataKey = @"x-rewarded-currencies"; - -// rewarded playables -NSString * const kRewardedPlayableDurationMetadataKey = @"x-rewarded-duration"; -NSString * const kRewardedPlayableRewardOnClickMetadataKey = @"x-should-reward-on-click"; - -// vast video trackers -NSString * const kVASTVideoTrackerUrlMacro = @"%%VIDEO_EVENT%%"; -NSString * const kVASTVideoTrackerEventsMetadataKey = @"events"; -NSString * const kVASTVideoTrackerUrlsMetadataKey = @"urls"; -NSString * const kVASTVideoTrackerEventDictionaryKey = @"event"; -NSString * const kVASTVideoTrackerTextDictionaryKey = @"text"; - -// clickthrough experiment -NSString * const kClickthroughExperimentBrowserAgent = @"x-browser-agent"; -static const NSInteger kMaximumVariantForClickthroughExperiment = 2; - -// viewability -NSString * const kViewabilityDisableMetadataKey = @"x-disable-viewability"; - -// advanced bidding -NSString * const kAdvancedBiddingMarkupMetadataKey = @"adm"; - -// Correspond to a numeric value: 2 means native player, 1 or 0 means MoVideo web view player -NSString * const kVASTPlayerVersionKey = @"vast-player-version"; - -// MRAID -NSString * const kMRAIDAllowCustomCloseKey = @"allow-custom-close"; - -/** - Format Unification Phase 2 item 1.1 - clickability experiment - When the experiment is enabled, users are able to click a fullscreen non-rewarded VAST video ad - immediately, so that they can consume additional content about the advertiser. Clicking on this - video should launch the CTA. - */ -NSString * const kVASTClickabilityExperimentKey = @"vast-click-enabled"; - -@interface MPAdConfiguration () - -@property (nonatomic, copy) NSString *adResponseHTMLString; -@property (nonatomic, strong, readwrite) NSArray *availableRewards; -@property (nonatomic) MOPUBDisplayAgentType clickthroughExperimentBrowserAgent; -@property (nonatomic, strong) MOPUBExperimentProvider *experimentProvider; - -@property (nonatomic, copy) NSArray *afterLoadUrlsWithMacros; -@property (nonatomic, copy) NSArray *afterLoadSuccessUrlsWithMacros; -@property (nonatomic, copy) NSArray *afterLoadFailureUrlsWithMacros; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MPAdConfiguration - -- (instancetype)initWithMetadata:(NSDictionary *)metadata data:(NSData *)data isFullscreenAd:(BOOL)isFullscreenAd -{ - self = [super init]; - if (self) { - [self commonInitWithMetadata:metadata - data:data - isFullscreenAd:isFullscreenAd - experimentProvider:MOPUBExperimentProvider.sharedInstance]; - } - return self; -} - -/** - This common init enables unit testing with an `MOPUBExperimentProvider` instance that is not a singleton. - */ -- (void)commonInitWithMetadata:(NSDictionary *)metadata - data:(NSData *)data - isFullscreenAd:(BOOL)isFullscreenAd - experimentProvider:(MOPUBExperimentProvider *)experimentProvider -{ - self.adResponseData = data; - - _isFullscreenAd = isFullscreenAd; - self.adUnitWarmingUp = [metadata mp_boolForKey:kAdUnitWarmingUpMetadataKey]; - - self.adType = [self adTypeFromMetadata:metadata]; - - self.preferredSize = CGSizeMake([metadata mp_floatForKey:kWidthMetadataKey], - [metadata mp_floatForKey:kHeightMetadataKey]); - - self.clickTrackingURL = [self URLFromMetadata:metadata - forKey:kClickthroughMetadataKey]; - self.nextURL = [self URLFromMetadata:metadata - forKey:kNextUrlMetadataKey]; - self.format = [metadata objectForKey:kFormatMetadataKey]; - self.beforeLoadURL = [self URLFromMetadata:metadata forKey:kBeforeLoadUrlMetadataKey]; - self.afterLoadUrlsWithMacros = [self URLStringsFromMetadata:metadata forKey:kAfterLoadUrlMetadataKey]; - self.afterLoadSuccessUrlsWithMacros = [self URLStringsFromMetadata:metadata forKey:kAfterLoadSuccessUrlMetadataKey]; - self.afterLoadFailureUrlsWithMacros = [self URLStringsFromMetadata:metadata forKey:kAfterLoadFailureUrlMetadataKey]; - - self.refreshInterval = [self refreshIntervalFromMetadata:metadata]; - self.adTimeoutInterval = [self timeIntervalFromMsmetadata:metadata forKey:kAdTimeoutMetadataKey]; - - self.nativeSDKParameters = [self dictionaryFromMetadata:metadata - forKey:kNativeSDKParametersMetadataKey]; - - self.orientationType = [self orientationTypeFromMetadata:metadata]; - - switch ([metadata mp_unsignedIntegerForKey:kVASTPlayerVersionKey]) { - case MPVASTPlayerVersionNativePlayer: - self.customEventClass = [self setUpCustomEventClassFromMetadata:metadata - vastPlayerVersion:MPVASTPlayerVersionNativePlayer]; - break; - default: - self.customEventClass = [self setUpCustomEventClassFromMetadata:metadata - vastPlayerVersion:MPVASTPlayerVersionWebViewPlayer]; - break; - } - - self.customEventClassData = [self customEventClassDataFromMetadata:metadata]; - - self.dspCreativeId = [metadata objectForKey:kDspCreativeIdKey]; - - self.precacheRequired = [metadata mp_boolForKey:kPrecacheRequiredKey]; - - self.isVastVideoPlayer = [metadata mp_boolForKey:kIsVastVideoPlayerKey]; - - self.creationTimestamp = [NSDate date]; - - self.creativeId = [metadata objectForKey:kCreativeIdMetadataKey]; - - self.metadataAdType = [metadata objectForKey:kAdTypeMetadataKey]; - - self.nativeVideoPlayVisiblePercent = [self percentFromMetadata:metadata forKey:kNativeVideoPlayVisiblePercentMetadataKey]; - - self.nativeVideoPauseVisiblePercent = [self percentFromMetadata:metadata forKey:kNativeVideoPauseVisiblePercentMetadataKey]; - - self.nativeImpressionMinVisiblePixels = [[self adAmountFromMetadata:metadata key:kNativeImpressionMinVisiblePixelsMetadataKey] floatValue]; - - self.nativeImpressionMinVisiblePercent = [self percentFromMetadata:metadata forKey:kNativeImpressionMinVisiblePercentMetadataKey]; - - self.nativeImpressionMinVisibleTimeInterval = [self timeIntervalFromMsmetadata:metadata forKey:kNativeImpressionVisibleMsMetadataKey]; - - self.nativeVideoMaxBufferingTime = [self timeIntervalFromMsmetadata:metadata forKey:kNativeVideoMaxBufferingTimeMsMetadataKey]; - - // VAST video trackers - self.vastVideoTrackers = [self vastVideoTrackersFromMetadata:metadata key:kVASTVideoTrackersMetadataKey]; - - self.impressionMinVisibleTimeInSec = [self timeIntervalFromMsmetadata:metadata forKey:kBannerImpressionVisableMsMetadataKey]; - self.impressionMinVisiblePixels = [[self adAmountFromMetadata:metadata key:kBannerImpressionMinPixelMetadataKey] floatValue]; - - self.impressionData = [self impressionDataFromMetadata:metadata]; - self.enableEarlyClickthroughForNonRewardedVideo = [metadata mp_boolForKey:kVASTClickabilityExperimentKey defaultValue:NO]; - - // Organize impression tracking URLs - NSArray * URLs = [self URLsFromMetadata:metadata forKey:kImpressionTrackersMetadataKey]; - // Check to see if the array actually contains URLs - if (URLs.count > 0) { - self.impressionTrackingURLs = URLs; - } else { - // If the array does not contain URLs, take the old `x-imptracker` URL and save that into an array instead. - self.impressionTrackingURLs = [self URLsFromMetadata:metadata forKey:kImpressionTrackerMetadataKey]; - } - - // rewarded video - - // Attempt to parse the multiple currency Metadata first since this will take - // precedence over the older single currency approach. - self.availableRewards = [self parseAvailableRewardsFromMetadata:metadata]; - if (self.availableRewards != nil) { - // Multiple currencies exist. We will select the first entry in the list - // as the default selected reward. - if (self.availableRewards.count > 0) { - self.selectedReward = self.availableRewards[0]; - } - // In the event that the list of available currencies is empty, we will - // follow the behavior from the single currency approach and create an unspecified reward. - else { - MPRewardedVideoReward * defaultReward = [[MPRewardedVideoReward alloc] initWithCurrencyType:kMPRewardedVideoRewardCurrencyTypeUnspecified amount:@(kMPRewardedVideoRewardCurrencyAmountUnspecified)]; - self.availableRewards = [NSArray arrayWithObject:defaultReward]; - self.selectedReward = defaultReward; - } - } - // Multiple currencies are not available; attempt to process single currency - // metadata. - else { - NSString *currencyName = [metadata objectForKey:kRewardedVideoCurrencyNameMetadataKey] ?: kMPRewardedVideoRewardCurrencyTypeUnspecified; - - NSNumber *currencyAmount = [self adAmountFromMetadata:metadata key:kRewardedVideoCurrencyAmountMetadataKey]; - if (currencyAmount.integerValue <= 0) { - currencyAmount = @(kMPRewardedVideoRewardCurrencyAmountUnspecified); - } - - MPRewardedVideoReward * reward = [[MPRewardedVideoReward alloc] initWithCurrencyType:currencyName amount:currencyAmount]; - self.availableRewards = [NSArray arrayWithObject:reward]; - self.selectedReward = reward; - } - - self.rewardedVideoCompletionUrl = [metadata objectForKey:kRewardedVideoCompletionUrlMetadataKey]; - - // rewarded playables - self.rewardedPlayableDuration = [self timeIntervalFromMetadata:metadata forKey:kRewardedPlayableDurationMetadataKey]; - self.rewardedPlayableShouldRewardOnClick = [[metadata objectForKey:kRewardedPlayableRewardOnClickMetadataKey] boolValue]; - - // clickthrough experiment - self.clickthroughExperimentBrowserAgent = [self clickthroughExperimentVariantFromMetadata:metadata forKey:kClickthroughExperimentBrowserAgent]; - self.experimentProvider = experimentProvider; - [self.experimentProvider setDisplayAgentFromAdServer:self.clickthroughExperimentBrowserAgent]; - - // viewability - NSInteger disabledViewabilityValue = [metadata mp_integerForKey:kViewabilityDisableMetadataKey]; - - if (disabledViewabilityValue != 0 && - disabledViewabilityValue >= MPViewabilityOptionNone && - disabledViewabilityValue <= MPViewabilityOptionAll) { - MPViewabilityOption vendorsToDisable = (MPViewabilityOption)disabledViewabilityValue; - [MPViewabilityTracker disableViewability:vendorsToDisable]; - } - - // advanced bidding - self.advancedBidPayload = [metadata objectForKey:kAdvancedBiddingMarkupMetadataKey]; - - // MRAID - _mraidAllowCustomClose = [metadata mp_boolForKey:kMRAIDAllowCustomCloseKey defaultValue:NO]; -} - -/** - Provided the metadata of an ad, return the class of corresponding custome event. - */ -- (Class)setUpCustomEventClassFromMetadata:(NSDictionary *)metadata - vastPlayerVersion:(MPVASTPlayerVersion)vastPlayerVersion -{ - NSDictionary *customEventTable; - if (self.isFullscreenAd) { - Class rewardedVideoClass; - switch (vastPlayerVersion) { - case MPVASTPlayerVersionNativePlayer: - rewardedVideoClass = [MPVASTInterstitialCustomEvent class]; - break; - default: // web view player - rewardedVideoClass = [MPMoPubRewardedVideoCustomEvent class]; - break; - } - - customEventTable = @{@"admob_full": @"MPGoogleAdMobInterstitialCustomEvent", // optional class - kAdTypeHtml: NSStringFromClass([MPHTMLInterstitialCustomEvent class]), - kAdTypeMraid: NSStringFromClass([MPMRAIDInterstitialCustomEvent class]), - kAdTypeRewardedVideo: NSStringFromClass(rewardedVideoClass), - kAdTypeRewardedPlayable: NSStringFromClass([MPMoPubRewardedPlayableCustomEvent class]), - kAdTypeVAST: NSStringFromClass([MPVASTInterstitialCustomEvent class])}; - } else { - customEventTable = @{@"admob_native": @"MPGoogleAdMobBannerCustomEvent", // optional class - kAdTypeHtml: NSStringFromClass([MPHTMLBannerCustomEvent class]), - kAdTypeMraid: NSStringFromClass([MPMRAIDBannerCustomEvent class]), - kAdTypeNativeVideo: @"MOPUBNativeVideoCustomEvent", // optional native class - kAdTypeNative: @"MPMoPubNativeCustomEvent"}; // optional native class - } - - NSString *customEventClassName = metadata[kCustomEventClassNameMetadataKey]; - if (customEventTable[self.adType]) { - customEventClassName = customEventTable[self.adType]; - } - - Class customEventClass = NSClassFromString(customEventClassName); - if (customEventClassName && !customEventClass) { - MPLogInfo(@"Could not find custom event class named %@", customEventClassName); - } - - return customEventClass; -} - -- (NSDictionary *)customEventClassDataFromMetadata:(NSDictionary *)metadata -{ - // Parse out custom event data if its present - NSDictionary *result = [self dictionaryFromMetadata:metadata forKey:kCustomEventClassDataMetadataKey]; - if (result != nil) { - // Inject the unified ad unit format into the custom data so that - // all adapters (including mediated ones) can differentiate between - // banner and medium rectangle formats. - // The key `adunit_format` is used to denote the format, which is the same as the - // key for impression level revenue data since they represent the same information. - NSString *format = [metadata objectForKey:kFormatMetadataKey]; - if (format.length > 0) { - NSMutableDictionary *dictionary = [result mutableCopy]; - dictionary[kImpressionDataAdUnitFormatKey] = format; - result = dictionary; - } - } - // No custom event data found; this is probably a native ad payload. - else { - result = [self dictionaryFromMetadata:metadata forKey:kNativeSDKParametersMetadataKey]; - } - return result; -} - - -- (BOOL)hasPreferredSize -{ - return (self.preferredSize.width > 0 && self.preferredSize.height > 0); -} - -- (BOOL)hasValidReward -{ - return (self.availableRewards.firstObject != nil - && [self.availableRewards.firstObject.currencyType isEqualToString:kMPRewardedVideoRewardCurrencyTypeUnspecified] == NO); -} - -- (NSString *)adResponseHTMLString -{ - if (!_adResponseHTMLString) { - self.adResponseHTMLString = [[NSString alloc] initWithData:self.adResponseData - encoding:NSUTF8StringEncoding]; - } - - return _adResponseHTMLString; -} - -- (NSArray *)afterLoadUrlsWithLoadDuration:(NSTimeInterval)duration loadResult:(MPAfterLoadResult)result -{ - NSArray * afterLoadUrls = [self concatenateBaseUrlArray:self.afterLoadUrlsWithMacros - withConditionalArray:(result == MPAfterLoadResultAdLoaded ? self.afterLoadSuccessUrlsWithMacros : self.afterLoadFailureUrlsWithMacros)]; - - // No URLs to generate - if (afterLoadUrls == nil || afterLoadUrls.count == 0) { - return nil; - } - - NSMutableArray * urls = [NSMutableArray arrayWithCapacity:afterLoadUrls.count]; - - for (NSString * urlString in afterLoadUrls) { - // Skip if the URL length is 0 - if (urlString.length == 0) { - continue; - } - - // Generate the ad server value from the enumeration. If the result type failed to - // match, we should not process this any further. - NSString * resultString = nil; - switch (result) { - case MPAfterLoadResultError: resultString = @"error"; break; - case MPAfterLoadResultTimeout: resultString = @"timeout"; break; - case MPAfterLoadResultAdLoaded: resultString = @"ad_loaded"; break; - case MPAfterLoadResultMissingAdapter: resultString = @"missing_adapter"; break; - default: return nil; - } - - // Convert the duration to milliseconds - NSString * durationMs = [NSString stringWithFormat:@"%llu", (unsigned long long)(duration * 1000)]; - - // Replace the macros - NSString * expandedUrl = [urlString stringByReplacingOccurrencesOfString:AFTER_LOAD_DURATION_MACRO withString:durationMs]; - expandedUrl = [expandedUrl stringByReplacingOccurrencesOfString:AFTER_LOAD_RESULT_MACRO withString:resultString]; - - // Add to array (@c URLWithString may return @c nil, so check before appending to the array) - NSURL * url = [NSURL URLWithString:expandedUrl]; - if (url != nil) { - [urls addObject:url]; - } - } - - return urls.count > 0 ? urls : nil; -} - -- (BOOL)isMraidAd -{ - return [self.metadataAdType isEqualToString:kAdTypeMraid]; -} - -- (BOOL)isMoVideo -{ - // Comparing using class name strings instead of `isKindOfClass:`. The isKindOfClass:` - // check fails because `self.customEventClass` was instantiated using reflection. - NSString *className = NSStringFromClass(self.customEventClass); - BOOL isMoVideoRewardedVideo = [className isEqualToString:@"MPMoPubRewardedVideoCustomEvent"]; - BOOL isMoVideoRewardedPlayable = [className isEqualToString:@"MPMoPubRewardedPlayableCustomEvent"]; - return isMoVideoRewardedVideo || isMoVideoRewardedPlayable; -} - -#pragma mark - Private - -- (NSArray *)concatenateBaseUrlArray:(NSArray *)baseArray withConditionalArray:(NSArray *)conditionalArray { - if (baseArray == nil && conditionalArray == nil) { - return nil; - } - - if (baseArray == nil) { - return conditionalArray; - } - - if (conditionalArray == nil) { - return baseArray; - } - - return [baseArray arrayByAddingObjectsFromArray:conditionalArray]; -} - -/** - Read the ad type from the "x-adtype" and "x-fulladtype" of the provided @c metadata. The return - value is non-null because ad type might be used as a dictionary key, and a nil key causes crash. - @param metadata the dictionary that contains ad type information - @return A non-null @c NSString. If @c metadata does not contain valid ad type value, then return - an empty string. -*/ -- (NSString * _Nonnull)adTypeFromMetadata:(NSDictionary *)metadata -{ - NSString *adTypeString = [metadata objectForKey:kAdTypeMetadataKey]; - - // override ad type if full ad type is provided - if ([adTypeString isEqualToString:kAdTypeInterstitial] - && [[metadata objectForKey:kFullAdTypeMetadataKey] isKindOfClass:[NSString class]] - && ((NSString *)[metadata objectForKey:kFullAdTypeMetadataKey]).length > 0) { - adTypeString = [metadata objectForKey:kFullAdTypeMetadataKey]; - } - - // make sure the return value is non-null - if (adTypeString.length == 0) { - adTypeString = @""; - } - - return adTypeString; -} - -- (NSURL *)URLFromMetadata:(NSDictionary *)metadata forKey:(NSString *)key -{ - NSString *URLString = [metadata objectForKey:key]; - return URLString ? [NSURL URLWithString:URLString] : nil; -} - -/** - Reads the value at key @c key from dictionary @c metadata. If the value is a @c NSString that is convertable to - @c NSURL, it will be converted into an @c NSURL, inserted into an array, and returned. If the value is a @c NSArray, - each @c NSString in the array that is convertable to @c NSURL will be converted and all returned in an array, with all - other objects scrubbed. If the value from @c metadata is @c nil, not an @c NSString, not an @c NSArray, an @c NSString - that cannot be converted to @c NSURL, or an @c NSArray that does not contain NSURL-convertable strings, this method - will return @c nil. - @remark This method converts all @c NSStrings into @c NSURLs, where possible. If this behavior is not desired, - use @c URLStringsFromMetadata:forkey: instead. - @param metadata the @c NSDictionary to read from - @param key the @c the key to look up in @c metadata - @return @c NSArray of @c NSURL contained at key @c key, or @c nil - */ -- (NSArray *)URLsFromMetadata:(NSDictionary *)metadata forKey:(NSString *)key { - NSArray * URLStrings = [self URLStringsFromMetadata:metadata forKey:key]; - if (URLStrings == nil) { - return nil; - } - - // Convert the strings into NSURLs and save in a new array - NSMutableArray * URLs = [NSMutableArray arrayWithCapacity:URLStrings.count]; - for (NSString * URLString in URLStrings) { - // @c URLWithString may return @c nil, so check before appending to the array - NSURL * URL = [NSURL URLWithString:URLString]; - if (URL != nil) { - [URLs addObject:URL]; - } - } - - return URLs.count > 0 ? URLs : nil; -} - -/** - Reads the value at key @c key from dictionary @c metadata. If the value is a @c NSString, it will be inserted into - an array and returned. If the value is a @c NSArray, the @c NSStrings contained in that array will be all be returned - in an array, with any object that is not an @c NSString scrubbed. If the value from @c metadata is @c nil, not an - @c NSString, not an @c NSArray, or an @c NSArray that does not contain strings, this method will return @c nil. - @remark This method does not convert the @c NSStrings into @c NSURLs. Use @c URLsFromMetadata:forKey: for that instead. - @param metadata the @c NSDictionary to read from - @param key the @c the key to look up in @c metadata - @return @c NSArray of @c NSStrings contained at key @c key, or @c nil - */ -- (NSArray *)URLStringsFromMetadata:(NSDictionary *)metadata forKey:(NSString *)key { - NSObject * value = metadata[key]; - - if (value == nil) { - return nil; - } - - if ([value isKindOfClass:[NSString class]]) { - NSString * string = (NSString *)value; - return string.length > 0 ? @[string] : nil; - } - - if ([value isKindOfClass:[NSArray class]]) { - NSArray * objects = (NSArray *)value; - NSMutableArray * URLStrings = [NSMutableArray arrayWithCapacity:objects.count]; - for (NSObject * object in objects) { - if ([object isKindOfClass:[NSString class]]) { - [URLStrings addObject:(NSString *)object]; - } - } - return URLStrings.count > 0 ? URLStrings : nil; - } - - return nil; -} - -- (NSDictionary *)dictionaryFromMetadata:(NSDictionary *)metadata forKey:(NSString *)key -{ - NSData *data = [(NSString *)[metadata objectForKey:key] dataUsingEncoding:NSUTF8StringEncoding]; - NSDictionary *JSONFromMetadata = nil; - if (data) { - JSONFromMetadata = [NSJSONSerialization mp_JSONObjectWithData:data options:NSJSONReadingMutableContainers clearNullObjects:YES error:nil]; - } - return JSONFromMetadata; -} - -- (NSTimeInterval)refreshIntervalFromMetadata:(NSDictionary *)metadata -{ - NSTimeInterval interval = [metadata mp_doubleForKey:kRefreshTimeMetadataKey defaultValue:MINIMUM_REFRESH_INTERVAL]; - if (interval < MINIMUM_REFRESH_INTERVAL) { - interval = MINIMUM_REFRESH_INTERVAL; - } - return interval; -} - -- (NSTimeInterval)timeIntervalFromMetadata:(NSDictionary *)metadata forKey:(NSString *)key -{ - NSTimeInterval interval = [metadata mp_doubleForKey:key defaultValue:-1]; - return interval; -} - -- (NSTimeInterval)timeIntervalFromMsmetadata:(NSDictionary *)metadata forKey:(NSString *)key -{ - NSTimeInterval interval = [metadata mp_doubleForKey:key defaultValue:-1]; - if (interval >= 0) { - interval /= 1000.0f; - } - return interval; -} - -- (NSInteger)percentFromMetadata:(NSDictionary *)metadata forKey:(NSString *)key -{ - return [metadata mp_integerForKey:key defaultValue:-1]; - -} - -- (NSNumber *)adAmountFromMetadata:(NSDictionary *)metadata key:(NSString *)key -{ - NSInteger amount = [metadata mp_integerForKey:key defaultValue:-1]; - return @(amount); -} - -- (MPInterstitialOrientationType)orientationTypeFromMetadata:(NSDictionary *)metadata -{ - NSString *orientation = [metadata objectForKey:kOrientationTypeMetadataKey]; - if ([orientation isEqualToString:@"p"]) { - return MPInterstitialOrientationTypePortrait; - } else if ([orientation isEqualToString:@"l"]) { - return MPInterstitialOrientationTypeLandscape; - } else { - return MPInterstitialOrientationTypeAll; - } -} - -- (NSDictionary *> *)vastVideoTrackersFromMetadata:(NSDictionary *)metadata - key:(NSString *)key -{ - NSDictionary *dictFromMetadata = [self dictionaryFromMetadata:metadata forKey:key]; - if (!dictFromMetadata) { - return nil; - } - - NSMutableDictionary *> *videoTrackerDict = [NSMutableDictionary new]; - NSArray *events = dictFromMetadata[kVASTVideoTrackerEventsMetadataKey]; - NSArray *urls = dictFromMetadata[kVASTVideoTrackerUrlsMetadataKey]; - - for (MPVideoEvent event in events) { - if (![MPVideoEvents isSupportedEvent:event]) { - continue; - } - [self setVideoTrackers:videoTrackerDict event:event urls:urls]; - } - if (videoTrackerDict.count == 0) { - return nil; - } - return videoTrackerDict; -} - -- (void)setVideoTrackers:(NSMutableDictionary *> *)videoTrackerDict - event:(MPVideoEvent)event - urls:(NSArray *)urls { - NSMutableArray *trackers = [NSMutableArray new]; - [urls enumerateObjectsUsingBlock:^(NSString * _Nonnull urlString, NSUInteger idx, BOOL * _Nonnull stop) { - // Perform macro replacement - if ([urlString rangeOfString:kVASTVideoTrackerUrlMacro].location != NSNotFound) { - NSString *trackerUrl = [urlString stringByReplacingOccurrencesOfString:kVASTVideoTrackerUrlMacro withString:event]; - NSDictionary *dict = @{kVASTVideoTrackerEventDictionaryKey:event, kVASTVideoTrackerTextDictionaryKey:trackerUrl}; - MPVASTTrackingEvent *tracker = [[MPVASTTrackingEvent alloc] initWithDictionary:dict]; - [trackers addObject:tracker]; - } - }]; - - // Add to events dictionary if there are trackers available - if (trackers.count > 0) { - videoTrackerDict[event] = trackers; - } -} - -- (NSArray *)parseAvailableRewardsFromMetadata:(NSDictionary *)metadata { - // The X-Rewarded-Currencies Metadata key doesn't exist. This is probably - // not a rewarded ad. - NSDictionary * currencies = [metadata objectForKey:kRewardedCurrenciesMetadataKey]; - if (currencies == nil) { - return nil; - } - - // Either the list of available rewards doesn't exist or is empty. - // This is an error. - NSArray * rewards = [currencies objectForKey:@"rewards"]; - if (rewards.count == 0) { - MPLogDebug(@"No available rewards found."); - return nil; - } - - // Parse the list of JSON rewards into objects. - NSMutableArray * availableRewards = [NSMutableArray arrayWithCapacity:rewards.count]; - [rewards enumerateObjectsUsingBlock:^(NSDictionary * rewardDict, NSUInteger idx, BOOL * _Nonnull stop) { - NSString * name = rewardDict[@"name"] ?: kMPRewardedVideoRewardCurrencyTypeUnspecified; - NSNumber * amount = rewardDict[@"amount"] ?: @(kMPRewardedVideoRewardCurrencyAmountUnspecified); - - MPRewardedVideoReward * reward = [[MPRewardedVideoReward alloc] initWithCurrencyType:name amount:amount]; - [availableRewards addObject:reward]; - }]; - - return availableRewards; -} - -- (MOPUBDisplayAgentType)clickthroughExperimentVariantFromMetadata:(NSDictionary *)metadata forKey:(NSString *)key -{ - NSInteger variant = [metadata mp_integerForKey:key]; - if (variant > kMaximumVariantForClickthroughExperiment) { - variant = -1; - } - - return variant; -} - -- (MPImpressionData *)impressionDataFromMetadata:(NSDictionary *)metadata -{ - NSDictionary * impressionDataDictionary = metadata[kImpressionDataMetadataKey]; - if (impressionDataDictionary == nil) { - return nil; - } - - MPImpressionData * impressionData = [[MPImpressionData alloc] initWithDictionary:impressionDataDictionary]; - return impressionData; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdDestinationDisplayAgent.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdDestinationDisplayAgent.h deleted file mode 100644 index 08d0e336ef..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdDestinationDisplayAgent.h +++ /dev/null @@ -1,48 +0,0 @@ -// -// MPAdDestinationDisplayAgent.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPActivityViewControllerHelper+TweetShare.h" -#import "MPAdConfiguration.h" -#import "MPURLResolver.h" -#import "MPProgressOverlayView.h" -#import "MOPUBDisplayAgentType.h" - -@protocol MPAdDestinationDisplayAgentDelegate; - -@protocol MPAdDestinationDisplayAgent - -@property (nonatomic, weak) id delegate; - -+ (id)agentWithDelegate:(id)delegate; -+ (BOOL)shouldDisplayContentInApp; -- (void)displayDestinationForURL:(NSURL *)URL; -- (void)cancel; - -@end - -@interface MPAdDestinationDisplayAgent : NSObject < - MPAdDestinationDisplayAgent, - MPProgressOverlayViewDelegate, - MPActivityViewControllerHelperDelegate -> - -@end - -@protocol MPAdDestinationDisplayAgentDelegate - -- (UIViewController *)viewControllerForPresentingModalView; -- (void)displayAgentWillPresentModal; -- (void)displayAgentWillLeaveApplication; -- (void)displayAgentDidDismissModal; - -@optional - -- (MPAdConfiguration *)adConfiguration; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdDestinationDisplayAgent.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdDestinationDisplayAgent.m deleted file mode 100644 index d6a3e8aae6..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdDestinationDisplayAgent.m +++ /dev/null @@ -1,370 +0,0 @@ -// -// MPAdDestinationDisplayAgent.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPAdDestinationDisplayAgent.h" -#import "MPCoreInstanceProvider.h" -#import "MPLastResortDelegate.h" -#import "MPLogging.h" -#import "NSURL+MPAdditions.h" -#import "MPCoreInstanceProvider.h" -#import "MPAnalyticsTracker.h" -#import "MOPUBExperimentProvider.h" -#import "MoPub+Utility.h" -#import "SKStoreProductViewController+MPAdditions.h" -#import - -static NSString * const kDisplayAgentErrorDomain = @"com.mopub.displayagent"; - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MPAdDestinationDisplayAgent () - -@property (nonatomic, strong) MPURLResolver *resolver; -@property (nonatomic, strong) MPURLResolver *enhancedDeeplinkFallbackResolver; -@property (nonatomic, strong) MPProgressOverlayView *overlayView; -@property (nonatomic, assign) BOOL isLoadingDestination; -@property (nonatomic) MOPUBDisplayAgentType displayAgentType; -@property (nonatomic, strong) SKStoreProductViewController *storeKitController; -@property (nonatomic, strong) SFSafariViewController *safariController; - -@property (nonatomic, strong) MPActivityViewControllerHelper *activityViewControllerHelper; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MPAdDestinationDisplayAgent - -@synthesize delegate; - -+ (MPAdDestinationDisplayAgent *)agentWithDelegate:(id)delegate -{ - MPAdDestinationDisplayAgent *agent = [[MPAdDestinationDisplayAgent alloc] init]; - agent.delegate = delegate; - agent.overlayView = [[MPProgressOverlayView alloc] initWithDelegate:agent]; - agent.activityViewControllerHelper = [[MPActivityViewControllerHelper alloc] initWithDelegate:agent]; - agent.displayAgentType = MOPUBExperimentProvider.sharedInstance.displayAgentType; - return agent; -} - -- (void)dealloc -{ - [self dismissAllModalContent]; - - self.overlayView.delegate = nil; - - // XXX: If this display agent is deallocated while a StoreKit controller is still on-screen, - // nil-ing out the controller's delegate would leave us with no way to dismiss the controller - // in the future. Therefore, we change the controller's delegate to a singleton object which - // implements SKStoreProductViewControllerDelegate and is always around. - self.storeKitController.delegate = [MPLastResortDelegate sharedDelegate]; -} - -- (void)dismissAllModalContent -{ - [self.overlayView hide]; -} - -+ (BOOL)shouldDisplayContentInApp -{ - switch (MOPUBExperimentProvider.sharedInstance.displayAgentType) { - case MOPUBDisplayAgentTypeInApp: -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - case MOPUBDisplayAgentTypeSafariViewController: -#pragma clang diagnostic pop - return YES; - case MOPUBDisplayAgentTypeNativeSafari: - return NO; - } -} - -- (void)displayDestinationForURL:(NSURL *)URL -{ - if (self.isLoadingDestination) return; - self.isLoadingDestination = YES; - - [self.delegate displayAgentWillPresentModal]; - [self.overlayView show]; - - [self.resolver cancel]; - [self.enhancedDeeplinkFallbackResolver cancel]; - - __weak __typeof__(self) weakSelf = self; - self.resolver = [MPURLResolver resolverWithURL:URL completion:^(MPURLActionInfo *suggestedAction, NSError *error) { - __typeof__(self) strongSelf = weakSelf; - if (error) { - [strongSelf failedToResolveURLWithError:error]; - } else { - [strongSelf handleSuggestedURLAction:suggestedAction isResolvingEnhancedDeeplink:NO]; - } - }]; - - [self.resolver start]; -} - -- (void)cancel -{ - if (self.isLoadingDestination) { - [self.resolver cancel]; - [self.enhancedDeeplinkFallbackResolver cancel]; - [self hideOverlay]; - [self completeDestinationLoading]; - } -} - -- (BOOL)handleSuggestedURLAction:(MPURLActionInfo *)actionInfo isResolvingEnhancedDeeplink:(BOOL)isResolvingEnhancedDeeplink -{ - if (actionInfo == nil) { - [self failedToResolveURLWithError:[NSError errorWithDomain:kDisplayAgentErrorDomain code:-1 userInfo:@{NSLocalizedDescriptionKey: @"Invalid URL action"}]]; - return NO; - } - - BOOL success = YES; - - switch (actionInfo.actionType) { - case MPURLActionTypeStoreKit: - [self showStoreKitWithAction:actionInfo]; - break; - case MPURLActionTypeGenericDeeplink: - [self openURLInApplication:actionInfo.deeplinkURL]; - break; - case MPURLActionTypeEnhancedDeeplink: - if (isResolvingEnhancedDeeplink) { - // We end up here if we encounter a nested enhanced deeplink. We'll simply disallow - // this to avoid getting into cycles. - [self failedToResolveURLWithError:[NSError errorWithDomain:kDisplayAgentErrorDomain code:-1 userInfo:@{NSLocalizedDescriptionKey: @"Cannot resolve an enhanced deeplink that is nested within another enhanced deeplink."}]]; - success = NO; - } else { - [self handleEnhancedDeeplinkRequest:actionInfo.enhancedDeeplinkRequest]; - } - break; - case MPURLActionTypeOpenInSafari: - [self openURLInApplication:actionInfo.safariDestinationURL]; - break; - case MPURLActionTypeOpenInWebView: - [self showWebViewWithHTMLString:actionInfo.HTTPResponseString baseURL:actionInfo.webViewBaseURL actionType:MPURLActionTypeOpenInWebView]; - break; - case MPURLActionTypeOpenURLInWebView: - [self showWebViewWithHTMLString:actionInfo.HTTPResponseString baseURL:actionInfo.originalURL actionType:MPURLActionTypeOpenInWebView]; - break; - case MPURLActionTypeShare: - [self openShareURL:actionInfo.shareURL]; - break; - default: - [self failedToResolveURLWithError:[NSError errorWithDomain:kDisplayAgentErrorDomain code:-2 userInfo:@{NSLocalizedDescriptionKey: @"Unrecognized URL action type."}]]; - success = NO; - break; - } - - return success; -} - -- (void)handleEnhancedDeeplinkRequest:(MPEnhancedDeeplinkRequest *)request -{ - [MoPub openURL:request.primaryURL options:@{} completion:^(BOOL didOpenURLSuccessfully) { - if (didOpenURLSuccessfully) { - [self hideOverlay]; - [self.delegate displayAgentWillLeaveApplication]; - [self completeDestinationLoading]; - [[MPAnalyticsTracker sharedTracker] sendTrackingRequestForURLs:request.primaryTrackingURLs]; - } else if (request.fallbackURL) { - [self handleEnhancedDeeplinkFallbackForRequest:request]; - } else { - [self openURLInApplication:request.originalURL]; - } - }]; -} - -- (void)handleEnhancedDeeplinkFallbackForRequest:(MPEnhancedDeeplinkRequest *)request -{ - __weak __typeof__(self) weakSelf = self; - [self.enhancedDeeplinkFallbackResolver cancel]; - self.enhancedDeeplinkFallbackResolver = [MPURLResolver resolverWithURL:request.fallbackURL completion:^(MPURLActionInfo *actionInfo, NSError *error) { - __typeof__(self) strongSelf = weakSelf; - if (error) { - // If the resolver fails, just treat the entire original URL as a regular deeplink. - [strongSelf openURLInApplication:request.originalURL]; - } - else { - // Otherwise, the resolver will return us a URL action. We process that action - // normally with one exception: we don't follow any nested enhanced deeplinks. - BOOL success = [strongSelf handleSuggestedURLAction:actionInfo isResolvingEnhancedDeeplink:YES]; - if (success) { - [[MPAnalyticsTracker sharedTracker] sendTrackingRequestForURLs:request.fallbackTrackingURLs]; - } - } - }]; - [self.enhancedDeeplinkFallbackResolver start]; -} - -- (void)showWebViewWithHTMLString:(NSString *)HTMLString baseURL:(NSURL *)URL actionType:(MPURLActionType)actionType { - switch (self.displayAgentType) { - case MOPUBDisplayAgentTypeInApp: -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - case MOPUBDisplayAgentTypeSafariViewController: -#pragma clang diagnostic pop - self.safariController = ({ - SFSafariViewController * controller = [[SFSafariViewController alloc] initWithURL:URL]; - controller.delegate = self; - controller.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; - controller.modalPresentationStyle = UIModalPresentationFullScreen; - controller; - }); - - [self showAdBrowserController]; - break; - case MOPUBDisplayAgentTypeNativeSafari: - [self openURLInApplication:URL]; - break; - } -} - -- (void)showAdBrowserController { - [self hideOverlay]; - [[self.delegate viewControllerForPresentingModalView] presentViewController:self.safariController - animated:MP_ANIMATED - completion:nil]; -} - -- (void)showStoreKitProductWithParameters:(NSDictionary *)parameters fallbackURL:(NSURL *)URL -{ - if (!SKStoreProductViewController.canUseStoreProductViewController) { - [self openURLInApplication:URL]; - return; - } - - [self presentStoreKitControllerWithProductParameters:parameters fallbackURL:URL]; -} - -- (void)openURLInApplication:(NSURL *)URL -{ - [self hideOverlay]; - - [MoPub openURL:URL options:@{} completion:^(BOOL didOpenURLSuccessfully) { - if (didOpenURLSuccessfully) { - [self.delegate displayAgentWillLeaveApplication]; - } - [self completeDestinationLoading]; - }]; -} - -- (BOOL)openShareURL:(NSURL *)URL -{ - MPLogDebug(@"MPAdDestinationDisplayAgent - loading Share URL: %@", URL); - MPMoPubShareHostCommand command = [URL mp_MoPubShareHostCommand]; - switch (command) { - case MPMoPubShareHostCommandTweet: - return [self.activityViewControllerHelper presentActivityViewControllerWithTweetShareURL:URL]; - default: - MPLogInfo(@"MPAdDestinationDisplayAgent - unsupported Share URL: %@", [URL absoluteString]); - return NO; - } -} - -- (void)failedToResolveURLWithError:(NSError *)error -{ - [self hideOverlay]; - [self completeDestinationLoading]; -} - -- (void)completeDestinationLoading -{ - self.isLoadingDestination = NO; - [self.delegate displayAgentDidDismissModal]; -} - -- (void)presentStoreKitControllerWithProductParameters:(NSDictionary *)parameters fallbackURL:(NSURL *)URL -{ - self.storeKitController = [[SKStoreProductViewController alloc] init]; - self.storeKitController.modalPresentationStyle = UIModalPresentationFullScreen; - self.storeKitController.delegate = self; - [self.storeKitController loadProductWithParameters:parameters completionBlock:nil]; - - [self hideOverlay]; - [[self.delegate viewControllerForPresentingModalView] presentViewController:self.storeKitController animated:MP_ANIMATED completion:nil]; -} - -#pragma mark - - -- (void)productViewControllerDidFinish:(SKStoreProductViewController *)viewController -{ - self.isLoadingDestination = NO; - [self hideModalAndNotifyDelegate]; -} - -#pragma mark - - -- (void)safariViewControllerDidFinish:(SFSafariViewController *)controller { - self.isLoadingDestination = NO; - [self.delegate displayAgentDidDismissModal]; -} - -#pragma mark - - -- (void)overlayCancelButtonPressed -{ - [self cancel]; -} - -#pragma mark - Convenience Methods - -- (void)hideModalAndNotifyDelegate -{ - [[self.delegate viewControllerForPresentingModalView] dismissViewControllerAnimated:MP_ANIMATED completion:^{ - [self.delegate displayAgentDidDismissModal]; - }]; -} - -- (void)hideOverlay -{ - [self.overlayView hide]; -} - -#pragma mark - -- (UIViewController *)viewControllerForPresentingActivityViewController -{ - return self.delegate.viewControllerForPresentingModalView; -} - -- (void)activityViewControllerWillPresent -{ - [self hideOverlay]; - self.isLoadingDestination = NO; - [self.delegate displayAgentWillPresentModal]; -} - -- (void)activityViewControllerDidDismiss -{ - [self.delegate displayAgentDidDismissModal]; -} - -#pragma mark - Experiment with 3 display agent types: 0 -> keep existing, 1 -> use native safari, 2 -> use SafariViewController - -- (void)showStoreKitWithAction:(MPURLActionInfo *)actionInfo -{ - switch (self.displayAgentType) { - case MOPUBDisplayAgentTypeInApp: -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - case MOPUBDisplayAgentTypeSafariViewController: // It doesn't make sense to open store kit in SafariViewController so storeKitController is used here. -#pragma clang diagnostic pop - [self showStoreKitProductWithParameters:actionInfo.iTunesStoreParameters - fallbackURL:actionInfo.iTunesStoreFallbackURL]; - break; - case MOPUBDisplayAgentTypeNativeSafari: - [self openURLInApplication:actionInfo.iTunesStoreFallbackURL]; - break; - default: - break; - } -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdImpressionTimer.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdImpressionTimer.h deleted file mode 100644 index 0659cfb5d7..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdImpressionTimer.h +++ /dev/null @@ -1,60 +0,0 @@ -// -// MPAdImpressionTimer.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import - -@protocol MPAdImpressionTimerDelegate - -@required - -/* - * Called when the required visibility time has been satisfied. This delegate method - * will only be called once for the lifetime of this object. - */ -- (void)adViewWillLogImpression:(UIView *)adView; - -@end - -@interface MPAdImpressionTimer : NSObject - -@property (nonatomic, weak) id delegate; - -/* - * Initializes and returns an object that will tell its delegate certain number of pixels of the view - * has been visible for a given amount of time. - * - * requiredSecondsForImpression represents the number of seconds a view needs to be visible for impression counting. Range of the value: [0, infinite). - * visibilityPixels is a float number, ranging from [0, infinite) . For example, 1 represents 1 pixel. - */ -- (instancetype)initWithRequiredSecondsForImpression:(NSTimeInterval)requiredSecondsForImpression requiredViewVisibilityPixels:(CGFloat)visibilityPixels NS_DESIGNATED_INITIALIZER; - -/* - * Initializes and returns an `MPAdImpressionTimer` instance which will alert its delegate when the given - * percentage of a view (given by `startTrackingView`) has been visible for the given amount of time. - * - * requiredSecondsForImpression represents the number of seconds a view needs to be visible to count an impression. Range of the value: [0, infinite). - * visibilityPercentage is a float number, ranging from [0, 1]. 0 represents 0%, and 1 represents 100%. - */ -- (instancetype)initWithRequiredSecondsForImpression:(NSTimeInterval)requiredSecondsForImpression requiredViewVisibilityPercentage:(CGFloat)visibilityPercentage NS_DESIGNATED_INITIALIZER; - -/* - * Starts tracking a view based on the rules given in `initWithRequiredSecondsForImpression:requiredViewVisibilityPixels` - * or `initWithRequiredSecondsForImpression:requiredViewVisibilityPercentage`. Calls `adViewWillLogImpression:` on the - * delegate when an impression has been tracked. - * - * view is the view to track - */ -- (void)startTrackingView:(UIView *)view; - -/** - * `init` is not available. - */ -- (instancetype)init __attribute__((unavailable("init not available"))); - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdImpressionTimer.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdImpressionTimer.m deleted file mode 100644 index e6d512c8d9..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdImpressionTimer.m +++ /dev/null @@ -1,130 +0,0 @@ -// -// MPAdImpressionTimer.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPAdImpressionTimer.h" -#import "MPTimer.h" -#import "MPGlobal.h" -#import "MPLogging.h" - -@interface MPAdImpressionTimer () - -@property (nonatomic) UIView *adView; -@property (nonatomic) MPTimer *viewVisibilityTimer; -@property (nonatomic) NSTimeInterval firstVisibilityTimestamp; -@property (nonatomic) CGFloat pixelsRequiredForViewVisibility; -@property (nonatomic) CGFloat percentageRequiredForViewVisibility; -@property (nonatomic) NSTimeInterval requiredSecondsForImpression; - -@end - -@implementation MPAdImpressionTimer - -static const CGFloat kImpressionTimerInterval = 0.1; -static const NSTimeInterval kFirstVisibilityTimestampNone = -1; -static const CGFloat kDefaultPixelCountWhenUsingPercentage = CGFLOAT_MIN; - -- (instancetype)initWithRequiredSecondsForImpression:(NSTimeInterval)requiredSecondsForImpression requiredViewVisibilityPixels:(CGFloat)visibilityPixels -{ - if (self = [super init]) { - _viewVisibilityTimer = [MPTimer timerWithTimeInterval:kImpressionTimerInterval - target:self - selector:@selector(tick:) - repeats:YES - runLoopMode:NSRunLoopCommonModes]; - _requiredSecondsForImpression = requiredSecondsForImpression; - _pixelsRequiredForViewVisibility = visibilityPixels; - _firstVisibilityTimestamp = kFirstVisibilityTimestampNone; - } - - return self; -} - -- (instancetype)initWithRequiredSecondsForImpression:(NSTimeInterval)requiredSecondsForImpression requiredViewVisibilityPercentage:(CGFloat)visibilityPercentage -{ - if (self = [super init]) { - // Set `pixelsRequiredForViewVisibility` to a default invalid value so that we know to use the percent directly instead. - _pixelsRequiredForViewVisibility = kDefaultPixelCountWhenUsingPercentage; - - _viewVisibilityTimer = [MPTimer timerWithTimeInterval:kImpressionTimerInterval - target:self - selector:@selector(tick:) - repeats:YES - runLoopMode:NSRunLoopCommonModes]; - _requiredSecondsForImpression = requiredSecondsForImpression; - _percentageRequiredForViewVisibility = visibilityPercentage; - _firstVisibilityTimestamp = kFirstVisibilityTimestampNone; - } - - return self; -} - -- (void)dealloc -{ - [_viewVisibilityTimer invalidate]; - _delegate = nil; - _viewVisibilityTimer = nil; -} - -- (void)startTrackingView:(UIView *)view -{ - if (!view) { - MPLogInfo(@"Cannot track empty view"); - return; - } - - if (self.viewVisibilityTimer.isCountdownActive) { - MPLogInfo(@"viewVisibilityTimer is already started."); - return; - } - - [self.viewVisibilityTimer scheduleNow]; - self.adView = view; -} - -#pragma mark - MPTimer - -- (void)tick:(MPTimer *)timer -{ - CGFloat adViewArea = CGRectGetWidth(self.adView.bounds) * CGRectGetHeight(self.adView.bounds); - if (adViewArea == 0) { - MPLogInfo(@"ad view area cannot be 0"); - return; - } - - // If using pixels, recalculate the percent of the view that the pixels take up in case the view has resized - // since the previous tick. If using percent, this is irrelevant. - if (self.pixelsRequiredForViewVisibility != kDefaultPixelCountWhenUsingPercentage) { - // The following comment explains the meaning of Ads visible. - // Assume adView frame: (0, 0, 10, 10), self.requiredViewVisibilityPixels = 1. - // We get adViewArea = 10 * 10 = 100. percentVisible = (1 * 1) / 100 = 0.01 - // In this case, adView is considerated to be visible when the ratio of adView's intersection area with it's parent window is >= 0.01. - self.percentageRequiredForViewVisibility = (self.pixelsRequiredForViewVisibility * self.pixelsRequiredForViewVisibility) / adViewArea; - } - - // Calculate visibility based on percent - BOOL visible = MPViewIsVisible(self.adView) && MPViewIntersectsParentWindowWithPercent(self.adView, self.percentageRequiredForViewVisibility) && ([[UIApplication sharedApplication] applicationState] == UIApplicationStateActive); - - if (visible) { - NSTimeInterval now = [[NSDate date] timeIntervalSinceReferenceDate]; - - if (self.firstVisibilityTimestamp == kFirstVisibilityTimestampNone) { - self.firstVisibilityTimestamp = now; - } else if (now - self.firstVisibilityTimestamp >= self.requiredSecondsForImpression) { - // Invalidate the timer and tell the delegate it should track an impression. - self.firstVisibilityTimestamp = kFirstVisibilityTimestampNone; - [self.viewVisibilityTimer invalidate]; - self.viewVisibilityTimer = nil; - - [self.delegate adViewWillLogImpression:self.adView]; - } - } else { - self.firstVisibilityTimestamp = kFirstVisibilityTimestampNone; - } -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdServerCommunicator.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdServerCommunicator.h deleted file mode 100644 index c5ff64bc85..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdServerCommunicator.h +++ /dev/null @@ -1,45 +0,0 @@ -// -// MPAdServerCommunicator.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -#import "MPAdConfiguration.h" -#import "MPGlobal.h" - -@protocol MPAdServerCommunicatorDelegate; - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MPAdServerCommunicator : NSObject - -@property (nonatomic, weak) id delegate; -@property (nonatomic, assign, readonly) BOOL loading; - -- (id)initWithDelegate:(id)delegate; - -- (void)loadURL:(NSURL *)URL; -- (void)cancel; - -- (void)sendBeforeLoadUrlWithConfiguration:(MPAdConfiguration *)configuration; -- (void)sendAfterLoadUrlWithConfiguration:(MPAdConfiguration *)configuration - adapterLoadDuration:(NSTimeInterval)duration - adapterLoadResult:(MPAfterLoadResult)result; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@protocol MPAdServerCommunicatorDelegate - -@required -- (void)communicatorDidReceiveAdConfigurations:(NSArray *)configurations; -- (void)communicatorDidFailWithError:(NSError *)error; - -- (BOOL)isFullscreenAd; -- (NSString *)adUnitId; -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdServerCommunicator.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdServerCommunicator.m deleted file mode 100644 index d5731dba76..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdServerCommunicator.m +++ /dev/null @@ -1,358 +0,0 @@ -// -// MPAdServerCommunicator.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPAdServerCommunicator.h" - -#import "MoPub.h" -#import "MPAdConfiguration.h" -#import "MPAdServerKeys.h" -#import "MPAPIEndpoints.h" -#import "MPConsentManager.h" -#import "MPCoreInstanceProvider.h" -#import "MPError.h" -#import "MPHTTPNetworkSession.h" -#import "MPLogging.h" -#import "MPRateLimitManager.h" -#import "MPURLRequest.h" - -// Multiple response JSON fields -static NSString * const kAdResponsesKey = @"ad-responses"; -static NSString * const kAdResonsesMetadataKey = @"metadata"; -static NSString * const kAdResonsesContentKey = @"content"; - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MPAdServerCommunicator () - -@property (nonatomic, assign, readwrite) BOOL loading; -@property (nonatomic, strong) NSURLSessionTask * task; -@property (nonatomic, strong) NSDictionary *responseHeaders; -@property (nonatomic) NSArray *topLevelJsonKeys; - -@property (nonatomic, readonly) BOOL isRateLimited; - -@end - -@interface MPAdServerCommunicator (Consent) - -/** - Removes all ads.mopub.com cookies that are presently saved in NSHTTPCookieStorage to avoid inadvertently - sending personal data across the wire via cookies. This method is expected to be called every ad request. - */ -- (void)removeAllMoPubCookies; - -/** - Handles all server-side consent overrides, and strips them out of the response JSON - so that they are not propagated to the rest of the responses. - @param serverResponseJson Top-level JSON response from the server - @return Top-level JSON response stripped of all consent override fields - */ -- (NSDictionary *)handleConsentOverrides:(NSDictionary *)serverResponseJson; -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MPAdServerCommunicator - -- (id)initWithDelegate:(id)delegate -{ - self = [super init]; - if (self) { - _delegate = delegate; - _topLevelJsonKeys = @[kNextUrlMetadataKey, kFormatMetadataKey]; - } - return self; -} - -- (void)dealloc -{ - [self.task cancel]; -} - -#pragma mark - Public - -- (void)loadURL:(NSURL *)URL -{ - if (self.isRateLimited) { - [self didFailWithError:[NSError tooManyRequests]]; - return; - } - - [self cancel]; - - // Delete any cookies previous creatives have set before starting the load - [self removeAllMoPubCookies]; - - // Check to be sure the SDK is initialized before starting the request - if (!MoPub.sharedInstance.isSdkInitialized) { - [self failLoadForSDKInit]; - return; - } - - // Generate request - MPURLRequest * request = [[MPURLRequest alloc] initWithURL:URL]; - MPLogEvent([MPLogEvent adRequestedWithRequest:request]); - - __weak __typeof__(self) weakSelf = self; - self.task = [MPHTTPNetworkSession startTaskWithHttpRequest:request responseHandler:^(NSData * data, NSHTTPURLResponse * response) { - // Capture strong self for the duration of this block. - __typeof__(self) strongSelf = weakSelf; - - // Handle the response. - [strongSelf didFinishLoadingWithData:data]; - } errorHandler:^(NSError * error) { - // Capture strong self for the duration of this block. - __typeof__(self) strongSelf = weakSelf; - - // Handle the error. - [strongSelf didFailWithError:error]; - }]; - - self.loading = YES; -} - -- (void)cancel -{ - self.loading = NO; - [self.task cancel]; - self.task = nil; -} - -- (void)sendBeforeLoadUrlWithConfiguration:(MPAdConfiguration *)configuration -{ - if (configuration.beforeLoadURL != nil) { - MPURLRequest * request = [MPURLRequest requestWithURL:configuration.beforeLoadURL]; - [MPHTTPNetworkSession startTaskWithHttpRequest:request responseHandler:^(NSData * _Nonnull data, NSHTTPURLResponse * _Nonnull response) { - MPLogDebug(@"Successfully sent before load URL"); - } errorHandler:^(NSError * _Nonnull error) { - MPLogInfo(@"Failed to send before load URL"); - }]; - } -} - -- (void)sendAfterLoadUrlWithConfiguration:(MPAdConfiguration *)configuration - adapterLoadDuration:(NSTimeInterval)duration - adapterLoadResult:(MPAfterLoadResult)result -{ - NSArray * afterLoadUrls = [configuration afterLoadUrlsWithLoadDuration:duration loadResult:result]; - - for (NSURL * afterLoadUrl in afterLoadUrls) { - MPURLRequest * request = [MPURLRequest requestWithURL:afterLoadUrl]; - [MPHTTPNetworkSession startTaskWithHttpRequest:request responseHandler:^(NSData * _Nonnull data, NSHTTPURLResponse * _Nonnull response) { - MPLogDebug(@"Successfully sent after load URL: %@", afterLoadUrl); - } errorHandler:^(NSError * _Nonnull error) { - MPLogDebug(@"Failed to send after load URL: %@", afterLoadUrl); - }]; - } -} - -- (BOOL)isRateLimited { - return [[MPRateLimitManager sharedInstance] isRateLimitedForAdUnitId:self.delegate.adUnitId]; -} - -- (void)failLoadForSDKInit { - NSError *error = [NSError adLoadFailedBecauseSdkNotInitialized]; - MPLogEvent([MPLogEvent error:error message:nil]); - [self didFailWithError:error]; -} - -#pragma mark - Handlers - -- (void)didFailWithError:(NSError *)error { - // Do not record a logging event if we failed. - self.loading = NO; - [self.delegate communicatorDidFailWithError:error]; -} - -- (void)didFinishLoadingWithData:(NSData *)data { - // In the event that the @c adUnitIdUsedForConsent from @c MPConsentManager is @c nil or malformed, - // we should populate it with this known good adunit ID. This is to cover any edge case where the - // publisher manages to initialize with no adunit ID or a malformed adunit ID. - // It is known good since this is the success callback from the ad request. - [MPConsentManager.sharedManager setAdUnitIdUsedForConsent:self.delegate.adUnitId isKnownGood:YES]; - - // Headers from the original HTTP response are intentionally ignored as laid out - // by the Client Side Waterfall design doc. - // - // The response data is a JSON payload conforming to the structure: - // { - // "ad-responses": [ - // { - // "metadata": { - // "adm": "some advanced bidding payload", - // "x-ad-timeout-ms": 5000, - // "x-adtype": "rewarded_video", - // }, - // "content": "Ad markup goes here" - // } - // ], - // "x-next-url": "https:// ..." - // } - - NSError * error = nil; - NSDictionary * json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error]; - if (error) { - NSError * parseError = [NSError adResponseFailedToParseWithError:error]; - MPLogEvent([MPLogEvent error:parseError message:nil]); - [self didFailWithError:parseError]; - return; - } - - MPLogEvent([MPLogEvent adRequestReceivedResponse:json]); - - // Handle ad server overrides and strip them out of the top level JSON response. - json = [self handleAdResponseOverrides:json]; - - // Add top level json attributes to each ad server response so MPAdConfiguration contains - // all attributes for an ad response. - NSArray *responses = [self getFlattenJsonResponses:json keys:self.topLevelJsonKeys]; - if (responses == nil) { - NSError * noResponsesError = [NSError adResponsesNotFound]; - MPLogEvent([MPLogEvent error:noResponsesError message:nil]); - [self didFailWithError:noResponsesError]; - return; - } - - // Attempt to parse each ad response JSON into its corresponding MPAdConfiguration object. - NSMutableArray * configurations = [NSMutableArray arrayWithCapacity:responses.count]; - for (NSDictionary * responseJson in responses) { - // The `metadata` field is required and must contain at least one entry. The `content` field is optional. - // If there is a failure, this response should be ignored. - NSDictionary * metadata = responseJson[kAdResonsesMetadataKey]; - NSData * content = [responseJson[kAdResonsesContentKey] dataUsingEncoding:NSUTF8StringEncoding]; - if (metadata == nil || (metadata != nil && metadata.count == 0)) { - MPLogInfo(@"The metadata field is either non-existent or empty"); - continue; - } - - MPAdConfiguration * configuration = [[MPAdConfiguration alloc] initWithMetadata:metadata data:content isFullscreenAd:self.delegate.isFullscreenAd]; - if (configuration != nil) { - [configurations addObject:configuration]; - } else { - MPLogInfo(@"Failed to generate configuration from\nmetadata:\n%@\nbody:\n%@", metadata, responseJson[kAdResonsesContentKey]); - } - } - - // Set up rate limiting (has no effect if backoffMs is 0) - NSInteger backoffMs = [json[kBackoffMsKey] integerValue]; - NSString * backoffReason = json[kBackoffReasonKey]; - [[MPRateLimitManager sharedInstance] setRateLimitTimerWithAdUnitId:self.delegate.adUnitId - milliseconds:backoffMs - reason:backoffReason]; - - self.loading = NO; - [self.delegate communicatorDidReceiveAdConfigurations:configurations]; -} - -// Add top level json attributes to each ad server response so MPAdConfiguration contains -// all attributes for an ad response. -- (NSArray *)getFlattenJsonResponses:(NSDictionary *)json keys:(NSArray *)keys -{ - NSMutableArray *responses = json[kAdResponsesKey]; - if (responses == nil) { - return nil; - } - - NSMutableArray *flattenResponses = [NSMutableArray new]; - for (NSDictionary *response in responses) { - NSMutableDictionary *flattenResponse = [response mutableCopy]; - flattenResponse[kAdResonsesMetadataKey] = [response[kAdResonsesMetadataKey] mutableCopy]; - - for (NSString *key in keys) { - flattenResponse[kAdResonsesMetadataKey][key] = json[key]; - } - [flattenResponses addObject:flattenResponse]; - } - return flattenResponses; -} - -// Process any top level json attributes that trigger state changes within the SDK. -/** - Handles all server-side overrides, and strips them out of the response JSON - so that they are not propagated to the rest of the responses. - @param serverResponseJson Top-level JSON response from the server - @return Top-level JSON response stripped of all override fields - */ -- (NSDictionary *)handleAdResponseOverrides:(NSDictionary *)serverResponseJson { - // Handle Consent - NSMutableDictionary * json = [[self handleConsentOverrides:serverResponseJson] mutableCopy]; - - // Handle the enabling of debug logging. - NSNumber * debugLoggingEnabled = json[kEnableDebugLogging]; - if (debugLoggingEnabled != nil && [debugLoggingEnabled boolValue]) { - MPLogInfo(@"Debug logging enabled"); - MPLogging.consoleLogLevel = MPBLogLevelDebug; - - json[kEnableDebugLogging] = nil; - } - - return json; -} - -#pragma mark - Internal - -- (NSError *)errorForStatusCode:(NSInteger)statusCode -{ - NSString *errorMessage = [NSString stringWithFormat: - NSLocalizedString(@"MoPub returned status code %d.", - @"Status code error"), - statusCode]; - NSDictionary *errorInfo = [NSDictionary dictionaryWithObject:errorMessage - forKey:NSLocalizedDescriptionKey]; - return [NSError errorWithDomain:@"mopub.com" code:statusCode userInfo:errorInfo]; -} - -@end - -#pragma mark - Consent - -@implementation MPAdServerCommunicator (Consent) - -- (void)removeAllMoPubCookies { - // Make NSURL from base URL - NSURL *moPubBaseURL = [NSURL URLWithString:[MPAPIEndpoints baseURL]]; - - // Get array of cookies with the base URL, and delete each one - NSArray * cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:moPubBaseURL]; - for (NSHTTPCookie * cookie in cookies) { - [[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie]; - } -} - -/** - Handles all server-side consent overrides, and strips them out of the response JSON - so that they are not propagated to the rest of the responses. - @param serverResponseJson Top-level JSON response from the server - @return Top-level JSON response stripped of all consent override fields - */ -- (NSDictionary *)handleConsentOverrides:(NSDictionary *)serverResponseJson { - // Nothing to handle. - if (serverResponseJson == nil) { - return nil; - } - - // Handle the consent overrides - [[MPConsentManager sharedManager] forceStatusShouldForceExplicitNo:[serverResponseJson[kForceExplicitNoKey] boolValue] - shouldInvalidateConsent:[serverResponseJson[kInvalidateConsentKey] boolValue] - shouldReacquireConsent:[serverResponseJson[kReacquireConsentKey] boolValue] - shouldForceGDPRApplicability:[serverResponseJson[kForceGDPRAppliesKey] boolValue] - consentChangeReason:serverResponseJson[kConsentChangedReasonKey] - shouldBroadcast:YES]; - - // Strip out the consent overrides - NSMutableDictionary * parsedResponseJson = [serverResponseJson mutableCopy]; - parsedResponseJson[kForceExplicitNoKey] = nil; - parsedResponseJson[kInvalidateConsentKey] = nil; - parsedResponseJson[kReacquireConsentKey] = nil; - parsedResponseJson[kForceGDPRAppliesKey] = nil; - parsedResponseJson[kConsentChangedReasonKey] = nil; - - return parsedResponseJson; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdServerURLBuilder.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdServerURLBuilder.h deleted file mode 100644 index 257514bb9d..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdServerURLBuilder.h +++ /dev/null @@ -1,113 +0,0 @@ -// -// MPAdServerURLBuilder.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPAdTargeting.h" -#import "MPEngineInfo.h" -#import "MPURL.h" - -@interface MPAdServerURLBuilder : NSObject - -/** - Stores the information of the engine used to render the MoPub SDK. - */ -@property (class, nonatomic, strong) MPEngineInfo * engineInformation; - -/** - * Returns an NSURL object given an endpoint and a dictionary of query parameters/values - */ -+ (MPURL *)URLWithEndpointPath:(NSString *)endpointPath postData:(NSDictionary *)parameters; - -@end - -@interface MPAdServerURLBuilder (Ad) - -+ (MPURL *)URLWithAdUnitID:(NSString *)adUnitID - targeting:(MPAdTargeting *)targeting; - -+ (MPURL *)URLWithAdUnitID:(NSString *)adUnitID - targeting:(MPAdTargeting *)targeting - desiredAssets:(NSArray *)assets - viewability:(BOOL)viewability; - -+ (MPURL *)URLWithAdUnitID:(NSString *)adUnitID - targeting:(MPAdTargeting *)targeting - desiredAssets:(NSArray *)assets - adSequence:(NSInteger)adSequence - viewability:(BOOL)viewability; - -@end - -@interface MPAdServerURLBuilder (Open) - -/** - Constructs the conversion tracking URL using current consent state, SDK state, and @c appID parameter. - @param appID The App ID to be included in the URL. - @returns URL to the open endpoint configuring for conversion tracking. - */ -+ (MPURL *)conversionTrackingURLForAppID:(NSString *)appID; - -/** - Constructs the session tracking URL using current consent state and SDK state. - @returns URL to the open endpoint configuring for session tracking. - */ -+ (MPURL *)sessionTrackingURL; - -@end - -@interface MPAdServerURLBuilder (Consent) - -/** - Constructs the consent synchronization endpoint URL using the current consent manager - state. - @returns URL to the consent synchronization endpoint. - */ -+ (MPURL *)consentSynchronizationUrl; - -/** - Constructs the URL to fetch the consent dialog using the current consent manager state. - @returns URL to the consent dialog endpoint - */ -+ (MPURL *)consentDialogURL; - -@end - -@interface MPAdServerURLBuilder (Native) - -/** - Constructs the URL to fetch the native ad positions for the given ad unit ID. - @param adUnitId Native ad unit ID to fetch positioning information. - @return URL for the native position request if successful; otherwise @c nil. - */ -+ (MPURL *)nativePositionUrlForAdUnitId:(NSString *)adUnitId; - -@end - -@interface MPAdServerURLBuilder (Rewarded) - -/** - Appends additional reward information to the source rewarded completion. - @param sourceUrl The source rewarded completion URL given by the server. - @param customerId Optional customer ID to associate with the reward. - @param rewardType Optional reward type to associate with the customer. - Both @c rewardType and @c rewardAmount must be present in order for them to be added. - @param rewardAmount Optional reward amount to associate with the reward type. - Both @c rewardType and @c rewardAmount must be present in order for them to be added. - @param customEventName Optional name of the custom event class used to render the rewarded ad. - @param additionalData Optional additional data passed in by the publisher to be sent back to - their reward server. - @return Expandeded URL if successful; otherwise @c nil. - */ -+ (MPURL *)rewardedCompletionUrl:(NSString *)sourceUrl - withCustomerId:(NSString *)customerId - rewardType:(NSString *)rewardType - rewardAmount:(NSNumber *)rewardAmount - customEventName:(NSString *)customEventName - additionalData:(NSString *)additionalData; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdServerURLBuilder.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdServerURLBuilder.m deleted file mode 100644 index d24dd38df0..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdServerURLBuilder.m +++ /dev/null @@ -1,522 +0,0 @@ -// -// MPAdServerURLBuilder.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPAdServerURLBuilder.h" - -#import - -#import "MPAdServerKeys.h" -#import "MPAPIEndpoints.h" -#import "MPConsentManager.h" -#import "MPConstants.h" -#import "MPCoreInstanceProvider+MRAID.h" -#import "MPDeviceInformation.h" -#import "MPError.h" -#import "MPGeolocationProvider.h" -#import "MPGlobal.h" -#import "MPIdentityProvider.h" -#import "MPLogging.h" -#import "MPMediationManager.h" -#import "MPRateLimitManager.h" -#import "MPReachabilityManager.h" -#import "MPViewabilityTracker.h" -#import "NSString+MPAdditions.h" -#import "NSString+MPConsentStatus.h" - -static NSString * const kMoPubInterfaceOrientationPortrait = @"p"; -static NSString * const kMoPubInterfaceOrientationLandscape = @"l"; -static NSInteger const kAdSequenceNone = -1; - -@interface MPAdServerURLBuilder () - -/** - * Builds an NSMutableDictionary with all generic URL parameters and their values. The `id` URL parameter is gathered from - * the `idParameter` method parameter because it has different uses depending on the URL. This base set of parameters - * includes the following: - * - ID Parameter (`id`) - * - Server API Version Used (`v`) - * - SDK Version (`nv`) - * - Application Version (`av`) - * - GDPR Region Applicable (`gdpr_applies`) - * - Current Consent Status (`current_consent_status`) - * - Limit Ad Tracking Status (`dnt`) - * - Bundle Identifier (`bundle`) - * - IF AVAILABLE: Consented Privacy Policy Version (`consented_privacy_policy_version`) - * - IF AVAILABLE: Consented Vendor List Version (`consented_vendor_list_version`) - */ -+ (NSMutableDictionary *)baseParametersDictionaryWithIDParameter:(NSString *)idParameter; - -/** - * Builds an NSMutableDictionary with all generic URL parameters above and their values, but with the addition of IDFA. - * If @c usingIDFAForConsent is @c YES, the IDFA will be gathered from MPConsentManager (which may be nil without - * consent). Otherwise, the IDFA will be taken from MPIdentityProvider, which will always have a value, but may be - * MoPub's value. - */ -+ (NSMutableDictionary *)baseParametersDictionaryWithIDFAUsingIDFAForConsent:(BOOL)usingIDFAForConsent - withIDParameter:(NSString *)idParameter; - -@end - -@implementation MPAdServerURLBuilder - -#pragma mark - Static Properties - -static MPEngineInfo * _engineInfo = nil; - -+ (MPEngineInfo *)engineInformation { - return _engineInfo; -} - -+ (void)setEngineInformation:(MPEngineInfo *)engineInformation { - _engineInfo = engineInformation; -} - -#pragma mark - URL Building - -+ (MPURL *)URLWithEndpointPath:(NSString *)endpointPath postData:(NSDictionary *)parameters { - // Build the full URL string - NSURLComponents * components = [MPAPIEndpoints baseURLComponentsWithPath:endpointPath]; - return [MPURL URLWithComponents:components postData:parameters]; -} - -+ (NSMutableDictionary *)baseParametersDictionaryWithIDParameter:(NSString *)idParameter { - MPConsentManager * manager = MPConsentManager.sharedManager; - NSMutableDictionary * queryParameters = [NSMutableDictionary dictionary]; - - // REQUIRED: ID Parameter (used for different things depending on which URL, take from method parameter) - queryParameters[kAdServerIDKey] = idParameter; - - // REQUIRED: Server API Version - queryParameters[kServerAPIVersionKey] = MP_SERVER_VERSION; - - // REQUIRED: SDK Version - queryParameters[kSDKVersionKey] = MP_SDK_VERSION; - - // REQUIRED: SDK Engine Information - queryParameters[kSDKEngineNameKey] = [self engineNameValue]; - queryParameters[kSDKEngineVersionKey] = [self engineVersionValue]; - - // REQUIRED: Application Version - queryParameters[kApplicationVersionKey] = [self applicationVersion]; - - // REQUIRED: GDPR region applicable - if (manager.isGDPRApplicable != MPBoolUnknown) { - queryParameters[kGDPRAppliesKey] = manager.isGDPRApplicable > 0 ? @"1" : @"0"; - } - - // REQUIRED: GDPR applicable was forced - queryParameters[kForceGDPRAppliesKey] = manager.forceIsGDPRApplicable ? @"1" : @"0"; - - // REQUIRED: Current consent status - queryParameters[kCurrentConsentStatusKey] = [NSString stringFromConsentStatus:manager.currentStatus]; - - // REQUIRED: DNT, Bundle - queryParameters[kDoNotTrackIdKey] = [MPIdentityProvider advertisingTrackingEnabled] ? nil : @"1"; - queryParameters[kBundleKey] = [[NSBundle mainBundle] bundleIdentifier]; - - // REQUIRED: MoPub ID - // After user consented IDFA access, UDID uses IDFA and thus different from MoPub ID. - // Otherwise, UDID is the same as MoPub ID. - queryParameters[kMoPubIDKey] = [MPIdentityProvider unobfuscatedMoPubIdentifier]; - - // OPTIONAL: Consented versions - queryParameters[kConsentedPrivacyPolicyVersionKey] = manager.consentedPrivacyPolicyVersion; - queryParameters[kConsentedVendorListVersionKey] = manager.consentedVendorListVersion; - - return queryParameters; -} - -+ (NSMutableDictionary *)baseParametersDictionaryWithIDFAUsingIDFAForConsent:(BOOL)usingIDFAForConsent - withIDParameter:(NSString *)idParameter { - MPConsentManager * manager = MPConsentManager.sharedManager; - NSMutableDictionary * queryParameters = [self baseParametersDictionaryWithIDParameter:idParameter]; - - // OPTIONAL: IDFA if available - if (usingIDFAForConsent) { - queryParameters[kIdfaKey] = manager.ifaForConsent; - } else { - queryParameters[kIdfaKey] = [MPIdentityProvider identifier]; - } - - return queryParameters; -} - -+ (NSString *)applicationVersion { - static NSString * gApplicationVersion; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - gApplicationVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"]; - }); - - return gApplicationVersion; -} - -+ (NSString *)engineNameValue { - return self.engineInformation.name; -} - -+ (NSString *)engineVersionValue { - return self.engineInformation.version; -} - -@end - -@implementation MPAdServerURLBuilder (Ad) - -+ (MPURL *)URLWithAdUnitID:(NSString *)adUnitID - targeting:(MPAdTargeting *)targeting -{ - return [self URLWithAdUnitID:adUnitID - targeting:targeting - desiredAssets:nil - viewability:YES]; -} - -+ (MPURL *)URLWithAdUnitID:(NSString *)adUnitID - targeting:(MPAdTargeting *)targeting - desiredAssets:(NSArray *)assets - viewability:(BOOL)viewability -{ - - - return [self URLWithAdUnitID:adUnitID - targeting:targeting - desiredAssets:assets - adSequence:kAdSequenceNone - viewability:viewability]; -} - -+ (MPURL *)URLWithAdUnitID:(NSString *)adUnitID - targeting:(MPAdTargeting *)targeting - desiredAssets:(NSArray *)assets - adSequence:(NSInteger)adSequence - viewability:(BOOL)viewability -{ - NSMutableDictionary * queryParams = [self baseParametersDictionaryWithIDFAUsingIDFAForConsent:NO - withIDParameter:adUnitID]; - - queryParams[kOrientationKey] = [self orientationValue]; - queryParams[kScaleFactorKey] = [self scaleFactorValue]; - queryParams[kTimeZoneKey] = [self timeZoneValue]; - queryParams[kIsMRAIDEnabledSDKKey] = [self isMRAIDEnabledSDKValue]; - queryParams[kConnectionTypeKey] = [self connectionTypeValue]; - queryParams[kCarrierNameKey] = MPDeviceInformation.carrierName; - queryParams[kISOCountryCodeKey] = MPDeviceInformation.isoCountryCode; - queryParams[kMobileNetworkCodeKey] = MPDeviceInformation.mobileNetworkCode; - queryParams[kMobileCountryCodeKey] = MPDeviceInformation.mobileCountryCode; - queryParams[kDeviceNameKey] = [self deviceNameValue]; - queryParams[kDesiredAdAssetsKey] = [self desiredAdAssetsValue:assets]; - queryParams[kAdSequenceKey] = [self adSequenceValue:adSequence]; - queryParams[kScreenResolutionWidthKey] = [self physicalScreenResolutionWidthValue]; - queryParams[kScreenResolutionHeightKey] = [self physicalScreenResolutionHeightValue]; - queryParams[kCreativeSafeWidthKey] = [self creativeSafeWidthValue:targeting.creativeSafeSize]; - queryParams[kCreativeSafeHeightKey] = [self creativeSafeHeightValue:targeting.creativeSafeSize]; - queryParams[kAppTransportSecurityStatusKey] = [self appTransportSecurityStatusValue]; - queryParams[kKeywordsKey] = [self keywordsValue:targeting.keywords]; - queryParams[kUserDataKeywordsKey] = [self userDataKeywordsValue:targeting.userDataKeywords]; - queryParams[kViewabilityStatusKey] = [self viewabilityStatusValue:viewability]; - queryParams[kAdvancedBiddingKey] = [self advancedBiddingValue]; - queryParams[kBackoffMsKey] = [self backoffMillisecondsValueForAdUnitID:adUnitID]; - queryParams[kBackoffReasonKey] = [[MPRateLimitManager sharedInstance] lastRateLimitReasonForAdUnitId:adUnitID]; - [queryParams addEntriesFromDictionary:self.locationInformation]; - - return [self URLWithEndpointPath:MOPUB_API_PATH_AD_REQUEST postData:queryParams]; -} - -+ (NSString *)orientationValue -{ - // Starting with iOS8, the orientation of the device is taken into account when - // requesting the key window's bounds. - CGRect appBounds = [UIApplication sharedApplication].keyWindow.bounds; - return appBounds.size.width > appBounds.size.height ? kMoPubInterfaceOrientationLandscape : kMoPubInterfaceOrientationPortrait; -} - -+ (NSString *)scaleFactorValue -{ - return [NSString stringWithFormat:@"%.1f", MPDeviceScaleFactor()]; -} - -+ (NSString *)timeZoneValue -{ - static NSDateFormatter *formatter; - @synchronized(self) - { - if (!formatter) formatter = [[NSDateFormatter alloc] init]; - } - [formatter setDateFormat:@"Z"]; - NSDate *today = [NSDate date]; - return [formatter stringFromDate:today]; -} - -+ (NSString *)isMRAIDEnabledSDKValue -{ - BOOL isMRAIDEnabled = [[MPCoreInstanceProvider sharedProvider] isMraidJavascriptAvailable] && - NSClassFromString(@"MPMRAIDBannerCustomEvent") != Nil && - NSClassFromString(@"MPMRAIDInterstitialCustomEvent") != Nil; - return isMRAIDEnabled ? @"1" : nil; -} - -+ (NSString *)connectionTypeValue -{ - return [NSString stringWithFormat:@"%ld", (long)MPReachabilityManager.sharedManager.currentStatus]; -} - -+ (NSString *)deviceNameValue -{ - NSString *deviceName = [[UIDevice currentDevice] mp_hardwareDeviceName]; - return deviceName; -} - -+ (NSString *)desiredAdAssetsValue:(NSArray *)assets -{ - NSString *concatenatedAssets = [assets componentsJoinedByString:@","]; - return [concatenatedAssets length] ? concatenatedAssets : nil; -} - -+ (NSString *)adSequenceValue:(NSInteger)adSequence -{ - return (adSequence >= 0) ? [NSString stringWithFormat:@"%ld", (long)adSequence] : nil; -} - -+ (NSString *)physicalScreenResolutionWidthValue -{ - return [NSString stringWithFormat:@"%.0f", MPScreenResolution().width]; -} - -+ (NSString *)physicalScreenResolutionHeightValue -{ - return [NSString stringWithFormat:@"%.0f", MPScreenResolution().height]; -} - -+ (NSString *)creativeSafeWidthValue:(CGSize)creativeSafeSize -{ - CGFloat scale = MPDeviceScaleFactor(); - return [NSString stringWithFormat:@"%.0f", creativeSafeSize.width * scale]; -} - -+ (NSString *)creativeSafeHeightValue:(CGSize)creativeSafeSize -{ - CGFloat scale = MPDeviceScaleFactor(); - return [NSString stringWithFormat:@"%.0f", creativeSafeSize.height * scale]; -} - -+ (NSString *)appTransportSecurityStatusValue -{ - return [NSString stringWithFormat:@"%@", @(MPDeviceInformation.appTransportSecuritySettings)]; -} - -+ (NSString *)keywordsValue:(NSString *)keywords -{ - return keywords; -} - -+ (NSString *)userDataKeywordsValue:(NSString *)userDataKeywords -{ - // Avoid sending user data keywords if we are not allowed to collect personal info - if (![MPConsentManager sharedManager].canCollectPersonalInfo) { - return nil; - } - - return userDataKeywords; -} - -+ (NSString *)viewabilityStatusValue:(BOOL)isViewabilityEnabled { - if (!isViewabilityEnabled) { - return nil; - } - - return [NSString stringWithFormat:@"%d", (int)[MPViewabilityTracker enabledViewabilityVendors]]; -} - -+ (NSString *)advancedBiddingValue { - // Retrieve the tokens - NSDictionary * tokens = MPMediationManager.sharedManager.advancedBiddingTokens; - if (tokens == nil) { - return nil; - } - - // Serialize the JSON dictionary into a JSON string. - NSError * error = nil; - NSData * jsonData = [NSJSONSerialization dataWithJSONObject:tokens options:0 error:&error]; - if (jsonData == nil) { - NSError * jsonError = [NSError serializationOfJson:tokens failedWithError:error]; - MPLogEvent([MPLogEvent error:jsonError message:nil]); - return nil; - } - - return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; -} - -+ (NSString *)backoffMillisecondsValueForAdUnitID:(NSString *)adUnitID { - NSUInteger lastRateLimitWaitTimeMilliseconds = [[MPRateLimitManager sharedInstance] lastRateLimitMillisecondsForAdUnitId:adUnitID]; - return lastRateLimitWaitTimeMilliseconds > 0 ? [NSString stringWithFormat:@"%@", @(lastRateLimitWaitTimeMilliseconds)] : nil; -} - -+ (NSDictionary *)adapterInformation { - return MPMediationManager.sharedManager.adRequestPayload; -} - -+ (NSDictionary *)locationInformation { - // Not allowed to collect location because it is PII - if (![MPConsentManager.sharedManager canCollectPersonalInfo]) { - return @{}; - } - - NSMutableDictionary *locationDict = [NSMutableDictionary dictionary]; - - CLLocation *bestLocation = MPGeolocationProvider.sharedProvider.lastKnownLocation; - if (bestLocation && bestLocation.horizontalAccuracy >= 0) { - locationDict[kLocationLatitudeLongitudeKey] = [NSString stringWithFormat:@"%@,%@", - @(bestLocation.coordinate.latitude), - @(bestLocation.coordinate.longitude)]; - if (bestLocation.horizontalAccuracy) { - locationDict[kLocationHorizontalAccuracy] = [NSString stringWithFormat:@"%@", @(bestLocation.horizontalAccuracy)]; - } - - // Only SDK-specified locations are allowed. - locationDict[kLocationIsFromSDK] = @"1"; - - NSTimeInterval locationLastUpdatedMillis = [[NSDate date] timeIntervalSinceDate:bestLocation.timestamp] * 1000.0; - locationDict[kLocationLastUpdatedMilliseconds] = [NSString stringWithFormat:@"%.0f", locationLastUpdatedMillis]; - } - - return locationDict; -} - -@end - -@implementation MPAdServerURLBuilder (Open) - -+ (MPURL *)conversionTrackingURLForAppID:(NSString *)appID { - return [self openEndpointURLWithIDParameter:appID isSessionTracking:NO]; -} - -+ (MPURL *)sessionTrackingURL { - NSString *bundleIdentifier = [[NSBundle mainBundle] bundleIdentifier]; - return [self openEndpointURLWithIDParameter:bundleIdentifier isSessionTracking:YES]; -} - -+ (MPURL *)openEndpointURLWithIDParameter:(NSString *)idParameter isSessionTracking:(BOOL)isSessionTracking { - NSMutableDictionary * queryParameters = [self baseParametersDictionaryWithIDFAUsingIDFAForConsent:NO - withIDParameter:idParameter]; - - // OPTIONAL: Include Session Tracking Parameter if needed - if (isSessionTracking) { - queryParameters[kOpenEndpointSessionTrackingKey] = @"1"; - } - - return [self URLWithEndpointPath:MOPUB_API_PATH_OPEN postData:queryParameters]; -} - -@end - -@implementation MPAdServerURLBuilder (Consent) - -#pragma mark - Consent URLs - -+ (MPURL *)consentSynchronizationUrl { - MPConsentManager * manager = MPConsentManager.sharedManager; - - // REQUIRED: Ad unit ID for consent may be empty if the publisher - // never initialized the SDK. - NSMutableDictionary * postData = [self baseParametersDictionaryWithIDFAUsingIDFAForConsent:YES - withIDParameter:manager.adUnitIdUsedForConsent]; - - // OPTIONAL: Last synchronized consent status, last changed reason, - // last changed timestamp in milliseconds - postData[kLastSynchronizedConsentStatusKey] = manager.lastSynchronizedStatus; - postData[kConsentChangedReasonKey] = manager.lastChangedReason; - postData[kLastChangedMsKey] = manager.lastChangedTimestampInMilliseconds > 0 ? [NSString stringWithFormat:@"%llu", (unsigned long long)manager.lastChangedTimestampInMilliseconds] : nil; - - // OPTIONAL: Cached IAB Vendor List Hash Key - postData[kCachedIabVendorListHashKey] = manager.iabVendorListHash; - - // OPTIONAL: Server extras - postData[kExtrasKey] = manager.extras; - - // OPTIONAL: Force GDPR appliciability has changed - postData[kForcedGDPRAppliesChangedKey] = manager.isForcedGDPRAppliesTransition ? @"1" : nil; - - return [self URLWithEndpointPath:MOPUB_API_PATH_CONSENT_SYNC postData:postData]; -} - -+ (MPURL *)consentDialogURL { - MPConsentManager * manager = MPConsentManager.sharedManager; - - // REQUIRED: Ad unit ID for consent; may be empty if the publisher - // never initialized the SDK. - NSMutableDictionary * postData = [self baseParametersDictionaryWithIDParameter:manager.adUnitIdUsedForConsent]; - - // REQUIRED: Language - postData[kLanguageKey] = manager.currentLanguageCode; - - return [self URLWithEndpointPath:MOPUB_API_PATH_CONSENT_DIALOG postData:postData]; -} - -@end - -@implementation MPAdServerURLBuilder (Native) - -+ (MPURL *)nativePositionUrlForAdUnitId:(NSString *)adUnitId { - // No ad unit ID - if (adUnitId == nil) { - return nil; - } - - NSDictionary * queryItems = [self baseParametersDictionaryWithIDFAUsingIDFAForConsent:NO withIDParameter:adUnitId]; - return [self URLWithEndpointPath:MOPUB_API_PATH_NATIVE_POSITIONING postData:queryItems]; -} - -@end - -@implementation MPAdServerURLBuilder (Rewarded) - -+ (MPURL *)rewardedCompletionUrl:(NSString *)sourceUrl - withCustomerId:(NSString *)customerId - rewardType:(NSString *)rewardType - rewardAmount:(NSNumber *)rewardAmount - customEventName:(NSString *)customEventName - additionalData:(NSString *)additionalData { - - NSURLComponents * components = [NSURLComponents componentsWithString:sourceUrl]; - - // Build the additional query parameters to be appended to the existing set. - NSMutableDictionary * postData = [NSMutableDictionary dictionary]; - - // REQUIRED: Rewarded APIVersion - postData[kServerAPIVersionKey] = MP_REWARDED_API_VERSION; - - // REQUIRED: SDK Version - postData[kSDKVersionKey] = MP_SDK_VERSION; - - // OPTIONAL: Customer ID - if (customerId != nil && customerId.length > 0) { - postData[kCustomerIdKey] = customerId; - } - - // OPTIONAL: Rewarded currency and amount - if (rewardType != nil && rewardType.length > 0 && rewardAmount != nil) { - postData[kRewardedCurrencyNameKey] = rewardType; - postData[kRewardedCurrencyAmountKey] = [NSString stringWithFormat:@"%i", rewardAmount.intValue]; - } - - // OPTIONAL: Rewarded custom event name - if (customEventName != nil) { - postData[kRewardedCustomEventNameKey] = customEventName; - } - - // OPTIONAL: Additional publisher data - if (additionalData != nil) { - postData[kRewardedCustomDataKey] = additionalData; - } - - return [MPURL URLWithComponents:components postData:postData]; -} - -@end - diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPClosableView.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPClosableView.h deleted file mode 100644 index f131ef1964..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPClosableView.h +++ /dev/null @@ -1,68 +0,0 @@ -// -// MPClosableView.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -extern const CGSize kCloseRegionSize; - -enum { - MPClosableViewCloseButtonLocationTopRight, - MPClosableViewCloseButtonLocationTopLeft, - MPClosableViewCloseButtonLocationTopCenter, - MPClosableViewCloseButtonLocationBottomRight, - MPClosableViewCloseButtonLocationBottomLeft, - MPClosableViewCloseButtonLocationBottomCenter, - MPClosableViewCloseButtonLocationCenter -}; -typedef NSInteger MPClosableViewCloseButtonLocation; - -enum { - MPClosableViewCloseButtonTypeNone, - MPClosableViewCloseButtonTypeTappableWithoutImage, - MPClosableViewCloseButtonTypeTappableWithImage, -}; -typedef NSInteger MPClosableViewCloseButtonType; - -CGRect MPClosableViewCustomCloseButtonFrame(CGSize size, MPClosableViewCloseButtonLocation closeButtonLocation); - -@protocol MPClosableViewDelegate; - -/** - * `MPClosableView` is composed of a content view and a close button. The close button can - * be positioned at any corner, the center of top and bottom edges, and the center of the view. - * The close button can either be a button that is tappable with image, tappable without an image, - * and completely disabled altogether. Finally, `MPClosableView` keeps track as to whether or not - * it has been tapped. - */ -@interface MPClosableView : UIView - -@property (nonatomic, weak) id delegate; -@property (nonatomic, assign) MPClosableViewCloseButtonType closeButtonType; -@property (nonatomic, assign) MPClosableViewCloseButtonLocation closeButtonLocation; -@property (nonatomic, readonly) BOOL wasTapped; -@property (nonatomic, strong, readonly) UIButton *closeButton; - -- (instancetype)initWithFrame:(CGRect)frame - contentView:(UIView *)contentView - delegate:(id)delegate; - -@end - -/** - * `MPClosableViewDelegate` allows an object that implements `MPClosableViewDelegate` to - * be notified when the close button of the `MPClosableView` has been tapped. - */ -@protocol MPClosableViewDelegate - -- (void)closeButtonPressed:(MPClosableView *)closableView; - -@optional - -- (void)closableView:(MPClosableView *)closableView didMoveToWindow:(UIWindow *)window; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPClosableView.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPClosableView.m deleted file mode 100644 index c6b30928aa..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPClosableView.m +++ /dev/null @@ -1,231 +0,0 @@ -// -// MPClosableView.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPClosableView.h" -#import "MPGlobal.h" -#import "MPUserInteractionGestureRecognizer.h" - -/** - Per MRAID spec https://www.iab.com/wp-content/uploads/2015/08/IAB_MRAID_v2_FINAL.pdf, page 31, the - close event region should be 50x50 expandable and interstitial ads. On page 34, the 50x50 size applies - to resized ads as well. - */ -const CGSize kCloseRegionSize = {.width = 50, .height = 50}; - -static NSString *const kExpandableCloseButtonImageName = @"MPCloseButtonX.png"; - -/** - Provided the ad size and close button location, returns the frame of the close button. - Note: The provided ad size is assumed to be at least 50x50, otherwise the return value is undefined. - @param adSize The size of the ad - @param closeButtonLocation The location of the close button - */ -CGRect MPClosableViewCustomCloseButtonFrame(CGSize adSize, MPClosableViewCloseButtonLocation closeButtonLocation) -{ - CGRect closeButtonFrame = CGRectMake(0.0f, 0.0f, kCloseRegionSize.width, kCloseRegionSize.height); - - switch (closeButtonLocation) { - case MPClosableViewCloseButtonLocationTopRight: - closeButtonFrame.origin = CGPointMake(adSize.width-kCloseRegionSize.width, 0.0f); - break; - case MPClosableViewCloseButtonLocationTopLeft: - closeButtonFrame.origin = CGPointMake(0.0f, 0.0f); - break; - case MPClosableViewCloseButtonLocationTopCenter: - closeButtonFrame.origin = CGPointMake((adSize.width-kCloseRegionSize.width) / 2.0f, 0.0f); - break; - case MPClosableViewCloseButtonLocationBottomRight: - closeButtonFrame.origin = CGPointMake(adSize.width-kCloseRegionSize.width, adSize.height-kCloseRegionSize.height); - break; - case MPClosableViewCloseButtonLocationBottomLeft: - closeButtonFrame.origin = CGPointMake(0.0f, adSize.height-kCloseRegionSize.height); - break; - case MPClosableViewCloseButtonLocationBottomCenter: - closeButtonFrame.origin = CGPointMake((adSize.width-kCloseRegionSize.width) / 2.0f, adSize.height-kCloseRegionSize.height); - break; - case MPClosableViewCloseButtonLocationCenter: - closeButtonFrame.origin = CGPointMake((adSize.width-kCloseRegionSize.width) / 2.0f, (adSize.height-kCloseRegionSize.height) / 2.0f); - break; - default: // top right - closeButtonFrame.origin = CGPointMake(adSize.width-kCloseRegionSize.width, 0.0f); - break; - } - - return closeButtonFrame; -} - -@interface MPClosableView () - -@property (nonatomic, strong, readwrite) UIButton *closeButton; -@property (nonatomic, strong) UIImage *closeButtonImage; -@property (nonatomic, strong) MPUserInteractionGestureRecognizer *userInteractionRecognizer; -@property (nonatomic, assign) BOOL wasTapped; - -@end - -@implementation MPClosableView - -- (instancetype)initWithFrame:(CGRect)frame - contentView:(UIView *)contentView - delegate:(id)delegate { - self = [super initWithFrame:frame]; - - if (self) { - self.backgroundColor = [UIColor clearColor]; - self.opaque = NO; - self.clipsToBounds = YES; - - _delegate = delegate; - - // Set up close button - _closeButtonLocation = MPClosableViewCloseButtonLocationTopRight; - - _userInteractionRecognizer = [[MPUserInteractionGestureRecognizer alloc] initWithTarget:self action:@selector(handleInteraction:)]; - _userInteractionRecognizer.cancelsTouchesInView = NO; - [self addGestureRecognizer:_userInteractionRecognizer]; - _userInteractionRecognizer.delegate = self; - - _closeButtonImage = [UIImage imageNamed:MPResourcePathForResource(kExpandableCloseButtonImageName)]; - - _closeButton = [UIButton buttonWithType:UIButtonTypeCustom]; - _closeButton.backgroundColor = [UIColor clearColor]; - _closeButton.accessibilityLabel = @"Close Interstitial Ad"; - - [_closeButton addTarget:self action:@selector(closeButtonPressed) forControlEvents:UIControlEventTouchUpInside]; - - [self setCloseButtonType:MPClosableViewCloseButtonTypeTappableWithImage]; - - [self addSubview:_closeButton]; - - // Set up web view - contentView.frame = self.bounds; - [self addSubview:contentView]; - } - - return self; -} - -- (void)dealloc -{ - _userInteractionRecognizer.delegate = nil; - [self.userInteractionRecognizer removeTarget:self action:nil]; -} - -- (void)layoutSubviews -{ - [super layoutSubviews]; - if (@available(iOS 11, *)) { - self.closeButton.translatesAutoresizingMaskIntoConstraints = NO; - - NSMutableArray *constraints = [NSMutableArray arrayWithObjects: - [self.closeButton.widthAnchor constraintEqualToConstant:kCloseRegionSize.width], - [self.closeButton.heightAnchor constraintEqualToConstant:kCloseRegionSize.height], - nil]; - - switch (self.closeButtonLocation) { - case MPClosableViewCloseButtonLocationTopRight: - [constraints addObject:[self.closeButton.trailingAnchor constraintEqualToAnchor:self.safeAreaLayoutGuide.trailingAnchor]]; - [constraints addObject:[self.closeButton.topAnchor constraintEqualToAnchor:self.safeAreaLayoutGuide.topAnchor]]; - break; - case MPClosableViewCloseButtonLocationTopLeft: - [constraints addObject:[self.closeButton.leadingAnchor constraintEqualToAnchor:self.safeAreaLayoutGuide.leadingAnchor]]; - [constraints addObject:[self.closeButton.topAnchor constraintEqualToAnchor:self.safeAreaLayoutGuide.topAnchor]]; - break; - case MPClosableViewCloseButtonLocationTopCenter: - [constraints addObject:[self.closeButton.topAnchor constraintEqualToAnchor:self.safeAreaLayoutGuide.topAnchor]]; - [constraints addObject:[self.closeButton.centerXAnchor constraintEqualToAnchor:self.centerXAnchor]]; - break; - case MPClosableViewCloseButtonLocationBottomRight: - [constraints addObject:[self.closeButton.trailingAnchor constraintEqualToAnchor:self.safeAreaLayoutGuide.trailingAnchor]]; - [constraints addObject:[self.closeButton.bottomAnchor constraintEqualToAnchor:self.safeAreaLayoutGuide.bottomAnchor]]; - break; - case MPClosableViewCloseButtonLocationBottomLeft: - [constraints addObject:[self.closeButton.leadingAnchor constraintEqualToAnchor:self.safeAreaLayoutGuide.leadingAnchor]]; - [constraints addObject:[self.closeButton.bottomAnchor constraintEqualToAnchor:self.safeAreaLayoutGuide.bottomAnchor]]; - break; - case MPClosableViewCloseButtonLocationBottomCenter: - [constraints addObject:[self.closeButton.bottomAnchor constraintEqualToAnchor:self.safeAreaLayoutGuide.bottomAnchor]]; - [constraints addObject:[self.closeButton.centerXAnchor constraintEqualToAnchor:self.centerXAnchor]]; - break; - case MPClosableViewCloseButtonLocationCenter: - [constraints addObject:[self.closeButton.centerXAnchor constraintEqualToAnchor:self.centerXAnchor]]; - [constraints addObject:[self.closeButton.centerYAnchor constraintEqualToAnchor:self.centerYAnchor]]; - break; - default: - // Top-right default - [constraints addObject:[self.closeButton.trailingAnchor constraintEqualToAnchor:self.safeAreaLayoutGuide.trailingAnchor]]; - [constraints addObject:[self.closeButton.topAnchor constraintEqualToAnchor:self.safeAreaLayoutGuide.topAnchor]]; - break; - } - - [NSLayoutConstraint activateConstraints:constraints]; - } else { - self.closeButton.frame = MPClosableViewCustomCloseButtonFrame(self.bounds.size, self.closeButtonLocation); - } - - [self bringSubviewToFront:self.closeButton]; -} - -- (void)didMoveToWindow -{ - if ([self.delegate respondsToSelector:@selector(closableView:didMoveToWindow:)]) { - [self.delegate closableView:self didMoveToWindow:self.window]; - } -} - -- (void)setCloseButtonType:(MPClosableViewCloseButtonType)closeButtonType -{ - _closeButtonType = closeButtonType; - - switch (closeButtonType) { - case MPClosableViewCloseButtonTypeNone: - self.closeButton.hidden = YES; - break; - case MPClosableViewCloseButtonTypeTappableWithoutImage: - self.closeButton.hidden = NO; - [self.closeButton setImage:nil forState:UIControlStateNormal]; - break; - case MPClosableViewCloseButtonTypeTappableWithImage: - self.closeButton.hidden = NO; - [self.closeButton setImage:self.closeButtonImage forState:UIControlStateNormal]; - break; - default: - self.closeButton.hidden = NO; - [self.closeButton setImage:self.closeButtonImage forState:UIControlStateNormal]; - break; - } -} - -- (void)setCloseButtonLocation:(MPClosableViewCloseButtonLocation)closeButtonLocation -{ - _closeButtonLocation = closeButtonLocation; - [self setNeedsLayout]; -} - -- (void)handleInteraction:(UIGestureRecognizer *)gestureRecognizer -{ - if (gestureRecognizer.state == UIGestureRecognizerStateEnded) { - self.wasTapped = YES; - } -} - -#pragma mark - - -- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer -{ - return YES; -} - -#pragma mark - - -- (void)closeButtonPressed -{ - [self.delegate closeButtonPressed:self]; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPCountdownTimerView.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPCountdownTimerView.h deleted file mode 100644 index d3624288ce..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPCountdownTimerView.h +++ /dev/null @@ -1,56 +0,0 @@ -// -// MPCountdownTimerView.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - * A view that will display a countdown timer and invoke a completion block once the timer has elapsed. - * After the countdown starts, the countdown is paused automatically when the app becomes inactive, - * and the countdown resumes when the app becomes active again (by listening to @c UIApplicationWillResignActiveNotification - * and @c UIApplicationDidBecomeActiveNotification notifications). This view has an intrinsic size, so - * do not add width and height constaints to it. This is a square view. - */ -@interface MPCountdownTimerView : UIView - -/** - * Initializes a countdown timer view. The timer is not automatically started. - * - * @param seconds Duration of the timer in seconds. This value must be greater than zero. - * @param completion Completion block that is fired after the timer elapses or is stopped. - * @returns An initialized timer if successful; otherwise nil. - */ -- (instancetype)initWithDuration:(NSTimeInterval)seconds timerCompletion:(void(^)(BOOL hasElapsed))completion; - -/** - * Starts the countdown timer. If the timer has already started, calling this method again will do nothing. - */ -- (void)start; - -/** - * Stops the timer and optionally invokes the completion block. If the timer hasn't started, calling - * this method will do nothing. - * - * @param shouldSignalCompletion If YES, then invoke the completion. Do not invoke the completion otherwise. - */ -- (void)stopAndSignalCompletion:(BOOL)shouldSignalCompletion; - -/** - * Pause the countdown timer. - */ -- (void)pause; - -/** - * Resume the countdown timer. - */ -- (void)resume; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPCountdownTimerView.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPCountdownTimerView.m deleted file mode 100644 index 43d42c7cb3..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPCountdownTimerView.m +++ /dev/null @@ -1,240 +0,0 @@ -// -// MPCountdownTimerView.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPCountdownTimerView.h" -#import "MPLogging.h" -#import "MPTimer.h" - -static NSTimeInterval const kCountdownTimerInterval = 0.05; // internal timer firing frequency in seconds -static CGFloat const kTimerStartAngle = -M_PI * 0.5; // 12 o'clock position -static CGFloat const kOneCycle = M_PI * 2; -static CGFloat const kRingWidth = 3; -static CGFloat const kRingRadius = 16; -static CGFloat const kRingPadding = 8; -static NSString * const kAnimationKey = @"Timer"; - -@interface MPCountdownTimerView() - -@property (nonatomic, copy) void(^completionBlock)(BOOL); -@property (nonatomic, assign) NSTimeInterval remainingSeconds; -@property (nonatomic, strong) MPTimer * timer; // timer instantiation is deferred to `start` -@property (nonatomic, strong) CAShapeLayer * backgroundRingLayer; -@property (nonatomic, strong) CAShapeLayer * animatingRingLayer; -@property (nonatomic, strong) UILabel * countdownLabel; -@property (nonatomic, strong) NSNotificationCenter *notificationCenter; - -@end - -@implementation MPCountdownTimerView - -#pragma mark - Life Cycle - -- (instancetype)initWithDuration:(NSTimeInterval)seconds timerCompletion:(void(^)(BOOL hasElapsed))completion { - if (self = [super initWithFrame:CGRectZero]) { - if (seconds <= 0) { - MPLogDebug(@"Attempted to initialize MPCountdownTimerView with a non-positive duration. No timer will be created."); - return nil; - } - - _completionBlock = completion; - _remainingSeconds = seconds; - _timer = nil; // timer instantiation is deferred to `start` - _notificationCenter = [NSNotificationCenter defaultCenter]; - - CGPoint ringCenter = CGPointMake([MPCountdownTimerView intrinsicContentDimension] / 2, - [MPCountdownTimerView intrinsicContentDimension] / 2); - - // the actual animation is the reverse of this path - UIBezierPath * circularPath = [UIBezierPath bezierPathWithArcCenter:ringCenter - radius:kRingRadius - startAngle:kTimerStartAngle + kOneCycle - endAngle:kTimerStartAngle - clockwise:false]; - _backgroundRingLayer = ({ - CAShapeLayer * layer = [CAShapeLayer new]; - layer.fillColor = UIColor.clearColor.CGColor; - layer.lineWidth = kRingWidth; - layer.path = [circularPath CGPath]; - layer.strokeColor = [UIColor.whiteColor colorWithAlphaComponent:0.5].CGColor; - layer; - }); - - _animatingRingLayer = ({ - CAShapeLayer * layer = [CAShapeLayer new]; - layer.fillColor = UIColor.clearColor.CGColor; - layer.lineWidth = kRingWidth; - layer.path = [circularPath CGPath]; - layer.strokeColor = UIColor.whiteColor.CGColor; - layer; - }); - - _countdownLabel = ({ - UILabel * label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, [MPCountdownTimerView intrinsicContentDimension], [MPCountdownTimerView intrinsicContentDimension])]; - label.center = ringCenter; - label.font = [UIFont systemFontOfSize:12 weight:UIFontWeightBold]; - label.text = [NSString stringWithFormat:@"%.0f", ceil(seconds)]; - label.textAlignment = NSTextAlignmentCenter; - label.textColor = UIColor.whiteColor; - label; - }); - - [self.layer addSublayer:_backgroundRingLayer]; - [self.layer addSublayer:_animatingRingLayer]; - [self addSubview:_countdownLabel]; - - self.userInteractionEnabled = NO; - self.accessibilityLabel = @"Countdown Timer"; - } - - return self; -} - -- (void)dealloc { - // Stop the timer if the view is going away, but do not notify the completion block - // if there is one. - _completionBlock = nil; - [self stopAndSignalCompletion:NO]; -} - -#pragma mark - Dimension - -+ (CGFloat)intrinsicContentDimension { - return (kRingRadius + kRingPadding) * 2; -} - -- (CGSize)intrinsicContentSize -{ - return CGSizeMake([MPCountdownTimerView intrinsicContentDimension], - [MPCountdownTimerView intrinsicContentDimension]); -} - -#pragma mark - Timer - -- (BOOL)hasStarted { - return self.timer != nil; -} - -- (void)start { - if (self.hasStarted) { - MPLogDebug(@"MPCountdownTimerView cannot start again since it has started"); - return; - } - - // Observer app state for automatic pausing and resuming - [self.notificationCenter addObserver:self - selector:@selector(pause) - name:UIApplicationDidEnterBackgroundNotification - object:nil]; - [self.notificationCenter addObserver:self - selector:@selector(resume) - name:UIApplicationWillEnterForegroundNotification - object:nil]; - - // This animation is the ring disappearing clockwise from full (12 o'clock) to empty. - CABasicAnimation * animation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"]; - animation.fromValue = @1; - animation.toValue = @0; - animation.duration = self.remainingSeconds; - animation.fillMode = kCAFillModeForwards; // for keeping the completed animation - animation.removedOnCompletion = NO; // for keeping the completed animation - [self.animatingRingLayer addAnimation:animation forKey:kAnimationKey]; - - // Fire the timer - self.timer = [MPTimer timerWithTimeInterval:kCountdownTimerInterval - target:self - selector:@selector(onTimerUpdate:) - repeats:YES]; - [self.timer scheduleNow]; - - MPLogInfo(@"MPCountdownTimerView started"); -} - -- (void)stopAndSignalCompletion:(BOOL)shouldSignalCompletion { - if (!self.hasStarted) { - MPLogDebug(@"MPCountdownTimerView cannot stop since it has not started yet"); - return; - } - - // Invalidate and clear the timer to stop it completely. Intentionally not setting `timer` to nil - // so that the computed var `hasStarted` is still `YES` after the timer stops. - [self.timer invalidate]; - - MPLogInfo(@"MPCountdownTimerView stopped"); - - // Notify the completion block and clear it out once it's handling has finished. - if (shouldSignalCompletion && self.completionBlock != nil) { - BOOL hasElapsed = (self.remainingSeconds <= 0); - self.completionBlock(hasElapsed); - - MPLogInfo(@"MPCountdownTimerView completion block notified"); - } - - // Clear out the completion block since the timer has stopped and it is - // no longer needed for this instance. - self.completionBlock = nil; -} - -- (void)pause { - if (!self.hasStarted) { - MPLogDebug(@"MPCountdownTimerView cannot pause since it has not started yet"); - return; - } - - if (!self.timer.isCountdownActive) { - MPLogInfo(@"MPCountdownTimerView is already paused"); - return; // avoid wrong animation timing - } - [self.timer pause]; - - // See documentation for pausing and resuming animation: - // https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/CoreAnimation_guide/AdvancedAnimationTricks/AdvancedAnimationTricks.html - CFTimeInterval pausedTime = [self.animatingRingLayer convertTime:CACurrentMediaTime() fromLayer:nil]; - self.animatingRingLayer.speed = 0.0; - self.animatingRingLayer.timeOffset = pausedTime; - - MPLogInfo(@"MPCountdownTimerView paused"); -} - -- (void)resume { - if (!self.hasStarted) { - MPLogDebug(@"MPCountdownTimerView cannot resume since it has not started yet"); - return; - } - - if (self.timer.isCountdownActive) { - MPLogInfo(@"MPCountdownTimerView is already running"); - return; // avoid wrong animation timing - } - [self.timer resume]; - - // See documentation for pausing and resuming animation: - // https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/CoreAnimation_guide/AdvancedAnimationTricks/AdvancedAnimationTricks.html - CFTimeInterval pausedTime = [self.animatingRingLayer timeOffset]; - self.animatingRingLayer.speed = 1.0; - self.animatingRingLayer.timeOffset = 0.0; - self.animatingRingLayer.beginTime = 0.0; - CFTimeInterval timeSincePause = [self.animatingRingLayer convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime; - self.animatingRingLayer.beginTime = timeSincePause; - - MPLogInfo(@"MPCountdownTimerView resumed"); -} - -#pragma mark - MPTimer - -- (void)onTimerUpdate:(MPTimer *)sender { - // Update the count. - self.remainingSeconds -= kCountdownTimerInterval; - self.countdownLabel.text = [NSString stringWithFormat:@"%.0f", ceil(self.remainingSeconds)]; - - // Stop the timer and notify the completion block. - if (self.remainingSeconds <= 0) { - [self stopAndSignalCompletion:YES]; - } -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPEnhancedDeeplinkRequest.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPEnhancedDeeplinkRequest.h deleted file mode 100644 index 6aebc412aa..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPEnhancedDeeplinkRequest.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// MPEnhancedDeeplinkRequest.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@interface MPEnhancedDeeplinkRequest : NSObject - -@property (copy) NSURL *originalURL; - -// Request components derived from the original URL. -@property (copy) NSURL *primaryURL; -@property (strong) NSArray *primaryTrackingURLs; -@property (copy) NSURL *fallbackURL; -@property (strong) NSArray *fallbackTrackingURLs; - -- (instancetype)initWithURL:(NSURL *)URL; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPEnhancedDeeplinkRequest.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPEnhancedDeeplinkRequest.m deleted file mode 100644 index 64ffaafe2d..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPEnhancedDeeplinkRequest.m +++ /dev/null @@ -1,57 +0,0 @@ -// -// MPEnhancedDeeplinkRequest.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPEnhancedDeeplinkRequest.h" -#import "NSURL+MPAdditions.h" - -static NSString * const kRequiredHostname = @"navigate"; -static NSString * const kPrimaryURLKey = @"primaryUrl"; -static NSString * const kPrimaryTrackingURLKey = @"primaryTrackingUrl"; -static NSString * const kFallbackURLKey = @"fallbackUrl"; -static NSString * const kFallbackTrackingURLKey = @"fallbackTrackingUrl"; - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MPEnhancedDeeplinkRequest - -- (instancetype)initWithURL:(NSURL *)URL -{ - self = [super init]; - if (self) { - if (![[[URL host] lowercaseString] isEqualToString:kRequiredHostname]) { - return nil; - } - - NSString *primaryURLString = [URL mp_queryParameterForKey:kPrimaryURLKey]; - if (![primaryURLString length]) { - return nil; - } - _primaryURL = [NSURL URLWithString:primaryURLString]; - _originalURL = [URL copy]; - - NSMutableArray *primaryTrackingURLs = [NSMutableArray array]; - NSArray *primaryTrackingURLStrings = [URL mp_queryParametersForKey:kPrimaryTrackingURLKey]; - for (NSString *URLString in primaryTrackingURLStrings) { - [primaryTrackingURLs addObject:[NSURL URLWithString:URLString]]; - } - _primaryTrackingURLs = [NSArray arrayWithArray:primaryTrackingURLs]; - - NSString *fallbackURLString = [URL mp_queryParameterForKey:kFallbackURLKey]; - _fallbackURL = [NSURL URLWithString:fallbackURLString]; - - NSMutableArray *fallbackTrackingURLs = [NSMutableArray array]; - NSArray *fallbackTrackingURLStrings = [URL mp_queryParametersForKey:kFallbackTrackingURLKey]; - for (NSString *URLString in fallbackTrackingURLStrings) { - [fallbackTrackingURLs addObject:[NSURL URLWithString:URLString]]; - } - _fallbackTrackingURLs = [NSArray arrayWithArray:fallbackTrackingURLs]; - } - return self; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPLastResortDelegate.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPLastResortDelegate.h deleted file mode 100644 index 3852642ef6..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPLastResortDelegate.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// MPLastResortDelegate.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import - -@interface MPLastResortDelegate : NSObject - -+ (id)sharedDelegate; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPLastResortDelegate.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPLastResortDelegate.m deleted file mode 100644 index 4cf53b4eee..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPLastResortDelegate.m +++ /dev/null @@ -1,36 +0,0 @@ -// -// MPLastResortDelegate.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPLastResortDelegate.h" -#import "MPGlobal.h" - -@class MFMailComposeViewController; - -@implementation MPLastResortDelegate - -+ (id)sharedDelegate -{ - static MPLastResortDelegate *lastResortDelegate; - static dispatch_once_t once; - dispatch_once(&once, ^{ - lastResortDelegate = [[self alloc] init]; - }); - return lastResortDelegate; -} - -- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(NSInteger)result error:(NSError*)error -{ - [(UIViewController *)controller dismissViewControllerAnimated:MP_ANIMATED completion:nil]; -} - -- (void)productViewControllerDidFinish:(SKStoreProductViewController *)viewController -{ - [viewController dismissViewControllerAnimated:MP_ANIMATED completion:nil]; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPProgressOverlayView.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPProgressOverlayView.h deleted file mode 100644 index f3a7690187..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPProgressOverlayView.h +++ /dev/null @@ -1,53 +0,0 @@ -// -// MPProgressOverlayView.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@protocol MPProgressOverlayViewDelegate; - -/** - Progress overlay meant for display over the key window of the application. - */ -@interface MPProgressOverlayView : UIView -/** - Optional delegate to listen for progress overlay events. - */ -@property (nonatomic, weak) id delegate; - -/** - Initializes the progress overlay with an optional delegate. - @param delegate Optional delegate to listen for progress overlay events. - @return A progress overlay instance. - */ -- (instancetype)initWithDelegate:(id)delegate; - -/** - Shows the progress overlay over the key window. - */ -- (void)show; - -/** - Removes the progress overlay from the key window. - */ -- (void)hide; -@end - -#pragma mark - MPProgressOverlayViewDelegate - -@protocol MPProgressOverlayViewDelegate -@optional -/** - Cancel button pressed. - */ -- (void)overlayCancelButtonPressed; - -/** - Progress overlay completed animating on screen. - */ -- (void)overlayDidAppear; -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPProgressOverlayView.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPProgressOverlayView.m deleted file mode 100644 index 645f7abf32..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPProgressOverlayView.m +++ /dev/null @@ -1,207 +0,0 @@ -// -// MPProgressOverlayView.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPProgressOverlayView.h" -#import "MPGlobal.h" - -// Constants -#define kProgressOverlayAlpha 0.6f -#define kProgressOverlayAnimationDuration 0.2f -#define kProgressOverlayBorderWidth 1.0f -#define kProgressOverlayCloseButtonDelay 4.0f -#define kProgressOverlayCornerRadius 8.0f -#define kProgressOverlayShadowOffset 2.0f -#define kProgressOverlayShadowOpacity 0.8f -#define kProgressOverlayShadowRadius 8.0f -#define kProgressOverlaySide 60.0f - -static NSString * const kCloseButtonXImageName = @"MPCloseButtonX.png"; - -@interface MPProgressOverlayView () -@property (nonatomic, strong) UIActivityIndicatorView * activityIndicator; -@property (nonatomic, strong) UIButton * closeButton; -@property (nonatomic, strong) UIView * progressContainer; -@end - -@implementation MPProgressOverlayView - -#pragma mark - Life Cycle - -- (instancetype)initWithDelegate:(id)delegate { - if (self = [self initWithFrame:MPKeyWindow().bounds]) { - self.delegate = delegate; - } - return self; -} - -- (instancetype)initWithFrame:(CGRect)frame { - if (self = [super initWithFrame:frame]) { - self.alpha = 0.0; - self.opaque = NO; - self.translatesAutoresizingMaskIntoConstraints = NO; - - // Close button. - _closeButton = ({ - UIButton * button = [UIButton buttonWithType:UIButtonTypeCustom]; - button.alpha = 0.0; // The close button will be animated onscreen when needed - button.hidden = YES; // Set to hidden to participate in autoresizing, but not capture user input - - [button addTarget:self action:@selector(closeButtonPressed) forControlEvents:UIControlEventTouchUpInside]; - - UIImage * image = [UIImage imageNamed:MPResourcePathForResource(kCloseButtonXImageName)]; - [button setImage:image forState:UIControlStateNormal]; - - [button sizeToFit]; - button; - }); - [self addSubview:_closeButton]; - - // Progress indicator container which provides a semi-opaque background for - // the activity indicator to render. - _progressContainer = ({ - CGRect frame = CGRectIntegral(CGRectMake(0, 0, kProgressOverlaySide, kProgressOverlaySide)); - UIView * container = [[UIView alloc] initWithFrame:frame]; - - container.alpha = kProgressOverlayAlpha; - container.backgroundColor = [UIColor whiteColor]; - container.opaque = NO; - container.layer.cornerRadius = kProgressOverlayCornerRadius; - container.layer.shadowColor = [UIColor blackColor].CGColor; - container.layer.shadowOffset = CGSizeMake(0.0f, kProgressOverlayShadowRadius - kProgressOverlayShadowOffset); - container.layer.shadowOpacity = kProgressOverlayShadowOpacity; - container.layer.shadowRadius = kProgressOverlayShadowRadius; - container.translatesAutoresizingMaskIntoConstraints = NO; - - // Container interior. - CGFloat innerContainerSide = kProgressOverlaySide - (2.0f * kProgressOverlayBorderWidth); - CGRect innerFrame = CGRectIntegral(CGRectMake(0, 0, innerContainerSide, innerContainerSide)); - UIView * innerContainer = [[UIView alloc] initWithFrame:innerFrame]; - innerContainer.backgroundColor = [UIColor blackColor]; - innerContainer.layer.cornerRadius = kProgressOverlayCornerRadius - kProgressOverlayBorderWidth; - innerContainer.opaque = NO; - innerContainer.translatesAutoresizingMaskIntoConstraints = NO; - - // Center the interior container - [container addSubview:innerContainer]; - innerContainer.center = container.center; - - container; - }); - [self addSubview:_progressContainer]; - - // Progress indicator. - _activityIndicator = ({ - UIActivityIndicatorView * indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; - [indicator sizeToFit]; - [indicator startAnimating]; - indicator; - }); - [self addSubview:_activityIndicator]; - - // Needs initial layout - [self setNeedsLayout]; - - // Listen for device rotation notifications - [NSNotificationCenter.defaultCenter addObserver:self selector:@selector(deviceOrientationDidChange:) name:UIDeviceOrientationDidChangeNotification object:nil]; - } - return self; -} - -- (void)dealloc { - // Unregister self from notifications - [NSNotificationCenter.defaultCenter removeObserver:self]; -} - -#pragma mark - Layout - -- (void)layoutSubviews { - [super layoutSubviews]; - - // This layout is always full screen for the Application frame inclusive - // of the safe area. - CGRect appFrame = MPApplicationFrame(YES); - - // Update the size of this view to always match that of the key window. - self.frame = MPKeyWindow().bounds; - - // Close button should be in the upper right corner. - self.closeButton.frame = CGRectMake(appFrame.origin.x + appFrame.size.width - self.closeButton.frame.size.width, - appFrame.origin.y, - self.closeButton.frame.size.width, - self.closeButton.frame.size.height); - - // Progress indicator container should be centered. - self.progressContainer.center = self.center; - - // Progress indicator should be centered. - self.activityIndicator.center = self.center; -} - -#pragma mark - Public Methods - -- (void)show { - // Add self to the key window - UIWindow * keyWindow = MPKeyWindow(); - [keyWindow addSubview:self]; - - // Re-layout needed. - [self setNeedsLayout]; - - // Animate self on screen - [UIView animateWithDuration:kProgressOverlayAnimationDuration animations:^{ - self.alpha = 1.0; - } completion:^(BOOL finished) { - if ([self.delegate respondsToSelector:@selector(overlayDidAppear)]) { - [self.delegate overlayDidAppear]; - } - }]; - - // Show the close button after kProgressOverlayCloseButtonDelay delay to allow - // the user an out if progress gets stuck. - [self performSelector:@selector(enableCloseButton) withObject:nil afterDelay:kProgressOverlayCloseButtonDelay]; -} - -- (void)hide { - // Cancel any pending enabling of the close button - [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(enableCloseButton) object:nil]; - - // Hide the close button and make it non-user interactable immediately - self.closeButton.alpha = 0.0f; - self.closeButton.hidden = YES; - - // Animate removal of self from the key window - [UIView animateWithDuration:kProgressOverlayAnimationDuration animations:^{ - self.alpha = 0.0; - } completion:^(BOOL finished) { - [self removeFromSuperview]; - }]; -} - -#pragma mark - Notification Handlers - -- (void)deviceOrientationDidChange:(NSNotification *)notification { - [self setNeedsLayout]; -} - -#pragma mark - Close Button - -- (void)enableCloseButton { - self.closeButton.hidden = NO; - [UIView animateWithDuration:kProgressOverlayAnimationDuration animations:^{ - self.closeButton.alpha = 1.0f; - }]; -} - -- (void)closeButtonPressed { - if ([self.delegate respondsToSelector:@selector(overlayCancelButtonPressed)]) { - [self.delegate overlayCancelButtonPressed]; - } -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPRealTimeTimer.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPRealTimeTimer.h deleted file mode 100644 index 821063e596..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPRealTimeTimer.h +++ /dev/null @@ -1,42 +0,0 @@ -// -// MPRealTimeTimer.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -/*** - * MPRealTimeTimer is a class meant for situations in which one may want to disaptch an event for later without - * any regard for application state. Backgrounding and suspension will not affect time keeping. MPRealTimeTimer will NOT - * fire while the application is backgrounded or suspended, but will fire immediately upon foregrounding if the - * application is not foregrounded when the time interval elapses. - * - * Note: MPRealTimeTimer uses NSTimer as a base and as such perfect accuracy is not guaranteed. - ***/ - -@interface MPRealTimeTimer : NSObject - -// Initializer which takes in a time interval (from when `scheduleNow` is called) and a block to execute when firing. -- (instancetype)initWithInterval:(NSTimeInterval)interval - block:(void(^)(MPRealTimeTimer *))block NS_DESIGNATED_INITIALIZER; - -// Returns `YES` if the timer is currently keeping time; `NO` if it's waiting to be scheduled. -@property (nonatomic, assign, readonly) BOOL isScheduled; - -// Schedules the MPRealTimeTimer instance to fire at `interval` seconds from now. Calling `scheduleNow` while -// `isScheduled` is set to `YES` will do nothing. -- (void)scheduleNow; - -// Executes `block` and stops all time keeping. -- (void)fire; - -// Stops all time keeping without executing anything. -- (void)invalidate; - -// Use of `init` is not supported. -- (instancetype)init NS_UNAVAILABLE; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPRealTimeTimer.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPRealTimeTimer.m deleted file mode 100644 index 84a9d42297..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPRealTimeTimer.m +++ /dev/null @@ -1,118 +0,0 @@ -// -// MPRealTimeTimer.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPRealTimeTimer.h" -#import "MPTimer.h" - -@interface MPRealTimeTimer () - -@property (strong, nonatomic) MPTimer *timer; -@property (copy, nonatomic) void (^block)(MPRealTimeTimer *); -@property (assign, nonatomic) NSTimeInterval interval; -@property (assign, nonatomic, readwrite) BOOL isScheduled; - -@property (copy, nonatomic) NSDate *fireDate; -@property (assign, nonatomic) NSTimeInterval currentTimeInterval; - -@end - -@implementation MPRealTimeTimer - -- (instancetype)initWithInterval:(NSTimeInterval)interval - block:(void(^)(MPRealTimeTimer *))block { - if (self = [super init]) { - _interval = interval; - _block = block; - } - - return self; -} - -- (void)scheduleNow { - if (!self.isScheduled) { - [self addNotificationCenterObservers]; - self.currentTimeInterval = self.interval; - [self setTimerWithCurrentTimeInterval]; - self.isScheduled = YES; - } -} - -- (void)invalidate { - [self.timer invalidate]; - self.timer = nil; - - [[NSNotificationCenter defaultCenter] removeObserver:self]; - self.isScheduled = NO; - self.fireDate = nil; -} - -- (void)fire { - [self invalidate]; - [self runBlock]; -} - -#pragma mark - Internal Methods - -- (void)runBlock { - if (self.block) { - self.block(self); - } -} - -- (void)setTimerWithCurrentTimeInterval { - self.timer = [MPTimer timerWithTimeInterval:self.currentTimeInterval - target:self - selector:@selector(fire) - repeats:NO - runLoopMode:NSRunLoopCommonModes]; - [self.timer scheduleNow]; - if (!self.fireDate) { - self.fireDate = [NSDate dateWithTimeIntervalSinceNow:self.currentTimeInterval]; - } -} - -- (void)didEnterBackground { - // invalidate timer (don't invalidate self because we're still keeping time) - [self.timer invalidate]; -} - -- (void)willEnterForeground { - // skip resetting the timer if it's already set (i.e., in the iOS 13 new-window case) - if ([self.timer isValid]) { - return; - } - - // check if date has passed and fire if needed - NSComparisonResult result = [[NSDate date] compare:self.fireDate]; - if (result == NSOrderedSame || result == NSOrderedDescending) { - [self fire]; - return; - } - - // update time interval and schedule a new timer if it's not yet time to fire - self.currentTimeInterval = [self.fireDate timeIntervalSinceNow]; - [self setTimerWithCurrentTimeInterval]; -} - -- (void)addNotificationCenterObservers { - // Set up notifications to react to backgrounding/foregrounding - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(didEnterBackground) - name:UIApplicationDidEnterBackgroundNotification - object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(willEnterForeground) - name:UIApplicationWillEnterForegroundNotification - object:nil]; -} - -- (void)dealloc { - [[NSNotificationCenter defaultCenter] removeObserver:self]; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPURLActionInfo.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPURLActionInfo.h deleted file mode 100644 index 400762297e..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPURLActionInfo.h +++ /dev/null @@ -1,48 +0,0 @@ -// -// MPURLActionInfo.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -#import "MPEnhancedDeeplinkRequest.h" - -#ifndef NS_ENUM -#define NS_ENUM(_type, _name) enum _name : _type _name; enum _name : _type -#endif - -typedef NS_ENUM(NSUInteger, MPURLActionType) { - MPURLActionTypeStoreKit, - MPURLActionTypeGenericDeeplink, - MPURLActionTypeEnhancedDeeplink, - MPURLActionTypeOpenInSafari, - MPURLActionTypeOpenURLInWebView, - MPURLActionTypeOpenInWebView, - MPURLActionTypeShare -}; - -@interface MPURLActionInfo : NSObject - -@property (nonatomic, readonly) MPURLActionType actionType; -@property (nonatomic, readonly, copy) NSURL *originalURL; -@property (nonatomic, readonly, strong) NSDictionary *iTunesStoreParameters; -@property (nonatomic, readonly, copy) NSURL *iTunesStoreFallbackURL; -@property (nonatomic, readonly, copy) NSURL *safariDestinationURL; -@property (nonatomic, readonly, copy) NSString *HTTPResponseString; -@property (nonatomic, readonly, copy) NSURL *webViewBaseURL; -@property (nonatomic, readonly, copy) NSURL *deeplinkURL; -@property (nonatomic, readonly, strong) MPEnhancedDeeplinkRequest *enhancedDeeplinkRequest; -@property (nonatomic, readonly, copy) NSURL *shareURL; - -+ (instancetype)infoWithURL:(NSURL *)URL iTunesStoreParameters:(NSDictionary *)parameters iTunesStoreFallbackURL:(NSURL *)fallbackURL; -+ (instancetype)infoWithURL:(NSURL *)URL safariDestinationURL:(NSURL *)safariDestinationURL; -+ (instancetype)infoWithURL:(NSURL *)URL HTTPResponseString:(NSString *)responseString webViewBaseURL:(NSURL *)baseURL; -+ (instancetype)infoWithURL:(NSURL *)URL webViewBaseURL:(NSURL *)baseURL; -+ (instancetype)infoWithURL:(NSURL *)URL deeplinkURL:(NSURL *)deeplinkURL; -+ (instancetype)infoWithURL:(NSURL *)URL enhancedDeeplinkRequest:(MPEnhancedDeeplinkRequest *)request; -+ (instancetype)infoWithURL:(NSURL *)URL shareURL:(NSURL *)shareURL; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPURLActionInfo.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPURLActionInfo.m deleted file mode 100644 index 1da18f730b..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPURLActionInfo.m +++ /dev/null @@ -1,95 +0,0 @@ -// -// MPURLActionInfo.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPURLActionInfo.h" - -@interface MPURLActionInfo () - -@property (nonatomic, readwrite) MPURLActionType actionType; -@property (nonatomic, readwrite, copy) NSURL *originalURL; -@property (nonatomic, readwrite, strong) NSDictionary *iTunesStoreParameters; -@property (nonatomic, readwrite, copy) NSURL *iTunesStoreFallbackURL; -@property (nonatomic, readwrite, copy) NSURL *safariDestinationURL; -@property (nonatomic, readwrite, copy) NSString *HTTPResponseString; -@property (nonatomic, readwrite, copy) NSURL *webViewBaseURL; -@property (nonatomic, readwrite, copy) NSURL *deeplinkURL; -@property (nonatomic, readwrite, strong) MPEnhancedDeeplinkRequest *enhancedDeeplinkRequest; -@property (nonatomic, readwrite, copy) NSURL *shareURL; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MPURLActionInfo - -+ (instancetype)infoWithURL:(NSURL *)URL iTunesStoreParameters:(NSDictionary *)parameters iTunesStoreFallbackURL:(NSURL *)fallbackURL -{ - MPURLActionInfo *info = [[[self class] alloc] init]; - info.actionType = MPURLActionTypeStoreKit; - info.originalURL = URL; - info.iTunesStoreParameters = parameters; - info.iTunesStoreFallbackURL = fallbackURL; - return info; -} - -+ (instancetype)infoWithURL:(NSURL *)URL safariDestinationURL:(NSURL *)safariDestinationURL -{ - MPURLActionInfo *info = [[[self class] alloc] init]; - info.actionType = MPURLActionTypeOpenInSafari; - info.originalURL = URL; - info.safariDestinationURL = safariDestinationURL; - return info; -} - -+ (instancetype)infoWithURL:(NSURL *)URL HTTPResponseString:(NSString *)responseString webViewBaseURL:(NSURL *)baseURL -{ - MPURLActionInfo *info = [[[self class] alloc] init]; - info.actionType = MPURLActionTypeOpenInWebView; - info.originalURL = URL; - info.HTTPResponseString = responseString; - info.webViewBaseURL = baseURL; - return info; -} - -+ (instancetype)infoWithURL:(NSURL *)URL webViewBaseURL:(NSURL *)baseURL -{ - MPURLActionInfo *info = [[[self class] alloc] init]; - info.actionType = MPURLActionTypeOpenURLInWebView; - info.originalURL = URL; - info.webViewBaseURL = baseURL; - return info; -} - -+ (instancetype)infoWithURL:(NSURL *)URL deeplinkURL:(NSURL *)deeplinkURL -{ - MPURLActionInfo *info = [[[self class] alloc] init]; - info.actionType = MPURLActionTypeGenericDeeplink; - info.originalURL = URL; - info.deeplinkURL = deeplinkURL; - return info; -} - -+ (instancetype)infoWithURL:(NSURL *)URL enhancedDeeplinkRequest:(MPEnhancedDeeplinkRequest *)request -{ - MPURLActionInfo *info = [[[self class] alloc] init]; - info.actionType = MPURLActionTypeEnhancedDeeplink; - info.originalURL = URL; - info.enhancedDeeplinkRequest = request; - return info; -} - -+ (instancetype)infoWithURL:(NSURL *)URL shareURL:(NSURL *)shareURL -{ - MPURLActionInfo *info = [[[self class] alloc] init]; - info.actionType = MPURLActionTypeShare; - info.originalURL = URL; - info.shareURL = shareURL; - return info; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPURLResolver.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPURLResolver.h deleted file mode 100644 index 2d91deaaf7..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPURLResolver.h +++ /dev/null @@ -1,21 +0,0 @@ -// -// MPURLResolver.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPGlobal.h" -#import "MPURLActionInfo.h" - -typedef void (^MPURLResolverCompletionBlock)(MPURLActionInfo *actionInfo, NSError *error); - -@interface MPURLResolver : NSObject - -+ (instancetype)resolverWithURL:(NSURL *)URL completion:(MPURLResolverCompletionBlock)completion; -- (void)start; -- (void)cancel; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPURLResolver.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPURLResolver.m deleted file mode 100644 index 61eff7967b..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPURLResolver.m +++ /dev/null @@ -1,407 +0,0 @@ -// -// MPURLResolver.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import -#import "MPURLResolver.h" -#import "MPHTTPNetworkSession.h" -#import "NSURL+MPAdditions.h" -#import "NSHTTPURLResponse+MPAdditions.h" -#import "MPLogging.h" -#import "MPDeviceInformation.h" -#import "MOPUBExperimentProvider.h" -#import "NSURL+MPAdditions.h" -#import "MPURLRequest.h" - -static NSString * const kMoPubSafariScheme = @"mopubnativebrowser"; -static NSString * const kMoPubSafariNavigateHost = @"navigate"; -static NSString * const kResolverErrorDomain = @"com.mopub.resolver"; -static NSString * const kWebviewClickthroughHost = @"ads.mopub.com"; -static NSString * const kWebviewClickthroughPath = @"/m/aclk"; -static NSString * const kRedirectURLQueryStringKey = @"r"; - -@interface MPURLResolver () - -@property (nonatomic, strong) NSURL *originalURL; -@property (nonatomic, strong) NSURL *currentURL; -@property (nonatomic, strong) NSURLSessionTask *task; -@property (nonatomic, copy) MPURLResolverCompletionBlock completion; - -- (MPURLActionInfo *)actionInfoFromURL:(NSURL *)URL error:(NSError **)error; -- (BOOL)URLShouldOpenInApplication:(NSURL *)URL; -- (BOOL)URLIsHTTPOrHTTPS:(NSURL *)URL; -- (BOOL)URLPointsToAMap:(NSURL *)URL; -- (NSStringEncoding)stringEncodingFromContentType:(NSString *)contentType; - -@end - -@implementation MPURLResolver - -+ (instancetype)resolverWithURL:(NSURL *)URL completion:(MPURLResolverCompletionBlock)completion -{ - return [[MPURLResolver alloc] initWithURL:URL completion:completion]; -} - -- (instancetype)initWithURL:(NSURL *)URL completion:(MPURLResolverCompletionBlock)completion -{ - self = [super init]; - if (self) { - _originalURL = [URL copy]; - _completion = [completion copy]; - } - return self; -} - -- (void)start -{ - [self.task cancel]; - self.currentURL = self.originalURL; - - NSError *error = nil; - MPURLActionInfo *info = [self actionInfoFromURL:self.originalURL error:&error]; - - if (info) { - [self safeInvokeAndNilCompletionBlock:info error:nil]; - } else if ([self shouldOpenWithInAppWebBrowser]) { - info = [MPURLActionInfo infoWithURL:self.originalURL webViewBaseURL:self.currentURL]; - [self safeInvokeAndNilCompletionBlock:info error:nil]; - } else if (error) { - [self safeInvokeAndNilCompletionBlock:nil error:error]; - } else { - MPURLRequest *request = [[MPURLRequest alloc] initWithURL:self.originalURL]; - self.task = [self httpTaskWithRequest:request]; - } -} - -- (NSURLSessionTask *)httpTaskWithRequest:(MPURLRequest *)request { - __weak __typeof__(self) weakSelf = self; - NSURLSessionTask * task = [MPHTTPNetworkSession startTaskWithHttpRequest:request responseHandler:^(NSData * _Nonnull data, NSHTTPURLResponse * _Nonnull response) { - __typeof__(self) strongSelf = weakSelf; - - // Set the response content type - NSStringEncoding responseEncoding = NSUTF8StringEncoding; - NSDictionary *headers = [response allHeaderFields]; - NSString *contentType = [headers objectForKey:kMoPubHTTPHeaderContentType]; - if (contentType != nil) { - responseEncoding = [response stringEncodingFromContentType:contentType]; - } - - NSString *responseString = [[NSString alloc] initWithData:data encoding:responseEncoding]; - MPURLActionInfo *info = [MPURLActionInfo infoWithURL:strongSelf.originalURL HTTPResponseString:responseString webViewBaseURL:strongSelf.currentURL]; - [strongSelf safeInvokeAndNilCompletionBlock:info error:nil]; - - } errorHandler:^(NSError * _Nonnull error) { - __typeof__(self) strongSelf = weakSelf; - [strongSelf safeInvokeAndNilCompletionBlock:nil error:error]; - } shouldRedirectWithNewRequest:^BOOL(NSURLSessionTask * _Nonnull task, NSURLRequest * _Nonnull newRequest) { - __typeof__(self) strongSelf = weakSelf; - - // First, check to see if the redirect URL matches any of our suggested actions. - NSError * actionInfoError = nil; - MPURLActionInfo * info = [strongSelf actionInfoFromURL:newRequest.URL error:&actionInfoError]; - - if (info) { - [task cancel]; - [strongSelf safeInvokeAndNilCompletionBlock:info error:nil]; - return NO; - } else { - // The redirected URL didn't match any actions, so we should continue with loading the URL. - strongSelf.currentURL = newRequest.URL; - return YES; - } - }]; - - return task; -} - -- (void)cancel -{ - [self.task cancel]; - self.task = nil; - self.completion = nil; -} - -- (void)safeInvokeAndNilCompletionBlock:(MPURLActionInfo *)info error:(NSError *)error -{ - dispatch_async(dispatch_get_main_queue(), ^{ - if (self.completion != nil) { - self.completion(info, error); - self.completion = nil; - } - }); -} - -#pragma mark - Handling Application/StoreKit URLs - -/* - * Parses the provided URL for actions to perform (opening StoreKit, opening Safari, etc.). - * If the URL represents an action, this method will return an info object containing data that is - * relevant to the suggested action. - */ -- (MPURLActionInfo *)actionInfoFromURL:(NSURL *)URL error:(NSError **)error; -{ - MPURLActionInfo *actionInfo = nil; - - if (URL == nil) { - if (error) { - *error = [NSError errorWithDomain:kResolverErrorDomain code:-1 userInfo:@{NSLocalizedDescriptionKey: @"URL is nil"}]; - } - return nil; - } - - NSDictionary * storeKitParameters = [self appStoreProductParametersForURL:URL]; - if (storeKitParameters != nil) { - actionInfo = [MPURLActionInfo infoWithURL:self.originalURL iTunesStoreParameters:storeKitParameters iTunesStoreFallbackURL:URL]; - } else if ([self URLHasDeeplinkPlusScheme:URL]) { - MPEnhancedDeeplinkRequest *request = [[MPEnhancedDeeplinkRequest alloc] initWithURL:URL]; - if (request) { - actionInfo = [MPURLActionInfo infoWithURL:self.originalURL enhancedDeeplinkRequest:request]; - } else { - actionInfo = [MPURLActionInfo infoWithURL:self.originalURL deeplinkURL:URL]; - } - } else if ([self safariURLForURL:URL]) { - actionInfo = [MPURLActionInfo infoWithURL:self.originalURL safariDestinationURL:[NSURL URLWithString:[self safariURLForURL:URL]]]; - } else if ([URL mp_isMoPubShareScheme]) { - actionInfo = [MPURLActionInfo infoWithURL:self.originalURL shareURL:URL]; - } else if ([self URLShouldOpenInApplication:URL]) { - actionInfo = [MPURLActionInfo infoWithURL:self.originalURL deeplinkURL:URL]; - } else if ([URL.scheme isEqualToString:@"http"]) { // handle HTTP requests in particular to get around ATS settings - // As a note: `appTransportSecuritySettings` returns what makes sense for the iOS version. I.e., if the device - // is running iOS 8, this method will always return `MPATSSettingAllowsArbitraryLoads`. If the device is running - // iOS 9, this method will never give us `MPATSSettingAllowsArbitraryLoadsInWebContent`. As a result, we don't - // have to do OS checks here; we can just trust these settings. - MPATSSetting settings = MPDeviceInformation.appTransportSecuritySettings; - - if ((settings & MPATSSettingAllowsArbitraryLoads) != 0) { // opens as normal if ATS is disabled - // don't do anything - } else if ((settings & MPATSSettingAllowsArbitraryLoadsInWebContent) != 0) { // opens in WKWebView if ATS is disabled for arbitrary web content - actionInfo = [MPURLActionInfo infoWithURL:self.originalURL - webViewBaseURL:self.currentURL]; - } else { // opens in Mobile Safari if no other option is available - actionInfo = [MPURLActionInfo infoWithURL:self.originalURL - safariDestinationURL:self.currentURL]; - } - } - - return actionInfo; -} - -#pragma mark Identifying Application URLs - -- (BOOL)URLShouldOpenInApplication:(NSURL *)URL -{ - return ![self URLIsHTTPOrHTTPS:URL] || [self URLPointsToAMap:URL]; -} - -- (BOOL)URLIsHTTPOrHTTPS:(NSURL *)URL -{ - return [URL.scheme isEqualToString:@"http"] || [URL.scheme isEqualToString:@"https"]; -} - -- (BOOL)URLHasDeeplinkPlusScheme:(NSURL *)URL -{ - return [[URL.scheme lowercaseString] isEqualToString:@"deeplink+"]; -} - -- (BOOL)URLPointsToAMap:(NSURL *)URL -{ - return [URL.host hasSuffix:@"maps.google.com"] || [URL.host hasSuffix:@"maps.apple.com"]; -} - -- (BOOL)URLIsAppleScheme:(NSURL *)URL -{ - // Definitely not an Apple URL scheme. - if (![URL.host hasSuffix:@".apple.com"]) { - return NO; - } - - // Constant set of supported Apple Store subdomains that will be loaded into - // SKStoreProductViewController. This is lazily initialized and limited to the - // scope of this method. - static NSSet * supportedStoreSubdomains = nil; - if (supportedStoreSubdomains == nil) { - supportedStoreSubdomains = [NSSet setWithArray:@[@"apps", @"books", @"itunes", @"music"]]; - } - - // Assumes that the Apple Store sub domains are of the format store-type.apple.com - // At this point we are guaranteed at least 3 components from the previous ".apple.com" - // check. - NSArray * hostComponents = [URL.host componentsSeparatedByString:@"."]; - NSString * subdomain = hostComponents[0]; - - return [supportedStoreSubdomains containsObject:subdomain]; -} - -#pragma mark Extracting StoreItem Identifiers - -/** - Attempt to parse an Apple store URL into a dictionary of @c SKStoreProductParameter items. This will fast fail - if the URL is not a valid Apple store URL scheme. - @param URL Apple store URL to attempt to parse. - @return A dictionary with at least the required @c SKStoreProductParameterITunesItemIdentifier as an entry; otherwise @c nil - */ -- (NSDictionary *)appStoreProductParametersForURL:(NSURL *)URL -{ - // Definitely not an Apple URL scheme. Don't bother to parse. - if (![self URLIsAppleScheme:URL]) { - return nil; - } - - // Failed to parse out the URL into its components. Likely to be an invalid URL. - NSURLComponents * urlComponents = [NSURLComponents componentsWithURL:URL resolvingAgainstBaseURL:YES]; - if (urlComponents == nil) { - return nil; - } - - // Attempt to parse out the item identifier. - NSString * itemIdentifier = ({ - NSString * lastPathComponent = URL.path.lastPathComponent; - NSString * itemIdFromQueryParameter = [URL.mp_queryAsDictionary objectForKey:@"id"]; - NSString * parsedIdentifier = nil; - - // Old style iTunes item identifiers are prefixed with "id". - // Example: https://apps.apple.com/.../id923917775 - if ([lastPathComponent hasPrefix:@"id"]) { - parsedIdentifier = [lastPathComponent substringFromIndex:2]; - } - // Look for the item identifier as a query parameter in the URL. - // Example: https://itunes.apple.com/...?id=923917775 - else if (itemIdFromQueryParameter != nil) { - parsedIdentifier = itemIdFromQueryParameter; - } - // Newer style Apple Store identifiers are just the last path component. - // Example: https://music.apple.com/.../1451047660 - else { - parsedIdentifier = lastPathComponent; - } - - // Check that the parsed item identifier doesn't exist or contains invalid characters. - NSCharacterSet * nonIntegers = [[NSCharacterSet decimalDigitCharacterSet] invertedSet]; - if (parsedIdentifier.length > 0 && [parsedIdentifier rangeOfCharacterFromSet:nonIntegers].location != NSNotFound) { - parsedIdentifier = nil; - } - - parsedIdentifier; - }); - - // Item identifier is a required field. If it doesn't exist, there is no point - // in continuing to parse the URL. - if (itemIdentifier.length == 0) { - return nil; - } - - // Attempt parsing for the following StoreKit product keys: - // SKStoreProductParameterITunesItemIdentifier (required) - // SKStoreProductParameterProductIdentifier (not supported) - // SKStoreProductParameterAdvertisingPartnerToken (not supported) - // SKStoreProductParameterAffiliateToken (optional) - // SKStoreProductParameterCampaignToken (optional) - // SKStoreProductParameterProviderToken (not supported) - // - // Query parameter parsing according to: - // https://affiliate.itunes.apple.com/resources/documentation/basic_affiliate_link_guidelines_for_the_phg_network/ - NSMutableDictionary * parameters = [NSMutableDictionary dictionaryWithCapacity:3]; - parameters[SKStoreProductParameterITunesItemIdentifier] = itemIdentifier; - - for (NSURLQueryItem * queryParameter in urlComponents.queryItems) { - // OPTIONAL: Attempt parsing of SKStoreProductParameterAffiliateToken - if ([queryParameter.name isEqualToString:@"at"]) { - parameters[SKStoreProductParameterAffiliateToken] = queryParameter.value; - } - // OPTIONAL: Attempt parsing of SKStoreProductParameterCampaignToken - else if ([queryParameter.name isEqualToString:@"ct"]) { - parameters[SKStoreProductParameterCampaignToken] = queryParameter.value; - } - } - - return parameters; -} - -#pragma mark - Identifying URLs to open in Safari - -- (NSString *)safariURLForURL:(NSURL *)URL -{ - NSString *safariURL = nil; - - if ([[URL scheme] isEqualToString:kMoPubSafariScheme] && - [[URL host] isEqualToString:kMoPubSafariNavigateHost]) { - safariURL = [URL.mp_queryAsDictionary objectForKey:@"url"]; - } - - return safariURL; -} - -#pragma mark - Identifying NSStringEncoding from NSURLResponse Content-Type header - -- (NSStringEncoding)stringEncodingFromContentType:(NSString *)contentType -{ - NSStringEncoding encoding = NSUTF8StringEncoding; - - if (![contentType length]) { - MPLogInfo(@"Attempting to set string encoding from nil %@", kMoPubHTTPHeaderContentType); - return encoding; - } - - NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(?<=charset=)[^;]*" options:kNilOptions error:nil]; - - NSTextCheckingResult *charsetResult = [regex firstMatchInString:contentType options:kNilOptions range:NSMakeRange(0, [contentType length])]; - if (charsetResult && charsetResult.range.location != NSNotFound) { - NSString *charset = [contentType substringWithRange:[charsetResult range]]; - - // ensure that charset is not deallocated early - CFStringRef cfCharset = (CFStringRef)CFBridgingRetain(charset); - CFStringEncoding cfEncoding = CFStringConvertIANACharSetNameToEncoding(cfCharset); - CFBridgingRelease(cfCharset); - - if (cfEncoding == kCFStringEncodingInvalidId) { - return encoding; - } - encoding = CFStringConvertEncodingToNSStringEncoding(cfEncoding); - } - - return encoding; -} - -#pragma mark - Check if it's necessary to handle the clickthrough URL outside of a web browser -// There are two types of clickthrough URL sources: from webviews and from non-web views. -// The ones from webviews start with (https|http)://ads.mopub.com/m/aclk -// For webviews, in order for a URL to be processed in a web browser, the redirect URL scheme needs to be http/https. -- (BOOL)shouldOpenWithInAppWebBrowser -{ - if (!self.currentURL) { - return NO; - } - - // If redirect URL isn't http/https, do not open it in a browser. It is likely a deep link - // or an Apple Store scheme that will need special parsing. - if (![self URLIsHTTPOrHTTPS:self.currentURL] || [self URLIsAppleScheme:self.currentURL]) { - return NO; - } - - // Clickthroughs from webviews - if ([self.currentURL.host isEqualToString:kWebviewClickthroughHost] && - [self.currentURL.path isEqualToString:kWebviewClickthroughPath]) { - - // Extract the redirect URL from the clickthrough. - NSString *redirectURLStr = [self.currentURL mp_queryParameterForKey:kRedirectURLQueryStringKey]; - NSURL *redirectUrl = [NSURL URLWithString:redirectURLStr]; - - // There is a redirect URL. We need to determine if the redirect also needs additional - // handling. In the event that no redirect URL is present, normal processing will occur. - if (redirectUrl != nil && (![self URLIsHTTPOrHTTPS:redirectUrl] || [self URLIsAppleScheme:redirectUrl])) { - return NO; - } - } - - // ADF-4215: If this trailing return value should be changed, check whether App Store redirection - // links will end up showing the App Store UI in app (expected) or escaping the app to open the - // native iOS App Store (unexpected). - return [MPAdDestinationDisplayAgent shouldDisplayContentInApp]; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPVideoConfig.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPVideoConfig.h deleted file mode 100644 index 5be07b6389..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPVideoConfig.h +++ /dev/null @@ -1,38 +0,0 @@ -// -// MPVideoConfig.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPVASTCompanionAd.h" -#import "MPVASTResponse.h" - -@interface MPVideoConfig : NSObject - -/** - Ad response typically contains multiple video files of different resolutions and bit-rates, and the - best one is picked when the ad is loaded (not when receiving the ad response). - */ -@property (nonatomic, readonly) NSArray *mediaFiles; - -@property (nonatomic, readonly) NSURL *clickThroughURL; -@property (nonatomic, readonly) MPVASTDurationOffset *skipOffset; -@property (nonatomic, readonly) NSString *callToActionButtonTitle; -@property (nonatomic, readonly) NSArray *industryIcons; -@property (nonatomic, assign) BOOL isRewarded; // default is NO -@property (nonatomic, assign) BOOL enableEarlyClickthroughForNonRewardedVideo; // default is NO - -- (instancetype)initWithVASTResponse:(MPVASTResponse *)response additionalTrackers:(NSDictionary *)additionalTrackers; - -/** - Take a @c MPVideoEvent string for the key, and return an array of @c MPVASTTrackingEvent. - */ -- (NSArray *)trackingEventsForKey:(MPVideoEvent)key; - -@end - -@interface MPVideoConfig (MPVASTCompanionAdProvider) -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPVideoConfig.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPVideoConfig.m deleted file mode 100644 index 188c986759..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPVideoConfig.m +++ /dev/null @@ -1,325 +0,0 @@ -// -// MPVideoConfig.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPVideoConfig.h" -#import "MPLogging.h" -#import "MPVASTStringUtilities.h" -#import "MPVASTCompanionAd.h" -#import "MPVASTConstant.h" -#import "MPVASTTracking.h" - -/** - This is a private data object that represents an ad candidate for display. - */ -@interface MPVideoPlaybackCandidate : NSObject - -@property (nonatomic, strong) MPVASTLinearAd *linearAd; -@property (nonatomic, strong) NSArray *errorURLs; -@property (nonatomic, strong) NSArray *impressionURLs; -@property (nonatomic, strong) MPVASTDurationOffset *skipOffset; -@property (nonatomic, strong) NSString *callToActionButtonTitle; -@property (nonatomic, strong) NSArray *companionAds; - -@end - -@implementation MPVideoPlaybackCandidate -@end // this data object should have empty implementation - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MPVASTLinearAd (MPVideoConfig) - -@property (nonatomic, strong) NSArray *clickTrackingURLs; -@property (nonatomic, strong) NSArray *customClickURLs; -@property (nonatomic, strong) NSArray *industryIcons; -@property (nonatomic, strong) NSDictionary *trackingEvents; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MPVideoConfig () -@property (nonatomic, strong) MPVASTDurationOffset *skipOffset; -@property (nonatomic, strong) NSArray *companionAds; -@property (nonatomic, strong) NSDictionary *> *trackingEventTable; -@end - -@implementation MPVideoConfig - -#pragma mark - Public - -- (MPVASTDurationOffset *)skipOffset { - // If the video is rewarded, do not use the skip offset for countdown timer purposes - if (self.isRewarded) { - return nil; - } else { - return _skipOffset; - } -} - -- (instancetype)initWithVASTResponse:(MPVASTResponse *)response additionalTrackers:(NSDictionary *)additionalTrackers -{ - self = [super init]; - if (self) { - [self commonInit:response additionalTrackers:additionalTrackers]; - } - return self; -} - -- (NSArray *)trackingEventsForKey:(MPVideoEvent)key { - return self.trackingEventTable[key]; -} - -#pragma mark - Private - -- (void)commonInit:(MPVASTResponse *)response additionalTrackers:(NSDictionary *)additionalTrackers -{ - NSArray *candidates = [self playbackCandidatesFromVASTResponse:response]; - - if (candidates.count == 0) { - return; - } - - MPVideoPlaybackCandidate *candidate = candidates[0]; - - // obtain from linear ad - _mediaFiles = candidate.linearAd.mediaFiles; - _clickThroughURL = candidate.linearAd.clickThroughURL; - _industryIcons = candidate.linearAd.industryIcons; - - _skipOffset = candidate.skipOffset; - _companionAds = candidate.companionAds; - - if (candidate.callToActionButtonTitle.length > 0) { - _callToActionButtonTitle = candidate.callToActionButtonTitle; - } else { - _callToActionButtonTitle = kVASTDefaultCallToActionButtonTitle; - } - - // set up the tracking event table - NSMutableDictionary *> *table - = [NSMutableDictionary dictionaryWithDictionary:candidate.linearAd.trackingEvents]; - for (MPVideoEvent name in @[MPVideoEventStart, - MPVideoEventFirstQuartile, - MPVideoEventMidpoint, - MPVideoEventThirdQuartile, - MPVideoEventComplete]) { - table[name] = [self mergeTrackersOfName:name - originalTrackers:table - additionalTrackers:additionalTrackers]; - } - - NSMutableDictionary *> *eventVsURLs = [NSMutableDictionary new]; - if (candidate.linearAd.clickTrackingURLs.count > 0) { - eventVsURLs[MPVideoEventClick] = candidate.linearAd.clickTrackingURLs; - } - if (candidate.errorURLs.count > 0) { - eventVsURLs[MPVideoEventError] = candidate.errorURLs; - } - if (candidate.impressionURLs.count > 0) { - eventVsURLs[MPVideoEventImpression] = candidate.impressionURLs; - } - - for (MPVideoEvent event in eventVsURLs.allKeys) { - NSMutableArray *trackingEvents = [NSMutableArray new]; - for (NSURL *url in eventVsURLs[event]) { - [trackingEvents addObject:[[MPVASTTrackingEvent alloc] initWithEventType:event - url:url - progressOffset:nil]]; - } - table[event] = trackingEvents; - } - - self.trackingEventTable = [NSDictionary dictionaryWithDictionary:table]; -} - -- (NSArray *)playbackCandidatesFromVASTResponse:(MPVASTResponse *)response -{ - NSMutableArray *candidates = [NSMutableArray array]; - - for (MPVASTAd *ad in response.ads) { - if (ad.inlineAd) { - MPVASTInline *inlineAd = ad.inlineAd; - MPVideoPlaybackCandidate *candidate = [[MPVideoPlaybackCandidate alloc] init]; - candidate.callToActionButtonTitle = [self extensionFromInlineAd:inlineAd forKey:kVASTMoPubCTATextKey][kVASTAdTextKey]; - - for (MPVASTCreative *creative in inlineAd.creatives) { - if (creative.linearAd && [creative.linearAd.mediaFiles count]) { - candidate.linearAd = creative.linearAd; - candidate.skipOffset = creative.linearAd.skipOffset; - candidate.errorURLs = inlineAd.errorURLs; - candidate.impressionURLs = inlineAd.impressionURLs; - [candidates addObject:candidate]; - } else if (creative.companionAds.count > 0) { - NSMutableArray *companionAds = [NSMutableArray new]; - for (MPVASTCompanionAd *companionAd in creative.companionAds) { - if (companionAd.resourceToDisplay != nil) { // cannot display ad without any resource - [companionAds addObject:companionAd]; - } - } - candidate.companionAds = [NSArray arrayWithArray:companionAds]; - } - } - } else if (ad.wrapper) { - NSArray *candidatesFromWrapper = [self playbackCandidatesFromVASTResponse:ad.wrapper.wrappedVASTResponse]; - - // Merge any wrapper-level tracking URLs into each of the candidates. - for (MPVideoPlaybackCandidate *candidate in candidatesFromWrapper) { - candidate.errorURLs = [candidate.errorURLs arrayByAddingObjectsFromArray:ad.wrapper.errorURLs]; - candidate.impressionURLs = [candidate.impressionURLs arrayByAddingObjectsFromArray:ad.wrapper.impressionURLs]; - - candidate.linearAd.trackingEvents = [self dictionaryByMergingTrackingDictionaries:@[candidate.linearAd.trackingEvents, [self trackingEventsFromWrapper:ad.wrapper]]]; - candidate.linearAd.clickTrackingURLs = [candidate.linearAd.clickTrackingURLs arrayByAddingObjectsFromArray:[self clickTrackingURLsFromWrapper:ad.wrapper]]; - candidate.linearAd.customClickURLs = [candidate.linearAd.customClickURLs arrayByAddingObjectsFromArray:[self customClickURLsFromWrapper:ad.wrapper]]; - candidate.linearAd.industryIcons = [candidate.linearAd.industryIcons arrayByAddingObjectsFromArray:[self industryIconsFromWrapper:ad.wrapper]]; - } - - [candidates addObjectsFromArray:candidatesFromWrapper]; - } - } - - return candidates; -} - -- (NSDictionary *)trackingEventsFromWrapper:(MPVASTWrapper *)wrapper -{ - NSMutableArray *trackingEventDictionaries = [NSMutableArray array]; - - for (MPVASTCreative *creative in wrapper.creatives) { - [trackingEventDictionaries addObject:creative.linearAd.trackingEvents]; - } - - return [self dictionaryByMergingTrackingDictionaries:trackingEventDictionaries]; -} - -- (NSArray *)clickTrackingURLsFromWrapper:(MPVASTWrapper *)wrapper -{ - NSMutableArray *clickTrackingURLs = [NSMutableArray array]; - for (MPVASTCreative *creative in wrapper.creatives) { - [clickTrackingURLs addObjectsFromArray:creative.linearAd.clickTrackingURLs]; - } - - return clickTrackingURLs; -} - -- (NSArray *)customClickURLsFromWrapper:(MPVASTWrapper *)wrapper -{ - NSMutableArray *customClickURLs = [NSMutableArray array]; - for (MPVASTCreative *creative in wrapper.creatives) { - [customClickURLs addObjectsFromArray:creative.linearAd.customClickURLs]; - } - - return customClickURLs; -} - -- (NSArray *)industryIconsFromWrapper:(MPVASTWrapper *)wrapper -{ - NSMutableArray *industryIcons = [NSMutableArray array]; - for (MPVASTCreative *creative in wrapper.creatives) { - [industryIcons addObjectsFromArray:creative.linearAd.industryIcons]; - } - - return industryIcons; -} - -- (NSDictionary *)extensionFromInlineAd:(MPVASTInline *)inlineAd forKey:(NSString *)key -{ - NSDictionary *extensions = inlineAd.extensions; - id extensionObject = [extensions objectForKey:@"Extension"]; - - if ([extensionObject isKindOfClass:[NSDictionary class]]) { - // Case 1: "Extensions" element with only one "Extension" child. - NSDictionary *extensionChildNode = extensionObject; - id extension = [self firstObjectForKey:key inDictionary:extensionChildNode]; - if ([extension isKindOfClass:[NSDictionary class]]) { - return extension; - } - } else if ([extensionObject isKindOfClass:[NSArray class]]) { - // Case 2: "Extensions" element with multiple "Extension" children. - NSArray *extensionChildNodes = extensionObject; - for (id node in extensionChildNodes) { - if (![node isKindOfClass:[NSDictionary class]]) { - continue; - } - - id extension = [self firstObjectForKey:key inDictionary:node]; - if ([extension isKindOfClass:[NSDictionary class]]) { - return extension; - } - } - } - - return nil; -} - -// When dealing with VAST, we will often have dictionaries where a key can map either to a single -// value or an array of values. For example, the dictionary containing VAST extensions might contain -// one or more nodes. This method is useful when we simply want the first value matching -// a given key. It is equivalent to calling [dictionary objectForKey:key] when the key maps to a -// single value. When the key maps to an NSArray, it returns the first value in the array. -- (id)firstObjectForKey:(NSString *)key inDictionary:(NSDictionary *)dictionary -{ - id value = [dictionary objectForKey:key]; - if ([value isKindOfClass:[NSArray class]]) { - return [value firstObject]; - } else { - return value; - } -} - -- (NSArray *)mergeTrackersOfName:(NSString *)trackerName - originalTrackers:(NSDictionary *> *)originalTrackers - additionalTrackers:(NSDictionary *> *)additionalTrackers { - NSArray *original = originalTrackers[trackerName]; - NSArray *additional = additionalTrackers[trackerName]; - if (original == nil || [original isKindOfClass:[NSArray class]] == false) { - original = @[]; - } - if ([additional isKindOfClass:[NSArray class]] == false) { - return original; - } - return [original arrayByAddingObjectsFromArray:additional]; -} - -- (NSDictionary *)dictionaryByMergingTrackingDictionaries:(NSArray *)dictionaries -{ - NSMutableDictionary *mergedDictionary = [NSMutableDictionary dictionary]; - for (NSDictionary *dictionary in dictionaries) { - for (NSString *key in [dictionary allKeys]) { - if ([dictionary[key] isKindOfClass:[NSArray class]]) { - if (!mergedDictionary[key]) { - mergedDictionary[key] = [NSMutableArray array]; - } - - [mergedDictionary[key] addObjectsFromArray:dictionary[key]]; - } else { - MPLogInfo(@"TrackingEvents dictionary expected an array object for key '%@' " - @"but got an instance of %@ instead.", - key, NSStringFromClass([dictionary[key] class])); - } - } - } - return mergedDictionary; -} - -@end - -#pragma mark - MPVASTCompanionAdProvider - -@implementation MPVideoConfig (MPVASTCompanionAdProvider) - -- (BOOL)hasCompanionAd { - return self.companionAds.count > 0; -} - -- (MPVASTCompanionAd *)companionAdForContainerSize:(CGSize)containerSize { - return [MPVASTCompanionAd bestCompanionAdForCandidates:self.companionAds - containerSize:containerSize]; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPXMLParser.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPXMLParser.h deleted file mode 100644 index c05a91db90..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPXMLParser.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// MPXMLParser.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@interface MPXMLParser : NSObject - -- (NSDictionary *)dictionaryWithData:(NSData *)data error:(NSError **)error; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPXMLParser.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPXMLParser.m deleted file mode 100644 index 4796632ba4..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPXMLParser.m +++ /dev/null @@ -1,89 +0,0 @@ -// -// MPXMLParser.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPXMLParser.h" - -@interface MPXMLParser () - -@property (nonatomic) NSMutableArray *elementStack; -@property (nonatomic) NSMutableString *currentTextContent; -@property (nonatomic) NSError *parseError; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MPXMLParser - -- (instancetype)init -{ - if (self = [super init]) { - _elementStack = [NSMutableArray array]; - - // Create a "root" dictionary. - [_elementStack addObject:[NSMutableDictionary dictionary]]; - - _currentTextContent = [NSMutableString string]; - } - return self; -} - -- (NSDictionary *)dictionaryWithData:(NSData *)data error:(NSError *__autoreleasing *)error -{ - NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data]; - [parser setDelegate:self]; - [parser parse]; - return self.elementStack[0]; -} - -#pragma mark - - -- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict -{ - NSMutableDictionary *parentElement = [self.elementStack lastObject]; - NSMutableDictionary *currentElement = [NSMutableDictionary dictionary]; - [currentElement addEntriesFromDictionary:attributeDict]; - - if (parentElement[elementName] && [parentElement[elementName] isKindOfClass:[NSArray class]]) { - [parentElement[elementName] addObject:currentElement]; - } else if (parentElement[elementName]) { - NSMutableDictionary *previousElement = parentElement[elementName]; - NSMutableArray *elementsArray = [NSMutableArray array]; - [elementsArray addObject:previousElement]; - [elementsArray addObject:currentElement]; - parentElement[elementName] = elementsArray; - } else { - parentElement[elementName] = currentElement; - } - - [self.elementStack addObject:currentElement]; -} - -- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName -{ - NSMutableDictionary *currentElement = [self.elementStack lastObject]; - NSString *trimmedContent = [self.currentTextContent stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; - if ([trimmedContent length]) { - currentElement[@"text"] = trimmedContent; - } - - self.currentTextContent = [NSMutableString string]; - [self.elementStack removeLastObject]; -} - -- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string -{ - [self.currentTextContent appendString:string]; -} - -- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError -{ - self.parseError = parseError; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPAdWebViewAgent.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPAdWebViewAgent.h deleted file mode 100644 index a5185daa44..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPAdWebViewAgent.h +++ /dev/null @@ -1,53 +0,0 @@ -// -// MPAdWebViewAgent.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPAdDestinationDisplayAgent.h" -#import "MPWebView.h" - -enum { - MPAdWebViewEventAdDidAppear = 0, - MPAdWebViewEventAdDidDisappear = 1 -}; -typedef NSUInteger MPAdWebViewEvent; - -@protocol MPAdWebViewAgentDelegate; - -@class MPAdConfiguration; -@class CLLocation; -@class MPViewabilityTracker; - -@interface MPAdWebViewAgent : NSObject - -@property (nonatomic, strong) MPWebView *view; -@property (nonatomic, weak) id delegate; - -@property (nonatomic, strong, readonly) MPViewabilityTracker *viewabilityTracker; - -- (id)initWithAdWebViewFrame:(CGRect)frame delegate:(id)delegate; -- (void)loadConfiguration:(MPAdConfiguration *)configuration; -- (void)invokeJavaScriptForEvent:(MPAdWebViewEvent)event; - -- (void)enableRequestHandling; -- (void)disableRequestHandling; - -- (void)startViewabilityTracker; - -@end - -@protocol MPAdWebViewAgentDelegate - -- (UIViewController *)viewControllerForPresentingModalView; -- (void)adDidClose:(MPWebView *)ad; -- (void)adDidFinishLoadingAd:(MPWebView *)ad; -- (void)adDidFailToLoadAd:(MPWebView *)ad; -- (void)adActionWillBegin:(MPWebView *)ad; -- (void)adActionWillLeaveApplication:(MPWebView *)ad; -- (void)adActionDidFinish:(MPWebView *)ad; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPAdWebViewAgent.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPAdWebViewAgent.m deleted file mode 100644 index 28db8c8dcc..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPAdWebViewAgent.m +++ /dev/null @@ -1,291 +0,0 @@ -// -// MPAdWebViewAgent.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPAdWebViewAgent.h" -#import "MPAdConfiguration.h" -#import "MPGlobal.h" -#import "MPLogging.h" -#import "MPAdDestinationDisplayAgent.h" -#import "NSURL+MPAdditions.h" -#import "MPWebView.h" -#import "MPCoreInstanceProvider.h" -#import "MPUserInteractionGestureRecognizer.h" -#import "NSJSONSerialization+MPAdditions.h" -#import "NSURL+MPAdditions.h" -#import "MPAPIEndPoints.h" -#import "MoPub.h" -#import "MPViewabilityTracker.h" -#import "NSString+MPAdditions.h" - -#ifndef NSFoundationVersionNumber_iOS_6_1 -#define NSFoundationVersionNumber_iOS_6_1 993.00 -#endif - -@interface MPAdWebViewAgent () - -@property (nonatomic, strong) MPAdConfiguration *configuration; -@property (nonatomic, strong) id destinationDisplayAgent; -@property (nonatomic, assign) BOOL shouldHandleRequests; -@property (nonatomic, assign) BOOL userInteractedWithWebView; -@property (nonatomic, strong) MPUserInteractionGestureRecognizer *userInteractionRecognizer; -@property (nonatomic, assign) CGRect frame; -@property (nonatomic, strong, readwrite) MPViewabilityTracker *viewabilityTracker; -@property (nonatomic, assign) BOOL didFireClickImpression; - -- (void)performActionForMoPubSpecificURL:(NSURL *)URL; -- (BOOL)shouldIntercept:(NSURL *)URL navigationType:(WKNavigationType)navigationType; -- (void)interceptURL:(NSURL *)URL; - -@end - -@implementation MPAdWebViewAgent - -- (id)initWithAdWebViewFrame:(CGRect)frame delegate:(id)delegate -{ - self = [super init]; - if (self) { - _frame = frame; - - self.destinationDisplayAgent = [MPAdDestinationDisplayAgent agentWithDelegate:self]; - self.delegate = delegate; - self.shouldHandleRequests = YES; - self.didFireClickImpression = NO; - - self.userInteractionRecognizer = [[MPUserInteractionGestureRecognizer alloc] initWithTarget:self action:@selector(handleInteraction:)]; - self.userInteractionRecognizer.cancelsTouchesInView = NO; - self.userInteractionRecognizer.delegate = self; - } - return self; -} - -- (void)dealloc -{ - [self.viewabilityTracker stopTracking]; - self.userInteractionRecognizer.delegate = nil; - [self.userInteractionRecognizer removeTarget:self action:nil]; - [self.destinationDisplayAgent cancel]; - [self.destinationDisplayAgent setDelegate:nil]; - self.view.delegate = nil; -} - -- (void)handleInteraction:(UITapGestureRecognizer *)sender -{ - if (sender.state == UIGestureRecognizerStateEnded) { - self.userInteractedWithWebView = YES; - } -} - -#pragma mark - - -- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer -{ - return YES; -} - -#pragma mark - Public - -- (void)loadConfiguration:(MPAdConfiguration *)configuration -{ - self.configuration = configuration; - - // Initialize web view - if (self.view != nil) { - self.view.delegate = nil; - [self.view removeFromSuperview]; - self.view = nil; - } - self.view = [[MPWebView alloc] initWithFrame:self.frame]; - self.view.shouldConformToSafeArea = [self isInterstitialAd]; - self.view.delegate = self; - [self.view addGestureRecognizer:self.userInteractionRecognizer]; - - // Ignore server configuration size for interstitials. At this point our web view - // is sized correctly for the device's screen. Currently the server sends down values for a 3.5in - // screen, and they do not size correctly on a 4in screen. - if (configuration.isFullscreenAd == false) { - if ([configuration hasPreferredSize]) { - CGRect frame = self.view.frame; - frame.size.width = configuration.preferredSize.width; - frame.size.height = configuration.preferredSize.height; - self.view.frame = frame; - } - } - - [self.view mp_setScrollable:NO]; - - // Initialize viewability trackers before loading self.view - [self init3rdPartyViewabilityTrackers]; - - [self.view loadHTMLString:[configuration adResponseHTMLString] - baseURL:[NSURL URLWithString:[MPAPIEndpoints baseURL]] - ]; -} - -- (void)invokeJavaScriptForEvent:(MPAdWebViewEvent)event -{ - switch (event) { - case MPAdWebViewEventAdDidAppear: - // For banner, viewability tracker is handled in @c MPBannerCustomEventAdapter (not here). - // For interstitial (handled here), we start tracking viewability if it's not started during adView initialization. - if ([self isInterstitialAd]) { - [self startViewabilityTracker]; - } - - [self.view stringByEvaluatingJavaScriptFromString:@"webviewDidAppear();"]; - break; - case MPAdWebViewEventAdDidDisappear: - [self.view stringByEvaluatingJavaScriptFromString:@"webviewDidClose();"]; - break; - default: - break; - } -} - -- (void)startViewabilityTracker -{ - [self.viewabilityTracker startTracking]; -} - -- (void)disableRequestHandling -{ - self.shouldHandleRequests = NO; - [self.destinationDisplayAgent cancel]; -} - -- (void)enableRequestHandling -{ - self.shouldHandleRequests = YES; -} - -#pragma mark - - -- (UIViewController *)viewControllerForPresentingModalView -{ - return [self.delegate viewControllerForPresentingModalView]; -} - -- (void)displayAgentWillPresentModal -{ - [self.delegate adActionWillBegin:self.view]; -} - -- (void)displayAgentWillLeaveApplication -{ - [self.delegate adActionWillLeaveApplication:self.view]; -} - -- (void)displayAgentDidDismissModal -{ - [self.delegate adActionDidFinish:self.view]; -} - -- (MPAdConfiguration *)adConfiguration -{ - return self.configuration; -} - -#pragma mark - - -- (BOOL)webView:(MPWebView *)webView -shouldStartLoadWithRequest:(NSURLRequest *)request - navigationType:(WKNavigationType)navigationType -{ - if (!self.shouldHandleRequests) { - return NO; - } - - NSURL *URL = [request URL]; - if ([URL mp_isMoPubScheme]) { - [self performActionForMoPubSpecificURL:URL]; - return NO; - } else if ([self shouldIntercept:URL navigationType:navigationType]) { - - // Disable intercept without user interaction - if (!self.userInteractedWithWebView) { - MPLogInfo(@"Redirect without user interaction detected"); - return NO; - } - - [self interceptURL:URL]; - return NO; - } else { - // don't handle any deep links without user interaction - return self.userInteractedWithWebView || [URL mp_isSafeForLoadingWithoutUserAction]; - } -} - -- (void)webViewDidStartLoad:(MPWebView *)webView -{ - // no op -} - -#pragma mark - MoPub-specific URL handlers -- (void)performActionForMoPubSpecificURL:(NSURL *)URL -{ - MPLogDebug(@"MPAdWebView - loading MoPub URL: %@", URL); - MPMoPubHostCommand command = [URL mp_mopubHostCommand]; - switch (command) { - case MPMoPubHostCommandClose: - [self.delegate adDidClose:self.view]; - break; - case MPMoPubHostCommandFinishLoad: - [self.delegate adDidFinishLoadingAd:self.view]; - break; - case MPMoPubHostCommandFailLoad: - [self.delegate adDidFailToLoadAd:self.view]; - break; - default: - MPLogInfo(@"MPAdWebView - unsupported MoPub URL: %@", [URL absoluteString]); - break; - } -} - -#pragma mark - URL Interception -- (BOOL)shouldIntercept:(NSURL *)URL navigationType:(WKNavigationType)navigationType -{ - if (navigationType == WKNavigationTypeLinkActivated) { - return YES; - } else if (navigationType == WKNavigationTypeOther && self.userInteractedWithWebView) { - return YES; - } else { - return NO; - } -} - -- (void)interceptURL:(NSURL *)URL -{ - NSURL *redirectedURL = URL; - if (self.configuration.clickTrackingURL && !self.didFireClickImpression) { - self.didFireClickImpression = YES; // fire click impression only once - - NSString *path = [NSString stringWithFormat:@"%@&r=%@", - self.configuration.clickTrackingURL.absoluteString, - [[URL absoluteString] mp_URLEncodedString]]; - redirectedURL = [NSURL URLWithString:path]; - } - - [self.destinationDisplayAgent displayDestinationForURL:redirectedURL]; -} - -#pragma mark - Utility - -- (void)init3rdPartyViewabilityTrackers -{ - self.viewabilityTracker = [[MPViewabilityTracker alloc] - initWithWebView:self.view - isVideo:self.configuration.isVastVideoPlayer - startTrackingImmediately:NO]; -} - -- (BOOL)isInterstitialAd -{ - return self.configuration.isFullscreenAd; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPContentBlocker.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPContentBlocker.h deleted file mode 100644 index c30ee28e38..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPContentBlocker.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// MPContentBlocker.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface MPContentBlocker : NSObject -/** - Blocked resources for use with @c WKContentRuleListStore. - */ -@property (class, nonatomic, readonly, nullable) NSString * blockedResourcesList; -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPContentBlocker.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPContentBlocker.m deleted file mode 100644 index 9ff81d182a..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPContentBlocker.m +++ /dev/null @@ -1,79 +0,0 @@ -// -// MPContentBlocker.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPContentBlocker.h" -#import "MPAPIEndpoints.h" - -@interface MPContentBlocker() -@property (class, nonatomic, readonly) NSArray * blockedResources; -@end - -@implementation MPContentBlocker - -#pragma mark - Lazy Initialized Properties - -/** - Current list of blocked resources. - */ -+ (NSArray *)blockedResources { - static NSSet * sBlockedResources = nil; - NSString * blockedURLString = [NSString stringWithFormat:@"http.?://%@/mraid.js", MPAPIEndpoints.baseHostname]; - - if (sBlockedResources == nil) { - sBlockedResources = [NSSet setWithObject:blockedURLString]; - } else if (![sBlockedResources containsObject:blockedURLString]) { - sBlockedResources = [sBlockedResources setByAddingObject:blockedURLString]; - } - - return [sBlockedResources allObjects]; -} - -/** - Generates a JSON block pattern from the URL resource. - */ -+ (NSDictionary *)blockPatternFromResource:(NSString *)resource { - if (resource == nil) { - return nil; - } - - // See https://developer.apple.com/documentation/safariservices/creating_a_content_blocker?language=objc - // for the specifics of the content blocking JSON structure. - return @{ @"action": @{ @"type": @"block" }, - @"trigger": @{ @"url-filter": resource } }; -} - -+ (NSString *)blockedResourcesList { - static NSString * sBlockedResourcesList = nil; - static NSInteger sBlockedResourcesListCount = 0; - - // Update the blocked resources string if: - // - the string @c sBlockedResourcesList has not been initialized - // - the count for @c blockedResources (stored in @c sBlockedResourcesListCount) has changed - if (sBlockedResourcesList == nil || sBlockedResourcesListCount != MPContentBlocker.blockedResources.count) { - // Update present blocked resources count to new value - sBlockedResourcesListCount = MPContentBlocker.blockedResources.count; - - // Aggregate all resource patterns to block into a single JSON structure. - NSMutableArray * patterns = [NSMutableArray arrayWithCapacity:MPContentBlocker.blockedResources.count]; - [MPContentBlocker.blockedResources enumerateObjectsUsingBlock:^(NSString * resource, NSUInteger idx, BOOL * _Nonnull stop) { - NSDictionary * blockPattern = [MPContentBlocker blockPatternFromResource:resource]; - if (blockPattern != nil) { - [patterns addObject:blockPattern]; - } - }]; - - // Generate a JSON string. - NSError * error = nil; - NSData * jsonData = [NSJSONSerialization dataWithJSONObject:patterns options:0 error:&error]; - sBlockedResourcesList = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; - } - - return sBlockedResourcesList; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPHTMLBannerCustomEvent.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPHTMLBannerCustomEvent.h deleted file mode 100644 index b179da6efa..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPHTMLBannerCustomEvent.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// MPHTMLBannerCustomEvent.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPBannerCustomEvent.h" -#import "MPAdWebViewAgent.h" -#import "MPPrivateBannerCustomEventDelegate.h" - -@interface MPHTMLBannerCustomEvent : MPBannerCustomEvent - -@property (nonatomic, weak) id delegate; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPHTMLBannerCustomEvent.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPHTMLBannerCustomEvent.m deleted file mode 100644 index 908cc2d072..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPHTMLBannerCustomEvent.m +++ /dev/null @@ -1,106 +0,0 @@ -// -// MPHTMLBannerCustomEvent.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPHTMLBannerCustomEvent.h" -#import "MPWebView.h" -#import "MPError.h" -#import "MPLogging.h" -#import "MPAdConfiguration.h" -#import "MPAnalyticsTracker.h" - -@interface MPHTMLBannerCustomEvent () - -@property (nonatomic, strong) MPAdWebViewAgent *bannerAgent; - -@end - -@implementation MPHTMLBannerCustomEvent - -// Explicitly `@synthesize` here to fix a "-Wobjc-property-synthesis" warning because super class `delegate` is -// `id` and this `delegate` is `id` -@synthesize delegate; - -- (BOOL)enableAutomaticImpressionAndClickTracking -{ - return YES; -} - -- (void)requestAdWithSize:(CGSize)size customEventInfo:(NSDictionary *)info adMarkup:(NSString *)adMarkup -{ - MPAdConfiguration * configuration = self.delegate.configuration; - - MPLogAdEvent([MPLogEvent adLoadAttemptForAdapter:NSStringFromClass(configuration.customEventClass) dspCreativeId:configuration.dspCreativeId dspName:nil], self.adUnitId); - - CGRect adWebViewFrame = CGRectMake(0, 0, size.width, size.height); - self.bannerAgent = [[MPAdWebViewAgent alloc] initWithAdWebViewFrame:adWebViewFrame delegate:self]; - [self.bannerAgent loadConfiguration:configuration]; -} - -- (void)dealloc -{ - self.bannerAgent.delegate = nil; -} - -#pragma mark - MPAdWebViewAgentDelegate - -- (NSString *)adUnitId -{ - return [self.delegate adUnitId]; -} - -- (UIViewController *)viewControllerForPresentingModalView -{ - return [self.delegate viewControllerForPresentingModalView]; -} - -- (void)adDidFinishLoadingAd:(MPWebView *)ad -{ - MPLogAdEvent([MPLogEvent adLoadSuccessForAdapter:NSStringFromClass(self.class)], self.adUnitId); - [self.delegate bannerCustomEvent:self didLoadAd:ad]; -} - -- (void)adDidFailToLoadAd:(MPWebView *)ad -{ - NSString * message = [NSString stringWithFormat:@"Failed to load creative:\n%@", self.delegate.configuration.adResponseHTMLString]; - NSError * error = [NSError errorWithCode:MOPUBErrorAdapterFailedToLoadAd localizedDescription:message]; - - MPLogAdEvent([MPLogEvent adLoadFailedForAdapter:NSStringFromClass(self.class) error:error], self.adUnitId); - [self.delegate bannerCustomEvent:self didFailToLoadAdWithError:error]; -} - -- (void)adDidClose:(MPWebView *)ad -{ - //don't care -} - -- (void)adActionWillBegin:(MPWebView *)ad -{ - [self.delegate bannerCustomEventWillBeginAction:self]; -} - -- (void)adActionDidFinish:(MPWebView *)ad -{ - [self.delegate bannerCustomEventDidFinishAction:self]; -} - -- (void)adActionWillLeaveApplication:(MPWebView *)ad -{ - [self.delegate bannerCustomEventWillLeaveApplication:self]; -} - -- (void)trackImpressionsIncludedInMarkup -{ - [self.bannerAgent invokeJavaScriptForEvent:MPAdWebViewEventAdDidAppear]; -} - -- (void)startViewabilityTracker -{ - [self.bannerAgent startViewabilityTracker]; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPHTMLInterstitialCustomEvent.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPHTMLInterstitialCustomEvent.h deleted file mode 100644 index 50198d531a..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPHTMLInterstitialCustomEvent.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// MPHTMLInterstitialCustomEvent.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPInterstitialCustomEvent.h" -#import "MPPrivateInterstitialCustomEventDelegate.h" - -@interface MPHTMLInterstitialCustomEvent : MPInterstitialCustomEvent - -@property (nonatomic, weak) id delegate; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPHTMLInterstitialCustomEvent.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPHTMLInterstitialCustomEvent.m deleted file mode 100644 index dab80a74b5..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPHTMLInterstitialCustomEvent.m +++ /dev/null @@ -1,131 +0,0 @@ -// -// MPHTMLInterstitialCustomEvent.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPHTMLInterstitialCustomEvent.h" -#import "MPHTMLInterstitialViewController.h" -#import "MPAdConfiguration.h" -#import "MPError.h" -#import "MPLogging.h" - -@interface MPHTMLInterstitialCustomEvent () - -@property (nonatomic, strong) MPHTMLInterstitialViewController *interstitial; -@property (nonatomic, assign) BOOL trackedImpression; - -@end - -@interface MPHTMLInterstitialCustomEvent (MPInterstitialViewControllerDelegate) -@end - -@implementation MPHTMLInterstitialCustomEvent - -// Explicitly `@synthesize` here to fix a "-Wobjc-property-synthesis" warning because super class `delegate` is -// `id` and this `delegate` is `id` -@synthesize delegate; - -- (NSString *)adUnitId -{ - return [self.delegate adUnitId]; -} - -- (BOOL)enableAutomaticImpressionAndClickTracking -{ - // An HTML interstitial tracks its own clicks. Turn off automatic tracking to prevent the tap event callback - // from generating an additional click. - // However, an HTML interstitial does not track its own impressions so we must manually do it in this class. - // See interstitialDidAppear: - return NO; -} - -- (void)requestInterstitialWithCustomEventInfo:(NSDictionary *)info adMarkup:(NSString *)adMarkup -{ - MPAdConfiguration * configuration = self.delegate.configuration; - MPLogAdEvent([MPLogEvent adLoadAttemptForAdapter:NSStringFromClass(self.class) dspCreativeId:configuration.dspCreativeId dspName:nil], self.adUnitId); - - self.interstitial = [[MPHTMLInterstitialViewController alloc] init]; - self.interstitial.delegate = self; - self.interstitial.orientationType = configuration.orientationType; - - [self.interstitial loadConfiguration:configuration]; -} - -- (void)showInterstitialFromRootViewController:(UIViewController *)rootViewController -{ - MPLogAdEvent([MPLogEvent adShowAttemptForAdapter:NSStringFromClass(self.class)], self.adUnitId); - [self.interstitial presentInterstitialFromViewController:rootViewController complete:^(NSError * error) { - if (error != nil) { - MPLogAdEvent([MPLogEvent adShowFailedForAdapter:NSStringFromClass(self.class) error:error], self.adUnitId); - } - else { - MPLogAdEvent([MPLogEvent adShowSuccessForAdapter:NSStringFromClass(self.class)], self.adUnitId); - } - }]; -} - -@end - -#pragma mark - MPInterstitialViewControllerDelegate - -@implementation MPHTMLInterstitialCustomEvent (MPInterstitialViewControllerDelegate) - -- (void)interstitialDidLoadAd:(id)interstitial -{ - MPLogAdEvent([MPLogEvent adLoadSuccessForAdapter:NSStringFromClass(self.class)], self.adUnitId); - [self.delegate interstitialCustomEvent:self didLoadAd:self.interstitial]; -} - -- (void)interstitialDidFailToLoadAd:(id)interstitial -{ - NSString * message = [NSString stringWithFormat:@"Failed to load creative:\n%@", self.delegate.configuration.adResponseHTMLString]; - NSError * error = [NSError errorWithCode:MOPUBErrorAdapterFailedToLoadAd localizedDescription:message]; - - MPLogAdEvent([MPLogEvent adLoadFailedForAdapter:NSStringFromClass(self.class) error:error], self.adUnitId); - [self.delegate interstitialCustomEvent:self didFailToLoadAdWithError:error]; -} - -- (void)interstitialWillAppear:(id)interstitial -{ - [self.delegate interstitialCustomEventWillAppear:self]; -} - -- (void)interstitialDidAppear:(id)interstitial -{ - [self.delegate interstitialCustomEventDidAppear:self]; - - if (!self.trackedImpression) { - self.trackedImpression = YES; - [self.delegate trackImpression]; - } -} - -- (void)interstitialWillDisappear:(id)interstitial -{ - [self.delegate interstitialCustomEventWillDisappear:self]; -} - -- (void)interstitialDidDisappear:(id)interstitial -{ - [self.delegate interstitialCustomEventDidDisappear:self]; - - // Deallocate the interstitial as we don't need it anymore. If we don't deallocate the interstitial after dismissal, - // then the html in the webview will continue to run which could lead to bugs such as continuing to play the sound of an inline - // video since the app may hold onto the interstitial ad controller. Moreover, we keep an array of controllers around as well. - self.interstitial = nil; -} - -- (void)interstitialDidReceiveTapEvent:(id)interstitial -{ - [self.delegate interstitialCustomEventDidReceiveTapEvent:self]; -} - -- (void)interstitialWillLeaveApplication:(id)interstitial -{ - [self.delegate interstitialCustomEventWillLeaveApplication:self]; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPHTMLInterstitialViewController.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPHTMLInterstitialViewController.h deleted file mode 100644 index 6659bc2f03..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPHTMLInterstitialViewController.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// MPHTMLInterstitialViewController.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -#import "MPAdWebViewAgent.h" -#import "MPInterstitialViewController.h" - -@class MPAdConfiguration; - -@interface MPHTMLInterstitialViewController : MPInterstitialViewController - -@property (nonatomic, strong) MPAdWebViewAgent *backingViewAgent; - -- (void)loadConfiguration:(MPAdConfiguration *)configuration; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPHTMLInterstitialViewController.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPHTMLInterstitialViewController.m deleted file mode 100644 index a0191a1b3e..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPHTMLInterstitialViewController.m +++ /dev/null @@ -1,133 +0,0 @@ -// -// MPHTMLInterstitialViewController.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPHTMLInterstitialViewController.h" -#import "MPWebView.h" -#import "MPAdDestinationDisplayAgent.h" -#import "MPViewabilityTracker.h" - -@interface MPHTMLInterstitialViewController () - -@property (nonatomic, strong) MPWebView *backingView; - -@end - -/////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MPHTMLInterstitialViewController - -- (void)dealloc -{ - self.backingViewAgent.delegate = nil; - - self.backingView.delegate = nil; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - self.view.backgroundColor = [UIColor blackColor]; - self.backingViewAgent = [[MPAdWebViewAgent alloc] initWithAdWebViewFrame:self.view.bounds delegate:self]; -} - -#pragma mark - Public - -- (void)loadConfiguration:(MPAdConfiguration *)configuration -{ - [self view]; - [self.backingViewAgent loadConfiguration:configuration]; - - self.backingView = self.backingViewAgent.view; - [self.view addSubview:self.backingView]; - self.backingView.frame = self.view.bounds; - self.backingView.autoresizingMask = UIViewAutoresizingFlexibleWidth | - UIViewAutoresizingFlexibleHeight; - if (@available(iOS 11, *)) { - self.backingView.translatesAutoresizingMaskIntoConstraints = NO; - [NSLayoutConstraint activateConstraints:@[ - [self.backingView.topAnchor constraintEqualToAnchor:self.view.topAnchor], - [self.backingView.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor], - [self.backingView.trailingAnchor constraintEqualToAnchor:self.view.trailingAnchor], - [self.backingView.bottomAnchor constraintEqualToAnchor:self.view.bottomAnchor], - ]]; - } - - [self.backingViewAgent.viewabilityTracker registerFriendlyObstructionView:self.closeButton]; -} - -- (void)willPresentInterstitial -{ - self.backingView.alpha = 0.0; - [self.delegate interstitialWillAppear:self]; -} - -- (void)didPresentInterstitial -{ - [self.backingViewAgent enableRequestHandling]; - [self.backingViewAgent invokeJavaScriptForEvent:MPAdWebViewEventAdDidAppear]; - - [UIView beginAnimations:nil context:nil]; - [UIView setAnimationDuration:0.3]; - self.backingView.alpha = 1.0; - [UIView commitAnimations]; - - [self.delegate interstitialDidAppear:self]; -} - -- (void)willDismissInterstitial -{ - [self.backingViewAgent disableRequestHandling]; - [self.delegate interstitialWillDisappear:self]; -} - -- (void)didDismissInterstitial -{ - [self.backingViewAgent invokeJavaScriptForEvent:MPAdWebViewEventAdDidDisappear]; - [self.delegate interstitialDidDisappear:self]; -} - -#pragma mark - MPAdWebViewAgentDelegate - -- (UIViewController *)viewControllerForPresentingModalView -{ - return self; -} - -- (void)adDidFinishLoadingAd:(MPWebView *)ad -{ - [self.delegate interstitialDidLoadAd:self]; -} - -- (void)adDidFailToLoadAd:(MPWebView *)ad -{ - [self.delegate interstitialDidFailToLoadAd:self]; -} - -- (void)adActionWillBegin:(MPWebView *)ad -{ - [self.delegate interstitialDidReceiveTapEvent:self]; -} - -- (void)adActionWillLeaveApplication:(MPWebView *)ad -{ - [self.delegate interstitialWillLeaveApplication:self]; - [self dismissInterstitialAnimated:NO]; -} - -- (void)adActionDidFinish:(MPWebView *)ad -{ - //NOOP: the landing page is going away, but not the interstitial. -} - -- (void)adDidClose:(MPWebView *)ad -{ - //NOOP: the ad is going away, but not the interstitial. -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPWebView.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPWebView.h deleted file mode 100644 index e4089c8c15..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPWebView.h +++ /dev/null @@ -1,94 +0,0 @@ -// -// MPWebView.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -/** - * @c MPWebView - * This class is a wrapper class for @c WKWebView. @c MPWebView blocks all JavaScript text boxes from appearing. - * - * It's highly recommended that the caller uses @c `evaluateJavaScript:completionHandler:` whenever code can be reworked - * to make use of completion blocks to keep the advantages of asynchronicity. It solely fires off the javascript execution within - * @c WKWebView and does not wait or return. - * - * MPWebView currently does not support a few other features of WKWebView, such as pagination -- as WKWebView. - */ - -#import -#import - -@class MPWebView; - -@protocol MPWebViewDelegate - -@optional - -- (BOOL)webView:(MPWebView *)webView -shouldStartLoadWithRequest:(NSURLRequest *)request - navigationType:(WKNavigationType)navigationType; - -- (void)webViewDidStartLoad:(MPWebView *)webView; - -- (void)webViewDidFinishLoad:(MPWebView *)webView; - -- (void)webView:(MPWebView *)webView -didFailLoadWithError:(NSError *)error; - -@end - -typedef void (^MPWebViewJavascriptEvaluationCompletionHandler)(id result, NSError *error); - -@interface MPWebView : UIView - -@property (weak, nonatomic) id delegate; - -// When set to `YES`, `shouldConformToSafeArea` sets constraints on the WKWebView to always stay within the safe area -// using the MPWebView's safeAreaLayoutGuide. Otherwise, the WKWebView will be constrained directly to MPWebView's -// anchors to fill the whole container. Default is `NO`. -// -// This property has no effect on versions of iOS less than 11 or phones other than iPhone X. -@property (nonatomic, assign) BOOL shouldConformToSafeArea; - -@property (nonatomic, readonly, getter=isLoading) BOOL loading; - -- (void)loadData:(NSData *)data - MIMEType:(NSString *)MIMEType -textEncodingName:(NSString *)encodingName - baseURL:(NSURL *)baseURL; - -@property (nonatomic) BOOL allowsLinkPreview; -@property (nonatomic, readonly) BOOL allowsPictureInPictureMediaPlayback; - -- (void)loadHTMLString:(NSString *)string - baseURL:(NSURL *)baseURL; - -- (void)loadRequest:(NSURLRequest *)request; -- (void)stopLoading; -- (void)reload; - -@property (nonatomic, readonly) BOOL canGoBack; -@property (nonatomic, readonly) BOOL canGoForward; -- (void)goBack; -- (void)goForward; - -@property (nonatomic) BOOL scalesPageToFit; -@property (nonatomic, readonly) UIScrollView *scrollView; - -- (void)evaluateJavaScript:(NSString *)javaScriptString - completionHandler:(MPWebViewJavascriptEvaluationCompletionHandler)completionHandler; - -// When using WKWebView, always returns @"" and solely fires the javascript execution without waiting on it. -// If you need a guaranteed return value from `stringByEvaluatingJavaScriptFromString:`, please use -// `evaluateJavaScript:completionHandler:` instead. -- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)javaScriptString; - -@property (nonatomic, readonly) BOOL allowsInlineMediaPlayback; -@property (nonatomic, readonly) BOOL mediaPlaybackRequiresUserAction; -@property (nonatomic, readonly) BOOL mediaPlaybackAllowsAirPlay; - -- (void)mp_setScrollable:(BOOL)scrollable; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPWebView.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPWebView.m deleted file mode 100644 index df0ab82602..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPWebView.m +++ /dev/null @@ -1,445 +0,0 @@ -// -// MPWebView.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPWebView.h" -#import "MPContentBlocker.h" -#import - -static BOOL const kMoPubAllowsInlineMediaPlaybackDefault = YES; -static BOOL const kMoPubRequiresUserActionForMediaPlaybackDefault = NO; - -// Set defaults for this as its default differs between different iOS versions. -static BOOL const kMoPubAllowsLinkPreviewDefault = NO; - -static NSString *const kMoPubJavaScriptDisableDialogScript = @"window.alert = function() { }; window.prompt = function() { }; window.confirm = function() { };"; - -static NSString *const kMoPubFrameKeyPathString = @"frame"; - -@interface MPWebView () - -@property (weak, nonatomic) WKWebView *wkWebView; - -@property (strong, nonatomic) NSArray *webViewLayoutConstraints; - -@property (nonatomic, assign) BOOL hasMovedToWindow; - -@end - -@implementation MPWebView - -- (instancetype)init { - if (self = [super init]) { - [self setUp]; - } - - return self; -} - -- (instancetype)initWithCoder:(NSCoder *)aDecoder { - if (self = [super initWithCoder:aDecoder]) { - [self setUp]; - } - - return self; -} - -- (instancetype)initWithFrame:(CGRect)frame { - if (self = [super initWithFrame:frame]) { - [self setUp]; - } - - return self; -} - -- (void)setUp { - WKUserContentController *contentController = [[WKUserContentController alloc] init]; - WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init]; - config.allowsInlineMediaPlayback = kMoPubAllowsInlineMediaPlaybackDefault; - config.requiresUserActionForMediaPlayback = kMoPubRequiresUserActionForMediaPlaybackDefault; - config.userContentController = contentController; - - if (@available(iOS 11, *)) { - [WKContentRuleListStore.defaultStore compileContentRuleListForIdentifier:@"ContentBlockingRules" - encodedContentRuleList:MPContentBlocker.blockedResourcesList - completionHandler:^(WKContentRuleList * rulesList, NSError * error) { - if (error == nil) { - [config.userContentController addContentRuleList:rulesList]; - } - }]; - } - - WKWebView *wkWebView = [[WKWebView alloc] initWithFrame:self.bounds configuration:config]; - wkWebView.UIDelegate = self; - wkWebView.navigationDelegate = self; - self.wkWebView = wkWebView; - - // Put WKWebView onto the offscreen view so any loading will complete correctly; see comment below. - [self retainWKWebViewOffscreen:wkWebView]; - - wkWebView.backgroundColor = [UIColor clearColor]; - wkWebView.opaque = NO; - wkWebView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - - // set default scalesPageToFit - self.scalesPageToFit = NO; - - // set default `shouldConformToSafeArea` - self.shouldConformToSafeArea = NO; - - // configure like the old MPAdWebView - self.backgroundColor = [UIColor clearColor]; - self.opaque = NO; - - // set default for allowsLinkPreview as they're different between iOS versions - self.allowsLinkPreview = kMoPubAllowsLinkPreviewDefault; - - // set up KVO to adjust the frame of the WKWebView to avoid white screens - if (self.wkWebView) { - [self addObserver:self - forKeyPath:kMoPubFrameKeyPathString - options:NSKeyValueObservingOptionOld - context:NULL]; - } -} - -// WKWebView won't load/execute javascript unless it's on the view hierarchy. Because the MoPub SDK uses a lot of -// javascript before adding the view to the hierarchy, let's stick the WKWebView into an offscreen-but-on-the-window -// view, and move it to self when self gets a window. -static UIView *gOffscreenView = nil; - -- (void)retainWKWebViewOffscreen:(WKWebView *)webView { - if (!gOffscreenView) { - gOffscreenView = [self constructOffscreenView]; - } - [gOffscreenView addSubview:webView]; -} - -- (void)cleanUpOffscreenView { - if (gOffscreenView.subviews.count == 0) { - [gOffscreenView removeFromSuperview]; - gOffscreenView = nil; - } -} - -- (UIView *)constructOffscreenView { - UIView *view = [[UIView alloc] initWithFrame:CGRectZero]; - view.clipsToBounds = YES; - - UIWindow *appWindow = [[UIApplication sharedApplication] keyWindow]; - [appWindow addSubview:view]; - - return view; -} - -- (void)didMoveToWindow { - // If using WKWebView, and if MPWebView is in the view hierarchy, and if the WKWebView is in the offscreen view currently, - // move our WKWebView to self and deallocate OffscreenView if no other MPWebView is using it. - if (self.wkWebView - && !self.hasMovedToWindow - && self.window != nil - && [self.wkWebView.superview isEqual:gOffscreenView]) { - self.wkWebView.frame = self.bounds; - [self addSubview:self.wkWebView]; - [self constrainView:self.wkWebView shouldUseSafeArea:self.shouldConformToSafeArea]; - self.hasMovedToWindow = YES; - - // Don't keep OffscreenView if we don't need it; it can always be re-allocated again later - [self cleanUpOffscreenView]; - } -} - -// Occasionally, we encounter an issue where, when MPWebView is initialized at a different frame size than when it's shown, -// the WKWebView shows as all white because it doesn't have a chance to get redrawn at the new size before getting shown. -// This makes sure WKWebView is always already rendered at the correct size when it gets moved to the window. -- (void)observeValueForKeyPath:(NSString *)keyPath - ofObject:(id)object - change:(NSDictionary *)change - context:(void *)context { - // Only keep the wkWebView up-to-date if its superview is the offscreen view. - // If it's attached to self, the autoresizing mask should come into play & this is just extra work. - if ([keyPath isEqualToString:kMoPubFrameKeyPathString] - && [self.wkWebView.superview isEqual:gOffscreenView]) { - if (@available(iOS 11, *)) { - // In iOS 11, WKWebView loads web view contents into the safe area only unless `viewport-fit=cover` is - // included in the page's viewport tag. Also, as of iOS 11, it appears WKWebView does not redraw page - // contents to match the safe area of a new position after being moved. As a result, making `wkWebView`'s - // X/Y coordinates (0,0) can introduce an issue on iPhone X where banners do not load inside of - // `wkWebView`'s bounds, even if the banner is moved into the safe area after loading. - // - // To skirt around these problems, always put `wkWebView` into the safe area when using iOS 11 or later. - self.wkWebView.frame = CGRectMake(gOffscreenView.safeAreaInsets.left, - gOffscreenView.safeAreaInsets.top, - CGRectGetWidth(self.bounds), - CGRectGetHeight(self.bounds)); - } else { - self.wkWebView.frame = self.bounds; - } - } -} - -- (void)dealloc { - // Remove KVO observer - if (self.wkWebView) { - [self removeObserver:self forKeyPath:kMoPubFrameKeyPathString]; - } - - // Avoids EXC_BAD_INSTRUCTION crash - self.wkWebView.scrollView.delegate = nil; - - // Be sure our WKWebView doesn't stay stuck to the static OffscreenView - [self.wkWebView removeFromSuperview]; - // Deallocate OffscreenView if needed - [self cleanUpOffscreenView]; -} - -- (void)setShouldConformToSafeArea:(BOOL)shouldConformToSafeArea { - _shouldConformToSafeArea = shouldConformToSafeArea; - - if (self.hasMovedToWindow) { - [self constrainView:self.wkWebView shouldUseSafeArea:shouldConformToSafeArea]; - } -} - -- (void)constrainView:(UIView *)view shouldUseSafeArea:(BOOL)shouldUseSafeArea { - if (@available(iOS 11, *)) { - view.translatesAutoresizingMaskIntoConstraints = NO; - - if (self.webViewLayoutConstraints) { - [NSLayoutConstraint deactivateConstraints:self.webViewLayoutConstraints]; - } - - if (shouldUseSafeArea) { - self.webViewLayoutConstraints = @[ - [view.topAnchor constraintEqualToAnchor:self.safeAreaLayoutGuide.topAnchor], - [view.leadingAnchor constraintEqualToAnchor:self.safeAreaLayoutGuide.leadingAnchor], - [view.trailingAnchor constraintEqualToAnchor:self.safeAreaLayoutGuide.trailingAnchor], - [view.bottomAnchor constraintEqualToAnchor:self.safeAreaLayoutGuide.bottomAnchor], - ]; - } else { - self.webViewLayoutConstraints = @[ - [view.topAnchor constraintEqualToAnchor:self.topAnchor], - [view.leadingAnchor constraintEqualToAnchor:self.leadingAnchor], - [view.trailingAnchor constraintEqualToAnchor:self.trailingAnchor], - [view.bottomAnchor constraintEqualToAnchor:self.bottomAnchor], - ]; - } - - [NSLayoutConstraint activateConstraints:self.webViewLayoutConstraints]; - } -} - -- (BOOL)isLoading { - return self.wkWebView.isLoading; -} - -- (void)loadData:(NSData *)data - MIMEType:(NSString *)MIMEType -textEncodingName:(NSString *)encodingName - baseURL:(NSURL *)baseURL { - [self.wkWebView loadData:data - MIMEType:MIMEType - characterEncodingName:encodingName - baseURL:baseURL]; -} - -- (void)loadHTMLString:(NSString *)string baseURL:(NSURL *)baseURL { - [self.wkWebView loadHTMLString:string baseURL:baseURL]; -} - -- (void)loadRequest:(NSURLRequest *)request { - [self.wkWebView loadRequest:request]; -} - -- (void)stopLoading { - [self.wkWebView stopLoading]; -} - -- (void)reload { - [self.wkWebView reload]; -} - -- (BOOL)canGoBack { - return self.wkWebView.canGoBack; -} - -- (BOOL)canGoForward { - return self.wkWebView.canGoForward; -} - -- (void)goBack { - [self.wkWebView goBack]; -} - -- (void)goForward { - [self.wkWebView goForward]; -} - -- (void)setAllowsLinkPreview:(BOOL)allowsLinkPreview { - self.wkWebView.allowsLinkPreview = allowsLinkPreview; -} - -- (BOOL)allowsLinkPreview { - return self.wkWebView.allowsLinkPreview; -} - -- (void)setScalesPageToFit:(BOOL)scalesPageToFit { - if (scalesPageToFit) { - self.wkWebView.scrollView.delegate = nil; - - [self.wkWebView.configuration.userContentController removeAllUserScripts]; - } else { - // Make sure the scroll view can't scroll (prevent double tap to zoom) - self.wkWebView.scrollView.delegate = self; - } -} - -- (BOOL)scalesPageToFit { - return self.scrollView.delegate == nil; -} - -- (UIScrollView *)scrollView { - return self.wkWebView.scrollView; -} - -- (void)evaluateJavaScript:(NSString *)javaScriptString - completionHandler:(MPWebViewJavascriptEvaluationCompletionHandler)completionHandler { - [self.wkWebView evaluateJavaScript:javaScriptString completionHandler:completionHandler]; -} - -- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)javaScriptString { - // There is no way to reliably wait for `evaluateJavaScript:completionHandler:` to finish without risk of - // deadlocking the main thread. This method is called on the main thread and the completion block is also - // called on the main thread. - // Instead of waiting, just fire and return an empty string. - - // Methods attempted: - // libdispatch dispatch groups - // http://stackoverflow.com/questions/17920169/how-to-wait-for-method-that-has-completion-block-all-on-main-thread - - [self.wkWebView evaluateJavaScript:javaScriptString completionHandler:nil]; - return @""; -} - -- (BOOL)allowsInlineMediaPlayback { - return self.wkWebView.configuration.allowsInlineMediaPlayback; -} - -- (BOOL)mediaPlaybackRequiresUserAction { - return self.wkWebView.configuration.requiresUserActionForMediaPlayback; -} - -- (BOOL)mediaPlaybackAllowsAirPlay { - return self.wkWebView.configuration.allowsAirPlayForMediaPlayback; -} - -- (BOOL)allowsPictureInPictureMediaPlayback { - return self.wkWebView.configuration.allowsPictureInPictureMediaPlayback; -} - -#pragma mark - UIScrollView related - -/// Find all subviews that are UIScrollViews or subclasses and set their scrolling and bounce. -- (void)mp_setScrollable:(BOOL)scrollable { - UIScrollView *scrollView = self.scrollView; - scrollView.scrollEnabled = scrollable; - scrollView.bounces = scrollable; -} - -#pragma mark - WKNavigationDelegate - -- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation { - if ([self.delegate respondsToSelector:@selector(webViewDidStartLoad:)]) { - [self.delegate webViewDidStartLoad:self]; - } -} - -- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation { - if ([self.delegate respondsToSelector:@selector(webViewDidFinishLoad:)]) { - [self.delegate webViewDidFinishLoad:self]; - } -} - -- (void)webView:(WKWebView *)webView -didFailNavigation:(WKNavigation *)navigation - withError:(NSError *)error { - if ([self.delegate respondsToSelector:@selector(webView:didFailLoadWithError:)]) { - [self.delegate webView:self didFailLoadWithError:error]; - } -} - -- (void)webView:(WKWebView *)webView -didFailProvisionalNavigation:(WKNavigation *)navigation - withError:(NSError *)error { - if ([self.delegate respondsToSelector:@selector(webView:didFailLoadWithError:)]) { - [self.delegate webView:self didFailLoadWithError:error]; - } -} - -- (void)webView:(WKWebView *)webView -decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction -decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler { - WKNavigationActionPolicy policy = WKNavigationActionPolicyAllow; - - if ([self.delegate respondsToSelector:@selector(webView:shouldStartLoadWithRequest:navigationType:)]) { - policy = [self.delegate webView:self - shouldStartLoadWithRequest:navigationAction.request - navigationType:navigationAction.navigationType] ? WKNavigationActionPolicyAllow : WKNavigationActionPolicyCancel; - } - - decisionHandler(policy); -} - -- (WKWebView *)webView:(WKWebView *)webView -createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration -forNavigationAction:(WKNavigationAction *)navigationAction -windowFeatures:(WKWindowFeatures *)windowFeatures { - // Open any links to new windows in the current WKWebView rather than create a new one - if (!navigationAction.targetFrame.isMainFrame) { - [webView loadRequest:navigationAction.request]; - } - - return nil; -} - -#pragma mark - UIScrollViewDelegate - -// Avoid double tap to zoom in WKWebView -// Delegate is only set when scalesPagesToFit is set to NO -- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView { - return nil; -} - -#pragma mark - WKUIDelegate - -// WKUIDelegate method implementations makes it so that, if a WKWebView is being used, javascript dialog boxes can -// never show. They're programatically dismissed with the "Cancel" option (if there is any such option) before showing -// a view. - -- (void)webView:(WKWebView *)webView -runJavaScriptAlertPanelWithMessage:(NSString *)message -initiatedByFrame:(WKFrameInfo *)frame -completionHandler:(void (^)(void))completionHandler { - completionHandler(); -} - -- (void)webView:(WKWebView *)webView -runJavaScriptConfirmPanelWithMessage:(NSString *)message -initiatedByFrame:(WKFrameInfo *)frame -completionHandler:(void (^)(BOOL))completionHandler { - completionHandler(NO); -} - -- (void)webView:(WKWebView *)webView -runJavaScriptTextInputPanelWithPrompt:(NSString *)prompt - defaultText:(NSString *)defaultText -initiatedByFrame:(WKFrameInfo *)frame -completionHandler:(void (^)(NSString *result))completionHandler { - completionHandler(nil); -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPBaseInterstitialAdapter.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPBaseInterstitialAdapter.h deleted file mode 100644 index 647684a76d..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPBaseInterstitialAdapter.h +++ /dev/null @@ -1,72 +0,0 @@ -// -// MPBaseInterstitialAdapter.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import - -@class CLLocation; -@class MPAdConfiguration; -@class MPAdTargeting; - -@protocol MPInterstitialAdapterDelegate; - -@interface MPBaseInterstitialAdapter : NSObject - -@property (nonatomic, weak) id delegate; - -/* - * Creates an adapter with a reference to an MPInterstitialAdManager. - */ -- (id)initWithDelegate:(id)delegate; - -/* - * Sets the adapter's delegate to nil. - */ -- (void)unregisterDelegate; - -- (void)getAdWithConfiguration:(MPAdConfiguration *)configuration targeting:(MPAdTargeting *)targeting; -- (void)_getAdWithConfiguration:(MPAdConfiguration *)configuration targeting:(MPAdTargeting *)targeting; - -- (void)didStopLoading; - -/* - * Presents the interstitial from the specified view controller. - */ -- (void)showInterstitialFromViewController:(UIViewController *)controller; - -@end - -@interface MPBaseInterstitialAdapter (ProtectedMethods) - -- (void)trackImpression; -- (void)trackClick; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@class MPInterstitialAdController; - -@protocol MPInterstitialAdapterDelegate - -- (MPInterstitialAdController *)interstitialAdController; -- (id)interstitialDelegate; -- (CLLocation *)location; - -- (void)adapterDidFinishLoadingAd:(MPBaseInterstitialAdapter *)adapter; -- (void)adapter:(MPBaseInterstitialAdapter *)adapter didFailToLoadAdWithError:(NSError *)error; -- (void)interstitialWillAppearForAdapter:(MPBaseInterstitialAdapter *)adapter; -- (void)interstitialDidAppearForAdapter:(MPBaseInterstitialAdapter *)adapter; -- (void)interstitialWillDisappearForAdapter:(MPBaseInterstitialAdapter *)adapter; -- (void)interstitialDidDisappearForAdapter:(MPBaseInterstitialAdapter *)adapter; -- (void)interstitialDidExpireForAdapter:(MPBaseInterstitialAdapter *)adapter; -- (void)interstitialDidReceiveTapEventForAdapter:(MPBaseInterstitialAdapter *)adapter; -- (void)interstitialWillLeaveApplicationForAdapter:(MPBaseInterstitialAdapter *)adapter; -- (void)interstitialDidReceiveImpressionEventForAdapter:(MPBaseInterstitialAdapter *)adapter; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPBaseInterstitialAdapter.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPBaseInterstitialAdapter.m deleted file mode 100644 index a2cd2cd168..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPBaseInterstitialAdapter.m +++ /dev/null @@ -1,112 +0,0 @@ -// -// MPBaseInterstitialAdapter.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPBaseInterstitialAdapter.h" -#import "MPAdConfiguration.h" -#import "MPGlobal.h" -#import "MPAnalyticsTracker.h" -#import "MPCoreInstanceProvider.h" -#import "MPError.h" -#import "MPTimer.h" -#import "MPConstants.h" - -@interface MPBaseInterstitialAdapter () - -@property (nonatomic, strong) MPAdConfiguration *configuration; -@property (nonatomic, strong) MPTimer *timeoutTimer; - -- (void)startTimeoutTimer; - -@end - -@implementation MPBaseInterstitialAdapter - -- (id)initWithDelegate:(id)delegate -{ - self = [super init]; - if (self) { - self.delegate = delegate; - } - return self; -} - -- (void)dealloc -{ - [self unregisterDelegate]; - - [self.timeoutTimer invalidate]; - -} - -- (void)unregisterDelegate -{ - self.delegate = nil; -} - -- (void)getAdWithConfiguration:(MPAdConfiguration *)configuration targeting:(MPAdTargeting *)targeting -{ - // To be implemented by subclasses. - [self doesNotRecognizeSelector:_cmd]; -} - -- (void)_getAdWithConfiguration:(MPAdConfiguration *)configuration targeting:(MPAdTargeting *)targeting -{ - self.configuration = configuration; - - [self startTimeoutTimer]; - [self getAdWithConfiguration:configuration targeting:targeting]; -} - -- (void)startTimeoutTimer -{ - NSTimeInterval timeInterval = (self.configuration && self.configuration.adTimeoutInterval >= 0) ? - self.configuration.adTimeoutInterval : INTERSTITIAL_TIMEOUT_INTERVAL; - - if (timeInterval > 0) { - self.timeoutTimer = [MPTimer timerWithTimeInterval:timeInterval - target:self - selector:@selector(timeout) - repeats:NO]; - [self.timeoutTimer scheduleNow]; - } -} - -- (void)didStopLoading -{ - [self.timeoutTimer invalidate]; -} - -- (void)timeout -{ - NSError * error = [NSError errorWithCode:MOPUBErrorAdRequestTimedOut localizedDescription:@"Interstitial ad request timed out"]; - [self.delegate adapter:self didFailToLoadAdWithError:error]; - self.delegate = nil; -} - -#pragma mark - Presentation - -- (void)showInterstitialFromViewController:(UIViewController *)controller -{ - [self doesNotRecognizeSelector:_cmd]; -} - -#pragma mark - Metrics - -- (void)trackImpression -{ - [[MPAnalyticsTracker sharedTracker] trackImpressionForConfiguration:self.configuration]; - [self.delegate interstitialDidReceiveImpressionEventForAdapter:self]; -} - -- (void)trackClick -{ - [[MPAnalyticsTracker sharedTracker] trackClickForConfiguration:self.configuration]; -} - -@end - diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialAdManager.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialAdManager.h deleted file mode 100644 index a3f059fa13..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialAdManager.h +++ /dev/null @@ -1,26 +0,0 @@ -// -// MPInterstitialAdManager.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPAdServerCommunicator.h" -#import "MPBaseInterstitialAdapter.h" - -@class MPAdTargeting; -@protocol MPInterstitialAdManagerDelegate; - -@interface MPInterstitialAdManager : NSObject - -@property (nonatomic, weak) id delegate; -@property (nonatomic, assign, readonly) BOOL ready; - -- (id)initWithDelegate:(id)delegate; - -- (void)loadInterstitialWithAdUnitID:(NSString *)ID targeting:(MPAdTargeting *)targeting; -- (void)presentInterstitialFromViewController:(UIViewController *)controller; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialAdManager.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialAdManager.m deleted file mode 100644 index b302dcf197..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialAdManager.m +++ /dev/null @@ -1,298 +0,0 @@ -// -// MPInterstitialAdManager.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -#import "MPInterstitialAdManager.h" - -#import "MPAdServerURLBuilder.h" -#import "MPAdTargeting.h" -#import "MPInterstitialAdController.h" -#import "MPInterstitialCustomEventAdapter.h" -#import "MPConstants.h" -#import "MPCoreInstanceProvider.h" -#import "MPInterstitialAdManagerDelegate.h" -#import "MPLogging.h" -#import "MPError.h" -#import "MPStopwatch.h" -#import "NSMutableArray+MPAdditions.h" -#import "NSDate+MPAdditions.h" -#import "NSError+MPAdditions.h" - -@interface MPInterstitialAdManager () - -@property (nonatomic, assign) BOOL loading; -@property (nonatomic, assign, readwrite) BOOL ready; -@property (nonatomic, strong) MPBaseInterstitialAdapter *adapter; -@property (nonatomic, strong) MPAdServerCommunicator *communicator; -@property (nonatomic, strong) MPAdConfiguration *requestingConfiguration; -@property (nonatomic, strong) NSMutableArray *remainingConfigurations; -@property (nonatomic, strong) MPStopwatch *loadStopwatch; -@property (nonatomic, strong) MPAdTargeting * targeting; -@property (nonatomic, strong) NSURL *mostRecentlyLoadedURL; // ADF-4286: avoid infinite ad reloads - -- (void)setUpAdapterWithConfiguration:(MPAdConfiguration *)configuration; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MPInterstitialAdManager - -- (id)initWithDelegate:(id)delegate -{ - self = [super init]; - if (self) { - self.communicator = [[MPAdServerCommunicator alloc] initWithDelegate:self]; - self.delegate = delegate; - - _loadStopwatch = MPStopwatch.new; - } - return self; -} - -- (void)dealloc -{ - [self.communicator cancel]; - [self.communicator setDelegate:nil]; - - self.adapter = nil; -} - -- (void)setAdapter:(MPBaseInterstitialAdapter *)adapter -{ - if (self.adapter != adapter) { - [self.adapter unregisterDelegate]; - _adapter = adapter; - } -} - -#pragma mark - Public - -- (void)loadAdWithURL:(NSURL *)URL -{ - if (self.loading) { - MPLogEvent([MPLogEvent error:NSError.adAlreadyLoading message:nil]); - return; - } - - self.loading = YES; - self.mostRecentlyLoadedURL = URL; - [self.communicator loadURL:URL]; -} - - -- (void)loadInterstitialWithAdUnitID:(NSString *)ID targeting:(MPAdTargeting *)targeting -{ - MPLogAdEvent(MPLogEvent.adLoadAttempt, ID); - - if (self.ready) { - [self.delegate managerDidLoadInterstitial:self]; - } else { - self.targeting = targeting; - [self loadAdWithURL:[MPAdServerURLBuilder URLWithAdUnitID:ID targeting:targeting]]; - } -} - -- (void)presentInterstitialFromViewController:(UIViewController *)controller -{ - MPLogAdEvent(MPLogEvent.adShowAttempt, self.delegate.interstitialAdController.adUnitId); - - // Don't allow the ad to be shown if it isn't ready. - if (!self.ready) { - MPLogInfo(@"Interstitial ad view is not ready to be shown"); - return; - } - - [self.adapter showInterstitialFromViewController:controller]; -} - -- (CLLocation *)location -{ - return [self.delegate location]; -} - -- (MPInterstitialAdController *)interstitialAdController -{ - return [self.delegate interstitialAdController]; -} - -- (id)interstitialDelegate -{ - return [self.delegate interstitialDelegate]; -} - -#pragma mark - MPAdServerCommunicatorDelegate - -- (void)communicatorDidReceiveAdConfigurations:(NSArray *)configurations { - self.remainingConfigurations = [NSMutableArray arrayWithArray:configurations]; - self.requestingConfiguration = [self.remainingConfigurations removeFirst]; - - // There are no configurations to try. Consider this a clear response by the server. - if (self.remainingConfigurations.count == 0 && self.requestingConfiguration == nil) { - MPLogInfo(kMPClearErrorLogFormatWithAdUnitID, self.delegate.interstitialAdController.adUnitId); - self.loading = NO; - [self.delegate manager:self didFailToLoadInterstitialWithError:[NSError errorWithCode:MOPUBErrorNoInventory]]; - return; - } - - [self fetchAdWithConfiguration:self.requestingConfiguration]; -} - -- (void)fetchAdWithConfiguration:(MPAdConfiguration *)configuration -{ - MPLogInfo(@"Interstitial ad view is fetching ad type: %@", configuration.adType); - - if (configuration.adUnitWarmingUp) { - MPLogInfo(kMPWarmingUpErrorLogFormatWithAdUnitID, self.delegate.interstitialAdController.adUnitId); - self.loading = NO; - [self.delegate manager:self didFailToLoadInterstitialWithError:[NSError errorWithCode:MOPUBErrorAdUnitWarmingUp]]; - return; - } - - if ([configuration.adType isEqualToString:kAdTypeClear]) { - MPLogInfo(kMPClearErrorLogFormatWithAdUnitID, self.delegate.interstitialAdController.adUnitId); - self.loading = NO; - [self.delegate manager:self didFailToLoadInterstitialWithError:[NSError errorWithCode:MOPUBErrorNoInventory]]; - return; - } - - [self setUpAdapterWithConfiguration:configuration]; -} - -- (void)communicatorDidFailWithError:(NSError *)error -{ - self.ready = NO; - self.loading = NO; - - [self.delegate manager:self didFailToLoadInterstitialWithError:error]; -} - -- (void)setUpAdapterWithConfiguration:(MPAdConfiguration *)configuration -{ - // Notify Ad Server of the adapter load. This is fire and forget. - [self.communicator sendBeforeLoadUrlWithConfiguration:configuration]; - - // Start the stopwatch for the adapter load. - [self.loadStopwatch start]; - - if (configuration.customEventClass == nil) { - [self adapter:nil didFailToLoadAdWithError:nil]; - return; - } - - MPBaseInterstitialAdapter *adapter = [[MPInterstitialCustomEventAdapter alloc] initWithDelegate:self]; - self.adapter = adapter; - [self.adapter _getAdWithConfiguration:configuration targeting:self.targeting]; -} - -- (BOOL)isFullscreenAd { - return YES; -} - -- (NSString *)adUnitId { - return [self.delegate adUnitId]; -} - -#pragma mark - MPInterstitialAdapterDelegate - -- (void)adapterDidFinishLoadingAd:(MPBaseInterstitialAdapter *)adapter -{ - self.remainingConfigurations = nil; - self.ready = YES; - self.loading = NO; - - // Record the end of the adapter load and send off the fire and forget after-load-url tracker. - NSTimeInterval duration = [self.loadStopwatch stop]; - [self.communicator sendAfterLoadUrlWithConfiguration:self.requestingConfiguration adapterLoadDuration:duration adapterLoadResult:MPAfterLoadResultAdLoaded]; - - MPLogAdEvent(MPLogEvent.adDidLoad, self.delegate.interstitialAdController.adUnitId); - [self.delegate managerDidLoadInterstitial:self]; -} - -- (void)adapter:(MPBaseInterstitialAdapter *)adapter didFailToLoadAdWithError:(NSError *)error -{ - // Record the end of the adapter load and send off the fire and forget after-load-url tracker - // with the appropriate error code result. - NSTimeInterval duration = [self.loadStopwatch stop]; - MPAfterLoadResult result = (error.isAdRequestTimedOutError ? MPAfterLoadResultTimeout : (adapter == nil ? MPAfterLoadResultMissingAdapter : MPAfterLoadResultError)); - [self.communicator sendAfterLoadUrlWithConfiguration:self.requestingConfiguration adapterLoadDuration:duration adapterLoadResult:result]; - - // There are more ad configurations to try. - if (self.remainingConfigurations.count > 0) { - self.requestingConfiguration = [self.remainingConfigurations removeFirst]; - [self fetchAdWithConfiguration:self.requestingConfiguration]; - } - // No more configurations to try. Send new request to Ads server to get more Ads. - else if (self.requestingConfiguration.nextURL != nil - && [self.requestingConfiguration.nextURL isEqual:self.mostRecentlyLoadedURL] == false) { - self.ready = NO; - self.loading = NO; - [self loadAdWithURL:self.requestingConfiguration.nextURL]; - } - // No more configurations to try and no more pages to load. - else { - self.ready = NO; - self.loading = NO; - - NSError * clearResponseError = [NSError errorWithCode:MOPUBErrorNoInventory localizedDescription:[NSString stringWithFormat:kMPClearErrorLogFormatWithAdUnitID, self.delegate.interstitialAdController.adUnitId]]; - MPLogAdEvent([MPLogEvent adFailedToLoadWithError:clearResponseError], self.delegate.interstitialAdController.adUnitId); - [self.delegate manager:self didFailToLoadInterstitialWithError:clearResponseError]; - } -} - -- (void)interstitialWillAppearForAdapter:(MPBaseInterstitialAdapter *)adapter -{ - MPLogAdEvent(MPLogEvent.adWillAppear, self.delegate.interstitialAdController.adUnitId); - [self.delegate managerWillPresentInterstitial:self]; -} - -- (void)interstitialDidAppearForAdapter:(MPBaseInterstitialAdapter *)adapter -{ - MPLogAdEvent(MPLogEvent.adDidAppear, self.delegate.interstitialAdController.adUnitId); - [self.delegate managerDidPresentInterstitial:self]; -} - -- (void)interstitialWillDisappearForAdapter:(MPBaseInterstitialAdapter *)adapter -{ - MPLogAdEvent(MPLogEvent.adWillDisappear, self.delegate.interstitialAdController.adUnitId); - [self.delegate managerWillDismissInterstitial:self]; -} - -- (void)interstitialDidDisappearForAdapter:(MPBaseInterstitialAdapter *)adapter -{ - self.ready = NO; - - MPLogAdEvent(MPLogEvent.adDidDisappear, self.delegate.interstitialAdController.adUnitId); - [self.delegate managerDidDismissInterstitial:self]; -} - -- (void)interstitialDidExpireForAdapter:(MPBaseInterstitialAdapter *)adapter -{ - self.ready = NO; - - MPLogAdEvent([MPLogEvent adExpiredWithTimeInterval:MPConstants.adsExpirationInterval], self.delegate.interstitialAdController.adUnitId); - [self.delegate managerDidExpireInterstitial:self]; -} - -- (void)interstitialDidReceiveTapEventForAdapter:(MPBaseInterstitialAdapter *)adapter -{ - MPLogAdEvent(MPLogEvent.adWillPresentModal, self.delegate.interstitialAdController.adUnitId); - [self.delegate managerDidReceiveTapEventFromInterstitial:self]; -} - -- (void)interstitialWillLeaveApplicationForAdapter:(MPBaseInterstitialAdapter *)adapter -{ - MPLogAdEvent(MPLogEvent.adWillLeaveApplication, self.delegate.interstitialAdController.adUnitId); -} - -- (void)interstitialDidReceiveImpressionEventForAdapter:(MPBaseInterstitialAdapter *)adapter { - [self.delegate interstitialAdManager:self didReceiveImpressionEventWithImpressionData:self.requestingConfiguration.impressionData]; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialAdManagerDelegate.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialAdManagerDelegate.h deleted file mode 100644 index b91db75da2..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialAdManagerDelegate.h +++ /dev/null @@ -1,33 +0,0 @@ -// -// MPInterstitialAdManagerDelegate.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@class MPInterstitialAdManager; -@class MPInterstitialAdController; -@class MPImpressionData; -@class CLLocation; - -@protocol MPInterstitialAdManagerDelegate - -- (MPInterstitialAdController *)interstitialAdController; -- (CLLocation *)location; -- (NSString *)adUnitId; -- (id)interstitialDelegate; -- (void)managerDidLoadInterstitial:(MPInterstitialAdManager *)manager; -- (void)manager:(MPInterstitialAdManager *)manager -didFailToLoadInterstitialWithError:(NSError *)error; -- (void)managerWillPresentInterstitial:(MPInterstitialAdManager *)manager; -- (void)managerDidPresentInterstitial:(MPInterstitialAdManager *)manager; -- (void)managerWillDismissInterstitial:(MPInterstitialAdManager *)manager; -- (void)managerDidDismissInterstitial:(MPInterstitialAdManager *)manager; -- (void)managerDidExpireInterstitial:(MPInterstitialAdManager *)manager; -- (void)interstitialAdManager:(MPInterstitialAdManager *)manager didReceiveImpressionEventWithImpressionData:(MPImpressionData *)impressionData; -- (void)managerDidReceiveTapEventFromInterstitial:(MPInterstitialAdManager *)manager; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialCustomEventAdapter.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialCustomEventAdapter.h deleted file mode 100644 index ea91707ac0..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialCustomEventAdapter.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// MPInterstitialCustomEventAdapter.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPBaseInterstitialAdapter.h" - -#import "MPPrivateInterstitialCustomEventDelegate.h" - -@interface MPInterstitialCustomEventAdapter : MPBaseInterstitialAdapter - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialCustomEventAdapter.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialCustomEventAdapter.m deleted file mode 100644 index 520af589be..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialCustomEventAdapter.m +++ /dev/null @@ -1,171 +0,0 @@ -// -// MPInterstitialCustomEventAdapter.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPInterstitialCustomEventAdapter.h" - -#import "MPAdConfiguration.h" -#import "MPAdTargeting.h" -#import "MPConstants.h" -#import "MPCoreInstanceProvider.h" -#import "MPError.h" -#import "MPHTMLInterstitialCustomEvent.h" -#import "MPLogging.h" -#import "MPInterstitialCustomEvent.h" -#import "MPInterstitialAdController.h" -#import "MPMRAIDInterstitialCustomEvent.h" -#import "MPVASTInterstitialCustomEvent.h" -#import "MPRealTimeTimer.h" - -@interface MPInterstitialCustomEventAdapter () - -@property (nonatomic, strong) MPInterstitialCustomEvent *interstitialCustomEvent; -@property (nonatomic, strong) MPAdConfiguration *configuration; -@property (nonatomic, assign) BOOL hasTrackedImpression; -@property (nonatomic, assign) BOOL hasTrackedClick; -@property (nonatomic, strong) MPRealTimeTimer *expirationTimer; - -@end - -@implementation MPInterstitialCustomEventAdapter - -- (void)dealloc -{ - if ([self.interstitialCustomEvent respondsToSelector:@selector(invalidate)]) { - // Secret API to allow us to detach the custom event from (shared instance) routers synchronously - // See the chartboost interstitial custom event for an example use case. - [self.interstitialCustomEvent performSelector:@selector(invalidate)]; - } - self.interstitialCustomEvent.delegate = nil; - - // make sure the custom event isn't released synchronously as objects owned by the custom event - // may do additional work after a callback that results in dealloc being called - [[MPCoreInstanceProvider sharedProvider] keepObjectAliveForCurrentRunLoopIteration:_interstitialCustomEvent]; -} - -- (void)getAdWithConfiguration:(MPAdConfiguration *)configuration targeting:(MPAdTargeting *)targeting -{ - MPLogInfo(@"Looking for custom event class named %@.", configuration.customEventClass); - self.configuration = configuration; - - MPInterstitialCustomEvent *customEvent = [[configuration.customEventClass alloc] init]; - if (![customEvent isKindOfClass:[MPInterstitialCustomEvent class]]) { - NSError * error = [NSError customEventClass:configuration.customEventClass doesNotInheritFrom:MPInterstitialCustomEvent.class]; - MPLogEvent([MPLogEvent error:error message:nil]); - [self.delegate adapter:self didFailToLoadAdWithError:error]; - return; - } - customEvent.delegate = self; - customEvent.localExtras = targeting.localExtras; - self.interstitialCustomEvent = customEvent; - - [self.interstitialCustomEvent requestInterstitialWithCustomEventInfo:configuration.customEventClassData adMarkup:configuration.advancedBidPayload]; -} - -- (void)showInterstitialFromViewController:(UIViewController *)controller -{ - [self.interstitialCustomEvent showInterstitialFromRootViewController:controller]; -} - -#pragma mark - MPInterstitialCustomEventDelegate - -- (NSString *)adUnitId -{ - return [self.delegate interstitialAdController].adUnitId; -} - -- (CLLocation *)location -{ - return [self.delegate location]; -} - -- (id)interstitialDelegate -{ - return [self.delegate interstitialDelegate]; -} - -- (void)interstitialCustomEvent:(MPInterstitialCustomEvent *)customEvent - didLoadAd:(id)ad -{ - [self didStopLoading]; - [self.delegate adapterDidFinishLoadingAd:self]; - - // Check for MoPub-specific custom events before setting the timer - // Custom events for 3rd party SDK have their own timeout and expiration handling - if ([customEvent isKindOfClass:[MPHTMLInterstitialCustomEvent class]] - || [customEvent isKindOfClass:[MPMRAIDInterstitialCustomEvent class]] - || [customEvent isKindOfClass:[MPVASTInterstitialCustomEvent class]]) { - // Set up timer for expiration - __weak __typeof__(self) weakSelf = self; - self.expirationTimer = [[MPRealTimeTimer alloc] initWithInterval:[MPConstants adsExpirationInterval] block:^(MPRealTimeTimer *timer){ - __strong __typeof__(weakSelf) strongSelf = weakSelf; - if (strongSelf && !strongSelf.hasTrackedImpression) { - [strongSelf interstitialCustomEventDidExpire:strongSelf.interstitialCustomEvent]; - } - [strongSelf.expirationTimer invalidate]; - }]; - [self.expirationTimer scheduleNow]; - } -} - -- (void)interstitialCustomEvent:(MPInterstitialCustomEvent *)customEvent - didFailToLoadAdWithError:(NSError *)error -{ - [self didStopLoading]; - [self.delegate adapter:self didFailToLoadAdWithError:error]; -} - -- (void)interstitialCustomEventWillAppear:(MPInterstitialCustomEvent *)customEvent -{ - [self.delegate interstitialWillAppearForAdapter:self]; -} - -- (void)interstitialCustomEventDidAppear:(MPInterstitialCustomEvent *)customEvent -{ - if ([self.interstitialCustomEvent enableAutomaticImpressionAndClickTracking] && !self.hasTrackedImpression) { - [self trackImpression]; - } - [self.delegate interstitialDidAppearForAdapter:self]; -} - -- (void)interstitialCustomEventWillDisappear:(MPInterstitialCustomEvent *)customEvent -{ - [self.delegate interstitialWillDisappearForAdapter:self]; -} - -- (void)interstitialCustomEventDidDisappear:(MPInterstitialCustomEvent *)customEvent -{ - [self.delegate interstitialDidDisappearForAdapter:self]; -} - -- (void)interstitialCustomEventDidExpire:(MPInterstitialCustomEvent *)customEvent -{ - [self.delegate interstitialDidExpireForAdapter:self]; -} - -- (void)interstitialCustomEventDidReceiveTapEvent:(MPInterstitialCustomEvent *)customEvent -{ - if ([self.interstitialCustomEvent enableAutomaticImpressionAndClickTracking] && !self.hasTrackedClick) { - self.hasTrackedClick = YES; - [self trackClick]; - } - - [self.delegate interstitialDidReceiveTapEventForAdapter:self]; -} - -- (void)interstitialCustomEventWillLeaveApplication:(MPInterstitialCustomEvent *)customEvent -{ - [self.delegate interstitialWillLeaveApplicationForAdapter:self]; -} - -- (void)trackImpression { - [super trackImpression]; - self.hasTrackedImpression = YES; - [self.expirationTimer invalidate]; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialViewController.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialViewController.h deleted file mode 100644 index 8d370c72b9..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialViewController.h +++ /dev/null @@ -1,66 +0,0 @@ -// -// MPInterstitialViewController.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPExtendedHitBoxButton.h" -#import "MPGlobal.h" - -@class CLLocation; - -/** - The purpose of this @c MPInterstitialViewController protocol is to define the common interface - between interstitial view controllers without forcing them to subclass @c MPInterstitialViewController. - */ -@protocol MPInterstitialViewController -@end - -@protocol MPInterstitialViewControllerDelegate; - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MPInterstitialViewController : UIViewController - -@property (nonatomic, assign) MPInterstitialCloseButtonStyle closeButtonStyle; -@property (nonatomic, assign) MPInterstitialOrientationType orientationType; -@property (nonatomic, strong) MPExtendedHitBoxButton *closeButton; -@property (nonatomic, weak) id delegate; - -- (void)presentInterstitialFromViewController:(UIViewController *)controller complete:(void(^)(NSError *))complete; -- (void)dismissInterstitialAnimated:(BOOL)animated; -- (BOOL)shouldDisplayCloseButton; -- (void)willPresentInterstitial; -- (void)didPresentInterstitial; -- (void)willDismissInterstitial; -- (void)didDismissInterstitial; -- (void)layoutCloseButton; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@protocol MPInterstitialViewControllerAppearanceDelegate - -- (void)interstitialWillAppear:(id)interstitial; -- (void)interstitialDidAppear:(id)interstitial; -- (void)interstitialWillDisappear:(id)interstitial; -- (void)interstitialDidDisappear:(id)interstitial; - -@end - -@protocol MPInterstitialViewControllerDelegate - -- (void)interstitialDidLoadAd:(id)interstitial; -- (void)interstitialDidFailToLoadAd:(id)interstitial; -- (void)interstitialDidReceiveTapEvent:(id)interstitial; -- (void)interstitialWillLeaveApplication:(id)interstitial; - -@optional - -- (void)interstitialRewardedVideoEnded; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialViewController.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialViewController.m deleted file mode 100644 index 78d6d89542..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialViewController.m +++ /dev/null @@ -1,236 +0,0 @@ -// -// MPInterstitialViewController.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPInterstitialViewController.h" - -#import "MPError.h" -#import "MPLogging.h" - -static const CGFloat kCloseButtonPadding = 5.0; -static const CGFloat kCloseButtonEdgeInset = 5.0; -static NSString * const kCloseButtonXImageName = @"MPCloseButtonX.png"; - -@interface MPInterstitialViewController () - -- (void)setCloseButtonImageWithImageNamed:(NSString *)imageName; -- (void)setCloseButtonStyle:(MPInterstitialCloseButtonStyle)style; -- (void)closeButtonPressed; -- (void)dismissInterstitialAnimated:(BOOL)animated; - -@end - -/////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MPInterstitialViewController - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - self.view.backgroundColor = [UIColor blackColor]; - self.modalPresentationStyle = UIModalPresentationFullScreen; -} - -- (BOOL)prefersHomeIndicatorAutoHidden { - return YES; -} - -#pragma mark - Public - -- (void)presentInterstitialFromViewController:(UIViewController *)controller complete:(void(^)(NSError *))complete -{ - if (self.presentingViewController) { - if (complete != nil) { - complete(NSError.fullscreenAdAlreadyOnScreen); - } - return; - } - - [self willPresentInterstitial]; - [self layoutCloseButton]; - - [controller presentViewController:self animated:MP_ANIMATED completion:^{ - [self didPresentInterstitial]; - if (complete != nil) { - complete(nil); - } - }]; -} - -- (void)willPresentInterstitial -{ - -} - -- (void)didPresentInterstitial -{ - -} - -- (void)willDismissInterstitial -{ - -} - -- (void)didDismissInterstitial -{ - -} - -- (BOOL)shouldDisplayCloseButton -{ - return YES; -} - -#pragma mark - Close Button - -- (UIButton *)closeButton -{ - if (!_closeButton) { - _closeButton = [MPExtendedHitBoxButton buttonWithType:UIButtonTypeCustom]; - _closeButton.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | - UIViewAutoresizingFlexibleBottomMargin; - - UIImage *closeButtonImage = [UIImage imageNamed:MPResourcePathForResource(kCloseButtonXImageName)]; - [_closeButton setImage:closeButtonImage forState:UIControlStateNormal]; - [_closeButton sizeToFit]; - - [_closeButton addTarget:self - action:@selector(closeButtonPressed) - forControlEvents:UIControlEventTouchUpInside]; - _closeButton.accessibilityLabel = @"Close Interstitial Ad"; - } - - return _closeButton; -} - -- (void)layoutCloseButton -{ - [self.view addSubview:self.closeButton]; - CGFloat originX = self.view.bounds.size.width - kCloseButtonPadding - - self.closeButton.bounds.size.width; - self.closeButton.frame = CGRectMake(originX, - kCloseButtonPadding, - self.closeButton.bounds.size.width, - self.closeButton.bounds.size.height); - self.closeButton.touchAreaInsets = UIEdgeInsetsMake(kCloseButtonEdgeInset, kCloseButtonEdgeInset, kCloseButtonEdgeInset, kCloseButtonEdgeInset); - [self setCloseButtonStyle:self.closeButtonStyle]; - if (@available(iOS 11, *)) { - self.closeButton.translatesAutoresizingMaskIntoConstraints = NO; - [NSLayoutConstraint activateConstraints:@[ - [self.closeButton.topAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.topAnchor constant:kCloseButtonPadding], - [self.closeButton.trailingAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.trailingAnchor constant:-kCloseButtonPadding], - ]]; - } - [self.view bringSubviewToFront:self.closeButton]; -} - -- (void)setCloseButtonImageWithImageNamed:(NSString *)imageName -{ - UIImage *image = [UIImage imageNamed:imageName]; - [self.closeButton setImage:image forState:UIControlStateNormal]; - [self.closeButton sizeToFit]; -} - -- (void)setCloseButtonStyle:(MPInterstitialCloseButtonStyle)style -{ - _closeButtonStyle = style; - switch (style) { - case MPInterstitialCloseButtonStyleAlwaysVisible: - self.closeButton.hidden = NO; - break; - case MPInterstitialCloseButtonStyleAlwaysHidden: - self.closeButton.hidden = YES; - break; - case MPInterstitialCloseButtonStyleAdControlled: - self.closeButton.hidden = ![self shouldDisplayCloseButton]; - break; - default: - self.closeButton.hidden = NO; - break; - } -} - -- (void)closeButtonPressed -{ - [self dismissInterstitialAnimated:YES]; -} - -- (void)dismissInterstitialAnimated:(BOOL)animated -{ - [self willDismissInterstitial]; - - UIViewController *presentingViewController = self.presentingViewController; - // TODO: Is this check necessary? - if (presentingViewController.presentedViewController == self) { - [presentingViewController dismissViewControllerAnimated:MP_ANIMATED completion:^{ - [self didDismissInterstitial]; - }]; - } else { - [self didDismissInterstitial]; - } -} - -- (BOOL)prefersStatusBarHidden -{ - return YES; -} - -- (UIInterfaceOrientationMask)supportedInterfaceOrientations -{ - NSUInteger applicationSupportedOrientations = - [[UIApplication sharedApplication] supportedInterfaceOrientationsForWindow:MPKeyWindow()]; - NSUInteger interstitialSupportedOrientations = applicationSupportedOrientations; - NSString *orientationDescription = @"any"; - - // Using the _orientationType, narrow down the supported interface orientations. - - if (_orientationType == MPInterstitialOrientationTypePortrait) { - interstitialSupportedOrientations &= - (UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown); - orientationDescription = @"portrait"; - } else if (_orientationType == MPInterstitialOrientationTypeLandscape) { - interstitialSupportedOrientations &= UIInterfaceOrientationMaskLandscape; - orientationDescription = @"landscape"; - } - - // If the application does not support any of the orientations given by _orientationType, - // just return the application's supported orientations. - - if (!interstitialSupportedOrientations) { - MPLogInfo(@"Your application does not support this interstitial's desired orientation " - @"(%@).", orientationDescription); - return applicationSupportedOrientations; - } else { - return interstitialSupportedOrientations; - } -} - -- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation -{ - NSUInteger supportedInterfaceOrientations = [self supportedInterfaceOrientations]; - UIInterfaceOrientation currentInterfaceOrientation = MPInterfaceOrientation(); - NSUInteger currentInterfaceOrientationMask = (1 << currentInterfaceOrientation); - - // First, try to display the interstitial using the current interface orientation. If the - // current interface orientation is unsupported, just use any of the supported orientations. - - if (supportedInterfaceOrientations & currentInterfaceOrientationMask) { - return currentInterfaceOrientation; - } else if (supportedInterfaceOrientations & UIInterfaceOrientationMaskPortrait) { - return UIInterfaceOrientationPortrait; - } else if (supportedInterfaceOrientations & UIInterfaceOrientationMaskPortraitUpsideDown) { - return UIInterfaceOrientationPortraitUpsideDown; - } else if (supportedInterfaceOrientations & UIInterfaceOrientationMaskLandscapeLeft) { - return UIInterfaceOrientationLandscapeLeft; - } else { - return UIInterfaceOrientationLandscapeRight; - } -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPPrivateInterstitialCustomEventDelegate.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPPrivateInterstitialCustomEventDelegate.h deleted file mode 100644 index 4e9d8a24d2..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPPrivateInterstitialCustomEventDelegate.h +++ /dev/null @@ -1,21 +0,0 @@ -// -// MPPrivateInterstitialCustomEventDelegate.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPInterstitialCustomEventDelegate.h" - -@class MPAdConfiguration; -@class CLLocation; - -@protocol MPPrivateInterstitialCustomEventDelegate - -- (NSString *)adUnitId; -- (MPAdConfiguration *)configuration; -- (id)interstitialDelegate; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPATSSetting.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPATSSetting.h deleted file mode 100644 index 32a4c1d8b4..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPATSSetting.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// MPATSSetting.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -typedef NS_OPTIONS(NSUInteger, MPATSSetting) { - MPATSSettingEnabled = 0, - MPATSSettingAllowsArbitraryLoads = (1 << 0), - MPATSSettingAllowsArbitraryLoadsForMedia = (1 << 1), - MPATSSettingAllowsArbitraryLoadsInWebContent = (1 << 2), - MPATSSettingRequiresCertificateTransparency = (1 << 3), - MPATSSettingAllowsLocalNetworking = (1 << 4), -}; diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPAdServerKeys.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPAdServerKeys.h deleted file mode 100644 index 1196de91ee..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPAdServerKeys.h +++ /dev/null @@ -1,125 +0,0 @@ -// -// MPAdServerKeys.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -#pragma mark - Ad Server All URL Request Keys -extern NSString * const kAdServerIDKey; -extern NSString * const kServerAPIVersionKey; -extern NSString * const kApplicationVersionKey; -extern NSString * const kIdfaKey; -extern NSString * const kMoPubIDKey; -extern NSString * const kBundleKey; -extern NSString * const kDoNotTrackIdKey; -extern NSString * const kSDKVersionKey; -extern NSString * const kSDKEngineNameKey; -extern NSString * const kSDKEngineVersionKey; - -#pragma mark - Ad Server Ad Request Endpoint Keys -extern NSString * const kOrientationKey; -extern NSString * const kScaleFactorKey; -extern NSString * const kTimeZoneKey; -extern NSString * const kIsMRAIDEnabledSDKKey; -extern NSString * const kConnectionTypeKey; -extern NSString * const kCarrierNameKey; -extern NSString * const kISOCountryCodeKey; -extern NSString * const kMobileNetworkCodeKey; -extern NSString * const kMobileCountryCodeKey; -extern NSString * const kDeviceNameKey; -extern NSString * const kDesiredAdAssetsKey; -extern NSString * const kAdSequenceKey; -extern NSString * const kScreenResolutionWidthKey; -extern NSString * const kScreenResolutionHeightKey; -extern NSString * const kAppTransportSecurityStatusKey; -extern NSString * const kViewabilityStatusKey; -extern NSString * const kKeywordsKey; -extern NSString * const kUserDataKeywordsKey; -extern NSString * const kAdvancedBiddingKey; -extern NSString * const kNetworkAdaptersKey; -extern NSString * const kLocationLatitudeLongitudeKey; -extern NSString * const kLocationHorizontalAccuracy; -extern NSString * const kLocationIsFromSDK; -extern NSString * const kLocationLastUpdatedMilliseconds; -extern NSString * const kBackoffMsKey; -extern NSString * const kBackoffReasonKey; -extern NSString * const kCreativeSafeWidthKey; -extern NSString * const kCreativeSafeHeightKey; - -#pragma mark - Ad Server Response Keys -extern NSString * const kEnableDebugLogging; - -#pragma mark - Open Endpoint Request Keys -extern NSString * const kOpenEndpointSessionTrackingKey; - -#pragma mark - Synchronization Keys Shared With Other Endpoints -extern NSString * const kGDPRAppliesKey; -extern NSString * const kCurrentConsentStatusKey; -extern NSString * const kConsentedVendorListVersionKey; -extern NSString * const kConsentedPrivacyPolicyVersionKey; -extern NSString * const kForceGDPRAppliesKey; - -#pragma mark - Synchronization Endpoint: Request Keys - -extern NSString * const kLastChangedMsKey; -extern NSString * const kLastSynchronizedConsentStatusKey; -extern NSString * const kCachedIabVendorListHashKey; -extern NSString * const kForcedGDPRAppliesChangedKey; - -#pragma mark - Synchronization Endpoint: Shared Keys - -extern NSString * const kConsentChangedReasonKey; -extern NSString * const kExtrasKey; - -#pragma mark - Synchronization Endpoint: Response Keys - -extern NSString * const kForceExplicitNoKey; -extern NSString * const kInvalidateConsentKey; -extern NSString * const kReacquireConsentKey; -extern NSString * const kIsWhitelistedKey; -extern NSString * const kIsGDPRRegionKey; -extern NSString * const kVendorListUrlKey; -extern NSString * const kVendorListVersionKey; -extern NSString * const kPrivacyPolicyUrlKey; -extern NSString * const kPrivacyPolicyVersionKey; -extern NSString * const kIabVendorListKey; -extern NSString * const kIabVendorListHashKey; -extern NSString * const kSyncFrequencyKey; - -#pragma mark - Consent Dialog Endpoint: Request Keys - -extern NSString * const kLanguageKey; - -#pragma mark - Consent Dialog Endpoint: Response Keys - -extern NSString * const kDialogHTMLKey; - -#pragma mark - Rewarded Keys - -extern NSString * const kCustomerIdKey; -extern NSString * const kRewardedCurrencyNameKey; -extern NSString * const kRewardedCurrencyAmountKey; -extern NSString * const kRewardedCustomEventNameKey; -extern NSString * const kRewardedCustomDataKey; - -#pragma mark - Impression Level Revenue Data Keys - -extern NSString * const kImpressionDataImpressionIDKey; -extern NSString * const kImpressionDataAdUnitIDKey; -extern NSString * const kImpressionDataAdUnitNameKey; -extern NSString * const kImpressionDataAdUnitFormatKey; -extern NSString * const kImpressionDataAdGroupIDKey; -extern NSString * const kImpressionDataAdGroupNameKey; -extern NSString * const kImpressionDataAdGroupTypeKey; -extern NSString * const kImpressionDataAdGroupPriorityKey; -extern NSString * const kImpressionDataCurrencyKey; -extern NSString * const kImpressionDataCountryKey; -extern NSString * const kImpressionDataNetworkNameKey; -extern NSString * const kImpressionDataNetworkPlacementIDKey; -extern NSString * const kImpressionDataAppVersionKey; -extern NSString * const kImpressionDataPublisherRevenueKey; -extern NSString * const kImpressionDataPrecisionKey; diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPAdServerKeys.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPAdServerKeys.m deleted file mode 100644 index 3290ddfec1..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPAdServerKeys.m +++ /dev/null @@ -1,125 +0,0 @@ -// -// MPAdServerKeys.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPAdServerKeys.h" - -#pragma mark - Ad Server All URL Request Keys -NSString * const kAdServerIDKey = @"id"; -NSString * const kServerAPIVersionKey = @"v"; -NSString * const kApplicationVersionKey = @"av"; -NSString * const kIdfaKey = @"udid"; -NSString * const kMoPubIDKey = @"mid"; -NSString * const kBundleKey = @"bundle"; -NSString * const kDoNotTrackIdKey = @"dnt"; -NSString * const kSDKVersionKey = @"nv"; -NSString * const kSDKEngineNameKey = @"e_name"; -NSString * const kSDKEngineVersionKey = @"e_ver"; - -#pragma mark - Ad Server Ad Request Endpoint Keys -NSString * const kOrientationKey = @"o"; -NSString * const kScaleFactorKey = @"sc"; -NSString * const kTimeZoneKey = @"z"; -NSString * const kIsMRAIDEnabledSDKKey = @"mr"; -NSString * const kConnectionTypeKey = @"ct"; -NSString * const kCarrierNameKey = @"cn"; -NSString * const kISOCountryCodeKey = @"iso"; -NSString * const kMobileNetworkCodeKey = @"mnc"; -NSString * const kMobileCountryCodeKey = @"mcc"; -NSString * const kDeviceNameKey = @"dn"; -NSString * const kDesiredAdAssetsKey = @"assets"; -NSString * const kAdSequenceKey = @"seq"; -NSString * const kScreenResolutionWidthKey = @"w"; -NSString * const kScreenResolutionHeightKey = @"h"; -NSString * const kAppTransportSecurityStatusKey = @"ats"; -NSString * const kViewabilityStatusKey = @"vv"; -NSString * const kKeywordsKey = @"q"; -NSString * const kUserDataKeywordsKey = @"user_data_q"; -NSString * const kAdvancedBiddingKey = @"abt"; -NSString * const kNetworkAdaptersKey = @"adapters"; -NSString * const kLocationLatitudeLongitudeKey = @"ll"; -NSString * const kLocationHorizontalAccuracy = @"lla"; -NSString * const kLocationIsFromSDK = @"llsdk"; -NSString * const kLocationLastUpdatedMilliseconds = @"llf"; -NSString * const kBackoffMsKey = @"backoff_ms"; -NSString * const kBackoffReasonKey = @"backoff_reason"; -NSString * const kCreativeSafeWidthKey = @"cw"; -NSString * const kCreativeSafeHeightKey = @"ch"; - -#pragma mark - Ad Server Response Keys -NSString * const kEnableDebugLogging = @"enable_debug_logging"; - -#pragma mark - Open Endpoint Request Keys -NSString * const kOpenEndpointSessionTrackingKey = @"st"; - -#pragma mark - Synchronization Keys Shared With Other Endpoints -NSString * const kGDPRAppliesKey = @"gdpr_applies"; -NSString * const kCurrentConsentStatusKey = @"current_consent_status"; -NSString * const kConsentedVendorListVersionKey = @"consented_vendor_list_version"; -NSString * const kConsentedPrivacyPolicyVersionKey = @"consented_privacy_policy_version"; -NSString * const kForceGDPRAppliesKey = @"force_gdpr_applies"; - -#pragma mark - Synchronization Endpoint: Request Keys - -NSString * const kLastChangedMsKey = @"last_changed_ms"; -NSString * const kLastSynchronizedConsentStatusKey = @"last_consent_status"; -NSString * const kCachedIabVendorListHashKey = @"cached_vendor_list_iab_hash"; -NSString * const kForcedGDPRAppliesChangedKey = @"force_gdpr_applies_changed"; - -#pragma mark - Synchronization Endpoint: Shared Keys - -NSString * const kConsentChangedReasonKey = @"consent_change_reason"; -NSString * const kExtrasKey = @"extras"; - -#pragma mark - Synchronization Endpoint: Response Keys - -NSString * const kForceExplicitNoKey = @"force_explicit_no"; -NSString * const kInvalidateConsentKey = @"invalidate_consent"; -NSString * const kReacquireConsentKey = @"reacquire_consent"; -NSString * const kIsWhitelistedKey = @"is_whitelisted"; -NSString * const kIsGDPRRegionKey = @"is_gdpr_region"; -NSString * const kVendorListUrlKey = @"current_vendor_list_link"; -NSString * const kVendorListVersionKey = @"current_vendor_list_version"; -NSString * const kPrivacyPolicyUrlKey = @"current_privacy_policy_link"; -NSString * const kPrivacyPolicyVersionKey = @"current_privacy_policy_version"; -NSString * const kIabVendorListKey = @"current_vendor_list_iab_format"; -NSString * const kIabVendorListHashKey = @"current_vendor_list_iab_hash"; -NSString * const kSyncFrequencyKey = @"call_again_after_secs"; - -#pragma mark - Consent Dialog Endpoint: Request Keys - -NSString * const kLanguageKey = @"language"; - -#pragma mark - Consent Dialog Endpoint: Response Keys - -NSString * const kDialogHTMLKey = @"dialog_html"; - -#pragma mark - Rewarded Keys - -NSString * const kCustomerIdKey = @"customer_id"; -NSString * const kRewardedCurrencyNameKey = @"rcn"; -NSString * const kRewardedCurrencyAmountKey = @"rca"; -NSString * const kRewardedCustomEventNameKey = @"cec"; -NSString * const kRewardedCustomDataKey = @"rcd"; - -#pragma mark - Impression Level Revenue Data Keys - -NSString * const kImpressionDataImpressionIDKey = @"id"; -NSString * const kImpressionDataAdUnitIDKey = @"adunit_id"; -NSString * const kImpressionDataAdUnitNameKey = @"adunit_name"; -NSString * const kImpressionDataAdUnitFormatKey = @"adunit_format"; -NSString * const kImpressionDataAdGroupIDKey = @"adgroup_id"; -NSString * const kImpressionDataAdGroupNameKey = @"adgroup_name"; -NSString * const kImpressionDataAdGroupTypeKey = @"adgroup_type"; -NSString * const kImpressionDataAdGroupPriorityKey = @"adgroup_priority"; -NSString * const kImpressionDataCurrencyKey = @"currency"; -NSString * const kImpressionDataCountryKey = @"country"; -NSString * const kImpressionDataNetworkNameKey = @"network_name"; -NSString * const kImpressionDataNetworkPlacementIDKey = @"network_placement_id"; -NSString * const kImpressionDataAppVersionKey = @"app_version"; -NSString * const kImpressionDataPublisherRevenueKey = @"publisher_revenue"; -NSString * const kImpressionDataPrecisionKey = @"precision"; diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPConsentDialogViewController.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPConsentDialogViewController.h deleted file mode 100644 index 59ead515d7..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPConsentDialogViewController.h +++ /dev/null @@ -1,70 +0,0 @@ -// -// MPConsentDialogViewController.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@class MPConsentDialogViewController; - -@protocol MPConsentDialogViewControllerDelegate - -@optional - -/** - Informs the delegate of the received consent response. - */ -- (void)consentDialogViewControllerDidReceiveConsentResponse:(BOOL)response - consentDialogViewController:(MPConsentDialogViewController *)consentDialogViewController; - -/** - Informs the delegate that the given consentDialogViewController will disappear. - */ -- (void)consentDialogViewControllerWillDisappear:(MPConsentDialogViewController *)consentDialogViewController; - -/** - Informs the delegate that the given consentDialogViewController did complete dismissing. - */ -- (void)consentDialogViewControllerDidDismiss:(MPConsentDialogViewController *)consentDialogViewController; - -@end - -@interface MPConsentDialogViewController : UIViewController - -/** - Initializes a consent dialog view controller with an HTML string to load. It is expected that this initializer is used - when initializing. - - @param dialogHTML The markup string for the consent dialog. - */ -- (instancetype)initWithDialogHTML:(NSString *)dialogHTML NS_DESIGNATED_INITIALIZER; - -/** - Delegate object to inform an outside object of events. - */ -@property (nonatomic, weak) id delegate; - -/** - This method starts the loading of the consent page. When complete, `completion` will be called with a `BOOL` - indicating success, and an `NSError` object with information about the error in the case of failure. - - This method can be called and is expected to be called before the view controller is presented. This way, - the consent dialog is already loaded and in-view by the time the user sees it. - */ -- (void)loadConsentPageWithCompletion:(void (^_Nullable)(BOOL success, NSError *error))completion; - -/** - These initializers are not available - */ -- (instancetype)init NS_UNAVAILABLE; -- (instancetype)initWithCoder:(NSCoder *)aDecoder NS_UNAVAILABLE; -- (instancetype)initWithNibName:(NSString * _Nullable)nibNameOrNil bundle:(NSBundle * _Nullable)nibBundleOrNil NS_UNAVAILABLE; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPConsentDialogViewController.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPConsentDialogViewController.m deleted file mode 100644 index 2c13981a77..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPConsentDialogViewController.m +++ /dev/null @@ -1,264 +0,0 @@ -// -// MPConsentDialogViewController.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPAPIEndpoints.h" -#import "MPConsentDialogViewController.h" -#import "MPGlobal.h" -#import "MPWebView.h" -#import "MoPub+Utility.h" - -typedef void(^MPConsentDialogViewControllerCompletion)(BOOL success, NSError *error); - -static NSString * const kMoPubScheme = @"mopub"; -static NSString * const kMoPubConsentURLHost = @"consent"; -static NSString * const kMoPubCloseURLHost = @"close"; - -static NSString * const kMoPubAffirmativeConsentQueryString = @"yes"; -static NSString * const kMoPubNegativeConsentQueryString = @"no"; - -static CGFloat const kCloseButtonDimension = 40.0; -static CGFloat const kCloseButtonSpacing = 7.0; -static NSTimeInterval const kCloseButtonFadeInAnimationDuration = 0.2; -static NSTimeInterval const kCloseButtonFadeInAfterSeconds = 10.0; - -@interface MPConsentDialogViewController () - -@property (nonatomic, strong) UIButton *closeButton; -@property (nonatomic, strong) MPWebView *webView; -@property (nonatomic, assign) BOOL finishedInitialLoad; -@property (nonatomic, assign) BOOL closeButtonHasBeenShown; -@property (nonatomic, copy) MPConsentDialogViewControllerCompletion didLoadCompletionBlock; - -@property (nonatomic, copy) NSString *dialogHTML; - -@end - -@implementation MPConsentDialogViewController - -#pragma mark - Initialization - -- (instancetype)initWithDialogHTML:(NSString *)dialogHTML { - if (self = [super initWithNibName:nil bundle:nil]) { - // Set internal variables - _dialogHTML = dialogHTML; - - // Initialize web view - [self setUpWebView]; - - // Ensure fullscreen presentation - self.modalPresentationStyle = UIModalPresentationFullScreen; - } - - return self; -} - -- (void)viewDidLoad { - [super viewDidLoad]; - - // Make background color black - self.view.backgroundColor = [UIColor blackColor]; - - // It is important to layout the web view first, then set up the close button so that the button appears on top. - [self layoutWebView]; - [self setUpCloseButton]; -} - -- (void)viewDidAppear:(BOOL)animated { - [super viewDidAppear:animated]; - - // Fade in close button - __weak __typeof__(self) weakSelf = self; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(kCloseButtonFadeInAfterSeconds * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [weakSelf fadeInCloseButton]; - }); -} - -- (void)viewWillDisappear:(BOOL)animated { - [super viewWillDisappear:animated]; - - if ([self.delegate respondsToSelector:@selector(consentDialogViewControllerWillDisappear:)]) { - [self.delegate consentDialogViewControllerWillDisappear:self]; - } -} - -- (void)closeConsentDialog { - [self dismissViewControllerAnimated:YES completion:^{ - // Intentionally holding a strong reference to @c self here so that the view controller doesn't deallocate - // before the delegate method is called. - if ([self.delegate respondsToSelector:@selector(consentDialogViewControllerDidDismiss:)]) { - [self.delegate consentDialogViewControllerDidDismiss:self]; - } - }]; -} - -- (void)setUpWebView { - self.webView = [[MPWebView alloc] initWithFrame:CGRectZero]; - self.webView.delegate = self; - self.webView.scrollView.bounces = NO; - self.webView.backgroundColor = [UIColor whiteColor]; - self.webView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; -} - -- (void)layoutWebView { - self.webView.frame = self.view.bounds; - [self.view addSubview:self.webView]; - - // Set up autolayout constraints on iOS 11+. This web view should always stay within the safe area. - if (@available(iOS 11, *)) { - self.webView.translatesAutoresizingMaskIntoConstraints = NO; - [NSLayoutConstraint activateConstraints:@[ - [self.webView.topAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.topAnchor], - [self.webView.leadingAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.leadingAnchor], - [self.webView.trailingAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.trailingAnchor], - [self.webView.bottomAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.bottomAnchor], - ]]; - } -} - -- (BOOL)prefersStatusBarHidden { - return YES; -} - -- (void)setUpCloseButton { - self.closeButton = [UIButton buttonWithType:UIButtonTypeCustom]; - self.closeButton.frame = CGRectMake(CGRectGetMaxX(self.view.bounds) - kCloseButtonDimension - kCloseButtonSpacing, - CGRectGetMinY(self.view.bounds) + kCloseButtonSpacing, - kCloseButtonDimension, - kCloseButtonDimension); - self.closeButton.backgroundColor = [UIColor clearColor]; - [self.closeButton setImage:[UIImage imageWithContentsOfFile:MPResourcePathForResource(@"MPCloseButtonX.png")] forState:UIControlStateNormal]; - [self.closeButton addTarget:self - action:@selector(closeButtonAction:) - forControlEvents:UIControlEventTouchUpInside]; - [self.view addSubview:self.closeButton]; - - if (@available(iOS 11, *)) { - self.closeButton.translatesAutoresizingMaskIntoConstraints = NO; - [NSLayoutConstraint activateConstraints:@[ - [self.closeButton.widthAnchor constraintEqualToConstant:kCloseButtonDimension], - [self.closeButton.heightAnchor constraintEqualToConstant:kCloseButtonDimension], - [self.closeButton.topAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.topAnchor constant:kCloseButtonSpacing], - [self.closeButton.trailingAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.trailingAnchor constant:-kCloseButtonSpacing], - ]]; - } - - // Set close button alpha to zero to fade in later - self.closeButton.alpha = 0.0; -} - -- (IBAction)closeButtonAction:(id)sender { - [self closeConsentDialog]; -} - -- (void)fadeInCloseButton { - if (!self.closeButtonHasBeenShown) { - self.closeButtonHasBeenShown = YES; - [UIView animateWithDuration:kCloseButtonFadeInAnimationDuration animations:^{ - self.closeButton.alpha = 1.0; - }]; - } -} - -#pragma mark - Load Consent Page - -- (void)loadConsentPageWithCompletion:(MPConsentDialogViewControllerCompletion)completion { - // Set `finishedInitialLoad` to `NO` because this method is (re)doing the initial load - self.finishedInitialLoad = NO; - - // Copy the completion block to `didLoadCompletionBlock` to run when the page loads or fails to load - self.didLoadCompletionBlock = completion; - - // Load consent dialog HTML markup - [self.webView loadHTMLString:self.dialogHTML - baseURL:[NSURL URLWithString:[MPAPIEndpoints baseURL]]]; -} - -#pragma mark - MPWebViewDelegate - -- (void)webView:(MPWebView *)webView didFailLoadWithError:(NSError *)error { - if (!self.finishedInitialLoad) { - self.finishedInitialLoad = YES; - - if (self.didLoadCompletionBlock) { - self.didLoadCompletionBlock(NO, error); - self.didLoadCompletionBlock = nil; - } - } -} - -- (void)webViewDidFinishLoad:(MPWebView *)webView { - if (!self.finishedInitialLoad) { - self.finishedInitialLoad = YES; - - if (self.didLoadCompletionBlock) { - self.didLoadCompletionBlock(YES, nil); - self.didLoadCompletionBlock = nil; - } - } -} - -- (BOOL)webView:(MPWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(WKNavigationType)navigationType { - BOOL requestIsMoPubScheme = [request.URL.scheme isEqualToString:kMoPubScheme]; - BOOL requestIsMoPubHost = [request.URL.host isEqualToString:MPAPIEndpoints.baseHostname]; - - // Kick to Safari if the URL is not of MoPub scheme or hostname - if (!requestIsMoPubScheme && !requestIsMoPubHost) { - [MoPub openURL:request.URL]; - return NO; - } - - // Allow load if request came from ads.mopub.com - if (requestIsMoPubHost) { - return YES; - } - - // Sanity check: do nothing if we get to this point and it is not a MoPub scheme - if (!requestIsMoPubScheme) { - return NO; - } - - // MoPub Scheme - - // Received close command; send dismiss and do not allow load. - if ([request.URL.host isEqualToString:kMoPubCloseURLHost]) { - [self closeConsentDialog]; - return NO; - } - - // Break out if any command other than consent (we do not know any commands besides "close" and "consent" - if (![request.URL.host isEqualToString:kMoPubConsentURLHost]) { - return NO; - } - - // Received consent command; validate query string - BOOL receivedAffirmativeAnswer = [request.URL.query isEqualToString:kMoPubAffirmativeConsentQueryString]; - BOOL receivedNegativeAnswer = [request.URL.query isEqualToString:kMoPubNegativeConsentQueryString]; - // We should have received one answer or the other (i.e., one of these should be marked as `YES`). If neither - // was marked as `YES` (i.e., the query string was malformed), break out immediately. - if (!receivedAffirmativeAnswer && !receivedNegativeAnswer) { - return NO; - } - // Given that we did receive an answer, the receivedAffirmativeAnswer variable is what we expect consentAnswer to be. - // If consent was given, receivedAffirmativeAnswer will be `YES`. - // If consent was not given, receivedAffirmativeAnswer will be `NO` (and the above `if` will filter out unknowns). - BOOL consentAnswer = receivedAffirmativeAnswer; - - // Inform delegate - if ([self.delegate respondsToSelector:@selector(consentDialogViewControllerDidReceiveConsentResponse:consentDialogViewController:)]) { - [self.delegate consentDialogViewControllerDidReceiveConsentResponse:consentAnswer - consentDialogViewController:self]; - } - - // Show close button (if it hasn't already been shown) - [self fadeInCloseButton]; - - // Do not load - return NO; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPConsentManager.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPConsentManager.h deleted file mode 100644 index e94fd7949c..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPConsentManager.h +++ /dev/null @@ -1,281 +0,0 @@ -// -// MPConsentManager.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPBool.h" -#import "MPConsentStatus.h" -#import "MPConsentDialogViewController.h" - -@interface MPConsentManager : NSObject - -/** - Ad unit ID sent to Ad Server as a proxy for the MoPub app ID. If a known - good adunit ID is already cached, setting this will have no effect. - @remark This should only be set by SDK initialization and must be non-nil. - */ -@property (nonatomic, strong, nonnull) NSString * adUnitIdUsedForConsent; - -/** - Sets @c self.adUnitIdUsedForConsent, and caches to disk if @c isKnownGood is set to @c YES. - No-op if a known good adunit is already cached to disk. - @remark @c isKnownGood should only be set to @c YES when the adunit ID has been verified with the server - */ -- (void)setAdUnitIdUsedForConsent:(NSString * _Nonnull)adUnitIdUsedForConsent isKnownGood:(BOOL)isKnownGood; - -/** - Clears @c self.adUnitIdUsedForConsent as well as the backing cache. - */ -- (void)clearAdUnitIdUsedForConsent; - -/** - This API can be used if you want to allow supported SDK networks to collect user information on the basis of legitimate interest. The default value is @c NO. - */ -@property (nonatomic, assign) BOOL allowLegitimateInterest; - -/** - Flag indicating that personally identifiable information can be collected. - */ -@property (nonatomic, readonly) BOOL canCollectPersonalInfo; - -/** - Flag indicating that consent needs to be acquired (or reacquired) by the user, and - that the consent dialog may need to be shown. - */ -@property (nonatomic, readonly) BOOL isConsentNeeded; - -/** - Flag indicating that GDPR applicability was forced and the transition should be - communicated back to the server. This will only persist in memory. - */ -@property (nonatomic, readonly) BOOL isForcedGDPRAppliesTransition; - -/** - Retrieves the current language code. - */ -@property (nonatomic, copy, readonly, nonnull) NSString * currentLanguageCode; - -/** - * Singleton instance of the manager. - */ -+ (MPConsentManager * _Nonnull)sharedManager; - -/** - Allows a whitelisted publisher to grant consent on the user's behalf. - */ -- (void)grantConsent; - -/** - Allows a publisher to explicitly deny or revoke consent on the user's behalf. - */ -- (void)revokeConsent; - -/** - Checks if there is a transition from a "do not track" state to an "allowed to track" state, or from - an "allowed to track" state to a "do not track" state. If detected, the appropriate consent - status state change will occur locally and trigger the @c kMPConsentChangedNotification. - @remark This is a local update only and will require a seperate Ad Server synchronization. - @return @c YES if a transition occurred; @c NO otherwise. - */ -- (BOOL)checkForDoNotTrackAndTransition; - -/** - This method takes in parameters (expected to be derived from a server response) which tell the SDK to force consent - status to explicit no or unknown. Explicit no takes priority over unknown. It also takes in a consent change reason, - and a BOOL to tell it whether to cache and broadcast. - */ -- (void)forceStatusShouldForceExplicitNo:(BOOL)shouldForceExplicitNo - shouldInvalidateConsent:(BOOL)shouldInvalidateConsent - shouldReacquireConsent:(BOOL)shouldReacquireConsent - shouldForceGDPRApplicability:(BOOL)shouldForceGDPRApplies - consentChangeReason:(NSString * _Nullable)consentChangeReason - shouldBroadcast:(BOOL)shouldBroadcast; - -/** - Synchronizes the current state with Ad Server and makes any state adjustments - based upon the response. - @param completion Synchronization completion block. - */ -- (void)synchronizeConsentWithCompletion:(void (^ _Nonnull)(NSError * _Nullable error))completion; - -/** - `YES` if a consent dialog is currently loaded; `NO` otherwise. - */ -@property (nonatomic, readonly) BOOL isConsentDialogLoaded; - -/** - Starts loading a consent dialog asynchronously. Calls `completion` when done with an NSError if not successful. - Calls `completion` immediately if a `consentDialog` is already loaded. - */ -- (void)loadConsentDialogWithCompletion:(void (^ _Nullable)(NSError * _Nullable error))completion; - -/** - If a consent dialog is loaded, this method will present it modally from the given `viewController`. If no consent - dialog is loaded this method will do nothing. `completion` is called upon successful presentation; it is not called otherwise. - */ -- (void)showConsentDialogFromViewController:(UIViewController * _Nonnull)viewController - didShow:(void (^ _Nullable)(void))didShow - didDismiss:(void (^ _Nullable)(void))didDismiss; - -@end - -@interface MPConsentManager (State) - -/** - IAB vendor list that has been consented to. - */ -@property (nonatomic, copy, readonly, nullable) NSString * consentedIabVendorList; - -/** - MoPub privacy policy version that has been consented to. - */ -@property (nonatomic, copy, readonly, nullable) NSString * consentedPrivacyPolicyVersion; - -/** - Vendor list version that has been consented to. - */ -@property (nonatomic, copy, readonly, nullable) NSString * consentedVendorListVersion; - -/** - Current consent status. - */ -@property (nonatomic, readonly) MPConsentStatus currentStatus; - -/** - Server extras (reserved for future use). - */ -@property (nonatomic, copy, readonly, nullable) NSString * extras; - -/** - Current IAB format vendor list. - */ -@property (nonatomic, copy, readonly, nullable) NSString * iabVendorList; - -/** - Current IAB format vendor list hash. - */ -@property (nonatomic, copy, readonly, nullable) NSString * iabVendorListHash; - -/** - IFA used for consent purposes only. - */ -@property (nonatomic, copy, readonly, nullable) NSString * ifaForConsent; - -/** - Flag indicating if GDPR is applicable to the user. - */ -@property (nonatomic, readonly) MPBool isGDPRApplicable; - -/** - Allows a publisher to force @c isGDPRApplicable to @c YES. When this is set to @c YES, @c isGDPRApplicable will always - be @c MPBoolYes. This property is disk-backed, so its value will persist between app sessions once it has been set. - When set back to @c NO, the value of @c isGDPRApplicable determined at first app session will apply. - */ -@property (nonatomic, assign) BOOL forceIsGDPRApplicable; - -/** - Flag indicating that the app is whitelisted for non-user-initiated consent changes. - */ -@property (nonatomic, readonly) BOOL isWhitelisted; - -/** - Optional description of why the consent was changed to the current value. - */ -@property (nonatomic, copy, readonly, nullable) NSString * lastChangedReason; - -/** - Timestamp of the current consent status in milliseconds. If this value is zero, - consent status has never changed. - */ -@property (nonatomic, readonly) NSTimeInterval lastChangedTimestampInMilliseconds; - -/** - Consent status that was last synchronized with the server. - */ -@property (nonatomic, copy, readonly, nullable) NSString * lastSynchronizedStatus; - -/** - URL to the MoPub privacy policy in the device's preferred language. If the device's - preferred language could not be determined, English will be used. - @return The privacy policy URL for the desired language if successful; @c nil if - there is no current vendor list. - */ -- (NSURL * _Nullable)privacyPolicyUrl; - -/** - URL to the MoPub privacy policy in the language of choice. - @param isoLanguageCode ISO 630-1 language code - @return The privacy policy URL for the desired language if successful; @c nil if the - language code is invalid or if there is no current vendor list. - */ -- (NSURL * _Nullable)privacyPolicyUrlWithISOLanguageCode:(NSString * _Nonnull)isoLanguageCode; - -/** - Current version of MoPub’s privacy policy. - */ -@property (nonatomic, copy, readonly, nullable) NSString * privacyPolicyVersion; - -/** - The maximum frequency in seconds that the SDK is allowed to synchronize consent - information. - */ -@property (nonatomic, readonly) NSTimeInterval syncFrequency; - -/** - Current vendor list URL in the device's preferred language. If the device's - preferred language could not be determined, English will be used. - @return The vendor list URL for the desired language if successful; @c nil if - there is no current vendor list. - */ -- (NSURL * _Nullable)vendorListUrl; - -/** - Current vendor list URL in the language of choice. - @param isoLanguageCode ISO 630-1 language code - @return The vendor list URL for the desired language if successful; @c nil if the - language code is invalid or if there is no current vendor list. - */ -- (NSURL * _Nullable)vendorListUrlWithISOLanguageCode:(NSString * _Nonnull)isoLanguageCode; - -/** - Current version of the vendor list. - */ -@property (nonatomic, copy, readonly, nullable) NSString * vendorListVersion; - -@end - -@interface MPConsentManager (PersonalDataHandler) - -/** - * Clean up personal data and add additonal logic for personal data when consent state changes. - */ - -- (void)handlePersonalDataOnStateChangeTo:(MPConsentStatus)newStatus fromOldStatus:(MPConsentStatus)oldStatus; - -/** - * Store IFA(IDFA) temporary in NSUserDefault during MoPub initialization or app foregrounding. IFA is only used for removing personal data. - * - */ -- (void)storeIfa; - -/** - * Remove IFA from NSUserDefault. - */ -- (void)removeIfa; - -/** - * If IFA is changed and the status is transitioning from MPConsentStatusConsented, remove old IFA from NSUserDefault and change status to unknown. - * - */ -- (void)checkForIfaChange; - -/** - * App conversion request will only be fired when MoPub obtains consent. - */ -- (void)updateAppConversionTracking; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPConsentManager.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPConsentManager.m deleted file mode 100644 index 02aa208d75..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPConsentManager.m +++ /dev/null @@ -1,1201 +0,0 @@ -// -// MPConsentManager.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPAPIEndpoints.h" -#import "MPAdServerURLBuilder.h" -#import "MPAdServerKeys.h" -#import "MPConsentChangedNotification.h" -#import "MPConsentChangedReason.h" -#import "MPConsentError.h" -#import "MPConsentManager.h" -#import "MPConstants.h" -#import "MPError.h" -#import "MPHTTPNetworkSession.h" -#import "MPIdentityProvider.h" -#import "MPLogging.h" -#import "MPTimer.h" -#import "MPURLRequest.h" -#import "NSString+MPConsentStatus.h" -#import "MPAdConversionTracker.h" - -// NSUserDefault keys -static NSString * const kAdUnitIdUsedForConsentStorageKey = @"com.mopub.mopub-ios-sdk.consent.ad.unit.id"; -static NSString * const kConsentedIabVendorListStorageKey = @"com.mopub.mopub-ios-sdk.consented.iab.vendor.list"; -static NSString * const kConsentedPrivacyPolicyVersionStorageKey = @"com.mopub.mopub-ios-sdk.consented.privacy.policy.version"; -static NSString * const kConsentedVendorListVersionStorageKey = @"com.mopub.mopub-ios-sdk.consented.vendor.list.version"; -static NSString * const kConsentStatusStorageKey = @"com.mopub.mopub-ios-sdk.consent.status"; -static NSString * const kExtrasStorageKey = @"com.mopub.mopub-ios-sdk.extras"; -static NSString * const kIabVendorListStorageKey = @"com.mopub.mopub-ios-sdk.iab.vendor.list"; -static NSString * const kIabVendorListHashStorageKey = @"com.mopub.mopub-ios-sdk.iab.vendor.list.hash"; -static NSString * const kIfaForConsentStorageKey = @"com.mopub.mopub-ios-sdk.ifa.for.consent"; -static NSString * const kIsDoNotTrackStorageKey = @"com.mopub.mopub-ios-sdk.is.do.not.track"; -static NSString * const kIsWhitelistedStorageKey = @"com.mopub.mopub-ios-sdk.is.whitelisted"; -static NSString * const kGDPRAppliesStorageKey = @"com.mopub.mopub-ios-sdk.gdpr.applies"; -static NSString * const kForceGDPRAppliesStorageKey = @"com.mopub.mopub-ios-sdk.gdpr.force.applies.true"; -static NSString * const kLastChangedMsStorageKey = @"com.mopub.mopub-ios-sdk.last.changed.ms"; -static NSString * const kLastChangedReasonStorageKey = @"com.mopub.mopub-ios-sdk.last.changed.reason"; -static NSString * const kLastSynchronizedConsentStatusStorageKey = @"com.mopub.mopub-ios-sdk.last.synchronized.consent.status"; -static NSString * const kPrivacyPolicyUrlStorageKey = @"com.mopub.mopub-ios-sdk.privacy.policy.url"; -static NSString * const kPrivacyPolicyVersionStorageKey = @"com.mopub.mopub-ios-sdk.privacy.policy.version"; -static NSString * const kShouldReacquireConsentStorageKey = @"com.mopub.mopub-ios-sdk.should.reacquire.consent"; -static NSString * const kVendorListUrlStorageKey = @"com.mopub.mopub-ios-sdk.vendor.list.url"; -static NSString * const kVendorListVersionStorageKey = @"com.mopub.mopub-ios-sdk.vendor.list.version"; - -// Frequency constants -static NSTimeInterval const kDefaultRefreshInterval = 300; //seconds - -// String replacement macros -static NSString * const kMacroReplaceLanguageCode = @"%%LANGUAGE%%"; - -@interface MPConsentManager() - -/** - The loaded consent dialog view controller, or nil if the dialog has not been loaded. - */ -@property (nonatomic, strong, nullable) MPConsentDialogViewController * consentDialogViewController; - -/** - Flag indicating the last known "do not track" status. This is primarily used for detecting - changes in the "do not track" state by the user. This state should only be set by the - @c setCurrentStatus:reason:shouldBroadcast: method. A value of @c YES indicates - that we were last known to be in a "do not track" state; otherwise @c NO. - */ -@property (nonatomic, readonly) BOOL isDoNotTrack; - -/** - Flag indicating that GDPR applicability was forced and the transition should be - communicated back to the server. This will only persist in memory. - */ -@property (nonatomic, assign, readwrite) BOOL isForcedGDPRAppliesTransition; - -/** - Timer used to fire the next consent synchronization update. This will be invalidated - everytime `synchronizeConsentWithCompletion:` is explcitly called. The timer - frequency is determined by `self.syncFrequency`. - */ -@property (nonatomic, strong, nullable) MPTimer * nextUpdateTimer; - -/** - Queries the raw consent status value that is stored in @c kConsentStatusStorageKey - */ -@property (nonatomic, readonly) MPConsentStatus rawConsentStatus; - -/** - Queries the raw isGDPRApplicable value that is stored in @c kGDPRAppliesStorageKey - */ -@property (nonatomic, readonly) MPBool rawIsGDPRApplicable; - -/** - Flag indicating that the server requires reacquisition of consent. - This flag should be reset once the dialog has been shown to the user - and the user has consented/not consented, or if the whitelisted publisher - has explicitly called @c grantConsent or @c revokeConsent. - @remark Setting this property will not trigger a @c NSUserDefaults.synchronize - */ -@property (nonatomic, assign) BOOL shouldReacquireConsent; - -/** - The maximum frequency in seconds that the SDK is allowed to synchronize consent - information. Defaults to 300 seconds. - */ -@property (nonatomic, assign, readwrite) NSTimeInterval syncFrequency; - -/** - Block to be executed after the consent dialog dismisses. Typically will be nil, but - if a consent dialog view controller is currently presented, and the publisher set a - block to be executed once the view controller dismisses, that block is stored here - while it's waiting to be executed. - */ -@property (nonatomic, copy) void (^consentDialogDidDismissCompletionBlock)(void); - -@end - -@implementation MPConsentManager - -#pragma mark - Initialization - -+ (MPConsentManager *)sharedManager { - static MPConsentManager * sharedMyManager = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - sharedMyManager = [[self alloc] init]; - }); - return sharedMyManager; -} - -- (instancetype)init { - if (self = [super init]) { - // Register application foreground and background listeners - [NSNotificationCenter.defaultCenter addObserver:self selector:@selector(onApplicationWillEnterForeground:) name:UIApplicationWillEnterForegroundNotification object:nil]; - - // Initialize internal state - _consentDialogViewController = nil; - _syncFrequency = kDefaultRefreshInterval; - - // Initializing the timer must be done last since it depends on the - // value of _syncFrequency - _nextUpdateTimer = [self newNextUpdateTimer]; - } - - return self; -} - -- (void)dealloc { - [NSNotificationCenter.defaultCenter removeObserver:self]; - - // Tear down the next update timer. - [_nextUpdateTimer invalidate]; - _nextUpdateTimer = nil; -} - -#pragma mark - Properties - -- (BOOL)canCollectPersonalInfo { - // We can collection information under the following conditions: - // 1. GDPR does not apply to the user - // or - // 2. GDPR does apply and the user explicitly granted consent. - return self.isGDPRApplicable == MPBoolNo || (self.isGDPRApplicable == MPBoolYes && self.currentStatus == MPConsentStatusConsented); -} - -- (NSString *)currentLanguageCode { - // Need to strip out any region code if it's in there. - // In the event we cannot determine the language code, we will default to English. - NSString * code = [self removeRegionFromLanguageCode:NSLocale.preferredLanguages.firstObject]; - return code != nil ? code : @"en"; -} - -- (BOOL)isConsentNeeded { - return self.shouldReacquireConsent || (self.currentStatus == MPConsentStatusUnknown && self.isGDPRApplicable == MPBoolYes); -} - -/** - Flag indicating the last known "do not track" status. This is primarily used for detecting - changes in the "do not track" state by the user. This state should only be set by the - @c setCurrentStatus:reason:shouldBroadcast: method. - @return @c YES if we were in a "do not track" state; otherwise @c NO. - */ -- (BOOL)isDoNotTrack { - return [NSUserDefaults.standardUserDefaults boolForKey:kIsDoNotTrackStorageKey]; -} - -- (MPConsentStatus)rawConsentStatus { - return (MPConsentStatus)[NSUserDefaults.standardUserDefaults integerForKey:kConsentStatusStorageKey]; -} - -- (MPBool)rawIsGDPRApplicable { - return (MPBool)[NSUserDefaults.standardUserDefaults integerForKey:kGDPRAppliesStorageKey]; -} - -- (BOOL)shouldReacquireConsent { - return [NSUserDefaults.standardUserDefaults boolForKey:kShouldReacquireConsentStorageKey]; -} - -- (void)setShouldReacquireConsent:(BOOL)shouldReacquireConsent { - // Capture old `isConsentNeeded` value - BOOL oldIsConsentNeeded = self.isConsentNeeded; - - // Update the cached value - [NSUserDefaults.standardUserDefaults setBool:shouldReacquireConsent forKey:kShouldReacquireConsentStorageKey]; - - // Broadcast the `kMPConsentNeededNotification` if the `isConsentNeeded` computed property - // transitions from `NO` to `YES`. - if (!oldIsConsentNeeded && self.isConsentNeeded) { - [self notifyConsentNeeded]; - } -} - -#pragma mark - ISO Language Code - -/** - Strip out any region code if there is one in the ISO langauge code. - For example: en-US --> en and zh-Hans-HK --> zh - @param isoLanguageCode ISO-639 compliant language code - @return The ISO language code stripped of the region if successful; @c nil otherwise. - */ -- (NSString * _Nullable)removeRegionFromLanguageCode:(NSString * _Nullable)isoLanguageCode { - return [isoLanguageCode componentsSeparatedByString:@"-"].firstObject; -} - -#pragma mark - Publisher Consent Granting and Revoking - -- (void)grantConsent { - MPLogInfo(@"Grant consent was called with publisher whitelist status of: %@whitelisted", self.isWhitelisted ? @"" : @"not "); - if (!self.isWhitelisted) { - MPLogInfo(@"You do not have approval to use the grantConsent API. Please reach out to your account teams or support@mopub.com for more information."); - } - - // Reset the reacquire consent flag since the user has taken action. - BOOL statusWasReacquired = self.shouldReacquireConsent; - self.shouldReacquireConsent = NO; - - MPConsentStatus grantStatus = self.isWhitelisted ? MPConsentStatusConsented : MPConsentStatusPotentialWhitelist; - NSString * grantReason = (grantStatus == MPConsentStatusConsented ? kConsentedChangedReasonWhitelistGranted : kConsentedChangedReasonPotentialWhitelist); - - // Grant consent and if the state has transitioned, immediately synchronize - // with the server as this is an externally induced state change. - if ([self setCurrentStatus:grantStatus reason:grantReason statusWasReacquired:statusWasReacquired shouldBroadcast:YES]) { - MPLogDebug(@"Consent synchronization triggered by publisher granting consent"); - [self synchronizeConsentWithCompletion:^(NSError * _Nullable error) { - // Consent synchronization success/fail logging is already handled - // by `synchronizeConsentWithCompletion:`. - }]; - } -} - -- (void)revokeConsent { - // Reset the reacquire consent flag since the user has taken action. - BOOL statusWasReacquired = self.shouldReacquireConsent; - self.shouldReacquireConsent = NO; - - // Revoke consent and if the state has transitioned, immediately synchronize - // with the server as this is an externally induced state change. - if ([self setCurrentStatus:MPConsentStatusDenied reason:kConsentedChangedReasonPublisherDenied statusWasReacquired:statusWasReacquired shouldBroadcast:YES]) { - MPLogDebug(@"Consent synchronization triggered by publisher revoking consent"); - [self synchronizeConsentWithCompletion:^(NSError * _Nullable error) { - // Consent synchronization success/fail logging is already handled - // by `synchronizeConsentWithCompletion:`. - }]; - } -} - -#pragma mark - Consent Dialog - -- (BOOL)isConsentDialogLoaded { - return self.consentDialogViewController != nil; -} - -- (void)loadConsentDialogWithCompletion:(void (^)(NSError *error))completion { - // Helper block to call completion if not nil - void (^callCompletion)(NSError *error) = ^(NSError *error) { - if (error != nil) { - MPLogEvent([MPLogEvent consentDialogLoadFailedWithError:error]); - } - else { - MPLogEvent(MPLogEvent.consentDialogLoadSuccess); - } - - if (completion != nil) { - completion(error); - } - }; - - // If "Limit Ad Tracking" is on, do not load, nil any view controller that has already loaded, and send error - if (self.currentStatus == MPConsentStatusDoNotTrack) { - self.consentDialogViewController = nil; - NSError *limitAdTrackingError = [NSError errorWithDomain:kConsentErrorDomain - code:MPConsentErrorCodeLimitAdTrackingEnabled - userInfo:@{ NSLocalizedDescriptionKey: @"Consent dialog will not be loaded because Limit Ad Tracking is on" }]; - callCompletion(limitAdTrackingError); - return; - } - - // If GDPR is not applicable, do not load, nil any view controller that has already loaded, and send error - if (self.isGDPRApplicable != MPBoolYes) { - self.consentDialogViewController = nil; - NSError *gdprIsNotApplicableError = [NSError errorWithDomain:kConsentErrorDomain - code:MPConsentErrorCodeGDPRIsNotApplicable - userInfo:@{ NSLocalizedDescriptionKey: @"Consent dialog will not be loaded because GDPR is not applicable" }]; - callCompletion(gdprIsNotApplicableError); - return; - } - - // If a view controller is already loaded, don't load another. - if (self.consentDialogViewController) { - callCompletion(nil); - return; - } - - // Weak self reference for blocks - __weak __typeof__(self) weakSelf = self; - - // Do network request to get HTML - MPURLRequest *consentDialogRequest = [MPURLRequest requestWithURL:[MPAdServerURLBuilder consentDialogURL]]; - [MPHTTPNetworkSession startTaskWithHttpRequest:consentDialogRequest responseHandler:^(NSData *data, NSURLResponse *response){ - // De-serialize JSON data - NSError *deserializationError; - NSDictionary *consentDialogResponse = [NSJSONSerialization JSONObjectWithData:data options:0 error:&deserializationError]; - // Stop if there was a de-serialization error - if (!consentDialogResponse) { - callCompletion(deserializationError); - return; - } - - // Initialize view controller with response HTML strings - MPConsentDialogViewController *viewController = [[MPConsentDialogViewController alloc] initWithDialogHTML:consentDialogResponse[kDialogHTMLKey]]; - viewController.delegate = weakSelf; - - // Load consent page data - [viewController loadConsentPageWithCompletion:^(BOOL success, NSError *error) { - if (success) { - // Notify when page data has been loaded and set the property - weakSelf.consentDialogViewController = viewController; - callCompletion(nil); - } else { - // Notify when there was an error loading page data and set the property to `nil`. - weakSelf.consentDialogViewController = nil; - callCompletion(error); - } - }]; - } errorHandler:^(NSError *error){ - // Call completion without success if the network request failed - callCompletion(error); - }]; -} - -- (void)showConsentDialogFromViewController:(UIViewController *)viewController - didShow:(void (^)(void))didShow - didDismiss:(void (^)(void))didDismiss { - // Ensure that this method is invoked from the main thread. - if (!NSThread.isMainThread) { - __weak __typeof__(self) weakSelf = self; - dispatch_async(dispatch_get_main_queue(), ^{ - [weakSelf showConsentDialogFromViewController:viewController didShow:didShow didDismiss:didDismiss]; - }); - return; - } - - // If `viewController` is already presenting the consent dialog modally, do nothing. - if (viewController.presentedViewController == self.consentDialogViewController) { - MPLogEvent([MPLogEvent error:NSError.consentDialogAlreadyShowing message:nil]); - return; - } - - MPLogEvent(MPLogEvent.consentDialogShowAttempted); - if (self.isConsentDialogLoaded) { - [viewController presentViewController:self.consentDialogViewController - animated:YES - completion:didShow]; - - // Save @c didDismiss block for later - self.consentDialogDidDismissCompletionBlock = didDismiss; - MPLogEvent(MPLogEvent.consentDialogShowSuccess); - } - // Consent dialog not loaded - else { - NSError * error = NSError.noConsentDialogLoaded; - MPLogEvent([MPLogEvent consentDialogShowFailedWithError:error]); - } -} - -// MPConsentDialogViewControllerDelegate -- (void)consentDialogViewControllerDidReceiveConsentResponse:(BOOL)response - consentDialogViewController:(MPConsentDialogViewController *)consentDialogViewController { - // Reset the reacquire consent flag since the user has taken action. - BOOL statusWasReacquired = self.shouldReacquireConsent; - self.shouldReacquireConsent = NO; - - // Set consent status - MPConsentStatus status = (response ? MPConsentStatusConsented : MPConsentStatusDenied); - NSString * changeReason = (response ? kConsentedChangedReasonGranted : kConsentedChangedReasonDenied); - BOOL didTransition = [self setCurrentStatus:status reason:changeReason statusWasReacquired:statusWasReacquired shouldBroadcast:YES]; - - // Synchronize only if there was a successful state transition. - // It is possible that the user responded to the consent dialog while - // in a "do not track" state. - if (didTransition) { - MPLogDebug(@"Consent synchronization triggered by user responding to consent dialog"); - [self synchronizeConsentWithCompletion:^(NSError * _Nullable error) { - // Consent synchronization success/fail logging is already handled - // by `synchronizeConsentWithCompletion:`. - }]; - } -} - -- (void)consentDialogViewControllerWillDisappear:(MPConsentDialogViewController *)consentDialogViewController { - // Nil out the consent dialog view controller here so the same dialog instance is not accidentally reused - // if attempted to be loaded again too early - self.consentDialogViewController = nil; -} - -- (void)consentDialogViewControllerDidDismiss:(MPConsentDialogViewController *)consentDialogViewController { - // Ensure that this method is invoked from the main thread. - if (!NSThread.isMainThread) { - __weak __typeof__(self) weakSelf = self; - dispatch_async(dispatch_get_main_queue(), ^{ - [weakSelf consentDialogViewControllerDidDismiss:consentDialogViewController]; - }); - return; - } - - // Execute @c consentDialogWillDismissCompletionBlock if needed - if (self.consentDialogDidDismissCompletionBlock) { - self.consentDialogDidDismissCompletionBlock(); - - // Set completion block to @c nil once done running it - self.consentDialogDidDismissCompletionBlock = nil; - } -} - -#pragma mark - Foreground / Background Notification Listeners - -- (void)onApplicationWillEnterForeground:(NSNotification *)notification { - // Always check for "do not track" changes and synchronize with the server - // whenever possible. - [self checkForDoNotTrackAndTransition]; - // If IDFA changed, status will be set to MPConsentStatusUnknown. - [self checkForIfaChange]; - - /* - ADF-4318: This early return is to avoid a `NSAssert` crash in iPadOS 13+ debug build. - - `ApplicationWillEnterForegroundNotification` is posted right after the first fresh - install app launch for iPadOS 13 multi-scene, while it's not posted after the first fresh - install app launch for the single-scene case (pre iOS 13). - - The consent manager shared instance is called during `applicationDidFinishLaunching` and thus - starts observing `ApplicationWillEnterForegroundNotification` before MoPub SDK and this consent - manager is initialized with an ad unit ID. Consequently, the `NSAssert` in - `synchronizeConsentWithCompletion` is always triggered and crash debug build of this app. So, - to avoid such crash in debug build, we should avoid `synchronizeConsentWithCompletion` before - `adUnitIdUsedForConsent` is assigned. - */ - if (self.adUnitIdUsedForConsent.length == 0) { - return; - } - - MPLogDebug(@"Consent synchronization triggered by application foreground."); - [self synchronizeConsentWithCompletion:^(NSError * _Nullable error) { - // Consent synchronization success/fail logging is already handled - // by `synchronizeConsentWithCompletion:`. - }]; -} - -#pragma mark - Broadcasted Notifications - -/** - Broadcasts a @c NSNotification that the consent status has changed. - @param newStatus The new consent state. - @param oldStatus The previous consent state. - @param reasonForChange Optional reason for consent state change. - @param canCollectPii Flag indicating that collection of PII is allowed. - */ -- (void)notifyConsentChangedTo:(MPConsentStatus)newStatus - fromOldStatus:(MPConsentStatus)oldStatus - reason:(NSString * _Nullable)reasonForChange - canCollectPii:(BOOL)canCollectPii { - MPLogEvent([MPLogEvent consentUpdatedTo:newStatus from:oldStatus reason:reasonForChange canCollectPersonalInfo:canCollectPii]); - - // Build the NSNotification userInfo dictionary. - NSDictionary * userInfo = @{ kMPConsentChangedInfoNewConsentStatusKey: @(newStatus), - kMPConsentChangedInfoPreviousConsentStatusKey: @(oldStatus), - kMPConsentChangedInfoCanCollectPersonalInfoKey: @(canCollectPii) - }; - - // Broadcast the consent changed notification on the main thread - // because there may be a listener that is dealing with UI. - dispatch_async(dispatch_get_main_queue(), ^{ - [NSNotificationCenter.defaultCenter postNotificationName:kMPConsentChangedNotification object:self userInfo:userInfo]; - }); - - [self handlePersonalDataOnStateChangeTo:newStatus fromOldStatus:oldStatus]; -} - -/** - Logs that consent needs to be acquired/reacquired. - This should only be fired when @c isConsentNeeded changes from @c NO to @c YES. - */ -- (void)notifyConsentNeeded { - MPLogEvent(MPLogEvent.consentShouldShowDialog); -} - -#pragma mark - Ad Server Communication - -/** - Synchronizes the current consent state with the server. The local consent state - may change depending upon the response from the server. - @remark Calling this method will reset the current periodic timer update again after @c self.syncFrequency seconds. - @param completion Required completion block to listen for the result of the synchronization. - */ -- (void)synchronizeConsentWithCompletion:(void (^ _Nonnull)(NSError * error))completion { - MPLogEvent(MPLogEvent.consentSyncAttempted); - - // Invalidate the next update timer since we are synchronizing right now. - [self.nextUpdateTimer invalidate]; - self.nextUpdateTimer = nil; - - // If GDPR does not apply to the user, synchronizing with the ad server - // is no longer required. This call will complete without error and no - // next update timer will be created. - if (self.isGDPRApplicable == MPBoolNo) { - MPLogEvent([MPLogEvent consentSyncCompletedWithMessage:@"GDPR not applicable, consent synchronization will complete immediately"]); - completion(nil); - return; - } - - // In the event that the device is in a "do not track" state and there is - // no IFA to send one last time for the server to revoke consent, further - // server synchronization is not necessary until the device transitions - // out of the "do not track" state. - // In the case that raw (MoPub) GDPR applicability is unknown, we should perform a sync - // to determine the final state. - if (!MPIdentityProvider.advertisingTrackingEnabled && self.ifaForConsent == nil && self.rawIsGDPRApplicable != MPBoolUnknown) { - MPLogEvent([MPLogEvent consentSyncCompletedWithMessage:@"Currently in a do not track state, consent synchronization will complete immediately"]); - completion(nil); - return; - } - - // Before beginning the sync, check for a nil or empty ad unit ID, and output to the log if there's an issue. - // Otherwise, output the ad unit ID to the log. - if (self.adUnitIdUsedForConsent.length == 0) { - NSString * description = @"Warning: no ad unit available for GDPR sync. Please make sure that the SDK is initialized correctly via `initializeSdkWithConfiguration:completion:` as soon as possible after app startup."; - MPLogInfo(@"%@", description); - NSAssert(NO, description); // Crash the app if this is set up incorrectly - } else { - MPLogDebug(@"Ad unit used for GDPR sync: %@", self.adUnitIdUsedForConsent); - } - - // Capture the current status being synchronized with the server - NSString * synchronizedStatus = [NSString stringFromConsentStatus:self.currentStatus]; - - // Generate the request. - NSURL * syncUrl = [MPAdServerURLBuilder consentSynchronizationUrl]; - MPURLRequest * syncRequest = [MPURLRequest requestWithURL:syncUrl]; - - // Send the synchronization request out. - __weak __typeof__(self) weakSelf = self; - [MPHTTPNetworkSession startTaskWithHttpRequest:syncRequest responseHandler:^(NSData * _Nonnull data, NSHTTPURLResponse * _Nonnull response) { - __typeof__(self) strongSelf = weakSelf; - - [strongSelf didFinishSynchronizationWithData:data - synchronizedStatus:synchronizedStatus - completion:completion]; - } errorHandler:^(NSError * _Nonnull error) { - __typeof__(self) strongSelf = weakSelf; - - [strongSelf didFailSynchronizationWithError:error completion:completion]; - }]; -} - -- (void)didFinishSynchronizationWithData:(NSData *)data synchronizedStatus:(NSString *)synchronizedStatus completion:(void (^ _Nonnull)(NSError * error))completion { - // Update the last successfully synchronized state. - // We still update this state even if we failed to parse the response - // because this is a reflection of what we last sent to the server. - // If we've made it this far, it means that the `synchronizedStatus` was - // successfully sent to the server. However, it may be the case that the - // server sends us back an invalid response. - [NSUserDefaults.standardUserDefaults setObject:synchronizedStatus forKey:kLastSynchronizedConsentStatusStorageKey]; - - // Cache the working adunit ID - [self cacheAdUnitIdUsedForConsent]; - - // Reset the GDPR applies transition state since it was successfully sent to - // ad server. - self.isForcedGDPRAppliesTransition = NO; - - // Deserialize the JSON response and attempt to parse it - NSError * deserializationError = nil; - NSDictionary * json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&deserializationError]; - if (deserializationError != nil) { - // Complete with error. - MPLogEvent([MPLogEvent consentSyncFailedWithError:deserializationError]); - completion(deserializationError); - } - else if (![self updateConsentStateWithParameters:json]) { - // Attempt to parse and update the consent state - NSError * parseError = [NSError errorWithDomain:kConsentErrorDomain code:MPConsentErrorCodeFailedToParseSynchronizationResponse userInfo:@{ NSLocalizedDescriptionKey: @"Failed to parse consent synchronization response; one or more required fields are missing" }]; - MPLogEvent([MPLogEvent consentSyncFailedWithError:parseError]); - completion(parseError); - } - else { - // Success - MPLogEvent([MPLogEvent consentSyncCompletedWithMessage:nil]); - completion(nil); - } - - // `updateConsentStateWithParameters` might update `syncFrequency`, which is referenced in - // `newNextUpdateTimer`, so, call `updateConsentStateWithParameters` before `newNextUpdateTimer` - self.nextUpdateTimer = [self newNextUpdateTimer]; -} - -- (void)didFailSynchronizationWithError:(NSError *)error completion:(void (^ _Nonnull)(NSError * error))completion { - // Schedule the next timer and complete with error. - self.nextUpdateTimer = [self newNextUpdateTimer]; - MPLogEvent([MPLogEvent consentSyncFailedWithError:error]); - completion(error); -} - -#pragma mark - Next Update Timer - -/** - Creates a new next update timer instance and starts the timer immediately. This timer - will repeat. - @return A new timer instance. - */ -- (MPTimer * _Nonnull)newNextUpdateTimer { - MPTimer * timer = [MPTimer timerWithTimeInterval:self.syncFrequency target:self selector:@selector(onNextUpdateFiredWithTimer) repeats:YES]; - [timer scheduleNow]; - return timer; -} - -- (void)onNextUpdateFiredWithTimer { - // Synchronize with the server because it's time. - MPLogDebug(@"Scheduled consent synchronization timer fired."); - [self synchronizeConsentWithCompletion:^(NSError * _Nullable error) { - // Consent synchronization success/fail logging is already handled - // by `synchronizeConsentWithCompletion:`. - }]; -} - -#pragma mark - Internal State Synchronization - -/** - Checks if there is a transition from a do not track state to a tracking state, or a tracking - state to a do not track state. If detected, the appropriate consent status state change will - occur locally and trigger the @c kMPConsentChangedNotification. - @remark This is a local update only and will require a seperate Ad Server synchronization. - @return @c YES if a transition occurred; @c NO otherwise. - */ -- (BOOL)checkForDoNotTrackAndTransition { - BOOL didTransition = NO; - - // Transitioned from an "allowed to track" to "do not track" state. - BOOL trackingAllowed = ASIdentifierManager.sharedManager.advertisingTrackingEnabled; - MPConsentStatus status = self.currentStatus; - if (status != MPConsentStatusDoNotTrack && !trackingAllowed) { - didTransition = [self setCurrentStatus:MPConsentStatusDoNotTrack reason:kConsentedChangedReasonDoNotTrackEnabled statusWasReacquired:NO shouldBroadcast:YES]; - } - // Transitioned from a "do not track" state to an "allowed to track" state. - // If the previously cached state was "deny consent" - else if (status == MPConsentStatusDoNotTrack && trackingAllowed) { - MPConsentStatus transitionToState = (self.rawConsentStatus == MPConsentStatusDenied ? MPConsentStatusDenied : MPConsentStatusUnknown); - NSString * transitionReason = (transitionToState == MPConsentStatusDenied ? kConsentedChangedReasonDoNotTrackDisabled : kConsentedChangedReasonDoNotTrackDisabledNeedConsent); - didTransition = [self setCurrentStatus:transitionToState reason:transitionReason statusWasReacquired:NO shouldBroadcast:YES]; - } - - return didTransition; -} - -/** - Checks if there is a transition from a "potential whitelist" state to an "allowed" - state. If detected, the appropriate consent status state change will occur locally. - @remark This check should only be performed after the current versions and current - consent status have been updated, but before broadcasting any consent state change - notification. - @return @c YES if a transition occurred; @c NO otherwise. - */ -- (BOOL)checkForWhitelistAllowedAndTransition { - // Logic only applicable if in the potential whitelist state. - if (self.currentStatus != MPConsentStatusPotentialWhitelist) { - return NO; - } - - BOOL didTransition = NO; - if (self.isWhitelisted) { - didTransition = [self setCurrentStatus:MPConsentStatusConsented reason:kConsentedChangedReasonWhitelistGranted statusWasReacquired:NO shouldBroadcast:NO]; - } - - return didTransition; -} - -/** - Updates the local consent status. - @param currentStatus The updated status. - @param reasonForChange Reason for the change in status. This should map to an entry in @c MPConsentChangedReason.h - @param statusWasReacquired Was the status forcibly reacquired due to the @c reacquire_consent flag sent by the Ad Server - @param shouldBroadcast Flag indicating if the change in status broadcasted. - @return @c YES if the consent status was successfully changed; @c NO otherwise. - */ -- (BOOL)setCurrentStatus:(MPConsentStatus)currentStatus - reason:(NSString * _Nonnull)reasonForChange - statusWasReacquired:(BOOL)statusWasReacquired - shouldBroadcast:(BOOL)shouldBroadcast { - // Compare the current consent status with the proposed status. - // Nothing needs to be done if we're not changing state and the current - // status was not forcibly reacquired. Forced reacquisition of status, - // even if it results in the same status, is a cause for an update. - MPConsentStatus oldStatus = self.currentStatus; - if (oldStatus == currentStatus && !statusWasReacquired) { - MPLogInfo(@"Attempted to set consent status to same value"); - return NO; - } - - // Capture old `isConsentNeeded` value - BOOL oldIsConsentNeeded = self.isConsentNeeded; - - // Clear the `shouldReacquireConsent` latch when transitioning to DNT or Unknown - // since it no longer makes sense to force a reacquisition. - // This state must be set after capturing `oldIsConsentNeeded` since this - // will affect `self.isConsentNeeded`. - if (currentStatus == MPConsentStatusDoNotTrack || currentStatus == MPConsentStatusUnknown) { - self.shouldReacquireConsent = NO; - } - - // Disallow setting consent status if we are currently in a "do not track" state - // and will not transition out of it. - BOOL trackingEnabledOnDevice = MPIdentityProvider.advertisingTrackingEnabled; - if (oldStatus == MPConsentStatusDoNotTrack && !trackingEnabledOnDevice) { - MPLogInfo(@"Attempted to set consent status while in a do not track state"); - return NO; - } - - // Save IFA for this particular case so it can be used to remove personal data later. - if (oldStatus != MPConsentStatusConsented && currentStatus == MPConsentStatusConsented) { - [self storeIfa]; - } - - // Set the time stamp for this consent status update. - NSUserDefaults * defaults = NSUserDefaults.standardUserDefaults; - NSTimeInterval timestampInMilliseconds = [NSDate date].timeIntervalSince1970 * 1000.0; - [defaults setDouble:timestampInMilliseconds forKey:kLastChangedMsStorageKey]; - - // Explicitly disallow the setting of `MPConsentStatusDoNotTrack` since we - // need to preserve the previously cached status in the event that - // advertiser tracking is allowed. - if (currentStatus != MPConsentStatusDoNotTrack) { - [defaults setObject:reasonForChange forKey:kLastChangedReasonStorageKey]; - [defaults setInteger:currentStatus forKey:kConsentStatusStorageKey]; - } - - // "do not track" state is maintained by a seperate storage field. - [defaults setBool:(currentStatus == MPConsentStatusDoNotTrack) forKey:kIsDoNotTrackStorageKey]; - - // Copy the current privacy policy version, vendor list version, and IAB vendor list - // to the equivalent consented fields under the following conditions: - // 1. Consent has been updated to "potential whitelist", or - // 2. Consent has been updated to "consented" from a previously not "potential whitelist" state, or - // 3. Consent has been updated to "denied" - if (currentStatus == MPConsentStatusPotentialWhitelist || - (currentStatus == MPConsentStatusConsented && oldStatus != MPConsentStatusPotentialWhitelist) || - currentStatus == MPConsentStatusDenied) { - [defaults setObject:self.iabVendorList forKey:kConsentedIabVendorListStorageKey]; - [defaults setObject:self.privacyPolicyVersion forKey:kConsentedPrivacyPolicyVersionStorageKey]; - [defaults setObject:self.vendorListVersion forKey:kConsentedVendorListVersionStorageKey]; - } - // The state has transitioned out of a state where "consented" versions no longer apply. - else if (currentStatus == MPConsentStatusUnknown || - currentStatus == MPConsentStatusDoNotTrack) { - [defaults setObject:nil forKey:kConsentedIabVendorListStorageKey]; - [defaults setObject:nil forKey:kConsentedPrivacyPolicyVersionStorageKey]; - [defaults setObject:nil forKey:kConsentedVendorListVersionStorageKey]; - } - - if (shouldBroadcast) { - [self notifyConsentChangedTo:self.currentStatus fromOldStatus:oldStatus reason:reasonForChange canCollectPii:self.canCollectPersonalInfo]; - - // Broadcast the `kMPConsentNeededNotification` if the `isConsentNeeded` computed property - // transitions from `NO` to `YES`. - if (!oldIsConsentNeeded && self.isConsentNeeded) { - [self notifyConsentNeeded]; - } - } - - MPLogDebug(@"Consent state changed to %@: %@", [NSString stringFromConsentStatus:currentStatus], reasonForChange); - - return YES; -} - -/** - Updates the local consent state atomically. - @param newState Parameters are stored as @c NSString key-value pairs. - @return @c YES if the parameters were successfully parsed; @c NO otherwise. - */ -- (BOOL)updateConsentStateWithParameters:(NSDictionary * _Nonnull)newState { - MPLogDebug(@"Attempting to update consent with new state:\n%@", newState); - - // Validate required parameters - NSString * isWhitelistedValue = newState[kIsWhitelistedKey]; - NSString * isGDPRRegionValue = newState[kIsGDPRRegionKey]; - NSString * currentIabVendorListHash = newState[kIabVendorListHashKey]; - NSString * vendorListUrl = newState[kVendorListUrlKey]; - NSString * vendorListVersion = newState[kVendorListVersionKey]; - NSString * privacyPolicyUrl = newState[kPrivacyPolicyUrlKey]; - NSString * privacyPolicyVersion = newState[kPrivacyPolicyVersionKey]; - if (isWhitelistedValue == nil || isGDPRRegionValue == nil || - currentIabVendorListHash == nil || - vendorListUrl == nil || vendorListVersion == nil || - privacyPolicyUrl == nil || privacyPolicyVersion == nil) { - MPLogInfo(@"Failed to parse new state. Missing required fields."); - return NO; - } - - // Extract the old field values for comparison. - MPConsentStatus oldStatus = self.currentStatus; - MPBool oldGDPRApplicableStatus = self.isGDPRApplicable; - BOOL oldIsConsentNeeded = self.isConsentNeeded; - - // Update the required fields. - NSUserDefaults * defaults = NSUserDefaults.standardUserDefaults; - [defaults setBool:[isWhitelistedValue boolValue] forKey:kIsWhitelistedStorageKey]; - - [defaults setObject:currentIabVendorListHash forKey:kIabVendorListHashStorageKey]; - [defaults setObject:vendorListUrl forKey:kVendorListUrlStorageKey]; - [defaults setObject:vendorListVersion forKey:kVendorListVersionStorageKey]; - [defaults setObject:privacyPolicyUrl forKey:kPrivacyPolicyUrlStorageKey]; - [defaults setObject:privacyPolicyVersion forKey:kPrivacyPolicyVersionStorageKey]; - - // A user is considered GDPR applicable if they first launched the app - // within a GDPR region. Check the @c rawIsGDPRApplicable property because - // a publisher may have already set @c forceIsGDPRApplicable before this point, - // and we still want our own definition of applicability to apply in the case that - // a pub stops forcing. - if (self.rawIsGDPRApplicable == MPBoolUnknown) { - MPBool gdprApplies = [isGDPRRegionValue boolValue] ? MPBoolYes : MPBoolNo; - [defaults setInteger:gdprApplies forKey:kGDPRAppliesStorageKey]; - } - - // Optionally force state to explicit no or unknown. - BOOL shouldForceExplicitNo = [newState[kForceExplicitNoKey] boolValue]; - BOOL shouldInvalidateConsent = [newState[kInvalidateConsentKey] boolValue]; - BOOL shouldReacquireConsent = [newState[kReacquireConsentKey] boolValue]; - BOOL shouldForceGDPRApplies = [newState[kForceGDPRAppliesKey] boolValue]; - NSString * consentChangeReason = newState[kConsentChangedReasonKey]; - [self forceStatusShouldForceExplicitNo:shouldForceExplicitNo - shouldInvalidateConsent:shouldInvalidateConsent - shouldReacquireConsent:shouldReacquireConsent - shouldForceGDPRApplicability:shouldForceGDPRApplies - consentChangeReason:consentChangeReason - shouldBroadcast:NO]; - - // Optionally update the current IAB vendor list - NSString * currentIabVendorList = newState[kIabVendorListKey]; - if (currentIabVendorList != nil) { - [defaults setObject:currentIabVendorList forKey:kIabVendorListStorageKey]; - - // In the event that the IAB has changed the structure of the vendor list format, - // but the vendors in the list remain the same, we should update the consented - // IAB vendor list to the current one if the privacy policy version and vendor list - // version match their consented counterparts. - if ([self.consentedPrivacyPolicyVersion isEqualToString:privacyPolicyVersion] && - [self.consentedVendorListVersion isEqualToString:vendorListVersion]) { - [defaults setObject:currentIabVendorList forKey:kConsentedIabVendorListStorageKey]; - } - } - - // Optionally update the synchronization frequency - NSString * syncFrequencyValue = newState[kSyncFrequencyKey]; - if (syncFrequencyValue != nil) { - NSTimeInterval frequency = [syncFrequencyValue doubleValue]; - self.syncFrequency = (frequency > 0 ? frequency : kDefaultRefreshInterval); - } - - // Optionally update the server extras field - NSString * extras = newState[kExtrasKey]; - if (extras != nil) { - [defaults setObject:extras forKey:kExtrasStorageKey]; - } - - // State transition check for server finally whitelisting a publisher. - [self checkForWhitelistAllowedAndTransition]; - - // Broadcast the `kMPConsentChangedNotification` if needed. - if ((oldStatus != self.currentStatus) || (oldGDPRApplicableStatus != self.isGDPRApplicable)) { - [self notifyConsentChangedTo:self.currentStatus fromOldStatus:oldStatus reason:consentChangeReason canCollectPii:self.canCollectPersonalInfo]; - } - - // Broadcast the `kMPConsentNeededNotification` if the `isConsentNeeded` computed property - // transitions from `NO` to `YES`. - if (!oldIsConsentNeeded && self.isConsentNeeded) { - [self notifyConsentNeeded]; - } - - return YES; -} - -- (void)forceStatusShouldForceExplicitNo:(BOOL)shouldForceExplicitNo - shouldInvalidateConsent:(BOOL)shouldInvalidateConsent - shouldReacquireConsent:(BOOL)shouldReacquireConsent - shouldForceGDPRApplicability:(BOOL)shouldForceGDPRApplies - consentChangeReason:(NSString *)consentChangeReason - shouldBroadcast:(BOOL)shouldBroadcast { - if (shouldForceExplicitNo) { - self.shouldReacquireConsent = NO; - [self setCurrentStatus:MPConsentStatusDenied reason:consentChangeReason statusWasReacquired:NO shouldBroadcast:shouldBroadcast]; - } - else if (shouldInvalidateConsent) { - self.shouldReacquireConsent = NO; - [self setCurrentStatus:MPConsentStatusUnknown reason:consentChangeReason statusWasReacquired:NO shouldBroadcast:shouldBroadcast]; - } - else if (shouldReacquireConsent) { - self.shouldReacquireConsent = YES; - } - - // Forcing GDPR applicability is seperate from forcing consent. - if (shouldForceGDPRApplies) { - self.forceIsGDPRApplicable = YES; - } -} - -#pragma mark - Caching Adunit ID - -- (NSString *)adUnitIdUsedForConsent { - // If an adunit ID is cached, use the cached one rather than what's currently stored in the ivar, - // as the cache is known good. - NSString * cachedAdUnitId = [NSUserDefaults.standardUserDefaults stringForKey:kAdUnitIdUsedForConsentStorageKey]; - - if (cachedAdUnitId == nil) { - return _adUnitIdUsedForConsent; - } - - return cachedAdUnitId; -} - -- (void)cacheAdUnitIdUsedForConsent { - // If an adunit ID is already cached, we know it's good, so do not cache a new one. - NSString * cachedAdUnitId = [NSUserDefaults.standardUserDefaults stringForKey:kAdUnitIdUsedForConsentStorageKey]; - if (cachedAdUnitId != nil) { - return; - } - - [NSUserDefaults.standardUserDefaults setObject:self.adUnitIdUsedForConsent forKey:kAdUnitIdUsedForConsentStorageKey]; -} - -- (void)setAdUnitIdUsedForConsent:(NSString *)adUnitIdUsedForConsent isKnownGood:(BOOL)isKnownGood { - self.adUnitIdUsedForConsent = adUnitIdUsedForConsent; - - if (isKnownGood) { - [self cacheAdUnitIdUsedForConsent]; - } -} - -- (void)clearAdUnitIdUsedForConsent { - [NSUserDefaults.standardUserDefaults setObject:nil forKey:kAdUnitIdUsedForConsentStorageKey]; - // Using ivar here to get around warning about nullability - _adUnitIdUsedForConsent = nil; -} - -@end - -@implementation MPConsentManager (State) - -#pragma mark - Read/Write Properties - -- (void)setForceIsGDPRApplicable:(BOOL)forceIsGDPRApplicable { - NSUserDefaults * defaults = NSUserDefaults.standardUserDefaults; - BOOL valueExists = [defaults objectForKey:kForceGDPRAppliesStorageKey] != nil; - - // This can only be set once for the lifetime of the app. - // In the event that a set `NO` value is attempted or if there already - // is a set value, nothing will happen. - if (!forceIsGDPRApplicable || valueExists) { - return; - } - - // Capture old `isConsentNeeded` value - BOOL oldIsConsentNeeded = self.isConsentNeeded; - - // Capture old can collect PII value - BOOL oldCanCollectPII = self.canCollectPersonalInfo; - - // Set new value and mark the transition - [defaults setBool:forceIsGDPRApplicable forKey:kForceGDPRAppliesStorageKey]; - self.isForcedGDPRAppliesTransition = YES; - - // Broadcast the `kMPConsentChangedNotification` if needed. - if (oldCanCollectPII != self.canCollectPersonalInfo) { - [self notifyConsentChangedTo:self.currentStatus fromOldStatus:self.currentStatus reason:nil canCollectPii:self.canCollectPersonalInfo]; - } - - // Broadcast the `kMPConsentNeededNotification` if the `isConsentNeeded` computed property - // transitions from `NO` to `YES`. - if (!oldIsConsentNeeded && self.isConsentNeeded) { - [self notifyConsentNeeded]; - } - - // Start sync cycle if needed - if (self.adUnitIdUsedForConsent != nil && // If @c adUnitIdUsedForConsent is non-nil (i.e., if SDK init has been called; otherwise the sync will happen as part of init) AND - (forceIsGDPRApplicable && self.rawIsGDPRApplicable == MPBoolNo)) { // If GDPR was not already applicable and it has become so (otherwise there's already an active sync cycle and the effective @c isGDPRApplilcableValue didn't actually change) - MPLogDebug(@"Consent synchronization triggered by forcing GDPR applicable"); - [self synchronizeConsentWithCompletion:^(NSError *error){ - // Consent synchronization success/fail logging is already handled - // by `synchronizeConsentWithCompletion:`. - }]; - } -} - -- (BOOL)forceIsGDPRApplicable { - return [NSUserDefaults.standardUserDefaults boolForKey:kForceGDPRAppliesStorageKey]; -} - -#pragma mark - Read Only Properties - -/** - Replace all the macros in the URL format. - @param urlFormat URL format string from ad server - @param isoLanguageCode ISO language code used for macro replacement - @return A valid URL if successful; @c nil otherwise - */ -- (NSURL * _Nullable)urlWithFormat:(NSString * _Nullable)urlFormat isoLanguageCode:(NSString * _Nullable)isoLanguageCode { - NSString * regionFreeLangaugeCode = [self removeRegionFromLanguageCode:isoLanguageCode]; - if (regionFreeLangaugeCode == nil) { - return nil; - } - - if (![NSLocale.ISOLanguageCodes containsObject:regionFreeLangaugeCode]) { - MPLogInfo(@"%@ is not a valid ISO 639-1 language code", regionFreeLangaugeCode); - return nil; - } - - // Replace the %%LANGUAGE%% macro in the url. - NSString * url = [urlFormat stringByReplacingOccurrencesOfString:kMacroReplaceLanguageCode withString:regionFreeLangaugeCode]; - return (url != nil ? [NSURL URLWithString:url] : nil); -} - -- (NSString * _Nullable)consentedIabVendorList { - return [NSUserDefaults.standardUserDefaults stringForKey:kConsentedIabVendorListStorageKey]; -} - -- (NSString * _Nullable)consentedPrivacyPolicyVersion { - return [NSUserDefaults.standardUserDefaults stringForKey:kConsentedPrivacyPolicyVersionStorageKey]; -} - -- (NSString * _Nullable)consentedVendorListVersion { - return [NSUserDefaults.standardUserDefaults stringForKey:kConsentedVendorListVersionStorageKey]; -} - -- (MPConsentStatus)currentStatus { - // Query the "do not track" state first, since "do not track" trumps all other states. - // The cached consent state may be different than "do not track", and is preserved - // to retain the previous consent status in the event that advertiser tracking is re-enabled. - if (self.isDoNotTrack) { - return MPConsentStatusDoNotTrack; - } - - // Read the cached consent status. In the event that the key kConsentStatusKey - // doesn't exist, integerForKey: will return a 0, which will translate into - // MPConsentStatusUnknown. - return (MPConsentStatus)[NSUserDefaults.standardUserDefaults integerForKey:kConsentStatusStorageKey]; -} - -- (NSString * _Nullable)extras { - return [NSUserDefaults.standardUserDefaults stringForKey:kExtrasStorageKey]; -} - -- (NSString * _Nullable)iabVendorList { - return [NSUserDefaults.standardUserDefaults stringForKey:kIabVendorListStorageKey]; -} - -- (NSString * _Nullable)iabVendorListHash { - return [NSUserDefaults.standardUserDefaults stringForKey:kIabVendorListHashStorageKey]; -} - -- (NSString * _Nullable)ifaForConsent { - return [NSUserDefaults.standardUserDefaults stringForKey:kIfaForConsentStorageKey]; -} - -- (MPBool)isGDPRApplicable { - // Always return @c MPBoolYes if @c forceIsGDPRApplicable has been set to @c YES - return self.forceIsGDPRApplicable ? MPBoolYes : (MPBool)[NSUserDefaults.standardUserDefaults integerForKey:kGDPRAppliesStorageKey]; -} - -- (BOOL)isWhitelisted { - return [NSUserDefaults.standardUserDefaults boolForKey:kIsWhitelistedStorageKey]; -} - -- (NSString * _Nullable)lastChangedReason { - // Query the "do not track" state first, since "do not track" trumps all other states. - // The cached consent state may be different than "do not track", and is preserved - // to retain the previous consent status in the event that advertiser tracking is re-enabled. - // In this case, the last changed reason in a "do not track" state will always be - // kConsentedChangedReasonDoNotTrackEnabled - if (self.isDoNotTrack) { - return kConsentedChangedReasonDoNotTrackEnabled; - } - - return [NSUserDefaults.standardUserDefaults stringForKey:kLastChangedReasonStorageKey]; -} - -- (NSTimeInterval)lastChangedTimestampInMilliseconds { - return (NSTimeInterval)[NSUserDefaults.standardUserDefaults doubleForKey:kLastChangedMsStorageKey]; -} - -- (NSString * _Nullable)lastSynchronizedStatus { - return [NSUserDefaults.standardUserDefaults stringForKey:kLastSynchronizedConsentStatusStorageKey]; -} - -- (NSURL * _Nullable)privacyPolicyUrl { - return [self privacyPolicyUrlWithISOLanguageCode:self.currentLanguageCode]; -} - -- (NSURL * _Nullable)privacyPolicyUrlWithISOLanguageCode:(NSString * _Nonnull)isoLanguageCode { - NSString * urlFormat = [NSUserDefaults.standardUserDefaults stringForKey:kPrivacyPolicyUrlStorageKey]; - return [self urlWithFormat:urlFormat isoLanguageCode:isoLanguageCode]; -} - -- (NSString * _Nullable)privacyPolicyVersion { - return [NSUserDefaults.standardUserDefaults stringForKey:kPrivacyPolicyVersionStorageKey]; -} - -- (NSURL *)vendorListUrl { - return [self vendorListUrlWithISOLanguageCode:self.currentLanguageCode]; -} - -- (NSURL *)vendorListUrlWithISOLanguageCode:(NSString *)isoLanguageCode { - NSString * urlFormat = [NSUserDefaults.standardUserDefaults stringForKey:kVendorListUrlStorageKey]; - return [self urlWithFormat:urlFormat isoLanguageCode:isoLanguageCode]; -} - -- (NSString * _Nullable)vendorListVersion { - return [NSUserDefaults.standardUserDefaults stringForKey:kVendorListVersionStorageKey]; -} - -@end - -@implementation MPConsentManager (PersonalDataHandler) - -- (void)handlePersonalDataOnStateChangeTo:(MPConsentStatus)newStatus fromOldStatus:(MPConsentStatus)oldStatus { - [self updateAppConversionTracking]; - - if (oldStatus == MPConsentStatusConsented && newStatus != MPConsentStatusConsented) { - MPLogDebug(@"Consent synchronization triggered by one last time"); - [self synchronizeConsentWithCompletion:^(NSError * _Nullable error) { - // Consent synchronization success/fail logging is already handled - // by `synchronizeConsentWithCompletion:`. - - if (!error) { - [self removeIfa]; - } - }]; - } -} - -- (void)storeIfa { - NSString *identifier = [MPIdentityProvider identifierFromASIdentifierManager:NO]; - if (!identifier) { - return; - } - NSString *storedIFA = [NSUserDefaults.standardUserDefaults stringForKey:kIfaForConsentStorageKey]; - if (![identifier isEqualToString:storedIFA]) { - [NSUserDefaults.standardUserDefaults setObject:identifier forKey:kIfaForConsentStorageKey]; - } -} - -/** - * If IFA is changed and the status is transitioning from MPConsentStatusConsented, remove old IFA from NSUserDefault and change status to unknown. - */ -- (void)checkForIfaChange -{ - NSString *oldIfa = [NSUserDefaults.standardUserDefaults stringForKey:kIfaForConsentStorageKey]; - NSString *newIfa = [MPIdentityProvider identifierFromASIdentifierManager:NO]; - // IFA reset - if (self.currentStatus == MPConsentStatusConsented && ![oldIfa isEqualToString:newIfa] && newIfa != nil) { - [NSUserDefaults.standardUserDefaults removeObjectForKey:kLastSynchronizedConsentStatusStorageKey]; - [NSUserDefaults.standardUserDefaults removeObjectForKey:kIfaForConsentStorageKey]; - [self setCurrentStatus:MPConsentStatusUnknown reason:kConsentedChangedReasonIfaChanged statusWasReacquired:NO shouldBroadcast:YES]; - } -} - -- (void)removeIfa { - [NSUserDefaults.standardUserDefaults removeObjectForKey:kIfaForConsentStorageKey]; -} - -/** - * App conversion request will only be fired when MoPub obtains consent. - */ -- (void)updateAppConversionTracking { - if ([MPConsentManager sharedManager].canCollectPersonalInfo) { - NSString *appId = [NSUserDefaults.standardUserDefaults stringForKey:MOPUB_CONVERSION_APP_ID_KEY]; - BOOL hasAlreadyCheckedAppConversion = [NSUserDefaults.standardUserDefaults boolForKey:MOPUB_CONVERSION_DEFAULTS_KEY]; - if (!hasAlreadyCheckedAppConversion && appId.length > 0) { - [[MPAdConversionTracker sharedConversionTracker] reportApplicationOpenForApplicationID:appId]; - } - } -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPCoreInstanceProvider+MRAID.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPCoreInstanceProvider+MRAID.h deleted file mode 100644 index ec5913ea02..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPCoreInstanceProvider+MRAID.h +++ /dev/null @@ -1,24 +0,0 @@ -// -// MPCoreInstanceProvider+MRAID.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPCoreInstanceProvider.h" - -@interface MPCoreInstanceProvider (MRAID) - -/** - Returns @c YES if MRAID.js loaded correctly, @c NO otherwise. - */ -@property (nonatomic, readonly) BOOL isMraidJavascriptAvailable; - -/** - Returns an @c NSString containing the MRAID.js javascript to be loaded into webviews created for MRAID ads. If MRAID.js - is missing, this property returns @c nil instead. - */ -@property (nonatomic, readonly, copy) NSString * mraidJavascript; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPCoreInstanceProvider+MRAID.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPCoreInstanceProvider+MRAID.m deleted file mode 100644 index 9d88069a3b..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPCoreInstanceProvider+MRAID.m +++ /dev/null @@ -1,31 +0,0 @@ -// -// MPCoreInstanceProvider+MRAID.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPCoreInstanceProvider+MRAID.h" -#import "MRBundleManager.h" - -@implementation MPCoreInstanceProvider (MRAID) - -- (NSString *)mraidJavascript { - static NSString * mraidJavascript = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - NSString * mraidJavascriptFilePath = [[MRBundleManager sharedManager] mraidPath]; - mraidJavascript = [NSString stringWithContentsOfFile:mraidJavascriptFilePath encoding:NSUTF8StringEncoding error:nil]; - }); - - // @c stringWithContentsOfFile will return @c nil when the file cannot be opened or parsed. Therefore, if - // mraid.js is missing, this method will return @c nil. - return mraidJavascript; -} - -- (BOOL)isMraidJavascriptAvailable { - return [self mraidJavascript] != nil; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPCoreInstanceProvider.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPCoreInstanceProvider.h deleted file mode 100644 index 59b58a6575..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPCoreInstanceProvider.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// MPCoreInstanceProvider.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@interface MPCoreInstanceProvider : NSObject - -+ (instancetype)sharedProvider; - -- (void)keepObjectAliveForCurrentRunLoopIteration:(id)anObject; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPCoreInstanceProvider.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPCoreInstanceProvider.m deleted file mode 100644 index 106d3aa985..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPCoreInstanceProvider.m +++ /dev/null @@ -1,49 +0,0 @@ -// -// MPCoreInstanceProvider.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPCoreInstanceProvider.h" - -@implementation MPCoreInstanceProvider - -static MPCoreInstanceProvider *sharedProvider = nil; - -+ (instancetype)sharedProvider -{ - static dispatch_once_t once; - dispatch_once(&once, ^{ - sharedProvider = [[self alloc] init]; - }); - - return sharedProvider; -} - -- (id)init -{ - self = [super init]; - if (self) { - } - return self; -} - -// This method ensures that "anObject" is retained until the next runloop iteration when -// performNoOp: is executed. -// -// This is useful in situations where, potentially due to a callback chain reaction, an object -// is synchronously deallocated as it's trying to do more work, especially invoking self, after -// the callback. -- (void)keepObjectAliveForCurrentRunLoopIteration:(id)anObject -{ - [self performSelector:@selector(performNoOp:) withObject:anObject afterDelay:0]; -} - -- (void)performNoOp:(id)anObject -{ - ; // noop -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPDeviceInformation.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPDeviceInformation.h deleted file mode 100644 index e3cdac92f5..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPDeviceInformation.h +++ /dev/null @@ -1,52 +0,0 @@ -// -// MPDeviceInformation.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPATSSetting.h" -#import "MPNetworkStatus.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - Read-only information pertaining to the current state of the device. - */ -@interface MPDeviceInformation : NSObject - -/** - The current App Transport Security settings of the device. - */ -@property (class, nonatomic, readonly) MPATSSetting appTransportSecuritySettings; - -/** - The current radio technology used by the device to connect to the internet. - */ -@property (class, nonatomic, readonly) MPNetworkStatus currentRadioAccessTechnology; - -/** - The currently cached carrier name. - */ -@property (class, nullable, nonatomic, copy, readonly) NSString * carrierName; - -/** - The currently cached carrier ISO country code. - */ -@property (class, nullable, nonatomic, copy, readonly) NSString * isoCountryCode; - -/** - The currently cached carrier mobile country code. - */ -@property (class, nullable, nonatomic, copy, readonly) NSString * mobileCountryCode; - -/** - The currently cached carrier mobile network code. - */ -@property (class, nullable, nonatomic, copy, readonly) NSString * mobileNetworkCode; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPDeviceInformation.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPDeviceInformation.m deleted file mode 100644 index f539d2a9ab..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPDeviceInformation.m +++ /dev/null @@ -1,165 +0,0 @@ -// -// MPDeviceInformation.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import -#import "MPDeviceInformation.h" -#import "NSDictionary+MPAdditions.h" - -// ATS Constants -static NSString *const kMoPubAppTransportSecurityDictionaryKey = @"NSAppTransportSecurity"; -static NSString *const kMoPubAppTransportSecurityAllowsArbitraryLoadsKey = @"NSAllowsArbitraryLoads"; -static NSString *const kMoPubAppTransportSecurityAllowsArbitraryLoadsForMediaKey = @"NSAllowsArbitraryLoadsForMedia"; -static NSString *const kMoPubAppTransportSecurityAllowsArbitraryLoadsInWebContentKey = @"NSAllowsArbitraryLoadsInWebContent"; -static NSString *const kMoPubAppTransportSecurityAllowsLocalNetworkingKey = @"NSAllowsLocalNetworking"; -static NSString *const kMoPubAppTransportSecurityRequiresCertificateTransparencyKey = @"NSRequiresCertificateTransparency"; - -// Carrier Constants -static NSString *const kMoPubCarrierInfoDictionaryKey = @"com.mopub.carrierinfo"; -static NSString *const kMoPubCarrierNameKey = @"carrierName"; -static NSString *const kMoPubCarrierISOCountryCodeKey = @"isoCountryCode"; -static NSString *const kMoPubCarrierMobileCountryCodeKey = @"mobileCountryCode"; -static NSString *const kMoPubCarrierMobileNetworkCodeKey = @"mobileNetworkCode"; - -@implementation MPDeviceInformation - -#pragma mark - Initialization - -+ (void)initialize { - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - // Asynchronously fetch an updated copy of the device's carrier settings - // and cache it. This must be performed on the main thread. - dispatch_async(dispatch_get_main_queue(), ^{ - CTTelephonyNetworkInfo *networkInfo = CTTelephonyNetworkInfo.new; - [MPDeviceInformation updateCarrierInfoCache:networkInfo.subscriberCellularProvider]; - }); - }); -} - -#pragma mark - ATS - -+ (MPATSSetting)appTransportSecuritySettings { - // Keep track of ATS settings statically, as they'll never change in the lifecycle of the application. - // This way, the setting value only gets assembled once. - static BOOL gCheckedAppTransportSettings = NO; - static MPATSSetting gSetting = MPATSSettingEnabled; - - // If we've already checked ATS settings, just use what we have - if (gCheckedAppTransportSettings) { - return gSetting; - } - - // Otherwise, figure out ATS settings - // Start with the assumption that ATS is enabled - gSetting = MPATSSettingEnabled; - - // Grab the ATS dictionary from the Info.plist - NSDictionary *atsSettingsDictionary = [NSBundle mainBundle].infoDictionary[kMoPubAppTransportSecurityDictionaryKey]; - - // Check if ATS is entirely disabled, and if so, add that to the setting value - if ([atsSettingsDictionary[kMoPubAppTransportSecurityAllowsArbitraryLoadsKey] boolValue]) { - gSetting |= MPATSSettingAllowsArbitraryLoads; - } - - // New App Transport Security keys were introduced in iOS 10. Only send settings for these keys if we're running iOS 10 or greater. - // They may exist in the dictionary if we're running iOS 9, but they won't do anything, so the server shouldn't know about them. - if (@available(iOS 10, *)) { - // In iOS 10, NSAllowsArbitraryLoads gets ignored if ANY keys of NSAllowsArbitraryLoadsForMedia, - // NSAllowsArbitraryLoadsInWebContent, or NSAllowsLocalNetworking are PRESENT (i.e., they can be set to `false`) - // See: https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW34 - // If needed, flip NSAllowsArbitraryLoads back to 0 if any of these keys are present. - if (atsSettingsDictionary[kMoPubAppTransportSecurityAllowsArbitraryLoadsForMediaKey] != nil - || atsSettingsDictionary[kMoPubAppTransportSecurityAllowsArbitraryLoadsInWebContentKey] != nil - || atsSettingsDictionary[kMoPubAppTransportSecurityAllowsLocalNetworkingKey] != nil) { - gSetting &= (~MPATSSettingAllowsArbitraryLoads); - } - - if ([atsSettingsDictionary[kMoPubAppTransportSecurityAllowsArbitraryLoadsForMediaKey] boolValue]) { - gSetting |= MPATSSettingAllowsArbitraryLoadsForMedia; - } - if ([atsSettingsDictionary[kMoPubAppTransportSecurityAllowsArbitraryLoadsInWebContentKey] boolValue]) { - gSetting |= MPATSSettingAllowsArbitraryLoadsInWebContent; - } - if ([atsSettingsDictionary[kMoPubAppTransportSecurityRequiresCertificateTransparencyKey] boolValue]) { - gSetting |= MPATSSettingRequiresCertificateTransparency; - } - if ([atsSettingsDictionary[kMoPubAppTransportSecurityAllowsLocalNetworkingKey] boolValue]) { - gSetting |= MPATSSettingAllowsLocalNetworking; - } - } - - gCheckedAppTransportSettings = YES; - return gSetting; -} - -#pragma mark - Connectivity - -+ (MPNetworkStatus)currentRadioAccessTechnology { - static CTTelephonyNetworkInfo *gTelephonyNetworkInfo = nil; - - if (gTelephonyNetworkInfo == nil) { - gTelephonyNetworkInfo = [[CTTelephonyNetworkInfo alloc] init]; - } - NSString *accessTechnology = gTelephonyNetworkInfo.currentRadioAccessTechnology; - - // The determination of 2G/3G/4G technology is a best-effort. - if ([accessTechnology isEqualToString:CTRadioAccessTechnologyLTE]) { // Source: https://en.wikipedia.org/wiki/LTE_(telecommunication) - return MPReachableViaCellularNetwork4G; - } - else if ([accessTechnology isEqualToString:CTRadioAccessTechnologyCDMAEVDORev0] || // Source: https://www.phonescoop.com/glossary/term.php?gid=151 - [accessTechnology isEqualToString:CTRadioAccessTechnologyCDMAEVDORevA] || // Source: https://www.phonescoop.com/glossary/term.php?gid=151 - [accessTechnology isEqualToString:CTRadioAccessTechnologyCDMAEVDORevB] || // Source: https://www.phonescoop.com/glossary/term.php?gid=151 - [accessTechnology isEqualToString:CTRadioAccessTechnologyWCDMA] || // Source: https://www.techopedia.com/definition/24282/wideband-code-division-multiple-access-wcdma - [accessTechnology isEqualToString:CTRadioAccessTechnologyHSDPA] || // Source: https://en.wikipedia.org/wiki/High_Speed_Packet_Access#High_Speed_Downlink_Packet_Access_(HSDPA) - [accessTechnology isEqualToString:CTRadioAccessTechnologyHSUPA]) { // Source: https://en.wikipedia.org/wiki/High_Speed_Packet_Access#High_Speed_Uplink_Packet_Access_(HSUPA) - return MPReachableViaCellularNetwork3G; - } - else if ([accessTechnology isEqualToString:CTRadioAccessTechnologyCDMA1x] || // Source: In testing, this mode showed up when the phone was in Verizon 1x mode - [accessTechnology isEqualToString:CTRadioAccessTechnologyGPRS] || // Source: https://en.wikipedia.org/wiki/General_Packet_Radio_Service - [accessTechnology isEqualToString:CTRadioAccessTechnologyEdge] || // Source: https://en.wikipedia.org/wiki/2G#2.75G_(EDGE) - [accessTechnology isEqualToString:CTRadioAccessTechnologyeHRPD]) { // Source: https://www.phonescoop.com/glossary/term.php?gid=155 - return MPReachableViaCellularNetwork2G; - } - - return MPReachableViaCellularNetworkUnknownGeneration; -} - -+ (void)updateCarrierInfoCache:(CTCarrier *)carrierInfo { - // Using `setValue` instead of `setObject` here because `carrierInfo` could be `nil`, - // and any of its properties could be `nil`. - NSMutableDictionary *updatedCarrierInfo = [NSMutableDictionary dictionaryWithCapacity:4]; - [updatedCarrierInfo setValue:carrierInfo.carrierName forKey:kMoPubCarrierNameKey]; - [updatedCarrierInfo setValue:carrierInfo.isoCountryCode forKey:kMoPubCarrierISOCountryCodeKey]; - [updatedCarrierInfo setValue:carrierInfo.mobileCountryCode forKey:kMoPubCarrierMobileCountryCodeKey]; - [updatedCarrierInfo setValue:carrierInfo.mobileNetworkCode forKey:kMoPubCarrierMobileNetworkCodeKey]; - - [NSUserDefaults.standardUserDefaults setObject:updatedCarrierInfo forKey:kMoPubCarrierInfoDictionaryKey]; -} - -+ (NSString *)carrierName { - NSDictionary *carrierInfo = [NSUserDefaults.standardUserDefaults objectForKey:kMoPubCarrierInfoDictionaryKey]; - return [carrierInfo mp_stringForKey:kMoPubCarrierNameKey]; -} - -+ (NSString *)isoCountryCode { - NSDictionary *carrierInfo = [NSUserDefaults.standardUserDefaults objectForKey:kMoPubCarrierInfoDictionaryKey]; - return [carrierInfo mp_stringForKey:kMoPubCarrierISOCountryCodeKey]; -} - -+ (NSString *)mobileCountryCode { - NSDictionary *carrierInfo = [NSUserDefaults.standardUserDefaults objectForKey:kMoPubCarrierInfoDictionaryKey]; - return [carrierInfo mp_stringForKey:kMoPubCarrierMobileCountryCodeKey]; -} - -+ (NSString *)mobileNetworkCode { - NSDictionary *carrierInfo = [NSUserDefaults.standardUserDefaults objectForKey:kMoPubCarrierInfoDictionaryKey]; - return [carrierInfo mp_stringForKey:kMoPubCarrierMobileNetworkCodeKey]; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPDiskLRUCache.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPDiskLRUCache.h deleted file mode 100755 index ef87fada60..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPDiskLRUCache.h +++ /dev/null @@ -1,34 +0,0 @@ -// -// MPDiskLRUCache.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPMediaFileCache.h" - -@protocol MPDiskLRUCache - -/* - * Do NOT call any of the following methods on the main thread, potentially lengthy wait for disk IO - */ -- (BOOL)cachedDataExistsForKey:(NSString *)key; -- (NSData *)retrieveDataForKey:(NSString *)key; -- (void)storeData:(NSData *)data forKey:(NSString *)key; -- (void)removeAllCachedFiles; - -@end - -@interface MPDiskLRUCache : NSObject - -+ (MPDiskLRUCache *)sharedDiskCache; - -@end - -@interface MPDiskLRUCache (MPDiskLRUCache) -@end - -@interface MPDiskLRUCache (MPMediaFileCache) -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPDiskLRUCache.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPDiskLRUCache.m deleted file mode 100755 index b1a2462427..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPDiskLRUCache.m +++ /dev/null @@ -1,314 +0,0 @@ -// -// MPDiskLRUCache.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPDiskLRUCache.h" -#import "MPGlobal.h" -#import "MPLogging.h" - -#import - -// cached files that have not been access since kCacheFileMaxAge ago will be evicted -#define kCacheFileMaxAge (7 * 24 * 60 * 60) // 1 week - -// once the cache hits this size AND we've added at least kCacheBytesStoredBeforeSizeCheck bytes, -// cached files will be evicted (LRU) until the total size drops below this limit -#define kCacheSoftMaxSize (100 * 1024 * 1024) // 100 MB - -#define kCacheBytesStoredBeforeSizeCheck (kCacheSoftMaxSize / 10) // 10% of kCacheSoftMaxSize - -@interface MPDiskLRUCacheFile : NSObject - -@property (nonatomic, copy) NSString *filePath; -@property (nonatomic, assign) NSTimeInterval lastModTimestamp; -@property (nonatomic, assign) uint64_t fileSize; - -@end - -@implementation MPDiskLRUCacheFile -@end // this data object should have empty implementation - -@interface MPDiskLRUCache () - -/** - Note: Only use this @c diskIOQueue for direct operations to fileManager, and avoid nested access - to @c diskIOQueue to avoid crash. - */ -@property (nonatomic, strong) dispatch_queue_t diskIOQueue; -@property (nonatomic, strong) NSFileManager *fileManager; -@property (nonatomic, copy) NSString *diskCachePath; -@property (atomic, assign) uint64_t numBytesStoredForSizeCheck; - -@end - -@implementation MPDiskLRUCache - -+ (MPDiskLRUCache *)sharedDiskCache -{ - static dispatch_once_t once; - static MPDiskLRUCache *sharedDiskCache; - dispatch_once(&once, ^{ - sharedDiskCache = [self new]; - }); - return sharedDiskCache; -} - -- (id)init -{ - return [self initWithCachePath:@"com.mopub.diskCache" - fileManager:[NSFileManager defaultManager]]; -} - -#pragma mark Private - -- (id)initWithCachePath:(NSString *)cachePath fileManager:(NSFileManager *)fileManager { - self = [super init]; - if (self != nil) { - _diskIOQueue = dispatch_queue_create("com.mopub.diskCacheIOQueue", DISPATCH_QUEUE_SERIAL); - - NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); - if (paths.count > 0) { - _diskCachePath = [[paths objectAtIndex:0] stringByAppendingPathComponent:cachePath]; - _fileManager = fileManager; - - if (![_fileManager fileExistsAtPath:_diskCachePath]) { - [_fileManager createDirectoryAtPath:_diskCachePath - withIntermediateDirectories:YES - attributes:nil - error:nil]; - } - } - - // check cache size on startup - [self ensureCacheSizeLimit]; - } - - return self; -} - -- (void)ensureCacheSizeLimit -{ - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{ - MPLogDebug(@"Checking cache size..."); - - NSMutableArray *cacheFilesSortedByModDate = [self cacheFilesSortedByModDate]; - - dispatch_async(self.diskIOQueue, ^{ - @autoreleasepool { - // verify age - NSArray *expiredFiles = [self expiredCachedFilesInArray:cacheFilesSortedByModDate]; - for (MPDiskLRUCacheFile *file in expiredFiles) { - MPLogDebug(@"Trying to remove %@ from cache due to expiration", file.filePath); - - [self.fileManager removeItemAtPath:file.filePath error:nil]; - [cacheFilesSortedByModDate removeObject:file]; - } - - // verify size - while ([self sizeOfCacheFilesInArray:cacheFilesSortedByModDate] >= kCacheSoftMaxSize && cacheFilesSortedByModDate.count > 0) { - NSString *oldestFilePath = ((MPDiskLRUCacheFile *)[cacheFilesSortedByModDate objectAtIndex:0]).filePath; - - MPLogDebug(@"Trying to remove %@ from cache due to size", oldestFilePath); - - [self.fileManager removeItemAtPath:oldestFilePath error:nil]; - [cacheFilesSortedByModDate removeObjectAtIndex:0]; - } - } - }); - }); -} - -- (NSArray *)expiredCachedFilesInArray:(NSArray *)cachedFiles -{ - NSMutableArray *result = [NSMutableArray array]; - - NSTimeInterval now = [[NSDate date] timeIntervalSinceReferenceDate]; - - for (MPDiskLRUCacheFile *file in cachedFiles) { - if (now - file.lastModTimestamp >= kCacheFileMaxAge) { - [result addObject:file]; - } - } - - return result; -} - -- (NSMutableArray *)cacheFilesSortedByModDate -{ - NSArray *cachedFiles = [self.fileManager contentsOfDirectoryAtPath:self.diskCachePath error:nil]; - NSArray *sortedFiles = [cachedFiles sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) { - NSString *fileName1 = [self.diskCachePath stringByAppendingPathComponent:(NSString *)obj1]; - NSString *fileName2 = [self.diskCachePath stringByAppendingPathComponent:(NSString *)obj2]; - - NSDictionary *fileAttrs1 = [self.fileManager attributesOfItemAtPath:fileName1 error:nil]; - NSDictionary *fileAttrs2 = [self.fileManager attributesOfItemAtPath:fileName2 error:nil]; - - NSDate *lastModDate1 = [fileAttrs1 fileModificationDate]; - NSDate *lastModDate2 = [fileAttrs2 fileModificationDate]; - - return [lastModDate1 compare:lastModDate2]; - }]; - - NSMutableArray *result = [NSMutableArray array]; - - for (NSString *fileName in sortedFiles) { - if ([fileName hasPrefix:@"."]) { - continue; - } - - MPDiskLRUCacheFile *cacheFile = [[MPDiskLRUCacheFile alloc] init]; - cacheFile.filePath = [self.diskCachePath stringByAppendingPathComponent:fileName]; - - NSDictionary *fileAttrs = [self.fileManager attributesOfItemAtPath:cacheFile.filePath error:nil]; - cacheFile.fileSize = [fileAttrs fileSize]; - cacheFile.lastModTimestamp = [[fileAttrs fileModificationDate] timeIntervalSinceReferenceDate]; - - [result addObject:cacheFile]; - } - - return result; -} - -- (uint64_t)sizeOfCacheFilesInArray:(NSArray *)files -{ - uint64_t currentSize = 0; - - for (MPDiskLRUCacheFile *file in files) { - currentSize += file.fileSize; - } - - MPLogDebug(@"Current cache size %qu bytes", currentSize); - - return currentSize; -} - -- (NSString *)cacheFilePathForKey:(NSString *)key -{ - NSString *hashedKey = MPSHA1Digest(key); - NSString *cachedFilePath = [self.diskCachePath stringByAppendingPathComponent:hashedKey]; - return cachedFilePath; -} - -/** - "touch" @c NSFileModificationDate of the file for LRU tracking. @c NSFileModificationDate is used - because iOS does not provide a "last access date". - */ -- (void)touchCacheFileAtPath:(NSString *)cachedFilePath -{ - dispatch_sync(self.diskIOQueue, ^{ - [self.fileManager setAttributes:@{NSFileModificationDate: [NSDate date]} - ofItemAtPath:cachedFilePath - error:nil]; - }); -} - -@end - -#pragma mark - MPDiskLRUCache - -@implementation MPDiskLRUCache (MPDiskLRUCache) - -- (BOOL)cachedDataExistsForKey:(NSString *)key -{ - __block BOOL result = NO; - - dispatch_sync(self.diskIOQueue, ^{ - result = [self.fileManager fileExistsAtPath:[self cacheFilePathForKey:key]]; - }); - - return result; -} - -- (NSData *)retrieveDataForKey:(NSString *)key -{ - __block NSData *data = nil; - - if ([self cachedDataExistsForKey:key]) { - NSString *cacheFilePath = [self cacheFilePathForKey:key]; - data = [NSData dataWithContentsOfFile:cacheFilePath]; - [self touchCacheFileAtPath:cacheFilePath]; - } - - return data; -} - -- (void)storeData:(NSData *)data forKey:(NSString *)key -{ - NSString *cacheFilePath = [self cacheFilePathForKey:key]; - - dispatch_sync(self.diskIOQueue, ^{ - if (![self.fileManager fileExistsAtPath:cacheFilePath]) { - [self.fileManager createFileAtPath:cacheFilePath contents:data attributes:nil]; - } else { - // overwrite existing file - [data writeToFile:cacheFilePath atomically:YES]; - } - }); - - self.numBytesStoredForSizeCheck += data.length; - - if (self.numBytesStoredForSizeCheck >= kCacheBytesStoredBeforeSizeCheck) { - [self ensureCacheSizeLimit]; - self.numBytesStoredForSizeCheck = 0; - } -} - -- (void)removeAllCachedFiles -{ - dispatch_sync(self.diskIOQueue, ^{ - NSArray *allFiles = [self cacheFilesSortedByModDate]; - for (MPDiskLRUCacheFile *file in allFiles) { - [self.fileManager removeItemAtPath:file.filePath error:nil]; - } - }); -} - -@end - -#pragma mark - MPMediaFileCache - -@implementation MPDiskLRUCache (MPMediaFileCache) - -- (NSString *)cacheKeyForRemoteMediaURL:(NSURL *)remoteFileURL { - return remoteFileURL.absoluteString; -} - -/** - Obtain the expected local cache file URL provided the remote file URL. - Note: The cached file referenced by the returned URL may not exist. After the remote data is - downloaded, use `storeData:forRemoteSourceFileURL:` to store it to the returned cache file URL. - */ -- (NSURL *)cachedFileURLForRemoteFileURL:(NSURL *)remoteFileURL { - NSString *cacheKey = [self cacheKeyForRemoteMediaURL:remoteFileURL]; - NSURL *pathWithoutExtension = [NSURL fileURLWithPath:[self cacheFilePathForKey:cacheKey]]; - return [pathWithoutExtension URLByAppendingPathExtension:remoteFileURL.pathExtension]; -} - -- (BOOL)isRemoteFileCached:(NSURL *)remoteFileURL { - __block BOOL result = NO; - NSURL *localCacheFileURL = [self cachedFileURLForRemoteFileURL:remoteFileURL]; - dispatch_sync(self.diskIOQueue, ^{ - result = [self.fileManager fileExistsAtPath:localCacheFileURL.path]; - }); - return result; -} - -- (void)storeData:(NSData *)data forRemoteSourceFileURL:(NSURL *)remoteFileURL { - dispatch_sync(self.diskIOQueue, ^{ - [data writeToURL:[self cachedFileURLForRemoteFileURL:remoteFileURL] atomically:YES]; - }); -} - -- (void)touchCachedFileForRemoteFile:(NSURL *)remoteFileURL { - NSString *cacheKey = [self cacheKeyForRemoteMediaURL:remoteFileURL]; - NSURL *localCacheFileURL = [self cachedFileURLForRemoteFileURL:remoteFileURL]; - if ([self cachedDataExistsForKey:cacheKey]) { - [self touchCacheFileAtPath:localCacheFileURL.path]; - } -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPExtendedHitBoxButton.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPExtendedHitBoxButton.h deleted file mode 100644 index 4713db38b8..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPExtendedHitBoxButton.h +++ /dev/null @@ -1,24 +0,0 @@ -// -// MPExtendedHitBoxButton.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - Extends the hit box of the @c UIButton by the amount of points specified by @c touchAreaInsets - */ -@interface MPExtendedHitBoxButton : UIButton -/** - The amount of points to extend the hitbox of the button. Positive values indicate that the hitbox is increased beyond - the bounds of the button. - */ -@property (nonatomic, assign) UIEdgeInsets touchAreaInsets; -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPExtendedHitBoxButton.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPExtendedHitBoxButton.m deleted file mode 100644 index 125fb93fc9..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPExtendedHitBoxButton.m +++ /dev/null @@ -1,28 +0,0 @@ -// -// MPExtendedHitBoxButton.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPExtendedHitBoxButton.h" - -@implementation MPExtendedHitBoxButton - -#pragma mark - Overrides - -- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event { - UIEdgeInsets touchAreaInsets = self.touchAreaInsets; - CGRect bounds = self.bounds; - - // Increase the bounding rectangle by the amount of points specified by touchAreaInsets. - // This will have the effect of enlarging the hitbox of the button. - bounds = CGRectMake(bounds.origin.x - touchAreaInsets.left, - bounds.origin.y - touchAreaInsets.top, - bounds.size.width + touchAreaInsets.left + touchAreaInsets.right, - bounds.size.height + touchAreaInsets.top + touchAreaInsets.bottom); - return CGRectContainsPoint(bounds, point); -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPHTTPNetworkSession.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPHTTPNetworkSession.h deleted file mode 100644 index fd81f76075..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPHTTPNetworkSession.h +++ /dev/null @@ -1,62 +0,0 @@ -// -// MPHTTPNetworkSession.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -NS_ASSUME_NONNULL_BEGIN -@interface MPHTTPNetworkSession : NSObject -/** - Singleton instance of @c MPHTTPNetworkSession. - */ -+ (instancetype)sharedInstance; - -/** - Initializes a HTTP network request. - @param request Request to send. - @param responseHandler Optional response handler that will be invoked on the current thread. - @param errorHandler Optional error handler that will be invoked on the current thread. - @param shouldRedirectWithNewRequest Optional logic control block to determine if a redirection should occur. This is invoked on the current thread. - @returns The HTTP networking task. - */ -+ (NSURLSessionTask *)taskWithHttpRequest:(NSURLRequest *)request - responseHandler:(void (^ _Nullable)(NSData * data, NSHTTPURLResponse * response))responseHandler - errorHandler:(void (^ _Nullable)(NSError * error))errorHandler - shouldRedirectWithNewRequest:(BOOL (^ _Nullable)(NSURLSessionTask * task, NSURLRequest * newRequest))shouldRedirectWithNewRequest; - -/** - Initializes a HTTP network request and immediately sends it. - @param request Request to send. - @returns The HTTP networking task. - */ -+ (NSURLSessionTask *)startTaskWithHttpRequest:(NSURLRequest *)request; - -/** - Initializes a HTTP network request and immediately sends it. - @param request Request to send. - @param responseHandler Optional response handler that will be invoked on the main thread. - @param errorHandler Optional error handler that will be invoked on the main thread. - @returns The HTTP networking task. - */ -+ (NSURLSessionTask *)startTaskWithHttpRequest:(NSURLRequest *)request - responseHandler:(void (^ _Nullable)(NSData * data, NSHTTPURLResponse * response))responseHandler - errorHandler:(void (^ _Nullable)(NSError * error))errorHandler; - -/** - Initializes a HTTP network request and immediately sends it. - @param request Request to send. - @param responseHandler Optional response handler that will be invoked on the main thread. - @param errorHandler Optional error handler that will be invoked on the main thread. - @param shouldRedirectWithNewRequest Optional logic control block to determine if a redirection should occur. This is invoked on the current thread. - @returns The HTTP networking task. - */ -+ (NSURLSessionTask *)startTaskWithHttpRequest:(NSURLRequest *)request - responseHandler:(void (^ _Nullable)(NSData * data, NSHTTPURLResponse * response))responseHandler - errorHandler:(void (^ _Nullable)(NSError * error))errorHandler - shouldRedirectWithNewRequest:(BOOL (^ _Nullable)(NSURLSessionTask * task, NSURLRequest * newRequest))shouldRedirectWithNewRequest; -@end -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPHTTPNetworkSession.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPHTTPNetworkSession.m deleted file mode 100644 index fb1048a3e1..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPHTTPNetworkSession.m +++ /dev/null @@ -1,250 +0,0 @@ -// -// MPHTTPNetworkSession.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPError.h" -#import "MPHTTPNetworkTaskData.h" -#import "MPHTTPNetworkSession.h" -#import "MPLogging.h" -#import "NSError+MPAdditions.h" - -// Macros for dispatching asynchronously to the main queue -#define safe_block(block, ...) block ? block(__VA_ARGS__) : nil -#define async_queue_block(queue, block, ...) dispatch_async(queue, ^ \ -{ \ -safe_block(block, __VA_ARGS__); \ -}) -#define main_queue_block(block, ...) async_queue_block(dispatch_get_main_queue(), block, __VA_ARGS__); - -// Constants -NSString * const kMoPubSDKNetworkDomain = @"MoPubSDKNetworkDomain"; - -@interface MPHTTPNetworkSession() -@property (nonatomic, strong) NSURLSession * sharedSession; - -// Access to `NSMutableDictionary` is not thread-safe by default, so we will gate access -// to it using GCD to allow concurrent reads, but synchronous writes. -@property (nonatomic, strong) NSMutableDictionary * sessions; -@property (nonatomic, strong) dispatch_queue_t sessionsQueue; -@end - -@implementation MPHTTPNetworkSession - -#pragma mark - Initialization - -+ (instancetype)sharedInstance { - static dispatch_once_t once; - static id _sharedInstance; - dispatch_once(&once, ^{ - _sharedInstance = [[self alloc] init]; - }); - return _sharedInstance; -} - -- (instancetype)init { - if (self = [super init]) { - // Shared `NSURLSession` to be used for all `MPHTTPNetworkTask` objects. All tasks should use this single - // session so that the DNS lookup and SSL handshakes do not need to be redone. - _sharedSession = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:nil]; - - // Dictionary of all sessions currently in flight. - _sessions = [NSMutableDictionary dictionary]; - _sessionsQueue = dispatch_queue_create("com.mopub.mopub-ios-sdk.mphttpnetworksession.queue", DISPATCH_QUEUE_CONCURRENT); - } - - return self; -} - -#pragma mark - Session Access - -- (void)setSessionData:(MPHTTPNetworkTaskData *)data forTask:(NSURLSessionTask *)task { - dispatch_barrier_sync(self.sessionsQueue, ^{ - self.sessions[task] = data; - }); -} - -/** - Retrieves the task data for the specified task. Accessing the data is thread - safe, but mutating the data is not thread safe. - @param task Task which needs a data retrieval. - @return The task data or @c nil - */ -- (MPHTTPNetworkTaskData *)sessionDataForTask:(NSURLSessionTask *)task { - __block MPHTTPNetworkTaskData * data = nil; - dispatch_sync(self.sessionsQueue, ^{ - data = self.sessions[task]; - }); - - return data; -} - -/** - Appends additional data to the @c responseData field of @c MPHTTPNetworkTaskData in - a thread safe manner. - @param data New data to append. - @param task Task to append the data to. - */ -- (void)appendData:(NSData *)data toSessionDataForTask:(NSURLSessionTask *)task { - // No data to append or task. - if (data == nil || task == nil) { - return; - } - - dispatch_barrier_sync(self.sessionsQueue, ^{ - // Do nothing if there is no task data entry. - MPHTTPNetworkTaskData * taskData = self.sessions[task]; - if (taskData == nil) { - return; - } - - // Append the new data to the task. - if (taskData.responseData == nil) { - taskData.responseData = [NSMutableData data]; - } - - [taskData.responseData appendData:data]; - }); -} - -#pragma mark - Manual Start Tasks - -+ (NSURLSessionTask *)taskWithHttpRequest:(NSURLRequest *)request - responseHandler:(void (^ _Nullable)(NSData * data, NSHTTPURLResponse * response))responseHandler - errorHandler:(void (^ _Nullable)(NSError * error))errorHandler - shouldRedirectWithNewRequest:(BOOL (^ _Nullable)(NSURLSessionTask * task, NSURLRequest * newRequest))shouldRedirectWithNewRequest { - // Networking task - NSURLSessionDataTask * task = [MPHTTPNetworkSession.sharedInstance.sharedSession dataTaskWithRequest:request]; - - // Initialize the task data - MPHTTPNetworkTaskData * taskData = [[MPHTTPNetworkTaskData alloc] initWithResponseHandler:responseHandler errorHandler:errorHandler shouldRedirectWithNewRequest:shouldRedirectWithNewRequest]; - - // Update the sessions. - [MPHTTPNetworkSession.sharedInstance setSessionData:taskData forTask:task]; - - return task; -} - -#pragma mark - Automatic Start Tasks - -+ (NSURLSessionTask *)startTaskWithHttpRequest:(NSURLRequest *)request { - return [MPHTTPNetworkSession startTaskWithHttpRequest:request responseHandler:nil errorHandler:nil shouldRedirectWithNewRequest:nil]; -} - -+ (NSURLSessionTask *)startTaskWithHttpRequest:(NSURLRequest *)request - responseHandler:(void (^ _Nullable)(NSData * data, NSHTTPURLResponse * response))responseHandler - errorHandler:(void (^ _Nullable)(NSError * error))errorHandler { - return [MPHTTPNetworkSession startTaskWithHttpRequest:request responseHandler:responseHandler errorHandler:errorHandler shouldRedirectWithNewRequest:nil]; -} - -+ (NSURLSessionTask *)startTaskWithHttpRequest:(NSURLRequest *)request - responseHandler:(void (^ _Nullable)(NSData * data, NSHTTPURLResponse * response))responseHandler - errorHandler:(void (^ _Nullable)(NSError * error))errorHandler - shouldRedirectWithNewRequest:(BOOL (^ _Nullable)(NSURLSessionTask * task, NSURLRequest * newRequest))shouldRedirectWithNewRequest { - // Generate a manual start task. - NSURLSessionTask * task = [MPHTTPNetworkSession taskWithHttpRequest:request responseHandler:^(NSData * _Nonnull data, NSHTTPURLResponse * _Nonnull response) { - main_queue_block(responseHandler, data, response); - } errorHandler:^(NSError * _Nonnull error) { - main_queue_block(errorHandler, error); - } shouldRedirectWithNewRequest:shouldRedirectWithNewRequest]; - - // Immediately start the task. - [task resume]; - - return task; -} - -#pragma mark - NSURLSessionDataDelegate - -- (void)URLSession:(NSURLSession *)session - dataTask:(NSURLSessionDataTask *)dataTask -didReceiveResponse:(NSURLResponse *)response - completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler { - // Allow all responses. - completionHandler(NSURLSessionResponseAllow); -} - -- (void)URLSession:(NSURLSession *)session - dataTask:(NSURLSessionDataTask *)dataTask - didReceiveData:(NSData *)data { - - // Append the new data to the task. - [self appendData:data toSessionDataForTask:dataTask]; -} - -- (void)URLSession:(NSURLSession *)session - task:(NSURLSessionTask *)task -willPerformHTTPRedirection:(NSHTTPURLResponse *)response - newRequest:(NSURLRequest *)request - completionHandler:(void (^)(NSURLRequest * _Nullable))completionHandler { - // Retrieve the task data. - MPHTTPNetworkTaskData * taskData = [self sessionDataForTask:task]; - if (taskData == nil) { - completionHandler(request); - return; - } - - // If there is a redirection handler block registered with the HTTP task, we should - // query for it's response. By default, we will allow the redirection. - NSURLRequest * newRequest = request; - if (taskData.shouldRedirectWithNewRequest != nil && !taskData.shouldRedirectWithNewRequest(task, request)) { - // Reject the redirection. - newRequest = nil; - } - - completionHandler(newRequest); -} - -- (void)URLSession:(NSURLSession *)session - task:(NSURLSessionTask *)task -didCompleteWithError:(nullable NSError *)error { - // Retrieve the task data. - MPHTTPNetworkTaskData * taskData = [self sessionDataForTask:task]; - if (taskData == nil) { - return; - } - - // Remove the task data from the currently in flight sessions. - [self setSessionData:nil forTask:task]; - - // Validate that response is not an error. - if (error != nil) { - MPLogEvent([MPLogEvent error:error message:nil]); - safe_block(taskData.errorHandler, error); - return; - } - - // Validate response is a HTTP response. - NSHTTPURLResponse * httpResponse = [task.response isKindOfClass:[NSHTTPURLResponse class]] ? (NSHTTPURLResponse *)task.response : nil; - if (httpResponse == nil) { - NSError * notHttpResponseError = [NSError networkResponseIsNotHTTP]; - MPLogEvent([MPLogEvent error:notHttpResponseError message:nil]); - safe_block(taskData.errorHandler, notHttpResponseError); - return; - } - - // Validate response code is not an error (>= 400) - // See https://en.wikipedia.org/wiki/List_of_HTTP_status_codes for all valid status codes. - if (httpResponse.statusCode >= 400) { - NSError * not200ResponseError = [NSError networkErrorWithHTTPStatusCode:httpResponse.statusCode]; - MPLogEvent([MPLogEvent error:not200ResponseError message:nil]); - safe_block(taskData.errorHandler, not200ResponseError); - return; - } - - // Validate that there is data - if (taskData.responseData == nil) { - NSError * noDataError = [NSError networkResponseContainedNoData]; - MPLogEvent([MPLogEvent error:noDataError message:nil]); - safe_block(taskData.errorHandler, noDataError); - return; - } - - // By this point all of the fields have been validated. - safe_block(taskData.responseHandler, taskData.responseData, httpResponse); -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPHTTPNetworkTaskData.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPHTTPNetworkTaskData.h deleted file mode 100644 index 896c47473d..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPHTTPNetworkTaskData.h +++ /dev/null @@ -1,34 +0,0 @@ -// -// MPHTTPNetworkTaskData.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -/** - Provides an easy encapsulation of a HTTP networking task's data because we can't effectively - subclass @c NSURLSessionDataTask. - */ -NS_ASSUME_NONNULL_BEGIN -@interface MPHTTPNetworkTaskData : NSObject -@property (nonatomic, strong, nullable) NSMutableData * responseData; -@property (nonatomic, copy, nullable) void (^responseHandler)(NSData * data, NSHTTPURLResponse * response); -@property (nonatomic, copy, nullable) void (^errorHandler)(NSError * error); -@property (nonatomic, copy, nullable) BOOL (^shouldRedirectWithNewRequest)(NSURLSessionTask * task, NSURLRequest * newRequest); - -/** - Initializes the task data with the given handlers. - @param responseHandler Optional response handler that will be invoked on the current thread. - @param errorHandler Optional error handler that will be invoked on the current thread. - @param shouldRedirectWithNewRequest Optional logic control block to determine if a redirection should occur. This is invoked on the current thread. - @returns The HTTP networking task data. - */ -- (instancetype)initWithResponseHandler:(void (^ _Nullable)(NSData * data, NSHTTPURLResponse * response))responseHandler - errorHandler:(void (^ _Nullable)(NSError * error))errorHandler - shouldRedirectWithNewRequest:(BOOL (^ _Nullable)(NSURLSessionTask * task, NSURLRequest * newRequest))shouldRedirectWithNewRequest NS_DESIGNATED_INITIALIZER; - -@end -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPHTTPNetworkTaskData.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPHTTPNetworkTaskData.m deleted file mode 100644 index 8fcb15c316..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPHTTPNetworkTaskData.m +++ /dev/null @@ -1,32 +0,0 @@ -// -// MPHTTPNetworkTaskData.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPHTTPNetworkTaskData.h" - -NS_ASSUME_NONNULL_BEGIN -@implementation MPHTTPNetworkTaskData - -- (instancetype)init { - return [self initWithResponseHandler:nil errorHandler:nil shouldRedirectWithNewRequest:nil]; -} - -- (instancetype)initWithResponseHandler:(void (^ _Nullable)(NSData * data, NSHTTPURLResponse * response))responseHandler - errorHandler:(void (^ _Nullable)(NSError * error))errorHandler - shouldRedirectWithNewRequest:(BOOL (^ _Nullable)(NSURLSessionTask * task, NSURLRequest * newRequest))shouldRedirectWithNewRequest { - if (self = [super init]) { - _responseData = nil; - _responseHandler = responseHandler; - _errorHandler = errorHandler; - _shouldRedirectWithNewRequest = shouldRedirectWithNewRequest; - } - - return self; -} - -@end -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPMediationManager.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPMediationManager.h deleted file mode 100644 index 3ef7ac51d9..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPMediationManager.h +++ /dev/null @@ -1,80 +0,0 @@ -// -// MPMediationManager.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPAdapterConfiguration.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - Initialization completion block. - */ -typedef void(^MPMediationInitializationCompletionBlock)(NSError * _Nullable error, NSArray> * _Nullable initializedAdapters); - -/** - Manages all mediated network adapters that interface with the MoPub SDK. - */ -@interface MPMediationManager : NSObject - -/** - Dictionary of all instantiated adapter information providers. - */ -@property (nonatomic, readonly) NSMutableDictionary> * adapters; - -/** - Optional JSON payload to include with every MoPub ad request using the @c kNetworkAdaptersKey metadata key. - This value may be @c nil if there are no initialized adapter information providers in the runtime. - */ -@property (nonatomic, readonly, nullable) NSDictionary * adRequestPayload; - -/** - Singleton instance of the manager. - */ -+ (instancetype)sharedManager; - -/** - Initializes the specified adapter information providers and their underlying network SDKs. - @param providers Optional additional adapter information providers to initialize along with the officially supported networks. - @param configurations Optional configuration parameters for the underlying network SDKs that the providers manage. Only @c NSString, @c NSNumber, @c NSArray, and @c NSDictionary types are allowed. This value may be @c nil. - @param options Optional MoPub request options for the mediated networks. - @param complete Required completion block specifying the initialization error (if any) and the adapter information providers that were successfully initialized. - */ -- (void)initializeWithAdditionalProviders:(NSArray> * _Nullable)providers - configurations:(NSDictionary *> * _Nullable)configurations - requestOptions:(NSDictionary *> * _Nullable)options - complete:(MPMediationInitializationCompletionBlock)complete; - -/** - Sets the initialization parameters for a given network in the cache. - @param params Initialization parameters sent to the @c MPSdkInitializable instance when initialized. - @param networkClass Network class. - */ -- (void)setCachedInitializationParameters:(NSDictionary * _Nullable)params - forNetwork:(Class)networkClass; - -/** - Retrieves the cached initialization parameters for a given network. - @param networkClass Network class. - @returns The cached parameters or @c nil. - */ -- (NSDictionary * _Nullable)cachedInitializationParametersForNetwork:(Class)networkClass; - -/** - Clears the cache. - */ -- (void)clearCache; - -/** - Retrieves the Advanced Bidding tokens only. - @remarks This is deprecated. - */ -- (NSDictionary * _Nullable)advancedBiddingTokens; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPMediationManager.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPMediationManager.m deleted file mode 100644 index bc6a093fd0..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPMediationManager.m +++ /dev/null @@ -1,301 +0,0 @@ -// -// MPMediationManager.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPMediationManager.h" -#import "MPError.h" -#import "MPLogging.h" -#import "NSBundle+MPAdditions.h" - -// Macros for dispatching asynchronously to the main queue -#define mp_safe_block(block, ...) block ? block(__VA_ARGS__) : nil - -/** - Key of the @c NSUserDefaults entry for the network initialization cache. - */ -static NSString * const kNetworkSDKInitializationParametersKey = @"com.mopub.mopub-ios-sdk.network-init-info"; - -// File name and extension of the certified adapter information providers file. -// This should correspond to `MPAdapters.plist` in the Resources directory. -static NSString * kAdaptersFile = @"MPAdapters"; -static NSString * kAdaptersFileType = @"plist"; - -// Ad request JSON payload keys. -static NSString const * kAdapterOptionsKey = @"options"; -static NSString const * kAdapterVersionKey = @"adapter_version"; -static NSString const * kNetworkSdkVersionKey = @"sdk_version"; -static NSString const * kTokenKey = @"token"; - -@interface MPMediationManager() -/** - Dictionary of all instantiated adapter information providers. - */ -@property (nonatomic, strong, readwrite) NSMutableDictionary> * adapters; - -/** - All certified adapter information classes that exist within the current runtime. - */ -@property (nonatomic, strong, readonly) NSSet> * certifiedAdapterClasses; - -/** - Flag indicating if an initialization is already in progress. - */ -@property (nonatomic, assign) BOOL isInitializing; - -/** - Initialization queue. - */ -@property (nonatomic, strong) dispatch_queue_t queue; -@end - -@implementation MPMediationManager - -#pragma mark - Initialization - -+ (instancetype)sharedManager { - static MPMediationManager * sharedInstance = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - sharedInstance = [[MPMediationManager alloc] init]; - }); - - return sharedInstance; -} - -- (instancetype)init { - if (self = [super init]) { - _adapters = [NSMutableDictionary dictionary]; - _certifiedAdapterClasses = MPMediationManager.certifiedAdapterInformationProviderClasses; - _isInitializing = NO; - _queue = dispatch_queue_create("Mediated Adapter Initialization Queue", DISPATCH_QUEUE_SERIAL); - } - - return self; -} - -- (void)initializeWithAdditionalProviders:(NSArray> *)providers - configurations:(NSDictionary *> *)configurations - requestOptions:(NSDictionary *> * _Nullable)options - complete:(MPMediationInitializationCompletionBlock)complete { - // Initialization is already in progress; error out. - if (self.isInitializing) { - mp_safe_block(complete, NSError.sdkInitializationInProgress, nil); - return; - } - - // Start the initialization process - self.isInitializing = YES; - - // Combines the additional providers with the existing set of certified adapter - // information providers (if needed). - NSSet * classesToInitialize = (providers != nil ? [self.certifiedAdapterClasses setByAddingObjectsFromArray:providers] : self.certifiedAdapterClasses); - - // There are no adapter information providers to initialize. Do nothing. - if (classesToInitialize.count == 0) { - self.isInitializing = NO; - mp_safe_block(complete, nil, nil); - return; - } - - // Holds all of the successfully initialized adapter information providers. - NSMutableDictionary> * initializedAdapters = [NSMutableDictionary dictionaryWithCapacity:classesToInitialize.count]; - - // Attempt to instantiate and initialize each adapter information provider. - // If a network has an invalid `moPubNetworkName` or has already been initialized, - // that network will be skipped. - [classesToInitialize enumerateObjectsUsingBlock:^(Class adapterInfoProviderClass, BOOL * _Nonnull stop) { - // Create an instance of the adapter configuration - id adapterInfoProvider = (id)[[[adapterInfoProviderClass class] alloc] init]; - NSString * network = adapterInfoProvider.moPubNetworkName; - - // Verify that the adapter information provider has a MoPub network name and that it's - // not already created. - if (network.length == 0 || initializedAdapters[network] != nil) { - return; - } - - // Retrieve the full set of initialization parameters. - NSDictionary * initializationParams = [self parametersForAdapter:adapterInfoProvider overrideConfiguration:configurations[NSStringFromClass(adapterInfoProviderClass)]]; - - // Populate the request options (if any) - [adapterInfoProvider addMoPubRequestOptions:options[NSStringFromClass(adapterInfoProviderClass)]]; - - // Queue up the adapter's underlying SDK initialization. - dispatch_async(self.queue, ^{ - [adapterInfoProvider initializeNetworkWithConfiguration:initializationParams complete:^(NSError * error) { - // Log adapter initialization error. - if (error != nil) { - NSString * logPrefix = [NSString stringWithFormat:@"Adapter %@ encountered an error during initialization", NSStringFromClass(adapterInfoProviderClass)]; - MPLogEvent([MPLogEvent error:error message:logPrefix]); - } - }]; - }); - - // Adapter initialization is complete. - initializedAdapters[network] = adapterInfoProvider; - }]; - - // Set the initialized adapters and update the internal state. - self.adapters = initializedAdapters; - self.isInitializing = NO; - mp_safe_block(complete, nil, initializedAdapters.allValues); -} - -#pragma mark - Computed Properties - -- (NSDictionary *)adRequestPayload { - // There are no initialized adapter information providers; send nothing. - if (self.adapters.count == 0) { - return nil; - } - - // Build the JSON payload. - NSMutableDictionary * payload = [NSMutableDictionary dictionaryWithCapacity:self.adapters.count]; - [self.adapters enumerateKeysAndObjectsUsingBlock:^(NSString * _Nonnull key, id _Nonnull adapter, BOOL * _Nonnull stop) { - NSMutableDictionary * adapterPayload = [NSMutableDictionary dictionary]; - adapterPayload[kAdapterOptionsKey] = adapter.moPubRequestOptions; - adapterPayload[kAdapterVersionKey] = adapter.adapterVersion; - adapterPayload[kNetworkSdkVersionKey] = adapter.networkSdkVersion; - // Advanced Bidding tokens have been disabled from the adapter payload - // since we are currently sending the tokens in the former `abt` field, - // and do not want to send the tokens twice. - // Once the `abt` field has been deprecated, this token should be re-enabled. - //adapterPayload[kTokenKey] = adapter.biddingToken; - - payload[key] = adapterPayload; - }]; - - return payload; -} - -#pragma mark - Certified Adapter Information Providers - -/** - Attempts to retrieve @c MPAdapters.plist from the current bundle's resources. - @return The file path if available; otherwise @c nil. - */ -+ (NSString *)adapterInformationProvidersFilePath { - // Retrieve the plist containing the default adapter information provider class names. - NSBundle * parentBundle = [NSBundle resourceBundleForClass:self.class]; - NSString * filepath = [parentBundle pathForResource:kAdaptersFile ofType:kAdaptersFileType]; - return filepath; -} - -/** - Retrieves the certified adapter information classes that exist within the - current runtime. - @return List of certified adapter information classes that exist in the runtime. - */ -+ (NSSet> * _Nonnull)certifiedAdapterInformationProviderClasses { - // Certified adapters file not present. Do not continue. - NSString * filepath = MPMediationManager.adapterInformationProvidersFilePath; - if (filepath == nil) { - MPLogInfo(@"Could not find MPAdapters.plist."); - return [NSSet set]; - } - - // Try to retrieve the class for each certified adapter - NSArray * adapterClassNames = [NSArray arrayWithContentsOfFile:filepath]; - NSMutableSet> * adapterInfoClasses = [NSMutableSet setWithCapacity:adapterClassNames.count]; - [adapterClassNames enumerateObjectsUsingBlock:^(NSString * _Nonnull className, NSUInteger idx, BOOL * _Nonnull stop) { - // Adapter information provider is valid since we can retrieve the class and it conforms - // to the `MPAdapterConfiguration` protocol. - Class adapterClass = NSClassFromString(className); - if (adapterClass != Nil && [adapterClass conformsToProtocol:@protocol(MPAdapterConfiguration)]) { - [adapterInfoClasses addObject:adapterClass]; - } - }]; - - return adapterInfoClasses; -} - -/** - Combines cached initialization parameters with override parameters. - @param adapter Adapter information provider that will be populated. - @param configuration Externally-specified initialization parameters. - @return The combined initialization parameters with any @c moPubRequestOptions removed. In the event that - there are no parameters, @c nil is returned. - */ -- (NSDictionary *)parametersForAdapter:(id)adapter - overrideConfiguration:(NSDictionary * _Nullable)configuration { - // Retrieve the adapter's cached initialization parameters and inputted initialization parameters. - // Combine the two dictionaries, giving preference to the publisher-inputted parameters. - NSDictionary * cachedParameters = [self cachedInitializationParametersForNetwork:adapter.class]; - - NSMutableDictionary * initializationParams = (cachedParameters != nil ? [NSMutableDictionary dictionaryWithDictionary:cachedParameters] : [NSMutableDictionary dictionary]); - if (configuration != nil) { - [initializationParams addEntriesFromDictionary:configuration]; - } - - return (initializationParams.count > 0 ? initializationParams : nil); -} - -#pragma mark - Cache - -- (void)setCachedInitializationParameters:(NSDictionary * _Nullable)params forNetwork:(Class _Nonnull)networkClass { - // Empty network names and parameters are invalid. - NSString * network = NSStringFromClass(networkClass); - if (network.length == 0 || params == nil) { - return; - } - - @synchronized (self) { - NSMutableDictionary * cachedParameters = [[[NSUserDefaults standardUserDefaults] objectForKey:kNetworkSDKInitializationParametersKey] mutableCopy]; - if (cachedParameters == nil) { - cachedParameters = [NSMutableDictionary dictionaryWithCapacity:1]; - } - - cachedParameters[network] = params; - [[NSUserDefaults standardUserDefaults] setObject:cachedParameters forKey:kNetworkSDKInitializationParametersKey]; - [[NSUserDefaults standardUserDefaults] synchronize]; - - MPLogInfo(@"Cached SDK initialization parameters for %@:\n%@", network, params); - } -} - -- (NSDictionary * _Nullable)cachedInitializationParametersForNetwork:(Class)networkClass { - // Empty network names are invalid. - NSString * network = NSStringFromClass(networkClass); - if (network.length == 0) { - return nil; - } - - @synchronized (self) { - NSDictionary *cachedParameters = [[NSUserDefaults standardUserDefaults] objectForKey:kNetworkSDKInitializationParametersKey]; - return [cachedParameters objectForKey:network]; - } -} - -- (void)clearCache { - @synchronized (self) { - [[NSUserDefaults standardUserDefaults] removeObjectForKey:kNetworkSDKInitializationParametersKey]; - [[NSUserDefaults standardUserDefaults] synchronize]; - - MPLogDebug(@"Cleared cached SDK initialization parameters"); - } -} - -#pragma mark - Advanced Bidding - -- (NSDictionary *)advancedBiddingTokens { - // No adapters. - if (self.adapters.count == 0) { - return nil; - } - - // Generate the JSON dictionary for all participating bidders. - NSMutableDictionary * tokens = [NSMutableDictionary dictionary]; - [self.adapters enumerateKeysAndObjectsUsingBlock:^(NSString * _Nonnull networkName, id _Nonnull adapter, BOOL * _Nonnull stop) { - if (adapter.biddingToken != nil) { - tokens[networkName] = @{ kTokenKey: adapter.biddingToken }; - } - }]; - - return tokens; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPMemoryCache.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPMemoryCache.h deleted file mode 100644 index 0db6f1b5ae..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPMemoryCache.h +++ /dev/null @@ -1,48 +0,0 @@ -// -// MPMemoryCache.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -/** - Thread-safe memory cache. Items contained within the cache may be evicted - at the operating system's discretion. - */ -@interface MPMemoryCache : NSObject - -/** - Singleton instance. - */ -+ (instancetype _Nonnull)sharedInstance; - -/** - Retrieves the cached data for the given key, if it exists. - @param key Key into the cache - @return The cached data if it exists; otherwise @c nil. - */ -- (NSData * _Nullable)dataForKey:(NSString * _Nonnull)key; - -/** - Sets the cache entry for the given key. If a value of @c nil is given - as the data, the cache entry will be cleared. - @param data New data for the cache entry. A value of @c nil will clear the cache entry. - @param key Key into the cache - */ -- (void)setData:(NSData * _Nullable)data forKey:(NSString * _Nonnull)key; - -@end - -@interface MPMemoryCache (UIImage) - -/** - Retrieves the cached data as a @c UIImage for the given key, if it exists. - @param key Key into the cache - @return The cached image if it exists and contains image data; otherwise @c nil. - */ -- (UIImage * _Nullable)imageForKey:(NSString * _Nonnull)key; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPMemoryCache.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPMemoryCache.m deleted file mode 100644 index f7acc2062b..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPMemoryCache.m +++ /dev/null @@ -1,91 +0,0 @@ -// -// MPMemoryCache.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPMemoryCache.h" -#import "MPLogging.h" - -@interface MPMemoryCache() -/** - Memory cache - */ -@property (nonatomic, strong) NSCache * memcache; - -@end - -@implementation MPMemoryCache - -#pragma mark - Initialization - -+ (instancetype)sharedInstance { - static dispatch_once_t onceToken; - static MPMemoryCache * manager; - dispatch_once(&onceToken, ^{ - manager = [[MPMemoryCache alloc] init]; - }); - - return manager; -} - -- (instancetype)init { - if (self = [super init]) { - _memcache = [[NSCache alloc] init]; - _memcache.delegate = self; - } - - return self; -} - -#pragma mark - Cache Access - -- (NSData * _Nullable)dataForKey:(NSString * _Nonnull)key { - if (key == nil) { - return nil; - } - - MPLogDebug(@"%@ retrieved data for key %@", NSStringFromClass(self.class), key); - return [self.memcache objectForKey:key]; -} - -- (void)setData:(NSData * _Nullable)data forKey:(NSString * _Nonnull)key { - if (key == nil) { - return; - } - - // Set cache entry - if (data != nil) { - MPLogDebug(@"%@ set data %@ for key %@", NSStringFromClass(self.class), data, key); - [self.memcache setObject:data forKey:key]; - } - // Remove cache entry - else { - MPLogDebug(@"%@ removed cache entry %@", NSStringFromClass(self.class), key); - [self.memcache removeObjectForKey:key]; - } -} - -#pragma mark - NSCacheDelegate - -- (void)cache:(NSCache *)cache willEvictObject:(id)obj { - MPLogDebug(@"%@ evicted %@", NSStringFromClass(self.class), obj); -} - -@end - -@implementation MPMemoryCache (UIImage) - -- (UIImage * _Nullable)imageForKey:(NSString * _Nonnull)key { - NSData * imageData = [self dataForKey:key]; - if (imageData == nil) { - MPLogDebug(@"%@ found no image data for key %@", NSStringFromClass(self.class), key); - return nil; - } - - return [[UIImage alloc] initWithData:imageData]; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPNativeAdError.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPNativeAdError.h deleted file mode 100644 index 2aa03d03b6..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPNativeAdError.h +++ /dev/null @@ -1,36 +0,0 @@ -// -// MPNativeAdError.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -typedef NS_ENUM(NSInteger, MPNativeAdErrorCode) { - MPNativeAdErrorUnknown = -1, - MPNativeAdErrorHTTPError = -1000, - MPNativeAdErrorInvalidServerResponse = -1001, - MPNativeAdErrorNoInventory = -1002, - MPNativeAdErrorImageDownloadFailed = -1003, - MPNativeAdErrorAdUnitWarmingUp = -1004, - MPNativeAdErrorVASTParsingFailed = -1005, - MPNativeAdErrorVideoConfigInvalid = -1006, - MPNativeAdErrorContentDisplayError = -1100, - MPNativeAdErrorRenderError = -1200 -}; - -extern NSString * const MoPubNativeAdsSDKDomain; - -NSError *MPNativeAdNSErrorForInvalidAdServerResponse(NSString *reason); -NSError *MPNativeAdNSErrorForAdUnitWarmingUp(void); -NSError *MPNativeAdNSErrorForNoInventory(void); -NSError *MPNativeAdNSErrorForNetworkConnectionError(void); -NSError *MPNativeAdNSErrorForInvalidImageURL(void); -NSError *MPNativeAdNSErrorForImageDownloadFailure(void); -NSError *MPNativeAdNSErrorForContentDisplayErrorMissingRootController(void); -NSError *MPNativeAdNSErrorForContentDisplayErrorInvalidURL(void); -NSError *MPNativeAdNSErrorForVASTParsingFailure(void); -NSError *MPNativeAdNSErrorForVideoConfigInvalid(void); -NSError *MPNativeAdNSErrorForRenderValueTypeError(void); diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPNativeAdError.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPNativeAdError.m deleted file mode 100644 index 90bf51f24a..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPNativeAdError.m +++ /dev/null @@ -1,59 +0,0 @@ -// -// MPNativeAdError.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPNativeAdError.h" - -NSString * const MoPubNativeAdsSDKDomain = @"com.mopub.nativeads"; - -NSError *MPNativeAdNSErrorForInvalidAdServerResponse(NSString *reason) { - if (reason.length == 0) { - reason = @"Invalid ad server response"; - } - - return [NSError errorWithDomain:MoPubNativeAdsSDKDomain code:MPNativeAdErrorInvalidServerResponse userInfo:@{NSLocalizedDescriptionKey : [reason copy]}]; -} - -NSError *MPNativeAdNSErrorForAdUnitWarmingUp() { - return [NSError errorWithDomain:MoPubNativeAdsSDKDomain code:MPNativeAdErrorAdUnitWarmingUp userInfo:@{NSLocalizedDescriptionKey : @"Ad unit is warming up"}]; -} - -NSError *MPNativeAdNSErrorForNoInventory() { - return [NSError errorWithDomain:MoPubNativeAdsSDKDomain code:MPNativeAdErrorNoInventory userInfo:@{NSLocalizedDescriptionKey : @"Ad server returned no inventory"}]; -} - -NSError *MPNativeAdNSErrorForNetworkConnectionError() { - return [NSError errorWithDomain:MoPubNativeAdsSDKDomain code:MPNativeAdErrorHTTPError userInfo:@{NSLocalizedDescriptionKey : @"Connection error"}]; -} - -NSError *MPNativeAdNSErrorForInvalidImageURL() { - return MPNativeAdNSErrorForInvalidAdServerResponse(@"Invalid image URL"); -} - -NSError *MPNativeAdNSErrorForImageDownloadFailure() { - return [NSError errorWithDomain:MoPubNativeAdsSDKDomain code:MPNativeAdErrorImageDownloadFailed userInfo:@{NSLocalizedDescriptionKey : @"Failed to download images"}]; -} - -NSError *MPNativeAdNSErrorForVASTParsingFailure() { - return [NSError errorWithDomain:MoPubNativeAdsSDKDomain code:MPNativeAdErrorVASTParsingFailed userInfo:@{NSLocalizedDescriptionKey : @"Failed to parse VAST tag"}]; -} - -NSError *MPNativeAdNSErrorForVideoConfigInvalid() { - return [NSError errorWithDomain:MoPubNativeAdsSDKDomain code:MPNativeAdErrorVideoConfigInvalid userInfo:@{NSLocalizedDescriptionKey : @"Native Video Config Values in Adserver response are invalid"}]; -} - -NSError *MPNativeAdNSErrorForContentDisplayErrorMissingRootController() { - return [NSError errorWithDomain:MoPubNativeAdsSDKDomain code:MPNativeAdErrorContentDisplayError userInfo:@{NSLocalizedDescriptionKey : @"Cannot display content without a root view controller"}]; -} - -NSError *MPNativeAdNSErrorForContentDisplayErrorInvalidURL() { - return [NSError errorWithDomain:MoPubNativeAdsSDKDomain code:MPNativeAdErrorContentDisplayError userInfo:@{NSLocalizedDescriptionKey : @"Cannot display content without a valid URL"}]; -} - -NSError *MPNativeAdNSErrorForRenderValueTypeError() { - return [NSError errorWithDomain:MoPubNativeAdsSDKDomain code:MPNativeAdErrorRenderError userInfo:@{NSLocalizedDescriptionKey : @"Native ad property was an incorrect data type"}]; -} diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPNetworkStatus.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPNetworkStatus.h deleted file mode 100644 index 8230c45910..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPNetworkStatus.h +++ /dev/null @@ -1,26 +0,0 @@ -// -// MPNetworkStatus.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -// Values chosen to match the IAB Connection Type Spec, where: -// Unknown: 0 -// Ethernet: 1 (skipped because it's not possible on a phone) -// Wifi: 2 -// Cellular Unknown: 3 -// Cellular 2G: 4 -// Cellular 3G: 5 -// Cellular 4G: 6 -typedef NS_ENUM(NSInteger, MPNetworkStatus) { - MPNotReachable = 0, - MPReachableViaWiFi = 2, - MPReachableViaCellularNetworkUnknownGeneration, - MPReachableViaCellularNetwork2G, - MPReachableViaCellularNetwork3G, - MPReachableViaCellularNetwork4G -}; diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPRateLimitConfiguration.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPRateLimitConfiguration.h deleted file mode 100644 index 9220d8ba61..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPRateLimitConfiguration.h +++ /dev/null @@ -1,40 +0,0 @@ -// -// MPRateLimitConfiguration.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface MPRateLimitConfiguration : NSObject - -/** - Returns the number of milliseconds of the last rate limit, or 0 for first request or if the last request was not rate limited. - */ -@property (nonatomic, readonly) NSUInteger lastRateLimitMilliseconds; - -/** - Returns the reason for the last rate limit, or nil for first request or if the last request did not include a reason. - */ -@property (nonatomic, copy, readonly, nullable) NSString * lastRateLimitReason; - -/** - Returns present rate limit state. @c YES if presently rate limited, @c NO otherwise - */ -@property (nonatomic, readonly) BOOL isRateLimited; - -/** - Sets rate limit state to rate limited. Automatically expires after @c milliseconds milliseconds. Rate limiting to 0 or - negative milliseconds will result in no rate limit, but the number and reason will still be saved for later. - @param milliseconds The number of milliseconds to rate limit for. If 0, no rate limit will be put into effect, but the number will still be saved for later - @param reason The reason for the rate limit. This is copied directly from the server response. This parameter is optional. - */ -- (void)setRateLimitTimerWithMilliseconds:(NSInteger)milliseconds reason:(NSString * _Nullable)reason; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPRateLimitConfiguration.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPRateLimitConfiguration.m deleted file mode 100644 index 43eb7119be..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPRateLimitConfiguration.m +++ /dev/null @@ -1,53 +0,0 @@ -// -// MPRateLimitConfiguration.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPRateLimitConfiguration.h" -#import "MPRealTimeTimer.h" - -@interface MPRateLimitConfiguration () - -@property (nonatomic, strong) MPRealTimeTimer * timer; - -@end - -@implementation MPRateLimitConfiguration - -- (BOOL)isRateLimited { - return self.timer != nil; -} - -- (void)setRateLimitTimerWithMilliseconds:(NSInteger)milliseconds reason:(NSString *)reason { - @synchronized(self) { - // Intentionally treat accidental less than 0 as 0 - if (milliseconds < 0) { - milliseconds = 0; - } - - // If already rate limited, reset the timer by invalidating the present timer. This guarantees the rate limit value from the most recent response is used. - if (self.isRateLimited) { - [self.timer invalidate]; - } - - _lastRateLimitMilliseconds = milliseconds; - _lastRateLimitReason = reason; - - if (milliseconds == 0) { - self.timer = nil; - return; - } - - __weak __typeof__(self) weakSelf = self; - self.timer = [[MPRealTimeTimer alloc] initWithInterval:(((double)milliseconds) / 1000.0) block:^(MPRealTimeTimer * timer) { - [weakSelf.timer invalidate]; - weakSelf.timer = nil; - }]; - [self.timer scheduleNow]; - } -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPRateLimitManager.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPRateLimitManager.h deleted file mode 100644 index d2d12086b5..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPRateLimitManager.h +++ /dev/null @@ -1,50 +0,0 @@ -// -// MPRateLimitManager.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface MPRateLimitManager : NSObject - -// This is a singleton. -+ (instancetype)sharedInstance; - -/** - Current rate limit state for the given ad unit ID. - @param adUnitId The ad unit ID to check rate limit state for - @return @c YES if presently rate limited for this ad unit Id, @c NO otherwise - */ -- (BOOL)isRateLimitedForAdUnitId:(NSString *)adUnitId; - -/** - Sets rate limit state to rate limited. Automatically expires after @c milliseconds milliseconds. Rate limiting to 0 or - negative milliseconds will result in no rate limit, but the number and reason will still be saved for later. - @param adUnitId The ad unit ID to rate limit for - @param milliseconds The number of milliseconds to rate limit for. If 0, no rate limit will be put into effect, but the number will still be saved for later - @param reason The reason for the rate limit. This is copied directly from the server response. This parameter is optional. - */ -- (void)setRateLimitTimerWithAdUnitId:(NSString *)adUnitId milliseconds:(NSInteger)milliseconds reason:(NSString * _Nullable)reason; - -/** - Given an ad unit ID, returns the last millisecond rate limit value for that ad unit ID. - @param adUnitId The ad unit ID to check last millisecond value for - @return The number of milliseconds for the last rate limit, or 0 for first request or if the last request didn't rate limit - */ -- (NSUInteger)lastRateLimitMillisecondsForAdUnitId:(NSString *)adUnitId; - -/** - Given an ad unit ID, returns the last reason value for that ad unit ID. - @param adUnitId The ad unit ID to check reason for - @return The last reason given for this ad unit id, or @c nil for first request or if no reason was given - */ -- (NSString * _Nullable)lastRateLimitReasonForAdUnitId:(NSString *)adUnitId; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPRateLimitManager.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPRateLimitManager.m deleted file mode 100644 index ae367cdb63..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPRateLimitManager.m +++ /dev/null @@ -1,73 +0,0 @@ -// -// MPRateLimitManager.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPRateLimitManager.h" -#import "MPRateLimitConfiguration.h" - -@interface MPRateLimitManager () - -// Ad Unit IDs are used as keys; @c MPRateLimitConfiguration objects are used as values -@property (nonatomic, strong) NSMutableDictionary * configurationDictionary; - -@end - -@implementation MPRateLimitManager - -+ (instancetype)sharedInstance { - static MPRateLimitManager * sharedInstance = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - sharedInstance = [[self alloc] init]; - }); - return sharedInstance; -} - -- (instancetype)init { - if (self = [super init]) { - _configurationDictionary = [NSMutableDictionary dictionary]; - } - - return self; -} - -- (void)setRateLimitTimerWithAdUnitId:(NSString *)adUnitId milliseconds:(NSInteger)milliseconds reason:(NSString *)reason { - // Fast fail if @c adUnitId is @c nil - if (adUnitId == nil) { - return; - } - - @synchronized (self) { - // Make new configuration if one does not already exist for this ad unit ID - if (self.configurationDictionary[adUnitId] == nil) { - self.configurationDictionary[adUnitId] = [[MPRateLimitConfiguration alloc] init]; - } - - // Set the rate limit timer - MPRateLimitConfiguration * config = self.configurationDictionary[adUnitId]; - [config setRateLimitTimerWithMilliseconds:milliseconds reason:reason]; - } -} - -// Getter methods will return a default value upon a @c nil ad unit ID to avoid crashing on dictionary -// lookups. The return statement template is -// `return adUnitId != nil ? : ` -// Using `!=` instead of `==` allows the configuration value to be listed first, then default second. - -- (BOOL)isRateLimitedForAdUnitId:(NSString *)adUnitId { - return adUnitId != nil ? self.configurationDictionary[adUnitId].isRateLimited : NO; -} - -- (NSUInteger)lastRateLimitMillisecondsForAdUnitId:(NSString *)adUnitId { - return adUnitId != nil ? self.configurationDictionary[adUnitId].lastRateLimitMilliseconds : 0; -} - -- (NSString *)lastRateLimitReasonForAdUnitId:(NSString *)adUnitId { - return adUnitId != nil ? self.configurationDictionary[adUnitId].lastRateLimitReason : nil; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPReachabilityManager.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPReachabilityManager.h deleted file mode 100644 index 327cbda570..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPReachabilityManager.h +++ /dev/null @@ -1,38 +0,0 @@ -// -// MPReachabilityManager.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPReachability.h" - -/** - Provides a singleton interface for `MPReachability` since creating new - instances of `MPReachability` is an expensive operation. - */ -@interface MPReachabilityManager : NSObject - -/** - Current network status. - */ -@property (nonatomic, readonly) MPNetworkStatus currentStatus; - -/** - Singleton instance of the manager. - */ -+ (instancetype _Nonnull)sharedManager; - -/** - Starts monitoring for changes in connectivity. - */ -- (void)startMonitoring; - -/** - Stops monitoring for changes in connectivity. - */ -- (void)stopMonitoring; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPReachabilityManager.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPReachabilityManager.m deleted file mode 100644 index 2d16ebaedf..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPReachabilityManager.m +++ /dev/null @@ -1,56 +0,0 @@ -// -// MPReachabilityManager.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPReachabilityManager.h" - -@interface MPReachabilityManager() -@property (nonatomic, strong) MPReachability * reachability; -@end - -@implementation MPReachabilityManager - -#pragma mark - Initialization - -+ (instancetype _Nonnull)sharedManager { - static MPReachabilityManager * sharedMyManager = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - sharedMyManager = [[self alloc] init]; - }); - return sharedMyManager; -} - -- (instancetype)init { - if (self = [super init]) { - _reachability = [MPReachability reachabilityForInternetConnection]; - } - - return self; -} - -- (void)dealloc { - [_reachability stopNotifier]; -} - -#pragma mark - Properties - -- (MPNetworkStatus)currentStatus { - return self.reachability.currentReachabilityStatus; -} - -#pragma mark - Monitoring - -- (void)startMonitoring { - [self.reachability startNotifier]; -} - -- (void)stopMonitoring { - [self.reachability stopNotifier]; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPURL.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPURL.h deleted file mode 100644 index 4b884889ea..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPURL.h +++ /dev/null @@ -1,81 +0,0 @@ -// -// MPURL.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -NS_ASSUME_NONNULL_BEGIN - -/** - MoPub-specific URL object to include passing along a POST request payload. - */ -@interface MPURL : NSURL -/** - Dictionary of data that will be represented as JSON in the POST request body. - @c NSJSONSerialization will be used to perform the serialization of the data - into JSON; as such the only objects that are supported are: @c NSString, - @c NSNumber, @c NSArray, @c NSDictionary, and @c NSNull. - @note Keys and values will not be URL encoded. - */ -@property (nonatomic, strong, readonly) NSMutableDictionary * postData; - -/** - Initialize with a valid URL string with the string arguments to contain any percent - escape codes that are necessary. It is an error for URLString to be nil. - @param URLString Valid URL string with percent escaped arguments. - @return MoPub object representation of the URL. - */ -- (instancetype _Nullable)initWithString:(NSString * _Nullable)URLString; - -/** - Initialize with a valid URL string with the string arguments to contain any percent - escape codes that are necessary. It is an error for URLString to be nil. - @param URLString Valid URL string with percent escaped arguments. - @return MoPub object representation of the URL. - */ -+ (instancetype _Nullable)URLWithString:(NSString * _Nullable)URLString; - -/** - Initialize with a URL components and optional POST data. - @param components Components of the URL. - @param postData Optional POST data to include with the URL. The values should not be URL encoded, - and only supports the following JSON-serializable types: @c NSString, @c NSNumber, @c NSDictionary, - and @c NSArray. - @return MoPub object representation of the URL. - */ -+ (instancetype _Nullable)URLWithComponents:(NSURLComponents * _Nullable)components postData:(NSDictionary * _Nullable)postData; - -/** - Attempts to retrieve the value for the POST data key as a @c NSArray. - @param key POST data key. - @return The value of the POST data key cast into a @c NSArray; otherwise @c nil. - */ -- (NSArray * _Nullable)arrayForPOSTDataKey:(NSString *)key; - -/** - Attempts to retrieve the value for the POST data key as a @c NSDictionary. - @param key POST data key. - @return The value of the POST data key cast into a @c NSDictionary; otherwise @c nil. - */ -- (NSDictionary * _Nullable)dictionaryForPOSTDataKey:(NSString *)key; - -/** - Attempts to retrieve the value for the POST data key as a @c NSNumber. - @param key POST data key. - @return The value of the POST data key cast into a @c NSNumber; otherwise @c nil. - */ -- (NSNumber * _Nullable)numberForPOSTDataKey:(NSString *)key; - -/** - Attempts to retrieve the value for the POST data key as a @c NSString. - @param key POST data key. - @return The value of the POST data key cast into a @c NSString; otherwise @c nil. - */ -- (NSString * _Nullable)stringForPOSTDataKey:(NSString *)key; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPURL.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPURL.m deleted file mode 100644 index 039eddf375..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPURL.m +++ /dev/null @@ -1,52 +0,0 @@ -// -// MPURL.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPURL.h" - -@implementation MPURL - -#pragma mark - Initialization - -- (instancetype)initWithString:(NSString *)URLString { - if (self = [super initWithString:URLString]) { - _postData = [NSMutableDictionary dictionary]; - } - return self; -} - -+ (instancetype)URLWithString:(NSString *)URLString { - return [[MPURL alloc] initWithString:URLString]; -} - -+ (instancetype)URLWithComponents:(NSURLComponents *)components postData:(NSDictionary *)postData { - NSString * urlString = components.URL.absoluteString; - MPURL * mpUrl = [[MPURL alloc] initWithString:urlString]; - [mpUrl.postData addEntriesFromDictionary:postData]; - - return mpUrl; -} - -#pragma mark - POST Data Convenience Getters - -- (NSArray *)arrayForPOSTDataKey:(NSString *)key { - return (NSArray *)self.postData[key]; -} - -- (NSDictionary *)dictionaryForPOSTDataKey:(NSString *)key { - return (NSDictionary *)self.postData[key]; -} - -- (NSNumber *)numberForPOSTDataKey:(NSString *)key { - return (NSNumber *)self.postData[key]; -} - -- (NSString *)stringForPOSTDataKey:(NSString *)key { - return (NSString *)self.postData[key]; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPURLRequest.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPURLRequest.h deleted file mode 100644 index 44077210ea..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPURLRequest.h +++ /dev/null @@ -1,31 +0,0 @@ -// -// MPURLRequest.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -NS_ASSUME_NONNULL_BEGIN -@interface MPURLRequest : NSMutableURLRequest - -/** - Initializes an URL request with a given URL. - @param URL The URL for the request. - @returns Returns a URL request for a specified URL with @c NSURLRequestReloadIgnoringCacheData - cache policy and @c kRequestTimeoutInterval timeout value. - */ -- (instancetype)initWithURL:(NSURL *)URL; - -/** - Initializes an URL request with a given URL. - @param URL The URL for the request. - @returns Returns a URL request for a specified URL with @c NSURLRequestReloadIgnoringCacheData - cache policy and @c kRequestTimeoutInterval timeout value. - */ -+ (MPURLRequest *)requestWithURL:(NSURL *)URL; - -@end -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPURLRequest.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPURLRequest.m deleted file mode 100644 index 0bf0fc1bfe..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPURLRequest.m +++ /dev/null @@ -1,104 +0,0 @@ -// -// MPURLRequest.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPAPIEndpoints.h" -#import "MPLogging.h" -#import "MPURL.h" -#import "MPURLRequest.h" -#import "MPWebBrowserUserAgentInfo.h" - -// All requests have a 10 second timeout. -const NSTimeInterval kRequestTimeoutInterval = 10.0; - -NS_ASSUME_NONNULL_BEGIN -@interface MPURLRequest() - -@end - -@implementation MPURLRequest - -- (instancetype)initWithURL:(NSURL *)URL { - // In the event that the URL passed in is really a MPURL type, - // extract the POST body. - NSMutableDictionary * postData = [NSMutableDictionary dictionary]; - if ([URL isKindOfClass:[MPURL class]]) { - MPURL * mpUrl = (MPURL *)URL; - if ([NSJSONSerialization isValidJSONObject:mpUrl.postData]) { - postData = mpUrl.postData; - } - else { - MPLogInfo(@"🚨 POST data failed to serialize into JSON:\n%@", mpUrl.postData); - } - } - - // Requests sent to MoPub should always be in POST format. All other requests - // should be sent as a normal GET. - BOOL isMoPubRequest = [URL.host isEqualToString:MPAPIEndpoints.baseHostname]; - NSURL * requestUrl = URL; - if (isMoPubRequest) { - // Move the query parameters to the POST data dictionary. - // NSURLQUeryItem automatically URL decodes the query parameter name and value when - // using the `name` and `value` properties. - NSURLComponents * components = [NSURLComponents componentsWithURL:URL resolvingAgainstBaseURL:NO]; - [components.queryItems enumerateObjectsUsingBlock:^(NSURLQueryItem * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { - postData[obj.name] = obj.value; - }]; - - // The incoming URL may contain query parameters; we will need to strip them out. - components.queryItems = nil; - requestUrl = components.URL; - } - - if (self = [super initWithURL:requestUrl]) { - // Generate the request - [self setHTTPShouldHandleCookies:NO]; - [self setValue:MPWebBrowserUserAgentInfo.userAgent forHTTPHeaderField:@"User-Agent"]; - [self setCachePolicy:NSURLRequestReloadIgnoringCacheData]; - [self setTimeoutInterval:kRequestTimeoutInterval]; - - // Request contains POST data or is a MoPub request; the should be a POST - // with a UTF-8 JSON payload as the HTTP body. - if (isMoPubRequest || postData.count > 0) { - [self setHTTPMethod:@"POST"]; - [self setValue:@"application/json; charset=utf-8" forHTTPHeaderField:@"Content-Type"]; - - // Generate the JSON body from the POST parameters - NSError * error = nil; - NSData * jsonData = [NSJSONSerialization dataWithJSONObject:postData options:0 error:&error]; - - // Set the request body with the query parameter key/value pairs if there was no - // error in generating a JSON from the dictionary. - if (error == nil) { - [self setValue:[NSString stringWithFormat:@"%lu", (unsigned long)jsonData.length] forHTTPHeaderField:@"Content-Length"]; - [self setHTTPBody:jsonData]; - } - else { - MPLogEvent([MPLogEvent error:error message:nil]); - } - } - } - - return self; -} - -+ (MPURLRequest *)requestWithURL:(NSURL *)URL { - return [[MPURLRequest alloc] initWithURL:URL]; -} - -- (NSString *)description { - if (self.HTTPBody != nil) { - NSString * httpBody = [[NSString alloc] initWithData:self.HTTPBody encoding:NSUTF8StringEncoding]; - return [NSString stringWithFormat:@"%@\n\t%@", self.URL, httpBody]; - } - else { - return self.URL.absoluteString; - } -} - -@end -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPVASTInterstitialCustomEvent.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPVASTInterstitialCustomEvent.h deleted file mode 100644 index 919feea056..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPVASTInterstitialCustomEvent.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// MPVASTInterstitialCustomEvent.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPInterstitialCustomEvent.h" -#import "MPPrivateInterstitialCustomEventDelegate.h" -#import "MPPrivateRewardedVideoCustomEventDelegate.h" -#import "MPRewardedVideoCustomEvent.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MPVASTInterstitialCustomEvent: MPInterstitialCustomEvent - -/** - The actual delegate might only conform to one of the delegate protocol. - */ -@property (nonatomic, weak) id delegate; - -@end - -@interface MPVASTInterstitialCustomEvent (MPRewardedVideoCustomEvent) -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPVASTInterstitialCustomEvent.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPVASTInterstitialCustomEvent.m deleted file mode 100644 index 3d61bcac3e..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPVASTInterstitialCustomEvent.m +++ /dev/null @@ -1,488 +0,0 @@ -// -// MPVASTInterstitialCustomEvent.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPAdConfiguration.h" -#import "MPAdDestinationDisplayAgent.h" -#import "MPDiskLRUCache.h" -#import "MPHTTPNetworkSession.h" -#import "MPLogging.h" -#import "MPURLRequest.h" -#import "MPVASTInterstitialCustomEvent.h" -#import "MPVASTMacroProcessor.h" -#import "MPVASTManager.h" -#import "MPVASTTracking.h" -#import "MPVideoConfig.h" -#import "MPVideoPlayerViewController.h" - -static NSString * const kMPVASTInterstitialCustomEventErrorDomain = @"com.mopub.MPVASTInterstitialCustomEvent"; - -@interface MPVASTInterstitialCustomEvent () - -@property (nonatomic, strong) id adDestinationDisplayAgent; -@property (nonatomic, strong) id vastTracking; -@property (nonatomic, strong) id mediaFileCache; -@property (nonatomic, strong) MPVASTMediaFile *remoteMediaFileToPlay; -@property (nonatomic, strong) MPVideoConfig *videoConfig; -@property (nonatomic, strong) MPVideoPlayerViewController *playerViewController; // the interstitial -@property (nonatomic, assign) BOOL hasAdAvailable; // Rewarded experience related (MPRewardedVideoCustomEvent) - -@end - -@interface MPVASTInterstitialCustomEvent (MPAdDestinationDisplayAgentDelegate) -@end - -@interface MPVASTInterstitialCustomEvent (MPVideoPlayerViewControllerDelegate) -@end - -@implementation MPVASTInterstitialCustomEvent - -@synthesize delegate; - -- (instancetype)init { - self = [super init]; - if (self) { - _adDestinationDisplayAgent = [MPAdDestinationDisplayAgent agentWithDelegate:self]; - _mediaFileCache = [MPDiskLRUCache sharedDiskCache]; - } - return self; -} - -- (void)dealloc { - [self.adDestinationDisplayAgent cancel]; -} - -- (MPAdConfiguration *)adConfig { - return self.delegate.configuration; -} - -#pragma mark - MPInterstitialCustomEvent Override - -- (void)requestInterstitialWithCustomEventInfo:(NSDictionary *)info adMarkup:(NSString *)adMarkup { - [self loadAd]; -} - -- (void)showInterstitialFromRootViewController:(UIViewController *)rootViewController { - if (self.playerViewController.presentingViewController) { - MPLogInfo(@"View controller has been presented"); - } else if (rootViewController.presentedViewController) { - MPLogInfo(@"Root view controller has presented a view controller"); - } else { - [rootViewController presentViewController:self.playerViewController animated:MP_ANIMATED completion:^{ - [self.playerViewController play]; - }]; - } -} - -#pragma mark - Private - -- (void)loadAd { - void (^fetchAdCompletion)(NSError *) = ^(NSError *fetchAdError) { - if (fetchAdError == nil) { - // Fetch successfully does not mean load successfully. Use `MPVideoPlayerContainerViewDelegate` - // to determine the ad load result. - return; - } - - if ([self.delegate conformsToProtocol:@protocol(MPInterstitialCustomEventDelegate)]) { - [self.delegate interstitialCustomEvent:self didFailToLoadAdWithError:fetchAdError]; - } else if ([self.delegate conformsToProtocol:@protocol(MPRewardedVideoCustomEventDelegate)]) { - [self.delegate rewardedVideoDidFailToLoadAdForCustomEvent:self error:fetchAdError]; - } else { - MPLogInfo(@"%s unexpected delegate: %@", __FUNCTION__, self.delegate); - } - }; - - [self fetchAndLoadAdWithConfiguration:self.adConfig fetchAdCompletion:fetchAdCompletion]; -} - -/** - Parse the VAST XML and resolve potential wrapper chain, and then precache the media file if needed, - and finally create the view controller with the media file automatially loaded into it. - - Note: `MPAdConfiguration.precacheRequired` is ignored because video precaching is always enforced - for VAST. See MoPub documentation: https://developers.mopub.com/dsps/ad-formats/video/ - - Note: For the completion handler `fetchAdCompletion`, if the `NSError` is nil, it only means the VAST - ad has been fetched successfully for the load procedure. Use `MPVideoPlayerContainerViewDelegate` to - determine the ad load result. - */ -- (void)fetchAndLoadAdWithConfiguration:(MPAdConfiguration *)configuration fetchAdCompletion:(void(^)(NSError *))fetchAdCompletion { - // Safely fire completion block with error. - void (^fireComplete)(NSError *) = ^(NSError *error) { - if (fetchAdCompletion != nil) { - fetchAdCompletion(error); - } - }; - - [MPVASTManager fetchVASTWithData:configuration.adResponseData completion:^(MPVASTResponse *response, NSError *error) { - if (error) { - fireComplete(error); - return; - } - - MPVideoConfig *videoConfig = [[MPVideoConfig alloc] initWithVASTResponse:response additionalTrackers:configuration.vastVideoTrackers]; - videoConfig.isRewarded = configuration.hasValidReward; - videoConfig.enableEarlyClickthroughForNonRewardedVideo = configuration.enableEarlyClickthroughForNonRewardedVideo; - - if (videoConfig == nil || videoConfig.mediaFiles == nil) { - fireComplete([NSError errorWithDomain:kMPVASTInterstitialCustomEventErrorDomain - code:MPVASTErrorUnableToFindLinearAdOrMediaFileFromURI - userInfo:nil]); - return; - } - - self.videoConfig = videoConfig; - CGSize windowSize = [UIApplication sharedApplication].keyWindow.bounds.size; - MPVASTMediaFile *remoteMediaFile = [MPVASTMediaFile bestMediaFileFromCandidates:videoConfig.mediaFiles - forContainerSize:windowSize - containerScaleFactor:[UIScreen mainScreen].scale]; - if (remoteMediaFile == nil) { - fireComplete([NSError errorWithDomain:kMPVASTInterstitialCustomEventErrorDomain - code:MPVASTErrorUnableToFindLinearAdOrMediaFileFromURI - userInfo:nil]); - return; - } - - self.remoteMediaFileToPlay = remoteMediaFile; - self.vastTracking = [[MPVASTTracking alloc] initWithVideoConfig:videoConfig - videoURL:remoteMediaFile.URL]; - NSURL *cacheFileURL = [self.mediaFileCache cachedFileURLForRemoteFileURL:remoteMediaFile.URL]; - - // `MPVideoPlayerViewController.init` automatically loads the video and triggers delegate callback - if ([self.mediaFileCache isRemoteFileCached:remoteMediaFile.URL]) { - [self.mediaFileCache touchCachedFileForRemoteFile:remoteMediaFile.URL]; // for LRU - self.playerViewController = [[MPVideoPlayerViewController alloc] initWithVideoURL:cacheFileURL - videoConfig:videoConfig]; - self.playerViewController.delegate = self; - [self.vastTracking registerVideoViewForViewabilityTracking:self.playerViewController.view]; - [self.playerViewController loadVideo]; - - // No error - fireComplete(nil); - } else { - MPURLRequest *request = [MPURLRequest requestWithURL:remoteMediaFile.URL]; - [MPHTTPNetworkSession startTaskWithHttpRequest:request responseHandler:^(NSData * _Nonnull data, NSHTTPURLResponse * _Nonnull response) { - [self.mediaFileCache storeData:data forRemoteSourceFileURL:remoteMediaFile.URL]; - dispatch_async(dispatch_get_main_queue(), ^{ - self.playerViewController = [[MPVideoPlayerViewController alloc] initWithVideoURL:cacheFileURL videoConfig:videoConfig]; - self.playerViewController.delegate = self; - [self.vastTracking registerVideoViewForViewabilityTracking:self.playerViewController.view]; - [self.playerViewController loadVideo]; - }); - } errorHandler:fireComplete]; - } - }]; -} - -- (void)dismissPlayerViewController { - [self.playerViewController dismissViewControllerAnimated:MP_ANIMATED completion:nil]; - self.playerViewController = nil; -} - -@end - -#pragma mark - MPRewardedVideoCustomEvent - -@implementation MPVASTInterstitialCustomEvent (MPRewardedVideoCustomEvent) - -- (BOOL)enableAutomaticImpressionAndClickTracking { - // Although `enableAutomaticImpressionAndClickTracking` is NO, for historic reasons such as ILRD - // impression tracking we still need to relay on the adapter (the delegate) to track impression. - return NO; -} - -- (void)handleAdPlayedForCustomEventNetwork { - // no-op -} - -- (void)handleCustomEventInvalidated { - // no-op -} - -- (void)presentRewardedVideoFromViewController:(UIViewController *)viewController { - [self showInterstitialFromRootViewController:viewController]; -} - -- (void)requestRewardedVideoWithCustomEventInfo:(NSDictionary *)info adMarkup:(NSString *)adMarkup { - [self loadAd]; -} - -@end - -#pragma mark - MPAdDestinationDisplayAgentDelegate - -@implementation MPVASTInterstitialCustomEvent (MPAdDestinationDisplayAgentDelegate) - -- (void)displayAgentDidDismissModal { - [self.playerViewController enableAppLifeCycleEventObservationForAutoPlayPause]; - [self.playerViewController play]; // continue playing after click-through -} - -- (void)displayAgentWillLeaveApplication { - if ([self.delegate conformsToProtocol:@protocol(MPInterstitialCustomEventDelegate)]) { - [self.delegate interstitialCustomEventWillLeaveApplication:self]; - } else if ([self.delegate conformsToProtocol:@protocol(MPRewardedVideoCustomEventDelegate)]) { - [self.delegate rewardedVideoWillLeaveApplicationForCustomEvent:self]; - } else { - MPLogInfo(@"%s unexpected delegate: %@", __FUNCTION__, self.delegate); - } -} - -- (void)displayAgentWillPresentModal { - [self.playerViewController pause]; -} - -- (UIViewController *)viewControllerForPresentingModalView { - return self.playerViewController; -} - -@end - -#pragma mark - MPVideoPlayerViewControllerDelegate - -@implementation MPVASTInterstitialCustomEvent (MPVideoPlayerViewControllerDelegate) - -#pragma mark - MPInterstitialViewControllerAppearanceDelegate - -- (void)interstitialWillAppear:(id)interstitial { - if ([self.delegate conformsToProtocol:@protocol(MPInterstitialCustomEventDelegate)]) { - [self.delegate interstitialCustomEventWillAppear:self]; - } else if ([self.delegate conformsToProtocol:@protocol(MPRewardedVideoCustomEventDelegate)]) { - [self.delegate rewardedVideoWillAppearForCustomEvent:self]; - } else { - MPLogInfo(@"%s unexpected delegate: %@", __FUNCTION__, self.delegate); - } -} - -- (void)interstitialDidAppear:(id)interstitial { - if ([self.delegate conformsToProtocol:@protocol(MPInterstitialCustomEventDelegate)]) { - [self.delegate interstitialCustomEventDidAppear:self]; - } else if ([self.delegate conformsToProtocol:@protocol(MPRewardedVideoCustomEventDelegate)]) { - [self.delegate rewardedVideoDidAppearForCustomEvent:self]; - } else { - MPLogInfo(@"%s unexpected delegate: %@", __FUNCTION__, self.delegate); - } -} - -- (void)interstitialWillDisappear:(id)interstitial { - if ([self.delegate conformsToProtocol:@protocol(MPInterstitialCustomEventDelegate)]) { - [self.delegate interstitialCustomEventWillDisappear:self]; - } else if ([self.delegate conformsToProtocol:@protocol(MPRewardedVideoCustomEventDelegate)]) { - [self.delegate rewardedVideoWillDisappearForCustomEvent:self]; - } else { - MPLogInfo(@"%s unexpected delegate: %@", __FUNCTION__, self.delegate); - } -} - -- (void)interstitialDidDisappear:(id)interstitial { - self.hasAdAvailable = NO; - - if ([self.delegate conformsToProtocol:@protocol(MPInterstitialCustomEventDelegate)]) { - [self.delegate interstitialCustomEventDidDisappear:self]; - } else if ([self.delegate conformsToProtocol:@protocol(MPRewardedVideoCustomEventDelegate)]) { - [self.delegate rewardedVideoDidDisappearForCustomEvent:self]; - } else { - MPLogInfo(@"%s unexpected delegate: %@", __FUNCTION__, self.delegate); - } -} - -#pragma mark - MPVideoPlayerContainerViewDelegate - -- (UIViewController *)viewControllerForPresentingModalMRAIDExpandedView { - return self.playerViewController; -} - -- (void)videoPlayerContainerViewDidLoadVideo:(MPVideoPlayerContainerView *)videoPlayerContainerView { - self.hasAdAvailable = YES; - - if ([self.delegate conformsToProtocol:@protocol(MPInterstitialCustomEventDelegate)]) { - [self.delegate interstitialCustomEvent:self didLoadAd:nil]; - } else if ([self.delegate conformsToProtocol:@protocol(MPRewardedVideoCustomEventDelegate)]) { - [self.delegate rewardedVideoDidLoadAdForCustomEvent:self]; - } else { - MPLogInfo(@"%s unexpected delegate: %@", __FUNCTION__, self.delegate); - } -} - -- (void)videoPlayerContainerViewDidFailToLoadVideo:(MPVideoPlayerContainerView *)videoPlayerContainerView error:(NSError *)error { - self.hasAdAvailable = NO; - - if ([self.delegate conformsToProtocol:@protocol(MPInterstitialCustomEventDelegate)]) { - [self.delegate interstitialCustomEvent:self didFailToLoadAdWithError:error]; - } else if ([self.delegate conformsToProtocol:@protocol(MPRewardedVideoCustomEventDelegate)]) { - [self.delegate rewardedVideoDidFailToPlayForCustomEvent:self error:error]; - } else { - MPLogInfo(@"%s unexpected delegate: %@", __FUNCTION__, self.delegate); - } -} - -- (void)videoPlayerContainerViewDidStartVideo:(MPVideoPlayerContainerView *)videoPlayerContainerView duration:(NSTimeInterval)duration { - // We only support one creative in one ad response, so we trigger all of Start, Impression and - // CreativeView events at the same time. - - // VAST level impression - [self.vastTracking handleVideoEvent:MPVideoEventStart videoTimeOffset:0]; - [self.vastTracking handleVideoEvent:MPVideoEventCreativeView videoTimeOffset:0]; - [self.vastTracking handleVideoEvent:MPVideoEventImpression videoTimeOffset:0]; - - // ad level impression - // Although `enableAutomaticImpressionAndClickTracking` is NO, for historic reasons such as ILRD - // impression tracking we still need to relay on the adapter (the delegate) to track impression. - // Do not call `[self.vastTracking uniquelySendURLs:self.adConfig.impressionTrackingURLs];` until - // `enableAutomaticImpressionAndClickTracking` is removed or refactored. - [self.delegate trackImpression]; -} - -- (void)videoPlayerContainerViewDidCompleteVideo:(MPVideoPlayerContainerView *)videoPlayerContainerView duration:(NSTimeInterval)duration { - [self.vastTracking handleVideoEvent:MPVideoEventComplete videoTimeOffset:duration]; - - if ([self.delegate conformsToProtocol:@protocol(MPPrivateRewardedVideoCustomEventDelegate)]) { - [self.delegate rewardedVideoShouldRewardUserForCustomEvent:self reward:self.delegate.configuration.selectedReward]; - } -} - -- (void)videoPlayerContainerView:(MPVideoPlayerContainerView *)videoPlayerContainerView - videoDidReachProgressTime:(NSTimeInterval)videoProgress - duration:(NSTimeInterval)duration { - [self.vastTracking handleVideoProgressEvent:videoProgress videoDuration:duration]; -} - -- (void)videoPlayerContainerView:(MPVideoPlayerContainerView *)videoPlayerContainerView - didTriggerEvent:(MPVideoPlayerEvent)event - videoProgress:(NSTimeInterval)videoProgress { - switch (event) { - case MPVideoPlayerEvent_ClickThrough: { - [self.adDestinationDisplayAgent displayDestinationForURL:self.videoConfig.clickThroughURL]; - - // need to take care of both VAST level and ad level click tracking - [self.vastTracking handleVideoEvent:MPVideoEventClick videoTimeOffset:videoProgress]; - if (self.adConfig.clickTrackingURL != nil) { // prevent crash: nil element in set - [self.vastTracking uniquelySendURLs:@[self.adConfig.clickTrackingURL]]; - } - - // No need for call `[self.delegate trackClick]` since `enableAutomaticImpressionAndClickTracking` is NO - if ([self.delegate conformsToProtocol:@protocol(MPInterstitialCustomEventDelegate)]) { - [self.delegate interstitialCustomEventDidReceiveTapEvent:self]; - } else if ([self.delegate conformsToProtocol:@protocol(MPRewardedVideoCustomEventDelegate)]) { - [self.delegate rewardedVideoDidReceiveTapEventForCustomEvent:self]; - } else { - MPLogInfo(@"%s unexpected delegate: %@", __FUNCTION__, self.delegate); - } - break; - } - case MPVideoPlayerEvent_Close: { - // Typically the creative only has one of the "close" tracker and the "closeLinear" - // tracker. If it has both trackers, we send both as it asks for. - [self.vastTracking handleVideoEvent:MPVideoEventClose videoTimeOffset:videoProgress]; - [self.vastTracking handleVideoEvent:MPVideoEventCloseLinear videoTimeOffset:videoProgress]; - [self.vastTracking stopViewabilityTracking]; - [self dismissPlayerViewController]; - break; - } - case MPVideoPlayerEvent_Skip: { - // Typically the creative only has one of the "close" tracker and the "closeLinear" - // tracker. If it has both trackers, we send both as it asks for. - [self.vastTracking handleVideoEvent:MPVideoEventSkip videoTimeOffset:videoProgress]; - [self.vastTracking handleVideoEvent:MPVideoEventClose videoTimeOffset:videoProgress]; - [self.vastTracking handleVideoEvent:MPVideoEventCloseLinear videoTimeOffset:videoProgress]; - [self.vastTracking stopViewabilityTracking]; - [self dismissPlayerViewController]; - break; - } - } -} - -#pragma mark - industry icon view - -- (void)videoPlayerContainerView:(MPVideoPlayerContainerView *)videoPlayerContainerView - didShowIndustryIconView:(MPVASTIndustryIconView *)iconView { - [self.vastTracking uniquelySendURLs:iconView.icon.viewTrackingURLs]; -} - -- (void)videoPlayerContainerView:(MPVideoPlayerContainerView *)videoPlayerView - didClickIndustryIconView:(MPVASTIndustryIconView *)iconView - overridingClickThroughURL:(NSURL * _Nullable)url { - if (url.absoluteString.length > 0) { - [self.adDestinationDisplayAgent displayDestinationForURL:url]; - } else { - [self.adDestinationDisplayAgent displayDestinationForURL:iconView.icon.clickThroughURL]; - } - - [self.playerViewController disableAppLifeCycleEventObservationForAutoPlayPause]; - [self.vastTracking uniquelySendURLs:iconView.icon.clickTrackingURLs]; -} - -#pragma mark - companion ad view - -- (void)videoPlayerContainerView:(MPVideoPlayerContainerView *)videoPlayerContainerView - didShowCompanionAdView:(MPVASTCompanionAdView *)companionAdView { - // Aggregate trackers - NSMutableSet *urls = [NSMutableSet new]; - for (MPVASTTrackingEvent *event in companionAdView.ad.creativeViewTrackers) { - [urls addObject:event.URL]; - } - - // Additional trackers - NSArray *additionalTrackingUrls = self.adConfig.vastVideoTrackers[MPVideoEventCompanionAdView]; - [additionalTrackingUrls enumerateObjectsUsingBlock:^(MPVASTTrackingEvent * _Nonnull event, NSUInteger idx, BOOL * _Nonnull stop) { - [urls addObject:event.URL]; - }]; - - [self.vastTracking uniquelySendURLs:urls.allObjects]; -} - -- (void)videoPlayerContainerView:(MPVideoPlayerContainerView *)videoPlayerContainerView - didClickCompanionAdView:(MPVASTCompanionAdView *)companionAdView - overridingClickThroughURL:(NSURL * _Nullable)url { - // Navigation to destination - if (url.absoluteString.length > 0) { - [self.adDestinationDisplayAgent displayDestinationForURL:url]; - } else { - [self.adDestinationDisplayAgent displayDestinationForURL:companionAdView.ad.clickThroughURL]; - } - - [self.playerViewController disableAppLifeCycleEventObservationForAutoPlayPause]; - - // Aggregate trackers with additional trackers - NSMutableSet *urls = [NSMutableSet set]; - if (companionAdView.ad.clickTrackingURLs != nil) { - [urls addObjectsFromArray:companionAdView.ad.clickTrackingURLs]; - } - if (self.adConfig.clickTrackingURL != nil) { - [urls addObject:self.adConfig.clickTrackingURL]; - } - - NSArray *additionalTrackingUrls = self.adConfig.vastVideoTrackers[MPVideoEventCompanionAdClick]; - [additionalTrackingUrls enumerateObjectsUsingBlock:^(MPVASTTrackingEvent * _Nonnull event, NSUInteger idx, BOOL * _Nonnull stop) { - [urls addObject:event.URL]; - }]; - - [self.vastTracking uniquelySendURLs:urls.allObjects]; - - // Notify delegates - if ([self.delegate conformsToProtocol:@protocol(MPInterstitialCustomEventDelegate)]) { - [self.delegate interstitialCustomEventDidReceiveTapEvent:self]; - } else if ([self.delegate conformsToProtocol:@protocol(MPRewardedVideoCustomEventDelegate)]) { - [self.delegate rewardedVideoDidReceiveTapEventForCustomEvent:self]; - } else { - MPLogInfo(@"%s unexpected delegate: %@", __FUNCTION__, self.delegate); - } -} - -- (void)videoPlayerContainerView:(MPVideoPlayerContainerView *)videoPlayerContainerView - didFailToLoadCompanionAdView:(MPVASTCompanionAdView *)companionAdView { - [self.vastTracking handleVASTError:MPVASTErrorGeneralCompanionAdsError - videoTimeOffset:kMPVASTMacroProcessorUnknownTimeOffset]; -} - -- (void)videoPlayerContainerView:(MPVideoPlayerContainerView *)videoPlayerContainerView - companionAdViewRequestDismiss:(MPVASTCompanionAdView *)companionAdView { - [self dismissPlayerViewController]; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPVASTTracking.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPVASTTracking.h deleted file mode 100644 index 78e290e0af..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPVASTTracking.h +++ /dev/null @@ -1,64 +0,0 @@ -// -// MPVASTTracking.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPVASTError.h" -#import "MPVideoConfig.h" - -NS_ASSUME_NONNULL_BEGIN - -@protocol MPVASTTracking - -- (instancetype)initWithVideoConfig:(MPVideoConfig *)videoConfig videoURL:(NSURL *)videoURL; - -/** -Register the video view for viewability tracking. -* @param videoView A view that is backed by `AVPlayerLayer`, or a superview of it -*/ -- (void)registerVideoViewForViewabilityTracking:(UIView *)videoView; - -/** - Stop viewability tracking activities. - */ -- (void)stopViewabilityTracking; - -/** - Call this when a new video event (@c MPVideoEvent) happens. - - @note Some events allows repetition, and some don't. - @note For @c MPVideoEventProgress, call @c handleVideoProgressEvent:videoDuration: instead. - */ -- (void)handleVideoEvent:(MPVideoEvent)videoEvent videoTimeOffset:(NSTimeInterval)videoTimeOffset; - -/** - Call this when the video play progress is updated. - - @note Do not call this for video complete event. Use @c MPVideoEventComplete instead. Neither - custom timer nor iOS video player time observer manages the video complete event very well (with a - high chance of not firing at all due to timing issue), and iOS provides a specific notification for - the video complete event. - */ -- (void)handleVideoProgressEvent:(NSTimeInterval)videoTimeOffset videoDuration:(NSTimeInterval)videoDuration; - -/** - Send tracking URL's that are not defined in @c MPVideoConfig, such as the click tracking and impression - tracking URL's defined in a @c MPAdConfiguration that is not available in @c MPVideoConfig. - */ -- (void)uniquelySendURLs:(NSArray *)urls; - -/** - Call this when a VAST related error happens. - */ -- (void)handleVASTError:(MPVASTError)error videoTimeOffset:(NSTimeInterval)videoTimeOffset; - -@end - -@interface MPVASTTracking : NSObject -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPVASTTracking.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPVASTTracking.m deleted file mode 100644 index d9b30efd4a..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPVASTTracking.m +++ /dev/null @@ -1,251 +0,0 @@ -// -// MPVASTTracking.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPAnalyticsTracker.h" -#import "MPVASTMacroProcessor.h" -#import "MPVASTTracking.h" -#import "MPViewabilityTracker.h" - -static dispatch_once_t dispatchOnceToken; // for `oneOffEventTypes` -static NSSet *oneOffEventTypes; - -@interface MPVASTTracking() - -@property (nonatomic, strong) MPVideoConfig *videoConfig; -@property (nonatomic, strong) NSURL *videoURL; -@property (nonatomic, strong) id analyticsTracker; // Note: only send URL's with `uniquelySendURLs` -@property (nonatomic, strong) MPViewabilityTracker *viewabilityTracker; - -/** - The key is a @c MPVideoEvent string, and the value is a set of fired @c MPVASTTrackingEvent of the same type. - - Each event could associate to multiple tracking URL's and thus multiple `MPVASTTrackingEvent`s. For - most events except @c MPVideoEventProgress, all the tracking URL's are sent at the same time. For - the @c MPVideoEventProgress case, typically different URL's are supposed to be sent at different - times (at 0s, 5s, 10s, and so on), and thus we have to use a dictionary with @c MPVideoEvent as key - and @c NSMutableSet as the value to keep track of the fired status, instead - of just a simple @c NSMutableSet that cannot differentiate the @c MPVideoEventProgress - events of different play times. - */ -@property (nonatomic, strong) NSMutableDictionary *> *firedEventTable; - -/** - @c firedEventTable is good for tracking events targetting the video. However, each VAST ad might - have multiple industry icons and companions ads, and we cannot reuse one event name across different - industry icons / companions ads. This set is to make sure each URL is only sent once. - */ -@property (nonatomic, strong) NSMutableSet *sentURLs; - -@end - -@implementation MPVASTTracking - -- (instancetype)initWithVideoConfig:(MPVideoConfig *)videoConfig videoURL:(NSURL *)videoURL { - self = [super init]; - if (self) { - _videoConfig = videoConfig; - _videoURL = videoURL; - _analyticsTracker = [MPAnalyticsTracker sharedTracker]; - _firedEventTable = [NSMutableDictionary new]; - _sentURLs = [NSMutableSet new]; - - dispatch_once(&dispatchOnceToken, ^{ - oneOffEventTypes = [NSSet setWithObjects: - MPVideoEventClick, - MPVideoEventClose, - MPVideoEventCloseLinear, - MPVideoEventCompanionAdView, - MPVideoEventCompanionAdClick, - MPVideoEventComplete, - MPVideoEventCreativeView, - MPVideoEventFirstQuartile, - MPVideoEventImpression, - MPVideoEventMidpoint, - MPVideoEventProgress, - MPVideoEventSkip, - MPVideoEventStart, - MPVideoEventThirdQuartile, - nil]; - }); - } - return self; -} - -- (void)registerVideoViewForViewabilityTracking:(UIView *)videoView { - self.viewabilityTracker = [[MPViewabilityTracker alloc] initWithNativeVideoView:videoView - startTrackingImmediately:YES]; -} - -- (void)stopViewabilityTracking { - [self.viewabilityTracker stopTracking]; -} - -- (void)uniquelySendURLs:(NSArray *)urls { - NSMutableSet *urlsToSend = [NSMutableSet new]; - for (NSURL *url in urls) { - if (![self.sentURLs containsObject:url]) { - [urlsToSend addObject:url]; - } - } - [self.analyticsTracker sendTrackingRequestForURLs:urlsToSend.allObjects]; - [self.sentURLs unionSet:urlsToSend]; -} - -- (void)handleVideoEvent:(MPVideoEvent)videoEvent videoTimeOffset:(NSTimeInterval)videoTimeOffset { - BOOL disallowPreviouslySentURLs = [oneOffEventTypes containsObject:videoEvent]; - - if (disallowPreviouslySentURLs - && self.firedEventTable[videoEvent] != nil) { - return; // do not fire more than once - } - - if ([videoEvent isEqualToString:MPVideoEventError]) { - [self handleVASTError:MPVASTErrorCannotPlayMedia videoTimeOffset:videoTimeOffset]; - return; - } - - if (self.videoConfig == nil && [videoEvent isEqualToString:MPVideoEventError] == NO) { - return; // only allow `videoConfig` to be nil for error event - } - - if ([videoEvent isEqualToString:MPVideoEventProgress]) { - return; // call `handleVideoProgressEvent:videoDuration:` instead - } - - NSMutableSet *firedEvents = [NSMutableSet new]; - NSMutableSet *urls = [NSMutableSet new]; - for (MPVASTTrackingEvent *event in [self.videoConfig trackingEventsForKey:videoEvent]) { - [urls addObject:event.URL]; - [firedEvents addObject:event]; - } - - if (urls.count > 0) { - [self processAndSendURLs:urls - disallowPreviouslySentURLs:disallowPreviouslySentURLs - errorCode:nil - videoTimeOffset:videoTimeOffset]; - } - self.firedEventTable[videoEvent] = firedEvents; - - [self.viewabilityTracker trackNativeVideoEvent:videoEvent eventInfo:nil]; -} - -- (void)handleVideoProgressEvent:(NSTimeInterval)videoTimeOffset videoDuration:(NSTimeInterval)videoDuration { - if (videoTimeOffset < 0 || videoDuration <= 0) { - return; - } - - if ((0.25 * videoDuration) <= videoTimeOffset - && self.firedEventTable[MPVideoEventFirstQuartile] == nil) { - [self handleVideoEvent:MPVideoEventFirstQuartile videoTimeOffset:videoTimeOffset]; - } - if ((0.50 * videoDuration) <= videoTimeOffset - && self.firedEventTable[MPVideoEventMidpoint] == nil) { - [self handleVideoEvent:MPVideoEventMidpoint videoTimeOffset:videoTimeOffset]; - } - if ((0.75 * videoDuration) <= videoTimeOffset - && self.firedEventTable[MPVideoEventThirdQuartile] == nil) { - [self handleVideoEvent:MPVideoEventThirdQuartile videoTimeOffset:videoTimeOffset]; - } - // The Complete event is not handled in this method intentionally. Please see header comments. - - // `MPVideoEventProgress` specific handling: do not use `handleVideoEvent:videoTimeOffset:` - NSMutableSet *urls = [NSMutableSet new]; - NSMutableSet *firedProgressEvents = self.firedEventTable[MPVideoEventProgress]; - for (MPVASTTrackingEvent *event in [self.videoConfig trackingEventsForKey:MPVideoEventProgress]) { - if ([firedProgressEvents containsObject:event] == NO - && [event.progressOffset timeIntervalForVideoWithDuration:videoDuration] <= videoTimeOffset) { - [urls addObject:event.URL]; - - if (firedProgressEvents == nil) { - firedProgressEvents = [NSMutableSet new]; - } - [firedProgressEvents addObject:event]; - } - } - - if (urls.count > 0) { - [self processAndSendURLs:urls - disallowPreviouslySentURLs:YES - errorCode:nil - videoTimeOffset:videoTimeOffset]; - } - self.firedEventTable[MPVideoEventProgress] = firedProgressEvents; -} - -- (void)handleVASTError:(MPVASTError)error videoTimeOffset:(NSTimeInterval)videoTimeOffset { - NSMutableSet *urls = [NSMutableSet new]; - for (MPVASTTrackingEvent *event in [self.videoConfig trackingEventsForKey:MPVideoEventError]) { - [urls addObject:event.URL]; - } - [self processAndSendURLs:urls - disallowPreviouslySentURLs:NO - errorCode:[NSString stringWithFormat:@"%lu", (unsigned long)error] - videoTimeOffset:videoTimeOffset]; - - [self.viewabilityTracker trackNativeVideoEvent:MPVideoEventError - eventInfo:@{@"message": [self stringFromVASTError:error]}]; -} - -#pragma mark - Private - -/** - @c errorCode is the @c NSString representation of @c `MPVASTError`. - */ -- (void)processAndSendURLs:(NSSet *)urls -disallowPreviouslySentURLs:(BOOL)disallowPreviouslySentURLs - errorCode:(NSString *)errorCode - videoTimeOffset:(NSTimeInterval)videoTimeOffset { - if ([urls count] == 0) { - return; - } - - NSMutableSet *processedURLs = [NSMutableSet new]; - for (NSURL *url in urls) { - [processedURLs addObject:[MPVASTMacroProcessor - macroExpandedURLForURL:url - errorCode:errorCode - videoTimeOffset:videoTimeOffset - videoAssetURL:self.videoURL]]; - } - - if (disallowPreviouslySentURLs) { - [self uniquelySendURLs:urls.allObjects]; - } - else { - [self.analyticsTracker sendTrackingRequestForURLs:urls.allObjects]; - } -} - -- (NSString *)stringFromVASTError:(MPVASTError)error { - // return the message from `MPVASTError` comments - switch (error) { - case MPVASTErrorXMLParseFailure: - return @"XML parsing error."; - case MPVASTErrorCannotPlayMedia: - return @"Trafficking error. Media player received an Ad type that it was not expecting and/or cannot play."; - case MPVASTErrorExceededMaximumWrapperDepth: - return @"Wrapper limit reached, as defined by the media player."; - case MPVASTErrorNoVASTResponseAfterOneOrMoreWrappers: - return @"No VAST response after one or more Wrappers."; - case MPVASTErrorFailedToDisplayAdFromInlineResponse: - return @"InLine response returned ad unit that failed to result in ad display within defined time limit."; - case MPVASTErrorUnableToFindLinearAdOrMediaFileFromURI: - return @"General Linear error. Media player is unable to display the Linear Ad."; - case MPVASTErrorTimeoutOfMediaFileURI: - return @"File not found. Unable to find Linear/MediaFile from URI."; - case MPVASTErrorMezzanineIsBeingProccessed: - return @"Mezzanine is in the process of being downloaded for the first time."; - case MPVASTErrorGeneralCompanionAdsError: - return @"General CompanionAds error."; - case MPVASTErrorUndefined: - return @"Undefined Error."; - } -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPWebBrowserUserAgentInfo.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPWebBrowserUserAgentInfo.h deleted file mode 100644 index 84aa0133a3..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPWebBrowserUserAgentInfo.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// MPWebBrowserUserAgentInfo.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface MPWebBrowserUserAgentInfo : NSObject - -/** - The current user agent as determined by @c WKWebView. - @returns The user agent. -*/ -+ (NSString *)userAgent; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPWebBrowserUserAgentInfo.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPWebBrowserUserAgentInfo.m deleted file mode 100644 index b12e81f13a..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPWebBrowserUserAgentInfo.m +++ /dev/null @@ -1,74 +0,0 @@ -// -// MPWebBrowserUserAgentInfo.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPLogging.h" -#import "MPWebBrowserUserAgentInfo.h" - -/** - Global variable for holding the user agent string. - */ -NSString *gUserAgent = nil; - -/** - Global variable for keeping `WKWebView` alive until the async call for user agent finishes. - Note: JavaScript evaluation will fail if the `WKWebView` is deallocated before completion. - */ -WKWebView *gWkWebView = nil; - -/** - The `UserDefaults` key for accessing the cached user agent value. - */ -NSString * const kUserDefaultsUserAgentKey = @"com.mopub.mopub-ios-sdk.user-agent"; - -@implementation MPWebBrowserUserAgentInfo - -+ (void)load { - // No need for "dispatch once" since `load` is called only once during app launch. - [self obtainUserAgentFromWebView]; -} - -+ (void)obtainUserAgentFromWebView { - NSString *cachedUserAgent = [NSUserDefaults.standardUserDefaults stringForKey:kUserDefaultsUserAgentKey]; - if (cachedUserAgent.length > 0) { - // Use the cached value before the async JavaScript evaluation is successful. - gUserAgent = cachedUserAgent; - } else { - /* - Use the composed value before the async JavaScript evaluation is successful. This composed - user agent value should be very close to the actual value like this one: - "Mozilla/5.0 (iPhone; CPU iPhone OS 12_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148" - The history of user agent is very long, complicated, and confusing. Please search online to - learn about why the user agent value looks like this. - */ - - NSString *systemVersion = [[UIDevice currentDevice].systemVersion stringByReplacingOccurrencesOfString:@"." withString:@"_"]; - NSString *deviceType = UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? @"iPad" : @"iPhone"; - gUserAgent = [NSString stringWithFormat:@"Mozilla/5.0 (%@; CPU %@ OS %@ like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148", - deviceType, deviceType, systemVersion]; - } - - dispatch_async(dispatch_get_main_queue(), ^{ - gWkWebView = [WKWebView new]; // `WKWebView` must be created in main thread - [gWkWebView evaluateJavaScript:@"navigator.userAgent" completionHandler:^(id _Nullable result, NSError * _Nullable error) { - if (error != nil) { - MPLogInfo(@"%@ error: %@", NSStringFromSelector(_cmd), error); - } else if ([result isKindOfClass:NSString.class]) { - gUserAgent = result; - [NSUserDefaults.standardUserDefaults setValue:result forKeyPath:kUserDefaultsUserAgentKey]; - } - gWkWebView = nil; - }]; - }); -} - -+ (NSString *)userAgent { - return gUserAgent; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPForceableOrientationProtocol.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPForceableOrientationProtocol.h deleted file mode 100644 index f39dbd8970..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPForceableOrientationProtocol.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// MPForceableOrientationProtocol.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@protocol MPForceableOrientationProtocol - -/** - * An orientation mask that defines the orientations the view controller supports. - * This cannot force a change in orientation though. - */ -- (void)setSupportedOrientationMask:(UIInterfaceOrientationMask)supportedOrientationMask; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPMRAIDBannerCustomEvent.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPMRAIDBannerCustomEvent.h deleted file mode 100644 index 82eb715c9e..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPMRAIDBannerCustomEvent.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// MPMRAIDBannerCustomEvent.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPBannerCustomEvent.h" -#import "MPPrivateBannerCustomEventDelegate.h" - -@interface MPMRAIDBannerCustomEvent : MPBannerCustomEvent - -@property (nonatomic, weak) id delegate; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPMRAIDBannerCustomEvent.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPMRAIDBannerCustomEvent.m deleted file mode 100644 index 99307040c3..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPMRAIDBannerCustomEvent.m +++ /dev/null @@ -1,119 +0,0 @@ -// -// MPMRAIDBannerCustomEvent.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPMRAIDBannerCustomEvent.h" -#import "MPLogging.h" -#import "MPAdConfiguration.h" -#import "MRController.h" -#import "MPError.h" -#import "MPWebView.h" -#import "MPViewabilityTracker.h" - -@interface MPMRAIDBannerCustomEvent () - -@property (nonatomic, strong) MRController *mraidController; - -@end - -@implementation MPMRAIDBannerCustomEvent - -// Explicitly `@synthesize` here to fix a "-Wobjc-property-synthesis" warning because super class `delegate` is -// `id` and this `delegate` is `id` -@synthesize delegate; - -- (void)requestAdWithSize:(CGSize)size customEventInfo:(NSDictionary *)info adMarkup:(NSString *)adMarkup -{ - MPAdConfiguration *configuration = self.delegate.configuration; - - MPLogAdEvent([MPLogEvent adLoadAttemptForAdapter:NSStringFromClass(configuration.customEventClass) dspCreativeId:configuration.dspCreativeId dspName:nil], self.adUnitId); - - CGRect adViewFrame = CGRectZero; - if ([configuration hasPreferredSize]) { - adViewFrame = CGRectMake(0, 0, configuration.preferredSize.width, - configuration.preferredSize.height); - } - - self.mraidController = [[MRController alloc] initWithAdViewFrame:adViewFrame - supportedOrientations:configuration.orientationType - adPlacementType:MRAdViewPlacementTypeInline - delegate:self]; - [self.mraidController loadAdWithConfiguration:configuration]; -} - -#pragma mark - MRControllerDelegate - -- (NSString *)adUnitId -{ - return [self.delegate adUnitId]; -} - -- (UIViewController *)viewControllerForPresentingModalView -{ - return [self.delegate viewControllerForPresentingModalView]; -} - -- (void)adDidLoad:(UIView *)adView -{ - MPLogAdEvent([MPLogEvent adLoadSuccessForAdapter:NSStringFromClass(self.class)], self.adUnitId); - [self.delegate bannerCustomEvent:self didLoadAd:adView]; -} - -- (void)adDidFailToLoad:(UIView *)adView -{ - NSString * message = [NSString stringWithFormat:@"Failed to load creative:\n%@", self.delegate.configuration.adResponseHTMLString]; - NSError * error = [NSError errorWithCode:MOPUBErrorAdapterFailedToLoadAd localizedDescription:message]; - - MPLogAdEvent([MPLogEvent adLoadFailedForAdapter:NSStringFromClass(self.class) error:error], self.adUnitId); - [self.delegate bannerCustomEvent:self didFailToLoadAdWithError:error]; -} - -- (void)adDidReceiveClickthrough:(NSURL *)url -{ - [self.delegate trackClick]; -} - -- (void)closeButtonPressed -{ - //don't care -} - -- (void)appShouldSuspendForAd:(UIView *)adView -{ - [self.delegate bannerCustomEventWillBeginAction:self]; -} - -- (void)appShouldResumeFromAd:(UIView *)adView -{ - [self.delegate bannerCustomEventDidFinishAction:self]; -} - -- (void)trackImpressionsIncludedInMarkup -{ - [self.mraidController triggerWebviewDidAppear]; -} - -- (void)startViewabilityTracker -{ - [self.mraidController startViewabilityTracking]; -} - -- (void)adWillExpand:(UIView *)adView -{ - if ([self.delegate respondsToSelector:@selector(bannerCustomEventWillExpandAd:)]) { - [self.delegate bannerCustomEventWillExpandAd:self]; - } -} - -- (void)adDidCollapse:(UIView *)adView -{ - if ([self.delegate respondsToSelector:@selector(bannerCustomEventDidCollapseAd:)]) { - [self.delegate bannerCustomEventDidCollapseAd:self]; - } -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPMRAIDInterstitialCustomEvent.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPMRAIDInterstitialCustomEvent.h deleted file mode 100644 index e1ec8ceedf..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPMRAIDInterstitialCustomEvent.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// MPMRAIDInterstitialCustomEvent.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPInterstitialCustomEvent.h" -#import "MPPrivateInterstitialCustomEventDelegate.h" - -@interface MPMRAIDInterstitialCustomEvent : MPInterstitialCustomEvent - -@property (nonatomic, weak) id delegate; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPMRAIDInterstitialCustomEvent.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPMRAIDInterstitialCustomEvent.m deleted file mode 100644 index 1a607a25a7..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPMRAIDInterstitialCustomEvent.m +++ /dev/null @@ -1,117 +0,0 @@ -// -// MPMRAIDInterstitialCustomEvent.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPMRAIDInterstitialCustomEvent.h" -#import "MPMRAIDInterstitialViewController.h" -#import "MPAdConfiguration.h" -#import "MPError.h" -#import "MPLogging.h" - -@interface MPMRAIDInterstitialCustomEvent () - -@property (nonatomic, strong) MPMRAIDInterstitialViewController *interstitial; - -@end - -@interface MPMRAIDInterstitialCustomEvent (MPInterstitialViewControllerDelegate) -@end - -@implementation MPMRAIDInterstitialCustomEvent - -// Explicitly `@synthesize` here to fix a "-Wobjc-property-synthesis" warning because super class `delegate` is -// `id` and this `delegate` is `id` -@synthesize delegate; - -- (NSString *)adUnitId -{ - return [self.delegate adUnitId]; -} - -- (void)requestInterstitialWithCustomEventInfo:(NSDictionary *)info adMarkup:(NSString *)adMarkup -{ - MPAdConfiguration * configuration = self.delegate.configuration; - MPLogAdEvent([MPLogEvent adLoadAttemptForAdapter:NSStringFromClass(self.class) dspCreativeId:configuration.dspCreativeId dspName:nil], self.adUnitId); - - self.interstitial = [[MPMRAIDInterstitialViewController alloc] initWithAdConfiguration:configuration]; - self.interstitial.delegate = self; - - // The MRAID ad view will handle the close button so we don't need the MPInterstitialViewController's close button. - [self.interstitial setCloseButtonStyle:MPInterstitialCloseButtonStyleAlwaysHidden]; - [self.interstitial startLoading]; -} - -- (void)showInterstitialFromRootViewController:(UIViewController *)controller -{ - MPLogAdEvent([MPLogEvent adShowAttemptForAdapter:NSStringFromClass(self.class)], self.adUnitId); - [self.interstitial presentInterstitialFromViewController:controller complete:^(NSError * error) { - if (error != nil) { - MPLogAdEvent([MPLogEvent adShowFailedForAdapter:NSStringFromClass(self.class) error:error], self.adUnitId); - } - else { - MPLogAdEvent([MPLogEvent adShowSuccessForAdapter:NSStringFromClass(self.class)], self.adUnitId); - } - }]; -} - -@end - -#pragma mark - MPInterstitialViewControllerDelegate - -@implementation MPMRAIDInterstitialCustomEvent (MPInterstitialViewControllerDelegate) - -- (void)interstitialDidLoadAd:(id)interstitial -{ - MPLogAdEvent([MPLogEvent adLoadSuccessForAdapter:NSStringFromClass(self.class)], self.adUnitId); - [self.delegate interstitialCustomEvent:self didLoadAd:self.interstitial]; -} - -- (void)interstitialDidFailToLoadAd:(id)interstitial -{ - NSString * message = [NSString stringWithFormat:@"Failed to load creative:\n%@", self.delegate.configuration.adResponseHTMLString]; - NSError * error = [NSError errorWithCode:MOPUBErrorAdapterFailedToLoadAd localizedDescription:message]; - - MPLogAdEvent([MPLogEvent adLoadFailedForAdapter:NSStringFromClass(self.class) error:error], self.adUnitId); - [self.delegate interstitialCustomEvent:self didFailToLoadAdWithError:error]; -} - -- (void)interstitialWillAppear:(id)interstitial -{ - [self.delegate interstitialCustomEventWillAppear:self]; -} - -- (void)interstitialDidAppear:(id)interstitial -{ - [self.delegate interstitialCustomEventDidAppear:self]; -} - -- (void)interstitialWillDisappear:(id)interstitial -{ - [self.delegate interstitialCustomEventWillDisappear:self]; -} - -- (void)interstitialDidDisappear:(id)interstitial -{ - [self.delegate interstitialCustomEventDidDisappear:self]; - - // Deallocate the interstitial as we don't need it anymore. If we don't deallocate the interstitial after dismissal, - // then the html in the webview will continue to run which could lead to bugs such as continuing to play the sound of an inline - // video since the app may hold onto the interstitial ad controller. Moreover, we keep an array of controllers around as well. - self.interstitial = nil; -} - -- (void)interstitialDidReceiveTapEvent:(id)interstitial -{ - [self.delegate interstitialCustomEventDidReceiveTapEvent:self]; -} - -- (void)interstitialWillLeaveApplication:(id)interstitial -{ - [self.delegate interstitialCustomEventWillLeaveApplication:self]; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPMRAIDInterstitialViewController.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPMRAIDInterstitialViewController.h deleted file mode 100644 index 5b4a1b2e84..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPMRAIDInterstitialViewController.h +++ /dev/null @@ -1,24 +0,0 @@ -// -// MPMRAIDInterstitialViewController.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPInterstitialViewController.h" -#import "MPForceableOrientationProtocol.h" - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@class MPAdConfiguration; - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MPMRAIDInterstitialViewController : MPInterstitialViewController - -- (id)initWithAdConfiguration:(MPAdConfiguration *)configuration; -- (void)startLoading; - -@end - diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPMRAIDInterstitialViewController.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPMRAIDInterstitialViewController.m deleted file mode 100644 index 4590aee1e7..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPMRAIDInterstitialViewController.m +++ /dev/null @@ -1,176 +0,0 @@ -// -// MPMRAIDInterstitialViewController.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPMRAIDInterstitialViewController.h" -#import "MPAdConfiguration.h" -#import "MRController.h" - -@interface MPMRAIDInterstitialViewController () - -@property (nonatomic, strong) MPAdConfiguration *configuration; -@property (nonatomic, strong) MRController *mraidController; -@property (nonatomic, strong) UIView *interstitialView; -@property (nonatomic, assign) UIInterfaceOrientationMask supportedOrientationMask; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MPMRAIDInterstitialViewController - - -- (id)initWithAdConfiguration:(MPAdConfiguration *)configuration -{ - self = [super init]; - if (self) { - CGFloat width = MAX(configuration.preferredSize.width, 1); - CGFloat height = MAX(configuration.preferredSize.height, 1); - CGRect frame = CGRectMake(0, 0, width, height); - self.mraidController = [[MRController alloc] initWithAdViewFrame:frame - supportedOrientations:configuration.orientationType - adPlacementType:MRAdViewPlacementTypeInterstitial - delegate:self]; - - self.configuration = configuration; - self.orientationType = [self.configuration orientationType]; - } - return self; -} - -#pragma mark - Public - -- (void)startLoading -{ - [self.mraidController loadAdWithConfiguration:self.configuration]; -} - -- (void)willPresentInterstitial -{ - [self.mraidController handleMRAIDInterstitialWillPresentWithViewController:self]; - if ([self.delegate respondsToSelector:@selector(interstitialWillAppear:)]) { - [self.delegate interstitialWillAppear:self]; - } -} - -- (void)didPresentInterstitial -{ - // This ensures that we handle didPresentInterstitial at the end of the run loop, and prevents a bug - // where code is run before UIKit thinks the presentViewController animation is complete, even though - // this is is called from the completion block for said animation. - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0), dispatch_get_main_queue(), ^{ - [self.mraidController handleMRAIDInterstitialDidPresentWithViewController:self]; - if ([self.delegate respondsToSelector:@selector(interstitialDidAppear:)]) { - [self.delegate interstitialDidAppear:self]; - } - }); -} - -- (void)willDismissInterstitial -{ - [self.mraidController disableRequestHandling]; - if ([self.delegate respondsToSelector:@selector(interstitialWillDisappear:)]) { - [self.delegate interstitialWillDisappear:self]; - } -} - -- (void)didDismissInterstitial -{ - if ([self.delegate respondsToSelector:@selector(interstitialDidDisappear:)]) { - [self.delegate interstitialDidDisappear:self]; - } -} - -#pragma mark - MRControllerDelegate - -- (UIViewController *)viewControllerForPresentingModalView -{ - return self; -} - -- (void)adDidLoad:(UIView *)adView -{ - [self.interstitialView removeFromSuperview]; - - self.interstitialView = adView; - self.interstitialView.frame = self.view.bounds; - self.interstitialView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - [self.view addSubview:self.interstitialView]; - self.interstitialView.translatesAutoresizingMaskIntoConstraints = NO; - [NSLayoutConstraint activateConstraints:@[ - [self.interstitialView.topAnchor constraintEqualToAnchor:self.view.topAnchor], - [self.interstitialView.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor], - [self.interstitialView.trailingAnchor constraintEqualToAnchor:self.view.trailingAnchor], - [self.interstitialView.bottomAnchor constraintEqualToAnchor:self.view.bottomAnchor], - ]]; - - if ([self.delegate respondsToSelector:@selector(interstitialDidLoadAd:)]) { - [self.delegate interstitialDidLoadAd:self]; - } -} - -- (void)adDidFailToLoad:(UIView *)adView -{ - if ([self.delegate respondsToSelector:@selector(interstitialDidFailToLoadAd:)]) { - [self.delegate interstitialDidFailToLoadAd:self]; - } -} - -- (void)adWillClose:(UIView *)adView -{ - [self dismissInterstitialAnimated:YES]; -} - -- (void)adDidClose:(UIView *)adView -{ - // TODO: -} - -- (void)adDidReceiveClickthrough:(NSURL *)url -{ - [self.delegate interstitialDidReceiveTapEvent:self]; -} - -- (void)appShouldSuspendForAd:(UIView *)adView -{ - // no op -} - -- (void)appShouldResumeFromAd:(UIView *)adView -{ - // no op -} - -- (void)setSupportedOrientationMask:(UIInterfaceOrientationMask)supportedOrientationMask -{ - _supportedOrientationMask = supportedOrientationMask; - - // This should be called whenever the return value of -supportedInterfaceOrientations changes. Since the return - // value is based on _supportedOrientationMask, we do that here. Prevents possible rotation bugs. - [UIViewController attemptRotationToDeviceOrientation]; -} - -- (void)rewardedVideoEnded -{ - if ([self.delegate respondsToSelector:@selector(interstitialRewardedVideoEnded)]) { - [self.delegate interstitialRewardedVideoEnded]; - } -} - -#pragma mark - Orientation Handling - -- (UIInterfaceOrientationMask)supportedInterfaceOrientations -{ - return ([[UIApplication sharedApplication] mp_supportsOrientationMask:self.supportedOrientationMask]) ? self.supportedOrientationMask : [super supportedInterfaceOrientations]; -} - -- (BOOL)shouldAutorotate -{ - return YES; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRBridge.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRBridge.h deleted file mode 100644 index 3f792010d0..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRBridge.h +++ /dev/null @@ -1,80 +0,0 @@ -// -// MRBridge.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MRConstants.h" -#import "MPWebView.h" - -@class MRProperty; -@protocol MRBridgeDelegate; - -/** - * The `MRBridge` class is an intermediate object between native code and JavaScript for - * MRAID ads. The MRAID web view communicates events to `MRBridge` which translates them - * down to native code. Likewise, native code will communicate with `MRBridge` to execute - * commands inside the JavaScript. `MRBridge` also inserts mraid.js into the web view when - * loading an ad's HTML. - */ -@interface MRBridge : NSObject - -@property (nonatomic, assign) BOOL shouldHandleRequests; -@property (nonatomic, weak) id delegate; - -- (instancetype)initWithWebView:(MPWebView *)webView delegate:(id)delegate; - -- (void)loadHTMLString:(NSString *)HTML baseURL:(NSURL *)baseURL; -- (void)loadHTMLUrl:(NSURL *)url; - -- (void)fireReadyEvent; -- (void)fireChangeEventForProperty:(MRProperty *)property; -- (void)fireChangeEventsForProperties:(NSArray *)properties; -- (void)fireErrorEventForAction:(NSString *)action withMessage:(NSString *)message; - -/* - * fireSizeChangeEvent: will always execute the javascript to notify mraid bridge that the size of the ad may have - * changed. mraid.js will only fire the change event if the size has actually changed. - */ -- (void)fireSizeChangeEvent:(CGSize)size; - -- (void)fireSetScreenSize:(CGSize)size; -- (void)fireSetPlacementType:(NSString *)placementType; -- (void)fireSetCurrentPositionWithPositionRect:(CGRect)positionRect; -- (void)fireSetDefaultPositionWithPositionRect:(CGRect)positionRect; -- (void)fireSetMaxSize:(CGSize)maxSize; - -@end - -/** - * The delegate of an `MRBridge` object that implements `MRBridgeDelegate` must provide information - * about the state of an MRAID ad through `isLoadingAd` and `hasUserInteractedWithWebView` so `MRBridge` - * can correctly process web view events. The delegate will be notified of specific events that need - * to be handled natively for an MRAID ad. The delegate is also notified of most web view events so it - * can perform necessary actions such as changing the ad's state. - */ -@protocol MRBridgeDelegate - -- (BOOL)isLoadingAd; -- (MRAdViewPlacementType)placementType; -- (BOOL)hasUserInteractedWithWebViewForBridge:(MRBridge *)bridge; -- (UIViewController *)viewControllerForPresentingModalView; - -- (void)nativeCommandWillPresentModalView; -- (void)nativeCommandDidDismissModalView; - -- (void)bridge:(MRBridge *)bridge didFinishLoadingWebView:(MPWebView *)webView; -- (void)bridge:(MRBridge *)bridge didFailLoadingWebView:(MPWebView *)webView error:(NSError *)error; - -- (void)handleNativeCommandCloseWithBridge:(MRBridge *)bridge; -- (void)bridge:(MRBridge *)bridge performActionForMoPubSpecificURL:(NSURL *)url; -- (void)bridge:(MRBridge *)bridge handleDisplayForDestinationURL:(NSURL *)URL; -- (void)bridge:(MRBridge *)bridge handleNativeCommandUseCustomClose:(BOOL)useCustomClose; -- (void)bridge:(MRBridge *)bridge handleNativeCommandSetOrientationPropertiesWithForceOrientationMask:(UIInterfaceOrientationMask)forceOrientationMask; -- (void)bridge:(MRBridge *)bridge handleNativeCommandExpandWithURL:(NSURL *)url useCustomClose:(BOOL)useCustomClose; -- (void)bridge:(MRBridge *)bridge handleNativeCommandResizeWithParameters:(NSDictionary *)parameters; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRBridge.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRBridge.m deleted file mode 100644 index da7ba79795..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRBridge.m +++ /dev/null @@ -1,346 +0,0 @@ -// -// MRBridge.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MRBridge.h" -#import "MPConstants.h" -#import "MPCoreInstanceProvider+MRAID.h" -#import "MPError.h" -#import "MPLogging.h" -#import "NSURL+MPAdditions.h" -#import "MPGlobal.h" -#import "MRBundleManager.h" -#import "MRError.h" -#import "MRProperty.h" -#import "MRNativeCommandHandler.h" - -static NSString * const kMraidURLScheme = @"mraid"; -static NSString * const kSMSURLScheme = @"sms"; -static NSString * const kTelURLScheme = @"tel"; - -@interface MRBridge () - -@property (nonatomic, strong) MPWebView *webView; -@property (nonatomic, strong) MRNativeCommandHandler *nativeCommandHandler; - -@end - -@implementation MRBridge - -- (instancetype)initWithWebView:(MPWebView *)webView delegate:(id)delegate -{ - if (self = [super init]) { - _webView = webView; - _webView.delegate = self; - _nativeCommandHandler = [[MRNativeCommandHandler alloc] initWithDelegate:self]; - _shouldHandleRequests = YES; - _delegate = delegate; - } - - return self; -} - -- (void)dealloc -{ - _webView.delegate = nil; -} - -- (void)loadHTMLString:(NSString *)HTML baseURL:(NSURL *)baseURL -{ - // Bail out if we can't locate mraid.js. - if (![[MPCoreInstanceProvider sharedProvider] isMraidJavascriptAvailable]) { - NSError *error = [NSError errorWithDomain:MoPubMRAIDAdsSDKDomain code:MRErrorMRAIDJSNotFound userInfo:nil]; - [self.delegate bridge:self didFailLoadingWebView:self.webView error:error]; - return; - } - - // No URL - if (HTML == nil) { - NSError *error = [NSError errorWithDomain:kNSErrorDomain code:MOPUBErrorNoHTMLToLoad userInfo:nil]; - [self.delegate bridge:self didFailLoadingWebView:self.webView error:error]; - return; - } - - // Execute the javascript in the web view directly. - dispatch_async(dispatch_get_main_queue(), ^{ - [self.webView evaluateJavaScript:[[MPCoreInstanceProvider sharedProvider] mraidJavascript] completionHandler:^(id result, NSError *error){ - [self.webView loadHTMLString:HTML baseURL:baseURL]; - }]; - }); -} - -- (void)loadHTMLUrl:(NSURL *)url { - // Bail out if we can't locate mraid.js. - if (![[MPCoreInstanceProvider sharedProvider] isMraidJavascriptAvailable]) { - NSError *error = [NSError errorWithDomain:MoPubMRAIDAdsSDKDomain code:MRErrorMRAIDJSNotFound userInfo:nil]; - [self.delegate bridge:self didFailLoadingWebView:self.webView error:error]; - return; - } - - // No URL - if (url == nil) { - NSError *error = [NSError errorWithDomain:kNSErrorDomain code:MOPUBErrorNoHTMLUrlToLoad userInfo:nil]; - [self.delegate bridge:self didFailLoadingWebView:self.webView error:error]; - return; - } - - // Execute the javascript in the web view directly. - dispatch_async(dispatch_get_main_queue(), ^{ - [self.webView evaluateJavaScript:[[MPCoreInstanceProvider sharedProvider] mraidJavascript] completionHandler:^(id result, NSError *error){ - NSURLRequest *request = [NSURLRequest requestWithURL:url]; - [self.webView loadRequest:request]; - }]; - }); -} - -- (void)fireReadyEvent -{ - MPLogDebug(@"mraidbridge.fireReadyEvent()"); - [self executeJavascript:@"window.mraidbridge.fireReadyEvent();"]; -} - -- (void)fireChangeEventForProperty:(MRProperty *)property -{ - NSString *JSON = [NSString stringWithFormat:@"{%@}", property]; - - MPLogDebug(@"mraidbridge.fireChangeEvent(%@)", JSON); - [self executeJavascript:@"window.mraidbridge.fireChangeEvent(%@);", JSON]; -} - -- (void)fireChangeEventsForProperties:(NSArray *)properties -{ - NSString *JSON = [NSString stringWithFormat:@"{%@}", [properties componentsJoinedByString:@", "]]; - - MPLogDebug(@"mraidbridge.fireChangeEvent(%@)", JSON); - [self executeJavascript:@"window.mraidbridge.fireChangeEvent(%@);", JSON]; -} - -- (void)fireErrorEventForAction:(NSString *)action withMessage:(NSString *)message -{ - MPLogDebug(@"mraidbridge.fireErrorEvent('%@', '%@')", message, action); - [self executeJavascript:@"window.mraidbridge.fireErrorEvent('%@', '%@');", message, action]; -} - -- (void)fireSizeChangeEvent:(CGSize)size -{ - MPLogDebug(@"mraidbridge.notifySizeChangeEvent(%.1f, %.1f)", size.width, size.height); - [self executeJavascript:@"window.mraidbridge.notifySizeChangeEvent(%.1f, %.1f);", size.width, size.height]; -} - -- (void)fireSetScreenSize:(CGSize)size -{ - MPLogDebug(@"mraidbridge.setScreenSize(%.1f, %.1f)", size.width, size.height); - [self executeJavascript:@"window.mraidbridge.setScreenSize(%.1f, %.1f);", size.width, size.height]; -} - -- (void)fireSetPlacementType:(NSString *)placementType -{ - MPLogDebug(@"mraidbridge.setPlacementType('%@')", placementType); - [self executeJavascript:@"window.mraidbridge.setPlacementType('%@');", placementType]; -} - -- (void)fireSetCurrentPositionWithPositionRect:(CGRect)positionRect -{ - MPLogDebug(@"mraidbridge.setCurrentPosition(%.1f, %.1f, %.1f, %.1f)", positionRect.origin.x, positionRect.origin.y, - positionRect.size.width, positionRect.size.height); - [self executeJavascript:@"window.mraidbridge.setCurrentPosition(%.1f, %.1f, %.1f, %.1f);", positionRect.origin.x, positionRect.origin.y, - positionRect.size.width, positionRect.size.height]; -} - -- (void)fireSetDefaultPositionWithPositionRect:(CGRect)positionRect -{ - MPLogDebug(@"mraidbridge.setDefaultPosition(%.1f, %.1f, %.1f, %.1f)", positionRect.origin.x, positionRect.origin.y, - positionRect.size.width, positionRect.size.height); - [self executeJavascript:@"window.mraidbridge.setDefaultPosition(%.1f, %.1f, %.1f, %.1f);", positionRect.origin.x, positionRect.origin.y, - positionRect.size.width, positionRect.size.height]; -} - -- (void)fireSetMaxSize:(CGSize)maxSize -{ - MPLogDebug(@"mraidbridge.setMaxSize(%.1f, %.1f)", maxSize.width, maxSize.height); - [self executeJavascript:@"window.mraidbridge.setMaxSize(%.1f, %.1f);", maxSize.width, maxSize.height]; -} - -#pragma mark - - -- (BOOL)webView:(MPWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(WKNavigationType)navigationType -{ - NSURL *url = [request URL]; - NSMutableString *urlString = [NSMutableString stringWithString:[url absoluteString]]; - NSString *scheme = url.scheme; - - if ([scheme isEqualToString:kMraidURLScheme]) { - // Some native commands such as useCustomClose should be allowed to run even if we're not handling requests. - // The command handler will make sure we don't execute native commands that aren't allowed to execute while we're not handling requests. - MPLogDebug(@"Trying to process command: %@", urlString); - NSString *command = url.host; - NSDictionary *properties = MPDictionaryFromQueryString(url.query); - [self.nativeCommandHandler handleNativeCommand:command withProperties:properties]; - return NO; - } else if ([url mp_isMoPubScheme]) { - [self.delegate bridge:self performActionForMoPubSpecificURL:url]; - return NO; - } else if ([scheme isEqualToString:@"ios-log"]) { - [urlString replaceOccurrencesOfString:@"%20" - withString:@" " - options:NSLiteralSearch - range:NSMakeRange(0, [urlString length])]; - MPLogEvent([MPLogEvent javascriptConsoleLogWithMessage:urlString]); - return NO; - } - - if (!self.shouldHandleRequests) { - return NO; - } - - BOOL isLoading = [self.delegate isLoadingAd]; - BOOL userInteractedWithWebView = [self.delegate hasUserInteractedWithWebViewForBridge:self]; - BOOL safeToAutoloadLink = navigationType == WKNavigationTypeLinkActivated || userInteractedWithWebView || [url mp_isSafeForLoadingWithoutUserAction]; - - if (!isLoading && (navigationType == WKNavigationTypeOther || navigationType == WKNavigationTypeLinkActivated)) { - BOOL iframe = ![request.URL isEqual:request.mainDocumentURL]; - - // If we load a URL from an iFrame that did not originate from a click or - // is a deep link, handle normally and return safeToAutoloadLink. - if (iframe && !((navigationType == WKNavigationTypeLinkActivated) && ([scheme isEqualToString:@"https"] || [scheme isEqualToString:@"http"]))) { - return safeToAutoloadLink; - } - - // Otherwise, open the URL in a new web view. - [self.delegate bridge:self handleDisplayForDestinationURL:url]; - return NO; - } - - return safeToAutoloadLink; -} - -- (void)webViewDidStartLoad:(MPWebView *)webView -{ - // no op -} - -- (void)webViewDidFinishLoad:(MPWebView *)webView -{ - [self.delegate bridge:self didFinishLoadingWebView:webView]; -} - -- (void)webView:(MPWebView *)webView didFailLoadWithError:(NSError *)error -{ - if (error.code == NSURLErrorCancelled) { - return; - } - - [self.delegate bridge:self didFailLoadingWebView:webView error:error]; -} - -#pragma mark - Private - -- (void)executeJavascript:(NSString *)javascript, ... -{ - va_list args; - va_start(args, javascript); - [self executeJavascript:javascript withVarArgs:args]; - va_end(args); -} - -- (void)fireNativeCommandCompleteEvent:(NSString *)command -{ - MPLogDebug(@"mraidbridge.nativeCallComplete('%@')", command); - [self executeJavascript:@"window.mraidbridge.nativeCallComplete('%@');", command]; -} - -- (void)executeJavascript:(NSString *)javascript withVarArgs:(va_list)args -{ - NSString *js = [[NSString alloc] initWithFormat:javascript arguments:args]; - [self.webView stringByEvaluatingJavaScriptFromString:js]; -} - -#pragma mark - MRNativeCommandHandlerDelegate - -- (void)handleMRAIDUseCustomClose:(BOOL)useCustomClose -{ - [self.delegate bridge:self handleNativeCommandUseCustomClose:useCustomClose]; -} - -- (void)handleMRAIDSetOrientationPropertiesWithForceOrientationMask:(UIInterfaceOrientationMask)forceOrientationMask -{ - [self.delegate bridge:self handleNativeCommandSetOrientationPropertiesWithForceOrientationMask:forceOrientationMask]; -} - -- (void)handleMRAIDOpenCallForURL:(NSURL *)URL -{ - // sms:// and tel:// schemes are not supported by MoPub's MRAID system. - // The calls to these schemes via MRAID will be logged, but not allowed - // to execute. sms:// and tel:// schemes opened via normal HTML links - // will be handled by the OS per its default operating mode. - NSString *lowercasedScheme = URL.scheme.lowercaseString; - if ([lowercasedScheme isEqualToString:kSMSURLScheme] || [lowercasedScheme isEqualToString:kTelURLScheme]) { - MPLogDebug(@"mraidbridge.open() disallowed: %@ scheme is not supported", URL.scheme); - return; - } - - [self.delegate bridge:self handleDisplayForDestinationURL:URL]; -} - -- (void)handleMRAIDExpandWithParameters:(NSDictionary *)params -{ - id urlValue = [params objectForKey:@"url"]; - [self.delegate bridge:self handleNativeCommandExpandWithURL:(urlValue == [NSNull null]) ? nil : urlValue - useCustomClose:[[params objectForKey:@"useCustomClose"] boolValue]]; -} - -- (void)handleMRAIDResizeWithParameters:(NSDictionary *)params -{ - [self.delegate bridge:self handleNativeCommandResizeWithParameters:params]; -} - -- (void)handleMRAIDClose -{ - [self.delegate handleNativeCommandCloseWithBridge:self]; -} - -- (void)nativeCommandWillPresentModalView -{ - [self.delegate nativeCommandWillPresentModalView]; -} - -- (void)nativeCommandDidDismissModalView -{ - [self.delegate nativeCommandDidDismissModalView]; -} - -- (void)nativeCommandCompleted:(NSString *)command -{ - [self fireNativeCommandCompleteEvent:command]; -} - -- (void)nativeCommandFailed:(NSString *)command withMessage:(NSString *)message -{ - [self fireErrorEventForAction:command withMessage:message]; -} - -- (UIViewController *)viewControllerForPresentingModalView -{ - return [self.delegate viewControllerForPresentingModalView]; -} - -- (MRAdViewPlacementType)adViewPlacementType -{ - return [self.delegate placementType]; -} - -- (BOOL)userInteractedWithWebView -{ - return [self.delegate hasUserInteractedWithWebViewForBridge:self]; -} - -- (BOOL)handlingWebviewRequests -{ - return self.shouldHandleRequests; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRBundleManager.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRBundleManager.h deleted file mode 100644 index e3b17e78c6..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRBundleManager.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// MRBundleManager.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@interface MRBundleManager : NSObject - -+ (MRBundleManager *)sharedManager; -- (NSString *)mraidPath; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRBundleManager.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRBundleManager.m deleted file mode 100644 index c5251a0a9b..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRBundleManager.m +++ /dev/null @@ -1,33 +0,0 @@ -// -// MRBundleManager.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MRBundleManager.h" -#import "NSBundle+MPAdditions.h" - -@implementation MRBundleManager - -static MRBundleManager *sharedManager = nil; - -+ (MRBundleManager *)sharedManager -{ - if (!sharedManager) { - sharedManager = [[MRBundleManager alloc] init]; - } - return sharedManager; -} - -- (NSString *)mraidPath -{ - NSBundle *parentBundle = [NSBundle resourceBundleForClass:self.class]; - - NSString *mraidBundlePath = [parentBundle pathForResource:@"MRAID" ofType:@"bundle"]; - NSBundle *mraidBundle = [NSBundle bundleWithPath:mraidBundlePath]; - return [mraidBundle pathForResource:@"mraid" ofType:@"js"]; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRCommand.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRCommand.h deleted file mode 100644 index 65c2b3f4a6..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRCommand.h +++ /dev/null @@ -1,85 +0,0 @@ -// -// MRCommand.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import - -@class MRCommand; - -@protocol MRCommandDelegate - -- (void)mrCommand:(MRCommand *)command playVideoWithURL:(NSURL *)url; -- (void)mrCommand:(MRCommand *)command shouldUseCustomClose:(BOOL)useCustomClose; -- (void)mrCommand:(MRCommand *)command setOrientationPropertiesWithForceOrientation:(UIInterfaceOrientationMask)forceOrientation; -- (void)mrCommand:(MRCommand *)command openURL:(NSURL *)url; -- (void)mrCommand:(MRCommand *)command expandWithParams:(NSDictionary *)params; -- (void)mrCommand:(MRCommand *)command resizeWithParams:(NSDictionary *)params; -- (void)mrCommandClose:(MRCommand *)command; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MRCommand : NSObject - -@property (nonatomic, weak) id delegate; - -+ (id)commandForString:(NSString *)string; - -// returns YES by default for user safety -- (BOOL)requiresUserInteractionForPlacementType:(NSUInteger)placementType; -// This allows commands to run even if the delegate is not handling webview requests. Returns NO by default to avoid race conditions. This is -// primarily used to stop commands that can cause bad side effects while the mraid ad is presenting, dismissing, resizing, expanding and pretty much -// just animating at all. If you decide to return YES for this method, you must make sure that the command can operate safely at any point in time -// during an MRAID ad's lifetime from starting presentation to complete dismissal. -- (BOOL)executableWhileBlockingRequests; -- (BOOL)executeWithParams:(NSDictionary *)params; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MRCloseCommand : MRCommand - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MRExpandCommand : MRCommand - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MRResizeCommand : MRCommand - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MRUseCustomCloseCommand : MRCommand - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MRSetOrientationPropertiesCommand : MRCommand - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MROpenCommand : MRCommand - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MRPlayVideoCommand : MRCommand - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRCommand.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRCommand.m deleted file mode 100644 index 5a0d5a3d98..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRCommand.m +++ /dev/null @@ -1,336 +0,0 @@ -// -// MRCommand.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MRCommand.h" -#import "MPGlobal.h" -#import "MPLogging.h" -#import "MRConstants.h" - -@implementation MRCommand - -+ (void)initialize { - if (self == [MRCommand self]) { - // Register command classes - [self registerCommand:[MRCloseCommand self]]; - [self registerCommand:[MRExpandCommand self]]; - [self registerCommand:[MRResizeCommand self]]; - [self registerCommand:[MRUseCustomCloseCommand self]]; - [self registerCommand:[MRSetOrientationPropertiesCommand self]]; - [self registerCommand:[MROpenCommand self]]; - [self registerCommand:[MRPlayVideoCommand self]]; - } -} - -+ (NSMutableDictionary *)sharedCommandClassMap -{ - static NSMutableDictionary *sharedMap = nil; - - static dispatch_once_t once; - dispatch_once(&once, ^{ - sharedMap = [[NSMutableDictionary alloc] init]; - }); - - return sharedMap; -} - -+ (void)registerCommand:(Class)commandClass -{ - NSMutableDictionary *map = [self sharedCommandClassMap]; - @synchronized(self) { - [map setValue:commandClass forKey:[commandClass commandType]]; - } -} - -+ (NSString *)commandType -{ - return @"BASE_CMD_TYPE"; -} - -+ (Class)commandClassForString:(NSString *)string -{ - NSMutableDictionary *map = [self sharedCommandClassMap]; - @synchronized(self) { - return [map objectForKey:string]; - } -} - -+ (id)commandForString:(NSString *)string -{ - Class commandClass = [self commandClassForString:string]; - return [[commandClass alloc] init]; -} - -// return YES by default for user safety -- (BOOL)requiresUserInteractionForPlacementType:(NSUInteger)placementType -{ - return YES; -} - -// Default to NO to avoid race conditions. -- (BOOL)executableWhileBlockingRequests -{ - return NO; -} - -- (BOOL)executeWithParams:(NSDictionary *)params -{ - return YES; -} - -- (CGFloat)floatFromParameters:(NSDictionary *)parameters forKey:(NSString *)key -{ - return [self floatFromParameters:parameters forKey:key withDefault:0.0]; -} - -- (CGFloat)floatFromParameters:(NSDictionary *)parameters forKey:(NSString *)key withDefault:(CGFloat)defaultValue -{ - NSString *stringValue = [parameters valueForKey:key]; - return stringValue ? [stringValue floatValue] : defaultValue; -} - -- (BOOL)boolFromParameters:(NSDictionary *)parameters forKey:(NSString *)key -{ - NSString *stringValue = [parameters valueForKey:key]; - return [stringValue isEqualToString:@"true"] || [stringValue isEqualToString:@"1"]; -} - -- (int)intFromParameters:(NSDictionary *)parameters forKey:(NSString *)key -{ - NSString *stringValue = [parameters valueForKey:key]; - return stringValue ? [stringValue intValue] : -1; -} - -- (NSString *)stringFromParameters:(NSDictionary *)parameters forKey:(NSString *)key -{ - NSString *value = [parameters objectForKey:key]; - if (!value || [value isEqual:[NSNull null]]) return nil; - - value = [value stringByTrimmingCharactersInSet: - [NSCharacterSet whitespaceAndNewlineCharacterSet]]; - if (!value || [value isEqual:[NSNull null]] || value.length == 0) return nil; - - return value; -} - -- (NSURL *)urlFromParameters:(NSDictionary *)parameters forKey:(NSString *)key -{ - NSString *value = [self stringFromParameters:parameters forKey:key]; - return [NSURL URLWithString:value]; -} - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MRCloseCommand - -+ (NSString *)commandType -{ - return @"close"; -} - -- (BOOL)executeWithParams:(NSDictionary *)params -{ - [self.delegate mrCommandClose:self]; - return YES; -} - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MRExpandCommand - -+ (NSString *)commandType -{ - return @"expand"; -} - -- (BOOL)executeWithParams:(NSDictionary *)params -{ - NSURL *url = [self urlFromParameters:params forKey:@"url"]; - - NSDictionary *expandParams = [NSDictionary dictionaryWithObjectsAndKeys: - (url == nil) ? [NSNull null] : url , @"url", - [NSNumber numberWithBool:[self boolFromParameters:params forKey:@"shouldUseCustomClose"]], @"useCustomClose", - nil]; - - [self.delegate mrCommand:self expandWithParams:expandParams]; - - return YES; -} -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MRResizeCommand - -+ (NSString *)commandType -{ - return @"resize"; -} - -- (BOOL)executeWithParams:(NSDictionary *)params -{ - [self.delegate mrCommand:self resizeWithParams:params]; - - return YES; -} - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MRUseCustomCloseCommand - -// We allow useCustomClose to run while we're blocking requests because it only controls how we present a UIButton. -// It can't present/dismiss any view or view controllers. It also doesn't affect any mraid ad/screen metrics. -- (BOOL)executableWhileBlockingRequests -{ - return YES; -} - -- (BOOL)requiresUserInteractionForPlacementType:(NSUInteger)placementType -{ - return NO; -} - -+ (NSString *)commandType -{ - return @"usecustomclose"; -} - -- (BOOL)executeWithParams:(NSDictionary *)params -{ - [self.delegate mrCommand:self shouldUseCustomClose:[self boolFromParameters:params forKey:@"shouldUseCustomClose"]]; - - return YES; -} - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MRSetOrientationPropertiesCommand - -+ (NSString *)commandType -{ - return @"setOrientationProperties"; -} - -- (BOOL)requiresUserInteractionForPlacementType:(NSUInteger)placementType -{ - return NO; -} - -- (BOOL)executeWithParams:(NSDictionary *)params -{ - // We can take the forceOrientation and allowOrientationChange values and boil them down to an orientation mask - // that will represent the intention of the ad. - UIInterfaceOrientationMask forceOrientationMaskValue; - - NSString *forceOrientationString = params[@"forceOrientation"]; - - // Give a default value of "none" for forceOrientationString if it didn't come in through the params. - if (!forceOrientationString) { - forceOrientationString = kOrientationPropertyForceOrientationNoneKey; - } - - // Do not allow orientation changing if we're given a force orientation other than none. Based on the spec, - // we believe that forceOrientation takes precedence over allowOrientationChange and should not allow - // orientation changes when a forceOrientation other than 'none' is given. - if ([forceOrientationString isEqualToString:kOrientationPropertyForceOrientationPortraitKey]) { - forceOrientationMaskValue = UIInterfaceOrientationMaskPortrait; - } else if ([forceOrientationString isEqualToString:kOrientationPropertyForceOrientationLandscapeKey]) { - forceOrientationMaskValue = UIInterfaceOrientationMaskLandscape; - } else { - // Default allowing orientation change to YES. We will change this only if we received a value for this in our params. - BOOL allowOrientationChangeValue = YES; - - // If we end up allowing orientation change, then we're going to allow any orientation. - forceOrientationMaskValue = UIInterfaceOrientationMaskAll; - - NSObject *allowOrientationChangeObj = params[@"allowOrientationChange"]; - - if (allowOrientationChangeObj) { - allowOrientationChangeValue = [self boolFromParameters:params forKey:@"allowOrientationChange"]; - } - - // If we don't allow orientation change, we're locking the user into the current orientation. - if (!allowOrientationChangeValue) { - UIInterfaceOrientation currentOrientation = MPInterfaceOrientation(); - - if (UIInterfaceOrientationIsLandscape(currentOrientation)) { - forceOrientationMaskValue = UIInterfaceOrientationMaskLandscape; - } else if (currentOrientation == UIInterfaceOrientationPortrait) { - forceOrientationMaskValue = UIInterfaceOrientationMaskPortrait; - } else if (currentOrientation == UIInterfaceOrientationPortraitUpsideDown) { - forceOrientationMaskValue = UIInterfaceOrientationMaskPortraitUpsideDown; - } - } - } - - [self.delegate mrCommand:self setOrientationPropertiesWithForceOrientation:forceOrientationMaskValue]; - - return YES; -} -/* - * We allow setOrientationProperties to run while we're blocking requests because this command can occur during the presentation - * animation of an interstitial, and has a strong effect on how an ad is presented so we want to make sure it's executed. - * - * Even though we return YES here, updating orientation while blocking requests is not safe. MRController receives the appropriate - * delegate call, and caches the intended call in a block, which it executes when request-blocking is disabled. - */ -- (BOOL)executableWhileBlockingRequests -{ - return YES; -} - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MROpenCommand - -+ (NSString *)commandType -{ - return @"open"; -} - -- (BOOL)executeWithParams:(NSDictionary *)params -{ - [self.delegate mrCommand:self openURL:[self urlFromParameters:params forKey:@"url"]]; - - return YES; -} - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MRPlayVideoCommand - -+ (NSString *)commandType -{ - return @"playVideo"; -} - -- (BOOL)requiresUserInteractionForPlacementType:(NSUInteger)placementType -{ - // allow interstitials to auto-play video - return placementType != MRAdViewPlacementTypeInterstitial; -} - -- (BOOL)executeWithParams:(NSDictionary *)params -{ - [self.delegate mrCommand:self playVideoWithURL:[self urlFromParameters:params forKey:@"uri"]]; - - return YES; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRConstants.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRConstants.h deleted file mode 100644 index c103a85424..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRConstants.h +++ /dev/null @@ -1,25 +0,0 @@ -// -// MRConstants.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -enum { - MRAdViewStateHidden, - MRAdViewStateDefault, - MRAdViewStateExpanded, - MRAdViewStateResized -}; -typedef NSUInteger MRAdViewState; - -enum { - MRAdViewPlacementTypeInline, - MRAdViewPlacementTypeInterstitial -}; -typedef NSUInteger MRAdViewPlacementType; - -extern NSString *const kOrientationPropertyForceOrientationPortraitKey; -extern NSString *const kOrientationPropertyForceOrientationLandscapeKey; -extern NSString *const kOrientationPropertyForceOrientationNoneKey; diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRConstants.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRConstants.m deleted file mode 100644 index a1ee2be735..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRConstants.m +++ /dev/null @@ -1,13 +0,0 @@ -// -// MRConstants.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -NSString *const kOrientationPropertyForceOrientationPortraitKey = @"portrait"; -NSString *const kOrientationPropertyForceOrientationLandscapeKey = @"landscape"; -NSString *const kOrientationPropertyForceOrientationNoneKey = @"none"; diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRController.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRController.h deleted file mode 100644 index fc5d40665d..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRController.h +++ /dev/null @@ -1,112 +0,0 @@ -// -// MRController.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import -#import "MRConstants.h" -#import "MPMRAIDInterstitialViewController.h" - -@protocol MRControllerDelegate; -@class MPAdConfiguration; -@class CLLocation; -@class MPWebView; -@class MPViewabilityTracker; - -/** - * The `MRController` class is used to load and interact with MRAID ads. - * It contains two MRAID ad views and uses a separate `MRBridge` to - * communicate to each view. `MRController` handles view-related MRAID - * native calls such as expand(), resize(), close(), and open(). - */ -@interface MRController : NSObject - -@property (nonatomic, weak) id delegate; - -- (instancetype)initWithAdViewFrame:(CGRect)adViewFrame - supportedOrientations:(MPInterstitialOrientationType)orientationType - adPlacementType:(MRAdViewPlacementType)placementType - delegate:(id)delegate; - -/** - Use this to load a regular MRAID ad. - */ -- (void)loadAdWithConfiguration:(MPAdConfiguration *)configuration; - -/** - Use this to load a VAST video companion MRAID ad. - */ -- (void)loadVASTCompanionAd:(NSString *)companionAdHTML; -- (void)loadVASTCompanionAdUrl:(NSURL *)companionAdUrl; - -- (void)handleMRAIDInterstitialWillPresentWithViewController:(MPMRAIDInterstitialViewController *)viewController; -- (void)handleMRAIDInterstitialDidPresentWithViewController:(MPMRAIDInterstitialViewController *)viewController; -- (void)enableRequestHandling; -- (void)disableRequestHandling; - -- (void)startViewabilityTracking; - -/** - When a click-through happens, do not open a web browser. - Note: `MRControllerDelegate.adDidReceiveClickthrough:` is still triggered. It's the delegate's - responsibility to open a web browser when click-through happens. - */ -- (void)disableClickthroughWebBrowser; - -/** - Evaluate the Javascript code "webviewDidAppear();" in the MRAID web view. - */ -- (void)triggerWebviewDidAppear; - -@end - -/** - * The `MRControllerDelegate` will relay specific events such as ad loading to - * the object that implements the delegate. It also requires information - * such as adUnitId, adConfiguation, and location in order to use its - * ad alert manager. - **/ -@protocol MRControllerDelegate - -@required - -// Retrieves the view controller from which modal views should be presented. -- (UIViewController *)viewControllerForPresentingModalView; - -// Called when the ad is about to display modal content (thus taking over the screen). -- (void)appShouldSuspendForAd:(UIView *)adView; - -// Called when the ad has dismissed any modal content (removing any on-screen takeovers). -- (void)appShouldResumeFromAd:(UIView *)adView; - -@optional - -// Called when the ad loads successfully. -- (void)adDidLoad:(UIView *)adView; - -// Called when the ad fails to load. -- (void)adDidFailToLoad:(UIView *)adView; - -// Called just before the ad closes. -- (void)adWillClose:(UIView *)adView; - -// Called just after the ad has closed. -- (void)adDidClose:(UIView *)adView; - -// Called when click-throught happens. -- (void)adDidReceiveClickthrough:(NSURL *)url; - -// Called after the rewarded video finishes playing -- (void)rewardedVideoEnded; - -// Called just before the ad will expand or resize -- (void)adWillExpand:(UIView *)adView; - -// Called after the ad collapsed from an expanded or resized state -- (void)adDidCollapse:(UIView *)adView; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRController.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRController.m deleted file mode 100644 index 503db2c653..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRController.m +++ /dev/null @@ -1,1388 +0,0 @@ -// -// MRController.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MRController.h" -#import "MRBridge.h" -#import "MRCommand.h" -#import "MRProperty.h" -#import "MPAdDestinationDisplayAgent.h" -#import "MRExpandModalViewController.h" -#import "MPCoreInstanceProvider.h" -#import "MPClosableView.h" -#import "MPGlobal.h" -#import "MPLogging.h" -#import "MPTimer.h" -#import "NSHTTPURLResponse+MPAdditions.h" -#import "NSURL+MPAdditions.h" -#import "MPForceableOrientationProtocol.h" -#import "MPAPIEndPoints.h" -#import "MoPub.h" -#import "MPViewabilityTracker.h" -#import "MPHTTPNetworkSession.h" -#import "MPURLRequest.h" - -static const NSTimeInterval kAdPropertyUpdateTimerInterval = 1.0; -static const NSTimeInterval kMRAIDResizeAnimationTimeInterval = 0.3; - -static NSString *const kMRAIDCommandExpand = @"expand"; -static NSString *const kMRAIDCommandResize = @"resize"; - -@interface MRController () - -@property (nonatomic, strong) MRBridge *mraidBridge; -@property (nonatomic, strong) MRBridge *mraidBridgeTwoPart; -@property (nonatomic, strong) MPClosableView *mraidAdView; -@property (nonatomic, strong) MPClosableView *mraidAdViewTwoPart; -@property (nonatomic, strong) UIView *resizeBackgroundView; -@property (nonatomic, strong) MPTimer *adPropertyUpdateTimer; -@property (nonatomic, assign) MRAdViewPlacementType placementType; -@property (nonatomic, strong) MRExpandModalViewController *expandModalViewController; -@property (nonatomic, weak) MPMRAIDInterstitialViewController *interstitialViewController; -@property (nonatomic, assign) CGRect mraidDefaultAdFrame; -@property (nonatomic, assign) CGRect mraidDefaultAdFrameInKeyWindow; -@property (nonatomic, assign) CGSize currentAdSize; -@property (nonatomic, assign) NSUInteger modalViewCount; -@property (nonatomic, assign) BOOL isAppSuspended; -@property (nonatomic, assign) MRAdViewState currentState; -// Track the original super view for when we move the ad view to the key window for a 1-part expand. -@property (nonatomic, weak) UIView *originalSuperview; -@property (nonatomic, assign) BOOL isViewable; -@property (nonatomic, assign) BOOL isAnimatingAdSize; -@property (nonatomic, assign) BOOL isAdLoading; -// Whether or not an interstitial requires precaching. Does not affect banners. -@property (nonatomic, assign) BOOL adRequiresPrecaching; -@property (nonatomic, assign) BOOL isAdVastVideoPlayer; -@property (nonatomic, assign) BOOL didConfigureOrientationNotificationObservers; - -// Points to mraidAdView (one-part expand) or mraidAdViewTwoPart (two-part expand) while expanded. -@property (nonatomic, strong) MPClosableView *expansionContentView; - -@property (nonatomic, strong) id destinationDisplayAgent; - -// Use UIInterfaceOrientationMaskALL to specify no forcing. -@property (nonatomic, assign) UIInterfaceOrientationMask forceOrientationMask; - -@property (nonatomic, assign) UIInterfaceOrientation currentInterfaceOrientation; - -@property (nonatomic, copy) void (^forceOrientationAfterAnimationBlock)(void); - -@property (nonatomic, strong) MPViewabilityTracker *viewabilityTracker; -@property (nonatomic, strong) MPWebView *mraidWebView; - -// Networking -@property (nonatomic, strong) NSURLSessionTask *task; - -// Previously set values used to determine if an update needs to be sent -@property (nonatomic, assign) CGRect previousCurrentPosition; -@property (nonatomic, assign) CGRect previousDefaultPosition; -@property (nonatomic, assign) CGSize previousScreenSize; -@property (nonatomic, assign) CGSize previousMaxSize; - -// Safe area insets -@property (nonatomic, assign) BOOL includeSafeAreaInsetsInCalculations; - -// MRAID capability feature flags -@property (nonatomic, assign) BOOL allowCustomClose; - -@end - -@implementation MRController - -- (instancetype)initWithAdViewFrame:(CGRect)adViewFrame - supportedOrientations:(MPInterstitialOrientationType)orientationType - adPlacementType:(MRAdViewPlacementType)placementType - delegate:(id)delegate -{ - if (self = [super init]) { - _includeSafeAreaInsetsInCalculations = YES; - _placementType = placementType; - _currentState = MRAdViewStateDefault; - _forceOrientationMask = MPInterstitialOrientationTypeToUIInterfaceOrientationMask(orientationType); - _isAnimatingAdSize = NO; - _didConfigureOrientationNotificationObservers = NO; - _currentAdSize = CGSizeZero; - _isAppSuspended = NO; - - _mraidDefaultAdFrame = adViewFrame; - - _adPropertyUpdateTimer = [MPTimer timerWithTimeInterval:kAdPropertyUpdateTimerInterval - target:self - selector:@selector(updateMRAIDProperties) - repeats:YES - runLoopMode:NSRunLoopCommonModes]; - - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(viewEnteredBackground) - name:UIApplicationDidEnterBackgroundNotification - object:nil]; - - //Setting the frame here is irrelevant - we update it whenever an ad resizes to match the - //application frame. - _resizeBackgroundView = [[UIView alloc] initWithFrame:adViewFrame]; - _resizeBackgroundView.backgroundColor = [UIColor clearColor]; - - _destinationDisplayAgent = [MPAdDestinationDisplayAgent agentWithDelegate:self]; - _delegate = delegate; - - _previousCurrentPosition = CGRectNull; - _previousDefaultPosition = CGRectNull; - _previousScreenSize = CGSizeZero; - _previousMaxSize = CGSizeZero; - _allowCustomClose = NO; - } - - return self; -} - -- (void)dealloc -{ - [self.viewabilityTracker stopTracking]; - - // Transfer delegation to the expand modal view controller in the event the modal is still being presented so it can dismiss itself. - _expansionContentView.delegate = _expandModalViewController; - - [_adPropertyUpdateTimer invalidate]; - [[NSNotificationCenter defaultCenter] removeObserver:self]; -} - -#pragma mark - Public - -- (void)loadAdWithConfiguration:(MPAdConfiguration *)configuration -{ - if (self.isAdLoading) { - return; - } - - self.isAdLoading = YES; - self.adRequiresPrecaching = configuration.precacheRequired; - self.isAdVastVideoPlayer = configuration.isVastVideoPlayer; - - // MoVideo is always allowed to use custom close since it utilizes JS and MRAID - // to render the locked countdown experience and then show the close button. - self.allowCustomClose = configuration.mraidAllowCustomClose || configuration.isMoVideo; - - [self commonSetupBeforeMRAIDBridgeLoadAd]; - - // This load is guaranteed to never be called for a two-part expand so we know we need to load the HTML into the default web view. - NSString *HTML = [configuration adResponseHTMLString]; - [self.mraidBridge loadHTMLString:HTML - baseURL:[NSURL URLWithString:[MPAPIEndpoints baseURL]] - ]; -} - -- (void)loadVASTCompanionAd:(NSString *)companionAdHTML -{ - if (self.isAdLoading) { - return; - } - - self.isAdLoading = YES; - self.adRequiresPrecaching = NO; - self.isAdVastVideoPlayer = NO; // VAST companion ad cannot be a VAST video - - [self commonSetupBeforeMRAIDBridgeLoadAd]; - - // This load is guaranteed to never be called for a two-part expand so we know we need to load the HTML into the default web view. - [self.mraidBridge loadHTMLString:companionAdHTML - baseURL:[NSURL URLWithString:[MPAPIEndpoints baseURL]] - ]; -} - -- (void)loadVASTCompanionAdUrl:(NSURL *)companionAdUrl -{ - if (self.isAdLoading) { - return; - } - - self.isAdLoading = YES; - self.adRequiresPrecaching = NO; - self.isAdVastVideoPlayer = NO; // VAST companion ad cannot be a VAST video - - [self commonSetupBeforeMRAIDBridgeLoadAd]; - - // This load is guaranteed to never be called for a two-part expand so we know we need to load the HTML into the default web view. - [self.mraidBridge loadHTMLUrl:companionAdUrl]; -} - -- (void)handleMRAIDInterstitialWillPresentWithViewController:(MPMRAIDInterstitialViewController *)viewController -{ - self.interstitialViewController = viewController; - [self updateOrientation]; - [self willBeginAnimatingAdSize]; -} - -- (void)handleMRAIDInterstitialDidPresentWithViewController:(MPMRAIDInterstitialViewController *)viewController -{ - self.interstitialViewController = viewController; - [self didEndAnimatingAdSize]; - [self updateMRAIDProperties]; - [self updateOrientation]; - - // Start viewability tracking here for interstitals. For banners, this is handled by the custom event upon impression. - if ([self isInterstitialAd]) { - [self.viewabilityTracker startTracking]; - } -} - -- (void)enableRequestHandling -{ - self.mraidBridge.shouldHandleRequests = YES; - self.mraidBridgeTwoPart.shouldHandleRequests = YES; - // If orientation has been forced while requests are disabled (during animation), we need to execute that command through the block forceOrientationAfterAnimationBlock() after the presentation completes. - if (self.forceOrientationAfterAnimationBlock) { - self.forceOrientationAfterAnimationBlock(); - self.forceOrientationAfterAnimationBlock = nil; - } -} - -- (void)disableRequestHandling -{ - self.mraidBridge.shouldHandleRequests = NO; - self.mraidBridgeTwoPart.shouldHandleRequests = NO; - [self.destinationDisplayAgent cancel]; -} - -- (void)startViewabilityTracking -{ - [self.viewabilityTracker startTracking]; -} - -- (void)disableClickthroughWebBrowser -{ - self.destinationDisplayAgent = nil; -} - -- (void)triggerWebviewDidAppear -{ - [self.mraidWebView stringByEvaluatingJavaScriptFromString:@"webviewDidAppear();"]; -} - -#pragma mark - Loading Two Part Expand - -- (void)loadTwoPartCreativeFromURL:(NSURL *)url -{ - self.isAdLoading = YES; - - MPURLRequest * request = [MPURLRequest requestWithURL:url]; - - __weak __typeof__(self) weakSelf = self; - self.task = [MPHTTPNetworkSession startTaskWithHttpRequest:request responseHandler:^(NSData * _Nonnull data, NSHTTPURLResponse * _Nonnull response) { - __typeof__(self) strongSelf = weakSelf; - - NSURL *currentRequestUrl = strongSelf.task.currentRequest.URL; - [strongSelf connectionDidFinishLoadingData:data withResponse:response fromRequestUrl:currentRequestUrl]; - } errorHandler:^(NSError * _Nonnull error) { - __typeof__(self) strongSelf = weakSelf; - [strongSelf didFailWithError:error]; - }]; -} - -- (void)didFailWithError:(NSError *)error -{ - self.isAdLoading = NO; - // No matter what, show the close button on the expanded view. - self.expansionContentView.closeButtonType = MPClosableViewCloseButtonTypeTappableWithImage; - [self.mraidBridge fireErrorEventForAction:kMRAIDCommandExpand withMessage:@"Could not load URL."]; -} - -- (void)connectionDidFinishLoadingData:(NSData *)data withResponse:(NSHTTPURLResponse *)response fromRequestUrl:(NSURL *)requestUrl -{ - // Extract the response encoding type. - NSDictionary *headers = [response allHeaderFields]; - NSString *contentType = [headers objectForKey:kMoPubHTTPHeaderContentType]; - NSStringEncoding responseEncoding = [response stringEncodingFromContentType:contentType]; - - NSString *str = [[NSString alloc] initWithData:data encoding:responseEncoding]; - [self.mraidBridgeTwoPart loadHTMLString:str baseURL:requestUrl]; -} - -#pragma mark - Private - -- (void)init3rdPartyViewabilityTrackers -{ - self.viewabilityTracker = [[MPViewabilityTracker alloc] - initWithWebView:self.mraidWebView - isVideo:self.isAdVastVideoPlayer - startTrackingImmediately:NO]; - [self.viewabilityTracker registerFriendlyObstructionView:self.mraidAdView.closeButton]; -} - -- (BOOL)isInterstitialAd -{ - return (self.placementType == MRAdViewPlacementTypeInterstitial); -} - -- (MPClosableView *)adViewForBridge:(MRBridge *)bridge -{ - if (bridge == self.mraidBridgeTwoPart) { - return self.mraidAdViewTwoPart; - } - - return self.mraidAdView; -} - -- (MRBridge *)bridgeForAdView:(MPClosableView *)view -{ - if (view == self.mraidAdViewTwoPart) { - return self.mraidBridgeTwoPart; - } - - return self.mraidBridge; -} - -- (MPClosableView *)activeView -{ - if (self.currentState == MRAdViewStateExpanded) { - return self.expansionContentView; - } - - return self.mraidAdView; -} - -- (MRBridge *)bridgeForActiveAdView -{ - MRBridge *bridge = [self bridgeForAdView:[self activeView]]; - return bridge; -} - -- (MPWebView *)buildMRAIDWebViewWithFrame:(CGRect)frame -{ - MPWebView *webView = [[MPWebView alloc] initWithFrame:frame]; - webView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - webView.backgroundColor = [UIColor clearColor]; - webView.clipsToBounds = YES; - webView.opaque = NO; - [webView mp_setScrollable:NO]; - - return webView; -} - -/** - Call this before calling `[self.mraidBridge loadHTMLString]`. - */ -- (void)commonSetupBeforeMRAIDBridgeLoadAd { - self.mraidWebView = [self buildMRAIDWebViewWithFrame:self.mraidDefaultAdFrame]; - self.mraidWebView.shouldConformToSafeArea = [self isInterstitialAd]; - - self.mraidBridge = [[MRBridge alloc] initWithWebView:self.mraidWebView delegate:self]; - self.mraidAdView = [[MPClosableView alloc] initWithFrame:self.mraidDefaultAdFrame - contentView:self.mraidWebView - delegate:self]; - if (self.placementType == MRAdViewPlacementTypeInterstitial) { - self.mraidAdView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - } - - // Initially turn off the close button for default banner MRAID ads while defaulting to turning it on for interstitials. - if (self.placementType == MRAdViewPlacementTypeInline) { - self.mraidAdView.closeButtonType = MPClosableViewCloseButtonTypeNone; - } else if (self.placementType == MRAdViewPlacementTypeInterstitial) { - self.mraidAdView.closeButtonType = MPClosableViewCloseButtonTypeTappableWithImage; - } - - [self init3rdPartyViewabilityTrackers]; -} - -#pragma mark - Orientation Notifications - -- (void)orientationDidChange:(NSNotification *)notification -{ - // We listen for device notification changes because at that point our ad's frame is in - // the correct state; however, MRAID updates should only happen when the interface changes, so the update logic is only executed if the interface orientation has changed. - - //MPInterfaceOrientation is guaranteed to be the new orientation at this point. - UIInterfaceOrientation newInterfaceOrientation = MPInterfaceOrientation(); - if (newInterfaceOrientation != self.currentInterfaceOrientation) { - // Update all properties and fire a size change event. - [self updateMRAIDProperties]; - - //According to MRAID Specs, a resized ad should close when there's an orientation change - //due to unpredictability of the new layout. - if (self.currentState == MRAdViewStateResized) { - [self close]; - } - - self.currentInterfaceOrientation = newInterfaceOrientation; - } -} - -#pragma mark - Executing Javascript - -- (void)configureMraidEnvironmentToShowAdForBridge:(MRBridge *)bridge -{ - // Set up some initial properties so mraid can operate. - MPLogDebug(@"Injecting initial JavaScript state."); - NSArray *startingMraidProperties = @[[MRHostSDKVersionProperty defaultProperty], - [MRPlacementTypeProperty propertyWithType:self.placementType], - [MRSupportsProperty defaultProperty], - [MRStateProperty propertyWithState:self.currentState] - ]; - - [bridge fireChangeEventsForProperties:startingMraidProperties]; - - [self updateMRAIDProperties]; - - [bridge fireReadyEvent]; -} - -- (void)fireChangeEventToBothBridgesForProperty:(MRProperty *)property -{ - [self.mraidBridge fireChangeEventForProperty:property]; - [self.mraidBridgeTwoPart fireChangeEventForProperty:property]; -} - -#pragma mark - Resize Helpers - -/** - If the provided frame is not fully within the application safe area, to try to adjust it's origin so - that the provided frame can fit into the application safe area if possible. - - Note: Only the origin is adjusted. If the size doesn't fit, then the original frame is returned. - - @param frame The frame to adjust. - @param applicationSafeArea The frame of application safe area. - @return The adjusted frame. - */ -+ (CGRect)adjustedFrameForFrame:(CGRect)frame toFitIntoApplicationSafeArea:(CGRect)applicationSafeArea -{ - if (CGRectContainsRect(applicationSafeArea, frame)) { - return frame; - } else if (CGRectGetWidth(frame) <= CGRectGetWidth(applicationSafeArea) - && CGRectGetHeight(frame) <= CGRectGetHeight(applicationSafeArea)) { - // given the size is fitting, we only need to move the frame by changing its origin - if (CGRectGetMinX(frame) < CGRectGetMinX(applicationSafeArea)) { - frame.origin.x = CGRectGetMinX(applicationSafeArea); - } else if (CGRectGetMaxX(applicationSafeArea) < CGRectGetMaxX(frame)) { - frame.origin.x = CGRectGetMaxX(applicationSafeArea) - CGRectGetWidth(frame); - } - - if (CGRectGetMinY(frame) < CGRectGetMinY(applicationSafeArea)) { - frame.origin.y = CGRectGetMinY(applicationSafeArea); - } else if (CGRectGetMaxY(applicationSafeArea) < CGRectGetMaxY(frame)) { - frame.origin.y = CGRectGetMaxY(applicationSafeArea) - CGRectGetHeight(frame); - } - } - - return frame; -} - -/** - Check whether the provided @c frame is valid for a resized ad. - @param frame The ad frame to check - @param applicationSafeArea The safe area of this application - @param allowOffscreen Per MRAID spec https://www.iab.com/wp-content/uploads/2015/08/IAB_MRAID_v2_FINAL.pdf, - page 35, @c is for "whether or not it should allow the resized creative to be drawn fully/partially - offscreen". - @return @c YES if the provided @c frame is valid for a resized ad, and @c NO otherwise. - */ -+ (BOOL)isValidResizeFrame:(CGRect)frame - inApplicationSafeArea:(CGRect)applicationSafeArea - allowOffscreen:(BOOL)allowOffscreen -{ - if (CGRectGetWidth(frame) < kCloseRegionSize.width || CGRectGetHeight(frame) < kCloseRegionSize.height) { - /* - Per MRAID spec https://www.iab.com/wp-content/uploads/2015/08/IAB_MRAID_v2_FINAL.pdf, page 34, - "a resized ad must be at least 50x50 pixels, to ensure there is room on the resized creative - for the close event region." - */ - return false; - } else { - if (allowOffscreen) { - return YES; // any frame with a valid size is valid, even off screen - } else { - return CGRectContainsRect(applicationSafeArea, frame); - } - } -} - -/** - Check whether the frame of Close button is valid. - @param closeButtonLocation The Close button location. - @param adFrame The ad frame that contains the Close button. - @param applicationSafeArea The safe area of this application. - @return @c YES if the frame of the Close button is valid, and @c NO otherwise. - */ -+ (BOOL)isValidCloseButtonPlacement:(MPClosableViewCloseButtonLocation)closeButtonLocation - inAdFrame:(CGRect)adFrame - inApplicationSafeArea:(CGRect)applicationSafeArea { - // Need to convert the corrdinate system of the Close button frame from "in the ad" to "in the window". - CGRect closeButtonFrameInAd = MPClosableViewCustomCloseButtonFrame(adFrame.size, closeButtonLocation); - CGRect closeButtonFrameInWindow = CGRectOffset(closeButtonFrameInAd, CGRectGetMinX(adFrame), CGRectGetMinY(adFrame)); - return CGRectContainsRect(applicationSafeArea, closeButtonFrameInWindow); -} - -- (MPClosableViewCloseButtonLocation)adCloseButtonLocationFromString:(NSString *)closeButtonLocationString -{ - if ([closeButtonLocationString isEqualToString:@"top-left"]) { - return MPClosableViewCloseButtonLocationTopLeft; - } else if ([closeButtonLocationString isEqualToString:@"top-center"]) { - return MPClosableViewCloseButtonLocationTopCenter; - } else if ([closeButtonLocationString isEqualToString:@"bottom-left"]) { - return MPClosableViewCloseButtonLocationBottomLeft; - } else if ([closeButtonLocationString isEqualToString:@"bottom-center"]) { - return MPClosableViewCloseButtonLocationBottomCenter; - } else if ([closeButtonLocationString isEqualToString:@"bottom-right"]) { - return MPClosableViewCloseButtonLocationBottomRight; - } else if ([closeButtonLocationString isEqualToString:@"center"]) { - return MPClosableViewCloseButtonLocationCenter; - } else { - return MPClosableViewCloseButtonLocationTopRight; - } -} - -- (void)animateViewFromDefaultStateToResizedState:(MPClosableView *)view withFrame:(CGRect)newFrame -{ - [self willBeginAnimatingAdSize]; - - [UIView animateWithDuration:kMRAIDResizeAnimationTimeInterval animations:^{ - self.mraidAdView.frame = newFrame; - } completion:^(BOOL finished) { - [self changeStateTo:MRAdViewStateResized]; - [self didEndAnimatingAdSize]; - }]; -} - -#pragma mark - Expand Helpers - -- (void)presentExpandModalViewControllerWithView:(MPClosableView *)view animated:(BOOL)animated -{ - [self presentExpandModalViewControllerWithView:view animated:animated completion:nil]; -} - -- (void)presentExpandModalViewControllerWithView:(MPClosableView *)view animated:(BOOL)animated completion:(void (^)(void))completionBlock -{ - [self willBeginAnimatingAdSize]; - - self.expandModalViewController = [[MRExpandModalViewController alloc] initWithOrientationMask:self.forceOrientationMask]; - [self.expandModalViewController.view addSubview:view]; - view.frame = self.expandModalViewController.view.bounds; - view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - self.expandModalViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; - - [[self.delegate viewControllerForPresentingModalView] presentViewController:self.expandModalViewController - animated:animated - completion:^{ - self.currentInterfaceOrientation = MPInterfaceOrientation(); - [self didEndAnimatingAdSize]; - - if (completionBlock) { - completionBlock(); - } - }]; -} - -- (void)willBeginAnimatingAdSize -{ - self.isAnimatingAdSize = YES; - [self disableRequestHandling]; -} - -- (void)didEndAnimatingAdSize -{ - self.isAnimatingAdSize = NO; - [self enableRequestHandling]; -} - -#pragma mark - Close Helpers - -- (void)close -{ - switch (self.currentState) { - case MRAdViewStateDefault: - [self closeFromDefaultState]; - break; - case MRAdViewStateExpanded: - [self closeFromExpandedState]; - break; - case MRAdViewStateResized: - [self closeFromResizedState]; - break; - case MRAdViewStateHidden: - break; - default: - break; - } -} - -- (void)closeFromDefaultState -{ - [self adWillClose]; - - self.mraidAdView.hidden = YES; - [self changeStateTo:MRAdViewStateHidden]; - - [self adDidClose]; -} - -- (void)closeFromExpandedState -{ - self.mraidAdView.closeButtonType = MPClosableViewCloseButtonTypeNone; - - // Immediately re-parent the ad so it will show up as the expand modal goes away rather than after. - [self.originalSuperview addSubview:self.mraidAdView]; - self.mraidAdView.frame = self.mraidDefaultAdFrame; - if (self.placementType != MRAdViewPlacementTypeInterstitial) { - self.mraidAdView.autoresizingMask = UIViewAutoresizingNone; - } - - // Track isAnimatingAdSize because we have a timer that will update the mraid ad properties. We don't want to examine our views when - // they're in a transitional state. - [self willBeginAnimatingAdSize]; - - __weak __typeof__(self) weakSelf = self; - [self.expandModalViewController dismissViewControllerAnimated:YES completion:^{ - __typeof__(self) strongSelf = weakSelf; - - - [strongSelf didEndAnimatingAdSize]; - [strongSelf adDidDismissModalView]; - - // Get rid of the bridge and view if we are closing from two-part expand. - if (strongSelf.mraidAdViewTwoPart) { - strongSelf.mraidAdViewTwoPart = nil; - strongSelf.mraidBridgeTwoPart = nil; - } - - strongSelf.expansionContentView = nil; - strongSelf.expandModalViewController = nil; - - // Waiting this long to change the state results in some awkward animation. The full screen ad will briefly appear in the banner's - // frame after the modal dismisses. However, this is a much safer time to change the state and results in less side effects. - [strongSelf changeStateTo:MRAdViewStateDefault]; - - // Notify listeners that the expanded ad was collapsed. - if ([strongSelf.delegate respondsToSelector:@selector(adDidCollapse:)]) { - [strongSelf.delegate adDidCollapse:strongSelf.mraidAdView]; - } - }]; -} - -- (void)closeFromResizedState -{ - self.mraidAdView.closeButtonType = MPClosableViewCloseButtonTypeNone; - - [self willBeginAnimatingAdSize]; - - __weak __typeof__(self) weakSelf = self; - [UIView animateWithDuration:kMRAIDResizeAnimationTimeInterval animations:^{ - __typeof__(self) strongSelf = weakSelf; - - strongSelf.mraidAdView.frame = strongSelf.mraidDefaultAdFrameInKeyWindow; - } completion:^(BOOL finished) { - __typeof__(self) strongSelf = weakSelf; - - [strongSelf.resizeBackgroundView removeFromSuperview]; - [strongSelf.originalSuperview addSubview:strongSelf.mraidAdView]; - strongSelf.mraidAdView.frame = strongSelf.mraidDefaultAdFrame; - [strongSelf changeStateTo:MRAdViewStateDefault]; - [strongSelf didEndAnimatingAdSize]; - [strongSelf adDidDismissModalView]; - - // Notify listeners that the expanded ad was collapsed. - if ([strongSelf.delegate respondsToSelector:@selector(adDidCollapse:)]) { - [strongSelf.delegate adDidCollapse:strongSelf.mraidAdView]; - } - }]; -} - -#pragma mark - - -- (BOOL)isLoadingAd -{ - return self.isAdLoading; -} - -- (BOOL)hasUserInteractedWithWebViewForBridge:(MRBridge *)bridge -{ - // inline videos seem to delay tap gesture recognition so that we get the click through - // request in the webview delegate BEFORE we get the gesture recognizer triggered callback. For now - // excuse all MRAID interstitials from the user interaction requirement. We do the same for expanded ads. - // We can go ahead and return true for either bridge (default, expanded) if the current state is expanded since - // the fact we're in expanded means that the first webview has been tapped. Then we just don't require the check - // for the expanded bridge. - if (self.placementType == MRAdViewPlacementTypeInterstitial || self.currentState == MRAdViewStateExpanded) { - return YES; - } - - MPClosableView *adView = [self adViewForBridge:bridge]; - return adView.wasTapped; -} - -- (UIViewController *)viewControllerForPresentingModalView -{ - UIViewController *delegateVC = [self.delegate viewControllerForPresentingModalView]; - - // Use the expand modal view controller as the presenting modal if it's being presented. - if (self.expandModalViewController.presentingViewController != nil) { - return self.expandModalViewController; - } - - return delegateVC; -} - -- (void)nativeCommandWillPresentModalView -{ - [self adWillPresentModalViewByExpanding:NO]; -} - -- (void)nativeCommandDidDismissModalView -{ - [self adDidDismissModalView]; -} - -- (void)bridge:(MRBridge *)bridge didFinishLoadingWebView:(MPWebView *)webView -{ - // Loading an iframe can cause this method to execute and could potentially cause us to initialize the javascript for a two-part expand - // and fire the ready event more than once. The isAdLoading flags helps us prevent that from happening. - if (self.isAdLoading) { - - self.isAdLoading = NO; - - if (!self.adRequiresPrecaching) { - // Only tell the delegate that the ad loaded when the view is the default ad view and not a two-part ad view. - if (bridge == self.mraidBridge) { - // We do not start our timer for a banner load yet. We wait until the ad is in the view hierarchy. - // We are notified by the view when it is potentially added to the hierarchy in - // -closableView:didMoveToWindow:. - [self adDidLoad]; - } else if (bridge == self.mraidBridgeTwoPart) { - // If the default ad was already viewable, we need to simply tell the two part it is viewable. Otherwise, if the default - // ad wasn't viewable, we need to update the state across both webviews and the controller. - if (self.isViewable) { - [self.mraidBridgeTwoPart fireChangeEventForProperty:[MRViewableProperty propertyWithViewable:YES]]; - } else { - [self updateViewabilityWithBool:YES]; - } - - // We initialize javascript and fire the ready event for the two part ad view once it loads - // since it'll already be in the view hierarchy. - [self configureMraidEnvironmentToShowAdForBridge:bridge]; - } - } - } -} - -- (void)bridge:(MRBridge *)bridge didFailLoadingWebView:(MPWebView *)webView error:(NSError *)error -{ - self.isAdLoading = NO; - - if (bridge == self.mraidBridge) { - // We need to report that the ad failed to load when the default ad fails to load. - [self adDidFailToLoad]; - } else if (bridge == self.mraidBridgeTwoPart) { - // Always show the close button when the two-part expand fails. - self.expansionContentView.closeButtonType = MPClosableViewCloseButtonTypeTappableWithImage; - - // For two-part expands, we don't want to tell the delegate anything went wrong since the ad did successfully load. - // We will fire an error to the javascript though. - [self.mraidBridge fireErrorEventForAction:kMRAIDCommandExpand withMessage:@"Could not load URL."]; - } -} - -- (void)bridge:(MRBridge *)bridge performActionForMoPubSpecificURL:(NSURL *)url -{ - MPLogDebug(@"MRController - loading MoPub URL: %@", url); - MPMoPubHostCommand command = [url mp_mopubHostCommand]; - if (command == MPMoPubHostCommandPrecacheComplete && self.adRequiresPrecaching) { - [self adDidLoad]; - } else if (command == MPMoPubHostCommandFailLoad) { - [self adDidFailToLoad]; - } else if (command == MPMoPubHostCommandRewardedVideoEnded) { - [self rewardedVideoEnded]; - } else { - MPLogInfo(@"MRController - unsupported MoPub URL: %@", [url absoluteString]); - } -} - -- (void)handleNativeCommandCloseWithBridge:(MRBridge *)bridge -{ - [self close]; -} - -- (void)bridge:(MRBridge *)bridge handleDisplayForDestinationURL:(NSURL *)URL -{ - if ([self hasUserInteractedWithWebViewForBridge:bridge]) { - [self.destinationDisplayAgent displayDestinationForURL:URL]; - - if ([self.delegate respondsToSelector:@selector(adDidReceiveClickthrough:)]) { - [self.delegate adDidReceiveClickthrough:URL]; - } - } -} - -- (void)bridge:(MRBridge *)bridge handleNativeCommandUseCustomClose:(BOOL)useCustomClose -{ - // `useCustomClose()` has not been allowed for this ad. - if (!self.allowCustomClose) { - MPLogInfo(@"MRAID command `useCustomClose()` is not allowed."); - return; - } - - // Calling useCustomClose() for banners won't take effect until expand() is called so we don't need to take - // any action here as useCustomClose will be given to us when expand is called. Interstitials can have their - // close buttons changed at any time though. - if (self.placementType != MRAdViewPlacementTypeInterstitial) { - return; - } - - [self configureCloseButtonForView:self.mraidAdView forUseCustomClose:useCustomClose]; -} - -- (void)configureCloseButtonForView:(MPClosableView *)view forUseCustomClose:(BOOL)useCustomClose -{ - if (useCustomClose) { - // When using custom close, we must leave a tappable region on the screen and just hide the image - // unless the ad is a vast video ad. For vast video, we expect that the creative will have a tappable - // close region. - if (self.isAdVastVideoPlayer) { - view.closeButtonType = MPClosableViewCloseButtonTypeNone; - } else { - view.closeButtonType = MPClosableViewCloseButtonTypeTappableWithoutImage; - } - } else { - // When not using custom close, show our own image with a tappable region. - view.closeButtonType = MPClosableViewCloseButtonTypeTappableWithImage; - } -} - -- (void)bridge:(MRBridge *)bridge handleNativeCommandSetOrientationPropertiesWithForceOrientationMask:(UIInterfaceOrientationMask)forceOrientationMask -{ - // If the ad is trying to force an orientation that the app doesn't support, we shouldn't try to force the orientation. - if (![[UIApplication sharedApplication] mp_supportsOrientationMask:forceOrientationMask]) { - return; - } - - BOOL inExpandedState = self.currentState == MRAdViewStateExpanded; - - // If we aren't expanded or showing an interstitial ad, save the force orientation in case the - // ad is expanded, but do not process further. - if (!inExpandedState && self.placementType != MRAdViewPlacementTypeInterstitial) { - self.forceOrientationMask = forceOrientationMask; - return; - } - - // If request handling is paused, we want to queue up this method to be called again when they are re-enabled. - if (!bridge.shouldHandleRequests) { - __weak __typeof__(self) weakSelf = self; - self.forceOrientationAfterAnimationBlock = ^void() { - __typeof__(self) strongSelf = weakSelf; - [strongSelf bridge:bridge handleNativeCommandSetOrientationPropertiesWithForceOrientationMask:forceOrientationMask]; - }; - return; - } - - // By this point, we've committed to forcing the orientation so we don't need a forceOrientationAfterAnimationBlock. - self.forceOrientationAfterAnimationBlock = nil; - self.forceOrientationMask = forceOrientationMask; - - BOOL inSameOrientation = [[UIApplication sharedApplication] mp_doesOrientation:MPInterfaceOrientation() matchOrientationMask:forceOrientationMask]; - UIViewController *fullScreenAdViewController = inExpandedState ? self.expandModalViewController : self.interstitialViewController; - - // If we're currently in the force orientation, we don't need to do any rotation. However, we still need to make sure - // that the view controller knows to use the forced orientation when the user rotates the device. - if (inSameOrientation) { - fullScreenAdViewController.supportedOrientationMask = forceOrientationMask; - } else { - // Block our timer from updating properties while we force orientation on the view controller. - [self willBeginAnimatingAdSize]; - - UIViewController *presentingViewController = fullScreenAdViewController.presentingViewController; - __weak __typeof__(self) weakSelf = self; - [fullScreenAdViewController dismissViewControllerAnimated:NO completion:^{ - __typeof__(self) strongSelf = weakSelf; - - if (inExpandedState) { - [strongSelf didEndAnimatingAdSize]; - - // If expanded, we don't need to change the state of the ad once the modal is present here as the ad is technically - // always in the expanded state throughout the process of dismissing and presenting. - [strongSelf presentExpandModalViewControllerWithView:strongSelf.expansionContentView animated:NO completion:^{ - [strongSelf updateMRAIDProperties]; - }]; - } else { - fullScreenAdViewController.supportedOrientationMask = forceOrientationMask; - [presentingViewController presentViewController:fullScreenAdViewController animated:NO completion:^{ - [strongSelf didEndAnimatingAdSize]; - strongSelf.currentInterfaceOrientation = MPInterfaceOrientation(); - [strongSelf updateMRAIDProperties]; - }]; - } - }]; - } -} - -- (void)bridge:(MRBridge *)bridge handleNativeCommandExpandWithURL:(NSURL *)url useCustomClose:(BOOL)useCustomClose -{ - if (self.placementType != MRAdViewPlacementTypeInline) { - [bridge fireErrorEventForAction:kMRAIDCommandExpand withMessage:@"Cannot expand from interstitial ads."]; - return; - } - - // Save the state of the default ad view if it's in default state. If it's resized, the controller has already - // been informed of a modal being presented on resize, and the expand basically takes its place. Additionally, - // self.mraidDefaultAdFrame has already been set from resize, and the mraidAdView's frame is not the correct default. - if (self.currentState != MRAdViewStateResized) { - self.mraidDefaultAdFrame = self.mraidAdView.frame; - [self adWillPresentModalViewByExpanding:YES]; - } else { - [self.resizeBackgroundView removeFromSuperview]; - } - - // We change the state after the modal is fully presented which results in an undesirable animation where the banner will briefly appear in the modal which then - // will instantly change to the full screen ad. However, it is far safer to update the state like this and has less side effects. - if (url) { - // It doesn't matter what frame we use for the two-part expand. We'll overwrite it with a new frame when presenting the modal. - CGRect twoPartFrame = self.mraidAdView.frame; - - MPWebView *twoPartWebView = [self buildMRAIDWebViewWithFrame:twoPartFrame]; - self.mraidBridgeTwoPart = [[MRBridge alloc] initWithWebView:twoPartWebView delegate:self]; - self.mraidAdViewTwoPart = [[MPClosableView alloc] initWithFrame:twoPartFrame - contentView:twoPartWebView - delegate:self]; - self.isAdLoading = YES; - - self.expansionContentView = self.mraidAdViewTwoPart; - - // To avoid race conditions, we start loading the two part creative after the ad has fully expanded. - [self presentExpandModalViewControllerWithView:self.expansionContentView animated:YES completion:^{ - [self loadTwoPartCreativeFromURL:url]; - [self changeStateTo:MRAdViewStateExpanded]; - }]; - } else { - self.expansionContentView = self.mraidAdView; - //If the ad is resized, the original superview has already been set. - if (self.currentState != MRAdViewStateResized) { - self.originalSuperview = self.mraidAdView.superview; - } - [self presentExpandModalViewControllerWithView:self.expansionContentView animated:YES completion:^{ - [self changeStateTo:MRAdViewStateExpanded]; - }]; - } - - [self configureCloseButtonForView:self.expansionContentView forUseCustomClose:(useCustomClose && self.allowCustomClose)]; -} - -- (void)bridge:(MRBridge *)bridge handleNativeCommandResizeWithParameters:(NSDictionary *)parameters -{ - NSArray *parameterKeys = [parameters allKeys]; - if (self.currentState == MRAdViewStateExpanded) { - [bridge fireErrorEventForAction:kMRAIDCommandResize withMessage:@"Cannot resize from and expanded state."]; - return; - } else if (self.placementType != MRAdViewPlacementTypeInline) { - [bridge fireErrorEventForAction:kMRAIDCommandResize withMessage:@"Cannot resize from interstitial ads."]; - return; - } else if (![parameterKeys containsObject:@"width"] || ![parameterKeys containsObject:@"height"] || ![parameterKeys containsObject:@"offsetX"] || ![parameterKeys containsObject:@"offsetY"]) { - [bridge fireErrorEventForAction:kMRAIDCommandResize withMessage:@"Cannot resize when missing required parameter(s)."]; - return; - } - - CGFloat width = [[parameters objectForKey:@"width"] floatValue]; - CGFloat height = [[parameters objectForKey:@"height"] floatValue]; - CGFloat offsetX = [[parameters objectForKey:@"offsetX"] floatValue]; - CGFloat offsetY = [[parameters objectForKey:@"offsetY"] floatValue]; - BOOL allowOffscreen = [parameters objectForKey:@"allowOffscreen"] ? [[parameters objectForKey:@"allowOffscreen"] boolValue] : YES; - NSString *customClosePositionString = [[parameters objectForKey:@"customClosePosition"] length] ? [parameters objectForKey:@"customClosePosition"] : @"top-right"; - - //save default frame of the ad view - if (self.currentState == MRAdViewStateDefault) { - self.mraidDefaultAdFrameInKeyWindow = [self.mraidAdView.superview convertRect:self.mraidAdView.frame toView:MPKeyWindow().rootViewController.view]; - } - - MPClosableViewCloseButtonLocation closeButtonLocation = [self adCloseButtonLocationFromString:customClosePositionString]; - CGRect applicationSafeArea = MPApplicationFrame(self.includeSafeAreaInsetsInCalculations); - CGRect newFrame = CGRectMake(CGRectGetMinX(applicationSafeArea) + offsetX, - CGRectGetMinY(applicationSafeArea) + offsetY, - width, - height); - if (!allowOffscreen) { // if `allowOffscreen` is YES, the frame doesn't need to be adjusted - newFrame = [[self class] adjustedFrameForFrame:newFrame toFitIntoApplicationSafeArea:applicationSafeArea]; - } - - if (![[self class] isValidResizeFrame:newFrame - inApplicationSafeArea:applicationSafeArea - allowOffscreen:allowOffscreen]) { - [self.mraidBridge fireErrorEventForAction:kMRAIDCommandResize withMessage:@"Could not display desired frame in compliance with MRAID 2.0 specifications."]; - } else if (![[self class] isValidCloseButtonPlacement:closeButtonLocation - inAdFrame:newFrame - inApplicationSafeArea:applicationSafeArea]) { - [self.mraidBridge fireErrorEventForAction:kMRAIDCommandResize withMessage:@"Custom close event region locates in invalid area."]; - } else { - // Update the close button - self.mraidAdView.closeButtonType = MPClosableViewCloseButtonTypeTappableWithoutImage; - self.mraidAdView.closeButtonLocation = closeButtonLocation; - - // If current state is default, save our current frame as the default frame, set originalSuperview, setup resizeBackgroundView, - // move mraidAdView to rootViewController's view, and call adWillPresentModalView - if (self.currentState == MRAdViewStateDefault) { - self.mraidDefaultAdFrame = self.mraidAdView.frame; - self.originalSuperview = self.mraidAdView.superview; - - self.mraidAdView.frame = self.mraidDefaultAdFrameInKeyWindow; - self.resizeBackgroundView.frame = MPApplicationFrame(self.includeSafeAreaInsetsInCalculations); - - [MPKeyWindow().rootViewController.view addSubview:self.resizeBackgroundView]; - [MPKeyWindow().rootViewController.view addSubview:self.mraidAdView]; - - [self adWillPresentModalViewByExpanding:YES]; - } - - [self animateViewFromDefaultStateToResizedState:self.mraidAdView withFrame:newFrame]; - } -} - -#pragma mark - - -- (void)closeButtonPressed:(MPClosableView *)view -{ - [self close]; -} - -- (void)closableView:(MPClosableView *)closableView didMoveToWindow:(UIWindow *)window -{ - // Fire the ready event and initialize properties if the view has a window. - MRBridge *bridge = [self bridgeForAdView:closableView]; - - if (!self.didConfigureOrientationNotificationObservers && bridge == self.mraidBridge) { - // The window may be nil if it was removed from a window or added to a view that isn't attached to a window so make sure it actually has a window. - if (window != nil) { - // Just in case this code is executed twice, ensures that self is only added as - // an observer once. - [[NSNotificationCenter defaultCenter] removeObserver:self name:UIDeviceOrientationDidChangeNotification object:nil]; - - //Keep track of the orientation before we start observing changes. - self.currentInterfaceOrientation = MPInterfaceOrientation(); - - // Placing orientation notification observing here ensures that the controller only - // observes changes after it's been added to the view hierarchy. Subscribing to - // orientation changes so we can notify the javascript about the new screen size. - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(orientationDidChange:) - name:UIDeviceOrientationDidChangeNotification - object:nil]; - - [self.adPropertyUpdateTimer scheduleNow]; - self.didConfigureOrientationNotificationObservers = YES; - } - } -} - -#pragma mark - - -- (void)displayAgentWillPresentModal -{ - [self adWillPresentModalViewByExpanding:NO]; -} - -- (void)displayAgentDidDismissModal -{ - [self adDidDismissModalView]; -} - -- (void)displayAgentWillLeaveApplication -{ - // Do nothing. -} - -#pragma mark - Property Updating - -- (void)updateMRAIDProperties -{ - // Don't need to update mraid properties while animating as they'll be set correctly when the animations start/finish and it - // requires a bit of extra state logic to handle. We also don't want to check if the ad is visible during animation because - // the view is transitioning to a parent view that may or may not be on screen at any given time. - if (!self.isAnimatingAdSize) { - [self updateCurrentPosition]; - [self updateDefaultPosition]; - [self updateScreenSize]; - [self updateMaxSize]; - [self updateEventSizeChange]; - - // Updating the Viewable state should be last because the creative may have a - // viewable event handler that relies upon the current position and sizes to be - // properly set. - [self checkViewability]; - } -} - -- (CGRect)activeAdFrameInScreenSpace -{ - CGRect visibleFrame = CGRectZero; - - // Full screen ads, including inline ads that are in an expanded state. - // The active area should be the full application frame residing in the - // safe area. - BOOL isExpandedInLineAd = (self.placementType == MRAdViewPlacementTypeInline && - self.currentState == MRAdViewStateExpanded); - if (self.placementType == MRAdViewPlacementTypeInterstitial || isExpandedInLineAd) { - visibleFrame = MPApplicationFrame(self.includeSafeAreaInsetsInCalculations); - } - // Inline ads that are not in an expanded state. - else if (self.placementType == MRAdViewPlacementTypeInline) { - UIWindow *keyWindow = MPKeyWindow(); - visibleFrame = [self.mraidAdView.superview convertRect:self.mraidAdView.frame toView:keyWindow.rootViewController.view]; - } - - return visibleFrame; -} - -- (CGRect)defaultAdFrameInScreenSpace -{ - CGRect defaultFrame = CGRectZero; - - if (self.placementType == MRAdViewPlacementTypeInline) { - UIWindow *keyWindow = MPKeyWindow(); - if (self.expansionContentView == self.mraidAdViewTwoPart) { - defaultFrame = [self.mraidAdView.superview convertRect:self.mraidAdView.frame toView:keyWindow.rootViewController.view]; - } else { - defaultFrame = [self.originalSuperview convertRect:self.mraidDefaultAdFrame toView:keyWindow.rootViewController.view]; - } - } else if (self.placementType == MRAdViewPlacementTypeInterstitial) { - defaultFrame = self.mraidAdView.frame; - } - - return defaultFrame; -} - -- (void)updateCurrentPosition -{ - CGRect frame = [self activeAdFrameInScreenSpace]; - - @synchronized (self) { - // No need to update since nothing has changed. - if (CGRectEqualToRect(frame, self.previousCurrentPosition)) { - return; - } - - // Update previous value - self.previousCurrentPosition = frame; - - // Only fire to the active ad view. - MRBridge *activeBridge = [self bridgeForActiveAdView]; - [activeBridge fireSetCurrentPositionWithPositionRect:frame]; - - MPLogDebug(@"Current Position: %@", NSStringFromCGRect(frame)); - } -} - -- (void)updateDefaultPosition -{ - CGRect defaultFrame = [self defaultAdFrameInScreenSpace]; - - @synchronized (self) { - // No need to update since nothing has changed. - if (CGRectEqualToRect(defaultFrame, self.previousDefaultPosition)) { - return; - } - - // Update previous value - self.previousDefaultPosition = defaultFrame; - - // Not necessary to fire to both ad views, but it's better that the two-part expand knows the default position than not. - [self.mraidBridge fireSetDefaultPositionWithPositionRect:defaultFrame]; - [self.mraidBridgeTwoPart fireSetDefaultPositionWithPositionRect:defaultFrame]; - - MPLogDebug(@"Default Position: %@", NSStringFromCGRect(defaultFrame)); - } -} - -- (void)updateScreenSize -{ - // Fire an event for screen size changing. This includes the area of the status bar in its calculation. - CGSize screenSize = MPScreenBounds().size; - - @synchronized (self) { - // No need to update since nothing has changed. - if (CGSizeEqualToSize(screenSize, self.previousScreenSize)) { - return; - } - - // Update previous value - self.previousScreenSize = screenSize; - - // Fire to both ad views as it pertains to both views. - [self.mraidBridge fireSetScreenSize:screenSize]; - [self.mraidBridgeTwoPart fireSetScreenSize:screenSize]; - - MPLogDebug(@"Screen Size: %@", NSStringFromCGSize(screenSize)); - } -} - -- (void)updateMaxSize -{ - // Similar to updateScreenSize except this doesn't include the area of the status bar in its calculation. - CGSize maxSize = MPApplicationFrame(self.includeSafeAreaInsetsInCalculations).size; - - @synchronized (self) { - // No need to update since nothing has changed. - if (CGSizeEqualToSize(maxSize, self.previousMaxSize)) { - return; - } - - // Update previous value - self.previousMaxSize = maxSize; - - // Fire to both ad views as it pertains to both views. - [self.mraidBridge fireSetMaxSize:maxSize]; - [self.mraidBridgeTwoPart fireSetMaxSize:maxSize]; - - MPLogDebug(@"Max Size: %@", NSStringFromCGSize(maxSize)); - } -} - -- (void)updateOrientation -{ - self.expandModalViewController.supportedOrientationMask = self.forceOrientationMask; - self.interstitialViewController.supportedOrientationMask = self.forceOrientationMask; - - MPLogDebug(@"Orientation: %ud", (unsigned int)self.forceOrientationMask); -} - -#pragma mark - MRAID events - -- (void)updateEventSizeChange -{ - CGSize adSize = [self activeAdFrameInScreenSpace].size; - - // Firing the size change event will broadcast the event to the ad. The ad may subscribe to this event and - // perform some action when it receives the event. As a result, we don't want to have the ad do any work - // when the size hasn't changed. So we make sure we don't fire the size change event unless the size has - // actually changed. We don't place similar guards around updating properties that don't broadcast events - // since the ad won't be notified when we update the properties. Thus, the ad can't do any unnecessary work - // when we update other properties. - if (!CGSizeEqualToSize(adSize, self.currentAdSize)) { - MRBridge *activeBridge = [self bridgeForActiveAdView]; - self.currentAdSize = adSize; - - MPLogDebug(@"Ad Size (Size Event): %@", NSStringFromCGSize(self.currentAdSize)); - [activeBridge fireSizeChangeEvent:adSize]; - } -} - -- (void)changeStateTo:(MRAdViewState)state -{ - self.currentState = state; - - // Update the mraid properties so they're ready before the state change happens. - [self updateMRAIDProperties]; - [self fireChangeEventToBothBridgesForProperty:[MRStateProperty propertyWithState:self.currentState]]; -} - -#pragma mark - Viewability Helpers - -- (void)checkViewability -{ - BOOL viewable = MPViewIsVisible([self activeView]) && - ([[UIApplication sharedApplication] applicationState] == UIApplicationStateActive); - [self updateViewabilityWithBool:viewable]; -} - -- (void)viewEnteredBackground -{ - [self updateViewabilityWithBool:NO]; -} - -- (void)updateViewabilityWithBool:(BOOL)currentViewability -{ - if (self.isViewable != currentViewability) - { - MPLogDebug(@"Viewable changed to: %@", currentViewability ? @"YES" : @"NO"); - self.isViewable = currentViewability; - - // Both views in two-part expand need to report if they're viewable or not depending on the active one. - [self fireChangeEventToBothBridgesForProperty:[MRViewableProperty propertyWithViewable:self.isViewable]]; - } -} - -#pragma mark - Delegation Wrappers - -- (void)adDidLoad -{ - // Configure environment and fire ready event when ad is finished loading. - [self configureMraidEnvironmentToShowAdForBridge:self.mraidBridge]; - - if ([self.delegate respondsToSelector:@selector(adDidLoad:)]) { - [self.delegate adDidLoad:self.mraidAdView]; - } -} - -- (void)adDidFailToLoad -{ - if ([self.delegate respondsToSelector:@selector(adDidFailToLoad:)]) { - [self.delegate adDidFailToLoad:self.mraidAdView]; - } -} - -- (void)adWillClose -{ - if ([self.delegate respondsToSelector:@selector(adWillClose:)]) { - [self.delegate adWillClose:self.mraidAdView]; - } -} - -- (void)adDidClose -{ - if ([self.delegate respondsToSelector:@selector(adDidClose:)]) { - [self.delegate adDidClose:self.mraidAdView]; - } -} - -- (void)rewardedVideoEnded -{ - if ([self.delegate respondsToSelector:@selector(rewardedVideoEnded)]) { - [self.delegate rewardedVideoEnded]; - } -} - -- (void)adWillPresentModalViewByExpanding:(BOOL)wasExpended -{ - self.modalViewCount++; - if (self.modalViewCount >= 1 && !wasExpended) { - [self appShouldSuspend]; - } - - // Notify listeners that the ad is expanding or resizing to present - // a modal view. - if (wasExpended && [self.delegate respondsToSelector:@selector(adWillExpand:)]) { - [self.delegate adWillExpand:self.mraidAdView]; - } -} - -- (void)adDidDismissModalView -{ - self.modalViewCount--; - if (self.modalViewCount == 0) { - [self appShouldResume]; - } -} - -- (void)appShouldSuspend -{ - // App is already suspended; do nothing. - if (self.isAppSuspended) { - return; - } - - self.isAppSuspended = YES; - if ([self.delegate respondsToSelector:@selector(appShouldSuspendForAd:)]) { - [self.delegate appShouldSuspendForAd:self.mraidAdView]; - } -} - -- (void)appShouldResume -{ - // App is not suspended; do nothing. - if (!self.isAppSuspended) { - return; - } - - self.isAppSuspended = NO; - if ([self.delegate respondsToSelector:@selector(appShouldResumeFromAd:)]) { - [self.delegate appShouldResumeFromAd:self.mraidAdView]; - } -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRError.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRError.h deleted file mode 100644 index 7708d014ad..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRError.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// MRError.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -extern NSString * const MoPubMRAIDAdsSDKDomain; - -enum { - MRErrorMRAIDJSNotFound -}; -typedef NSInteger MRErrorCode; diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRError.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRError.m deleted file mode 100644 index f13b93daa4..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRError.m +++ /dev/null @@ -1,11 +0,0 @@ -// -// MRError.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MRError.h" - -NSString * const MoPubMRAIDAdsSDKDomain = @"com.mopub.iossdk.mraid"; diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRExpandModalViewController.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRExpandModalViewController.h deleted file mode 100644 index 0a7090b9a4..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRExpandModalViewController.h +++ /dev/null @@ -1,27 +0,0 @@ -// -// MRExpandModalViewController.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPClosableView.h" -#import "MPForceableOrientationProtocol.h" -@protocol MRExpandModalViewControllerDelegate; - -/** - * `MRExpandModalViewController` is specifically for presenting expanded MRAID ads. Its orientation can be - * forced via the orientationMask property. - */ -@interface MRExpandModalViewController : UIViewController - -/** - * Initializes the view controller with an orientation mask that defines what orientation - * the view controller supports. When using an orientation mask on initialization, the view controlller - * will force the orientation of the device to match the orientation mask if the app supports it. - */ -- (instancetype)initWithOrientationMask:(UIInterfaceOrientationMask)orientationMask; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRExpandModalViewController.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRExpandModalViewController.m deleted file mode 100644 index 677d5fe941..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRExpandModalViewController.m +++ /dev/null @@ -1,68 +0,0 @@ -// -// MRExpandModalViewController.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MRExpandModalViewController.h" -#import "MPGlobal.h" - -@interface MRExpandModalViewController () - -@property (nonatomic, assign) UIInterfaceOrientationMask supportedOrientationMask; - -@end - -@implementation MRExpandModalViewController - -- (instancetype)initWithOrientationMask:(UIInterfaceOrientationMask)orientationMask -{ - if (self = [super init]) { - _supportedOrientationMask = orientationMask; - self.modalPresentationStyle = UIModalPresentationFullScreen; - } - - return self; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - self.view.backgroundColor = [UIColor blackColor]; -} - -- (BOOL)prefersStatusBarHidden -{ - return YES; -} - -- (void)setSupportedOrientationMask:(UIInterfaceOrientationMask)supportedOrientationMask -{ - _supportedOrientationMask = supportedOrientationMask; - - [UIViewController attemptRotationToDeviceOrientation]; -} - -- (UIInterfaceOrientationMask)supportedInterfaceOrientations -{ - return ([[UIApplication sharedApplication] mp_supportsOrientationMask:self.supportedOrientationMask]) ? self.supportedOrientationMask : UIInterfaceOrientationMaskAll; -} - -- (BOOL)shouldAutorotate -{ - return YES; -} - -#pragma mark - - -// We transfer closable view delegation to the expand view controller in the event MRController is deallocated and the expand modal is presented. -- (void)closeButtonPressed:(MPClosableView *)closableView -{ - // All we need to do is dismiss ourself. - [self dismissViewControllerAnimated:YES completion:nil]; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRNativeCommandHandler.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRNativeCommandHandler.h deleted file mode 100644 index 4a364be1f7..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRNativeCommandHandler.h +++ /dev/null @@ -1,50 +0,0 @@ -// -// MRNativeCommandHandler.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import -#import "MRConstants.h" - -@class MRCommand; -@protocol MRNativeCommandHandlerDelegate; - -/** - * The `MRNativeCommandHandler` class is an object that encapsulates functionality that processes, - * and where possible, executes MRAID commands. - */ -@interface MRNativeCommandHandler : NSObject - -- (instancetype)initWithDelegate:(id)delegate; -- (void)handleNativeCommand:(NSString *)command withProperties:(NSDictionary *)properties; - -@end - -/** - * The delegate of an `MRNativeCommandHandler` object that implements `MRNativeCommandHandlerDelegate` - * must provide information and a view controller that allow the `MRNativeCommandHandler` to execute - * MRAID commands. The `MRNativeCommandHandlerDelegate` is also notified of certain events and - * expected to respond appropriately to them. - */ -@protocol MRNativeCommandHandlerDelegate - -- (void)handleMRAIDUseCustomClose:(BOOL)useCustomClose; -- (void)handleMRAIDSetOrientationPropertiesWithForceOrientationMask:(UIInterfaceOrientationMask)forceOrientationMask; -- (void)handleMRAIDExpandWithParameters:(NSDictionary *)params; -- (void)handleMRAIDResizeWithParameters:(NSDictionary *)params; -- (void)handleMRAIDClose; -- (void)handleMRAIDOpenCallForURL:(NSURL *)URL; -- (void)nativeCommandWillPresentModalView; -- (void)nativeCommandDidDismissModalView; -- (void)nativeCommandCompleted:(NSString *)command; -- (void)nativeCommandFailed:(NSString *)command withMessage:(NSString *)message; -- (UIViewController *)viewControllerForPresentingModalView; -- (MRAdViewPlacementType)adViewPlacementType; -- (BOOL)userInteractedWithWebView; -- (BOOL)handlingWebviewRequests; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRNativeCommandHandler.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRNativeCommandHandler.m deleted file mode 100644 index c9548d99fa..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRNativeCommandHandler.m +++ /dev/null @@ -1,126 +0,0 @@ -// -// MRNativeCommandHandler.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MRNativeCommandHandler.h" -#import "MRCommand.h" -#import "MPGlobal.h" -#import "MPLogging.h" -#import "MRVideoPlayerManager.h" - -@interface MRNativeCommandHandler () - -@property (nonatomic, weak) id delegate; -@property (nonatomic, strong) MRVideoPlayerManager *videoPlayerManager; - -@end - -@implementation MRNativeCommandHandler - -- (instancetype)initWithDelegate:(id)delegate -{ - self = [super init]; - if (self) { - _delegate = delegate; - - _videoPlayerManager = [[MRVideoPlayerManager alloc] initWithDelegate:self]; - } - - return self; -} - -- (void)handleNativeCommand:(NSString *)command withProperties:(NSDictionary *)properties -{ - BOOL success = YES; - - MRCommand *cmd = [MRCommand commandForString:command]; - if (cmd == nil) { - success = NO; - } else if ([self shouldExecuteMRCommand:cmd]) { - cmd.delegate = self; - success = [cmd executeWithParams:properties]; - } - - [self.delegate nativeCommandCompleted:command]; - - if (!success) { - MPLogDebug(@"Unknown command: %@", command); - [self.delegate nativeCommandFailed:command withMessage:@"Specified command is not implemented."]; - } -} - -- (BOOL)shouldExecuteMRCommand:(MRCommand *)cmd -{ - // The command may not be whitelisted to run while the delegate is not handling webview requests. - if (![self.delegate handlingWebviewRequests] && ![cmd executableWhileBlockingRequests]) { - return NO; - } - - // some MRAID commands may not require user interaction - return ![cmd requiresUserInteractionForPlacementType:[self.delegate adViewPlacementType]] || [self.delegate userInteractedWithWebView]; -} - -#pragma mark - MRCommandDelegate - -- (void)mrCommand:(MRCommand *)command playVideoWithURL:(NSURL *)url -{ - [self.videoPlayerManager playVideo:url]; -} - -- (void)mrCommand:(MRCommand *)command shouldUseCustomClose:(BOOL)useCustomClose -{ - [self.delegate handleMRAIDUseCustomClose:useCustomClose]; -} - -- (void)mrCommand:(MRCommand *)command setOrientationPropertiesWithForceOrientation:(UIInterfaceOrientationMask)forceOrientation -{ - [self.delegate handleMRAIDSetOrientationPropertiesWithForceOrientationMask:forceOrientation]; -} - -- (void)mrCommand:(MRCommand *)command openURL:(NSURL *)url -{ - [self.delegate handleMRAIDOpenCallForURL:url]; -} - -- (void)mrCommand:(MRCommand *)command expandWithParams:(NSDictionary *)params -{ - [self.delegate handleMRAIDExpandWithParameters:params]; -} - -- (void)mrCommand:(MRCommand *)command resizeWithParams:(NSDictionary *)params -{ - [self.delegate handleMRAIDResizeWithParameters:params]; -} - -- (void)mrCommandClose:(MRCommand *)command -{ - [self.delegate handleMRAIDClose]; -} - -#pragma mark - - -- (void)videoPlayerManager:(MRVideoPlayerManager *)manager didFailToPlayVideoWithErrorMessage:(NSString *)message -{ - [self.delegate nativeCommandFailed:@"playVideo" withMessage:message]; -} - -- (void)videoPlayerManagerWillPresentVideo:(MRVideoPlayerManager *)manager -{ - [self.delegate nativeCommandWillPresentModalView]; -} - -- (void)videoPlayerManagerDidDismissVideo:(MRVideoPlayerManager *)manager -{ - [self.delegate nativeCommandDidDismissModalView]; -} - -- (UIViewController *)viewControllerForPresentingVideoPlayer -{ - return [self.delegate viewControllerForPresentingModalView]; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRProperty.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRProperty.h deleted file mode 100644 index 3994dbc95d..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRProperty.h +++ /dev/null @@ -1,92 +0,0 @@ -// -// MRProperty.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import -#import "MRConstants.h" - -@interface MRProperty : NSObject - -- (NSString *)description; -- (NSString *)jsonString; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MRHostSDKVersionProperty : MRProperty - -@property (nonatomic, copy) NSString *version; - -+ (MRHostSDKVersionProperty *)defaultProperty; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MRPlacementTypeProperty : MRProperty { - MRAdViewPlacementType _placementType; -} - -@property (nonatomic, assign) MRAdViewPlacementType placementType; - -+ (MRPlacementTypeProperty *)propertyWithType:(MRAdViewPlacementType)type; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MRStateProperty : MRProperty { - MRAdViewState _state; -} - -@property (nonatomic, assign) MRAdViewState state; - -+ (MRStateProperty *)propertyWithState:(MRAdViewState)state; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MRScreenSizeProperty : MRProperty { - CGSize _screenSize; -} - -@property (nonatomic, assign) CGSize screenSize; - -+ (MRScreenSizeProperty *)propertyWithSize:(CGSize)size; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MRSupportsProperty : MRProperty - -@property (nonatomic, assign) BOOL supportsSms; -@property (nonatomic, assign) BOOL supportsTel; -@property (nonatomic, assign) BOOL supportsCalendar; -@property (nonatomic, assign) BOOL supportsStorePicture; -@property (nonatomic, assign) BOOL supportsInlineVideo; - -+ (NSDictionary *)supportedFeatures; -+ (MRSupportsProperty *)defaultProperty; -+ (MRSupportsProperty *)propertyWithSupportedFeaturesDictionary:(NSDictionary *)dictionary; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MRViewableProperty : MRProperty { - BOOL _isViewable; -} - -@property (nonatomic, assign) BOOL isViewable; - -+ (MRViewableProperty *)propertyWithViewable:(BOOL)viewable; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRProperty.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRProperty.m deleted file mode 100644 index 878e32d75d..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRProperty.m +++ /dev/null @@ -1,180 +0,0 @@ -// -// MRProperty.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MRProperty.h" -#import "MPConstants.h" -#import "MPCoreInstanceProvider.h" - -@implementation MRProperty - -- (NSString *)description { - return @""; -} - -- (NSString *)jsonString { - return @"{}"; -} - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MRHostSDKVersionProperty : MRProperty - -+ (instancetype)defaultProperty -{ - MRHostSDKVersionProperty *property = [[self alloc] init]; - property.version = MP_SDK_VERSION; - return property; -} - -- (NSString *)description -{ - return [NSString stringWithFormat:@"hostSDKVersion: '%@'", self.version]; -} - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MRPlacementTypeProperty : MRProperty - -+ (MRPlacementTypeProperty *)propertyWithType:(MRAdViewPlacementType)type { - MRPlacementTypeProperty *property = [[self alloc] init]; - property.placementType = type; - return property; -} - -- (NSString *)description { - NSString *placementTypeString = @"unknown"; - switch (_placementType) { - case MRAdViewPlacementTypeInline: placementTypeString = @"inline"; break; - case MRAdViewPlacementTypeInterstitial: placementTypeString = @"interstitial"; break; - default: break; - } - - return [NSString stringWithFormat:@"placementType: '%@'", placementTypeString]; -} - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MRStateProperty - -+ (MRStateProperty *)propertyWithState:(MRAdViewState)state { - MRStateProperty *property = [[self alloc] init]; - property.state = state; - return property; -} - -- (NSString *)description { - NSString *stateString; - switch (_state) { - case MRAdViewStateHidden: - stateString = @"hidden"; - break; - case MRAdViewStateDefault: - stateString = @"default"; - break; - case MRAdViewStateExpanded: - stateString = @"expanded"; - break; - case MRAdViewStateResized: - stateString = @"resized"; - break; - default: - stateString = @"loading"; - break; - } - return [NSString stringWithFormat:@"state: '%@'", stateString]; -} - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MRScreenSizeProperty : MRProperty - -+ (MRScreenSizeProperty *)propertyWithSize:(CGSize)size { - MRScreenSizeProperty *property = [[self alloc] init]; - property.screenSize = size; - return property; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"screenSize: {width: %f, height: %f}", - _screenSize.width, - _screenSize.height]; -} - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MRSupportsProperty : MRProperty - -+ (NSDictionary *)supportedFeatures -{ - return [NSDictionary dictionaryWithObjectsAndKeys: - [NSNumber numberWithBool:NO], @"sms", - [NSNumber numberWithBool:NO], @"tel", - [NSNumber numberWithBool:NO], @"calendar", - [NSNumber numberWithBool:NO], @"storePicture", - [NSNumber numberWithBool:YES], @"inlineVideo", - nil]; -} - -+ (MRSupportsProperty *)defaultProperty -{ - return [self propertyWithSupportedFeaturesDictionary:[self supportedFeatures]]; -} - -+ (MRSupportsProperty *)propertyWithSupportedFeaturesDictionary:(NSDictionary *)dictionary -{ - MRSupportsProperty *property = [[self alloc] init]; - property.supportsSms = [[dictionary objectForKey:@"sms"] boolValue]; - property.supportsTel = [[dictionary objectForKey:@"tel"] boolValue]; - property.supportsCalendar = NO; - property.supportsStorePicture = NO; - property.supportsInlineVideo = [[dictionary objectForKey:@"inlineVideo"] boolValue]; - return property; -} - -- (NSString *)description -{ - return [NSString stringWithFormat:@"supports: {sms: %@, tel: %@, calendar: %@, storePicture: %@, inlineVideo: %@}", - [self javascriptBooleanStringFromBoolValue:self.supportsSms], - [self javascriptBooleanStringFromBoolValue:self.supportsTel], - [self javascriptBooleanStringFromBoolValue:self.supportsCalendar], - [self javascriptBooleanStringFromBoolValue:self.supportsStorePicture], - [self javascriptBooleanStringFromBoolValue:self.supportsInlineVideo]]; -} - -- (NSString *)javascriptBooleanStringFromBoolValue:(BOOL)value -{ - return value ? @"true" : @"false"; -} - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MRViewableProperty : MRProperty - -+ (MRViewableProperty *)propertyWithViewable:(BOOL)viewable { - MRViewableProperty *property = [[self alloc] init]; - property.isViewable = viewable; - return property; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"viewable: %@", _isViewable ? @"true" : @"false"]; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRVideoPlayerManager.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRVideoPlayerManager.h deleted file mode 100644 index 229bcf9292..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRVideoPlayerManager.h +++ /dev/null @@ -1,30 +0,0 @@ -// -// MRVideoPlayerManager.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@protocol MRVideoPlayerManagerDelegate; - -@interface MRVideoPlayerManager : NSObject - -@property (nonatomic, weak) id delegate; - -- (id)initWithDelegate:(id)delegate; -- (void)playVideo:(NSURL *)url; - -@end - -@protocol MRVideoPlayerManagerDelegate - -- (UIViewController *)viewControllerForPresentingVideoPlayer; -- (void)videoPlayerManagerWillPresentVideo:(MRVideoPlayerManager *)manager; -- (void)videoPlayerManagerDidDismissVideo:(MRVideoPlayerManager *)manager; -- (void)videoPlayerManager:(MRVideoPlayerManager *)manager - didFailToPlayVideoWithErrorMessage:(NSString *)message; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRVideoPlayerManager.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRVideoPlayerManager.m deleted file mode 100644 index 6d38bf28d8..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRVideoPlayerManager.m +++ /dev/null @@ -1,66 +0,0 @@ -// -// MRVideoPlayerManager.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import -#import "MPGlobal.h" -#import "MRVideoPlayerManager.h" - -@interface MRVideoPlayerManager () - -@property (nonatomic, strong) AVPlayerViewController *playerViewController; - -@end - -@implementation MRVideoPlayerManager - -- (id)initWithDelegate:(id)delegate -{ - self = [super init]; - if (self) { - _delegate = delegate; - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(moviePlayerPlaybackDidFinish:) - name:AVPlayerItemDidPlayToEndTimeNotification - object:nil]; - } - return self; -} - -- (void)dealloc -{ - [[NSNotificationCenter defaultCenter] removeObserver:self]; -} - -- (void)playVideo:(NSURL *)url -{ - if (!url) { - [self.delegate videoPlayerManager:self didFailToPlayVideoWithErrorMessage:@"URI was not valid."]; - return; - } - - AVPlayerViewController *viewController = [AVPlayerViewController new]; - viewController.player = [AVPlayer playerWithURL:url]; - viewController.showsPlaybackControls = NO; - self.playerViewController = viewController; - [self.delegate videoPlayerManagerWillPresentVideo:self]; - [[self.delegate viewControllerForPresentingVideoPlayer] presentViewController:viewController - animated:MP_ANIMATED - completion:^{ - [viewController.player play]; - }]; -} - -- (void)moviePlayerPlaybackDidFinish:(NSNotification *)notification -{ - [self.playerViewController dismissViewControllerAnimated:YES completion:^{ - [self.delegate videoPlayerManagerDidDismissVideo:self]; - }]; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/MoPub+Utility.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/MoPub+Utility.h deleted file mode 100644 index f0681d0247..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/MoPub+Utility.h +++ /dev/null @@ -1,60 +0,0 @@ -// -// MoPub+Utility.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MoPub.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MoPub (Utility) - -/** - This is a simplified version of @c [MoPub openURL:options:completion:], which provides empty @c options - dictionary and nil @c completion. - - @param url A URL (Universal Resource Locator). - */ -+ (void)openURL:(NSURL*)url; - -/** - This is a wrapper method that picks the correct version of @c [UIApplication openURL:] (versus - @c [UIApplication openURL:options:completionHandler:]) base the iOS target. - - @param url A URL (Universal Resource Locator). - @param options A dictionary of options to use when opening the URL. - @param completion The block to execute with the results. - */ -+ (void)openURL:(NSURL*)url - options:(NSDictionary *)options - completion:(void (^ __nullable)(BOOL success))completion; - -/** - This method sends an impression @c NSNotification. - - @param ad the ad from which to send the notification, or @c nil - @param adUnitID the adunit ID of the ad that sent the notification - @param impressionData the impression data associated with the ad, or nil if no impression data - */ -+ (void)sendImpressionNotificationFromAd:(id _Nullable)ad - adUnitID:(NSString *)adUnitID - impressionData:(MPImpressionData * _Nullable)impressionData; - -/** - This method sends an impression @c NSNotification and notifies the @c ad's delegate of the impression. - - @param ad the ad from which to send the notification - @param adUnitID the adunit ID of the ad that sent the notification - @param impressionData the impression data associated with the ad, or nil if no impression data - */ -+ (void)sendImpressionDelegateAndNotificationFromAd:(id)ad - adUnitID:(NSString *)adUnitID - impressionData:(MPImpressionData * _Nullable)impressionData; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/MoPub+Utility.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/MoPub+Utility.m deleted file mode 100644 index cfcec1d9b6..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/MoPub+Utility.m +++ /dev/null @@ -1,54 +0,0 @@ -// -// MoPub+Utility.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MoPub+Utility.h" - -@implementation MoPub (Utility) - -+ (void)openURL:(NSURL*)url { - [self openURL:url options:@{} completion:nil]; -} - -+ (void)openURL:(NSURL*)url - options:(NSDictionary *)options - completion:(void (^ __nullable)(BOOL success))completion { - if (@available(iOS 10, *)) { - [[UIApplication sharedApplication] openURL:url options:options completionHandler:completion]; - } else { - completion([[UIApplication sharedApplication] openURL:url]); - } -} - -+ (void)sendImpressionNotificationFromAd:(id)ad - adUnitID:(NSString *)adUnitID - impressionData:(MPImpressionData * _Nullable)impressionData { - // This dictionary must always contain the adunit ID but may or may not include @c impressionData depending on if it's @c nil. - // If adding keys and objects in the future, put them above @c impressionData to avoid being skipped in the case of nil data. - NSDictionary * userInfo = [NSDictionary dictionaryWithObjectsAndKeys:adUnitID, - kMPImpressionTrackedInfoAdUnitIDKey, - impressionData, - kMPImpressionTrackedInfoImpressionDataKey, - nil]; - [[NSNotificationCenter defaultCenter] postNotificationName:kMPImpressionTrackedNotification - object:ad - userInfo:userInfo]; -} - -+ (void)sendImpressionDelegateAndNotificationFromAd:(id)ad - adUnitID:(NSString *)adUnitID - impressionData:(MPImpressionData * _Nullable)impressionData { - [self sendImpressionNotificationFromAd:ad - adUnitID:adUnitID - impressionData:impressionData]; - - if ([ad.delegate respondsToSelector:@selector(mopubAd:didTrackImpressionWithImpressionData:)]) { - [ad.delegate mopubAd:ad didTrackImpressionWithImpressionData:impressionData]; - } -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSBundle+MPAdditions.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSBundle+MPAdditions.h deleted file mode 100644 index 26fe2c874f..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSBundle+MPAdditions.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// NSBundle+MPAdditions.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@interface NSBundle (MPAdditions) - -/** - * Retrieves the bundle that contains the MoPubSDK resources. - * @param aClass MoPub class. Typically will be self.class. - * @returns The bundle containing the MoPubSDK resources. - */ -+ (NSBundle *)resourceBundleForClass:(Class)aClass; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSBundle+MPAdditions.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSBundle+MPAdditions.m deleted file mode 100644 index 220acf9c13..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSBundle+MPAdditions.m +++ /dev/null @@ -1,18 +0,0 @@ -// -// NSBundle+MPAdditions.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "NSBundle+MPAdditions.h" - -@implementation NSBundle (MPAdditions) - -+ (NSBundle *)resourceBundleForClass:(Class)aClass { - NSString * resourceBundlePath = [[NSBundle mainBundle] pathForResource:@"MoPub" ofType:@"bundle"]; - return (resourceBundlePath != nil ? [NSBundle bundleWithPath:resourceBundlePath] : [NSBundle bundleForClass:aClass]); -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSDate+MPAdditions.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSDate+MPAdditions.h deleted file mode 100644 index ac0ce3cb92..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSDate+MPAdditions.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// NSDate+MPAdditions.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@interface NSDate (MPAdditions) - -/** - Current date object. Equivalent to @c [NSDate date]. - */ -+ (NSDate *)now; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSDate+MPAdditions.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSDate+MPAdditions.m deleted file mode 100644 index e0df50fdba..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSDate+MPAdditions.m +++ /dev/null @@ -1,17 +0,0 @@ -// -// NSDate+MPAdditions.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "NSDate+MPAdditions.h" - -@implementation NSDate (MPAdditions) - -+ (NSDate *)now { - return [NSDate date]; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSDictionary+MPAdditions.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSDictionary+MPAdditions.h deleted file mode 100644 index 1ff349c0fd..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSDictionary+MPAdditions.h +++ /dev/null @@ -1,26 +0,0 @@ -// -// NSDictionary+MPAdditions.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@interface NSDictionary (MPAdditions) - -- (NSInteger)mp_integerForKey:(id)key; -- (NSInteger)mp_integerForKey:(id)key defaultValue:(NSInteger)defaultVal; -- (NSUInteger)mp_unsignedIntegerForKey:(id)key; -- (NSUInteger)mp_unsignedIntegerForKey:(id)key defaultValue:(NSUInteger)defaultVal; -- (double)mp_doubleForKey:(id)key; -- (double)mp_doubleForKey:(id)key defaultValue:(double)defaultVal; -- (NSString *)mp_stringForKey:(id)key; -- (NSString *)mp_stringForKey:(id)key defaultValue:(NSString *)defaultVal; -- (BOOL)mp_boolForKey:(id)key; -- (BOOL)mp_boolForKey:(id)key defaultValue:(BOOL)defaultVal; -- (float)mp_floatForKey:(id)key; -- (float)mp_floatForKey:(id)key defaultValue:(float)defaultVal; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSDictionary+MPAdditions.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSDictionary+MPAdditions.m deleted file mode 100644 index b8dd56ec66..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSDictionary+MPAdditions.m +++ /dev/null @@ -1,97 +0,0 @@ -// -// NSDictionary+MPAdditions.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "NSDictionary+MPAdditions.h" - -@implementation NSDictionary (MPAdditions) - -- (NSInteger)mp_integerForKey:(id)key -{ - return [self mp_integerForKey:key defaultValue:0]; -} - -- (NSInteger)mp_integerForKey:(id)key defaultValue:(NSInteger)defaultVal -{ - id obj = [self objectForKey:key]; - if ([obj respondsToSelector:@selector(integerValue)]) { - return [obj integerValue]; - } - return defaultVal; -} - -- (NSUInteger)mp_unsignedIntegerForKey:(id)key -{ - return [self mp_unsignedIntegerForKey:key defaultValue:0]; -} - -- (NSUInteger)mp_unsignedIntegerForKey:(id)key defaultValue:(NSUInteger)defaultVal -{ - id obj = [self objectForKey:key]; - if ([obj respondsToSelector:@selector(unsignedIntValue)]) { - return [obj unsignedIntValue]; - } - return defaultVal; -} - -- (double)mp_doubleForKey:(id)key -{ - return [self mp_doubleForKey:key defaultValue:0.0]; -} - -- (double)mp_doubleForKey:(id)key defaultValue:(double)defaultVal -{ - id obj = [self objectForKey:key]; - if ([obj respondsToSelector:@selector(doubleValue)]) { - return [obj doubleValue]; - } - return defaultVal; -} - -- (NSString *)mp_stringForKey:(id)key -{ - return [self mp_stringForKey:key defaultValue:nil]; -} - -- (NSString *)mp_stringForKey:(id)key defaultValue:(NSString *)defaultVal -{ - id obj = [self objectForKey:key]; - if ([obj isKindOfClass:[NSString class]]) { - return obj; - } - return defaultVal; -} - -- (BOOL)mp_boolForKey:(id)key -{ - return [self mp_boolForKey:key defaultValue:NO]; -} - -- (BOOL)mp_boolForKey:(id)key defaultValue:(BOOL)defaultVal -{ - id obj = [self objectForKey:key]; - if ([obj respondsToSelector:@selector(boolValue)]) { - return [obj boolValue]; - } - return defaultVal; -} - -- (float)mp_floatForKey:(id)key -{ - return [self mp_floatForKey:key defaultValue:0]; -} - -- (float)mp_floatForKey:(id)key defaultValue:(float)defaultVal -{ - id obj = [self objectForKey:key]; - if ([obj respondsToSelector:@selector(floatValue)]) { - return [obj floatValue]; - } - return defaultVal; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSError+MPAdditions.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSError+MPAdditions.h deleted file mode 100644 index 9ff0ca04df..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSError+MPAdditions.h +++ /dev/null @@ -1,27 +0,0 @@ -// -// NSError+MPAdditions.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@interface NSError (MPAdditions) - -/** - Queries if the error is a MoPub ad request timeout error. - */ -@property (nonatomic, readonly) BOOL isAdRequestTimedOutError; - -@end - -@interface NSError (Networking) -/** - Networking error from an HTTP status code. - @param statusCode HTTP status code. - @return Error. - */ -+ (NSError *)networkErrorWithHTTPStatusCode:(NSInteger)statusCode; -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSError+MPAdditions.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSError+MPAdditions.m deleted file mode 100644 index 0fa979838f..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSError+MPAdditions.m +++ /dev/null @@ -1,32 +0,0 @@ -// -// NSError+MPAdditions.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "NSError+MPAdditions.h" -#import "MPError.h" - -@implementation NSError (MPAdditions) - -- (BOOL)isAdRequestTimedOutError { - return ([self.domain isEqualToString:kNSErrorDomain] && self.code == MOPUBErrorAdRequestTimedOut); -} - -@end - -@implementation NSError (Networking) - -+ (NSError *)networkErrorWithHTTPStatusCode:(NSInteger)statusCode { - // `localizedStringForStatusCode:` will always give back a valid string even if the - // status code is 200 (not an error). It is up to the caller of this method to - // determine if the status code is really an error or not. - NSString * message = [NSHTTPURLResponse localizedStringForStatusCode:statusCode]; - NSError * error = [NSError errorWithDomain:kNSErrorDomain code:MOPUBErrorHTTPResponseNot200 userInfo:@{ NSLocalizedDescriptionKey: message }]; - - return error; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSHTTPURLResponse+MPAdditions.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSHTTPURLResponse+MPAdditions.h deleted file mode 100644 index 47ccbd57b1..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSHTTPURLResponse+MPAdditions.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// NSHTTPURLResponse+MPAdditions.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -extern NSString * const kMoPubHTTPHeaderContentType; - -@interface NSHTTPURLResponse (MPAdditions) - -- (NSStringEncoding)stringEncodingFromContentType:(NSString *)contentType; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSHTTPURLResponse+MPAdditions.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSHTTPURLResponse+MPAdditions.m deleted file mode 100644 index e432d9946f..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSHTTPURLResponse+MPAdditions.m +++ /dev/null @@ -1,45 +0,0 @@ -// -// NSHTTPURLResponse+MPAdditions.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "NSHTTPURLResponse+MPAdditions.h" -#import "MPLogging.h" - -NSString * const kMoPubHTTPHeaderContentType = @"Content-Type"; - -@implementation NSHTTPURLResponse (MPAdditions) - -- (NSStringEncoding)stringEncodingFromContentType:(NSString *)contentType -{ - NSStringEncoding encoding = NSUTF8StringEncoding; - - if (![contentType length]) { - MPLogInfo(@"Attempting to set string encoding from nil %@", kMoPubHTTPHeaderContentType); - return encoding; - } - - NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(?<=charset=)[^;]*" options:kNilOptions error:nil]; - - NSTextCheckingResult *charsetResult = [regex firstMatchInString:contentType options:kNilOptions range:NSMakeRange(0, [contentType length])]; - if (charsetResult && charsetResult.range.location != NSNotFound) { - NSString *charset = [contentType substringWithRange:[charsetResult range]]; - - // ensure that charset is not deallocated early - CFStringRef cfCharset = (CFStringRef)CFBridgingRetain(charset); - CFStringEncoding cfEncoding = CFStringConvertIANACharSetNameToEncoding(cfCharset); - CFBridgingRelease(cfCharset); - - if (cfEncoding == kCFStringEncodingInvalidId) { - return encoding; - } - encoding = CFStringConvertEncodingToNSStringEncoding(cfEncoding); - } - - return encoding; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSJSONSerialization+MPAdditions.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSJSONSerialization+MPAdditions.h deleted file mode 100644 index 8acf7f8ffe..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSJSONSerialization+MPAdditions.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// NSJSONSerialization+MPAdditions.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@interface NSJSONSerialization (MPAdditions) - -+ (id)mp_JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt clearNullObjects:(BOOL)clearNulls error:(NSError **)error; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSJSONSerialization+MPAdditions.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSJSONSerialization+MPAdditions.m deleted file mode 100644 index 8a686a28d5..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSJSONSerialization+MPAdditions.m +++ /dev/null @@ -1,94 +0,0 @@ -// -// NSJSONSerialization+MPAdditions.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "NSJSONSerialization+MPAdditions.h" - -@interface NSMutableDictionary (RemoveNullObjects) - -- (void)mp_removeNullsRecursively; - -@end - -@interface NSMutableArray (RemoveNullObjects) - -- (void)mp_removeNullsRecursively; - -@end - -@implementation NSJSONSerialization (MPAdditions) - -+ (id)mp_JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt clearNullObjects:(BOOL)clearNulls error:(NSError **)error -{ - if (clearNulls) { - opt |= NSJSONReadingMutableContainers; - } - - id JSONObject = [NSJSONSerialization JSONObjectWithData:data options:opt error:error]; - - if (error || !clearNulls) { - return JSONObject; - } - - [JSONObject mp_removeNullsRecursively]; - - return JSONObject; -} - -@end - -@implementation NSMutableDictionary (RemovingNulls) - --(void)mp_removeNullsRecursively -{ - // First, filter out directly stored nulls - NSMutableArray *nullKeys = [NSMutableArray array]; - NSMutableArray *arrayKeys = [NSMutableArray array]; - NSMutableArray *dictionaryKeys = [NSMutableArray array]; - - [self enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { - if ([obj isEqual:[NSNull null]]) { - [nullKeys addObject:key]; - } else if ([obj isKindOfClass:[NSDictionary class]]) { - [dictionaryKeys addObject:key]; - } else if ([obj isKindOfClass:[NSArray class]]) { - [arrayKeys addObject:key]; - } - }]; - - // Remove all the nulls - [self removeObjectsForKeys:nullKeys]; - - // Cascade down the dictionaries - for (id dictionaryKey in dictionaryKeys) { - NSMutableDictionary *dictionary = [self objectForKey:dictionaryKey]; - [dictionary mp_removeNullsRecursively]; - } - - // Recursively remove nulls from arrays - for (id arrayKey in arrayKeys) { - NSMutableArray *array = [self objectForKey:arrayKey]; - [array mp_removeNullsRecursively]; - } -} - -@end - -@implementation NSMutableArray (RemovingNulls) - --(void)mp_removeNullsRecursively -{ - [self removeObjectIdenticalTo:[NSNull null]]; - - for (id object in self) { - if ([object respondsToSelector:@selector(mp_removeNullsRecursively)]) { - [(NSMutableDictionary *)object mp_removeNullsRecursively]; - } - } -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSMutableArray+MPAdditions.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSMutableArray+MPAdditions.h deleted file mode 100644 index 6d3272db41..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSMutableArray+MPAdditions.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// NSMutableArray+MPAdditions.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@interface NSMutableArray (MPAdditions) - -- (nullable ObjectType)removeFirst; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSMutableArray+MPAdditions.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSMutableArray+MPAdditions.m deleted file mode 100644 index e713da6bb2..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSMutableArray+MPAdditions.m +++ /dev/null @@ -1,22 +0,0 @@ -// -// NSMutableArray+MPAdditions.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "NSMutableArray+MPAdditions.h" - -@implementation NSMutableArray (MPAdditions) - -- (id)removeFirst { - if (self.count == 0) { - return nil; - } - id firstObject = self.firstObject; - [self removeObjectAtIndex:0]; - return firstObject; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSString+MPAdditions.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSString+MPAdditions.h deleted file mode 100644 index f398c52f90..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSString+MPAdditions.h +++ /dev/null @@ -1,24 +0,0 @@ -// -// NSString+MPAdditions.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@interface NSString (MPAdditions) - -/* - * Returns string with reserved/unsafe characters encoded. - */ -- (NSString *)mp_URLEncodedString; - -/** - * Attempts to convert the string into an integer value. - * @return A valid integer or `nil` if the string is not valid. - */ -- (NSNumber *)safeIntegerValue; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSString+MPAdditions.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSString+MPAdditions.m deleted file mode 100644 index 87e2785f9d..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSString+MPAdditions.m +++ /dev/null @@ -1,30 +0,0 @@ -// -// NSString+MPAdditions.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "NSString+MPAdditions.h" - -@implementation NSString (MPAdditions) - -- (NSString *)mp_URLEncodedString { - NSString *charactersToEscape = @"!*'();:@&=+$,/?%#[]<>"; - NSCharacterSet *allowedCharacters = [[NSCharacterSet characterSetWithCharactersInString:charactersToEscape] invertedSet]; - return [self stringByAddingPercentEncodingWithAllowedCharacters:allowedCharacters]; -} - -- (NSNumber *)safeIntegerValue { - // Reusable number formatter since reallocating this is expensive. - static NSNumberFormatter * formatter = nil; - if (formatter == nil) { - formatter = [[NSNumberFormatter alloc] init]; - formatter.numberStyle = NSNumberFormatterNoStyle; - } - - return [formatter numberFromString:self]; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSString+MPConsentStatus.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSString+MPConsentStatus.h deleted file mode 100644 index c95848b0e4..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSString+MPConsentStatus.h +++ /dev/null @@ -1,26 +0,0 @@ -// -// NSString+MPConsentStatus.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPConsentStatus.h" - -@interface NSString (MPConsentStatus) -/** - Converts the string into a @c MPConsentStatus value. If the conversion fails, - @c MPConsentStatusUnknown will be returned. - */ -- (MPConsentStatus)consentStatusValue; - -/** - Converts a @c MPConsentStatus value into a string. - @param status Consent status to convert. - @returns A valid string or @c nil. - */ -+ (NSString * _Nullable)stringFromConsentStatus:(MPConsentStatus)status; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSString+MPConsentStatus.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSString+MPConsentStatus.m deleted file mode 100644 index da5746daa7..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSString+MPConsentStatus.m +++ /dev/null @@ -1,45 +0,0 @@ -// -// NSString+MPConsentStatus.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "NSString+MPConsentStatus.h" - -// The consent value strings that are given back by the server. -static NSString * const kConsentStatusDoNotTrack = @"dnt"; -static NSString * const kConsentStatusExplicitNo = @"explicit_no"; -static NSString * const kConsentStatusExplicitYes = @"explicit_yes"; -static NSString * const kConsentStatusPotentialWhitelist = @"potential_whitelist"; -static NSString * const kConsentStatusUnknown = @"unknown"; - -@implementation NSString (MPConsentStatus) - -- (MPConsentStatus)consentStatusValue { - static NSDictionary * stringToEnumTable = nil; - if (stringToEnumTable == nil) { - stringToEnumTable = @{ kConsentStatusDoNotTrack: @(MPConsentStatusDoNotTrack), - kConsentStatusExplicitNo: @(MPConsentStatusDenied), - kConsentStatusExplicitYes: @(MPConsentStatusConsented), - kConsentStatusPotentialWhitelist: @(MPConsentStatusPotentialWhitelist), - kConsentStatusUnknown: @(MPConsentStatusUnknown) - }; - } - - return (MPConsentStatus)[stringToEnumTable[self] integerValue]; -} - -+ (NSString * _Nullable)stringFromConsentStatus:(MPConsentStatus)status { - switch (status) { - case MPConsentStatusDoNotTrack: return kConsentStatusDoNotTrack; - case MPConsentStatusDenied: return kConsentStatusExplicitNo; - case MPConsentStatusConsented: return kConsentStatusExplicitYes; - case MPConsentStatusPotentialWhitelist: return kConsentStatusPotentialWhitelist; - case MPConsentStatusUnknown: return kConsentStatusUnknown; - default: return nil; - } -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSURL+MPAdditions.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSURL+MPAdditions.h deleted file mode 100644 index 41312332b9..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSURL+MPAdditions.h +++ /dev/null @@ -1,36 +0,0 @@ -// -// NSURL+MPAdditions.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -typedef enum { - MPMoPubHostCommandUnrecognized, - MPMoPubHostCommandClose, - MPMoPubHostCommandFinishLoad, - MPMoPubHostCommandFailLoad, - MPMoPubHostCommandPrecacheComplete, - MPMoPubHostCommandRewardedVideoEnded -} MPMoPubHostCommand; - -typedef enum { - MPMoPubShareHostCommandTweet, - MPMoPubShareHostCommandUnrecognized -} MPMoPubShareHostCommand; - -@interface NSURL (MPAdditions) - -- (NSString *)mp_queryParameterForKey:(NSString *)key; -- (NSArray *)mp_queryParametersForKey:(NSString *)key; -- (NSDictionary *)mp_queryAsDictionary; -- (BOOL)mp_isSafeForLoadingWithoutUserAction; -- (BOOL)mp_isMoPubScheme; -- (MPMoPubHostCommand)mp_mopubHostCommand; -- (BOOL)mp_isMoPubShareScheme; -- (MPMoPubShareHostCommand)mp_MoPubShareHostCommand; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSURL+MPAdditions.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSURL+MPAdditions.m deleted file mode 100644 index f4d32c9503..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSURL+MPAdditions.m +++ /dev/null @@ -1,118 +0,0 @@ -// -// NSURL+MPAdditions.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "NSURL+MPAdditions.h" - -// Share Constants -static NSString * const kMoPubShareScheme = @"mopubshare"; -static NSString * const kMoPubShareTweetHost = @"tweet"; - -// Commands Constants -static NSString * const kMoPubURLScheme = @"mopub"; -static NSString * const kMoPubCloseHost = @"close"; -static NSString * const kMoPubFinishLoadHost = @"finishLoad"; -static NSString * const kMoPubFailLoadHost = @"failLoad"; -static NSString * const kMoPubPrecacheCompleteHost = @"precacheComplete"; -static NSString * const kMoPubRewardedVideoEndedHost = @"rewardedVideoEnded"; - -@implementation NSURL (MPAdditions) - -- (NSString *)mp_queryParameterForKey:(NSString *)key -{ - NSArray *queryElements = [self.query componentsSeparatedByString:@"&"]; - for (NSString *element in queryElements) { - NSArray *keyAndValue = [element componentsSeparatedByString:@"="]; - if (keyAndValue.count >= 2 && - [[keyAndValue objectAtIndex:0] isEqualToString:key] && - [[keyAndValue objectAtIndex:1] length] > 0) { - return [[keyAndValue objectAtIndex:1] stringByRemovingPercentEncoding]; - } - } - return nil; -} - -- (NSArray *)mp_queryParametersForKey:(NSString *)key -{ - NSMutableArray *matchingParameters = [NSMutableArray array]; - NSArray *queryElements = [self.query componentsSeparatedByString:@"&"]; - for (NSString *element in queryElements) { - NSArray *keyAndValue = [element componentsSeparatedByString:@"="]; - if (keyAndValue.count >= 2 && - [[keyAndValue objectAtIndex:0] isEqualToString:key] && - [[keyAndValue objectAtIndex:1] length] > 0) { - [matchingParameters addObject:[[keyAndValue objectAtIndex:1] stringByRemovingPercentEncoding]]; - } - } - return [NSArray arrayWithArray:matchingParameters]; -} - -- (NSDictionary *)mp_queryAsDictionary -{ - NSMutableDictionary *queryDict = [NSMutableDictionary dictionary]; - NSArray *queryElements = [self.query componentsSeparatedByString:@"&"]; - for (NSString *element in queryElements) { - NSArray *keyVal = [element componentsSeparatedByString:@"="]; - if (keyVal.count >= 2) { - NSString *key = [keyVal objectAtIndex:0]; - NSString *value = [keyVal objectAtIndex:1]; - [queryDict setObject:[value stringByRemovingPercentEncoding] forKey:key]; - } - } - return queryDict; -} - -- (BOOL)mp_isSafeForLoadingWithoutUserAction -{ - return [[self scheme].lowercaseString isEqualToString:@"http"] || - [[self scheme].lowercaseString isEqualToString:@"https"] || - [[self scheme].lowercaseString isEqualToString:@"about"]; -} - -- (BOOL)mp_isMoPubScheme -{ - return [[self scheme] isEqualToString:kMoPubURLScheme]; -} - -- (MPMoPubShareHostCommand)mp_MoPubShareHostCommand -{ - NSString *host = [self host]; - if (![self mp_isMoPubShareScheme]) { - return MPMoPubShareHostCommandUnrecognized; - } else if ([host isEqualToString:kMoPubShareTweetHost]) { - return MPMoPubShareHostCommandTweet; - } else { - return MPMoPubShareHostCommandUnrecognized; - } -} - -- (MPMoPubHostCommand)mp_mopubHostCommand -{ - NSString *host = [self host]; - if (![self mp_isMoPubScheme]) { - return MPMoPubHostCommandUnrecognized; - } else if ([host isEqualToString:kMoPubCloseHost]) { - return MPMoPubHostCommandClose; - } else if ([host isEqualToString:kMoPubFinishLoadHost]) { - return MPMoPubHostCommandFinishLoad; - } else if ([host isEqualToString:kMoPubFailLoadHost]) { - return MPMoPubHostCommandFailLoad; - } else if ([host isEqualToString:kMoPubPrecacheCompleteHost]) { - return MPMoPubHostCommandPrecacheComplete; - } else if ([host isEqualToString:kMoPubRewardedVideoEndedHost]) { - return MPMoPubHostCommandRewardedVideoEnded; - } else { - return MPMoPubHostCommandUnrecognized; - } -} - -- (BOOL)mp_isMoPubShareScheme -{ - return [[self scheme] isEqualToString:kMoPubShareScheme]; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/SKStoreProductViewController+MPAdditions.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/SKStoreProductViewController+MPAdditions.h deleted file mode 100644 index 9d7e2da77f..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/SKStoreProductViewController+MPAdditions.h +++ /dev/null @@ -1,24 +0,0 @@ -// -// SKStoreProductViewController+MPAdditions.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface SKStoreProductViewController (MPAdditions) - -/** - @c SKStoreProductViewController can crash the app if used under the wrong conditions (e.g., - in the case of an orientation mismatch), so this property reports whether it's safe to use - the view controller. - */ -@property (class, nonatomic, readonly) BOOL canUseStoreProductViewController; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/SKStoreProductViewController+MPAdditions.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/SKStoreProductViewController+MPAdditions.m deleted file mode 100644 index 8756f2bbe0..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/SKStoreProductViewController+MPAdditions.m +++ /dev/null @@ -1,35 +0,0 @@ -// -// SKStoreProductViewController+MPAdditions.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "SKStoreProductViewController+MPAdditions.h" - -@implementation SKStoreProductViewController (MPAdditions) - -+ (BOOL)canUseStoreProductViewController { - // @c SKStoreProductViewController cannot be used in an app environment that only - // supports landscape -- portrait is required, or presenting the view controller - // will produce an app crash -- so query the usable orientations for the app and - // report whether @c SKStoreProductViewController is usable. - - // Compute this once and use forever because the application's supported orientations - // will not change in the app lifetime. - - static BOOL canUseStoreProductViewController = NO; - - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - UIWindow * keyWindow = [UIApplication sharedApplication].keyWindow; - UIInterfaceOrientationMask appSupportedOrientations = [[UIApplication sharedApplication] supportedInterfaceOrientationsForWindow:keyWindow]; - - canUseStoreProductViewController = (appSupportedOrientations & UIInterfaceOrientationMaskPortrait) != 0; - }); - - return canUseStoreProductViewController; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/UIButton+MPAdditions.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/UIButton+MPAdditions.h deleted file mode 100644 index 46da640cdd..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/UIButton+MPAdditions.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// UIButton+MPAdditions.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface UIButton (MPVideoPlayer) - -- (void)applyMPVideoPlayerBorderedStyleWithTitle:(NSString *)title; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/UIButton+MPAdditions.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/UIButton+MPAdditions.m deleted file mode 100644 index 2627684f3e..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/UIButton+MPAdditions.m +++ /dev/null @@ -1,24 +0,0 @@ -// -// UIButton+MPAdditions.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "UIButton+MPAdditions.h" - -@implementation UIButton (MPVideoPlayer) - -- (void)applyMPVideoPlayerBorderedStyleWithTitle:(NSString *)title { - self.backgroundColor = [UIColor.blackColor colorWithAlphaComponent:0.3]; - self.contentEdgeInsets = UIEdgeInsetsMake(8, 32, 8, 32); - self.titleLabel.font = [UIFont systemFontOfSize:16]; - self.layer.borderColor = UIColor.grayColor.CGColor; - self.layer.borderWidth = 1; - self.layer.cornerRadius = 4; - [self setTitle:title forState:UIControlStateNormal]; - [self sizeToFit]; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/UIColor+MPAdditions.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/UIColor+MPAdditions.h deleted file mode 100644 index 2b6abee797..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/UIColor+MPAdditions.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// UIColor+MPAdditions.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@interface UIColor (MPAdditions) - -+ (UIColor *)mp_colorFromHexString:(NSString *)hexString alpha:(CGFloat)alpha; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/UIColor+MPAdditions.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/UIColor+MPAdditions.m deleted file mode 100644 index 8ec8bce234..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/UIColor+MPAdditions.m +++ /dev/null @@ -1,22 +0,0 @@ -// -// UIColor+MPAdditions.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "UIColor+MPAdditions.h" - -@implementation UIColor (MPAdditions) - -+ (UIColor *)mp_colorFromHexString:(NSString *)hexString alpha:(CGFloat)alpha -{ - unsigned rgbValue = 0; - NSScanner *scanner = [NSScanner scannerWithString:hexString]; - [scanner setScanLocation:1]; // bypass '#' character - [scanner scanHexInt:&rgbValue]; - return [UIColor colorWithRed:((rgbValue & 0xFF0000) >> 16)/255.0 green:((rgbValue & 0xFF00) >> 8)/255.0 blue:(rgbValue & 0xFF)/255.0 alpha:alpha]; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/UIView+MPAdditions.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/UIView+MPAdditions.h deleted file mode 100644 index e51e7dea82..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/UIView+MPAdditions.h +++ /dev/null @@ -1,46 +0,0 @@ -// -// UIView+MPAdditions.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@interface UIView (MPAdditions) - -@property (nonatomic) CGFloat mp_x; -@property (nonatomic) CGFloat mp_y; -@property (nonatomic) CGFloat mp_height; -@property (nonatomic) CGFloat mp_width; - -- (void)setMp_x:(CGFloat)mp_x; -- (void)setMp_y:(CGFloat)mp_y; -- (void)setMp_width:(CGFloat)mp_width; -- (void)setMp_height:(CGFloat)mp_height; - -- (UIView *)mp_snapshotView; - -// convert any UIView to UIImage view. We can apply blur effect on UIImage. -- (UIImage *)mp_snapshot:(BOOL)usePresentationLayer; - -@end - -/** - This @c MPSafeArea category is for reducing boilerplate code for Safe Area handling. - */ -@interface UIView (MPSafeArea) - -@property(nonatomic,readonly) NSLayoutXAxisAnchor *mp_safeLeadingAnchor; -@property(nonatomic,readonly) NSLayoutXAxisAnchor *mp_safeTrailingAnchor; -@property(nonatomic,readonly) NSLayoutXAxisAnchor *mp_safeLeftAnchor; -@property(nonatomic,readonly) NSLayoutXAxisAnchor *mp_safeRightAnchor; -@property(nonatomic,readonly) NSLayoutYAxisAnchor *mp_safeTopAnchor; -@property(nonatomic,readonly) NSLayoutYAxisAnchor *mp_safeBottomAnchor; -@property(nonatomic,readonly) NSLayoutDimension *mp_safeWidthAnchor; -@property(nonatomic,readonly) NSLayoutDimension *mp_safeHeightAnchor; -@property(nonatomic,readonly) NSLayoutXAxisAnchor *mp_safeCenterXAnchor; -@property(nonatomic,readonly) NSLayoutYAxisAnchor *mp_safeCenterYAnchor; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/UIView+MPAdditions.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/UIView+MPAdditions.m deleted file mode 100644 index dae7d17f09..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/UIView+MPAdditions.m +++ /dev/null @@ -1,184 +0,0 @@ -// -// UIView+MPAdditions.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "UIView+MPAdditions.h" - -@implementation UIView (Helper) - -- (CGFloat)mp_x -{ - return self.frame.origin.x; -} - -- (CGFloat)mp_y -{ - return self.frame.origin.y; -} - -- (CGFloat)mp_width -{ - return self.frame.size.width; -} - -- (CGFloat)mp_height -{ - return self.frame.size.height; -} - -- (void)setMp_x:(CGFloat)mp_x -{ - [self setX:mp_x andY:self.frame.origin.y]; -} - -- (void)setMp_y:(CGFloat)mp_y -{ - [self setX:self.frame.origin.x andY:mp_y]; -} - -- (void)setX:(CGFloat)x andY:(CGFloat)y -{ - CGRect f = self.frame; - self.frame = CGRectMake(x, y, f.size.width, f.size.height); -} - - -- (void)setMp_width:(CGFloat)mp_width -{ - CGRect frame = self.frame; - frame.size.width = mp_width; - self.frame = frame; -} - -- (void)setMp_height:(CGFloat)mp_height -{ - CGRect frame = self.frame; - frame.size.height = mp_height; - self.frame = frame; -} - -- (UIView *)mp_snapshotView -{ - CGRect rect = self.bounds; - UIGraphicsBeginImageContextWithOptions(rect.size, NO, self.window.screen.scale); - UIView *snapshotView; - if ([self respondsToSelector:@selector(snapshotViewAfterScreenUpdates:)]) { - snapshotView = [self snapshotViewAfterScreenUpdates:NO]; - } else { - CGContextRef ctx = UIGraphicsGetCurrentContext(); - [self.layer renderInContext:ctx]; - UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); - snapshotView = [[UIImageView alloc] initWithImage:image]; - } - UIGraphicsEndImageContext(); - return snapshotView; -} - -- (UIImage *)mp_snapshot:(BOOL)usePresentationLayer -{ - CGRect rect = self.bounds; - UIGraphicsBeginImageContextWithOptions(rect.size, NO, self.window.screen.scale); - if (!usePresentationLayer && [self respondsToSelector:@selector(drawViewHierarchyInRect:afterScreenUpdates:)]) { - [self drawViewHierarchyInRect:rect afterScreenUpdates:NO]; - } else { - CGContextRef ctx = UIGraphicsGetCurrentContext(); - if (usePresentationLayer) { - [self.layer.presentationLayer renderInContext:ctx]; - } else { - [self.layer renderInContext:ctx]; - } - } - UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - return image; -} - -@end - -@implementation UIView (MPSafeArea) - -- (NSLayoutXAxisAnchor *)mp_safeLeadingAnchor { - if (@available(iOS 11, *)) { - return self.safeAreaLayoutGuide.leadingAnchor; - } else { - return self.leadingAnchor; - } -} - -- (NSLayoutXAxisAnchor *)mp_safeTrailingAnchor { - if (@available(iOS 11, *)) { - return self.safeAreaLayoutGuide.trailingAnchor; - } else { - return self.trailingAnchor; - } -} - -- (NSLayoutXAxisAnchor *)mp_safeLeftAnchor { - if (@available(iOS 11, *)) { - return self.safeAreaLayoutGuide.leftAnchor; - } else { - return self.leftAnchor; - } -} - -- (NSLayoutXAxisAnchor *)mp_safeRightAnchor { - if (@available(iOS 11, *)) { - return self.safeAreaLayoutGuide.rightAnchor; - } else { - return self.rightAnchor; - } -} - -- (NSLayoutYAxisAnchor *)mp_safeTopAnchor { - if (@available(iOS 11, *)) { - return self.safeAreaLayoutGuide.topAnchor; - } else { - return self.topAnchor; - } -} - -- (NSLayoutYAxisAnchor *)mp_safeBottomAnchor { - if (@available(iOS 11, *)) { - return self.safeAreaLayoutGuide.bottomAnchor; - } else { - return self.bottomAnchor; - } -} - -- (NSLayoutDimension *)mp_safeWidthAnchor { - if (@available(iOS 11, *)) { - return self.safeAreaLayoutGuide.widthAnchor; - } else { - return self.widthAnchor; - } -} - -- (NSLayoutDimension *)mp_safeHeightAnchor { - if (@available(iOS 11, *)) { - return self.safeAreaLayoutGuide.heightAnchor; - } else { - return self.heightAnchor; - } -} - -- (NSLayoutXAxisAnchor *)mp_safeCenterXAnchor { - if (@available(iOS 11, *)) { - return self.safeAreaLayoutGuide.centerXAnchor; - } else { - return self.centerXAnchor; - } -} - -- (NSLayoutYAxisAnchor *)mp_safeCenterYAnchor { - if (@available(iOS 11, *)) { - return self.safeAreaLayoutGuide.centerYAnchor; - } else { - return self.centerYAnchor; - } -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MOPUBExperimentProvider.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MOPUBExperimentProvider.h deleted file mode 100644 index 3ba3456a14..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MOPUBExperimentProvider.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// MOPUBExperimentProvider.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPAdDestinationDisplayAgent.h" - -@interface MOPUBExperimentProvider : NSObject - -@property (nonatomic, assign) MOPUBDisplayAgentType displayAgentType; - -+ (instancetype)sharedInstance; - -- (void)setDisplayAgentFromAdServer:(MOPUBDisplayAgentType)displayAgentType; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MOPUBExperimentProvider.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MOPUBExperimentProvider.m deleted file mode 100644 index dc5da03c30..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MOPUBExperimentProvider.m +++ /dev/null @@ -1,48 +0,0 @@ -// -// MOPUBExperimentProvider.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MOPUBExperimentProvider.h" - -@interface MOPUBExperimentProvider () -@property (nonatomic, assign) BOOL isDisplayAgentOverriddenByClient; -@end - -@implementation MOPUBExperimentProvider - -@synthesize displayAgentType = _displayAgentType; - -- (instancetype)init { - self = [super init]; - if (self != nil) { - _isDisplayAgentOverriddenByClient = NO; - _displayAgentType = MOPUBDisplayAgentTypeInApp; - } - return self; -} - -+ (instancetype)sharedInstance { - static dispatch_once_t once; - static id _sharedInstance; - dispatch_once(&once, ^{ - _sharedInstance = [self new]; - }); - return _sharedInstance; -} - -- (void)setDisplayAgentType:(MOPUBDisplayAgentType)displayAgentType { - _isDisplayAgentOverriddenByClient = YES; - _displayAgentType = displayAgentType; -} - -- (void)setDisplayAgentFromAdServer:(MOPUBDisplayAgentType)displayAgentType { - if (!self.isDisplayAgentOverriddenByClient) { - _displayAgentType = displayAgentType; - } -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPAnalyticsTracker.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPAnalyticsTracker.h deleted file mode 100644 index 5714043038..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPAnalyticsTracker.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// MPAnalyticsTracker.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@class MPAdConfiguration; -@class MPVASTTrackingEvent; - -@protocol MPAnalyticsTracker - -- (void)trackImpressionForConfiguration:(MPAdConfiguration *)configuration; -- (void)trackClickForConfiguration:(MPAdConfiguration *)configuration; -- (void)sendTrackingRequestForURLs:(NSArray *)URLs; - -@end - -@interface MPAnalyticsTracker : NSObject - -+ (MPAnalyticsTracker *)sharedTracker; - -@end - -@interface MPAnalyticsTracker (MPAnalyticsTracker) -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPAnalyticsTracker.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPAnalyticsTracker.m deleted file mode 100644 index 789adc9a0a..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPAnalyticsTracker.m +++ /dev/null @@ -1,55 +0,0 @@ -// -// MPAnalyticsTracker.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPAnalyticsTracker.h" -#import "MPAdConfiguration.h" -#import "MPCoreInstanceProvider.h" -#import "MPHTTPNetworkSession.h" -#import "MPLogging.h" -#import "MPURLRequest.h" - -@implementation MPAnalyticsTracker - -+ (MPAnalyticsTracker *)sharedTracker -{ - static MPAnalyticsTracker * sharedTracker = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - sharedTracker = [[self alloc] init]; - }); - return sharedTracker; -} - -@end - -@implementation MPAnalyticsTracker (MPAnalyticsTracker) - -- (void)trackImpressionForConfiguration:(MPAdConfiguration *)configuration -{ - // Take the @c impressionTrackingURLs array from @c configuration and use the @c sendTrackingRequestForURLs method - // to actually send the requests. - MPLogDebug(@"Tracking impression: %@", configuration.impressionTrackingURLs.firstObject); - [self sendTrackingRequestForURLs:configuration.impressionTrackingURLs]; -} - -- (void)trackClickForConfiguration:(MPAdConfiguration *)configuration -{ - MPLogDebug(@"Tracking click: %@", configuration.clickTrackingURL); - MPURLRequest * request = [[MPURLRequest alloc] initWithURL:configuration.clickTrackingURL]; - [MPHTTPNetworkSession startTaskWithHttpRequest:request]; -} - -- (void)sendTrackingRequestForURLs:(NSArray *)URLs -{ - for (NSURL *URL in URLs) { - MPURLRequest * trackingRequest = [[MPURLRequest alloc] initWithURL:URL]; - [MPHTTPNetworkSession startTaskWithHttpRequest:trackingRequest]; - } -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPError.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPError.h deleted file mode 100644 index b9e830ef05..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPError.h +++ /dev/null @@ -1,79 +0,0 @@ -// -// MPError.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -extern NSString * const kNSErrorDomain; - -typedef enum { - MOPUBErrorUnknown = -1, - MOPUBErrorNoInventory = 0, - MOPUBErrorAdUnitWarmingUp = 1, - MOPUBErrorNetworkTimedOut = 4, - MOPUBErrorServerError = 8, - MOPUBErrorAdapterNotFound = 16, - MOPUBErrorAdapterInvalid = 17, - MOPUBErrorAdapterHasNoInventory = 18, - MOPUBErrorUnableToParseJSONAdResponse, - MOPUBErrorUnexpectedNetworkResponse, - MOPUBErrorHTTPResponseNot200, - MOPUBErrorNoNetworkData, - MOPUBErrorSDKNotInitialized, - MOPUBErrorSDKInitializationInProgress, - MOPUBErrorAdRequestTimedOut, - MOPUBErrorNoRenderer, - MOPUBErrorAdLoadAlreadyInProgress, - MOPUBErrorInvalidCustomEventClass, - MOPUBErrorJSONSerializationFailed, - MOPUBErrorUnableToParseAdResponse, - MOPUBErrorConsentDialogAlreadyShowing, - MOPUBErrorNoConsentDialogLoaded, - MOPUBErrorAdapterFailedToLoadAd, - MOPUBErrorFullScreenAdAlreadyOnScreen, - MOPUBErrorTooManyRequests, - MOPUBErrorFrameWidthNotSetForFlexibleSize, - MOPUBErrorFrameHeightNotSetForFlexibleSize, - MOPUBErrorVideoPlayerFailedToPlay, - MOPUBErrorNoHTMLToLoad, - MOPUBErrorNoHTMLUrlToLoad, -} MOPUBErrorCode; - -@interface NSError (MoPub) - -+ (NSError *)errorWithCode:(MOPUBErrorCode)code; -+ (NSError *)errorWithCode:(MOPUBErrorCode)code localizedDescription:(NSString *)description; - -@end - -@interface NSError (Initialization) -+ (instancetype)sdkMinimumOsVersion:(int)osVersion; -+ (instancetype)sdkInitializationInProgress; -@end - -@interface NSError (AdLifeCycle) -+ (instancetype)adAlreadyLoading; -+ (instancetype)customEventClass:(Class)customEventClass doesNotInheritFrom:(Class)baseClass; -+ (instancetype)networkResponseIsNotHTTP; -+ (instancetype)networkResponseContainedNoData; -+ (instancetype)adLoadFailedBecauseSdkNotInitialized; -+ (instancetype)serializationOfJson:(NSDictionary *)json failedWithError:(NSError *)serializationError; -+ (instancetype)adResponseFailedToParseWithError:(NSError *)serializationError; -+ (instancetype)adResponsesNotFound; -+ (instancetype)fullscreenAdAlreadyOnScreen; -+ (instancetype)frameWidthNotSetForFlexibleSize; -+ (instancetype)frameHeightNotSetForFlexibleSize; -@end - -@interface NSError (Consent) -+ (instancetype)consentDialogAlreadyShowing; -+ (instancetype)noConsentDialogLoaded; -@end - -@interface NSError (RateLimit) -+ (instancetype)tooManyRequests; -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPError.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPError.m deleted file mode 100644 index dd1638f015..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPError.m +++ /dev/null @@ -1,109 +0,0 @@ -// -// MPError.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPError.h" - -NSString * const kNSErrorDomain = @"com.mopub.iossdk"; - -@implementation NSError (MoPub) - -+ (NSError *)errorWithCode:(MOPUBErrorCode)code { - return [NSError errorWithCode:code localizedDescription:nil]; -} - -+ (NSError *)errorWithCode:(MOPUBErrorCode)code localizedDescription:(NSString *)description { - NSDictionary * userInfo = nil; - if (description != nil) { - userInfo = @{ NSLocalizedDescriptionKey: description }; - } - - return [self errorWithDomain:kNSErrorDomain code:code userInfo:userInfo]; -} - -@end - -@implementation NSError (Initialization) - -+ (instancetype)sdkMinimumOsVersion:(int)osVersion { - return [NSError errorWithCode:MOPUBErrorSDKNotInitialized localizedDescription:[NSString stringWithFormat:@"MoPub SDK requires iOS %d and up", osVersion]]; -} - -+ (instancetype)sdkInitializationInProgress { - return [NSError errorWithCode:MOPUBErrorSDKInitializationInProgress localizedDescription:@"Attempted to initialize the SDK while a prior SDK initialization is in progress."]; -} - -@end - -@implementation NSError (AdLifeCycle) - -+ (instancetype)adAlreadyLoading { - return [NSError errorWithCode:MOPUBErrorAdLoadAlreadyInProgress localizedDescription:@"An ad is already being loaded. Please wait for the previous load to finish."]; -} - -+ (instancetype)customEventClass:(Class)customEventClass doesNotInheritFrom:(Class)baseClass { - NSString * description = [NSString stringWithFormat:@"%@ is an invalid custom event class because it does not extend %@", NSStringFromClass(customEventClass), NSStringFromClass(baseClass)]; - return [NSError errorWithCode:MOPUBErrorInvalidCustomEventClass localizedDescription:description]; -} - -+ (instancetype)networkResponseIsNotHTTP { - return [NSError errorWithCode:MOPUBErrorUnexpectedNetworkResponse localizedDescription:@"Network response is not of type NSHTTPURLResponse"]; -} - -+ (instancetype)networkResponseContainedNoData { - return [NSError errorWithCode:MOPUBErrorNoNetworkData localizedDescription:@"No data found in the NSHTTPURLResponse"]; -} - -+ (instancetype)adLoadFailedBecauseSdkNotInitialized { - return [NSError errorWithCode:MOPUBErrorSDKNotInitialized localizedDescription:@"Ad prevented from loading. Error: Ad requested before initializing MoPub SDK. The MoPub SDK requires initializeSdkWithConfiguration:completion: to be called on MoPub.sharedInstance before attempting to load ads. Please update your integration."]; -} - -+ (instancetype)serializationOfJson:(NSDictionary *)json failedWithError:(NSError *)serializationError { - NSString * errorMessage = [NSString stringWithFormat:@"Failed to generate a JSON string from:\n%@\nReason: %@", json, serializationError.localizedDescription]; - return [NSError errorWithCode:MOPUBErrorJSONSerializationFailed localizedDescription:errorMessage]; -} - -+ (instancetype)adResponseFailedToParseWithError:(NSError *)serializationError { - NSString * errorMessage = [NSString stringWithFormat:@"Failed to parse ad response into JSON: %@", serializationError.localizedDescription]; - return [NSError errorWithCode:MOPUBErrorUnableToParseAdResponse localizedDescription:errorMessage]; -} - -+ (instancetype)adResponsesNotFound { - return [NSError errorWithCode:MOPUBErrorUnableToParseJSONAdResponse localizedDescription:@"No ad responses"]; -} - -+ (instancetype)fullscreenAdAlreadyOnScreen { - return [NSError errorWithCode:MOPUBErrorFullScreenAdAlreadyOnScreen localizedDescription:@"Cannot present a full screen ad that is already on-screen."]; -} - -+ (instancetype)frameWidthNotSetForFlexibleSize { - return [NSError errorWithCode:MOPUBErrorFrameWidthNotSetForFlexibleSize localizedDescription:@"Cannot determine a size for flexible width because the frame width is not set."]; -} - -+ (instancetype)frameHeightNotSetForFlexibleSize { - return [NSError errorWithCode:MOPUBErrorFrameHeightNotSetForFlexibleSize localizedDescription:@"Cannot determine a size for flexible height because the frame height is not set."]; -} - -@end - -@implementation NSError (Consent) - -+ (instancetype)consentDialogAlreadyShowing { - return [NSError errorWithCode:MOPUBErrorConsentDialogAlreadyShowing localizedDescription:@"Consent dialog is already being presented modally."]; -} - -+ (instancetype)noConsentDialogLoaded { - return [NSError errorWithCode:MOPUBErrorNoConsentDialogLoaded localizedDescription:@"Consent dialog has not been loaded."]; -} - -@end - -@implementation NSError (RateLimit) -+ (instancetype)tooManyRequests { - return [NSError errorWithCode:MOPUBErrorTooManyRequests localizedDescription:@"Could not perform ad request because too many requests have been sent to the server."]; -} -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPGeolocationProvider.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPGeolocationProvider.h deleted file mode 100644 index bcab9b0beb..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPGeolocationProvider.h +++ /dev/null @@ -1,32 +0,0 @@ -// -// MPGeolocationProvider.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import - -@interface MPGeolocationProvider : NSObject - -/** - * Returns the shared instance of the `MPGeolocationProvider` class. - * - * @return The shared instance of the `MPGeolocationProvider` class. - */ -+ (instancetype)sharedProvider; - -/** - * The most recent location determined by the location provider. - */ -@property (nonatomic, readonly) CLLocation *lastKnownLocation; - -/** - * Determines whether the location provider should attempt to listen for location updates. The - * default value is YES. - */ -@property (nonatomic, assign) BOOL locationUpdatesEnabled; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPGeolocationProvider.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPGeolocationProvider.m deleted file mode 100644 index 024f7df70f..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPGeolocationProvider.m +++ /dev/null @@ -1,312 +0,0 @@ -// -// MPGeolocationProvider.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPGeolocationProvider.h" - -#import "MPCoreInstanceProvider.h" -#import "MPLogging.h" -#import "MPTimer.h" -#import "MPConsentManager.h" -#import "MPConsentChangedNotification.h" - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -// The minimum distance (meters) a device must move horizontally before CLLocationManager generates -// an update event. Used to limit the amount of events generated. -const CLLocationDistance kMPCityBlockDistanceFilter = 100.0; - -// The duration (seconds) for which we want to listen for location updates (i.e. how long we wait to -// call -stopUpdatingLocation after calling -startUpdatingLocation). -const NSTimeInterval kMPLocationUpdateDuration = 15.0; - -// The duration (seconds) between calls to -startUpdatingLocation. -const NSTimeInterval kMPLocationUpdateInterval = 10.0 * 60.0; - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MPGeolocationProvider () - -@property (nonatomic, readwrite) CLLocation *lastKnownLocation; -@property (nonatomic) CLLocationManager *locationManager; -@property (nonatomic) BOOL authorizedForLocationServices; -@property (nonatomic) NSDate *timeOfLastLocationUpdate; -@property (nonatomic) MPTimer *nextLocationUpdateTimer; -@property (nonatomic) MPTimer *locationUpdateDurationTimer; -// Raw locationUpdatesEnabled value set by publisher -@property (nonatomic) BOOL rawLocationUpdatesEnabled; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MPGeolocationProvider - -+ (instancetype)sharedProvider -{ - static MPGeolocationProvider *sharedProvider = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - sharedProvider = [[[self class] alloc] init]; - }); - return sharedProvider; -} - -- (instancetype)init -{ - self = [super init]; - if (self) { - _rawLocationUpdatesEnabled = YES; - - _locationManager = CLLocationManager.new; - _locationManager.delegate = self; - _locationManager.distanceFilter = kMPCityBlockDistanceFilter; - - // CLLocationManager's `location` property may already contain location data upon - // initialization (for example, if the application uses significant location updates). - CLLocation *existingLocation = _locationManager.location; - if ([self locationHasValidCoordinates:existingLocation]) { - _lastKnownLocation = existingLocation; - MPLogDebug(@"Found previous location information."); - } - - // Avoid processing location updates when the application enters the background. - [[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationDidEnterBackgroundNotification object:[UIApplication sharedApplication] queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *note) { - [self stopAllCurrentOrScheduledLocationUpdates]; - }]; - - // Re-activate location updates when the application comes back to the foreground. - [[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationWillEnterForegroundNotification object:[UIApplication sharedApplication] queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *note) { - if (self.locationUpdatesEnabled) { - [self resumeLocationUpdatesAfterBackgrounding]; - } - }]; - - if ([MPConsentManager sharedManager].canCollectPersonalInfo) { - [self startRecurringLocationUpdates]; - } - - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(consentStateChanged:) name:kMPConsentChangedNotification object:nil]; - - } - return self; -} - -- (void)dealloc -{ - [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidEnterBackgroundNotification object:[UIApplication sharedApplication]]; - [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationWillEnterForegroundNotification object:[UIApplication sharedApplication]]; -} - -#pragma mark - Public - -- (CLLocation *)lastKnownLocation -{ - if (!self.locationUpdatesEnabled) { - return nil; - } - - return _lastKnownLocation; -} - -- (BOOL)locationUpdatesEnabled -{ - return self.rawLocationUpdatesEnabled && [MPConsentManager sharedManager].canCollectPersonalInfo; -} - -- (void)setLocationUpdatesEnabled:(BOOL)enabled -{ - self.rawLocationUpdatesEnabled = enabled; - [self startOrStopLocationUpdates]; -} - -- (void)startOrStopLocationUpdates -{ - if (!self.locationUpdatesEnabled) { - [self stopAllCurrentOrScheduledLocationUpdates]; - self.lastKnownLocation = nil; - } else if (![self.locationUpdateDurationTimer isValid] && ![self.nextLocationUpdateTimer isValid]) { - [self startRecurringLocationUpdates]; - } -} - -#pragma mark - Internal - -- (void)setAuthorizedForLocationServices:(BOOL)authorizedForLocationServices -{ - _authorizedForLocationServices = authorizedForLocationServices; - - if (_authorizedForLocationServices && [CLLocationManager locationServicesEnabled]) { - [self startRecurringLocationUpdates]; - } else { - [self stopAllCurrentOrScheduledLocationUpdates]; - self.lastKnownLocation = nil; - } -} - -- (BOOL)isAuthorizedStatus:(CLAuthorizationStatus)status -{ - return (status == kCLAuthorizationStatusAuthorizedAlways) || (status == kCLAuthorizationStatusAuthorizedWhenInUse); -} - -/** - * Tells the location provider to start periodically retrieving new location data. - * - * The location provider will activate its underlying location manager for a specified amount of - * time, during which the provider may receive delegate callbacks about location updates. After this - * duration, the provider will schedule a future update. These updates can be stopped via - * -stopAllCurrentOrScheduledLocationUpdates. - */ -- (void)startRecurringLocationUpdates -{ - self.timeOfLastLocationUpdate = [NSDate date]; - - if (![CLLocationManager locationServicesEnabled] || ![self isAuthorizedStatus:[CLLocationManager authorizationStatus]]) { - MPLogDebug(@"Will not start location updates: the application is not authorized " - @"for location services."); - return; - } - - if (!self.locationUpdatesEnabled) { - MPLogDebug(@"Will not start location updates because they have been disabled."); - return; - } - - [self.locationManager startUpdatingLocation]; - - [self.locationUpdateDurationTimer invalidate]; - self.locationUpdateDurationTimer = [MPTimer timerWithTimeInterval:kMPLocationUpdateDuration - target:self - selector:@selector(currentLocationUpdateDidFinish) - repeats:NO]; - [self.locationUpdateDurationTimer scheduleNow]; -} - -- (void)currentLocationUpdateDidFinish -{ - MPLogDebug(@"Stopping the current location update session and scheduling the next session."); - [self.locationUpdateDurationTimer invalidate]; - [self.locationManager stopUpdatingLocation]; - - [self scheduleNextLocationUpdateAfterDelay:kMPLocationUpdateInterval]; -} - -- (void)scheduleNextLocationUpdateAfterDelay:(NSTimeInterval)delay -{ - MPLogDebug(@"Next user location update due in %.1f seconds.", delay); - [self.nextLocationUpdateTimer invalidate]; - self.nextLocationUpdateTimer = [MPTimer timerWithTimeInterval:delay - target:self - selector:@selector(startRecurringLocationUpdates) - repeats:NO]; - [self.nextLocationUpdateTimer scheduleNow]; -} - -- (void)stopAllCurrentOrScheduledLocationUpdates -{ - MPLogDebug(@"Stopping any scheduled location updates."); - [self.locationUpdateDurationTimer invalidate]; - [self.locationManager stopUpdatingLocation]; - - [self.nextLocationUpdateTimer invalidate]; -} - -- (void)resumeLocationUpdatesAfterBackgrounding -{ - NSTimeInterval timeSinceLastUpdate = [[NSDate date] timeIntervalSinceDate:self.timeOfLastLocationUpdate]; - - if (timeSinceLastUpdate >= kMPLocationUpdateInterval) { - MPLogDebug(@"Last known user location is stale. Updating location."); - [self startRecurringLocationUpdates]; - } else if (timeSinceLastUpdate >= 0) { - NSTimeInterval timeToNextUpdate = kMPLocationUpdateInterval - timeSinceLastUpdate; - [self scheduleNextLocationUpdateAfterDelay:timeToNextUpdate]; - } else { - [self scheduleNextLocationUpdateAfterDelay:kMPLocationUpdateInterval]; - } -} - -#pragma mark - CLLocation Helpers - -- (BOOL)isLocation:(CLLocation *)location betterThanLocation:(CLLocation *)otherLocation -{ - if (!otherLocation) { - return YES; - } - - // Nil locations and locations with invalid horizontal accuracy are worse than any location. - if (![self locationHasValidCoordinates:location]) { - return NO; - } - - if ([self isLocation:location olderThanLocation:otherLocation]) { - return NO; - } - - return YES; -} - -- (BOOL)locationHasValidCoordinates:(CLLocation *)location -{ - return location && location.horizontalAccuracy > 0; -} - -- (BOOL)isLocation:(CLLocation *)location olderThanLocation:(CLLocation *)otherLocation -{ - return [location.timestamp timeIntervalSinceDate:otherLocation.timestamp] < 0; -} - -#pragma mark - (iOS 6.0+) - -- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status -{ - MPLogDebug(@"Location authorization status changed to: %ld", (long)status); - - switch (status) { - case kCLAuthorizationStatusNotDetermined: - case kCLAuthorizationStatusDenied: - case kCLAuthorizationStatusRestricted: - self.authorizedForLocationServices = NO; - break; - case kCLAuthorizationStatusAuthorizedAlways: - case kCLAuthorizationStatusAuthorizedWhenInUse: - self.authorizedForLocationServices = YES; - break; - default: - self.authorizedForLocationServices = NO; - break; - } -} - -- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations -{ - for (CLLocation *location in locations) { - if ([self isLocation:location betterThanLocation:self.lastKnownLocation]) { - self.lastKnownLocation = location; - MPLogDebug(@"Updated last known user location: %@", location); - } - } -} - -- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error -{ - if (error.code == kCLErrorDenied) { - MPLogDebug(@"Location manager failed: the user has denied access to location services."); - [self stopAllCurrentOrScheduledLocationUpdates]; - } else if (error.code == kCLErrorLocationUnknown) { - MPLogDebug(@"Location manager could not obtain a location right now."); - } -} - -#pragma mark - Consent - -- (void)consentStateChanged:(NSNotification *)notification -{ - [self startOrStopLocationUpdates]; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPGlobal.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPGlobal.h deleted file mode 100644 index 5626710834..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPGlobal.h +++ /dev/null @@ -1,61 +0,0 @@ -// -// MPGlobal.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import - -#ifndef MP_ANIMATED -#define MP_ANIMATED YES -#endif - -UIInterfaceOrientation MPInterfaceOrientation(void); -UIWindow *MPKeyWindow(void); -CGFloat MPStatusBarHeight(void); -CGRect MPApplicationFrame(BOOL includeSafeAreaInsets); -CGRect MPScreenBounds(void); -CGSize MPScreenResolution(void); -CGFloat MPDeviceScaleFactor(void); -NSDictionary *MPDictionaryFromQueryString(NSString *query); -NSString *MPSHA1Digest(NSString *string); -BOOL MPViewIsVisible(UIView *view); -BOOL MPViewIntersectsParentWindowWithPercent(UIView *view, CGFloat percentVisible); -NSString *MPResourcePathForResource(NSString *resourceName); -NSArray *MPConvertStringArrayToURLArray(NSArray *strArray); - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -typedef NS_ENUM(NSUInteger, MPInterstitialCloseButtonStyle) { - MPInterstitialCloseButtonStyleAlwaysVisible, - MPInterstitialCloseButtonStyleAlwaysHidden, - MPInterstitialCloseButtonStyleAdControlled, -}; - -typedef NS_ENUM(NSUInteger, MPInterstitialOrientationType) { - MPInterstitialOrientationTypePortrait, - MPInterstitialOrientationTypeLandscape, - MPInterstitialOrientationTypeAll, -}; - -UIInterfaceOrientationMask MPInterstitialOrientationTypeToUIInterfaceOrientationMask(MPInterstitialOrientationType type); - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface UIDevice (MPAdditions) - -- (NSString *)mp_hardwareDeviceName; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface UIApplication (MPAdditions) - -- (BOOL)mp_supportsOrientationMask:(UIInterfaceOrientationMask)orientationMask; -- (BOOL)mp_doesOrientation:(UIInterfaceOrientation)orientation matchOrientationMask:(UIInterfaceOrientationMask)orientationMask; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPGlobal.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPGlobal.m deleted file mode 100644 index 25167c3fb4..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPGlobal.m +++ /dev/null @@ -1,304 +0,0 @@ -// -// MPGlobal.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPGlobal.h" -#import "MPConstants.h" -#import "MPLogging.h" -#import "NSURL+MPAdditions.h" -#import "MoPub.h" -#import - -#import -#import - -BOOL MPViewHasHiddenAncestor(UIView *view); -UIWindow *MPViewGetParentWindow(UIView *view); -BOOL MPViewIntersectsParentWindow(UIView *view); -NSString *MPSHA1Digest(NSString *string); - -UIInterfaceOrientation MPInterfaceOrientation() -{ - return [UIApplication sharedApplication].statusBarOrientation; -} - -UIWindow *MPKeyWindow() -{ - return [UIApplication sharedApplication].keyWindow; -} - -CGFloat MPStatusBarHeight() { - if ([UIApplication sharedApplication].statusBarHidden) return 0.0f; - - CGFloat width = CGRectGetWidth([UIApplication sharedApplication].statusBarFrame); - CGFloat height = CGRectGetHeight([UIApplication sharedApplication].statusBarFrame); - - return (width < height) ? width : height; -} - -CGRect MPApplicationFrame(BOOL includeSafeAreaInsets) -{ - // Starting with iOS8, the orientation of the device is taken into account when - // requesting the key window's bounds. We are making the assumption that the - // key window is equivalent to the application frame. - CGRect frame = [UIApplication sharedApplication].keyWindow.frame; - - if (@available(iOS 11, *)) { - if (includeSafeAreaInsets) { - // Safe area insets include the status bar offset. - UIEdgeInsets safeInsets = UIApplication.sharedApplication.keyWindow.safeAreaInsets; - frame.origin.x = safeInsets.left; - frame.size.width -= (safeInsets.left + safeInsets.right); - frame.origin.y = safeInsets.top; - frame.size.height -= (safeInsets.top + safeInsets.bottom); - - return frame; - } - } - - frame.origin.y += MPStatusBarHeight(); - frame.size.height -= MPStatusBarHeight(); - - return frame; -} - -CGRect MPScreenBounds() -{ - // Starting with iOS8, the orientation of the device is taken into account when - // requesting the key window's bounds. - return [UIScreen mainScreen].bounds; -} - -CGSize MPScreenResolution() -{ - CGRect bounds = MPScreenBounds(); - CGFloat scale = MPDeviceScaleFactor(); - - return CGSizeMake(bounds.size.width*scale, bounds.size.height*scale); -} - -CGFloat MPDeviceScaleFactor() -{ - if ([[UIScreen mainScreen] respondsToSelector:@selector(displayLinkWithTarget:selector:)] && - [[UIScreen mainScreen] respondsToSelector:@selector(scale)]) { - return [[UIScreen mainScreen] scale]; - } else { - return 1.0; - } -} - -NSDictionary *MPDictionaryFromQueryString(NSString *query) { - NSMutableDictionary *queryDict = [NSMutableDictionary dictionary]; - NSArray *queryElements = [query componentsSeparatedByString:@"&"]; - for (NSString *element in queryElements) { - NSArray *keyVal = [element componentsSeparatedByString:@"="]; - NSString *key = [keyVal objectAtIndex:0]; - NSString *value = [keyVal lastObject]; - [queryDict setObject:[value stringByRemovingPercentEncoding] forKey:key]; - } - return queryDict; -} - -NSString *MPSHA1Digest(NSString *string) -{ - unsigned char digest[CC_SHA1_DIGEST_LENGTH]; - NSData *data = [string dataUsingEncoding:NSASCIIStringEncoding]; - CC_SHA1([data bytes], (CC_LONG)[data length], digest); - - NSMutableString *output = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2]; - for (int i = 0; i < CC_SHA1_DIGEST_LENGTH; i++) { - [output appendFormat:@"%02x", digest[i]]; - } - - return output; -} - -BOOL MPViewIsVisible(UIView *view) -{ - // In order for a view to be visible, it: - // 1) must not be hidden, - // 2) must not have an ancestor that is hidden, - // 3) must be within the frame of its parent window. - // - // Note: this function does not check whether any part of the view is obscured by another view. - - return (!view.hidden && - !MPViewHasHiddenAncestor(view) && - MPViewIntersectsParentWindow(view)); -} - -BOOL MPViewHasHiddenAncestor(UIView *view) -{ - UIView *ancestor = view.superview; - while (ancestor) { - if (ancestor.hidden) return YES; - ancestor = ancestor.superview; - } - return NO; -} - -UIWindow *MPViewGetParentWindow(UIView *view) -{ - UIView *ancestor = view.superview; - while (ancestor) { - if ([ancestor isKindOfClass:[UIWindow class]]) { - return (UIWindow *)ancestor; - } - ancestor = ancestor.superview; - } - return nil; -} - -BOOL MPViewIntersectsParentWindow(UIView *view) -{ - UIWindow *parentWindow = MPViewGetParentWindow(view); - - if (parentWindow == nil) { - return NO; - } - - // We need to call convertRect:toView: on this view's superview rather than on this view itself. - CGRect viewFrameInWindowCoordinates = [view.superview convertRect:view.frame toView:parentWindow]; - - return CGRectIntersectsRect(viewFrameInWindowCoordinates, parentWindow.frame); -} - -BOOL MPViewIntersectsParentWindowWithPercent(UIView *view, CGFloat percentVisible) -{ - UIWindow *parentWindow = MPViewGetParentWindow(view); - - if (parentWindow == nil) { - return NO; - } - - // We need to call convertRect:toView: on this view's superview rather than on this view itself. - CGRect viewFrameInWindowCoordinates = [view.superview convertRect:view.frame toView:parentWindow]; - CGRect intersection = CGRectIntersection(viewFrameInWindowCoordinates, parentWindow.frame); - - CGFloat intersectionArea = CGRectGetWidth(intersection) * CGRectGetHeight(intersection); - CGFloat originalArea = CGRectGetWidth(view.bounds) * CGRectGetHeight(view.bounds); - - return intersectionArea >= (originalArea * percentVisible); -} - -NSString *MPResourcePathForResource(NSString *resourceName) -{ - if ([[NSBundle mainBundle] pathForResource:@"MoPub" ofType:@"bundle"] != nil) { - return [@"MoPub.bundle" stringByAppendingPathComponent:resourceName]; - } - else { - // When using open source or cocoapods (on ios 8 and above), we can rely on the MoPub class - // living in the same bundle/framework as the assets. - // We can use pathForResource on ios 8 and above to succesfully load resources. - NSBundle *resourceBundle = [NSBundle bundleForClass:[MoPub class]]; - NSString *resourcePath = [resourceBundle pathForResource:resourceName ofType:nil]; - return resourcePath; - } -} - -NSArray *MPConvertStringArrayToURLArray(NSArray *strArray) -{ - NSMutableArray *urls = [NSMutableArray array]; - - for (NSObject *str in strArray) { - if ([str isKindOfClass:[NSString class]]) { - NSURL *url = [NSURL URLWithString:(NSString *)str]; - if (url) { - [urls addObject:url]; - } - } - } - - return urls; -} - -UIInterfaceOrientationMask MPInterstitialOrientationTypeToUIInterfaceOrientationMask(MPInterstitialOrientationType type) -{ - switch (type) { - case MPInterstitialOrientationTypePortrait: return UIInterfaceOrientationMaskPortrait; - case MPInterstitialOrientationTypeLandscape: return UIInterfaceOrientationMaskLandscape; - default: return UIInterfaceOrientationMaskAll; - } -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation UIDevice (MPAdditions) - -- (NSString *)mp_hardwareDeviceName -{ - size_t size; - sysctlbyname("hw.machine", NULL, &size, NULL, 0); - char *machine = malloc(size); - sysctlbyname("hw.machine", machine, &size, NULL, 0); - NSString *platform = [NSString stringWithCString:machine encoding:NSUTF8StringEncoding]; - free(machine); - return platform; -} - -@end - -@implementation UIApplication (MPAdditions) - -- (BOOL)mp_supportsOrientationMask:(UIInterfaceOrientationMask)orientationMask -{ - NSArray *supportedOrientations = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"UISupportedInterfaceOrientations"]; - - if (orientationMask & UIInterfaceOrientationMaskLandscapeLeft) { - if ([supportedOrientations containsObject:@"UIInterfaceOrientationLandscapeLeft"]) { - return YES; - } - } - - if (orientationMask & UIInterfaceOrientationMaskLandscapeRight) { - if ([supportedOrientations containsObject:@"UIInterfaceOrientationLandscapeRight"]) { - return YES; - } - } - - if (orientationMask & UIInterfaceOrientationMaskPortrait) { - if ([supportedOrientations containsObject:@"UIInterfaceOrientationPortrait"]) { - return YES; - } - } - - if (orientationMask & UIInterfaceOrientationMaskPortraitUpsideDown) { - if ([supportedOrientations containsObject:@"UIInterfaceOrientationPortraitUpsideDown"]) { - return YES; - } - } - - return NO; -} - -- (BOOL)mp_doesOrientation:(UIInterfaceOrientation)orientation matchOrientationMask:(UIInterfaceOrientationMask)orientationMask -{ - BOOL supportsLandscapeLeft = (orientationMask & UIInterfaceOrientationMaskLandscapeLeft) > 0; - BOOL supportsLandscapeRight = (orientationMask & UIInterfaceOrientationMaskLandscapeRight) > 0; - BOOL supportsPortrait = (orientationMask & UIInterfaceOrientationMaskPortrait) > 0; - BOOL supportsPortraitUpsideDown = (orientationMask & UIInterfaceOrientationMaskPortraitUpsideDown) > 0; - - if (supportsLandscapeLeft && orientation == UIInterfaceOrientationLandscapeLeft) { - return YES; - } - - if (supportsLandscapeRight && orientation == UIInterfaceOrientationLandscapeRight) { - return YES; - } - - if (supportsPortrait && orientation == UIInterfaceOrientationPortrait) { - return YES; - } - - if (supportsPortraitUpsideDown && orientation == UIInterfaceOrientationPortraitUpsideDown) { - return YES; - } - - return NO; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPIdentityProvider.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPIdentityProvider.h deleted file mode 100644 index 157a08fc95..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPIdentityProvider.h +++ /dev/null @@ -1,47 +0,0 @@ -// -// MPIdentityProvider.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@interface MPIdentityProvider : NSObject - -/** - * Return IDFA if it's available. If IDFA is not available or contains only 0s, return MoPub rotation ID that changes every 24 hours. - */ -+ (NSString *)identifier; - -/** - * Return IDFA if it's available. If IDFA is not available or contains only 0s, return nil. - */ -+ (NSString *)identifierFromASIdentifierManager:(BOOL)obfuscate; - -/** -* Return MoPub UUID -*/ -+ (NSString *)obfuscatedIdentifier; - -/** - * Return the unobfuscated MoPub UUID, without the "mopub:" prefix. - */ -+ (NSString *)unobfuscatedMoPubIdentifier; - -+ (BOOL)advertisingTrackingEnabled; - -/** - * A Boolean value indicating whether the MoPub SDK should create a MoPub ID that can be used - * for frequency capping when Limit ad tracking is on & the IDFA we get is - * 00000000-0000-0000-0000-000000000000. - * - * When set to NO, the SDK will not create a MoPub ID in the above case. When set to YES, the - * SDK will generate a MoPub ID. The default value is YES. - * - */ -+ (void)setFrequencyCappingIdUsageEnabled:(BOOL)frequencyCappingIdUsageEnabled; -+ (BOOL)frequencyCappingIdUsageEnabled; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPIdentityProvider.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPIdentityProvider.m deleted file mode 100644 index d8656c3494..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPIdentityProvider.m +++ /dev/null @@ -1,136 +0,0 @@ -// -// MPIdentityProvider.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPIdentityProvider.h" -#import "MPGlobal.h" -#import "MPConsentManager.h" -#import - -#define MOPUB_IDENTIFIER_DEFAULTS_KEY @"com.mopub.identifier" -#define MOPUB_IDENTIFIER_LAST_SET_TIME_KEY @"com.mopub.identifiertime" -#define MOPUB_DAY_IN_SECONDS 24 * 60 * 60 -#define MOPUB_ALL_ZERO_UUID @"00000000-0000-0000-0000-000000000000" -NSString *const mopubPrefix = @"mopub:"; - -static BOOL gFrequencyCappingIdUsageEnabled = YES; - -@interface MPIdentityProvider () -@property (class, nonatomic, readonly) NSCalendar * iso8601Calendar; - -+ (NSString *)mopubIdentifier:(BOOL)obfuscate; - -@end - -@implementation MPIdentityProvider - -+ (NSCalendar *)iso8601Calendar { - static dispatch_once_t onceToken; - static NSCalendar * _iso8601Calendar; - dispatch_once(&onceToken, ^{ - _iso8601Calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierISO8601]; - _iso8601Calendar.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0]; - }); - - return _iso8601Calendar; -} - -+ (NSString *)identifier -{ - return [self _identifier:NO]; -} - -+ (NSString *)obfuscatedIdentifier -{ - return [self _identifier:YES]; -} - -+ (NSString *)unobfuscatedMoPubIdentifier { - NSString *value = [self mopubIdentifier:NO]; - if ([value hasPrefix:mopubPrefix]) { - value = [value substringFromIndex:[mopubPrefix length]]; - } - return value; -} - -+ (NSString *)_identifier:(BOOL)obfuscate -{ - if (MPIdentityProvider.advertisingTrackingEnabled && [MPConsentManager sharedManager].canCollectPersonalInfo) { - return [self identifierFromASIdentifierManager:obfuscate]; - } else { - return [self mopubIdentifier:obfuscate]; - } -} - -+ (BOOL)advertisingTrackingEnabled -{ - return [[ASIdentifierManager sharedManager] isAdvertisingTrackingEnabled]; -} - -+ (NSString *)identifierFromASIdentifierManager:(BOOL)obfuscate -{ - if (obfuscate) { - return @"ifa:XXXX"; - } - if (!MPIdentityProvider.advertisingTrackingEnabled) { - return nil; - } - - NSString *identifier = [[ASIdentifierManager sharedManager].advertisingIdentifier UUIDString]; - return [NSString stringWithFormat:@"ifa:%@", [identifier uppercaseString]]; -} - -+ (NSString *)mopubIdentifier:(BOOL)obfuscate -{ - if (![self frequencyCappingIdUsageEnabled]) { - return [NSString stringWithFormat:@"ifa:%@", MOPUB_ALL_ZERO_UUID]; - } - - if (obfuscate) { - return @"mopub:XXXX"; - } - - // Compare the current timestamp to the timestamp of the last MoPub identifier generation. - NSDate * now = [NSDate date]; - NSDate * lastSetDate = [[NSUserDefaults standardUserDefaults] objectForKey:MOPUB_IDENTIFIER_LAST_SET_TIME_KEY]; - - // MoPub identifier has not been set before. Set the timestamp and let the identifer - // be generated. - if (lastSetDate == nil) { - [[NSUserDefaults standardUserDefaults] setObject:now forKey:MOPUB_IDENTIFIER_LAST_SET_TIME_KEY]; - [[NSUserDefaults standardUserDefaults] synchronize]; - } - // Current day does not match the same day when the identifier was generated. - // Invalidate the current identifier so it can be regenerated. - else if (![MPIdentityProvider.iso8601Calendar isDate:now inSameDayAsDate:lastSetDate]) { - [[NSUserDefaults standardUserDefaults] setObject:now forKey:MOPUB_IDENTIFIER_LAST_SET_TIME_KEY]; - [[NSUserDefaults standardUserDefaults] removeObjectForKey:MOPUB_IDENTIFIER_DEFAULTS_KEY]; - } - - NSString * identifier = [[NSUserDefaults standardUserDefaults] objectForKey:MOPUB_IDENTIFIER_DEFAULTS_KEY]; - if (identifier == nil) { - NSString *uuidStr = [[NSUUID UUID] UUIDString]; - - identifier = [mopubPrefix stringByAppendingString:[uuidStr uppercaseString]]; - [[NSUserDefaults standardUserDefaults] setObject:identifier forKey:MOPUB_IDENTIFIER_DEFAULTS_KEY]; - [[NSUserDefaults standardUserDefaults] synchronize]; - } - - return identifier; -} - -+ (void)setFrequencyCappingIdUsageEnabled:(BOOL)frequencyCappingIdUsageEnabled -{ - gFrequencyCappingIdUsageEnabled = frequencyCappingIdUsageEnabled; -} - -+ (BOOL)frequencyCappingIdUsageEnabled -{ - return gFrequencyCappingIdUsageEnabled; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPImageDownloadQueue.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPImageDownloadQueue.h deleted file mode 100755 index f124dbbb23..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPImageDownloadQueue.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// MPImageDownloadQueue.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -typedef void (^MPImageDownloadQueueCompletionBlock)(NSDictionary *result, NSArray *errors); - -@interface MPImageDownloadQueue : NSObject - -/** - Return cached image from @c MPNativeCache if available. - */ -- (void)addDownloadImageURLs:(NSArray *)imageURLs - completionBlock:(MPImageDownloadQueueCompletionBlock)completionBlock; - -- (void)cancelAllDownloads; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPImageDownloadQueue.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPImageDownloadQueue.m deleted file mode 100755 index 2df19ba57c..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPImageDownloadQueue.m +++ /dev/null @@ -1,126 +0,0 @@ -// -// MPImageDownloadQueue.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPImageDownloadQueue.h" -#import "MPNativeAdError.h" -#import "MPLogging.h" -#import "MPNativeCache.h" -#import "MPHTTPNetworkSession.h" -#import "MPURLRequest.h" - -@interface MPImageDownloadQueue () - -@property (atomic, strong) NSOperationQueue *imageDownloadQueue; -@property (atomic, assign) BOOL isCanceled; - -@end - -@implementation MPImageDownloadQueue - -- (id)init -{ - self = [super init]; - - if (self != nil) { - _imageDownloadQueue = [[NSOperationQueue alloc] init]; - [_imageDownloadQueue setMaxConcurrentOperationCount:1]; // serial queue - } - - return self; -} - -- (void)dealloc -{ - [_imageDownloadQueue cancelAllOperations]; -} - -- (void)addDownloadImageURLs:(NSArray *)imageURLs - completionBlock:(MPImageDownloadQueueCompletionBlock)completionBlock -{ - [self addDownloadImageURLs:imageURLs useCachedImage:YES completionBlock:completionBlock]; -} - -- (void)addDownloadImageURLs:(NSArray *)imageURLs - useCachedImage:(BOOL)useCachedImage - completionBlock:(MPImageDownloadQueueCompletionBlock)completionBlock -{ - __block NSMutableDictionary *result = [NSMutableDictionary new]; - __block NSMutableArray *errors = nil; - - for (NSURL *imageURL in imageURLs) { - [self.imageDownloadQueue addOperationWithBlock:^{ - @autoreleasepool { - if ([[MPNativeCache sharedCache] cachedDataExistsForKey:imageURL.absoluteString] && useCachedImage) { - NSData *imageData = [[MPNativeCache sharedCache] retrieveDataForKey:imageURL.absoluteString]; - UIImage *image = [UIImage imageWithData:imageData]; - result[imageURL] = image; - } else if (![[MPNativeCache sharedCache] cachedDataExistsForKey:imageURL.absoluteString] || !useCachedImage) { - MPLogDebug(@"Downloading %@", imageURL); - - __block NSError *error = nil; - __block NSData *data = nil; - - // Synchronous attempt to fetch the image. - dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); - [MPHTTPNetworkSession startTaskWithHttpRequest:[MPURLRequest requestWithURL:imageURL] responseHandler:^(NSData * _Nonnull responseData, NSHTTPURLResponse * _Nonnull response) { - data = responseData; - dispatch_semaphore_signal(semaphore); - } errorHandler:^(NSError * _Nonnull networkError) { - error = networkError; - dispatch_semaphore_signal(semaphore); - }]; - dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); - - BOOL validImageDownloaded = data != nil; - if (validImageDownloaded) { - UIImage *downloadedImage = [UIImage imageWithData:data]; - if (downloadedImage != nil) { - [[MPNativeCache sharedCache] storeData:data forKey:imageURL.absoluteString]; - result[imageURL] = downloadedImage; - } else { - if (downloadedImage == nil) { - MPLogDebug(@"Error: invalid image data downloaded"); - } - - validImageDownloaded = NO; - } - } - - if (!validImageDownloaded) { - if (error == nil) { - error = MPNativeAdNSErrorForImageDownloadFailure(); - } - - if (errors == nil) { - errors = [NSMutableArray array]; - } - - [errors addObject:error]; - } - } - } - }]; - } - - // after all images have been downloaded, invoke callback on main thread - [self.imageDownloadQueue addOperationWithBlock:^{ - dispatch_async(dispatch_get_main_queue(), ^{ - if (!self.isCanceled) { - completionBlock(result, errors); - } - }); - }]; -} - -- (void)cancelAllDownloads -{ - self.isCanceled = YES; - [self.imageDownloadQueue cancelAllOperations]; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPImageLoader.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPImageLoader.h deleted file mode 100644 index f78614bff7..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPImageLoader.h +++ /dev/null @@ -1,30 +0,0 @@ -// -// MPImageLoader.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import - -@class MPImageLoader; - -@protocol MPImageLoaderDelegate - -- (BOOL)nativeAdViewInViewHierarchy; - -@optional - -- (void)imageLoader:(MPImageLoader *)imageLoaded didLoadImageIntoImageView:(UIImageView *)imageView; - -@end - -@interface MPImageLoader : NSObject - -@property (nonatomic, weak) id delegate; - -- (void)loadImageForURL:(NSURL *)imageURL intoImageView:(UIImageView *)imageView; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPImageLoader.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPImageLoader.m deleted file mode 100644 index b1e1ec1ab3..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPImageLoader.m +++ /dev/null @@ -1,97 +0,0 @@ -// -// MPImageLoader.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPImageLoader.h" -#import "MPLogging.h" -#import "MPNativeCache.h" -#import "MPImageDownloadQueue.h" - -@interface MPImageLoader() - -@property (nonatomic) MPImageDownloadQueue *imageDownloadQueue; - -@end - -@implementation MPImageLoader - -- (instancetype)init -{ - if (self = [super init]) { - _imageDownloadQueue = [[MPImageDownloadQueue alloc] init]; - } - return self; -} - -- (void)loadImageForURL:(NSURL *)imageURL intoImageView:(UIImageView *)imageView -{ - imageView.image = nil; - - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{ - __block BOOL isAdViewInHierarchy = NO; - - // Try to prevent unnecessary work if the ad view is not currently in the view hierarchy. - // Note that this doesn't prevent 100% of the cases as the ad view can still be recycled after this passes. - // We have an additional 100% accurate check in safeMainQueueSetImage to ensure that we don't overwrite. - - dispatch_sync(dispatch_get_main_queue(), ^{ - isAdViewInHierarchy = [self.delegate nativeAdViewInViewHierarchy]; - }); - - if (!isAdViewInHierarchy) { - MPLogDebug(@"Cell was recycled. Don't bother rendering the image."); - return; - } - - NSData *cachedImageData = [[MPNativeCache sharedCache] retrieveDataForKey:imageURL.absoluteString]; - UIImage *image = [UIImage imageWithData:cachedImageData]; - - if (image) { - // By default, the image data isn't decompressed until set on a UIImageView, on the main thread. This - // can result in poor scrolling performance. To fix this, we force decompression in the background before - // assignment to a UIImageView. - UIGraphicsBeginImageContext(CGSizeMake(1, 1)); - [image drawAtPoint:CGPointZero]; - UIGraphicsEndImageContext(); - - [self safeMainQueueSetImage:image intoImageView:imageView]; - } else if (imageURL) { - MPLogDebug(@"Cache miss on %@. Re-downloading...", imageURL); - - __weak __typeof__(self) weakSelf = self; - [self.imageDownloadQueue addDownloadImageURLs:@[imageURL] - completionBlock:^(NSDictionary *result, NSArray *errors) { - __strong __typeof__(self) strongSelf = weakSelf; - if (strongSelf) { - UIImage *image = result[imageURL]; - if (image != nil && errors.count == 0) { - [strongSelf safeMainQueueSetImage:image intoImageView:imageView]; - } - } - }]; - } - }); -} - -- (void)safeMainQueueSetImage:(UIImage *)image intoImageView:(UIImageView *)imageView -{ - dispatch_async(dispatch_get_main_queue(), ^{ - if (![self.delegate nativeAdViewInViewHierarchy]) { - MPLogDebug(@"Cell was recycled. Don't bother setting the image."); - return; - } - - if (image) { - imageView.image = image; - if ([self.delegate respondsToSelector:@selector(imageLoader:didLoadImageIntoImageView:)]) { - [self.delegate imageLoader:self didLoadImageIntoImageView:imageView]; - } - } - }); -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPNativeCache.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPNativeCache.h deleted file mode 100644 index 61af1a3bb5..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPNativeCache.h +++ /dev/null @@ -1,24 +0,0 @@ -// -// MPNativeCache.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@interface MPNativeCache : NSObject - -+ (instancetype)sharedCache; - -/* - * Do NOT call any of the following methods on the main thread, potentially lengthy wait for disk IO - */ -- (BOOL)cachedDataExistsForKey:(NSString *)key; -- (NSData *)retrieveDataForKey:(NSString *)key; -- (void)storeData:(NSData *)data forKey:(NSString *)key; -- (void)removeAllDataFromCache; -- (void)setInMemoryCacheEnabled:(BOOL)enabled; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPNativeCache.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPNativeCache.m deleted file mode 100644 index 222983eebc..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPNativeCache.m +++ /dev/null @@ -1,187 +0,0 @@ -// -// MPNativeCache.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPNativeCache.h" -#import "MPDiskLRUCache.h" -#import "MPLogging.h" -#import - -typedef enum { - MPNativeCacheMethodDisk = 0, - MPNativeCacheMethodDiskAndMemory = 1 << 0 -} MPNativeCacheMethod; - -@interface MPNativeCache () - -@property (nonatomic, strong) NSCache *memoryCache; -@property (nonatomic, strong) MPDiskLRUCache *diskCache; -@property (nonatomic, assign) MPNativeCacheMethod cacheMethod; - -- (BOOL)cachedDataExistsForKey:(NSString *)key withCacheMethod:(MPNativeCacheMethod)cacheMethod; -- (NSData *)retrieveDataForKey:(NSString *)key withCacheMethod:(MPNativeCacheMethod)cacheMethod; -- (void)storeData:(id)data forKey:(NSString *)key withCacheMethod:(MPNativeCacheMethod)cacheMethod; -- (void)removeAllDataFromMemory; -- (void)removeAllDataFromDisk; - -@end - -@implementation MPNativeCache - -+ (instancetype)sharedCache -{ - static dispatch_once_t once; - static MPNativeCache *sharedCache; - dispatch_once(&once, ^{ - sharedCache = [[self alloc] init]; - }); - return sharedCache; -} - -- (id)init -{ - self = [super init]; - if (self != nil) { - _memoryCache = [[NSCache alloc] init]; - _memoryCache.delegate = self; - - _diskCache = [[MPDiskLRUCache alloc] init]; - - _cacheMethod = MPNativeCacheMethodDiskAndMemory; - - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didReceiveMemoryWarning:) name:UIApplicationDidReceiveMemoryWarningNotification object:[UIApplication sharedApplication]]; - } - - return self; -} - -- (void)dealloc -{ - [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidReceiveMemoryWarningNotification object:nil]; -} - -#pragma mark - Public Cache Interactions - -- (void)setInMemoryCacheEnabled:(BOOL)enabled -{ - if (enabled) { - self.cacheMethod = MPNativeCacheMethodDiskAndMemory; - } else { - self.cacheMethod = MPNativeCacheMethodDisk; - [self.memoryCache removeAllObjects]; - } -} - -- (BOOL)cachedDataExistsForKey:(NSString *)key -{ - return [self cachedDataExistsForKey:key withCacheMethod:self.cacheMethod]; -} - -- (NSData *)retrieveDataForKey:(NSString *)key -{ - return [self retrieveDataForKey:key withCacheMethod:self.cacheMethod]; -} - -- (void)storeData:(NSData *)data forKey:(NSString *)key -{ - [self storeData:data forKey:key withCacheMethod:self.cacheMethod]; -} - -- (void)removeAllDataFromCache -{ - [self removeAllDataFromMemory]; - [self removeAllDataFromDisk]; -} - -#pragma mark - Private Cache Implementation - -- (BOOL)cachedDataExistsForKey:(NSString *)key withCacheMethod:(MPNativeCacheMethod)cacheMethod -{ - BOOL dataExists = NO; - if (cacheMethod & MPNativeCacheMethodDiskAndMemory) { - dataExists = [self.memoryCache objectForKey:key] != nil; - } - - if (!dataExists) { - dataExists = [self.diskCache cachedDataExistsForKey:key]; - } - - return dataExists; -} - -- (id)retrieveDataForKey:(NSString *)key withCacheMethod:(MPNativeCacheMethod)cacheMethod -{ - id data = nil; - - if (cacheMethod & MPNativeCacheMethodDiskAndMemory) { - data = [self.memoryCache objectForKey:key]; - } - - if (data) { - MPLogDebug(@"RETRIEVE FROM MEMORY: %@", key); - } - - - if (data == nil) { - data = [self.diskCache retrieveDataForKey:key]; - - if (data && cacheMethod & MPNativeCacheMethodDiskAndMemory) { - MPLogDebug(@"RETRIEVE FROM DISK: %@", key); - - [self.memoryCache setObject:data forKey:key]; - MPLogDebug(@"STORED IN MEMORY: %@", key); - } - } - - if (data == nil) { - MPLogDebug(@"RETRIEVE FAILED: %@", key); - } - - return data; -} - -- (void)storeData:(id)data forKey:(NSString *)key withCacheMethod:(MPNativeCacheMethod)cacheMethod -{ - if (data == nil) { - return; - } - - if (cacheMethod & MPNativeCacheMethodDiskAndMemory) { - [self.memoryCache setObject:data forKey:key]; - MPLogDebug(@"STORED IN MEMORY: %@", key); - } - - [self.diskCache storeData:data forKey:key]; - MPLogDebug(@"STORED ON DISK: %@", key); -} - -- (void)removeAllDataFromMemory -{ - [self.memoryCache removeAllObjects]; -} - -- (void)removeAllDataFromDisk -{ - [self.diskCache removeAllCachedFiles]; -} - -#pragma mark - Notifications - -- (void)didReceiveMemoryWarning:(NSNotification *)notification -{ - [self.memoryCache removeAllObjects]; -} - -#pragma mark - NSCacheDelegate - -- (void)cache:(NSCache *)cache willEvictObject:(id)obj -{ - MPLogDebug(@"Evicting Object"); -} - - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPReachability.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPReachability.h deleted file mode 100644 index 67094e284e..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPReachability.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - Copyright (C) 2016 Apple Inc. All Rights Reserved. - See LICENSE.txt for this sample’s licensing information - - Abstract: - Basic demonstration of how to use the SystemConfiguration Reachablity APIs. - */ - -#import -#import -#import -#import "MPNetworkStatus.h" - -#pragma mark IPv6 Support -//Reachability fully support IPv6. For full details, see ReadMe.md. - -extern NSString *kMPReachabilityChangedNotification; - - -@interface MPReachability : NSObject - -/*! - * Use to check the reachability of a given host name. - */ -+ (instancetype)reachabilityWithHostName:(NSString *)hostName; - -/*! - * Use to check the reachability of a given IP address. - */ -+ (instancetype)reachabilityWithAddress:(const struct sockaddr *)hostAddress; - -/*! - * Checks whether the default route is available. Should be used by applications that do not connect to a particular host. - */ -+ (instancetype)reachabilityForInternetConnection; - - -#pragma mark reachabilityForLocalWiFi -//reachabilityForLocalWiFi has been removed from the sample. See ReadMe.md for more information. -//+ (instancetype)reachabilityForLocalWiFi; - -/*! - * Start listening for reachability notifications on the current run loop. - */ -- (BOOL)startNotifier; -- (void)stopNotifier; - -- (MPNetworkStatus)currentReachabilityStatus; - -/*! - * WWAN may be available, but not active until a connection has been established. WiFi may require a connection for VPN on Demand. - */ -- (BOOL)connectionRequired; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPReachability.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPReachability.m deleted file mode 100644 index 5b606f0af9..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPReachability.m +++ /dev/null @@ -1,244 +0,0 @@ -/* - Copyright (C) 2016 Apple Inc. All Rights Reserved. - See LICENSE.txt for this sample’s licensing information - - Abstract: - Basic demonstration of how to use the SystemConfiguration Reachablity APIs. - */ - -#import -#import -#import -#import -#import - -#import - -#import "MPDeviceInformation.h" -#import "MPReachability.h" - -#pragma mark IPv6 Support -//Reachability fully support IPv6. For full details, see ReadMe.md. - - -NSString *kMPReachabilityChangedNotification = @"kMPReachabilityChangedNotification"; - - -#pragma mark - Supporting functions - -#define kShouldPrintReachabilityFlags 0 - -static void PrintReachabilityFlags(SCNetworkReachabilityFlags flags, const char* comment) -{ -#if kShouldPrintReachabilityFlags - - NSLog(@"Reachability Flag Status: %c%c %c%c%c%c%c%c%c %s\n", - (flags & kSCNetworkReachabilityFlagsIsWWAN) ? 'W' : '-', - (flags & kSCNetworkReachabilityFlagsReachable) ? 'R' : '-', - - (flags & kSCNetworkReachabilityFlagsTransientConnection) ? 't' : '-', - (flags & kSCNetworkReachabilityFlagsConnectionRequired) ? 'c' : '-', - (flags & kSCNetworkReachabilityFlagsConnectionOnTraffic) ? 'C' : '-', - (flags & kSCNetworkReachabilityFlagsInterventionRequired) ? 'i' : '-', - (flags & kSCNetworkReachabilityFlagsConnectionOnDemand) ? 'D' : '-', - (flags & kSCNetworkReachabilityFlagsIsLocalAddress) ? 'l' : '-', - (flags & kSCNetworkReachabilityFlagsIsDirect) ? 'd' : '-', - comment - ); -#endif -} - - -static void ReachabilityCallback(SCNetworkReachabilityRef target, SCNetworkReachabilityFlags flags, void* info) -{ -#pragma unused (target, flags) - NSCAssert(info != NULL, @"info was NULL in ReachabilityCallback"); - NSCAssert([(__bridge NSObject*) info isKindOfClass: [MPReachability class]], @"info was wrong class in ReachabilityCallback"); - - MPReachability* noteObject = (__bridge MPReachability *)info; - // Post a notification to notify the client that the network reachability changed. - [[NSNotificationCenter defaultCenter] postNotificationName: kMPReachabilityChangedNotification object: noteObject]; -} - - -#pragma mark - Reachability implementation - -@implementation MPReachability -{ - SCNetworkReachabilityRef _reachabilityRef; -} - -+ (instancetype)reachabilityWithHostName:(NSString *)hostName -{ - MPReachability* returnValue = NULL; - SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(NULL, [hostName UTF8String]); - if (reachability != NULL) - { - returnValue= [[self alloc] init]; - if (returnValue != NULL) - { - returnValue->_reachabilityRef = reachability; - } - else { - CFRelease(reachability); - } - } - return returnValue; -} - - -+ (instancetype)reachabilityWithAddress:(const struct sockaddr *)hostAddress -{ - SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, hostAddress); - - MPReachability* returnValue = NULL; - - if (reachability != NULL) - { - returnValue = [[self alloc] init]; - if (returnValue != NULL) - { - returnValue->_reachabilityRef = reachability; - } - else { - CFRelease(reachability); - } - } - return returnValue; -} - - -+ (instancetype)reachabilityForInternetConnection -{ - struct sockaddr_in zeroAddress; - bzero(&zeroAddress, sizeof(zeroAddress)); - zeroAddress.sin_len = sizeof(zeroAddress); - zeroAddress.sin_family = AF_INET; - - return [self reachabilityWithAddress: (const struct sockaddr *) &zeroAddress]; -} - -#pragma mark reachabilityForLocalWiFi -//reachabilityForLocalWiFi has been removed from the sample. See ReadMe.md for more information. -//+ (instancetype)reachabilityForLocalWiFi - - - -#pragma mark - Start and stop notifier - -- (BOOL)startNotifier -{ - BOOL returnValue = NO; - SCNetworkReachabilityContext context = {0, (__bridge void *)(self), NULL, NULL, NULL}; - - if (SCNetworkReachabilitySetCallback(_reachabilityRef, ReachabilityCallback, &context)) - { - if (SCNetworkReachabilityScheduleWithRunLoop(_reachabilityRef, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode)) - { - returnValue = YES; - } - } - - return returnValue; -} - - -- (void)stopNotifier -{ - if (_reachabilityRef != NULL) - { - SCNetworkReachabilityUnscheduleFromRunLoop(_reachabilityRef, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode); - } -} - - -- (void)dealloc -{ - [self stopNotifier]; - if (_reachabilityRef != NULL) - { - CFRelease(_reachabilityRef); - } -} - - -#pragma mark - Network Flag Handling - -- (MPNetworkStatus)networkStatusForFlags:(SCNetworkReachabilityFlags)flags -{ - PrintReachabilityFlags(flags, "networkStatusForFlags"); - if ((flags & kSCNetworkReachabilityFlagsReachable) == 0) - { - // The target host is not reachable. - return MPNotReachable; - } - - MPNetworkStatus returnValue = MPNotReachable; - - if ((flags & kSCNetworkReachabilityFlagsConnectionRequired) == 0) - { - /* - If the target host is reachable and no connection is required then we'll assume (for now) that you're on Wi-Fi... - */ - returnValue = MPReachableViaWiFi; - } - - if ((((flags & kSCNetworkReachabilityFlagsConnectionOnDemand ) != 0) || - (flags & kSCNetworkReachabilityFlagsConnectionOnTraffic) != 0)) - { - /* - ... and the connection is on-demand (or on-traffic) if the calling application is using the CFSocketStream or higher APIs... - */ - - if ((flags & kSCNetworkReachabilityFlagsInterventionRequired) == 0) - { - /* - ... and no [user] intervention is needed... - */ - returnValue = MPReachableViaWiFi; - } - } - - if ((flags & kSCNetworkReachabilityFlagsIsWWAN) == kSCNetworkReachabilityFlagsIsWWAN) - { - /* - ... but WWAN connections are OK if the calling application is using the CFNetwork APIs. - */ - - // If using WWAN, get current radio access technology to fill in 2G/3G/4G info - returnValue = MPDeviceInformation.currentRadioAccessTechnology; - } - - return returnValue; -} - - -- (BOOL)connectionRequired -{ - NSAssert(_reachabilityRef != NULL, @"connectionRequired called with NULL reachabilityRef"); - SCNetworkReachabilityFlags flags; - - if (SCNetworkReachabilityGetFlags(_reachabilityRef, &flags)) - { - return (flags & kSCNetworkReachabilityFlagsConnectionRequired); - } - - return NO; -} - - -- (MPNetworkStatus)currentReachabilityStatus -{ - NSAssert(_reachabilityRef != NULL, @"currentNetworkStatus called with NULL SCNetworkReachabilityRef"); - MPNetworkStatus returnValue = MPNotReachable; - SCNetworkReachabilityFlags flags; - - if (SCNetworkReachabilityGetFlags(_reachabilityRef, &flags)) - { - returnValue = [self networkStatusForFlags:flags]; - } - - return returnValue; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPSessionTracker.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPSessionTracker.h deleted file mode 100644 index 124c09a5df..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPSessionTracker.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// MPSessionTracker.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@interface MPSessionTracker : NSObject - -+ (void)initializeNotificationObservers; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPSessionTracker.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPSessionTracker.m deleted file mode 100644 index 33c22685e2..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPSessionTracker.m +++ /dev/null @@ -1,38 +0,0 @@ -// -// MPSessionTracker.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPSessionTracker.h" -#import "MPConstants.h" -#import "MPHTTPNetworkSession.h" -#import "MPURLRequest.h" -#import "MPAdServerURLBuilder.h" - -@implementation MPSessionTracker - -+ (void)initializeNotificationObservers -{ - if (SESSION_TRACKING_ENABLED) { - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(trackEvent) - name:UIApplicationWillEnterForegroundNotification - object:nil]; - - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(trackEvent) - name:UIApplicationDidFinishLaunchingNotification - object:nil]; - } -} - -+ (void)trackEvent -{ - MPURLRequest * request = [[MPURLRequest alloc] initWithURL:[MPAdServerURLBuilder sessionTrackingURL]]; - [MPHTTPNetworkSession startTaskWithHttpRequest:request responseHandler:nil errorHandler:nil]; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPStopwatch.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPStopwatch.h deleted file mode 100644 index aa84bd68f2..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPStopwatch.h +++ /dev/null @@ -1,34 +0,0 @@ -// -// MPStopwatch.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - The @c Stopwatch class keeps track of the delta in foreground time between start and stop signals. - */ -@interface MPStopwatch : NSObject -/** - Flag indicating that the stopwatch is currently running and tracking foreground duration. - */ -@property (nonatomic, readonly) BOOL isRunning; - -/** - Starts tracking foreground time. If the stopwatch is already running, nothing will happen. - */ -- (void)start; - -/** - Stops tracking foreground time. If the stopwatch has not started yet, the method will return 0. - */ -- (NSTimeInterval)stop; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPStopwatch.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPStopwatch.m deleted file mode 100644 index ed0a3a72ee..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPStopwatch.m +++ /dev/null @@ -1,68 +0,0 @@ -// -// MPStopwatch.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPTimer.h" -#import "MPStopwatch.h" -#import "NSDate+MPAdditions.h" - -static const NSTimeInterval kStopwatchStep = 0.1; // 100ms interval - -@interface MPStopwatch() -@property (nonatomic, assign) NSTimeInterval duration; -@property (nonatomic, strong) MPTimer * timer; -@end - -@implementation MPStopwatch - -- (instancetype)init { - if (self = [super init]) { - _duration = 0.0; - _timer = nil; - } - - return self; -} - -- (BOOL)isRunning { - return (self.timer != nil); -} - -- (void)start { - // Stopwatch is running; do nothing. - if (self.timer != nil) { - return; - } - - // Reset internal state and spin up a new timer. - self.duration = 0.0; - self.timer = [MPTimer timerWithTimeInterval:kStopwatchStep target:self selector:@selector(onTimerFired) repeats:YES runLoopMode:NSRunLoopCommonModes]; - - // Start the countup timer. - [self.timer scheduleNow]; -} - -- (NSTimeInterval)stop { - // Stopwatch not running; return 0. - if (self.timer == nil) { - return 0.0; - } - - // Stop and kill the internal timer. - [self.timer pause]; - [self.timer invalidate]; - self.timer = nil; - - return self.duration; -} - -- (void)onTimerFired { - self.duration += kStopwatchStep; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPTimer.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPTimer.h deleted file mode 100644 index 3798702340..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPTimer.h +++ /dev/null @@ -1,42 +0,0 @@ -// -// MPTimer.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - * @c MPTimer is a thread safe @c NSTimer wrapper, with pause / resume functionality. - */ -@interface MPTimer : NSObject - -/** - * Return NO is the timer is paused, and return YES otherwise. - */ -@property (nonatomic, readonly) BOOL isCountdownActive; - -+ (MPTimer *)timerWithTimeInterval:(NSTimeInterval)seconds - target:(id)target - selector:(SEL)aSelector - repeats:(BOOL)repeats - runLoopMode:(NSString *)runLoopMode; - -+ (MPTimer *)timerWithTimeInterval:(NSTimeInterval)seconds - target:(id)target - selector:(SEL)aSelector - repeats:(BOOL)repeats; - -- (BOOL)isValid; -- (void)invalidate; -- (void)scheduleNow; -- (void)pause; -- (void)resume; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPTimer.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPTimer.m deleted file mode 100644 index 9c87167453..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPTimer.m +++ /dev/null @@ -1,178 +0,0 @@ -// -// MPTimer.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import // for `objc_msgSend` -#import "MPTimer.h" -#import "MPLogging.h" - -@interface MPTimer () - -@property (nonatomic, assign) NSTimeInterval timeInterval; -@property (nonatomic, strong) NSTimer *timer; // lazily created in `scheduleNow` -@property (nonatomic, assign) BOOL isRepeatingTimer; -@property (nonatomic, assign) BOOL isCountdownActive; - -@property (nonatomic, weak) id target; -@property (nonatomic, assign) SEL selector; - -@end - -@implementation MPTimer - -+ (MPTimer *)timerWithTimeInterval:(NSTimeInterval)seconds - target:(id)target - selector:(SEL)aSelector - repeats:(BOOL)repeats - runLoopMode:(NSString *)runLoopMode -{ - MPTimer *timer = [[MPTimer alloc] init]; - timer.target = target; - timer.selector = aSelector; - timer.isCountdownActive = NO; - timer.isRepeatingTimer = repeats; - timer.timeInterval = seconds; - - // Initialize the internal `NSTimer`, but set its fire date in the far future. - // `scheduleNow` will handle the firing of the timer. - timer.timer = [NSTimer timerWithTimeInterval:seconds - target:timer - selector:@selector(timerDidFire) - userInfo:nil - repeats:repeats]; - [timer.timer setFireDate:NSDate.distantFuture]; - - // Runloop scheduling must be performed on the main thread. To prevent - // a potential deadlock, scheduling to the main thread will be asynchronous - // on the next main thread run loop. - void (^mainThreadOperation)(void) = ^void(void) { - [NSRunLoop.mainRunLoop addTimer:timer.timer forMode:runLoopMode]; - }; - - if ([NSThread isMainThread]) { - mainThreadOperation(); - } else { - dispatch_async(dispatch_get_main_queue(), mainThreadOperation); - } - - return timer; -} - -+ (MPTimer *)timerWithTimeInterval:(NSTimeInterval)seconds - target:(id)target - selector:(SEL)aSelector - repeats:(BOOL)repeats { - return [self timerWithTimeInterval:seconds - target:target - selector:aSelector - repeats:repeats - runLoopMode:NSDefaultRunLoopMode]; -} - -- (void)dealloc -{ - [self.timer invalidate]; -} - -- (BOOL)isValid -{ - return [self.timer isValid]; -} - -- (void)invalidate -{ - @synchronized (self) { - self.target = nil; - self.selector = nil; - [self.timer invalidate]; - self.timer = nil; - self.isCountdownActive = NO; - } -} - -- (void)scheduleNow -{ - /* - Note: `MPLog` statements are commented out because during SDK init, the chain of calls - `MPConsentManager.sharedManager` -> `newNextUpdateTimer` -> `MPTimer.scheduleNow` -> - `MPLogDebug` -> `MPIdentityProvider.identifier` -> `MPConsentManager.sharedManager` will cause - a crash with EXC_BAD_INSTRUCTION: the same `dispatch_once` is called twice for - `MPConsentManager.sharedManager` in the same call stack. Uncomment the logs after - `MPIdentityProvider` is refactored. - */ - @synchronized (self) { - if (![self.timer isValid]) { -// MPLogDebug(@"Could not schedule invalidated MPTimer (%p).", self); - return; - } - - if (self.isCountdownActive) { -// MPLogDebug(@"Tried to schedule an MPTimer (%p) that is already ticking.",self); - return; - } - - NSDate *newFireDate = [NSDate dateWithTimeInterval:self.timeInterval sinceDate:[NSDate date]]; - [self.timer setFireDate:newFireDate]; - self.isCountdownActive = YES; - } -} - -- (void)pause -{ - @synchronized (self) { - if (!self.isCountdownActive) { - MPLogDebug(@"No-op: tried to pause an MPTimer (%p) that was already paused.", self); - return; - } - - if (![self.timer isValid]) { - MPLogDebug(@"Cannot pause invalidated MPTimer (%p).", self); - return; - } - - // `fireDate` is the date which the timer will fire. If the timer is no longer valid, `fireDate` - // is the last date at which the timer fired. - NSTimeInterval secondsLeft = [[self.timer fireDate] timeIntervalSinceDate:[NSDate date]]; - if (secondsLeft <= 0) { - MPLogInfo(@"An MPTimer was somehow paused after it was supposed to fire."); - } else { - MPLogDebug(@"Paused MPTimer (%p) %.1f seconds left before firing.", self, secondsLeft); - } - - // Pause the timer by setting its fire date far into the future. - [self.timer setFireDate:[NSDate distantFuture]]; - self.isCountdownActive = NO; - } -} - -- (void)resume -{ - [self scheduleNow]; -} - -#pragma mark - Private - -- (void)timerDidFire -{ - @synchronized (self) { - if (!self.isRepeatingTimer) { - self.isCountdownActive = NO; // this is the last firing - } - - if (self.selector == nil) { - MPLogDebug(@"%s `selector` is unexpectedly nil. Return early to avoid crash.", __FUNCTION__); - return; - } - - // use `objc_msgSend` to avoid the potential memory leak issue of `performSelector:` - typedef void (*Message)(id, SEL, id); - Message func = (Message)objc_msgSend; - func(self.target, self.selector, self); - } -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPUserInteractionGestureRecognizer.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPUserInteractionGestureRecognizer.h deleted file mode 100644 index de83d39ef2..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPUserInteractionGestureRecognizer.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// MPUserInteractionGestureRecognizer.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@interface MPUserInteractionGestureRecognizer : UIGestureRecognizer - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPUserInteractionGestureRecognizer.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPUserInteractionGestureRecognizer.m deleted file mode 100644 index 83f6a3140d..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPUserInteractionGestureRecognizer.m +++ /dev/null @@ -1,46 +0,0 @@ -// -// MPUserInteractionGestureRecognizer.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPUserInteractionGestureRecognizer.h" - -#import - -@implementation MPUserInteractionGestureRecognizer - -// Currently, we treat any touch as evidence of user interaction -- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event -{ - [super touchesBegan:touches withEvent:event]; - - if (self.state == UIGestureRecognizerStatePossible) { - self.state = UIGestureRecognizerStateRecognized; - } -} - -- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event -{ - [super touchesMoved:touches withEvent:event]; - - self.state = UIGestureRecognizerStateFailed; -} - -- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event -{ - [super touchesEnded:touches withEvent:event]; - - self.state = UIGestureRecognizerStateFailed; -} - -- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event -{ - [super touchesCancelled:touches withEvent:event]; - - self.state = UIGestureRecognizerStateFailed; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Protocols/MPMediaFileCache.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Protocols/MPMediaFileCache.h deleted file mode 100644 index 6fd864f7d7..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Protocols/MPMediaFileCache.h +++ /dev/null @@ -1,58 +0,0 @@ -// -// MPMediaFileCache.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#ifndef MPMediaFileCache_h -#define MPMediaFileCache_h - -#import -#import "MPVASTMediaFile.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - @c AVPlayer and related media player API requires the file extension (such as "mp4" and "3gpp") - being in the file name, otherwise the media file cannot be loaded. Problem is, the original design - of @c MPDiskLRUCache uses a SHA1 hash key for the file name of local cache file without the file - extension, and thus the cache file cannot be loaded into @c AVPlayer directly. This @c MPMediaFileCache - protocol is designed to solve this problem by preserving the original file extension in the cache - file. So, for @c AVPlayer relate media file access, use the API in this @c MediaFile category only. - */ -@protocol MPMediaFileCache - -/** - Obtain the expected local cache file URL provided the remote file URL. - Note: The cached file referenced by the returned URL may not exist. After the remote data is - downloaded, use `storeData:forRemoteSourceFileURL:` to store it to the returned cache file URL. - */ -- (NSURL *)cachedFileURLForRemoteFileURL:(NSURL *)remoteFileURL; - -/** - Determine whether a remote media file has been locally cached. - */ -- (BOOL)isRemoteFileCached:(NSURL *)remoteFileURL; - -/** - Store data to the cache directory. - @param data The data to write. - @param remoteFileURL The original remote URL that the file was hosted. - */ -- (void)storeData:(NSData *)data forRemoteSourceFileURL:(NSURL *)remoteFileURL; - -@optional - -/** - "Touch" (update with current date) @c NSFileModificationDate of the file for LRU tracking or other - purpose. @c NSFileModificationDate is updated because iOS doesn't provide "last opened date" access. - */ -- (void)touchCachedFileForRemoteFile:(NSURL *)remoteFileURL; - -@end - -NS_ASSUME_NONNULL_END - -#endif /* MPMediaFileCache_h */ diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTAd.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTAd.h deleted file mode 100644 index 41f11b28aa..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTAd.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// MPVASTAd.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPVASTModel.h" - -@class MPVASTInline; -@class MPVASTWrapper; - -@interface MPVASTAd : MPVASTModel - -@property (nonatomic, copy, readonly) NSString *identifier; -@property (nonatomic, copy, readonly) NSString *sequence; -@property (nonatomic, readonly) MPVASTInline *inlineAd; -@property (nonatomic, readonly) MPVASTWrapper *wrapper; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTAd.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTAd.m deleted file mode 100644 index 0aa787be30..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTAd.m +++ /dev/null @@ -1,39 +0,0 @@ -// -// MPVASTAd.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPVASTAd.h" -#import "MPVASTInline.h" -#import "MPVASTWrapper.h" -#import "MPLogging.h" - -@implementation MPVASTAd - -- (instancetype)initWithDictionary:(NSDictionary *)dictionary -{ - self = [super initWithDictionary:dictionary]; - if (self) { - // The VAST spec (2.2.2.2) prohibits an element from having both an and a - // element. If both are present, we'll only allow the element. - if (_inlineAd && _wrapper) { - MPLogInfo(@"VAST element is not allowed to contain both an and a " - @". The will be ignored."); - _wrapper = nil; - } - } - return self; -} - -+ (NSDictionary *)modelMap -{ - return @{@"identifier": @"id", - @"sequence": @"sequence", - @"inlineAd": @[@"InLine", MPParseClass([MPVASTInline class])], - @"wrapper": @[@"Wrapper", MPParseClass([MPVASTWrapper class])]}; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTCompanionAd.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTCompanionAd.h deleted file mode 100644 index cb1eaa989b..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTCompanionAd.h +++ /dev/null @@ -1,74 +0,0 @@ -// -// MPVASTCompanionAd.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import -#import "MPVASTModel.h" -#import "MPVASTResource.h" -#import "MPVASTTrackingEvent.h" - -@class MPVASTCompanionAd; - -@protocol MPVASTCompanionAdProvider - -- (BOOL)hasCompanionAd; - -/** - Return that best companion ad that fits into the provided container size. - */ -- (MPVASTCompanionAd *)companionAdForContainerSize:(CGSize)containerSize; - -@end - -@interface MPVASTCompanionAd : MPVASTModel - -@property (nonatomic, strong, readonly) NSString *identifier; // optional attribute -@property (nonatomic, readonly) CGFloat width; // point width -@property (nonatomic, readonly) CGFloat height; // point height -@property (nonatomic, readonly) CGFloat assetHeight; // optional attribute -@property (nonatomic, readonly) CGFloat assetWidth; // optional attribute -@property (nonatomic, copy, readonly) NSString *apiFramework; // optional attribute - -@property (nonatomic, strong, readonly) NSURL *clickThroughURL; -@property (nonatomic, strong, readonly) NSArray *clickTrackingURLs; - -/** Per VAST 3.0 spec 2.3.3.7 Tracking Details: - The element may contain one or more elements, but the only event - available for tracking under each Companion is the creativeView event. The creativeView event - tracks whether the Companion creative was viewed. This view does not count as an impression - because impressions are only counted for the Ad and the Companion is only one part of the Ad. - */ -@property (nonatomic, strong, readonly) NSArray *creativeViewTrackers; - -/** - Per VAST 3.0 specification, section 2.3.3.5 Companion Attributes, `width` and `height` are required - attributes for a companion ad. However, if `width` or `height` does not exist or being less than 1 - for any reason, the companion ad view might appear to be empty and causes issue. To ensure the - bounds of the companion ad view represents at least one pixel, the returned safe ad boudns as - `CGRect` guarantees the value of `width` and `height` to be at least 1. - */ -- (CGRect)safeAdViewBounds; - -/** - Return the best @c MPVASTResource that should be displayed. Per VAST specification - (https://developers.mopub.com/dsps/ad-formats/video/): - We will prioritize processing companion banners in the following order once we’ve picked the - best size: Static, HTML, iframe." Here we pick the "best size" that has the number of pixels - closest to the ad container. - - Note: The @c type of the returned @c MPVASTResource is determined and assigned. - */ -- (MPVASTResource *)resourceToDisplay; - -/** - Return best @c MPVASTCompanionAd that should be displayed. - */ -+ (MPVASTCompanionAd *)bestCompanionAdForCandidates:(NSArray *)candidates - containerSize:(CGSize)containerSize; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTCompanionAd.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTCompanionAd.m deleted file mode 100644 index dec98a230b..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTCompanionAd.m +++ /dev/null @@ -1,205 +0,0 @@ -// -// MPVASTCompanionAd.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPVASTCompanionAd.h" -#import "MPVASTResource.h" -#import "MPVASTStringUtilities.h" -#import "MPVASTTrackingEvent.h" -#import "MPVASTTracking.h" - -@interface MPVASTCompanionAd () - -/** Per VAST 3.0 spec 2.3.3.2 Companion Resource Elements: - Companion resource types are described below: - • StaticResource: Describes non-html creative where an attribute for creativeType is used to - identify the creative resource platform. The video player uses the creativeType information to - determine how to display the resource: - o Image/gif,image/jpeg,image/png:displayedusingtheHTMLtagandthe resource URI as the src attribute. - o Application/x-javascript:displayedusingtheHTMLtag\ - \ - \ -"; - return [NSString stringWithFormat:javaScriptResourceFormat, content]; - } - case MPVASTResourceType_Iframe: { - /* - To make the iframe taking full body area, margin and padding have to set to 0 to override the - original value; the iframe tag has to be contained in a div that position itself absolutely; - set "marginwidth" and "marginheight" as 0 since these two are not controlled by CSS styling. - - WARNING: For the format string, remember to escape the "%" character as "%%", not "\%". - */ - NSString *iframeResourceFormat = -@"\ - \ - Iframe Resource\ - \ - \ - \ - \ -
\ - \ -
\ - \ -"; - return [NSString stringWithFormat:iframeResourceFormat, content]; - } - } -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTResponse.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTResponse.h deleted file mode 100644 index c81610a626..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTResponse.h +++ /dev/null @@ -1,30 +0,0 @@ -// -// MPVASTResponse.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPVASTModel.h" - -#import "MPVASTAd.h" -#import "MPVASTCompanionAd.h" -#import "MPVASTCreative.h" -#import "MPVASTDurationOffset.h" -#import "MPVASTIndustryIcon.h" -#import "MPVASTInline.h" -#import "MPVASTLinearAd.h" -#import "MPVASTMediaFile.h" -#import "MPVASTResource.h" -#import "MPVASTTrackingEvent.h" -#import "MPVASTWrapper.h" - -@interface MPVASTResponse : MPVASTModel - -@property (nonatomic, readonly) NSArray *ads; -@property (nonatomic, readonly) NSArray *errorURLs; -@property (nonatomic, copy, readonly) NSString *version; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTResponse.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTResponse.m deleted file mode 100644 index 3670dc40f2..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTResponse.m +++ /dev/null @@ -1,29 +0,0 @@ -// -// MPVASTResponse.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPVASTResponse.h" - -@interface MPVASTResponse () - -@property (nonatomic) NSArray *ads; -@property (nonatomic) NSArray *errorURLs; -@property (nonatomic, copy) NSString *version; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MPVASTResponse - -+ (NSDictionary *)modelMap -{ - return @{@"ads": @[@"VAST.Ad", MPParseArrayOf(MPParseClass([MPVASTAd class]))], - @"version": @"VAST.version"}; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTStringUtilities.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTStringUtilities.h deleted file mode 100644 index 8b2cd86cfe..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTStringUtilities.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// MPVASTStringUtilities.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@interface MPVASTStringUtilities : NSObject - -+ (double)doubleFromString:(NSString *)string; -+ (BOOL)stringRepresentsNonNegativePercentage:(NSString *)string; -+ (BOOL)stringRepresentsNonNegativeDuration:(NSString *)string; -+ (NSInteger)percentageFromString:(NSString *)string; -+ (NSTimeInterval)timeIntervalFromString:(NSString *)string; -+ (NSString *)stringFromTimeInterval:(NSTimeInterval)timeInterval; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTStringUtilities.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTStringUtilities.m deleted file mode 100644 index 84b0df78c2..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTStringUtilities.m +++ /dev/null @@ -1,147 +0,0 @@ -// -// MPVASTStringUtilities.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPVASTStringUtilities.h" - -// Expected format is a decimal number from 0-100 followed by the % sign. -static NSString * const kPercentageRegexString = @"^(\\d?\\d(\\.\\d*)?|100(?:\\.0*)?)%$"; -static dispatch_once_t percentageRegexOnceToken; -static NSRegularExpression *percentageRegex; - -// Expected format is either HH:mm:ss.mmm or simply a floating-point number. -static NSString * const kDurationRegexString = @"^(\\d{2}):([0-5]\\d):([0-5]\\d(?:\\.\\d{1,3})?)|(^[0-9]*\\.?[0-9]+$)"; -static dispatch_once_t durationRegexOnceToken; -static NSRegularExpression *durationRegex; - -@implementation MPVASTStringUtilities - -+ (double)doubleFromString:(NSString *)string -{ - static NSNumberFormatter *formatter = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - formatter = [[NSNumberFormatter alloc] init]; - formatter.numberStyle = NSNumberFormatterDecimalStyle; - }); - - return [[formatter numberFromString:string] doubleValue]; -} - -+ (BOOL)stringRepresentsNonNegativePercentage:(NSString *)string -{ - dispatch_once(&percentageRegexOnceToken, ^{ - percentageRegex = [NSRegularExpression regularExpressionWithPattern:kPercentageRegexString options:0 error:nil]; - }); - - NSArray *matches = [percentageRegex matchesInString:string options:0 range:NSMakeRange(0, [string length])]; - - if (![matches count]) { - return NO; - } - - NSTextCheckingResult *match = matches[0]; - return (match.range.location != NSNotFound); -} - -+ (BOOL)stringRepresentsNonNegativeDuration:(NSString *)string -{ - dispatch_once(&durationRegexOnceToken, ^{ - durationRegex = [NSRegularExpression regularExpressionWithPattern:kDurationRegexString options:0 error:nil]; - }); - - NSArray *matches = [durationRegex matchesInString:string options:0 range:NSMakeRange(0, [string length])]; - - if (![matches count]) { - return NO; - } - - NSTextCheckingResult *match = matches[0]; - return (match.range.location != NSNotFound); -} - -+ (NSInteger)percentageFromString:(NSString *)string -{ - dispatch_once(&percentageRegexOnceToken, ^{ - percentageRegex = [NSRegularExpression regularExpressionWithPattern:kPercentageRegexString options:0 error:nil]; - }); - - if (![string length]) { - return 0; - } - - NSArray *matches = [percentageRegex matchesInString:string options:0 range:NSMakeRange(0, [string length])]; - if ([matches count]) { - NSTextCheckingResult *match = matches[0]; - if (match.range.location == NSNotFound) { - return 0; - } - - return [[string substringWithRange:[match rangeAtIndex:1]] integerValue]; - } else { - return 0; - } -} - -+ (NSTimeInterval)timeIntervalFromString:(NSString *)string -{ - dispatch_once(&durationRegexOnceToken, ^{ - durationRegex = [NSRegularExpression regularExpressionWithPattern:kDurationRegexString options:0 error:nil]; - }); - - if (![string length]) { - return 0; - } - - NSArray *matches = [durationRegex matchesInString:string options:0 range:NSMakeRange(0, [string length])]; - - if (![matches count]) { - return 0; - } - - NSTextCheckingResult *match = matches[0]; - if (match.range.location == NSNotFound) { - return 0; - } - - // This is the case where the string is simply a floating-point number. - if ([match rangeAtIndex:4].location != NSNotFound) { - return [[string substringWithRange:[match rangeAtIndex:4]] doubleValue]; - } - - // Fail if hours, minutes, or seconds are missing. - if ([match rangeAtIndex:1].location == NSNotFound || - [match rangeAtIndex:2].location == NSNotFound || - [match rangeAtIndex:3].location == NSNotFound) { - return 0; - } - - NSInteger hours = 0; - NSInteger minutes = 0; - double seconds = 0; - - hours = [[string substringWithRange:[match rangeAtIndex:1]] integerValue]; - minutes = [[string substringWithRange:[match rangeAtIndex:2]] integerValue]; - seconds = [[string substringWithRange:[match rangeAtIndex:3]] doubleValue]; - - return hours * 60 * 60 + minutes * 60 + seconds; -} - -+ (NSString *)stringFromTimeInterval:(NSTimeInterval)timeInterval -{ - if (timeInterval < 0) { - return @"00:00:00.000"; - } - - NSInteger flooredTimeInterval = (NSInteger)timeInterval; - NSInteger hours = flooredTimeInterval / 3600; - NSInteger minutes = (flooredTimeInterval / 60) % 60; - NSTimeInterval seconds = fmod(timeInterval, 60); - return [NSString stringWithFormat:@"%02ld:%02ld:%06.3f", (long)hours, (long)minutes, seconds]; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTTrackingEvent.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTTrackingEvent.h deleted file mode 100644 index 726676bfe7..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTTrackingEvent.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// MPVASTTrackingEvent.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPVASTModel.h" -#import "MPVideoEvent.h" - -NS_ASSUME_NONNULL_BEGIN - -@class MPVASTDurationOffset; - -@interface MPVASTTrackingEvent : MPVASTModel - -@property (nonatomic, copy, readonly) MPVideoEvent eventType; -@property (nonatomic, copy, readonly) NSURL *URL; -@property (nonatomic, readonly) MPVASTDurationOffset *progressOffset; - -- (instancetype)initWithEventType:(MPVideoEvent)eventType - url:(NSURL *)url - progressOffset:(MPVASTDurationOffset * _Nullable)progressOffset; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTTrackingEvent.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTTrackingEvent.m deleted file mode 100644 index 2f1b994b8a..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTTrackingEvent.m +++ /dev/null @@ -1,51 +0,0 @@ -// -// MPVASTTrackingEvent.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPVASTTrackingEvent.h" -#import "MPVASTDurationOffset.h" - -#pragma mark - MPVideoEvent - -@implementation MPVASTTrackingEvent - -- (instancetype)initWithDictionary:(NSDictionary *)dictionary -{ - self = [super initWithDictionary:dictionary]; - if (self) { - _eventType = dictionary[@"event"]; - - _URL = [self generateModelFromDictionaryValue:dictionary - modelProvider:^id(NSDictionary *dictionary) { - return [NSURL URLWithString:[dictionary[@"text"] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]]; - }]; - // a tracker that does not specify a URL is not valid - if (_URL == nil) { - return nil; - } - - _progressOffset = [self generateModelFromDictionaryValue:dictionary - modelProvider:^id(NSDictionary *dictionary) { - return [[MPVASTDurationOffset alloc] initWithDictionary:dictionary]; - }]; - } - return self; -} - -- (instancetype)initWithEventType:(MPVideoEvent)eventType - url:(NSURL *)url - progressOffset:(MPVASTDurationOffset *)progressOffset { - self = [super init]; - if (self) { - _eventType = eventType; - _URL = url; - _progressOffset = progressOffset; - } - return self; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTWrapper.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTWrapper.h deleted file mode 100644 index 00eef21090..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTWrapper.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// MPVASTWrapper.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPVASTModel.h" - -@class MPVASTResponse; - -@interface MPVASTWrapper : MPVASTModel - -@property (nonatomic, readonly) NSArray *creatives; -@property (nonatomic, readonly) NSArray *errorURLs; -@property (nonatomic, readonly) NSArray *extensions; -@property (nonatomic, readonly) NSArray *impressionURLs; -@property (nonatomic, copy, readonly) NSURL *VASTAdTagURI; -@property (nonatomic, readonly) MPVASTResponse *wrappedVASTResponse; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTWrapper.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTWrapper.m deleted file mode 100644 index ebd19ad7ff..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTWrapper.m +++ /dev/null @@ -1,43 +0,0 @@ -// -// MPVASTWrapper.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPVASTWrapper.h" -#import "MPVASTCreative.h" - -@interface MPVASTWrapper () - -@property (nonatomic, readwrite) MPVASTResponse *wrappedVASTResponse; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MPVASTWrapper - -- (instancetype)initWithDictionary:(NSDictionary *)dictionary -{ - self = [super initWithDictionary:dictionary]; - if (self) { - _extensions = [self generateModelsFromDictionaryValue:dictionary[@"Extensions"][@"Extension"] - modelProvider:^id(NSDictionary *dictionary) { - return dictionary; - }]; - } - return self; -} - -+ (NSDictionary *)modelMap -{ - return @{@"creatives": @[@"Creatives.Creative", MPParseArrayOf(MPParseClass([MPVASTCreative class]))], - @"errorURLs": @[@"Error.text", MPParseArrayOf(MPParseURLFromString())], - @"impressionURLs": @[@"Impression.text", MPParseArrayOf(MPParseURLFromString())], - // @"extensions": @[@"Extensions.Extension"], - @"VASTAdTagURI": @[@"VASTAdTagURI.text", MPParseURLFromString()]}; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVideoEvent.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVideoEvent.h deleted file mode 100644 index 9af2842957..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVideoEvent.h +++ /dev/null @@ -1,74 +0,0 @@ -// -// MPVideoEvent.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - To learn more about these events, please see VAST documentation: - https://www.iab.com/wp-content/uploads/2015/06/VASTv3_0.pdf - - Note: for `MPVideoEventCloseLinear`("closeLinear"): the user clicked the close button on the - creative. The name of this event distinguishes it from the existing “close” event described in the - 2008 IAB Digital Video In-Stream Ad Metrics Definitions, which defines the “close” metric as - applying to non-linear ads only. The "closeLinear" event extends the “close” event for use in Linear - creative. - - Since we don't know whether none, either, or both "close" or "closeLinear" are returned by the - creative, we should look for both trackers when the user closes the video. - */ -typedef NSString * MPVideoEvent; - -// keep this list sorted alphabetically -extern MPVideoEvent const MPVideoEventClick; -extern MPVideoEvent const MPVideoEventClose; // see note above about `MPVideoEventCloseLinear` -extern MPVideoEvent const MPVideoEventCloseLinear; // see note above about `MPVideoEventClose` -extern MPVideoEvent const MPVideoEventCollapse; -extern MPVideoEvent const MPVideoEventCompanionAdClick; // MoPub-specific tracking event -extern MPVideoEvent const MPVideoEventCompanionAdView; // MoPub-specific tracking event -extern MPVideoEvent const MPVideoEventComplete; -extern MPVideoEvent const MPVideoEventCreativeView; -extern MPVideoEvent const MPVideoEventError; -extern MPVideoEvent const MPVideoEventExitFullScreen; -extern MPVideoEvent const MPVideoEventExpand; -extern MPVideoEvent const MPVideoEventFirstQuartile; -extern MPVideoEvent const MPVideoEventFullScreen; -extern MPVideoEvent const MPVideoEventImpression; -extern MPVideoEvent const MPVideoEventIndustryIconClick; // MoPub-specific tracking event -extern MPVideoEvent const MPVideoEventIndustryIconView; // MoPub-specific tracking event -extern MPVideoEvent const MPVideoEventMidpoint; -extern MPVideoEvent const MPVideoEventMute; -extern MPVideoEvent const MPVideoEventPause; -extern MPVideoEvent const MPVideoEventProgress; -extern MPVideoEvent const MPVideoEventResume; -extern MPVideoEvent const MPVideoEventSkip; -extern MPVideoEvent const MPVideoEventStart; -extern MPVideoEvent const MPVideoEventThirdQuartile; -extern MPVideoEvent const MPVideoEventUnmute; - -/** - Provides class-level support for `MPVideoEvent` processing. - */ -@interface MPVideoEvents : NSObject - -/** - All available and supported `MPVideoEvent` types. - */ -@property (nonatomic, class, strong, readonly) NSSet *supported; - -/** - Queries if the inputted event string is a valid supported `MPVideoEvent` type. - @param event Video event candidate string. - @return `true` if valid; `false` otherwise. - */ -+ (BOOL)isSupportedEvent:(NSString *)event; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVideoEvent.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVideoEvent.m deleted file mode 100644 index b6cd3fbbf8..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVideoEvent.m +++ /dev/null @@ -1,79 +0,0 @@ -// -// MPVideoEvent.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPVideoEvent.h" - -// keep this list sorted alphabetically -MPVideoEvent const MPVideoEventClick = @"click"; -MPVideoEvent const MPVideoEventClose = @"close"; -MPVideoEvent const MPVideoEventCloseLinear = @"closeLinear"; -MPVideoEvent const MPVideoEventCollapse = @"collapse"; -MPVideoEvent const MPVideoEventCompanionAdClick = @"companionAdClick"; -MPVideoEvent const MPVideoEventCompanionAdView = @"companionAdView"; -MPVideoEvent const MPVideoEventComplete = @"complete"; -MPVideoEvent const MPVideoEventCreativeView = @"creativeView"; -MPVideoEvent const MPVideoEventError = @"error"; -MPVideoEvent const MPVideoEventExitFullScreen = @"exitFullscreen"; -MPVideoEvent const MPVideoEventExpand = @"expand"; -MPVideoEvent const MPVideoEventFirstQuartile = @"firstQuartile"; -MPVideoEvent const MPVideoEventFullScreen = @"fullscreen"; -MPVideoEvent const MPVideoEventImpression = @"impression"; -MPVideoEvent const MPVideoEventIndustryIconClick = @"industryIconClick"; -MPVideoEvent const MPVideoEventIndustryIconView = @"industryIconView"; -MPVideoEvent const MPVideoEventMidpoint = @"midpoint"; -MPVideoEvent const MPVideoEventMute = @"mute"; -MPVideoEvent const MPVideoEventPause = @"pause"; -MPVideoEvent const MPVideoEventProgress = @"progress"; -MPVideoEvent const MPVideoEventResume = @"resume"; -MPVideoEvent const MPVideoEventSkip = @"skip"; -MPVideoEvent const MPVideoEventStart = @"start"; -MPVideoEvent const MPVideoEventThirdQuartile = @"thirdQuartile"; -MPVideoEvent const MPVideoEventUnmute = @"unmute"; - -@implementation MPVideoEvents - -+ (NSSet *)supported { - static NSSet *supportedEvents = nil; - if (supportedEvents == nil) { - supportedEvents = [NSSet setWithObjects: - MPVideoEventClick, - MPVideoEventClose, - MPVideoEventCloseLinear, - MPVideoEventCollapse, - MPVideoEventCompanionAdClick, - MPVideoEventCompanionAdView, - MPVideoEventComplete, - MPVideoEventCreativeView, - MPVideoEventError, - MPVideoEventExitFullScreen, - MPVideoEventExpand, - MPVideoEventFirstQuartile, - MPVideoEventFullScreen, - MPVideoEventImpression, - MPVideoEventIndustryIconClick, - MPVideoEventIndustryIconView, - MPVideoEventMidpoint, - MPVideoEventMute, - MPVideoEventPause, - MPVideoEventProgress, - MPVideoEventResume, - MPVideoEventSkip, - MPVideoEventStart, - MPVideoEventThirdQuartile, - MPVideoEventUnmute, - nil]; - } - - return supportedEvents; -} - -+ (BOOL)isSupportedEvent:(NSString *)event { - return [MPVideoEvents.supported containsObject:event]; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VideoPlayer/MPVASTCompanionAdView.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VideoPlayer/MPVASTCompanionAdView.h deleted file mode 100644 index ca495af3b7..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VideoPlayer/MPVASTCompanionAdView.h +++ /dev/null @@ -1,47 +0,0 @@ -// -// MPVASTCompanionAdView.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPVASTCompanionAd.h" -#import "MPVASTResourceView.h" - -NS_ASSUME_NONNULL_BEGIN - -@class MPVASTCompanionAdView; - -@protocol MPVASTCompanionAdViewDelegate - -- (UIViewController *)viewControllerForPresentingModalMRAIDExpandedView; - -- (void)companionAdView:(MPVASTCompanionAdView *)companionAdView - didTriggerEvent:(MPVASTResourceViewEvent)event; - -- (void)companionAdView:(MPVASTCompanionAdView *)companionAdView -didTriggerOverridingClickThrough:(NSURL *)url; - -- (void)companionAdViewRequestDismiss:(MPVASTCompanionAdView *)companionAdView; - -@end - -/** - This view is for showing the companion ad of a VAST video. - See VAST spec for expected behavior: https://www.iab.com/guidelines/digital-video-ad-serving-template-vast-3-0/ - */ -@interface MPVASTCompanionAdView : UIView - -@property (nonatomic, readonly) MPVASTCompanionAd *ad; -@property (nonatomic, readonly) BOOL isLoaded; -@property (nonatomic, readonly) BOOL isWebContent; -@property (nonatomic, weak) id delegate; - -- (instancetype)initWithCompanionAd:(MPVASTCompanionAd *)ad; - -- (void)loadCompanionAd; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VideoPlayer/MPVASTCompanionAdView.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VideoPlayer/MPVASTCompanionAdView.m deleted file mode 100644 index b1afe5572a..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VideoPlayer/MPVASTCompanionAdView.m +++ /dev/null @@ -1,226 +0,0 @@ -// -// MPVASTCompanionAdView.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPImageLoader.h" -#import "MPLogging.h" -#import "MPVASTCompanionAdView.h" -#import "MRController.h" -#import "UIView+MPAdditions.h" - -@interface MPVASTCompanionAdView () - -@property (nonatomic, strong) MPVASTCompanionAd *ad; -@property (nonatomic, strong) MRController *mraidController; -@property (nonatomic, strong) UIImageView *imageView; -@property (nonatomic, strong) MPImageLoader *imageLoader; -@property (nonatomic, strong) UITapGestureRecognizer *tapGestureRecognizer; // exclusively for image resource -@property (nonatomic, assign, readwrite) BOOL isWebContent; - -@end - -@interface MPVASTCompanionAdView (UIGestureRecognizerDelegate) -@end - -@interface MPVASTCompanionAdView (MPImageLoaderDelegate) -@end - -@interface MPVASTCompanionAdView (MRControllerDelegate) -@end - -@implementation MPVASTCompanionAdView - -- (instancetype)initWithCompanionAd:(MPVASTCompanionAd *)ad { - self = [super init]; - if (self) { - _ad = ad; - _isWebContent = ad.resourceToDisplay.type != MPVASTResourceType_StaticImage; - self.accessibilityLabel = @"Companion Ad"; - } - return self; -} - -- (void)layoutSubviews { - [super layoutSubviews]; - - // Ensure that web content ads should occupy the entire container whenever the layout changes. - if (self.isWebContent) { - [self.subviews enumerateObjectsUsingBlock:^(__kindof UIView * _Nonnull subview, NSUInteger idx, BOOL * _Nonnull stop) { - subview.frame = self.bounds; - }]; - } -} - -- (void)loadCompanionAd { - MPVASTResource *resource = self.ad.resourceToDisplay; - if (resource.type == MPVASTResourceType_StaticImage) { - [self loadStaticImageResource:resource]; - } - else { - [self loadWebResource:resource]; - } -} - -- (void)loadStaticImageResource:(MPVASTResource *)resource { - if (self.imageView != nil) { - return; // already loaded - } - - NSURL *imageURL = [NSURL URLWithString:resource.content]; - if (imageURL == nil) { - [self.delegate companionAdView:self didTriggerEvent:MPVASTResourceViewEvent_FailedToLoadView]; - return; // invalid image URL - } - - // the ad creative is responsible for handling user interaction for other resource types - self.tapGestureRecognizer = [[UITapGestureRecognizer alloc] - initWithTarget:self - action:@selector(handleClickThrough)]; - self.tapGestureRecognizer.delegate = self; - [self addGestureRecognizer:self.tapGestureRecognizer]; - - // create and layout the image view - self.imageView = [[UIImageView alloc] initWithFrame:CGRectZero]; - self.imageView.contentMode = UIViewContentModeScaleAspectFit; - [self addSubview:self.imageView]; - self.imageView.translatesAutoresizingMaskIntoConstraints = NO; - [NSLayoutConstraint activateConstraints:@[ - [self.imageView.mp_safeTopAnchor constraintEqualToAnchor:self.mp_safeTopAnchor], - [self.imageView.mp_safeLeadingAnchor constraintEqualToAnchor:self.mp_safeLeadingAnchor], - [self.imageView.mp_safeBottomAnchor constraintEqualToAnchor:self.mp_safeBottomAnchor], - [self.imageView.mp_safeTrailingAnchor constraintEqualToAnchor:self.mp_safeTrailingAnchor] - ]]; - - // load the image - self.imageLoader = [MPImageLoader new]; - self.imageLoader.delegate = self; - [self.imageLoader loadImageForURL:imageURL intoImageView:self.imageView]; -} - -- (void)loadWebResource:(MPVASTResource *)resource { - if (self.mraidController != nil) { - return; // already loaded - } - - self.mraidController = [[MRController alloc] initWithAdViewFrame:self.ad.safeAdViewBounds - supportedOrientations:MPInterstitialOrientationTypeAll // companion ad does not inherit `x-orientation` from the main ad - adPlacementType:MRAdViewPlacementTypeInline - delegate:self]; - self.mraidController.delegate = self; - [self.mraidController disableClickthroughWebBrowser]; // let the companion ad view delegate handle click-through instead of the `MRController` - - // Resource content is a URL. Prioritize loading the URL. - NSURL *resourceUrl = [NSURL URLWithString:resource.content]; - if (resourceUrl != nil) { - [self.mraidController loadVASTCompanionAdUrl:resourceUrl]; - } - // Resource content should be an HTML snippet or full HTML doc. - else { - NSString *html = [MPVASTResource fullHTMLRespresentationForContent:resource.content - type:resource.type - containerSize:self.ad.safeAdViewBounds.size]; - [self.mraidController loadVASTCompanionAd:html]; - } -} - -- (void)handleClickThrough { - [self.delegate companionAdView:self didTriggerEvent:MPVASTResourceViewEvent_ClickThrough]; -} - -@end - -#pragma mark - UIGestureRecognizerDelegate - -@implementation MPVASTCompanionAdView (UIGestureRecognizerDelegate) - -- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer -shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { - return YES; // need this for the web view to recognize the tap -} - -@end - -#pragma mark - MPImageLoaderDelegate - -@implementation MPVASTCompanionAdView (MPImageLoaderDelegate) - -- (BOOL)nativeAdViewInViewHierarchy { - // Always return YES because the companion ad is not recycled like a table cell. The companion ad - // view only exists while it's still in the view hierarchy. - return YES; -} - -- (void)imageLoader:(MPImageLoader *)imageLoaded didLoadImageIntoImageView:(UIImageView *)imageView { - if (self.imageView != imageView) { - return; - } - - _isLoaded = YES; - [self.delegate companionAdView:self didTriggerEvent:MPVASTResourceViewEvent_DidLoadView]; -} - -@end - -#pragma mark - MRControllerDelegate - -@implementation MPVASTCompanionAdView (MRControllerDelegate) - -- (UIViewController *)viewControllerForPresentingModalView { - return self.delegate.viewControllerForPresentingModalMRAIDExpandedView; -} - -- (void)appShouldSuspendForAd:(UIView *)adView { - // No op. It's the owner's (such as custom event) responsibility for handling app status changes -} - -- (void)appShouldResumeFromAd:(UIView *)adView { - // No op. It's the owner's (such as custom event) responsibility for handling app status changes -} - -- (void)adDidLoad:(UIView *)adView { - /* - Note: Do not apply layout constrains on the ad view, otherwise the layout engine mighe be confused. - - Current the MRAID two-part expandable ad view container does not work well with layout constraints - while the ad view is being transfer between different parents. Since companion ad view container - always has a fixed size, we can safely use the good old `bounds` for laying out the ad view. - */ - - // Web content ads should occupy the entire container. - adView.frame = self.bounds; - [self addSubview:adView]; - [self layoutIfNeeded]; - - _isLoaded = YES; // keep this before delegate callback - [self.delegate companionAdView:self didTriggerEvent:MPVASTResourceViewEvent_DidLoadView]; -} - -- (void)adDidFailToLoad:(UIView *)adView { - [self.delegate companionAdView:self didTriggerEvent:MPVASTResourceViewEvent_FailedToLoadView]; -} - -- (void)adWillClose:(UIView *)adView { - [self.delegate companionAdViewRequestDismiss:self]; -} - -- (void)adDidClose:(UIView *)adView { - // No op. Let `adWillClose:` forward the dismiss request to the delegate -} - -- (void)adDidReceiveClickthrough:(NSURL *)url { - [self.delegate companionAdView:self didTriggerOverridingClickThrough:url]; -} - -- (void)adWillExpand:(UIView *)adView { - // No op. Unlike regular inline ads, companion ad is not refreshed automatically and thus no need to pause refresh timer. -} - -- (void)adDidCollapse:(UIView *)adView { - // No op. Unlike regular inline ads, companion ad is not refreshed automatically and thus no need to resume refresh timer. -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VideoPlayer/MPVASTIndustryIconView.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VideoPlayer/MPVASTIndustryIconView.h deleted file mode 100644 index adcae6fb26..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VideoPlayer/MPVASTIndustryIconView.h +++ /dev/null @@ -1,42 +0,0 @@ -// -// MPVASTIndustryIconView.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPVASTIndustryIcon.h" -#import "MPVASTResourceView.h" - -NS_ASSUME_NONNULL_BEGIN - -@class MPVASTIndustryIconView; - -@protocol MPVASTIndustryIconViewDelegate - -- (void)industryIconView:(MPVASTIndustryIconView *)iconView - didTriggerEvent:(MPVASTResourceViewEvent)event; - -- (void)industryIconView:(MPVASTIndustryIconView *)iconView -didTriggerOverridingClickThrough:(NSURL *)url; - -@end - -/** - Implementation note from VAST 3.0 specification: - Since a vendor often serves icons and may charge advertising parties for each icon served, the - video player should not pre-fetch the icon resource until the resource can be displayed. - Pre-fetching the icon resource may cause the icon provider to falsely record an icon view when - the icon may not have been displayed. - */ -@interface MPVASTIndustryIconView : MPVASTResourceView - -@property (nonatomic, readonly) MPVASTIndustryIcon *icon; -@property (nonatomic, weak) id iconViewDelegate; - -- (void)loadIcon:(MPVASTIndustryIcon *)icon; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VideoPlayer/MPVASTIndustryIconView.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VideoPlayer/MPVASTIndustryIconView.m deleted file mode 100644 index 70ec526757..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VideoPlayer/MPVASTIndustryIconView.m +++ /dev/null @@ -1,54 +0,0 @@ -// -// MPVASTIndustryIconView.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPLogging.h" -#import "MPVASTIndustryIconView.h" - -@interface MPVASTIndustryIconView () - -@property (nonatomic, strong) MPVASTIndustryIcon *icon; - -@end - -@interface MPVASTIndustryIconView (MPVASTResourceViewDelegate) -@end - -@implementation MPVASTIndustryIconView - -- (instancetype)init { - self = [super init]; - if (self) { - self.resourceViewDelegate = self; - } - return self; -} - -- (void)loadIcon:(MPVASTIndustryIcon *)icon { - self.icon = icon; - [self loadResource:icon.resourceToDisplay containerSize:CGSizeMake(icon.width, icon.height)]; -} - -@end - -@implementation MPVASTIndustryIconView (MPVASTResourceViewDelegate) - -- (void)vastResourceView:(MPVASTResourceView *)vastResourceView - didTriggerEvent:(MPVASTResourceViewEvent)event { - if (vastResourceView == self) { - [self.iconViewDelegate industryIconView:self didTriggerEvent:event]; - } else { - MPLogError(@"Unexpected `MPVASTResourceView` callback for %@", vastResourceView); - } -} - -- (void)vastResourceView:(MPVASTResourceView *)vastResourceView -didTriggerOverridingClickThrough:(NSURL *)url { - [self.iconViewDelegate industryIconView:self didTriggerOverridingClickThrough:url]; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VideoPlayer/MPVASTResourceView.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VideoPlayer/MPVASTResourceView.h deleted file mode 100644 index 662c54bfd1..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VideoPlayer/MPVASTResourceView.h +++ /dev/null @@ -1,47 +0,0 @@ -// -// MPVASTResourceView.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPVASTResource.h" -#import "MPWebView.h" - -NS_ASSUME_NONNULL_BEGIN - -typedef NS_ENUM(NSUInteger, MPVASTResourceViewEvent) { - MPVASTResourceViewEvent_ClickThrough, // this is a VAST click-through, not a web view click-through - MPVASTResourceViewEvent_DidLoadView, - MPVASTResourceViewEvent_FailedToLoadView -}; - -@class MPVASTResourceView; - -@protocol MPVASTResourceViewDelegate - -- (void)vastResourceView:(MPVASTResourceView *)vastResourceView - didTriggerEvent:(MPVASTResourceViewEvent)event; - -/** - This web view click-through is different from the VAST version (`MPVASTResourceViewEvent_ClickThrough`). - VAST click-through is triggered by tapping on a static image resource and uses the click-through - URL in the VAST XML, while this web view click-through is triggered by tapping on any link in the - VAST resource creative. - */ -- (void)vastResourceView:(MPVASTResourceView *)vastResourceView -didTriggerOverridingClickThrough:(NSURL *)url; - -@end - -@interface MPVASTResourceView : MPWebView - -@property (nonatomic, readonly) BOOL isLoaded; -@property (nonatomic, weak) id resourceViewDelegate; // not `MPWebView.delegate` - -- (void)loadResource:(MPVASTResource *)resource containerSize:(CGSize)containerSize; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VideoPlayer/MPVASTResourceView.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VideoPlayer/MPVASTResourceView.m deleted file mode 100644 index 6b6f1a5953..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VideoPlayer/MPVASTResourceView.m +++ /dev/null @@ -1,122 +0,0 @@ -// -// MPVASTResourceView.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPVASTResourceView.h" - -/* - The HTML format strings are inspired by VastResource.java of the MoPub Android SDK. The web content - of all kinds should not scrollable nor scalable. `WKWebView` might not set the initial scale as 1.0, - thus we need to explicitly specify it in the `meta` tag. - Note: One "pixel" in `WKWebView` is actually one "point". - Warning: As a format string, remember to escape the "%" character as "%%", not "\%". Otherwise, - 100% will be recognized as 100px. - */ -@interface MPVASTResourceView () - -@property (nonatomic, strong) UITapGestureRecognizer *tapGestureRecognizer; - -@end - -@interface MPVASTResourceView (MPWebViewDelegate) -@end - -@interface MPVASTResourceView (UIGestureRecognizerDelegate) -@end - -@implementation MPVASTResourceView - -- (instancetype)init { - self = [super initWithFrame:CGRectZero]; - if (self) { - self.delegate = self; - self.backgroundColor = UIColor.blackColor; - } - return self; -} - -- (void)loadResource:(MPVASTResource *)resource containerSize:(CGSize)containerSize { - if (resource == nil) { - [self.resourceViewDelegate vastResourceView:self didTriggerEvent:MPVASTResourceViewEvent_FailedToLoadView]; - return; - } - - // For static image resource, add a tap gesture recognizer to handle click-through. For all - // other resource types, let the web view navigtion delegate handle the click-through. - if (resource.type == MPVASTResourceType_StaticImage) { - [self addTapGestureRecognizer]; - } else { - [self removeTapGestureRecognizer]; // in case of the view is reused - } - - NSString *htmlString = [MPVASTResource fullHTMLRespresentationForContent:resource.content - type:resource.type - containerSize:containerSize]; - [self loadHTMLString:htmlString baseURL:nil]; -} - -#pragma mark - Private - -- (void)addTapGestureRecognizer { - if (self.tapGestureRecognizer == nil) { - self.tapGestureRecognizer = [[UITapGestureRecognizer alloc] - initWithTarget:self - action:@selector(handleClickThrough)]; - self.tapGestureRecognizer.delegate = self; - [self addGestureRecognizer:self.tapGestureRecognizer]; - } -} - -- (void)removeTapGestureRecognizer { - if (self.tapGestureRecognizer != nil) { - [self removeGestureRecognizer:self.tapGestureRecognizer]; - self.tapGestureRecognizer = nil; - } -} - -- (void)handleClickThrough { - [self.resourceViewDelegate vastResourceView:self didTriggerEvent:MPVASTResourceViewEvent_ClickThrough]; -} - -@end - -#pragma mark - MPWebViewDelegate - -@implementation MPVASTResourceView (MPWebViewDelegate) - -- (BOOL)webView:(MPWebView *)webView -shouldStartLoadWithRequest:(NSURLRequest *)request - navigationType:(WKNavigationType)navigationType { - if ([request.URL.absoluteString isEqualToString:@"about:blank"]) { - return YES; // `WKWebView` always starts with a blank page - } else { - [self.resourceViewDelegate vastResourceView:self didTriggerOverridingClickThrough:request.URL]; - return NO; // always delegate click-through handling instead of handling here - } -} - -- (void)webViewDidFinishLoad:(MPWebView *)webView { - _isLoaded = YES; - [self.resourceViewDelegate vastResourceView:self didTriggerEvent:MPVASTResourceViewEvent_DidLoadView]; -} - -- (void)webView:(MPWebView *)webView didFailLoadWithError:(NSError *)error { - [self.resourceViewDelegate vastResourceView:self didTriggerEvent:MPVASTResourceViewEvent_FailedToLoadView]; -} - -@end - -#pragma mark - UIGestureRecognizerDelegate - -@implementation MPVASTResourceView (UIGestureRecognizerDelegate) - -- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer -shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { - return YES; // need this for the web view to recognize the tap -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VideoPlayer/MPVideoPlayer.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VideoPlayer/MPVideoPlayer.h deleted file mode 100644 index 5bc317ec06..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VideoPlayer/MPVideoPlayer.h +++ /dev/null @@ -1,63 +0,0 @@ -// -// MPVideoPlayer.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#ifndef MPVideoPlayer_h -#define MPVideoPlayer_h - -#import "MPVideoConfig.h" - -NS_ASSUME_NONNULL_BEGIN - -typedef NS_ENUM(NSInteger, MPVideoPlayerEvent) { - MPVideoPlayerEvent_ClickThrough, - MPVideoPlayerEvent_Close, - MPVideoPlayerEvent_Skip -}; - -@protocol MPVideoPlayer - -/** - A @c MPVideoPlayerViewDelegate is required for this view to work properly. This init loads the - video right away and the delegate is notified as soon as the video is loaded and ready to play. - */ -- (instancetype)initWithVideoURL:(NSURL *)videoURL videoConfig:(MPVideoConfig *)videoConfig; - -/** - Load the video. - - Note: Call this for once at most. Subsequent calls after the first one will have no effect. - */ -- (void)loadVideo; - -/** - Play the video. - */ -- (void)play; - -/** - Pause the video. - */ -- (void)pause; - -/** - Enable app life cycle event observation for auto-play and auto-pause. - Note: This should be called when the video is visible (for example, not blocked by click-through web view). - */ -- (void)enableAppLifeCycleEventObservationForAutoPlayPause; - -/** - Disable app life cycle event observation for auto-play and auto-pause. - Note: This should be called when the video is invisible (for example, blocked by click-through web view). - */ -- (void)disableAppLifeCycleEventObservationForAutoPlayPause; - -@end - -NS_ASSUME_NONNULL_END - -#endif /* MPVideoPlayer_h */ diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VideoPlayer/MPVideoPlayerContainerView.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VideoPlayer/MPVideoPlayerContainerView.h deleted file mode 100644 index 56dfdf3b8e..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VideoPlayer/MPVideoPlayerContainerView.h +++ /dev/null @@ -1,78 +0,0 @@ -// -// MPVideoPlayerContainerView.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPVASTCompanionAdView.h" -#import "MPVASTIndustryIconView.h" -#import "MPVideoPlayer.h" - -NS_ASSUME_NONNULL_BEGIN - -@protocol MPVideoPlayerContainerViewDelegate; - -@interface MPVideoPlayerContainerView : UIView - -@property (nonatomic, weak) id delegate; - -@end - -#pragma mark - - -@protocol MPVideoPlayerContainerViewDelegate - -#pragma mark - video player view - -- (UIViewController *)viewControllerForPresentingModalMRAIDExpandedView; - -- (void)videoPlayerContainerViewDidLoadVideo:(MPVideoPlayerContainerView *)videoPlayerContainerView; - -- (void)videoPlayerContainerViewDidFailToLoadVideo:(MPVideoPlayerContainerView *)videoPlayerContainerView - error:(NSError *)error; - -- (void)videoPlayerContainerViewDidStartVideo:(MPVideoPlayerContainerView *)videoPlayerContainerView - duration:(NSTimeInterval)duration; - -- (void)videoPlayerContainerViewDidCompleteVideo:(MPVideoPlayerContainerView *)videoPlayerContainerView - duration:(NSTimeInterval)duration; - -- (void)videoPlayerContainerView:(MPVideoPlayerContainerView *)videoPlayerContainerView - videoDidReachProgressTime:(NSTimeInterval)videoProgress - duration:(NSTimeInterval)duration; - -- (void)videoPlayerContainerView:(MPVideoPlayerContainerView *)videoPlayerContainerView - didTriggerEvent:(MPVideoPlayerEvent)event - videoProgress:(NSTimeInterval)videoProgress; - -#pragma mark - industry icon view - -- (void)videoPlayerContainerView:(MPVideoPlayerContainerView *)videoPlayerContainerView - didShowIndustryIconView:(MPVASTIndustryIconView *)iconView; - -- (void)videoPlayerContainerView:(MPVideoPlayerContainerView *)videoPlayerContainerView - didClickIndustryIconView:(MPVASTIndustryIconView *)iconView - overridingClickThroughURL:(NSURL * _Nullable)url; - -#pragma mark - companion ad view - -- (void)videoPlayerContainerView:(MPVideoPlayerContainerView *)videoPlayerContainerView - didShowCompanionAdView:(MPVASTCompanionAdView *)companionAdView; - -- (void)videoPlayerContainerView:(MPVideoPlayerContainerView *)videoPlayerContainerView - didClickCompanionAdView:(MPVASTCompanionAdView *)companionAdView - overridingClickThroughURL:(NSURL * _Nullable)url; - -- (void)videoPlayerContainerView:(MPVideoPlayerContainerView *)videoPlayerContainerView - didFailToLoadCompanionAdView:(MPVASTCompanionAdView *)companionAdView; - -- (void)videoPlayerContainerView:(MPVideoPlayerContainerView *)videoPlayerContainerView - companionAdViewRequestDismiss:(MPVASTCompanionAdView *)companionAdView; - -@end - - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VideoPlayer/MPVideoPlayerContainerView.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VideoPlayer/MPVideoPlayerContainerView.m deleted file mode 100644 index c95217c381..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VideoPlayer/MPVideoPlayerContainerView.m +++ /dev/null @@ -1,391 +0,0 @@ -// -// MPVideoPlayerContainerView.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPLogging.h" -#import "MPVideoPlayerContainerView.h" -#import "MPVideoPlayerFullScreenVASTAdOverlay.h" -#import "MPVideoPlayerView.h" -#import "MPVideoPlayerViewOverlay.h" -#import "UIView+MPAdditions.h" - -static const NSTimeInterval kAnimationTimeInterval = 0.5; - -@interface MPVideoPlayerContainerView () - -@property (nonatomic, strong) MPVideoConfig *videoConfig; -@property (nonatomic, strong) MPVideoPlayerView *videoPlayerView; -@property (nonatomic, strong) MPVASTCompanionAdView *companionAdView; -@property (nonatomic, strong) NSArray *companionAdViewEdgeConstraints; // see `updateCompanionAdViewEdgeConstraints` -@property (nonatomic, strong) UIVisualEffectView *blurEffectView; // only show if video ends with no companion ad -@property (nonatomic, strong) UIView *overlay; -@property (nonatomic, assign) BOOL isVideoFinished; // default to NO - -@end - -@interface MPVideoPlayerContainerView (MPVideoPlayerViewDelegate) -@end - -@interface MPVideoPlayerContainerView (MPVideoPlayerFullScreenVASTAdOverlayDelegate) -@end - -@interface MPVideoPlayerContainerView (MPVASTCompanionAdViewDelegate) -@end - -@implementation MPVideoPlayerContainerView - -#pragma mark - MPVideoPlayer - -- (instancetype)initWithVideoURL:(NSURL *)videoURL videoConfig:(MPVideoConfig *)videoConfig { - if (self = [super init]) { - _videoConfig = videoConfig; - _videoPlayerView = [[MPVideoPlayerView alloc] initWithVideoURL:videoURL - videoConfig:videoConfig]; - _videoPlayerView.delegate = self; - self.backgroundColor = UIColor.blackColor; - - [self addSubview:self.videoPlayerView]; - self.videoPlayerView.translatesAutoresizingMaskIntoConstraints = NO; - [[self.videoPlayerView.mp_safeTopAnchor constraintEqualToAnchor:self.mp_safeTopAnchor] setActive:YES]; - [[self.videoPlayerView.mp_safeLeadingAnchor constraintEqualToAnchor:self.mp_safeLeadingAnchor] setActive:YES]; - [[self.videoPlayerView.mp_safeBottomAnchor constraintEqualToAnchor:self.mp_safeBottomAnchor] setActive:YES]; - [[self.videoPlayerView.mp_safeTrailingAnchor constraintEqualToAnchor:self.mp_safeTrailingAnchor] setActive:YES]; - } - return self; -} - -- (void)loadVideo { - if (self.videoPlayerView.didLoadVideo) { - return; - } - - [self.videoPlayerView loadVideo]; - [self setUpOverlay]; -} - -- (void)play { - if (self.videoPlayerView.hasStartedPlaying == NO) { - [self preloadCompanionAd]; - [self.overlay handleVideoStartForSkipOffset:self.videoConfig.skipOffset - videoDuration:self.videoPlayerView.videoDuration]; - } - - [self.videoPlayerView play]; - - if ([self.overlay respondsToSelector:@selector(resumeTimer)]) { - [self.overlay resumeTimer]; - } -} - -- (void)pause { - [self.videoPlayerView pause]; - - if ([self.overlay respondsToSelector:@selector(pauseTimer)]) { - [self.overlay pauseTimer]; - } -} - -- (void)enableAppLifeCycleEventObservationForAutoPlayPause { - [self.videoPlayerView enableAppLifeCycleEventObservationForAutoPlayPause]; -} - -- (void)disableAppLifeCycleEventObservationForAutoPlayPause { - [self.videoPlayerView disableAppLifeCycleEventObservationForAutoPlayPause]; -} - -- (void)updateConstraints { - [super updateConstraints]; - - // No companion ad available; do nothing. - MPVASTCompanionAd *ad = self.companionAdView.ad; - if (ad == nil) { - return; - } - - // If the container view size cannot fit the ad size, or if the ad is web content, then activate - // the edge constraints of the companion ad view so that it becomes small enough to be shown without - // being cropped. - // The dimension constraints have lower priority thus the edge constraints are effective first with higher priority. - BOOL isContainerSmallerThanCompanionAdSize = self.bounds.size.width < ad.width || self.bounds.size.height < ad.height; - if (isContainerSmallerThanCompanionAdSize || self.companionAdView.isWebContent) { - [NSLayoutConstraint activateConstraints:self.companionAdViewEdgeConstraints]; - } - else { - [NSLayoutConstraint deactivateConstraints:self.companionAdViewEdgeConstraints]; - } -} - -#pragma mark - Overlay - -/** - A helper for setting up @c overlay. Call this during init only. - */ -- (void)setUpOverlay { - if (self.overlay != nil) { - MPLogDebug(@"video player overlay has been set up"); - return; - } - - MPVideoPlayerViewOverlayConfig *config - = [[MPVideoPlayerViewOverlayConfig alloc] - initWithCallToActionButtonTitle:self.videoConfig.callToActionButtonTitle - isRewarded:self.videoConfig.isRewarded - isClickthroughAllowed:self.videoConfig.clickThroughURL.absoluteString.length > 0 - hasCompanionAd:self.videoConfig.hasCompanionAd - enableEarlyClickthroughForNonRewardedVideo:self.videoConfig.enableEarlyClickthroughForNonRewardedVideo]; - MPVideoPlayerFullScreenVASTAdOverlay *overlay = [[MPVideoPlayerFullScreenVASTAdOverlay alloc] initWithConfig:config]; - overlay.delegate = self; - self.overlay = overlay; - - [self addSubview:overlay]; - overlay.translatesAutoresizingMaskIntoConstraints = NO; - [[overlay.mp_safeTopAnchor constraintEqualToAnchor:self.mp_safeTopAnchor] setActive:YES]; - [[overlay.mp_safeLeadingAnchor constraintEqualToAnchor:self.mp_safeLeadingAnchor] setActive:YES]; - [[overlay.mp_safeBottomAnchor constraintEqualToAnchor:self.mp_safeBottomAnchor] setActive:YES]; - [[overlay.mp_safeTrailingAnchor constraintEqualToAnchor:self.mp_safeTrailingAnchor] setActive:YES]; -} - -#pragma mark - Companion Ad - -- (void)preloadCompanionAd { - MPVASTCompanionAd *ad = [self.videoConfig companionAdForContainerSize:self.bounds.size]; - if (ad == nil) { - return; - } - - if (self.companionAdView != nil) { - return; // only show one for once - } - - self.companionAdView = [[MPVASTCompanionAdView alloc] initWithCompanionAd:ad]; - self.companionAdView.delegate = self; - self.companionAdView.clipsToBounds = YES; - [self insertSubview:self.companionAdView belowSubview:self.overlay]; - self.companionAdView.translatesAutoresizingMaskIntoConstraints = NO; - - // All companion ad types may pin to the edges of the container. - self.companionAdViewEdgeConstraints = @[ - [self.companionAdView.mp_safeTopAnchor constraintEqualToAnchor:self.mp_safeTopAnchor], - [self.companionAdView.mp_safeLeadingAnchor constraintEqualToAnchor:self.mp_safeLeadingAnchor], - [self.companionAdView.mp_safeBottomAnchor constraintEqualToAnchor:self.mp_safeBottomAnchor], - [self.companionAdView.mp_safeTrailingAnchor constraintEqualToAnchor:self.mp_safeTrailingAnchor] - ]; - - // Non-web content companion ads should retain their aspect ratio scaling. - if (!self.companionAdView.isWebContent) { - NSLayoutConstraint *widthContraint = [self.companionAdView.mp_safeWidthAnchor constraintLessThanOrEqualToConstant:ad.width]; - NSLayoutConstraint *aspectRatioConstraint = [self.companionAdView.mp_safeHeightAnchor constraintEqualToAnchor:self.companionAdView.mp_safeWidthAnchor multiplier:ad.height/ad.width]; - // "High" priority is 750, less than the default "Required" 1000. The edge constraints have the - // higher priority, so that the companion ad view can be resize to fit into smaller container. - widthContraint.priority = UILayoutPriorityDefaultHigh; - aspectRatioConstraint.priority = UILayoutPriorityDefaultHigh; - [NSLayoutConstraint activateConstraints:@[ - [self.companionAdView.mp_safeCenterXAnchor constraintEqualToAnchor:self.mp_safeCenterXAnchor], - [self.companionAdView.mp_safeCenterYAnchor constraintEqualToAnchor:self.mp_safeCenterYAnchor], - widthContraint, - aspectRatioConstraint - ]]; - } - - self.companionAdView.alpha = 0; // hidden by default, only show after loaded and video finishes - [self.companionAdView loadCompanionAd]; // delegate will handle load status updates -} - -/** - Note: Do nothing before the video finishes. - */ -- (void)showCompanionAd { - if (self.isVideoFinished == NO) { // timing guard - return; - } - - if (self.companionAdView != nil - && self.companionAdView.isLoaded - && self.companionAdView.alpha == 0) { - - // Notify UI that contraints and layout need to be updated - [self setNeedsUpdateConstraints]; - [self setNeedsLayout]; - - [UIView animateWithDuration:kAnimationTimeInterval animations:^{ - self.companionAdView.alpha = 1; - self.videoPlayerView.alpha = 0; - } completion:^(BOOL finished) { - [self.videoPlayerView removeFromSuperview]; - self.videoPlayerView = nil; - }]; - - [self.delegate videoPlayerContainerView:self didShowCompanionAdView:self.companionAdView]; - } else { - [self makeVideoBlurry]; - } -} - -/** - Make the video blurry if there is no companion ad to show after the video finishes. - */ -- (void)makeVideoBlurry { - if (self.blurEffectView != nil) { - return; // only show one for once - } - - self.blurEffectView = [UIVisualEffectView new]; - [self.videoPlayerView addSubview:self.blurEffectView]; - - self.blurEffectView.translatesAutoresizingMaskIntoConstraints = NO; - [[self.blurEffectView.mp_safeTopAnchor constraintEqualToAnchor:self.videoPlayerView.mp_safeTopAnchor] setActive:YES]; - [[self.blurEffectView.mp_safeLeadingAnchor constraintEqualToAnchor:self.videoPlayerView.mp_safeLeadingAnchor] setActive:YES]; - [[self.blurEffectView.mp_safeBottomAnchor constraintEqualToAnchor:self.videoPlayerView.mp_safeBottomAnchor] setActive:YES]; - [[self.blurEffectView.mp_safeTrailingAnchor constraintEqualToAnchor:self.videoPlayerView.mp_safeTrailingAnchor] setActive:YES]; - - [UIView animateWithDuration:kAnimationTimeInterval animations:^{ - self.blurEffectView.effect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight]; - }]; -} - -@end - -#pragma mark - MPVideoPlayerViewDelegate - -@implementation MPVideoPlayerContainerView (MPVideoPlayerViewDelegate) - -- (void)videoPlayerViewDidLoadVideo:(MPVideoPlayerView *)videoPlayerView { - [self.delegate videoPlayerContainerViewDidLoadVideo:self]; -} - -- (void)videoPlayerViewDidFailToLoadVideo:(MPVideoPlayerView *)videoPlayerView error:(NSError *)error { - [self.delegate videoPlayerContainerViewDidFailToLoadVideo:self error:error]; -} - -- (void)videoPlayerViewDidStartVideo:(MPVideoPlayerView *)videoPlayerView duration:(NSTimeInterval)duration { - [self.delegate videoPlayerContainerViewDidStartVideo:self duration:duration]; -} - -- (void)videoPlayerViewDidCompleteVideo:(MPVideoPlayerView *)videoPlayerView duration:(NSTimeInterval)duration { - self.isVideoFinished = YES; - [self showCompanionAd]; - [self.overlay handleVideoComplete]; - [self.delegate videoPlayerContainerViewDidCompleteVideo:self duration:duration]; -} - -- (void)videoPlayerView:(MPVideoPlayerView *)videoPlayerView -videoDidReachProgressTime:(NSTimeInterval)videoProgress - duration:(NSTimeInterval)duration { - [self.delegate videoPlayerContainerView:self - videoDidReachProgressTime:videoProgress - duration:duration]; -} - -- (void)videoPlayerView:(MPVideoPlayerView *)videoPlayerView - didTriggerEvent:(MPVideoPlayerEvent)event - videoProgress:(NSTimeInterval)videoProgress { - [self.delegate videoPlayerContainerView:self - didTriggerEvent:event - videoProgress:videoProgress]; -} - -- (void)videoPlayerView:(MPVideoPlayerView *)videoPlayerView - showIndustryIcon:(MPVASTIndustryIcon *)icon { - [self.overlay showIndustryIcon:icon]; -} - -- (void)videoPlayerViewHideIndustryIcon:(MPVideoPlayerView *)videoPlayerView { - [self.overlay hideIndustryIcon]; -} - -@end - -#pragma mark - MPVideoPlayerFullScreenVASTAdOverlayDelegate - -@implementation MPVideoPlayerContainerView (MPVideoPlayerFullScreenVASTAdOverlayDelegate) - -#pragma mark - MPVideoPlayerViewOverlayDelegate - -- (void)videoPlayerViewOverlay:(id)overlay - didTriggerEvent:(MPVideoPlayerEvent)event { - [self.delegate videoPlayerContainerView:self - didTriggerEvent:event - videoProgress:self.videoPlayerView.videoProgress]; -} - -#pragma mark - MPVASTIndustryIconViewDelegate - -- (void)industryIconView:(MPVASTIndustryIconView *)iconView - didTriggerEvent:(MPVASTResourceViewEvent)event { - switch (event) { - case MPVASTResourceViewEvent_ClickThrough: { - [self.delegate videoPlayerContainerView:self - didClickIndustryIconView:iconView - overridingClickThroughURL:nil]; - break; - } - case MPVASTResourceViewEvent_DidLoadView: { - [self.delegate videoPlayerContainerView:self didShowIndustryIconView:iconView]; - break; - } - case MPVASTResourceViewEvent_FailedToLoadView: { - MPLogError(@"Failed to load industry icon view: %@", iconView.icon); - break; - } - } -} - -- (void)industryIconView:(MPVASTIndustryIconView *)iconView -didTriggerOverridingClickThrough:(NSURL *)url { - [self.delegate videoPlayerContainerView:self - didClickIndustryIconView:iconView - overridingClickThroughURL:url]; -} - -@end - -#pragma mark - MPVASTCompanionAdViewDelegate - -@implementation MPVideoPlayerContainerView (MPVASTCompanionAdViewDelegate) - -- (UIViewController *)viewControllerForPresentingModalMRAIDExpandedView { - return self.delegate.viewControllerForPresentingModalMRAIDExpandedView; -} - -- (void)companionAdView:(MPVASTCompanionAdView *)companionAdView - didTriggerEvent:(MPVASTResourceViewEvent)event { - switch (event) { - case MPVASTResourceViewEvent_ClickThrough: { - [self.delegate videoPlayerContainerView:self - didClickCompanionAdView:companionAdView - overridingClickThroughURL:nil]; - break; - } - case MPVASTResourceViewEvent_DidLoadView: { - if (self.isVideoFinished) { - [self showCompanionAd]; - } - break; - } - case MPVASTResourceViewEvent_FailedToLoadView: { - MPLogError(@"Failed to load companion ad view: %@", companionAdView.ad); - [self.companionAdView removeFromSuperview]; - self.companionAdView = nil; - [self.delegate videoPlayerContainerView:self didFailToLoadCompanionAdView:companionAdView]; - break; - } - } -} - -- (void)companionAdView:(MPVASTCompanionAdView *)companionAdView -didTriggerOverridingClickThrough:(NSURL *)url { - [self.delegate videoPlayerContainerView:self - didClickCompanionAdView:companionAdView - overridingClickThroughURL:url]; -} - -- (void)companionAdViewRequestDismiss:(MPVASTCompanionAdView *)companionAdView { - [self.delegate videoPlayerContainerView:self - companionAdViewRequestDismiss:companionAdView]; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VideoPlayer/MPVideoPlayerFullScreenVASTAdOverlay.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VideoPlayer/MPVideoPlayerFullScreenVASTAdOverlay.h deleted file mode 100644 index 7f7dc70ae0..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VideoPlayer/MPVideoPlayerFullScreenVASTAdOverlay.h +++ /dev/null @@ -1,43 +0,0 @@ -// -// MPVideoPlayerFullScreenVASTAdOverlay.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPVASTIndustryIconView.h" -#import "MPVideoPlayerViewOverlay.h" - -NS_ASSUME_NONNULL_BEGIN - -@protocol MPVideoPlayerFullScreenVASTAdOverlayDelegate -< -MPVideoPlayerViewOverlayDelegate, -MPVASTIndustryIconViewDelegate -> -@end - -/** - This is an overlay of @c MPVideoPlayerView for full screen VAST ad, which should be added as the - top-most subview that covers the whole area of the @c MPVideoPlayerView. Timer related activities - are affected by app life cycle events. - - See documentation at https://developers.mopub.com/dsps/ad-formats/video/ - - Note: Industry icon placing logic is different from the VAST spec per MoPub video format - documentation: "We will ignore x/y coordinates for the icon and will always place it in the top - left corner to ensure a consistent user experience." - */ -@interface MPVideoPlayerFullScreenVASTAdOverlay : UIView - -@property (nonatomic, weak) id delegate; - -- (void)pauseTimer; - -- (void)resumeTimer; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VideoPlayer/MPVideoPlayerFullScreenVASTAdOverlay.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VideoPlayer/MPVideoPlayerFullScreenVASTAdOverlay.m deleted file mode 100644 index db3bc07a16..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VideoPlayer/MPVideoPlayerFullScreenVASTAdOverlay.m +++ /dev/null @@ -1,351 +0,0 @@ -// -// MPVideoPlayerFullScreenVASTAdOverlay.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPCountdownTimerView.h" -#import "MPGlobal.h" -#import "MPLogging.h" -#import "MPTimer.h" -#import "MPVASTConstant.h" -#import "MPVideoPlayer.h" -#import "MPVideoPlayerFullScreenVASTAdOverlay.h" -#import "UIButton+MPAdditions.h" -#import "UIView+MPAdditions.h" - -static CGFloat const kRectangleButtonPadding = 16; -static CGFloat const kRoundButtonPadding = 8; - -@interface MPVideoPlayerFullScreenVASTAdOverlay () - -@property (nonatomic, strong) MPVideoPlayerViewOverlayConfig *config; -@property (nonatomic, assign) BOOL allowPassthroughForTouches; // default to NO until video is finished with companion shown -@property (nonatomic, strong) MPTimer *clickThroughEnablingTimer; -@property (nonatomic, strong) NSNotificationCenter *notificationCenter; - -@property (nonatomic, strong) UIButton *callToActionButton; // located at the bottom-right corner -@property (nonatomic, strong) UIButton *closeButton; // located at the top-right corner -@property (nonatomic, strong) UIButton *skipButton; // located at the top-right corner -@property (nonatomic, strong) MPVASTIndustryIconView *iconView; // located at the top-left corner -@property (nonatomic, strong) NSLayoutConstraint *iconViewWidthConstraint; -@property (nonatomic, strong) NSLayoutConstraint *iconViewHeightConstraint; -@property (nonatomic, strong) MPCountdownTimerView *timerView; // located at the top-right corner - -@end - -@interface MPVideoPlayerFullScreenVASTAdOverlay (MPVASTIndustryIconViewDelegate) -@end - -@implementation MPVideoPlayerFullScreenVASTAdOverlay - -- (instancetype)initWithConfig:(MPVideoPlayerViewOverlayConfig *)config { - self = [super initWithFrame:CGRectZero]; - if (self) { - _config = config; - _allowPassthroughForTouches = NO; - _notificationCenter = [NSNotificationCenter defaultCenter]; - } - return self; -} - -- (void)dealloc { - [self.notificationCenter removeObserver:self]; - [self.timerView stopAndSignalCompletion:NO]; - [self.clickThroughEnablingTimer invalidate]; -} - -- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event { - /* - When the video is playing, this overlay intercepts all touch events. After the video is - finished, we might need to pass through the touch events to the companion ad underneath, - unless the touch events happen upon the overlay subviews, such as the Close button. - */ - if (self.allowPassthroughForTouches) { - for (UIView *subview in self.subviews) { - if (subview.isHidden == NO - && subview.alpha > 0 - && subview.userInteractionEnabled - && [subview pointInside:[self convertPoint:point toView:subview] withEvent:event]) { - return YES; // let the subview handle the event - } - } - return NO; // no subview can handle it, pass through - } else { - return YES; // let this overlay handle the event (with a tap gesture recognizer) - } -} - -- (void)handleVideoStartForSkipOffset:(MPVASTDurationOffset *)skipOffset - videoDuration:(NSTimeInterval)videoDuration { - if (videoDuration <= 0) { - MPLogError(@"Video duration [%.2f] is not positive" ,videoDuration); - return; - } - - // See the definition of "skippable" at https://developers.mopub.com/dsps/ad-formats/video/ - NSTimeInterval requestedSkipOffset = [skipOffset timeIntervalForVideoWithDuration:videoDuration]; - NSTimeInterval actualSkipOffset; - if (videoDuration <= kVASTMinimumDurationOfSkippableVideo) { // non-skippable video: honor valid `requestedSkipOffset` override - if (0 <= requestedSkipOffset && requestedSkipOffset < videoDuration) { - actualSkipOffset = requestedSkipOffset; - } else { // don't show Skip button - actualSkipOffset = videoDuration; - } - } else { // skippable video `(kVASTMinimumDurationOfSkippableVideo < videoDuration)` - if (0 <= requestedSkipOffset) { - actualSkipOffset = MIN(requestedSkipOffset, kVASTMinimumDurationOfSkippableVideo); - } else { // use default time offset if requested skip offset is not valid - actualSkipOffset = kVASTVideoOffsetToShowSkipButtonForSkippableVideo; - } - } - - [self showTimerViewForSkipOffset:(skipOffset == nil ? videoDuration : actualSkipOffset) - videoDuration:videoDuration]; - - if (self.config.isRewarded) { - [self setUpClickthroughForOffset:actualSkipOffset videoDuration:videoDuration]; - } else { // non-rewarded video - if (self.config.enableEarlyClickthroughForNonRewardedVideo) { - [self enableClickthrough]; - } else { - [self setUpClickthroughForOffset:actualSkipOffset videoDuration:videoDuration]; - } - } - - [self.notificationCenter addObserver:self - selector:@selector(pauseTimer) - name:UIApplicationDidEnterBackgroundNotification - object:nil]; - [self.notificationCenter addObserver:self - selector:@selector(resumeTimer) - name:UIApplicationWillEnterForegroundNotification - object:nil]; -} - -- (void)handleVideoComplete { - [self showCloseButton]; - - if (self.config.hasCompanionAd) { - self.allowPassthroughForTouches = YES; - - // companion ad and CTA button are mutually exclusive - [self.callToActionButton removeFromSuperview]; - self.callToActionButton = nil; - - // companion ad and industry icon are mutually exclusive - [self.iconView removeFromSuperview]; - self.iconView = nil; - } -} - -#pragma mark - App Life Cycle And Timer - -- (void)pauseTimer { - [self.clickThroughEnablingTimer pause]; - [self.timerView pause]; -} - -- (void)resumeTimer { - [self.clickThroughEnablingTimer resume]; - [self.timerView resume]; -} - -#pragma mark - Timer View - -/** - Show the timer view for a given skip offset. If the skip offset is less the video duration, the - Skip button is shown after the timer reaches 0. If the skip offset is no less than the video duration, - the Close button is shown after the timer reaches 0. - */ -- (void)showTimerViewForSkipOffset:(NSTimeInterval)skipOffset videoDuration:(NSTimeInterval)videoDuration { - if (self.timerView) { - return; - } - - __weak __typeof__(self) weakSelf = self; - MPCountdownTimerView *timerView = [[MPCountdownTimerView alloc] initWithDuration:skipOffset timerCompletion:^(BOOL hasElapsed) { - if (skipOffset < videoDuration) { - [weakSelf showSkipButton]; - } else { - [weakSelf showCloseButton]; - } - [weakSelf.timerView removeFromSuperview]; - }]; - - self.timerView = timerView; - - [self addSubview:timerView]; - timerView.translatesAutoresizingMaskIntoConstraints = NO; - [[timerView.topAnchor constraintEqualToAnchor:self.mp_safeTopAnchor constant:kRoundButtonPadding] setActive:YES]; - [[timerView.trailingAnchor constraintEqualToAnchor:self.mp_safeTrailingAnchor constant:-kRoundButtonPadding] setActive:YES]; - - [timerView start]; -} - -#pragma mark - Click-through (Call To Action / Learn More button) - -- (void)setUpClickthroughForOffset:(NSTimeInterval)skipOffset videoDuration:(NSTimeInterval)videoDuration { - if (self.config.isClickthroughAllowed == NO) { - return; - } - - // See click-through timing definition at https://developers.mopub.com/dsps/ad-formats/video/ - self.clickThroughEnablingTimer = [MPTimer timerWithTimeInterval:MIN(skipOffset, videoDuration) - target:self - selector:@selector(enableClickthrough) - repeats:NO]; - [self.clickThroughEnablingTimer scheduleNow]; -} - -- (void)enableClickthrough { - if (self.config.isClickthroughAllowed == NO) { - return; - } - - [self addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleClickThrough)]]; - [self showCallToActionButton]; -} - -- (void)showCallToActionButton { - // Per Format Unification Phase 2 item 1.2.1, for rewarded video, do not consider companion - // ad for showing the CTA button - just show it after the skip threshold } - - if (self.config.isClickthroughAllowed == NO || self.config.callToActionButtonTitle.length == 0) { - return; - } - - if (self.callToActionButton) { - [self.callToActionButton setHidden:NO]; - return; - } - - UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; - self.callToActionButton = button; - button.accessibilityLabel = @"Call To Action Button"; - [button addTarget:self action:@selector(handleClickThrough) forControlEvents:UIControlEventTouchUpInside]; - [button applyMPVideoPlayerBorderedStyleWithTitle:self.config.callToActionButtonTitle]; - - [self addSubview:button]; - button.translatesAutoresizingMaskIntoConstraints = NO; - [[button.bottomAnchor constraintEqualToAnchor:self.mp_safeBottomAnchor constant:-kRectangleButtonPadding] setActive:YES]; - [[button.trailingAnchor constraintEqualToAnchor:self.mp_safeTrailingAnchor constant:-kRectangleButtonPadding] setActive:YES]; -} - -- (void)handleClickThrough { - [self.delegate videoPlayerViewOverlay:self didTriggerEvent:MPVideoPlayerEvent_ClickThrough]; -} - -#pragma mark - Skip Button - -- (void)showSkipButton { - if (self.skipButton) { - return; - } - - UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; - self.skipButton = button; - button.accessibilityLabel = @"Skip Button"; - [button addTarget:self action:@selector(didHitSkipButton) forControlEvents:UIControlEventTouchUpInside]; - [button applyMPVideoPlayerBorderedStyleWithTitle:kVASTDefaultSkipButtonTitle]; - - [self addSubview:button]; - button.translatesAutoresizingMaskIntoConstraints = NO; - [[button.topAnchor constraintEqualToAnchor:self.mp_safeTopAnchor constant:kRectangleButtonPadding] setActive:YES]; - [[button.trailingAnchor constraintEqualToAnchor:self.mp_safeTrailingAnchor constant:-kRectangleButtonPadding] setActive:YES]; -} - -- (void)didHitSkipButton { - [self.delegate videoPlayerViewOverlay:self didTriggerEvent:MPVideoPlayerEvent_Skip]; -} - -#pragma mark - Close Button - -- (void)showCloseButton { - if (self.closeButton) { - return; - } - - // timer view and Skip button should disappear when Close button is shown - [self.timerView removeFromSuperview]; - [self.skipButton removeFromSuperview]; - - UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; - self.closeButton = button; - button.accessibilityLabel = @"Close Button"; - [button addTarget:self action:@selector(didHitCloseButton) forControlEvents:UIControlEventTouchUpInside]; - [button setImage:[UIImage imageNamed:MPResourcePathForResource(@"MPCloseButtonX.png")] forState:UIControlStateNormal]; - - [self addSubview:button]; - button.translatesAutoresizingMaskIntoConstraints = NO; - [[button.topAnchor constraintEqualToAnchor:self.mp_safeTopAnchor constant:kRoundButtonPadding] setActive:YES]; - [[button.trailingAnchor constraintEqualToAnchor:self.mp_safeTrailingAnchor constant:-kRoundButtonPadding] setActive:YES]; -} - -- (void)didHitCloseButton { - [self.delegate videoPlayerViewOverlay:self didTriggerEvent:MPVideoPlayerEvent_Close]; -} - -#pragma mark - Industry Icon - -- (void)showIndustryIcon:(MPVASTIndustryIcon *)icon { - if (self.iconView == nil) { - self.iconView = [MPVASTIndustryIconView new]; - self.iconView.iconViewDelegate = self; - self.iconViewWidthConstraint = [self.iconView.mp_safeWidthAnchor constraintEqualToConstant:icon.width]; - self.iconViewHeightConstraint = [self.iconView.mp_safeHeightAnchor constraintEqualToConstant:icon.height]; - - [self addSubview:self.iconView]; - self.iconView.translatesAutoresizingMaskIntoConstraints = NO; - [[self.iconView.mp_safeTopAnchor constraintEqualToAnchor:self.mp_safeTopAnchor] setActive:YES]; - [[self.iconView.mp_safeLeadingAnchor constraintEqualToAnchor:self.mp_safeLeadingAnchor] setActive:YES]; - [self.iconViewWidthConstraint setActive:YES]; - [self.iconViewHeightConstraint setActive:YES]; - } else { - // if the icon view already exists, update the width and height - self.iconViewWidthConstraint.constant = icon.width; - self.iconViewHeightConstraint.constant = icon.height; - } - - [self.iconView setHidden:YES]; // hidden by default, only show after loaded - [self.iconView loadIcon:icon]; // delegate will handle load status updates -} - -- (void)hideIndustryIcon { - [self.iconView setHidden:YES]; -} - -@end - -#pragma mark - MPVASTIndustryIconViewDelegate - -@implementation MPVideoPlayerFullScreenVASTAdOverlay (MPVASTIndustryIconViewDelegate) - -- (void)industryIconView:(MPVASTIndustryIconView *)iconView - didTriggerEvent:(MPVASTResourceViewEvent)event { - switch (event) { - case MPVASTResourceViewEvent_ClickThrough: { - break; // no op - } - case MPVASTResourceViewEvent_DidLoadView: { - [self.iconView setHidden:NO]; - break; - } - case MPVASTResourceViewEvent_FailedToLoadView: { - [self.iconView removeFromSuperview]; - self.iconView = nil; - break; - } - } - - [self.delegate industryIconView:iconView didTriggerEvent:event]; -} - -- (void)industryIconView:(MPVASTIndustryIconView *)iconView -didTriggerOverridingClickThrough:(NSURL *)url { - [self.delegate industryIconView:iconView didTriggerOverridingClickThrough:url]; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VideoPlayer/MPVideoPlayerView.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VideoPlayer/MPVideoPlayerView.h deleted file mode 100644 index 29031e9024..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VideoPlayer/MPVideoPlayerView.h +++ /dev/null @@ -1,60 +0,0 @@ -// -// MPVideoPlayerView.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPVideoPlayer.h" - -NS_ASSUME_NONNULL_BEGIN - -@protocol MPVideoPlayerViewDelegate; - -/** - @c MPVideoPlayerView only allows start playing without pause, reset, nor fast forwarding. Video is - only paused automatically due to app life cycle events or user interactions such as click-throughs. - - Note: The actually video duration is honored as the source of truth, while the video duration - provided by the @c MPVideoConfig is ignored. - */ -@interface MPVideoPlayerView : UIView - -@property (nonatomic, weak) id delegate; -@property (nonatomic, readonly) BOOL didLoadVideo; // set to YES after `loadVideo` is called for the first time; never set back to NO again -@property (nonatomic, readonly) BOOL hasStartedPlaying; // set to YES after `play` is called for the first time; never set back to NO again -@property (nonatomic, readonly) NSTimeInterval videoDuration; -@property (nonatomic, readonly) NSTimeInterval videoProgress; - -@end - -#pragma mark - - -@protocol MPVideoPlayerViewDelegate - -- (void)videoPlayerViewDidLoadVideo:(MPVideoPlayerView *)videoPlayerView; - -- (void)videoPlayerViewDidFailToLoadVideo:(MPVideoPlayerView *)videoPlayerView error:(NSError *)error; - -- (void)videoPlayerViewDidStartVideo:(MPVideoPlayerView *)videoPlayerView duration:(NSTimeInterval)duration; - -- (void)videoPlayerViewDidCompleteVideo:(MPVideoPlayerView *)videoPlayerView duration:(NSTimeInterval)duration; - -- (void)videoPlayerView:(MPVideoPlayerView *)videoPlayerView -videoDidReachProgressTime:(NSTimeInterval)videoProgress - duration:(NSTimeInterval)duration; - -- (void)videoPlayerView:(MPVideoPlayerView *)videoPlayerView - didTriggerEvent:(MPVideoPlayerEvent)event - videoProgress:(NSTimeInterval)videoProgress; - -- (void)videoPlayerView:(MPVideoPlayerView *)videoPlayerView - showIndustryIcon:(MPVASTIndustryIcon *)icon; - -- (void)videoPlayerViewHideIndustryIcon:(MPVideoPlayerView *)videoPlayerView; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VideoPlayer/MPVideoPlayerView.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VideoPlayer/MPVideoPlayerView.m deleted file mode 100644 index 1f99e33aa0..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VideoPlayer/MPVideoPlayerView.m +++ /dev/null @@ -1,475 +0,0 @@ -// -// MPVideoPlayerView.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPError.h" -#import "MPLogging.h" -#import "MPVASTTracking.h" -#import "MPVideoPlayerView.h" -#import "UIColor+MPAdditions.h" -#import "UIView+MPAdditions.h" - -static void * KVOContext = &KVOContext; - -static NSString * const kProgressBarFillColor = @"#FFCC4D"; - -// 600 is recommended by Apple since it is a multiple of common frame rates such as 24 FPS, 25 FPS, -// and 60 FPS. See "AVFoundation Programming Guide" -> "Time and Media Representations". -int32_t const kPreferredTimescale = 600; - -// play time is approximate thus we need to consider tolerance -NSTimeInterval const kPlayTimeTolerance = 0.1; - -@interface MPVideoPlayerView () - -@property (nonatomic, strong) NSURL *videoURL; -@property (nonatomic, strong) MPVideoConfig *videoConfig; -@property (nonatomic, strong) NSNotificationCenter *notificationCenter; - -@property (nonatomic, assign) BOOL didLoadVideo; // set to YES after `loadVideo` is called for the first time; never set back to NO again -@property (nonatomic, assign) BOOL hasStartedPlaying; // set to YES after `play` is called for the first time; never set back to NO again -@property (nonatomic, assign) BOOL didPlayToEndTime; // set to YES after the video ended -@property (nonatomic, assign) BOOL isAutoPlayPauseEnabled; -@property (nonatomic, assign) BOOL didFireStartEvent; -@property (nonatomic, strong) UIProgressView *progressBar; -@property (nonatomic, strong) NSLayoutConstraint *progressBarTopConstraint; - -@property (nonatomic, strong) id progressBarTimeObserver; -@property (nonatomic, strong) id progressTrackingTimeObserver; -@property (nonatomic, strong) id boundaryTrackingTimeObserver; -@property (nonatomic, strong) id industryIconShowTimeObserver; -@property (nonatomic, strong) id industryIconHideTimeObserver; -@property (nonatomic, strong) id endTimeObserverToken; -@property (nonatomic, strong) id audioSessionInterruptionObserverToken; - -@end - -@implementation MPVideoPlayerView - -- (void)dealloc { - [self.player pause]; // just in case the player session does not stop in time - [self.player removeTimeObserver: self.progressBarTimeObserver]; - [self.player removeTimeObserver: self.progressTrackingTimeObserver]; - [self.player removeTimeObserver: self.boundaryTrackingTimeObserver]; - [self.player removeTimeObserver: self.industryIconShowTimeObserver]; - [self.player removeTimeObserver: self.industryIconHideTimeObserver]; - [self.notificationCenter removeObserver:self]; - [self.notificationCenter removeObserver:self.endTimeObserverToken]; - [self.notificationCenter removeObserver:self.audioSessionInterruptionObserverToken]; - - // Note: disable KVO for the layer before `[self.player replaceCurrentItemWithPlayerItem:nil];` - // otherwise app will crash because the progress bar would have been deallocated. - [self.playerLayer removeObserver:self forKeyPath:NSStringFromSelector(@selector(videoRect))]; - - // Audio session might be messed up without setting current item to nil. - // Note: remove current item from KVO first to avoid crash! - [self.player.currentItem removeObserver:self forKeyPath:NSStringFromSelector(@selector(duration))]; - [self.player replaceCurrentItemWithPlayerItem:nil]; -} - -- (NSTimeInterval)videoDuration { - return CMTimeGetSeconds(self.player.currentItem.duration); -} - -- (NSTimeInterval)videoProgress { - return CMTimeGetSeconds(self.player.currentTime); -} - -#pragma mark - MPVideoPlayer - -- (instancetype)initWithVideoURL:(NSURL *)videoURL videoConfig:(MPVideoConfig *)videoConfig { - if (self = [super init]) { - _videoURL = videoURL; - _videoConfig = videoConfig; - _notificationCenter = [NSNotificationCenter defaultCenter]; - self.backgroundColor = UIColor.blackColor; - } - return self; -} - -- (void)loadVideo { - if (self.didLoadVideo) { - return; - } - self.didLoadVideo = YES; - - [self setUpVideoPlayer]; - [self setUpProgressBar]; -} - -- (void)play { - if (self.hasStartedPlaying == NO) { - self.hasStartedPlaying = YES; - - [self observeProgressTimeForTracking]; - [self observeBoundaryTimeForTracking]; - [self observeBoundaryTimeForIndustryIcons:self.videoConfig.industryIcons - videoDuration:self.videoDuration]; - [self enableAppLifeCycleEventObservationForAutoPlayPause]; - } - - [self.player play]; -} - -- (void)pause { - [self.player pause]; -} - -- (void)enableAppLifeCycleEventObservationForAutoPlayPause { - [self.notificationCenter addObserver:self - selector:@selector(pause) - name:UIApplicationDidEnterBackgroundNotification - object:nil]; - [self.notificationCenter addObserver:self - selector:@selector(play) - name:UIApplicationWillEnterForegroundNotification - object:nil]; - self.isAutoPlayPauseEnabled = YES; -} - -- (void)disableAppLifeCycleEventObservationForAutoPlayPause { - [self.notificationCenter removeObserver:self - name:UIApplicationDidEnterBackgroundNotification - object:nil]; - [self.notificationCenter removeObserver:self - name:UIApplicationWillEnterForegroundNotification - object:nil]; - self.isAutoPlayPauseEnabled = NO; -} - -#pragma mark - Private Methods - -/** - Use `AVPlayerLayer` instead of `CALayer` for the backing layer. - */ -+ (Class)layerClass { - return [AVPlayerLayer class]; -} - -/** - A helper for saving type casting effort. - */ -- (AVPlayerLayer *)playerLayer { - return (AVPlayerLayer *)self.layer; -} - -/** - A helper for easier player access. - */ -- (AVPlayer *)player { - return self.playerLayer.player; -} - -/** - A helper for setting up the @c player of @c playerLayer. Call this during init only. - */ -- (void)setUpVideoPlayer { - if (self.playerLayer.player != nil) { - MPLogDebug(@"video player has been set up"); - return; - } - - AVPlayer *player = [AVPlayer playerWithURL:self.videoURL]; - // `AVPlayerStatusReadyToPlay` alone is not reliable for observing video duration (could - // still be NaN when ready to play). Observe the duration of the player item instead. - [player.currentItem addObserver:self - forKeyPath:NSStringFromSelector(@selector(duration)) - options:0 - context:KVOContext]; - self.playerLayer.player = player; - self.playerLayer.videoGravity = AVLayerVideoGravityResizeAspect; - - [self observeProgressTimeForProgressBar]; -} - -- (void)setUpProgressBar { - if (self.progressBar != nil) { - MPLogDebug(@"video player progress bar has been set up"); - return; - } - - // KVO for porgress bar layout - [self.playerLayer addObserver:self - forKeyPath:NSStringFromSelector(@selector(videoRect)) - options:0 - context:KVOContext]; - - UIProgressView *progressBar = [[UIProgressView alloc] initWithProgressViewStyle:UIProgressViewStyleDefault]; - self.progressBar = progressBar; - self.progressBar.progressTintColor = [UIColor mp_colorFromHexString:kProgressBarFillColor alpha:1]; - - // Progress bar ignores the safe area of the player view because the video player uses the whole - // area that could be more than the safe area (very likely in landscape mode), and we don't want - // the progress bar being somewhere in the middle of the video. - [self addSubview:progressBar]; - progressBar.translatesAutoresizingMaskIntoConstraints = NO; - self.progressBarTopConstraint = [progressBar.topAnchor constraintEqualToAnchor:self.topAnchor]; - [self.progressBarTopConstraint setActive:YES]; - [[progressBar.leadingAnchor constraintEqualToAnchor:self.leadingAnchor] setActive:YES]; - [[progressBar.trailingAnchor constraintEqualToAnchor:self.trailingAnchor] setActive:YES]; - progressBar.hidden = YES; // hide it before we know how to position it (by obtaining valid video rect) -} - -- (void)updateProgressBarProgress { - NSTimeInterval progress = CMTimeGetSeconds(self.player.currentItem.currentTime); - NSTimeInterval duration = CMTimeGetSeconds(self.player.currentItem.duration); - - if (duration <= 0) { - return; - } - - [self.progressBar setProgress:(progress / duration) animated:YES]; -} - -#pragma mark - Observation - -- (void)observeValueForKeyPath:(NSString *)keyPath - ofObject:(id)object - change:(NSDictionary *)change - context:(void *)context { - if (context != KVOContext) { - MPLogError(@"KVO context not expected"); - return; - } - - if (object == self.player.currentItem - && [keyPath isEqualToString:NSStringFromSelector(@selector(duration))]) { - // `AVPlayerStatusReadyToPlay` alone is not reliable for observing video duration (could - // still be NaN when ready to play). Observe the duration of the player item instead. - switch (self.player.status) { - case AVPlayerStatusUnknown: { - break; // no op - } - case AVPlayerStatusReadyToPlay: { - if (!CMTIME_IS_INDEFINITE(self.player.currentItem.duration)) { - MPLogInfo(@"Ready to play video [%.3fs]", CMTimeGetSeconds(self.player.currentItem.duration)); - [self.delegate videoPlayerViewDidLoadVideo:self]; - } - break; - } - case AVPlayerStatusFailed: { - NSError *error = [NSError errorWithCode:MOPUBErrorVideoPlayerFailedToPlay - localizedDescription:@"Error: AVPlayerStatusFailed"]; - [self.delegate videoPlayerViewDidFailToLoadVideo:self error:error]; - break; - } - } - } else if (object == self.playerLayer - && [keyPath isEqualToString:NSStringFromSelector(@selector(videoRect))]) { - dispatch_async(dispatch_get_main_queue(), ^{ - self.progressBar.hidden = NO; - - // put progress to the bottom of the video - CGFloat y = CGRectGetMaxY(self.playerLayer.videoRect) - self.progressBar.frame.size.height; - self.progressBarTopConstraint.constant = y; - [self.progressBar setNeedsUpdateConstraints]; - }); - } else { - MPLogError(@"Key path [%@] is observed but not handled", keyPath); - } -} - -- (void)observeProgressTimeForProgressBar { - if (self.progressBarTimeObserver) { - MPLogDebug(@"Player progress time has been observed for progress bar"); - return; - } - - __weak __typeof__(self) weakSelf = self; - [self.player addPeriodicTimeObserverForInterval:CMTimeMakeWithSeconds(0.1, kPreferredTimescale) - queue:dispatch_get_main_queue() - usingBlock:^(CMTime time) { - [weakSelf updateProgressBarProgress]; - }]; -} - -/** - Observe progress time defined in the progress trackers. - */ -- (void)observeProgressTimeForTracking { - if (self.progressTrackingTimeObserver) { - MPLogDebug(@"Player progress time has been observed for tracking"); - return; - } - - NSTimeInterval duration = CMTimeGetSeconds(self.player.currentItem.duration); - NSMutableArray *checkpoints = [NSMutableArray new]; - - for (MPVASTTrackingEvent *event in [self.videoConfig trackingEventsForKey:MPVideoEventProgress]) { - NSTimeInterval time = [event.progressOffset timeIntervalForVideoWithDuration:duration]; - [checkpoints addObject:[NSValue valueWithCMTime:CMTimeMakeWithSeconds(time, kPreferredTimescale)]]; - } - - // if `checkpoints` is empty, `addBoundaryTimeObserverForTimes:queue:usingBlock:` will crash - if (checkpoints.count == 0) { - return; - } - - __weak __typeof__(self) weakSelf = self; - void (^observationHandler)(void) = ^void() { - __typeof__(self) strongSelf = weakSelf; - if (strongSelf == nil) { - return; - } - - [strongSelf.delegate videoPlayerView:strongSelf - videoDidReachProgressTime:CMTimeGetSeconds(strongSelf.player.currentTime) - duration:CMTimeGetSeconds(strongSelf.player.currentItem.duration)]; - }; - - // `addBoundaryTimeObserverForTimes` has undefined behavior with concurrent queue obtained - // from `dispatch_get_global_queue`, thus use the main queue here since it's serial. - self.progressTrackingTimeObserver = [self.player addBoundaryTimeObserverForTimes:checkpoints - queue:dispatch_get_main_queue() - usingBlock:observationHandler]; -} - -/** - Observe 0/4, 1/4, 2/4. 3/4, and 4/4 boundary time of the video playing progress. - */ -- (void)observeBoundaryTimeForTracking { - if (self.boundaryTrackingTimeObserver) { - MPLogDebug(@"Player boundary time has been observed"); - return; - } - - // `addBoundaryTimeObserverForTimes` might skip event when observing the ending moment (playing - // the last frame). This is probably similar to how `NSTimer` works with run loop. As a result, - // `AVPlayerItemDidPlayToEndTimeNotification` is observed instead, and `duration` is not added - // to the `checkpoint` array for the END event. - CMTime duration = self.player.currentItem.duration; // do not use this as a checkpoint - NSTimeInterval durationInSeconds = CMTimeGetSeconds(duration); - CMTime startTime = CMTimeMakeWithSeconds(0.01, kPreferredTimescale); // setting to 0 second won't work - CMTime firstQuarterTime = CMTimeMultiplyByFloat64(duration, 0.25); - CMTime halfTime = CMTimeMultiplyByFloat64(duration, 0.5); - CMTime thirdQuarterTime = CMTimeMultiplyByFloat64(duration, 0.75); - NSArray *checkpoints = @[[NSValue valueWithCMTime:startTime], - [NSValue valueWithCMTime:firstQuarterTime], - [NSValue valueWithCMTime:halfTime], - [NSValue valueWithCMTime:thirdQuarterTime]]; - - __weak __typeof__(self) weakSelf = self; - void (^observationHandler)(void) = ^void() { - __typeof__(self) strongSelf = weakSelf; - if (strongSelf == nil) { - return; - } - - if (strongSelf.didFireStartEvent == NO) { // fire Start at first and once only - strongSelf.didFireStartEvent = YES; - [strongSelf.delegate videoPlayerViewDidStartVideo:strongSelf duration:durationInSeconds]; - } - - [strongSelf.delegate videoPlayerView:strongSelf - videoDidReachProgressTime:CMTimeGetSeconds(strongSelf.player.currentTime) - duration:durationInSeconds]; - }; - - // `addBoundaryTimeObserverForTimes` has undefined behavior with concurrent queue obtained - // from `dispatch_get_global_queue`, thus use the main queue here since it's serial. - self.boundaryTrackingTimeObserver = [self.player addBoundaryTimeObserverForTimes:checkpoints - queue:dispatch_get_main_queue() - usingBlock:observationHandler]; - self.endTimeObserverToken - = [self.notificationCenter - addObserverForName:AVPlayerItemDidPlayToEndTimeNotification - object:self.player.currentItem - queue:NSOperationQueue.mainQueue - usingBlock:^(NSNotification *notification) { - weakSelf.didPlayToEndTime = YES; - [weakSelf.delegate videoPlayerViewDidCompleteVideo:weakSelf duration:durationInSeconds]; - }]; - - self.audioSessionInterruptionObserverToken - = [self.notificationCenter - addObserverForName:AVAudioSessionInterruptionNotification - object:nil - queue:NSOperationQueue.mainQueue - usingBlock:^(NSNotification *notification) { - NSNumber *interruptionType = [notification.userInfo valueForKey:AVAudioSessionInterruptionTypeKey]; - if (weakSelf.isAutoPlayPauseEnabled - && weakSelf.didPlayToEndTime == NO - && interruptionType.unsignedIntegerValue == AVAudioSessionInterruptionTypeEnded) { - // After an interruption (such as a phone call), we don't want the player to remain paused - // because we don't offer a Play button, and potentially no Skip nor Close in some cases. - [weakSelf play]; - } - }]; -} - -/** - Observe the times that the industry icon should show or hide. - */ -- (void)observeBoundaryTimeForIndustryIcons:(NSArray *)industryIcons - videoDuration:(NSTimeInterval)videoDuration { - if (industryIcons.count == 0) { - return; - } - - // guarantee the icons are shown in chronological order - NSMutableArray *sortedIndustryIcons = [[NSMutableArray alloc] initWithArray:industryIcons]; - [sortedIndustryIcons sortUsingComparator:^NSComparisonResult(MPVASTIndustryIcon *a, MPVASTIndustryIcon *b) { - NSTimeInterval showTimeA = [a.offset timeIntervalForVideoWithDuration:videoDuration]; - NSTimeInterval showTimeB = [b.offset timeIntervalForVideoWithDuration:videoDuration]; - if (showTimeA < showTimeB) { - return NSOrderedAscending; - } else if (showTimeA > showTimeB) { - return NSOrderedDescending; - } else { - return NSOrderedSame; - } - }]; - - NSMutableArray *showIconCheckpoints = [NSMutableArray new]; - NSMutableArray *hideIconCheckpoints = [NSMutableArray new]; - - for (MPVASTIndustryIcon *icon in sortedIndustryIcons) { - NSTimeInterval timeToShowIcon = [icon.offset timeIntervalForVideoWithDuration:videoDuration]; - if (timeToShowIcon == 0) { - timeToShowIcon = 0.01; // setting to 0 second won't work - } - CMTime showIconTime = CMTimeMakeWithSeconds(timeToShowIcon, kPreferredTimescale); - [showIconCheckpoints addObject:[NSValue valueWithCMTime:showIconTime]]; - - if (icon.duration > 0) { // duration is optional and can be 0 - CMTime hideIconTime = CMTimeMakeWithSeconds(timeToShowIcon + icon.duration, kPreferredTimescale); - [hideIconCheckpoints addObject:[NSValue valueWithCMTime:hideIconTime]]; - } - } - - __weak __typeof__(self) weakSelf = self; - __block NSUInteger iconIndex = 0; - void (^showIconHandler)(void) = ^void() { - __typeof__(self) strongSelf = weakSelf; - if (strongSelf == nil || iconIndex >= sortedIndustryIcons.count) { - return; - } - - [strongSelf.delegate videoPlayerView:strongSelf showIndustryIcon:sortedIndustryIcons[iconIndex]]; - iconIndex++; - }; - - void (^hideIconHandler)(void) = ^void() { - __typeof__(self) strongSelf = weakSelf; - if (strongSelf == nil) { - return; - } - [strongSelf.delegate videoPlayerViewHideIndustryIcon:strongSelf]; - }; - - // `addBoundaryTimeObserverForTimes` has undefined behavior with concurrent queue obtained - // from `dispatch_get_global_queue`, thus use the main queue here since it's serial. - self.industryIconShowTimeObserver = [self.player addBoundaryTimeObserverForTimes:showIconCheckpoints - queue:dispatch_get_main_queue() - usingBlock:showIconHandler]; - self.industryIconHideTimeObserver = [self.player addBoundaryTimeObserverForTimes:hideIconCheckpoints - queue:dispatch_get_main_queue() - usingBlock:hideIconHandler]; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VideoPlayer/MPVideoPlayerViewController.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VideoPlayer/MPVideoPlayerViewController.h deleted file mode 100644 index 5669abeeb5..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VideoPlayer/MPVideoPlayerViewController.h +++ /dev/null @@ -1,44 +0,0 @@ -// -// MPVideoPlayerViewController.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPInterstitialViewController.h" -#import "MPVideoPlayer.h" -#import "MPVideoPlayerContainerView.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - A compositional delegate for @c MPVideoPlayerViewController. - */ -@protocol MPVideoPlayerViewControllerDelegate -< -MPInterstitialViewControllerAppearanceDelegate, -MPVideoPlayerContainerViewDelegate -> -@end - -/** - @c MPVideoPlayerViewController uses @c MPVideoPlayerContainerView for @c self.view instead of the - plain @c UIView. All the video playing logics are contained in @c MPVideoPlayerView, and this view - controller is designed to be a thin container of the video player view. If this view controller - should have extra functionalities, consider do it in @c MPVideoPlayerView first since the video - player view is reused as the subview of some other view controller; alternatively, consider to - expand the compositional @c MPVideoPlayerViewControllerDelegate to keep this view controller thin. - */ -@interface MPVideoPlayerViewController : UIViewController -< -MPInterstitialViewController, -MPVideoPlayer -> - -@property (nonatomic, weak) id delegate; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VideoPlayer/MPVideoPlayerViewController.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VideoPlayer/MPVideoPlayerViewController.m deleted file mode 100644 index a110a313da..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VideoPlayer/MPVideoPlayerViewController.m +++ /dev/null @@ -1,98 +0,0 @@ -// -// MPVideoPlayerViewController.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPVASTCompanionAd.h" -#import "MPVideoPlayerContainerView.h" -#import "MPVideoPlayerViewController.h" - -@interface MPVideoPlayerViewController () - -@property (nonatomic, strong) MPVideoPlayerContainerView *videoPlayerContainerView; - -@end - -@interface MPVideoPlayerViewController (MPVASTResourceViewDelegate) -@end - -@implementation MPVideoPlayerViewController - -- (void)setDelegate:(id)delegate { - _videoPlayerContainerView.delegate = delegate; - _delegate = delegate; -} - -- (BOOL)prefersHomeIndicatorAutoHidden { - return YES; -} - -- (BOOL)prefersStatusBarHidden { - return YES; -} - -#pragma mark - MPVideoPlayer - -- (instancetype)initWithVideoURL:(NSURL *)videoURL videoConfig:(MPVideoConfig *)videoConfig { - self = [super initWithNibName:nil bundle:nil]; - if (self) { - self.modalPresentationStyle = UIModalPresentationFullScreen; - _videoPlayerContainerView = [[MPVideoPlayerContainerView alloc] initWithVideoURL:videoURL - videoConfig:videoConfig]; - } - return self; -} - -- (void)loadVideo { - [self.videoPlayerContainerView loadVideo]; -} - -- (void)play { - [self.videoPlayerContainerView play]; -} - -- (void)pause { - [self.videoPlayerContainerView pause]; -} - -- (void)enableAppLifeCycleEventObservationForAutoPlayPause { - [self.videoPlayerContainerView enableAppLifeCycleEventObservationForAutoPlayPause]; -} - -- (void)disableAppLifeCycleEventObservationForAutoPlayPause { - [self.videoPlayerContainerView disableAppLifeCycleEventObservationForAutoPlayPause]; -} - -#pragma mark - life cycle - -- (void)loadView { - // Use a `MPVideoPlayerView` instead of the plain `UIView` for `self.view` - // Note: do not call `[super loadView]` as explained in Apple doc - // https://developer.apple.com/documentation/uikit/uiviewcontroller/1621454-loadview - self.view = self.videoPlayerContainerView; -} - -- (void)viewWillAppear:(BOOL)animated { - [super viewWillAppear:animated]; - [self.delegate interstitialWillAppear:self]; -} - -- (void)viewDidAppear:(BOOL)animated { - [super viewDidAppear:animated]; - [self.delegate interstitialDidAppear:self]; -} - -- (void)viewWillDisappear:(BOOL)animated { - [super viewWillDisappear:animated]; - [self.delegate interstitialWillDisappear:self]; -} - -- (void)viewDidDisappear:(BOOL)animated { - [super viewDidDisappear:animated]; - [self.delegate interstitialDidDisappear:self]; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VideoPlayer/MPVideoPlayerViewOverlay.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VideoPlayer/MPVideoPlayerViewOverlay.h deleted file mode 100644 index 84bd9ddec2..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VideoPlayer/MPVideoPlayerViewOverlay.h +++ /dev/null @@ -1,119 +0,0 @@ -// -// MPVideoPlayerViewOverlay.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#ifndef MPVideoPlayerViewOverlay_h -#define MPVideoPlayerViewOverlay_h - -#import -#import "MPVASTCompanionAd.h" -#import "MPVideoPlayer.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - This is a simple data object for @c MPVideoPlayerViewOverlay. - */ -@interface MPVideoPlayerViewOverlayConfig : NSObject - -/** - Title of the Call To Action button. If nil or empty, the button is hidden. - */ -@property (nonatomic, readonly) NSString *callToActionButtonTitle; - -/** - Whether this overlay is for a rewarded video. - */ -@property (nonatomic, readonly) BOOL isRewarded; - -/** - Whether the user can perform a click-through. - */ -@property (nonatomic, readonly) BOOL isClickthroughAllowed; - -/** - Whether this video has a companion ad - */ -@property (nonatomic, readonly) BOOL hasCompanionAd; - -/** - This is for the Format Unification Phase 2 item 1.1 - clickability experiment. When the experiment is enabled, users are able to click a fullscreen - non-rewarded VAST video ad immediately, so that they can consume additional content about the - advertiser. Clicking on this video should launch the CTA. - */ -@property (nonatomic, readonly) BOOL enableEarlyClickthroughForNonRewardedVideo; - -- (instancetype)initWithCallToActionButtonTitle:(NSString * _Nullable)callToActionButtonTitle - isRewarded:(BOOL)isRewarded - isClickthroughAllowed:(BOOL)isClickthroughAllowed - hasCompanionAd:(BOOL)hasCompanionAd - enableEarlyClickthroughForNonRewardedVideo:(BOOL)enableEarlyClickthroughForNonRewardedVideo; - -@end - -/** - @c MPVideoPlayerView has an overlay with a subset of video progress indicator, skip button, close - button, and other UI elements. Since there are different kinds of overlay in different scenarios, - this @c MPVideoPlayerViewOverlay protocol is here to provide a common interface for all the overlays. - - See documentation at https://developers.mopub.com/dsps/ad-formats/video/ - */ -@protocol MPVideoPlayerViewOverlay - -@optional - -/** - Initialization. - */ -- (instancetype)initWithConfig:(MPVideoPlayerViewOverlayConfig *)config; - -/** - Pause the timer. - */ -- (void)pauseTimer; - -/** - Pause the timer. -*/ -- (void)resumeTimer; - -/** - @c MPVideoPlayerView calls this when the first frame of the video is played. - - Note: The provided video duration is the duration of the actual video instead of the duration - provided in the ad response meta data (which could be inaccurate or totally wrong). - */ -- (void)handleVideoStartForSkipOffset:(MPVASTDurationOffset *)skipOffset - videoDuration:(NSTimeInterval)videoDuration; - -/** - Call this when the video ends. - */ -- (void)handleVideoComplete; - -/** - Show the industry icon. - */ -- (void)showIndustryIcon:(MPVASTIndustryIcon *)icon; - -/** - Hide the industry icon. - */ -- (void)hideIndustryIcon; - -@end - -@protocol MPVideoPlayerViewOverlayDelegate - -- (void)videoPlayerViewOverlay:(id)overlay didTriggerEvent:(MPVideoPlayerEvent)event; - -@end - -NS_ASSUME_NONNULL_END - -#endif /* MPVideoPlayerViewOverlay_h */ diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VideoPlayer/MPVideoPlayerViewOverlay.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VideoPlayer/MPVideoPlayerViewOverlay.m deleted file mode 100644 index d8925d0270..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Internal/VideoPlayer/MPVideoPlayerViewOverlay.m +++ /dev/null @@ -1,40 +0,0 @@ -// -// MPVideoPlayerViewOverlay.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPVideoPlayerViewOverlay.h" - -@interface MPVideoPlayerViewOverlayConfig () - -@property (nonatomic, strong) NSString *callToActionButtonTitle; -@property (nonatomic, assign) BOOL isRewarded; -@property (nonatomic, assign) BOOL isClickthroughAllowed; -@property (nonatomic, assign) BOOL hasCompanionAd; -@property (nonatomic, assign) BOOL enableEarlyClickthroughForNonRewardedVideo; - -@end - -@implementation MPVideoPlayerViewOverlayConfig - -- (instancetype)initWithCallToActionButtonTitle:(NSString *)callToActionButtonTitle - isRewarded:(BOOL)isRewarded - isClickthroughAllowed:(BOOL)isClickthroughAllowed - hasCompanionAd:(BOOL)hasCompanionAd - enableEarlyClickthroughForNonRewardedVideo:(BOOL)enableEarlyClickthroughForNonRewardedVideo { - self = [super init]; - if (self) { - _callToActionButtonTitle = callToActionButtonTitle; - _isRewarded = isRewarded; - _isClickthroughAllowed = isClickthroughAllowed; - _hasCompanionAd = hasCompanionAd; - _enableEarlyClickthroughForNonRewardedVideo = enableEarlyClickthroughForNonRewardedVideo; - } - return self; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Logging/Internal/MPConsoleLogger.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Logging/Internal/MPConsoleLogger.h deleted file mode 100644 index 01fea882b9..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Logging/Internal/MPConsoleLogger.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// MPConsoleLogger.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPBLogger.h" - -/** - Console logging destination routes all log messages to @c NSLog. - */ -@interface MPConsoleLogger : NSObject - -/** - Log level. By default, this is set to @c MPBLogLevelInfo. - */ -@property (nonatomic, assign) MPBLogLevel logLevel; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Logging/Internal/MPConsoleLogger.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Logging/Internal/MPConsoleLogger.m deleted file mode 100644 index b45f60ef9a..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Logging/Internal/MPConsoleLogger.m +++ /dev/null @@ -1,28 +0,0 @@ -// -// MPConsoleLogger.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPConsoleLogger.h" - -@implementation MPConsoleLogger - -- (instancetype)init { - if (self = [super init]) { - // The console logging level is set to `MPBLogLevelInfo` by default in the event that an - // error needs to be logged to the console prior to SDK initialization. `MPMoPubConfiguration` - // will set the log level to `MPBLogLevelInfo` during initialization. - _logLevel = MPBLogLevelInfo; - } - - return self; -} - -- (void)logMessage:(NSString *)message { - NSLog(@"%@", message); -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Logging/Internal/MPLogManager.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Logging/Internal/MPLogManager.h deleted file mode 100644 index 40ce4a8b4d..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Logging/Internal/MPLogManager.h +++ /dev/null @@ -1,67 +0,0 @@ -// -// MPLogManager.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPLogEvent.h" -#import "MPBLogger.h" -#import "MPLogging.h" -#import "MPBLogLevel.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - Manages all logging sources for the MoPub SDK. By default, the manager will always - contain a console logger destination. - */ -@interface MPLogManager : NSObject - -/** - Current log level of the console logger. - */ -@property (nonatomic, assign) MPBLogLevel consoleLogLevel; - -/** - Retrieves the singleton instance of @c MPLogManager. - */ -+ (instancetype)sharedInstance; - -/** - Registers a logging destination. - @param logger Logger to receive log events. - */ -- (void)addLogger:(id)logger; - -/** - Removes a logger from receiving log events. - @param logger Logger to remove. - */ -- (void)removeLogger:(id)logger; - -/** - Logs the message to all available logging destinations at the - specified log level. - @param message Message to log. - @param level Log level. - */ -- (void)logMessage:(NSString *)message atLogLevel:(MPBLogLevel)level; - -/** - Logs the event generated from the calling class. The format of the log message - will be: - @code - className | source | logEvent.message - @endcode - @param event Event to log. - @param source Optional source of the event. This will generally be ad unit ID for ad-related events. - @param className Name of the class invoking @c logEvent:fromClass: - */ -- (void)logEvent:(MPLogEvent *)event source:(NSString * _Nullable)source fromClass:(NSString *)className; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Logging/Internal/MPLogManager.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Logging/Internal/MPLogManager.m deleted file mode 100644 index a89e8f673b..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Logging/Internal/MPLogManager.m +++ /dev/null @@ -1,121 +0,0 @@ -// -// MPLogManager.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPLogManager.h" -#import "MPConsoleLogger.h" -#import "MPIdentityProvider.h" - -// Log format constants -static NSString * const kInfoFormat = @"%@][%@"; -static NSString * const kLogFormat = @"\n\t[MoPub][%@] %@"; - -// Cached IDFA strings used to obfuscate the real IDFA with a sanitized version. -static NSString * sIdentifier; -static NSString * sObfuscatedIdentifier; - -@interface MPLogManager() - -/** - Console logger. - */ -@property (nonatomic, strong) MPConsoleLogger * consoleLogger; - -/** - Currently registered loggers. - */ -@property (nonatomic, strong) NSMutableArray> * loggers; - -/** - Serial dispatch queue to perform logging operations. - */ -@property (nonatomic, strong) dispatch_queue_t queue; - -@end - -@implementation MPLogManager - -#pragma mark - Initialization - -+ (MPLogManager *)sharedInstance { - static dispatch_once_t once; - static MPLogManager * sharedManager; - dispatch_once(&once, ^{ - sharedManager = [[self alloc] init]; - }); - - return sharedManager; -} - -- (instancetype)init { - if (self = [super init]) { - _consoleLogger = [[MPConsoleLogger alloc] init]; - _loggers = [NSMutableArray arrayWithObject:_consoleLogger]; - _queue = dispatch_queue_create("com.mopub-ios-sdk.queue", DISPATCH_QUEUE_SERIAL); - } - - return self; -} - -#pragma mark - Computed Properties - -- (MPBLogLevel)consoleLogLevel { - return self.consoleLogger.logLevel; -} - -- (void)setConsoleLogLevel:(MPBLogLevel)consoleLogLevel { - self.consoleLogger.logLevel = consoleLogLevel; -} - -#pragma mark - Logger Management - -- (void)addLogger:(id)logger { - [self.loggers addObject:logger]; -} - -- (void)removeLogger:(id)logger { - [self.loggers removeObject:logger]; -} - -#pragma mark - Logging - -- (void)logMessage:(NSString *)message atLogLevel:(MPBLogLevel)level { - if (level == MPBLogLevelNone) { - return; - } - - // Lazily retrieve the IDFA - if (sIdentifier == nil) { - sIdentifier = [[MPIdentityProvider identifier] copy]; - } - - // Lazily retrieve the sanitized IDFA - if (sObfuscatedIdentifier == nil) { - sObfuscatedIdentifier = [[MPIdentityProvider obfuscatedIdentifier] copy]; - } - - // Replace identifier with a obfuscated version when logging. - NSString * logMessage = [message stringByReplacingOccurrencesOfString:sIdentifier withString:sObfuscatedIdentifier]; - - // Queue up the message for logging. - __weak __typeof__(self) weakSelf = self; - dispatch_async(self.queue, ^{ - [weakSelf.loggers enumerateObjectsUsingBlock:^(id logger, NSUInteger idx, BOOL *stop) { - if (logger.logLevel <= level) { - [logger logMessage:logMessage]; - } - }]; - }); -} - -- (void)logEvent:(MPLogEvent *)event source:(NSString *)source fromClass:(NSString *)className { - NSString * info = (source != nil ? [NSString stringWithFormat:kInfoFormat, className, source] : className); - NSString * message = [NSString stringWithFormat:kLogFormat, info, event.message]; - [self logMessage:message atLogLevel:event.logLevel]; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Logging/MPBLogLevel.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Logging/MPBLogLevel.h deleted file mode 100644 index 820693e491..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Logging/MPBLogLevel.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// MPBLogLevel.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -/** - SDK logging level. The "MPB" prefix is used instead of "MP" to avoid namespace collision. - @remark Lower values equate to more detailed logs. - */ -typedef NS_ENUM(NSUInteger, MPBLogLevel) { - MPBLogLevelDebug = 20, - MPBLogLevelInfo = 30, - MPBLogLevelNone = 70 -}; diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Logging/MPBLogger.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Logging/MPBLogger.h deleted file mode 100644 index 3baeb20fa4..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Logging/MPBLogger.h +++ /dev/null @@ -1,28 +0,0 @@ -// -// MPBLogger.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPBLogLevel.h" - -/** - Objects which are capable of consuming log messages. - */ -@protocol MPBLogger - -/** - Current logging level. - */ -@property (nonatomic, readonly) MPBLogLevel logLevel; - -/** - Message to be logged. - @param message Message to be logged. - */ -- (void)logMessage:(NSString * _Nullable)message; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Logging/MPLogEvent.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Logging/MPLogEvent.h deleted file mode 100644 index 35f80adc8c..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Logging/MPLogEvent.h +++ /dev/null @@ -1,134 +0,0 @@ -// -// MPLogEvent.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPConsentStatus.h" -#import "MPBLogLevel.h" - -@protocol MPAdapterConfiguration; -@class MPRewardedVideoReward; -@class MPURLRequest; - -NS_ASSUME_NONNULL_BEGIN - -/** - Logging event used to construct pre-formatted messages. - */ -@interface MPLogEvent : NSObject -/** - Message to be logged. - */ -@property (nonatomic, copy, readonly) NSString * message; - -/** - Level at which the message should be logged. - */ -@property (nonatomic, assign, readonly) MPBLogLevel logLevel; - -/** - Default initialization is disallowed. - */ -- (instancetype)init NS_UNAVAILABLE; - -/** - Initializes the log event with the specified message to be logged at Debug level. - @param message Message to log - @return Log event - */ -- (instancetype)initWithMessage:(NSString *)message; - -/** - Initializes the log event with the specified message to be logged at the desired - log level. - @param message Message to log - @param level Level at which the message should be logged - @return Log event - */ -- (instancetype)initWithMessage:(NSString *)message level:(MPBLogLevel)level NS_DESIGNATED_INITIALIZER; - -/** - Initializes a generic error log event with optional message. The message and error - will be logged at Debug level. - @param error Error to log - @param message Optional message that will prefix the error message. - @return Log event - */ -+ (instancetype)error:(NSError *)error message:(NSString * _Nullable)message; - -/** - Initializes the log event with the specified message to be logged at the desired - log level. - @param message Message to log - @param level Level at which the message should be logged - @return Log event - */ -+ (instancetype)eventWithMessage:(NSString *)message level:(MPBLogLevel)level; - -@end - -@interface MPLogEvent (AdLifeCycle) -+ (instancetype)adRequestedWithRequest:(MPURLRequest *)request; -+ (instancetype)adRequestReceivedResponse:(NSDictionary *)response; -+ (instancetype)adLoadAttempt; -+ (instancetype)adShowAttempt; -+ (instancetype)adShowSuccess; -+ (instancetype)adShowFailedWithError:(NSError *)error; -+ (instancetype)adDidLoad; -+ (instancetype)adFailedToLoadWithError:(NSError *)error; -+ (instancetype)adExpiredWithTimeInterval:(NSTimeInterval)expirationInterval; -+ (instancetype)adWillPresentModal; -+ (instancetype)adDidDismissModal; -+ (instancetype)adTapped; -+ (instancetype)adWillAppear; -+ (instancetype)adDidAppear; -+ (instancetype)adWillDisappear; -+ (instancetype)adDidDisappear; -+ (instancetype)adShouldRewardUserWithReward:(MPRewardedVideoReward *)reward; -+ (instancetype)adWillLeaveApplication; -@end - -@interface MPLogEvent (AdapterAdLifeCycle) -+ (instancetype)adLoadAttemptForAdapter:(NSString *)name dspCreativeId:(NSString * _Nullable)creativeId dspName:(NSString * _Nullable)dspName; -+ (instancetype)adLoadSuccessForAdapter:(NSString *)name; -+ (instancetype)adLoadFailedForAdapter:(NSString *)name error:(NSError *)error; -+ (instancetype)adShowAttemptForAdapter:(NSString *)name; -+ (instancetype)adShowSuccessForAdapter:(NSString *)name; -+ (instancetype)adShowFailedForAdapter:(NSString *)name error:(NSError *)error; -+ (instancetype)adWillPresentModalForAdapter:(NSString *)name; -+ (instancetype)adDidDismissModalForAdapter:(NSString *)name; -+ (instancetype)adTappedForAdapter:(NSString *)name; -+ (instancetype)adWillAppearForAdapter:(NSString *)name; -+ (instancetype)adDidAppearForAdapter:(NSString *)name; -+ (instancetype)adWillDisappearForAdapter:(NSString *)name; -+ (instancetype)adDidDisappearForAdapter:(NSString *)name; -+ (instancetype)adWillLeaveApplicationForAdapter:(NSString *)name; -@end - -@interface MPLogEvent (Initialization) -+ (instancetype)sdkInitializedWithNetworks:(NSArray> *)networks; -@end - -@interface MPLogEvent (Consent) -+ (instancetype)consentSyncAttempted; -+ (instancetype)consentSyncCompletedWithMessage:(NSString * _Nullable)message; -+ (instancetype)consentSyncFailedWithError:(NSError *)error; -+ (instancetype)consentUpdatedTo:(MPConsentStatus)newStatus from:(MPConsentStatus)oldStatus reason:(NSString * _Nullable)reason canCollectPersonalInfo:(BOOL)canCollectPII; -+ (instancetype)consentShouldShowDialog; -+ (instancetype)consentDialogLoadAttempted; -+ (instancetype)consentDialogLoadSuccess; -+ (instancetype)consentDialogLoadFailedWithError:(NSError *)error; -+ (instancetype)consentDialogShowAttempted; -+ (instancetype)consentDialogShowSuccess; -+ (instancetype)consentDialogShowFailedWithError:(NSError *)error; -@end - -@interface MPLogEvent (Javascript) -+ (instancetype)javascriptConsoleLogWithMessage:(NSString *)message; -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Logging/MPLogEvent.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Logging/MPLogEvent.m deleted file mode 100644 index e7957ea0e9..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Logging/MPLogEvent.m +++ /dev/null @@ -1,306 +0,0 @@ -// -// MPLogEvent.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPLogEvent.h" -#import "MPAdapterConfiguration.h" -#import "MPRewardedVideoReward.h" -#import "MPURLRequest.h" -#import "NSString+MPConsentStatus.h" - -@implementation MPLogEvent - -- (instancetype)initWithMessage:(NSString *)message { - return [self initWithMessage:message level:MPBLogLevelDebug]; -} - -- (instancetype)initWithMessage:(NSString *)message level:(MPBLogLevel)level { - if (self = [super init]) { - _message = message; - _logLevel = level; - } - - return self; -} - -+ (instancetype)error:(NSError *)error message:(NSString * _Nullable)message { - NSString * formattedMessage = (message != nil ? [NSString stringWithFormat:@"%@: ", message] : @""); - NSString * logMessage = [NSString stringWithFormat:@"%@(%@) %@", formattedMessage, @(error.code), error.localizedDescription]; - return [[MPLogEvent alloc] initWithMessage:logMessage]; -} - -+ (instancetype)eventWithMessage:(NSString *)message level:(MPBLogLevel)level { - return [[MPLogEvent alloc] initWithMessage:message level:level]; -} - -@end - -#pragma mark - AdLifeCycle - -@implementation MPLogEvent (AdLifeCycle) - -+ (instancetype)adRequestedWithRequest:(MPURLRequest *)request { - NSString * message = [NSString stringWithFormat:@"Requesting an ad from Adserver: %@", request]; - return [[MPLogEvent alloc] initWithMessage:message]; -} - -+ (instancetype)adRequestReceivedResponse:(NSDictionary *)response { - NSString * message = [NSString stringWithFormat:@"Adserver responded with:\n%@", response]; - return [[MPLogEvent alloc] initWithMessage:message]; -} - -+ (instancetype)adLoadAttempt { - static NSString * const message = @"Attempting to load ad"; - return [[MPLogEvent alloc] initWithMessage:message level:MPBLogLevelInfo]; -} - -+ (instancetype)adShowAttempt { - static NSString * const message = @"Attempting to show ad"; - return [[MPLogEvent alloc] initWithMessage:message level:MPBLogLevelInfo]; -} - -+ (instancetype)adShowSuccess { - static NSString * const message = @"Ad shown"; - return [[MPLogEvent alloc] initWithMessage:message level:MPBLogLevelInfo]; -} - -+ (instancetype)adShowFailedWithError:(NSError *)error { - NSString * message = [NSString stringWithFormat:@"Ad failed to show: (%@) %@", @(error.code), error.localizedDescription]; - return [[MPLogEvent alloc] initWithMessage:message level:MPBLogLevelInfo]; -} - -+ (instancetype)adDidLoad { - static NSString * const message = @"Ad loaded"; - return [[MPLogEvent alloc] initWithMessage:message level:MPBLogLevelInfo]; -} - -+ (instancetype)adFailedToLoadWithError:(NSError *)error { - NSString * message = [NSString stringWithFormat:@"Ad failed to load: (%@) %@", @(error.code), error.localizedDescription]; - return [[MPLogEvent alloc] initWithMessage:message level:MPBLogLevelInfo]; -} - -+ (instancetype)adExpiredWithTimeInterval:(NSTimeInterval)expirationInterval { - NSString * message = [NSString stringWithFormat:@"Ad expired since it was not shown within %@ minutes of it being loaded", @(expirationInterval / 60)]; - return [[MPLogEvent alloc] initWithMessage:message]; -} - -+ (instancetype)adWillPresentModal { - static NSString * const message = @"Ad will present modal"; - return [[MPLogEvent alloc] initWithMessage:message]; -} - -+ (instancetype)adDidDismissModal { - static NSString * const message = @"Ad did dismiss modal"; - return [[MPLogEvent alloc] initWithMessage:message]; -} - -+ (instancetype)adTapped { - static NSString * const message = @"Ad tapped"; - return [[MPLogEvent alloc] initWithMessage:message]; -} - -+ (instancetype)adWillAppear { - static NSString * const message = @"Ad will appear"; - return [[MPLogEvent alloc] initWithMessage:message]; -} - -+ (instancetype)adDidAppear { - static NSString * const message = @"Ad did appear"; - return [[MPLogEvent alloc] initWithMessage:message]; -} - -+ (instancetype)adWillDisappear { - static NSString * const message = @"Ad will disappear"; - return [[MPLogEvent alloc] initWithMessage:message]; -} - -+ (instancetype)adDidDisappear { - static NSString * const message = @"Ad did disappear"; - return [[MPLogEvent alloc] initWithMessage:message]; -} - -+ (instancetype)adShouldRewardUserWithReward:(MPRewardedVideoReward *)reward { - NSString * message = [NSString stringWithFormat:@"Should rewarded user with %@ %@", reward.amount, reward.currencyType]; - return [[MPLogEvent alloc] initWithMessage:message]; -} - -+ (instancetype)adWillLeaveApplication { - static NSString * const message = @"Ad will leave application"; - return [[MPLogEvent alloc] initWithMessage:message]; -} - -@end - -#pragma mark - AdapterAdLifeCycle - -@implementation MPLogEvent (AdapterAdLifeCycle) - -+ (instancetype)adLoadAttemptForAdapter:(NSString *)name dspCreativeId:(NSString *)creativeId dspName:(NSString *)dspName { - NSString * creativeIdMessage = (creativeId != nil ? [NSString stringWithFormat:@" with DSP creative ID %@", creativeId] : @""); - NSString * dspMessage = (dspName != nil ? [NSString stringWithFormat:@" and DSP Name %@", dspName] : @""); - NSString * message = [NSString stringWithFormat:@"Adapter %@ attempting to load ad%@%@", name, creativeIdMessage, dspMessage]; - return [[MPLogEvent alloc] initWithMessage:message]; -} - -+ (instancetype)adLoadSuccessForAdapter:(NSString *)name { - NSString * message = [NSString stringWithFormat:@"Adapter %@ sucessfully loaded ad", name]; - return [[MPLogEvent alloc] initWithMessage:message]; -} - -+ (instancetype)adLoadFailedForAdapter:(NSString *)name error:(NSError *)error { - NSString * message = [NSString stringWithFormat:@"Adapter %@ failed to load ad: (%@) %@", name, @(error.code), error.localizedDescription]; - return [[MPLogEvent alloc] initWithMessage:message]; -} - -+ (instancetype)adShowAttemptForAdapter:(NSString *)name { - NSString * message = [NSString stringWithFormat:@"Adapter %@ attempting to show ad", name]; - return [[MPLogEvent alloc] initWithMessage:message]; -} - -+ (instancetype)adShowSuccessForAdapter:(NSString *)name { - NSString * message = [NSString stringWithFormat:@"Adapter %@ sucessfully showed ad", name]; - return [[MPLogEvent alloc] initWithMessage:message]; -} - -+ (instancetype)adShowFailedForAdapter:(NSString *)name error:(NSError *)error { - NSString * message = [NSString stringWithFormat:@"Adapter %@ failed to show ad: (%@) %@", name, @(error.code), error.localizedDescription]; - return [[MPLogEvent alloc] initWithMessage:message]; -} - -+ (instancetype)adWillPresentModalForAdapter:(NSString *)name { - NSString * message = [NSString stringWithFormat:@"Adapter ad from %@ will present modal", name]; - return [[MPLogEvent alloc] initWithMessage:message]; -} - -+ (instancetype)adDidDismissModalForAdapter:(NSString *)name { - NSString * message = [NSString stringWithFormat:@"Adapter ad from %@ did dismiss modal", name]; - return [[MPLogEvent alloc] initWithMessage:message]; -} - -+ (instancetype)adTappedForAdapter:(NSString *)name { - NSString * message = [NSString stringWithFormat:@"Adapter ad from %@ received tap event", name]; - return [[MPLogEvent alloc] initWithMessage:message]; -} - -+ (instancetype)adWillAppearForAdapter:(NSString *)name { - NSString * message = [NSString stringWithFormat:@"Adapter ad from %@ will appear", name]; - return [[MPLogEvent alloc] initWithMessage:message]; -} - -+ (instancetype)adDidAppearForAdapter:(NSString *)name { - NSString * message = [NSString stringWithFormat:@"Adapter ad from %@ did appear", name]; - return [[MPLogEvent alloc] initWithMessage:message]; -} - -+ (instancetype)adWillDisappearForAdapter:(NSString *)name { - NSString * message = [NSString stringWithFormat:@"Adapter ad from %@ will disappear", name]; - return [[MPLogEvent alloc] initWithMessage:message]; -} - -+ (instancetype)adDidDisappearForAdapter:(NSString *)name { - NSString * message = [NSString stringWithFormat:@"Adapter ad from %@ did disappear", name]; - return [[MPLogEvent alloc] initWithMessage:message]; -} - -+ (instancetype)adWillLeaveApplicationForAdapter:(NSString *)name { - NSString * message = [NSString stringWithFormat:@"Adapter ad from %@ will leave application", name]; - return [[MPLogEvent alloc] initWithMessage:message]; -} - -@end - -#pragma mark - Initialization - -@implementation MPLogEvent (Initialization) - -+ (instancetype)sdkInitializedWithNetworks:(NSArray> *)networks { - // Compile the network adapter versions and underlying SDK versions into a human - // readable format string. - NSMutableArray * networkVersions = [NSMutableArray arrayWithCapacity:networks.count]; - [networks enumerateObjectsUsingBlock:^(id _Nonnull adapter, NSUInteger idx, BOOL * _Nonnull stop) { - NSString * message = [NSString stringWithFormat:@"%@: Adapter version %@, SDK version %@", NSStringFromClass(adapter.class), adapter.adapterVersion, adapter.networkSdkVersion]; - [networkVersions addObject:message]; - }]; - NSString * networksMessage = (networkVersions.count > 0 ? [networkVersions componentsJoinedByString:@"\n\t"] : @"No adapters initialized"); - - NSString * message = [NSString stringWithFormat:@"SDK initialized and ready to display ads.\n\tInitialized adapters:\n\t%@\n", networksMessage]; - return [[MPLogEvent alloc] initWithMessage:message level:MPBLogLevelInfo]; -} - -@end - -#pragma mark - Consent - -@implementation MPLogEvent (Consent) - -+ (instancetype)consentSyncAttempted { - static NSString * const message = @"Attempting to synchronize consent state"; - return [[MPLogEvent alloc] initWithMessage:message]; -} - -+ (instancetype)consentSyncCompletedWithMessage:(NSString * _Nullable)message { - NSString * formattedMessage = (message != nil ? [NSString stringWithFormat:@": %@", message] : @""); - NSString * logMessage = [NSString stringWithFormat:@"Consent synchronization complete%@", formattedMessage]; - return [[MPLogEvent alloc] initWithMessage:logMessage]; -} - -+ (instancetype)consentSyncFailedWithError:(NSError *)error { - NSString * message = [NSString stringWithFormat:@"Consent synchronization failed: (%@) %@", @(error.code), error.localizedDescription]; - return [[MPLogEvent alloc] initWithMessage:message]; -} - -+ (instancetype)consentUpdatedTo:(MPConsentStatus)newStatus from:(MPConsentStatus)oldStatus reason:(NSString * _Nullable)reason canCollectPersonalInfo:(BOOL)canCollectPII { - NSString * reasonMessage = (reason != nil ? [NSString stringWithFormat:@" Reason: %@", reason] : @""); - NSString * message = [NSString stringWithFormat:@"Consent changed to %@ from %@; PII can%@ be collected.%@", [NSString stringFromConsentStatus:newStatus], [NSString stringFromConsentStatus:oldStatus], (canCollectPII ? @"" : @"not"), reasonMessage]; - return [[MPLogEvent alloc] initWithMessage:message]; -} - -+ (instancetype)consentShouldShowDialog { - static NSString * const message = @"Consent dialog should be shown"; - return [[MPLogEvent alloc] initWithMessage:message]; -} - -+ (instancetype)consentDialogLoadAttempted { - static NSString * const message = @"Attempting to load consent dialog"; - return [[MPLogEvent alloc] initWithMessage:message]; -} - -+ (instancetype)consentDialogLoadSuccess { - static NSString * const message = @"Consent dialog loaded"; - return [[MPLogEvent alloc] initWithMessage:message]; -} - -+ (instancetype)consentDialogLoadFailedWithError:(NSError *)error { - NSString * message = [NSString stringWithFormat:@"Consent dialog failed to load: (%@) %@", @(error.code), error.localizedDescription]; - return [[MPLogEvent alloc] initWithMessage:message]; -} - -+ (instancetype)consentDialogShowAttempted { - static NSString * const message = @"Attempting to show consent dialog"; - return [[MPLogEvent alloc] initWithMessage:message]; -} - -+ (instancetype)consentDialogShowSuccess { - static NSString * const message = @"Consent dialog shown"; - return [[MPLogEvent alloc] initWithMessage:message]; -} - -+ (instancetype)consentDialogShowFailedWithError:(NSError *)error { - NSString * message = [NSString stringWithFormat:@"Consent dialog failed to show: (%@) %@", @(error.code), error.localizedDescription]; - return [[MPLogEvent alloc] initWithMessage:message]; -} - -@end - -@implementation MPLogEvent (Javascript) - -+ (instancetype)javascriptConsoleLogWithMessage:(NSString *)message { - NSString * scrubbedMessage = [message stringByReplacingOccurrencesOfString:@"ios-log: " withString:@""]; - return [[MPLogEvent alloc] initWithMessage:[NSString stringWithFormat:@"Javascript console logged: %@", scrubbedMessage]]; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Logging/MPLogging.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Logging/MPLogging.h deleted file mode 100644 index a39925c1df..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Logging/MPLogging.h +++ /dev/null @@ -1,70 +0,0 @@ -// -// MPLogging.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPLogEvent.h" -#import "MPBLogger.h" -#import "MPBLogLevel.h" - -NS_ASSUME_NONNULL_BEGIN - -extern NSString * const kMPClearErrorLogFormatWithAdUnitID; -extern NSString * const kMPWarmingUpErrorLogFormatWithAdUnitID; - -#define MPLogDebug(...) [MPLogging logEvent:[MPLogEvent eventWithMessage:[NSString stringWithFormat:__VA_ARGS__] level:MPBLogLevelDebug] source:nil fromClass:self.class] -#define MPLogInfo(...) [MPLogging logEvent:[MPLogEvent eventWithMessage:[NSString stringWithFormat:__VA_ARGS__] level:MPBLogLevelInfo] source:nil fromClass:self.class] - -// MPLogTrace, MPLogWarn, MPLogError, and MPLogFatal will be deprecated in -// future SDK versions. Please use MPLogInfo or MPLogDebug -#define MPLogTrace(...) MPLogDebug(__VA_ARGS__) -#define MPLogWarn(...) MPLogDebug(__VA_ARGS__) -#define MPLogError(...) MPLogDebug(__VA_ARGS__) -#define MPLogFatal(...) MPLogDebug(__VA_ARGS__) - -// Logs ad lifecycle events -#define MPLogAdEvent(event, adUnitId) [MPLogging logEvent:event source:adUnitId fromClass:self.class] - -// Logs general events -#define MPLogEvent(event) [MPLogging logEvent:event source:nil fromClass:self.class] - -/** - SDK logging support. - */ -@interface MPLogging : NSObject -/** - Current log level of the SDK console logger. The default value is @c MPBLogLevelNone. - */ -@property (class, nonatomic, assign) MPBLogLevel consoleLogLevel; - -/** -Registers a logging destination. -@param logger Logger to receive log events. -*/ -+ (void)addLogger:(id)logger; - -/** - Removes a logger from receiving log events. - @param logger Logger to remove. - */ -+ (void)removeLogger:(id)logger; - -/** - Logs the event generated from the calling class. The format of the log message - will be: - @code - className | source | logEvent.message - @endcode - @param event Event to log. - @param source Optional source of the event. This will generally be ad unit ID for ad-related events. - @param aClass Class that generated the event. - */ -+ (void)logEvent:(MPLogEvent *)event source:(NSString * _Nullable)source fromClass:(Class _Nullable)aClass; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Logging/MPLogging.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Logging/MPLogging.m deleted file mode 100644 index 3add070eeb..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Logging/MPLogging.m +++ /dev/null @@ -1,42 +0,0 @@ -// -// MPLogging.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPLogging.h" -#import "MPLogManager.h" - -NSString * const kMPClearErrorLogFormatWithAdUnitID = @"No ads found for ad unit: %@"; -NSString * const kMPWarmingUpErrorLogFormatWithAdUnitID = @"Ad unit %@ is currently warming up. Please try again in a few minutes."; - -@implementation MPLogging - -#pragma mark - Class Properties - -+ (MPBLogLevel)consoleLogLevel { - return MPLogManager.sharedInstance.consoleLogLevel; -} - -+ (void)setConsoleLogLevel:(MPBLogLevel)level { - MPLogManager.sharedInstance.consoleLogLevel = level; -} - -#pragma mark - Class Methods - -+ (void)addLogger:(id)logger { - [MPLogManager.sharedInstance addLogger:logger]; -} - -+ (void)removeLogger:(id)logger { - [MPLogManager.sharedInstance removeLogger:logger]; -} - -+ (void)logEvent:(MPLogEvent *)event source:(NSString *)source fromClass:(Class)aClass { - NSString * className = (aClass != Nil ? NSStringFromClass(aClass) : @""); - [MPLogManager.sharedInstance logEvent:event source:source fromClass:className]; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MOPUBDisplayAgentType.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MOPUBDisplayAgentType.h deleted file mode 100644 index dc4005dd24..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MOPUBDisplayAgentType.h +++ /dev/null @@ -1,25 +0,0 @@ -// -// MOPUBDisplayAgentType.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -typedef NS_ENUM(NSInteger, MOPUBDisplayAgentType) { - /** - Use in-app views for display agent without escaping the app. @c SFSafariViewController is used - for web browsing, and @c SKStoreProductViewController is used for supported App Store links. - */ - MOPUBDisplayAgentTypeInApp = 0, - - /** - Use the iOS Native Safari browser app for display agent. - */ - MOPUBDisplayAgentTypeNativeSafari, - - /** - This exists for historical reason, and it behaves the same as @c MOPUBDisplayAgentTypeInApp. - */ - MOPUBDisplayAgentTypeSafariViewController __attribute__((deprecated)) -}; diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPAdConversionTracker.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPAdConversionTracker.h deleted file mode 100644 index 447f5675dd..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPAdConversionTracker.h +++ /dev/null @@ -1,58 +0,0 @@ -// -// MPAdConversionTracker.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -#define MOPUB_CONVERSION_DEFAULTS_KEY @"com.mopub.conversion" -#define MOPUB_CONVERSION_APP_ID_KEY @"com.mopub.conversion.appId" - -/** - * The `MPAdConversionTracker` class provides a mechanism for reporting application download - * (conversion) events to MoPub. This type of tracking is important for measuring the effectiveness - * of cross-promotional and direct-sold advertising. - * - * To track application downloads, get a reference to the shared instance of this class using the - * `sharedConversionTracker` method. Then, in your application delegate's - * `application:didFinishLaunchingWithOptions:` method, call the - * `reportApplicationOpenForApplicationID:` method on the shared instance. With this call in place, - * the conversion tracker will report an event to MoPub whenever the application is launched on a - * given device for the first time. Any subsequent launches will not be recorded as conversion - * events. - */ - -@interface MPAdConversionTracker : NSObject - -/** @name Recording Conversions */ - -/** - * Returns the shared instance of the `MPAdConversionTracker` class. - * - * @return A singleton `MPAdConversionTracker` object. - */ -+ (MPAdConversionTracker *)sharedConversionTracker; - -/** - * Notifies MoPub that a conversion event should be recorded for the application corresponding to - * the specified `appID`. - * - * A conversion event will only be reported once per application download, even if this method - * is called multiple times. - * - * @param appID An iTunes application ID. - * - * The easiest way to find the correct ID for your application is to generate an iTunes URL using - * the [iTunes Link Maker](https://itunes.apple.com/linkmaker), and then extract the number - * immediately following the "id" string. - * - * For example, the iTunes URL for the "Find My Friends" application is - * https://itunes.apple.com/us/app/find-my-friends/id466122094, so its application ID is - * 466122094. - */ -- (void)reportApplicationOpenForApplicationID:(NSString *)appID; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPAdConversionTracker.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPAdConversionTracker.m deleted file mode 100644 index 46e3030ef9..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPAdConversionTracker.m +++ /dev/null @@ -1,64 +0,0 @@ -// -// MPAdConversionTracker.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPAdConversionTracker.h" -#import "MPConstants.h" -#import "MPGlobal.h" -#import "MPLogging.h" -#import "MPIdentityProvider.h" -#import "MPCoreInstanceProvider.h" -#import "MPAPIEndpoints.h" -#import "MPHTTPNetworkSession.h" -#import "MPURLRequest.h" -#import "MPConsentManager.h" -#import "MPAdServerURLBuilder.h" - -@interface MPAdConversionTracker () -@property (nonatomic, strong) NSURLSessionTask * task; -@end - -@implementation MPAdConversionTracker - -+ (MPAdConversionTracker *)sharedConversionTracker -{ - static MPAdConversionTracker *sharedConversionTracker; - - @synchronized(self) - { - if (!sharedConversionTracker) - sharedConversionTracker = [[MPAdConversionTracker alloc] init]; - return sharedConversionTracker; - } -} - - -- (void)reportApplicationOpenForApplicationID:(NSString *)appID -{ - // Store app ID in case retry is needed. - [[NSUserDefaults standardUserDefaults] setObject:appID forKey:MOPUB_CONVERSION_APP_ID_KEY]; - [[NSUserDefaults standardUserDefaults] synchronize]; - - // Do not send app conversion request if collecting personal information is not allowed. - if (![MPConsentManager sharedManager].canCollectPersonalInfo) { - return; - } - - if (![[NSUserDefaults standardUserDefaults] boolForKey:MOPUB_CONVERSION_DEFAULTS_KEY]) { - MPLogInfo(@"Tracking conversion"); - MPURLRequest * request = [[MPURLRequest alloc] initWithURL:[MPAdServerURLBuilder conversionTrackingURLForAppID:appID]]; - self.task = [MPHTTPNetworkSession startTaskWithHttpRequest:request responseHandler:^(NSData * data, NSHTTPURLResponse * response) { - if (response.statusCode == 200 && data.length > 0) { - [[NSUserDefaults standardUserDefaults] removeObjectForKey:MOPUB_CONVERSION_APP_ID_KEY]; - [[NSUserDefaults standardUserDefaults] setBool:YES forKey:MOPUB_CONVERSION_DEFAULTS_KEY]; - [[NSUserDefaults standardUserDefaults] synchronize]; - } - } errorHandler:nil]; - } -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPAdTargeting.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPAdTargeting.h deleted file mode 100644 index 986fa1ad04..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPAdTargeting.h +++ /dev/null @@ -1,82 +0,0 @@ -// -// MPAdTargeting.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@class CLLocation; - -NS_ASSUME_NONNULL_BEGIN - -/** - Optional targeting parameters to use when requesting an ad. - */ -@interface MPAdTargeting : NSObject - -/** - The maximum creative size that can be safely rendered in the ad container. - The size should be in points. - */ -@property (nonatomic, assign) CGSize creativeSafeSize; - -/** - A string representing a set of non-personally identifiable keywords that should be passed - to the MoPub ad server to receive more relevant advertising. - - @remark If a user is in General Data Protection Regulation (GDPR) region and MoPub doesn't obtain - consent from the user, @c keywords will still be sent to the server. - */ -@property (nullable, nonatomic, copy) NSString * keywords; - -/** - Key-value pairs that are locally available to the custom event. - */ -@property (nullable, nonatomic, copy) NSDictionary * localExtras; - -/** - The device's current location if permission to access location has been granted. - * @deprecated This API is deprecated and will be removed in a future version. - */ -@property (nullable, nonatomic, copy) CLLocation * location __attribute__((deprecated("This API is deprecated and will be removed in a future version."))); - -/** - A string representing a set of personally identifiable keywords that should be passed to the MoPub ad server to receive - more relevant advertising. - - Keywords are typically used to target ad campaigns at specific user segments. They should be - formatted as comma-separated key-value pairs (e.g. "marital:single,age:24"). - - On the MoPub website, keyword targeting options can be found under the "Advanced Targeting" - section when managing campaigns. - - @remark If a user is in General Data Protection Regulation (GDPR) region and MoPub doesn't obtain - consent from the user, @c userDataKeywords will not be sent to the server. - */ -@property (nullable, nonatomic, copy) NSString * userDataKeywords; - -/** - Initializes ad targeting information. - @param size The maximum creative size that can be safely rendered in the ad container. - The size should be in points. - */ -- (instancetype)initWithCreativeSafeSize:(CGSize)size; - -/** - Initializes ad targeting information. - @param size The maximum creative size that can be safely rendered in the ad container. - The size should be in points. - */ -+ (instancetype)targetingWithCreativeSafeSize:(CGSize)size; - -#pragma mark - Unavailable Initializers - -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPAdTargeting.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPAdTargeting.m deleted file mode 100644 index f3afde149e..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPAdTargeting.m +++ /dev/null @@ -1,25 +0,0 @@ -// -// MPAdTargeting.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPAdTargeting.h" - -@implementation MPAdTargeting - -- (instancetype)initWithCreativeSafeSize:(CGSize)size { - if (self = [super init]) { - self.creativeSafeSize = size; - } - - return self; -} - -+ (instancetype)targetingWithCreativeSafeSize:(CGSize)size { - return [[MPAdTargeting alloc] initWithCreativeSafeSize:size]; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPAdView.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPAdView.h deleted file mode 100644 index 0c4d600efb..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPAdView.h +++ /dev/null @@ -1,238 +0,0 @@ -// -// MPAdView.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import -#import "MPConstants.h" -#import "MPAdViewDelegate.h" - -typedef enum -{ - MPNativeAdOrientationAny, - MPNativeAdOrientationPortrait, - MPNativeAdOrientationLandscape -} MPNativeAdOrientation; - -/** - * The MPAdView class provides a view that can display banner advertisements. - */ -IB_DESIGNABLE -@interface MPAdView : UIView - -/** @name Initializing a Banner Ad */ - -/** - * Initializes an MPAdView with the given ad unit ID. - * - * @param adUnitId A string representing a MoPub ad unit ID. - * @return A newly initialized ad view corresponding to the given ad unit ID and size. - */ -- (id)initWithAdUnitId:(NSString *)adUnitId; - -/** - * Initializes an MPAdView with the given ad unit ID and banner size. - * - * @param adUnitId A string representing a MoPub ad unit ID. - * @param size The desired ad size. A list of standard ad sizes is available in MPConstants.h. - * @return A newly initialized ad view corresponding to the given ad unit ID and size. - */ -- (id)initWithAdUnitId:(NSString *)adUnitId size:(CGSize)size __attribute__((deprecated("Use initWithAdUnitId: instead"))); - -/** @name Setting and Getting the Delegate */ - -/** - * The delegate (`MPAdViewDelegate`) of the ad view. - */ -@property (nonatomic, weak) id delegate; - -/** @name Setting Request Parameters */ - -/** - * The MoPub ad unit ID for this ad view. - * - * Ad unit IDs are created on the MoPub website. An ad unit is a defined placement in your - * application set aside for advertising. If no ad unit ID is set, the ad view will use a default - * ID that only receives test ads. - */ -@property (nonatomic, copy) IBInspectable NSString *adUnitId; - -/** - * The maximum desired ad size. A list of standard ad sizes is available in MPConstants.h. - */ -@property (nonatomic, assign) IBInspectable CGSize maxAdSize; - -/** - * A string representing a set of non-personally identifiable keywords that should be passed to the MoPub ad server to receive - * more relevant advertising. - - * Note: If a user is in General Data Protection Regulation (GDPR) region and MoPub doesn't obtain consent from the user, "keywords" will still be sent to the server. - * - */ -@property (nonatomic, copy) NSString *keywords; - -/** - * A string representing a set of personally identifiable keywords that should be passed to the MoPub ad server to receive - * more relevant advertising. - * - * Keywords are typically used to target ad campaigns at specific user segments. They should be - * formatted as comma-separated key-value pairs (e.g. "marital:single,age:24"). - * - * On the MoPub website, keyword targeting options can be found under the "Advanced Targeting" - * section when managing campaigns. - -* Note: If a user is in General Data Protection Regulation (GDPR) region and MoPub doesn't obtain consent from the user, "userDataKeywords" will not be sent to the server. - */ -@property (nonatomic, copy) NSString *userDataKeywords; - -/** - * A `CLLocation` object representing a user's location that should be passed to the MoPub ad server - * to receive more relevant advertising. - * @deprecated This API is deprecated and will be removed in a future version. - */ -@property (nonatomic, copy) CLLocation *location __attribute__((deprecated("This API is deprecated and will be removed in a future version."))); - -/** - * An optional dictionary containing extra local data. - */ -@property (nonatomic, copy) NSDictionary *localExtras; - -/** @name Loading a Banner Ad */ - -/** - * Requests a new ad from the MoPub ad server with a maximum desired ad size equal to - * the size of the current @c bounds of this view. - * - * If the ad view is already loading an ad, this call will be ignored. You may use `forceRefreshAd` - * if you would like cancel any existing ad requests and force a new ad to load. - */ -- (void)loadAd; - -/** - * Requests a new ad from the MoPub ad server with the specified maximum desired ad size. - * - * If the ad view is already loading an ad, this call will be ignored. You may use `forceRefreshAd` - * if you would like cancel any existing ad requests and force a new ad to load. - * - * @param size The maximum desired ad size to request. You may specify this value manually, - * or use one of the presets found in @c MPConstants.h for the most common types of maximum ad sizes. - * If using @c kMPPresetMaxAdSizeMatchFrame, the frame will be used as the maximum ad size. - */ -- (void)loadAdWithMaxAdSize:(CGSize)size; - -/** - * Cancels any existing ad requests and requests a new ad from the MoPub ad server - * using the previously loaded maximum desired ad size. - */ -- (void)forceRefreshAd; - -/** @name Handling Orientation Changes */ - -/** - * Informs the ad view that the device orientation has changed. - * - * Banners from some third-party ad networks have orientation-specific behavior. You should call - * this method when your application's orientation changes if you want mediated ads to acknowledge - * their new orientation. - * - * If your application layout needs to change based on the size of the mediated ad, you may want to - * check the value of `adContentViewSize` after calling this method, in case the orientation change - * causes the mediated ad to resize. - * - * @param newOrientation The new interface orientation (after orientation changes have occurred). - */ -- (void)rotateToOrientation:(UIInterfaceOrientation)newOrientation; - -/** - * Forces third-party native ad networks to only use ads sized for the specified orientation. - * - * Banners from some third-party ad networks have orientation-specific behaviors and/or sizes. - * You may use this method to lock ads to a certain orientation. For instance, - * if you call this with MPInterfaceOrientationPortrait, native networks will never - * return ads sized for the landscape orientation. - * - * @param orientation An MPNativeAdOrientation enum value. - * - *
typedef enum {
- *          MPNativeAdOrientationAny,
- *          MPNativeAdOrientationPortrait,
- *          MPNativeAdOrientationLandscape
- *      } MPNativeAdOrientation;
- * 
- * - * @see unlockNativeAdsOrientation - * @see allowedNativeAdsOrientation - */ -- (void)lockNativeAdsToOrientation:(MPNativeAdOrientation)orientation; - -/** - * Allows third-party native ad networks to use ads sized for any orientation. - * - * You do not need to call this method unless you have previously called - * `lockNativeAdsToOrientation:`. - * - * @see lockNativeAdsToOrientation: - * @see allowedNativeAdsOrientation - */ -- (void)unlockNativeAdsOrientation; - -/** - * Returns the banner orientations that third-party ad networks are allowed to use. - * - * @return An enum value representing an allowed set of orientations. - * - * @see lockNativeAdsToOrientation: - * @see unlockNativeAdsOrientation - */ -- (MPNativeAdOrientation)allowedNativeAdsOrientation; - -/** @name Obtaining the Size of the Current Ad */ - -/** - * Returns the size of the current ad being displayed in the ad view. - * - * Ad sizes may vary between different ad networks. This method returns the actual size of the - * underlying mediated ad. This size may be different from the original, initialized size of the - * ad view. You may use this size to determine to adjust the size or positioning of the ad view - * to avoid clipping or border issues. - * - * @returns The size of the underlying mediated ad. - */ -- (CGSize)adContentViewSize; - -/** @name Managing the Automatic Refreshing of Ads */ - -/** - * Stops the ad view from periodically loading new advertisements. - * - * By default, an ad view is allowed to automatically load new advertisements if a refresh interval - * has been configured on the MoPub website. This method prevents new ads from automatically loading, - * even if a refresh interval has been specified. - * - * As a best practice, you should call this method whenever the ad view will be hidden from the user - * for any period of time, in order to avoid unnecessary ad requests. You can then call - * `startAutomaticallyRefreshingContents` to re-enable the refresh behavior when the ad view becomes - * visible. - * - * @see startAutomaticallyRefreshingContents - */ -- (void)stopAutomaticallyRefreshingContents; - -/** - * Causes the ad view to periodically load new advertisements in accordance with user-defined - * refresh settings on the MoPub website. - * - * Calling this method is only necessary if you have previously stopped the ad view's refresh - * behavior using `stopAutomaticallyRefreshingContents`. By default, an ad view is allowed to - * automatically load new advertisements if a refresh interval has been configured on the MoPub - * website. This method has no effect if a refresh interval has not been set. - * - * @see stopAutomaticallyRefreshingContents - */ -- (void)startAutomaticallyRefreshingContents; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPAdView.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPAdView.m deleted file mode 100644 index 3706617adf..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPAdView.m +++ /dev/null @@ -1,303 +0,0 @@ -// -// MPAdView.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPAdView.h" -#import "MoPub+Utility.h" -#import "MPAdTargeting.h" -#import "MPBannerAdManager.h" -#import "MPBannerAdManagerDelegate.h" -#import "MPClosableView.h" -#import "MPCoreInstanceProvider.h" -#import "MPError.h" -#import "MPGlobal.h" -#import "MPImpressionTrackedNotification.h" -#import "MPLogging.h" - -@interface MPAdView () - -@property (nonatomic, strong) MPBannerAdManager *adManager; -@property (nonatomic, weak) UIView *adContentView; -@property (nonatomic, assign) MPNativeAdOrientation allowedNativeAdOrientation; - -@end - -@implementation MPAdView - -#pragma mark - -#pragma mark Lifecycle - -- (id)initWithAdUnitId:(NSString *)adUnitId -{ - if (self = [super initWithFrame:CGRectZero]) - { - self.backgroundColor = [UIColor clearColor]; - self.clipsToBounds = YES; - self.maxAdSize = kMPPresetMaxAdSizeMatchFrame; - self.allowedNativeAdOrientation = MPNativeAdOrientationAny; - self.adUnitId = (adUnitId) ? adUnitId : DEFAULT_PUB_ID; - self.adManager = [[MPBannerAdManager alloc] initWithDelegate:self]; - self.userInteractionEnabled = NO; - } - return self; -} - -- (id)initWithAdUnitId:(NSString *)adUnitId size:(CGSize)size -{ - MPAdView * adView = [self initWithAdUnitId:adUnitId]; - adView.frame = ({ - CGRect frame = adView.frame; - frame.size = [MPAdView sizeForContainer:adView adSize:size adUnitId:adUnitId]; - frame; - }); - adView.maxAdSize = size; - return adView; -} - -- (void)dealloc -{ - self.adManager.delegate = nil; -} - -- (void)layoutSubviews -{ - [super layoutSubviews]; - - // Re-center the creative within this container only if the - // creative isn't MRAID. - if (!self.adManager.isMraidAd) { - // Calculate the center using the bounds instead of the center property since bases its - // center relative its superview which may not be correct. - CGPoint center = CGPointMake(floorf(self.bounds.size.width / 2.0), floorf(self.bounds.size.height / 2.0)); - self.adContentView.center = center; - } -} - -#pragma mark - - -- (void)setAdContentView:(UIView *)view -{ - [self.adContentView removeFromSuperview]; - _adContentView = view; - - if (view != nil) { - [self addSubview:view]; - [self setNeedsLayout]; - - self.userInteractionEnabled = YES; - } - else { - self.userInteractionEnabled = NO; - } -} - -- (CGSize)adContentViewSize -{ - // MPClosableView represents an MRAID ad. - if (!self.adContentView || [self.adContentView isKindOfClass:[MPClosableView class]]) { - return [MPAdView sizeForContainer:self adSize:self.maxAdSize adUnitId:self.adUnitId]; - } else { - return self.adContentView.bounds.size; - } -} - -- (void)rotateToOrientation:(UIInterfaceOrientation)newOrientation -{ - [self.adManager rotateToOrientation:newOrientation]; -} - -- (void)loadAd -{ - [self.adManager loadAdWithTargeting: self.adTargeting]; -} - -- (void)loadAdWithMaxAdSize:(CGSize)size -{ - // Update the maximum desired ad size - self.maxAdSize = size; - - // Attempt to load an ad. - [self loadAd]; -} - -- (void)refreshAd -{ - [self loadAdWithMaxAdSize:self.maxAdSize]; -} - -- (void)forceRefreshAd -{ - [self.adManager forceRefreshAd]; -} - -- (void)stopAutomaticallyRefreshingContents -{ - [self.adManager stopAutomaticallyRefreshingContents]; -} - -- (void)startAutomaticallyRefreshingContents -{ - [self.adManager startAutomaticallyRefreshingContents]; -} - -- (void)lockNativeAdsToOrientation:(MPNativeAdOrientation)orientation -{ - self.allowedNativeAdOrientation = orientation; -} - -- (void)unlockNativeAdsOrientation -{ - self.allowedNativeAdOrientation = MPNativeAdOrientationAny; -} - -- (MPNativeAdOrientation)allowedNativeAdsOrientation -{ - return self.allowedNativeAdOrientation; -} - -#pragma mark - Sizing - -/** - Hydrates an ad size to an explicit ad size in points for a given ad container. - If the size is already explicit, nothing will happen. - @param container Container view for the ad - @param adSize Ad size to rehydrate - @param adUnitId Ad unit ID used for logging purposes - @return Rehydrated ad size - */ -+ (CGSize)sizeForContainer:(UIView * _Nullable)container adSize:(CGSize)adSize adUnitId:(NSString * _Nullable)adUnitId -{ - // Hydrating an ad size means resolving the `kMPFlexibleAdSize` value - // into it's final size value based upon the container bounds. - CGSize hydratedAdSize = adSize; - - // Hydrate the width. - if (adSize.width == kMPFlexibleAdSize) { - // Frame hasn't been set, issue a warning. - if (container.bounds.size.width == 0) { - MPLogEvent * event = [MPLogEvent error:[NSError frameWidthNotSetForFlexibleSize] message:nil]; - [MPLogging logEvent:event source:adUnitId fromClass:self.class]; - } - - hydratedAdSize.width = container.bounds.size.width; - } - - if (adSize.height == kMPFlexibleAdSize) { - // Frame hasn't been set, issue a warning. - if (container.bounds.size.height == 0) { - MPLogEvent * event = [MPLogEvent error:[NSError frameHeightNotSetForFlexibleSize] message:nil]; - [MPLogging logEvent:event source:adUnitId fromClass:self.class]; - } - - hydratedAdSize.height = container.bounds.size.height; - } - - return hydratedAdSize; -} - -#pragma mark - - -- (MPAdView *)banner -{ - return self; -} - -- (id)bannerDelegate -{ - return self.delegate; -} - -- (CGSize)containerSize -{ - return [MPAdView sizeForContainer:self adSize:self.maxAdSize adUnitId:self.adUnitId]; -} - -- (UIViewController *)viewControllerForPresentingModalView -{ - return [self.delegate viewControllerForPresentingModalView]; -} - -- (MPAdTargeting *)adTargeting { - // Generate the explicit creative safe area size. - CGSize realSize = [MPAdView sizeForContainer:self adSize:self.maxAdSize adUnitId:self.adUnitId]; - - // Build the targeting information - MPAdTargeting * targeting = [MPAdTargeting targetingWithCreativeSafeSize:realSize]; - targeting.keywords = self.keywords; - targeting.localExtras = self.localExtras; - targeting.userDataKeywords = self.userDataKeywords; - - return targeting; -} - -- (void)invalidateContentView -{ - [self setAdContentView:nil]; -} - -- (void)managerDidFailToLoadAdWithError:(NSError *)error -{ - if ([self.delegate respondsToSelector:@selector(adViewDidFailToLoadAd:)]) { - // make sure we are not released synchronously as objects owned by us - // may do additional work after this callback - [[MPCoreInstanceProvider sharedProvider] keepObjectAliveForCurrentRunLoopIteration:self]; -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wdeprecated-declarations" - [self.delegate adViewDidFailToLoadAd:self]; -#pragma GCC diagnostic pop - } - if ([self.delegate respondsToSelector:@selector(adView:didFailToLoadAdWithError:)]) { - // make sure we are not released synchronously as objects owned by us - // may do additional work after this callback - [[MPCoreInstanceProvider sharedProvider] keepObjectAliveForCurrentRunLoopIteration:self]; - [self.delegate adView:self didFailToLoadAdWithError:error]; - } -} - -- (void)managerDidLoadAd:(UIView *)ad -{ - [self setAdContentView:ad]; - if ([self.delegate respondsToSelector:@selector(adViewDidLoadAd:)]) { -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wdeprecated-declarations" - [self.delegate adViewDidLoadAd:self]; -#pragma GCC diagnostic pop - } - - if ([self.delegate respondsToSelector:@selector(adViewDidLoadAd:adSize:)]) { - [self.delegate adViewDidLoadAd:self adSize:ad.bounds.size]; - } -} - -- (void)userActionWillBegin -{ - if ([self.delegate respondsToSelector:@selector(willPresentModalViewForAd:)]) { - [self.delegate willPresentModalViewForAd:self]; - } -} - -- (void)userActionDidFinish -{ - if ([self.delegate respondsToSelector:@selector(didDismissModalViewForAd:)]) { - [self.delegate didDismissModalViewForAd:self]; - } -} - -- (void)userWillLeaveApplication -{ - if ([self.delegate respondsToSelector:@selector(willLeaveApplicationFromAd:)]) { - [self.delegate willLeaveApplicationFromAd:self]; - } -} - -- (void)impressionDidFireWithImpressionData:(MPImpressionData *)impressionData { - [MoPub sendImpressionDelegateAndNotificationFromAd:self - adUnitID:self.adUnitId - impressionData:impressionData]; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPAdViewDelegate.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPAdViewDelegate.h deleted file mode 100644 index 5855d89982..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPAdViewDelegate.h +++ /dev/null @@ -1,115 +0,0 @@ -// -// MPAdViewDelegate.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPMoPubAd.h" - -@class MPAdView; - -/** - * The delegate of an `MPAdView` object must adopt the `MPAdViewDelegate` protocol. It must - * implement `viewControllerForPresentingModalView` to provide a root view controller from which - * the ad view should present modal content. - * - * Optional methods of this protocol allow the delegate to be notified of banner success or - * failure, as well as other lifecycle events. - */ - -@protocol MPAdViewDelegate - -@required - -/** @name Managing Modal Content Presentation */ - -/** - * Asks the delegate for a view controller to use for presenting modal content, such as the in-app - * browser that can appear when an ad is tapped. - * - * @return A view controller that should be used for presenting modal content. - */ -- (UIViewController *)viewControllerForPresentingModalView; - -@optional - -/** @name Detecting When a Banner Ad is Loaded */ - -/** - * Sent when an ad view successfully loads an ad. - * - * Your implementation of this method should insert the ad view into the view hierarchy, if you - * have not already done so. - * - * @param view The ad view sending the message. - */ -- (void)adViewDidLoadAd:(MPAdView *)view __attribute__((deprecated("Deprecated; please use adViewDidLoadAd:adSize: instead."))); - -/** - * Sent when an ad view successfully loads an ad. - * - * Your implementation of this method should insert the ad view into the view hierarchy, if you - * have not already done so. - * - * @param view The ad view sending the message. - * @param adSize The size of the ad that was successfully loaded. It is recommended to resize - * the @c MPAdView frame to match the height of the loaded ad. - */ -- (void)adViewDidLoadAd:(MPAdView *)view adSize:(CGSize)adSize; - -/** - * Sent when an ad view fails to load an ad. - * - * To avoid displaying blank ads, you should hide the ad view in response to this message. - * - * @param view The ad view sending the message. - */ -- (void)adViewDidFailToLoadAd:(MPAdView *)view __attribute__((deprecated("Deprecated; please use adView:didFailToLoadAdWithError: instead."))); - -/** - * Sent when an ad view fails to load an ad. - * - * To avoid displaying blank ads, you should hide the ad view in response to this message. - * - * @param view The ad view sending the message. - * @param error The error - */ -- (void)adView:(MPAdView *)view didFailToLoadAdWithError:(NSError *)error; - -/** @name Detecting When a User Interacts With the Ad View */ - -/** - * Sent when an ad view is about to present modal content. - * - * This method is called when the user taps on the ad view. Your implementation of this method - * should pause any application activity that requires user interaction. - * - * @param view The ad view sending the message. - * @see `didDismissModalViewForAd:` - */ -- (void)willPresentModalViewForAd:(MPAdView *)view; - -/** - * Sent when an ad view has dismissed its modal content, returning control to your application. - * - * Your implementation of this method should resume any application activity that was paused - * in response to `willPresentModalViewForAd:`. - * - * @param view The ad view sending the message. - * @see `willPresentModalViewForAd:` - */ -- (void)didDismissModalViewForAd:(MPAdView *)view; - -/** - * Sent when a user is about to leave your application as a result of tapping - * on an ad. - * - * Your application will be moved to the background shortly after this method is called. - * - * @param view The ad view sending the message. - */ -- (void)willLeaveApplicationFromAd:(MPAdView *)view; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPAdapterConfiguration.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPAdapterConfiguration.h deleted file mode 100644 index 86ed0bd606..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPAdapterConfiguration.h +++ /dev/null @@ -1,78 +0,0 @@ -// -// MPAdapterConfiguration.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@protocol MPAdapterConfiguration -@required -/** - The version of the adapter. - */ -@property (nonatomic, copy, readonly) NSString * adapterVersion; - -/** - An optional identity token used for ORTB bidding requests required for Advanced Bidding. - */ -@property (nonatomic, copy, readonly, nullable) NSString * biddingToken; - -/** - MoPub-specific name of the network. - @remark This value should correspond to `creative_network_name` in the dashboard. - */ -@property (nonatomic, copy, readonly) NSString * moPubNetworkName; - -/** - Optional dictionary of additional values to send along with every MoPub ad request - on behalf of the adapter. - */ -@property (nonatomic, readonly, nullable) NSDictionary * moPubRequestOptions; - -/** - The version of the underlying network SDK. - */ -@property (nonatomic, copy, readonly) NSString * networkSdkVersion; - -#pragma mark - Initialization - -/** - Initializes the underlying network SDK with a given set of initialization parameters. - @param configuration Optional set of JSON-codable configuration parameters that correspond specifically to the network. Only @c NSString, @c NSNumber, @c NSArray, and @c NSDictionary types are allowed. This value may be @c nil. - @param complete Optional completion block that is invoked when the underlying network SDK has completed initialization. This value may be @c nil. - @remarks Classes that implement this protocol must account for the possibility of @c initializeNetworkWithConfiguration:complete: being called multiple times. It is up to each individual adapter to determine whether re-initialization is allowed or not. - */ -- (void)initializeNetworkWithConfiguration:(NSDictionary * _Nullable)configuration - complete:(void(^ _Nullable)(NSError * _Nullable))complete; - -#pragma mark - MoPub Request Options - -/** - Adds entries into the managed @c moPubRequestOptions dictionary, overwriting any previously set - entries. - @param options Entries to add into @c moPubRequestOptions. This should not be @c nil. - */ -- (void)addMoPubRequestOptions:(NSDictionary *)options; - -#pragma mark - Caching - -/** - Updates the initialization parameters for the current network. - @param parameters New set of initialization parameters. Only @c NSString, @c NSNumber, @c NSArray, and @c NSDictionary types are allowed. Nothing will be done if @c nil is passed in. - */ -+ (void)setCachedInitializationParameters:(NSDictionary * _Nullable)parameters; - -/** - Retrieves the initialization parameters for the current network (if any). - @return The cached initialization parameters for the network. This may be @c nil if not parameters were found. - */ -+ (NSDictionary * _Nullable)cachedInitializationParameters; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPBannerCustomEvent.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPBannerCustomEvent.h deleted file mode 100644 index 9d00422e0b..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPBannerCustomEvent.h +++ /dev/null @@ -1,101 +0,0 @@ -// -// MPBannerCustomEvent.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPBannerCustomEventDelegate.h" - -/** - * The MoPub iOS SDK mediates third party Ad Networks using custom events. The custom events are - * responsible for instantiating and manipulating objects in the third party SDK and translating - * and communicating events from those objects back to the MoPub SDK by notifying a delegate. - * - * `MPBannerCustomEvent` is a base class for custom events that support banners. By implementing - * subclasses of `MPBannerCustomEvent` you can enable the MoPub SDK to natively support a wide - * variety of third-party ad networks. - * - * At runtime, the MoPub SDK will find and instantiate an `MPBannerCustomEvent` subclass as needed and - * invoke its `-requestAdWithSize:customEventInfo:` method. - */ - -@interface MPBannerCustomEvent : NSObject - -/** @name Requesting a Banner Ad */ - -/** - * Called when the MoPub SDK requires a new banner ad. - * - * When the MoPub SDK receives a response indicating it should load a custom event, it will send - * this message to your custom event class. Your implementation of this method can either load a - * banner ad from a third-party ad network, or execute any application code. It must also notify the - * `MPBannerCustomEventDelegate` of certain lifecycle events. - * - * @param size The current size of the parent `MPAdView`. You should use this information to create - * and request a banner of the appropriate size. - * - * @param info A dictionary containing additional custom data associated with a given custom event - * request. This data is configurable on the MoPub website, and may be used to pass dynamic information, such as publisher IDs. - * - * @param adMarkup An optional ad markup to use. - */ -- (void)requestAdWithSize:(CGSize)size customEventInfo:(NSDictionary *)info adMarkup:(NSString *)adMarkup; - -/** @name Callbacks */ - -/** - * Called when a banner rotation should occur. - * - * If you call `-rotateToOrientation` on an `MPAdView`, it will forward the message to its custom event. - * You can implement this method for third-party ad networks that have special behavior when - * orientation changes happen. - * - * @param newOrientation The `UIInterfaceOrientation` passed to the `MPAdView`'s `rotateToOrientation` method. - * - */ -- (void)rotateToOrientation:(UIInterfaceOrientation)newOrientation; - -/** - * Calld when the banner is presented on screen. - * - * If you decide to [opt out of automatic impression tracking](enableAutomaticImpressionAndClickTracking), you should place your - * manual calls to [-trackImpression]([MPBannerCustomEventDelegate trackImpression]) in this method to ensure correct metrics. - */ -- (void)didDisplayAd; - -/** @name Impression and Click Tracking */ - -/** - * Override to opt out of automatic impression and click tracking. - * - * By default, the MPBannerCustomEventDelegate will automatically record impressions and clicks in - * response to the appropriate callbacks. You may override this behavior by implementing this method - * to return `NO`. - * - * @warning **Important**: If you do this, you are responsible for calling the `[-trackImpression]([MPBannerCustomEventDelegate trackImpression])` and - * `[-trackClick]([MPBannerCustomEventDelegate trackClick])` methods on the custom event delegate. Additionally, you should make sure that these - * methods are only called **once** per ad. - * - */ -- (BOOL)enableAutomaticImpressionAndClickTracking; - -/** @name Communicating with the MoPub SDK */ - -/** - * The `MPBannerCustomEventDelegate` to send messages to as events occur. - * - * The `delegate` object defines several methods that you should call in order to inform both MoPub - * and your `MPAdView`'s delegate of the progress of your custom event. - * - */ -@property (nonatomic, weak) id delegate; - -/** - * An optional dictionary containing extra local data. - */ -@property (nonatomic, copy) NSDictionary *localExtras; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPBannerCustomEvent.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPBannerCustomEvent.m deleted file mode 100644 index 9875c1ffb3..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPBannerCustomEvent.m +++ /dev/null @@ -1,38 +0,0 @@ -// -// MPBannerCustomEvent.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPBannerCustomEvent.h" - -@implementation MPBannerCustomEvent - -- (void)requestAdWithSize:(CGSize)size customEventInfo:(NSDictionary *)info adMarkup:(NSString *)adMarkup -{ - // The default implementation of this method does nothing. Subclasses must override this method - // and implement code to load a banner here. -} - -- (void)didDisplayAd -{ - // The default implementation of this method does nothing. Subclasses may override this method - // to be notified when the ad is actually displayed on screen. -} - -- (BOOL)enableAutomaticImpressionAndClickTracking -{ - // Subclasses may override this method to return NO to perform impression and click tracking - // manually. - return YES; -} - -- (void)rotateToOrientation:(UIInterfaceOrientation)newOrientation -{ - // The default implementation of this method does nothing. Subclasses may override this method - // to be notified when the parent MPAdView receives -rotateToOrientation: calls. -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPBannerCustomEventDelegate.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPBannerCustomEventDelegate.h deleted file mode 100644 index 1e2a732451..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPBannerCustomEventDelegate.h +++ /dev/null @@ -1,154 +0,0 @@ -// -// MPBannerCustomEventDelegate.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import - -@class MPBannerCustomEvent; - -/** - * Instances of your custom subclass of `MPBannerCustomEvent` will have an `MPBannerCustomEventDelegate` delegate. - * You use this delegate to communicate events ad events back to the MoPub SDK. - * - * When mediating a third party ad network it is important to call as many of these methods - * as accurately as possible. Not all ad networks support all these events, and some support - * different events. It is your responsibility to find an appropriate mapping betwen the ad - * network's events and the callbacks defined on `MPBannerCustomEventDelegate`. - */ - -@protocol MPBannerCustomEventDelegate - -/** - * The view controller instance to use when presenting modals. - * - * @return `viewControllerForPresentingModalView` returns the same view controller that you - * specify when implementing the `MPAdViewDelegate` protocol. - */ -- (UIViewController *)viewControllerForPresentingModalView; - -/** - * The user's current location. - * - * @return This method provides the location that was passed into the parent `MPAdView`. The MoPub - * SDK does **not** automatically request the user's location. It is your responsibility to pass the location - * into `MPAdView`. - * - * You may use this to inform third-party ad networks of the user's location. - * - * @deprecated This API is deprecated and will be removed in a future version. - */ -- (CLLocation *)location __attribute__((deprecated("This API is deprecated and will be removed in a future version."))); - -/** @name Banner Ad Event Callbacks - Fetching Ads */ - -/** - * Call this method immediately after an ad loads succesfully. - * - * @param event You should pass `self` to allow the MoPub SDK to associate this event with the correct - * instance of your custom event. - * - * @param ad The `UIView` representing the banner ad. This view will be inserted into the `MPAdView` - * and presented to the user by the MoPub SDK. - * - * @warning **Important**: Your custom event subclass **must** call this method when it successfully loads an ad. - * Failure to do so will disrupt the mediation waterfall and cause future ad requests to stall. - */ -- (void)bannerCustomEvent:(MPBannerCustomEvent *)event didLoadAd:(UIView *)ad; - -/** - * Call this method immediately after an ad fails to load. - * - * @param event You should pass `self` to allow the MoPub SDK to associate this event with the correct - * instance of your custom event. - * - * @param error (*optional*) You may pass an error describing the failure. - * - * @warning **Important**: Your custom event subclass **must** call this method when it fails to load an ad. - * Failure to do so will disrupt the mediation waterfall and cause future ad requests to stall. - */ -- (void)bannerCustomEvent:(MPBannerCustomEvent *)event didFailToLoadAdWithError:(NSError *)error; - -/** @name Banner Ad Event Callbacks - User Interaction */ - -/** - * Call this method when the user taps on the banner ad. - * - * This method is optional. When automatic click and impression tracking is enabled (the default) - * this method will track a click (the click is guaranteed to only be tracked once per ad). - * - * @param event You should pass `self` to allow the MoPub SDK to associate this event with the correct - * instance of your custom event. - * - * @warning **Important**: If you call `-bannerCustomEventWillBeginAction:`, you _**must**_ also call - * `-bannerCustomEventDidFinishAction:` at a later point. - */ -- (void)bannerCustomEventWillBeginAction:(MPBannerCustomEvent *)event; - -/** - * Call this method when the user finishes interacting with the banner ad. - * - * For example, the user may have dismissed any modal content. This method is optional. - * - * @param event You should pass `self` to allow the MoPub SDK to associate this event with the correct - * instance of your custom event. - * - * @warning **Important**: If you call `-bannerCustomEventWillBeginAction:`, you _**must**_ also call - * `-bannerCustomEventDidFinishAction:` at a later point. - */ -- (void)bannerCustomEventDidFinishAction:(MPBannerCustomEvent *)event; - -/** - * Call this method when the banner ad will cause the user to leave the application. - * - * For example, the user may have tapped on a link to visit the App Store or Safari. - * - * @param event You should pass `self` to allow the MoPub SDK to associate this event with the correct - * instance of your custom event. - * - */ -- (void)bannerCustomEventWillLeaveApplication:(MPBannerCustomEvent *)event; - -/** @name Impression and Click Tracking */ - -/** - * Call this method to track an impression. - * - * @warning **Important**: You should **only** call this method if you have [opted out of automatic click and impression tracking]([MPBannerCustomEvent enableAutomaticImpressionAndClickTracking]). - * By default the MoPub SDK automatically tracks impressions. - * - * **Important**: In order to obtain accurate metrics, it is your responsibility to call `trackImpression` only **once** per ad. - */ -- (void)trackImpression; - -/** - * Call this method to track a click. - * - * @warning **Important**: You should **only** call this method if you have [opted out of automatic click and impression tracking]([MPBannerCustomEvent enableAutomaticImpressionAndClickTracking]). - * By default the MoPub SDK automatically tracks clicks. - * - * **Important**: In order to obtain accurate metrics, it is your responsibility to call `trackClick` only **once** per ad. - */ -- (void)trackClick; - -/** - * Call this method when the banner ad is expanding or resizing from its default size. - * - * @param event You should pass `self` to allow the MoPub SDK to associate this event with the correct - * instance of your custom event. - */ -- (void)bannerCustomEventWillExpandAd:(MPBannerCustomEvent *)event; - -/** - * Call this method when the banner ad is collapsing back to its default size. - * - * @param event You should pass `self` to allow the MoPub SDK to associate this event with the correct - * instance of your custom event. - */ -- (void)bannerCustomEventDidCollapseAd:(MPBannerCustomEvent *)event; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPBaseAdapterConfiguration.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPBaseAdapterConfiguration.h deleted file mode 100644 index 465f4388c5..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPBaseAdapterConfiguration.h +++ /dev/null @@ -1,81 +0,0 @@ -// -// MPBaseAdapterConfiguration.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPAdapterConfiguration.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - Base class for adapter information providers that provides built-in initialization - caching support. - @remarks Subclasses MUST implement all required fields from the @c MPAdapterConfiguration protocol. - */ -@interface MPBaseAdapterConfiguration : NSObject - -/** - The version of the adapter. - */ -@property (nonatomic, copy, readonly) NSString * adapterVersion; - -/** - An optional identity token used for ORTB bidding requests required for Advanced Bidding. - */ -@property (nonatomic, copy, readonly, nullable) NSString * biddingToken; - -/** - MoPub-specific name of the network. - @remark This value should correspond to `creative_network_name` in the dashboard. - */ -@property (nonatomic, copy, readonly) NSString * moPubNetworkName; - -/** - Optional dictionary of additional values to send along with every MoPub ad request - on behalf of the adapter. - @remarks This base class will manage this property and will provide accessors methods @c addMoPubRequestOption:value: - and @c removeMoPubRequestOption: to add and remove entries from the options. Overriding this property may - cause unintended data loss. - */ -@property (nonatomic, readonly, nullable) NSDictionary * moPubRequestOptions; - -/** - The version of the underlying network SDK. - */ -@property (nonatomic, copy, readonly) NSString * networkSdkVersion; - -/** - Initializes the underlying network SDK with a given set of initialization parameters. - @param configuration Optional set of JSON-codable configuration parameters that correspond specifically to the network. Only @c NSString, @c NSNumber, @c NSArray, and @c NSDictionary types are allowed. This value may be @c nil. - @param complete Optional completion block that is invoked when the underlying network SDK has completed initialization. This value may be @c nil. - @remarks Classes that implement this protocol must account for the possibility of @c initializeNetworkWithConfiguration:complete: being called multiple times. It is up to each individual adapter to determine whether re-initialization is allowed or not. - */ -- (void)initializeNetworkWithConfiguration:(NSDictionary * _Nullable)configuration - complete:(void(^ _Nullable)(NSError * _Nullable))complete; - -/** - Adds entries into the managed @c moPubRequestOptions dictionary, overwriting any previously set - entries. - @param options Entries to add into @c moPubRequestOptions. This should not be @c nil. - */ -- (void)addMoPubRequestOptions:(NSDictionary *)options; - -/** - Updates the initialization parameters for the current network. - @param parameters New set of initialization parameters. Only @c NSString, @c NSNumber, @c NSArray, and @c NSDictionary types are allowed. Nothing will be done if @c nil is passed in. - */ -+ (void)setCachedInitializationParameters:(NSDictionary * _Nullable)parameters; - -/** - Retrieves the initialization parameters for the current network (if any). - @return The cached initialization parameters for the network. This may be @c nil if not parameters were found. - */ -+ (NSDictionary * _Nullable)cachedInitializationParameters; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPBaseAdapterConfiguration.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPBaseAdapterConfiguration.m deleted file mode 100644 index 3ca0fa157e..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPBaseAdapterConfiguration.m +++ /dev/null @@ -1,62 +0,0 @@ -// -// MPBaseAdapterConfiguration.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPBaseAdapterConfiguration.h" -#import "MPMediationManager.h" - -@interface MPBaseAdapterConfiguration() -@property (nonatomic, readonly) NSMutableDictionary * internalMopubRequestOptions; -@end - -@implementation MPBaseAdapterConfiguration -@dynamic adapterVersion; -@dynamic biddingToken; -@dynamic moPubNetworkName; -@dynamic networkSdkVersion; - -#pragma mark - Initialization - -- (instancetype)init { - if (self = [super init]) { - _internalMopubRequestOptions = [NSMutableDictionary dictionary]; - } - - return self; -} - -#pragma mark - MPAdapterConfiguration Default Implementations - -- (NSDictionary *)moPubRequestOptions { - return self.internalMopubRequestOptions; -} - -- (void)initializeNetworkWithConfiguration:(NSDictionary * _Nullable)configuration - complete:(void(^ _Nullable)(NSError * _Nullable))complete { - if (complete != nil) { - complete(nil); - } -} - -- (void)addMoPubRequestOptions:(NSDictionary *)options { - // No entries to add - if (options == nil) { - return; - } - - [self.internalMopubRequestOptions addEntriesFromDictionary:options]; -} - -+ (void)setCachedInitializationParameters:(NSDictionary * _Nullable)params { - [MPMediationManager.sharedManager setCachedInitializationParameters:params forNetwork:self.class]; -} - -+ (NSDictionary * _Nullable)cachedInitializationParameters { - return [MPMediationManager.sharedManager cachedInitializationParametersForNetwork:self.class]; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPBool.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPBool.h deleted file mode 100644 index c607a805a0..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPBool.h +++ /dev/null @@ -1,27 +0,0 @@ -// -// MPBool.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -/** - Tri-state boolean. - */ -typedef NS_ENUM(NSInteger, MPBool) { - /** - No - */ - MPBoolNo = -1, - - /** - Unknown - */ - MPBoolUnknown = 0, - - /** - Yes - */ - MPBoolYes = 1, -}; diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPConsentChangedNotification.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPConsentChangedNotification.h deleted file mode 100644 index 369f30bea1..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPConsentChangedNotification.h +++ /dev/null @@ -1,34 +0,0 @@ -// -// MPConsentChangedNotification.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -/** - Notification fired whenever the current consent status has changed. The payload - will be included in the @NSNotification.userInfo dictionary. - */ -extern NSString * const kMPConsentChangedNotification; - -/** - The new consent state; represented as a @c MPConsentStatus value wrapped - in a @c NSNumber. - */ -extern NSString * const kMPConsentChangedInfoNewConsentStatusKey; - -/** - The previous consent state; represented as a @c MPConsentStatus value wrapped - in a @c NSNumber. - */ -extern NSString * const kMPConsentChangedInfoPreviousConsentStatusKey; - -/** - Boolean flag indicating that it is okay to collection any personally - identifiable information; represented as a @c BOOL value wrapped in - a @c NSNumber. - */ -extern NSString * const kMPConsentChangedInfoCanCollectPersonalInfoKey; diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPConsentChangedNotification.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPConsentChangedNotification.m deleted file mode 100644 index 3aaf285fc7..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPConsentChangedNotification.m +++ /dev/null @@ -1,19 +0,0 @@ -// -// MPConsentChangedNotification.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPConsentChangedNotification.h" - -#pragma mark - NSNotification Name - -NSString * const kMPConsentChangedNotification = @"com.mopub.mopub-ios-sdk.notification.consent.changed"; - -#pragma mark - NSNotification userInfo Keys - -NSString * const kMPConsentChangedInfoNewConsentStatusKey = @"newConsentStatus"; -NSString * const kMPConsentChangedInfoPreviousConsentStatusKey = @"previousConsentStatus"; -NSString * const kMPConsentChangedInfoCanCollectPersonalInfoKey = @"canCollectPersonalInfo"; diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPConsentChangedReason.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPConsentChangedReason.h deleted file mode 100644 index 57b0f32f60..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPConsentChangedReason.h +++ /dev/null @@ -1,24 +0,0 @@ -// -// MPConsentChangedReason.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -extern NSString * const kConsentedChangedReasonGranted; -extern NSString * const kConsentedChangedReasonWhitelistGranted; -extern NSString * const kConsentedChangedReasonPotentialWhitelist; -extern NSString * const kConsentedChangedReasonDenied; -extern NSString * const kConsentedChangedReasonPublisherDenied; -extern NSString * const kConsentedChangedReasonDoNotTrackEnabled; -extern NSString * const kConsentedChangedReasonDoNotTrackDisabled; -extern NSString * const kConsentedChangedReasonDoNotTrackDisabledNeedConsent; -extern NSString * const kConsentedChangedReasonIfaChanged; -extern NSString * const kConsentedChangedReasonPrivacyPolicyChange; -extern NSString * const kConsentedChangedReasonVendorListChange; -extern NSString * const kConsentedChangedReasonIabVendorListChange; -extern NSString * const kConsentedChangedReasonServerDeniedConsent; -extern NSString * const kConsentedChangedReasonServerForceInvalidate; diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPConsentChangedReason.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPConsentChangedReason.m deleted file mode 100644 index a273ad4f54..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPConsentChangedReason.m +++ /dev/null @@ -1,25 +0,0 @@ -// -// MPConsentChangedReason.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPConsentChangedReason.h" - -// Human readable descriptions of why consent changed. -NSString * const kConsentedChangedReasonGranted = @"Consent was explicitly granted by the user"; -NSString * const kConsentedChangedReasonWhitelistGranted = @"Consent was explicitly granted by a whitelisted publisher"; -NSString * const kConsentedChangedReasonPotentialWhitelist = @"Consent was explicitly granted by a publisher who is not whitelisted"; -NSString * const kConsentedChangedReasonDenied = @"Consent was explicitly denied by the user"; -NSString * const kConsentedChangedReasonPublisherDenied = @"Consent was explicitly denied by the publisher"; -NSString * const kConsentedChangedReasonDoNotTrackEnabled = @"Limit ad tracking was enabled and consent implicitly denied by the user"; -NSString * const kConsentedChangedReasonDoNotTrackDisabled = @"Limit ad tracking was disabled"; -NSString * const kConsentedChangedReasonDoNotTrackDisabledNeedConsent = @"Consent needs to be reacquired because the user disabled limit ad tracking"; -NSString * const kConsentedChangedReasonIfaChanged = @"Consent needs to be reacquired because the IFA has changed"; -NSString * const kConsentedChangedReasonPrivacyPolicyChange = @"Consent needs to be reacquired because the privacy policy has changed"; -NSString * const kConsentedChangedReasonVendorListChange = @"Consent needs to be reacquired because the vendor list has changed"; -NSString * const kConsentedChangedReasonIabVendorListChange = @"Consent needs to be reacquired because the IAB vendor list has changed"; -NSString * const kConsentedChangedReasonServerDeniedConsent = @"Consent was revoked by the server"; -NSString * const kConsentedChangedReasonServerForceInvalidate = @"Server requires that consent needs to be reacquired"; diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPConsentError.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPConsentError.h deleted file mode 100644 index c97874ebf3..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPConsentError.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// MPConsentError.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -static NSString * const kConsentErrorDomain = @"com.mopub.mopub-ios-sdk.consent"; - -/** - Error codes related to consent management. - */ -typedef NS_ENUM(NSUInteger, MPConsentErrorCode) { - MPConsentErrorCodeLimitAdTrackingEnabled = 1, - MPConsentErrorCodeFailedToParseSynchronizationResponse, - MPConsentErrorCodeGDPRIsNotApplicable, -}; diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPConsentStatus.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPConsentStatus.h deleted file mode 100644 index e559e7fc55..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPConsentStatus.h +++ /dev/null @@ -1,43 +0,0 @@ -// -// MPConsentStatus.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -/** - Personally identifiable information (PII) consent status. - PII is allowed to be collected only if @c MPConsentStatus is @c MPConsentStatusConsented. - In all other cases, PII is not allowed to be collected. - */ -typedef NS_ENUM(NSInteger, MPConsentStatus) { - /** - Status is unknown. Either the status is currently updating or - @c initializeSdkWithConfiguration:completion: has not been called. - */ - MPConsentStatusUnknown = 0, - - /** - Consent is denied. - */ - MPConsentStatusDenied, - - /** - Advertiser tracking is disabled. - */ - MPConsentStatusDoNotTrack, - - /** - A potentially whitelisted publisher has attempted to grant consent on - the user's behalf. - */ - MPConsentStatusPotentialWhitelist, - - /** - Consented. - */ - MPConsentStatusConsented -}; diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPConstants.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPConstants.h deleted file mode 100644 index 046159993b..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPConstants.h +++ /dev/null @@ -1,55 +0,0 @@ -// -// MPConstants.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -#define MP_HAS_NATIVE_PACKAGE 1 - -#define DEFAULT_PUB_ID @"agltb3B1Yi1pbmNyDAsSBFNpdGUYkaoMDA" -#define MP_SERVER_VERSION @"8" -#define MP_REWARDED_API_VERSION @"1" -#define MP_BUNDLE_IDENTIFIER @"com.mopub.mopub" -#define MP_SDK_VERSION @"5.12.0" - -// Sizing constants. -extern CGSize const MOPUB_BANNER_SIZE __attribute__((deprecated("Use kMPPresetMaxAdSizeMatchFrame, kMPPresetMaxAdSizeMatchFrame, kMPPresetMaxAdSize50Height, kMPPresetMaxAdSizeBanner90Height, kMPPresetMaxAdSize90Height, kMPPresetMaxAdSize250Height, kMPPresetMaxAdSize280Height, or a custom maximum desired ad area instead"))); -extern CGSize const MOPUB_MEDIUM_RECT_SIZE __attribute__((deprecated("Use kMPPresetMaxAdSizeMatchFrame, kMPPresetMaxAdSizeMatchFrame, kMPPresetMaxAdSize50Height, kMPPresetMaxAdSizeBanner90Height, kMPPresetMaxAdSize90Height, kMPPresetMaxAdSize250Height, kMPPresetMaxAdSize280Height, or a custom maximum desired ad area instead"))); -extern CGSize const MOPUB_LEADERBOARD_SIZE __attribute__((deprecated("Use kMPPresetMaxAdSizeMatchFrame, kMPPresetMaxAdSizeMatchFrame, kMPPresetMaxAdSize50Height, kMPPresetMaxAdSizeBanner90Height, kMPPresetMaxAdSize90Height, kMPPresetMaxAdSize250Height, kMPPresetMaxAdSize280Height, or a custom maximum desired ad area instead"))); -extern CGSize const MOPUB_WIDE_SKYSCRAPER_SIZE __attribute__((deprecated("Use kMPPresetMaxAdSizeMatchFrame, kMPPresetMaxAdSizeMatchFrame, kMPPresetMaxAdSize50Height, kMPPresetMaxAdSizeBanner90Height, kMPPresetMaxAdSize90Height, kMPPresetMaxAdSize250Height, kMPPresetMaxAdSize280Height, or a custom maximum desired ad area instead"))); - -// Convenience presets for requesting maximum ad sizes. -// Custom maximum ad sizes can be requested using an explicit `CGSize`. -extern CGSize const kMPPresetMaxAdSizeMatchFrame; -extern CGSize const kMPPresetMaxAdSize50Height; -extern CGSize const kMPPresetMaxAdSize90Height; -extern CGSize const kMPPresetMaxAdSize250Height; -extern CGSize const kMPPresetMaxAdSize280Height; - -/** - Constant denoting that the dimension should be flexible with respect to - the container. - */ -extern CGFloat const kMPFlexibleAdSize; - -// Miscellaneous constants. -#define MINIMUM_REFRESH_INTERVAL 10.0 -#define DEFAULT_BANNER_REFRESH_INTERVAL 60 // seconds -#define BANNER_TIMEOUT_INTERVAL 10 // seconds -#define INTERSTITIAL_TIMEOUT_INTERVAL 30 // seconds -#define REWARDED_VIDEO_TIMEOUT_INTERVAL 30 // seconds -#define NATIVE_TIMEOUT_INTERVAL 10 // seconds -#define MOPUB_ADS_EXPIRATION_INTERVAL 14400 // 4 hours converted to seconds - -// Feature Flags -#define SESSION_TRACKING_ENABLED 1 - -@interface MPConstants : NSObject - -+ (NSTimeInterval)adsExpirationInterval; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPConstants.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPConstants.m deleted file mode 100644 index 4235cb991c..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPConstants.m +++ /dev/null @@ -1,30 +0,0 @@ -// -// MPConstants.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPConstants.h" - -CGFloat const kMPFlexibleAdSize = -1.0f; - -CGSize const MOPUB_BANNER_SIZE = { .width = 320.0f, .height = 50.0f }; -CGSize const MOPUB_MEDIUM_RECT_SIZE = { .width = 300.0f, .height = 250.0f }; -CGSize const MOPUB_LEADERBOARD_SIZE = { .width = 728.0f, .height = 90.0f }; -CGSize const MOPUB_WIDE_SKYSCRAPER_SIZE = { .width = 160.0f, .height = 600.0f }; - -CGSize const kMPPresetMaxAdSizeMatchFrame = { .width = kMPFlexibleAdSize, .height = kMPFlexibleAdSize }; -CGSize const kMPPresetMaxAdSize50Height = { .width = kMPFlexibleAdSize, .height = 50.0f }; -CGSize const kMPPresetMaxAdSize90Height = { .width = kMPFlexibleAdSize, .height = 90.0f }; -CGSize const kMPPresetMaxAdSize250Height = { .width = kMPFlexibleAdSize, .height = 250.0f }; -CGSize const kMPPresetMaxAdSize280Height = { .width = kMPFlexibleAdSize, .height = 280.0f }; - -@implementation MPConstants - -+ (NSTimeInterval)adsExpirationInterval { - return MOPUB_ADS_EXPIRATION_INTERVAL; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPEngineInfo.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPEngineInfo.h deleted file mode 100644 index 90558a6ad7..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPEngineInfo.h +++ /dev/null @@ -1,51 +0,0 @@ -// -// MPEngineInfo.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - SDK Engine information specifying the wrapper name and version for the MoPub SDK. - */ -@interface MPEngineInfo : NSObject -/** - Name of the engine using the MoPub SDK. This field is @c nil for platform native integrations. - */ -@property (nonatomic, copy, readonly, nullable) NSString * name; - -/** - Version of the engine using the MoPub SDK. This field is @c nil for platform native integrations. - */ -@property (nonatomic, copy, readonly, nullable) NSString * version; - -/** - Required initializer - @param name Name of the engine using the MoPub SDK. - @param version Version of the engine using the MoPub SDK. - @return An initialized instance of the engine information. - */ -- (instancetype)initWithName:(NSString *)name version:(NSString *)version; - -/** - Required initializer - @param name Name of the engine using the MoPub SDK. - @param version Version of the engine using the MoPub SDK. - @return An initialized instance of the engine information. - */ -+ (instancetype)named:(NSString *)name version:(NSString *)version; - -#pragma mark - Disallowed Initializers - -- (instancetype)init NS_UNAVAILABLE; - -+ (instancetype)new NS_UNAVAILABLE; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPEngineInfo.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPEngineInfo.m deleted file mode 100644 index 4b1f32d18f..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPEngineInfo.m +++ /dev/null @@ -1,55 +0,0 @@ -// -// MPEngineInfo.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPEngineInfo.h" -#import "MPAdServerKeys.h" - -@implementation MPEngineInfo - -- (instancetype)initWithName:(NSString *)name version:(NSString *)version { - // Both name and version are required fields. - if (name.length == 0 || version.length == 0) { - return nil; - } - - if (self = [super init]) { - _name = name; - _version = version; - } - - return self; -} - -+ (instancetype)named:(NSString *)name version:(NSString *)version { - return [[MPEngineInfo alloc] initWithName:name version:version]; -} - -#pragma mark - NSCoding - -- (instancetype)initWithCoder:(NSCoder *)coder { - // Validate that the required parameters exist. - NSString * name = [coder decodeObjectForKey:kSDKEngineNameKey]; - NSString * version = [coder decodeObjectForKey:kSDKEngineVersionKey]; - if (name.length == 0 || version.length == 0) { - return nil; - } - - return [self initWithName:name version:version]; -} - -- (void)encodeWithCoder:(NSCoder *)coder { - if (self.name.length > 0) { - [coder encodeObject:self.name forKey:kSDKEngineNameKey]; - } - - if (self.version.length > 0) { - [coder encodeObject:self.version forKey:kSDKEngineVersionKey]; - } -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPImpressionData.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPImpressionData.h deleted file mode 100644 index d30e7ae60a..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPImpressionData.h +++ /dev/null @@ -1,46 +0,0 @@ -// -// MPImpressionData.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -typedef NS_ENUM(NSInteger, MPImpressionDataPrecision) { - MPImpressionDataPrecisionUnknown = 0, - MPImpressionDataPrecisionExact, - MPImpressionDataPrecisionEstimated, - MPImpressionDataPrecisionPublisherDefined, - MPImpressionDataPrecisionUndisclosed, -}; - -@interface MPImpressionData : NSObject - -- (instancetype)initWithDictionary:(NSDictionary *)impressionDataDictionary NS_DESIGNATED_INITIALIZER; -- (instancetype)init NS_UNAVAILABLE; - -@property (nonatomic, copy, readonly) NSNumber * _Nullable publisherRevenue; -@property (nonatomic, copy, readonly) NSString * _Nullable impressionID; -@property (nonatomic, copy, readonly) NSString * _Nullable adUnitID; -@property (nonatomic, copy, readonly) NSString * _Nullable adUnitName; -@property (nonatomic, copy, readonly) NSString * _Nullable adUnitFormat; -@property (nonatomic, copy, readonly) NSString * _Nullable currency; -@property (nonatomic, copy, readonly) NSString * _Nullable adGroupID; -@property (nonatomic, copy, readonly) NSString * _Nullable adGroupName; -@property (nonatomic, copy, readonly) NSString * _Nullable adGroupType; -@property (nonatomic, copy, readonly) NSNumber * _Nullable adGroupPriority; -@property (nonatomic, copy, readonly) NSString * _Nullable country; -@property (nonatomic, assign, readonly) MPImpressionDataPrecision precision; -@property (nonatomic, copy, readonly) NSString * _Nullable networkName; -@property (nonatomic, copy, readonly) NSString * _Nullable networkPlacementID; -@property (nonatomic, copy, readonly) NSString * _Nullable appVersion; - -@property (nonatomic, copy, readonly) NSData * _Nullable jsonRepresentation; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPImpressionData.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPImpressionData.m deleted file mode 100644 index fc913d84c9..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPImpressionData.m +++ /dev/null @@ -1,208 +0,0 @@ -// -// MPImpressionData.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPImpressionData.h" -#import "MPAdServerKeys.h" - -static NSString * const kPrecisionOptionPublisherDefinedKey = @"publisher_defined"; -static NSString * const kPrecisionOptionExactKey = @"exact"; -static NSString * const kPrecisionOptionEstimatedKey = @"estimated"; -static NSString * const kPrecisionOptionUndisclosedKey = @"undisclosed"; - -@interface MPImpressionData () - -@property (nonatomic, assign, readwrite) MPImpressionDataPrecision precision; -@property (nonatomic, copy, readwrite) NSData * jsonRepresentation; - -@property (nonatomic, copy) NSDictionary * impressionDataDictionary; -@property (nonatomic, assign) BOOL isPrecisionSet; - -@end - -@implementation MPImpressionData - -- (instancetype)initWithDictionary:(NSDictionary *)impressionDataDictionary { - if (self = [super init]) { - _impressionDataDictionary = impressionDataDictionary; - } - - return self; -} - -/* - @c impressionDataDictionary must be stored for the purposes of assembling the JSON - (in case ad server includes fields that this model class doesn't know about), so since - dictionary reads are O(1) and the property values are already stored in the dictionary, - just override the property getters and return values from the dictionary, rather than - storing duplicates of the values in memory. - */ - -- (NSString *)impressionID { - return [self nullableImpressionDataObjectForKey:kImpressionDataImpressionIDKey]; -} - -- (NSString *)adUnitID { - return [self nullableImpressionDataObjectForKey:kImpressionDataAdUnitIDKey]; -} - -- (NSString *)adUnitName { - return [self nullableImpressionDataObjectForKey:kImpressionDataAdUnitNameKey]; -} - -- (NSString *)adUnitFormat { - return [self nullableImpressionDataObjectForKey:kImpressionDataAdUnitFormatKey]; -} - -- (NSString *)adGroupID { - return [self nullableImpressionDataObjectForKey:kImpressionDataAdGroupIDKey]; -} - -- (NSString *)adGroupName { - return [self nullableImpressionDataObjectForKey:kImpressionDataAdGroupNameKey]; -} - -- (NSString *)adGroupType { - return [self nullableImpressionDataObjectForKey:kImpressionDataAdGroupTypeKey]; -} - -- (NSNumber *)adGroupPriority { - return [self nullableImpressionDataObjectForKey:kImpressionDataAdGroupPriorityKey]; -} - -- (NSString *)currency { - return [self nullableImpressionDataObjectForKey:kImpressionDataCurrencyKey]; -} - -- (NSString *)country { - return [self nullableImpressionDataObjectForKey:kImpressionDataCountryKey]; -} - -- (NSString *)networkName { - return [self nullableImpressionDataObjectForKey:kImpressionDataNetworkNameKey]; -} - -- (NSString *)networkPlacementID { - return [self nullableImpressionDataObjectForKey:kImpressionDataNetworkPlacementIDKey]; -} - -- (NSString *)appVersion { - return [self nullableImpressionDataObjectForKey:kImpressionDataAppVersionKey]; -} - -- (NSNumber *)publisherRevenue { - return [self nullableImpressionDataObjectForKey:kImpressionDataPublisherRevenueKey]; -} - -- (MPImpressionDataPrecision)precision { - // Return the precision value if it was already set - if (self.isPrecisionSet) { - return _precision; - } - - // If not, set it - self.isPrecisionSet = YES; - - NSString * precisionString = [self nullableImpressionDataObjectForKey:kImpressionDataPrecisionKey]; - - // If the precision string is nil, the precision is unknown, and no other checks are required. - if (precisionString == nil) { - self.precision = MPImpressionDataPrecisionUnknown; - return _precision; - } - - // If the precision string is equal to some known string, the precision is known. Otherwise, it's unknown. - if ([precisionString isEqualToString:kPrecisionOptionExactKey]) { - self.precision = MPImpressionDataPrecisionExact; - } else if ([precisionString isEqualToString:kPrecisionOptionEstimatedKey]) { - self.precision = MPImpressionDataPrecisionEstimated; - } else if ([precisionString isEqualToString:kPrecisionOptionPublisherDefinedKey]) { - self.precision = MPImpressionDataPrecisionPublisherDefined; - } else if ([precisionString isEqualToString:kPrecisionOptionUndisclosedKey]) { - self.precision = MPImpressionDataPrecisionUndisclosed; - } else { - self.precision = MPImpressionDataPrecisionUnknown; - } - - return _precision; -} - -// This method gets the object for the @c key given from @c impressionDataDictionary. If the object is of type @c NSNull, this method returns @c nil. -// This way, getters will return @c nil for null JSON values. This method does not mutate the dictionary to remove @c NSNull objects. -- (id)nullableImpressionDataObjectForKey:(id)key { - id object = self.impressionDataDictionary[key]; - - if ([object isKindOfClass:[NSNull class]]) { - return nil; - } - - return object; -} - -- (NSData *)jsonRepresentation { - // If the JSON representation was already computed, do not do it again. - if (_jsonRepresentation != nil) { - return _jsonRepresentation; - } - - // If this is the first time accessing the JSON representation, compute it. - NSError * error = nil; - NSData * jsonData = [NSJSONSerialization dataWithJSONObject:self.impressionDataDictionary - options:0 - error:&error]; - if (error == nil) { - self.jsonRepresentation = jsonData; - } - - return _jsonRepresentation; -} - -- (NSString *)description { - NSString * precisionString; - switch (self.precision) { - case MPImpressionDataPrecisionExact: - precisionString = kPrecisionOptionExactKey; - break; - case MPImpressionDataPrecisionEstimated: - precisionString = kPrecisionOptionEstimatedKey; - break; - case MPImpressionDataPrecisionPublisherDefined: - precisionString = kPrecisionOptionPublisherDefinedKey; - break; - case MPImpressionDataPrecisionUndisclosed: - precisionString = kPrecisionOptionUndisclosedKey; - break; - default: - precisionString = nil; - break; - } - - NSDictionary * jsonRepresentationDeserialized = [NSJSONSerialization JSONObjectWithData:self.jsonRepresentation - options:0 - error:nil]; - - return [NSString stringWithFormat:@"Impression Data %@:\n\nImpression ID: %@\nApp Version: %@\nPublisher Revenue: %@\nCurrency: %@\nAd Unit ID: %@\nAd Unit Name: %@\nAd Unit Format: %@\nAd Group ID: %@\nAd Group Name: %@\nAd Group Type: %@\nAd Group Priority: %@\nPrecision: %@\nCountry: %@\nNetwork Name: %@\nNetwork Placement ID: %@\n\nJSON Representation:\n%@", - [super description], - self.impressionID, - self.appVersion, - self.publisherRevenue, - self.currency, - self.adUnitID, - self.adUnitName, - self.adUnitFormat, - self.adGroupID, - self.adGroupName, - self.adGroupType, - self.adGroupPriority, - precisionString, - self.country, - self.networkName, - self.networkPlacementID, - jsonRepresentationDeserialized]; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPImpressionTrackedNotification.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPImpressionTrackedNotification.h deleted file mode 100644 index 76ffa53fd5..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPImpressionTrackedNotification.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// MPImpressionTrackedNotification.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -/** - Notification fired when an impression is tracked. The adunit ID will always be - included in the @c NSNotification.userData dictionary. If the server returned - impression data, the @c MPImpressionData object will be included in the - @c NSNotification.userData dictionary. The sender can be determined by - querying @c NSNotification.object. - */ -extern NSString * const kMPImpressionTrackedNotification; - -/** - The @c MPImpressionData object for the given impression, or @c nil if the server did not send - impression data with this impression. - */ -extern NSString * const kMPImpressionTrackedInfoImpressionDataKey; - -/** - The adunit ID associated with the impression. - */ -extern NSString * const kMPImpressionTrackedInfoAdUnitIDKey; diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPImpressionTrackedNotification.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPImpressionTrackedNotification.m deleted file mode 100644 index 65b09edbff..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPImpressionTrackedNotification.m +++ /dev/null @@ -1,18 +0,0 @@ -// -// MPImpressionTrackedNotification.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPImpressionTrackedNotification.h" - -#pragma mark - NSNotification Name - -NSString * const kMPImpressionTrackedNotification = @"com.mopub.impression-notification.impression-received"; - -#pragma mark - NSNotification userInfo Keys - -NSString * const kMPImpressionTrackedInfoImpressionDataKey = @"com.mopub.impression-notification.userinfo.impression-data"; -NSString * const kMPImpressionTrackedInfoAdUnitIDKey = @"com.mopub.impression-notification.userinfo.adunit-id"; diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPInterstitialAdController.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPInterstitialAdController.h deleted file mode 100644 index 7b7f015763..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPInterstitialAdController.h +++ /dev/null @@ -1,153 +0,0 @@ -// -// MPInterstitialAdController.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import -#import "MPInterstitialAdControllerDelegate.h" - -/** - * The `MPInterstitialAdController` class provides a full-screen advertisement that can be - * displayed during natural transition points in your application. - */ - -@interface MPInterstitialAdController : NSObject - -/** @name Obtaining an Interstitial Ad */ - -/** - * Returns an interstitial ad object matching the given ad unit ID. - * - * The first time this method is called for a given ad unit ID, a new interstitial ad object is - * created, stored in a shared pool, and returned. Subsequent calls for the same ad unit ID will - * return that object, unless you have disposed of the object using - * `removeSharedInterstitialAdController:`. - * - * There can only be one interstitial object for an ad unit ID at a given time. - * - * @param adUnitId A string representing a MoPub ad unit ID. - */ -+ (MPInterstitialAdController *)interstitialAdControllerForAdUnitId:(NSString *)adUnitId; - -/** @name Setting and Getting the Delegate */ - -/** - * The delegate (`MPInterstitialAdControllerDelegate`) of the interstitial ad object. - */ -@property (nonatomic, weak) id delegate; - -/** @name Setting Request Parameters */ - -/** - * The MoPub ad unit ID for this interstitial ad. - * - * Ad unit IDs are created on the MoPub website. An ad unit is a defined placement in your - * application set aside for advertising. If no ad unit ID is set, the ad object will use a default - * ID that only receives test ads. - */ -@property (nonatomic, copy) NSString *adUnitId; - -/** - * A string representing a set of non-personally identifiable keywords that should be passed to the MoPub ad server to receive - * more relevant advertising. - - * Note: If a user is in General Data Protection Regulation (GDPR) region and MoPub doesn't obtain consent from the user, "keywords" will still be sent to the server. - * - */ -@property (nonatomic, copy) NSString *keywords; - -/** - * A string representing a set of personally identifiable keywords that should be passed to the MoPub ad server to receive - * more relevant advertising. - * - * Keywords are typically used to target ad campaigns at specific user segments. They should be - * formatted as comma-separated key-value pairs (e.g. "marital:single,age:24"). - * - * On the MoPub website, keyword targeting options can be found under the "Advanced Targeting" - * section when managing campaigns. - * - * Note: If a user is in General Data Protection Regulation (GDPR) region and MoPub doesn't obtain consent from the user, personally identifiable keywords will not be sent to the server. - */ -@property (nonatomic, copy) NSString *userDataKeywords; - -/** - * A `CLLocation` object representing a user's location that should be passed to the MoPub ad server - * to receive more relevant advertising. - * @deprecated This API is deprecated and will be removed in a future version. - */ -@property (nonatomic, copy) CLLocation *location __attribute__((deprecated("This API is deprecated and will be removed in a future version."))); - -/** - * An optional dictionary containing extra local data. - */ -@property (nonatomic, copy) NSDictionary *localExtras; - -/** @name Loading an Interstitial Ad */ - -/** - * Begins loading ad content for the interstitial. - * - * You can implement the `interstitialDidLoadAd:` and `interstitialDidFailToLoadAd:` methods of - * `MPInterstitialAdControllerDelegate` if you would like to be notified as loading succeeds or - * fails. - */ -- (void)loadAd; - -/** @name Detecting Whether the Interstitial Ad Has Loaded */ - -/** - * A Boolean value that represents whether the interstitial ad has loaded an advertisement and is - * ready to be presented. - * - * After obtaining an interstitial ad object, you can use `loadAd` to tell the object to begin - * loading ad content. Once the content has been loaded, the value of this property will be YES. - * - * The value of this property can be NO if the ad content has not finished loading, has already - * been presented, or has expired. The expiration condition only applies for ads from certain - * third-party ad networks. See `MPInterstitialAdControllerDelegate` for more details. - */ -@property (nonatomic, assign, readonly) BOOL ready; - -/** @name Presenting an Interstitial Ad */ - -/** - * Presents the interstitial ad modally from the specified view controller. - * - * This method will do nothing if the interstitial ad has not been loaded (i.e. the value of its - * `ready` property is NO). - * - * `MPInterstitialAdControllerDelegate` provides optional methods that you may implement to stay - * informed about when an interstitial takes over or relinquishes the screen. - * - * @param controller The view controller that should be used to present the interstitial ad. - */ -- (void)showFromViewController:(UIViewController *)controller; - -/** @name Disposing of an Interstitial Ad */ - -/** - * Removes the given interstitial object from the shared pool of interstitials available to your - * application. - * - * This method removes the mapping from the interstitial's ad unit ID to the interstitial ad - * object. In other words, you will receive a different ad object if you subsequently call - * `interstitialAdControllerForAdUnitId:` for the same ad unit ID. - * - * @warning **Important**: This method is intended to be used for deallocating the interstitial - * ad object when it is no longer needed. You should `nil` out any references you have to the - * object after calling this method. - * - * @param controller The interstitial ad object that should be disposed. - */ -+ (void)removeSharedInterstitialAdController:(MPInterstitialAdController *)controller; - -/* - * Returns the shared pool of interstitial objects for your application. - */ -+ (NSMutableArray *)sharedInterstitialAdControllers DEPRECATED_MSG_ATTRIBUTE("This functionality will be removed in a future SDK release."); - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPInterstitialAdController.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPInterstitialAdController.m deleted file mode 100644 index e2f637ec2e..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPInterstitialAdController.m +++ /dev/null @@ -1,198 +0,0 @@ -// -// MPInterstitialAdController.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPInterstitialAdController.h" -#import "MoPub+Utility.h" -#import "MPAdTargeting.h" -#import "MPGlobal.h" -#import "MPImpressionTrackedNotification.h" -#import "MPInterstitialAdManager.h" -#import "MPInterstitialAdManagerDelegate.h" -#import "MPLogging.h" - -@interface MPInterstitialAdController () - -@property (nonatomic, strong) MPInterstitialAdManager *manager; - -+ (NSMutableDictionary *)sharedInterstitials; -- (id)initWithAdUnitId:(NSString *)adUnitId; - -@end - -@implementation MPInterstitialAdController - -- (id)initWithAdUnitId:(NSString *)adUnitId -{ - if (self = [super init]) { - self.manager = [[MPInterstitialAdManager alloc] initWithDelegate:self]; - self.adUnitId = adUnitId; - } - return self; -} - -- (void)dealloc -{ - [self.manager setDelegate:nil]; -} - -#pragma mark - Public - -+ (MPInterstitialAdController *)interstitialAdControllerForAdUnitId:(NSString *)adUnitId -{ - NSMutableDictionary *interstitials = [[self class] sharedInterstitials]; - - @synchronized(self) { - // Find the correct ad controller based on the ad unit ID. - MPInterstitialAdController * interstitial = interstitials[adUnitId]; - - // Create a new ad controller for this ad unit ID if one doesn't already exist. - if (interstitial == nil) { - interstitial = [[[self class] alloc] initWithAdUnitId:adUnitId]; - interstitials[adUnitId] = interstitial; - } - - return interstitial; - } -} - -- (BOOL)ready -{ - return self.manager.ready; -} - -- (void)loadAd -{ - MPAdTargeting * targeting = [MPAdTargeting targetingWithCreativeSafeSize:MPApplicationFrame(YES).size]; - targeting.keywords = self.keywords; - targeting.localExtras = self.localExtras; - targeting.userDataKeywords = self.userDataKeywords; - - [self.manager loadInterstitialWithAdUnitID:self.adUnitId targeting:targeting]; -} - -- (void)showFromViewController:(UIViewController *)controller -{ - if (!controller) { - MPLogInfo(@"The interstitial could not be shown: " - @"a nil view controller was passed to -showFromViewController:."); - return; - } - - if (![controller.view.window isKeyWindow]) { - MPLogInfo(@"Attempted to present an interstitial ad in non-key window. The ad may not render properly"); - } - - [self.manager presentInterstitialFromViewController:controller]; -} - -#pragma mark - Internal - -+ (NSMutableDictionary *)sharedInterstitials -{ - static NSMutableDictionary *sharedInterstitials; - - @synchronized(self) { - if (!sharedInterstitials) { - sharedInterstitials = [NSMutableDictionary dictionary]; - } - } - - return sharedInterstitials; -} - -#pragma mark - MPInterstitialAdManagerDelegate - -- (MPInterstitialAdController *)interstitialAdController -{ - return self; -} - -- (id)interstitialDelegate -{ - return self.delegate; -} - -- (void)managerDidLoadInterstitial:(MPInterstitialAdManager *)manager -{ - if ([self.delegate respondsToSelector:@selector(interstitialDidLoadAd:)]) { - [self.delegate interstitialDidLoadAd:self]; - } -} - -- (void)manager:(MPInterstitialAdManager *)manager - didFailToLoadInterstitialWithError:(NSError *)error -{ - if ([self.delegate respondsToSelector:@selector(interstitialDidFailToLoadAd:withError:)]) { - [self.delegate interstitialDidFailToLoadAd:self withError:error]; - } else if ([self.delegate respondsToSelector:@selector(interstitialDidFailToLoadAd:)]) { - [self.delegate interstitialDidFailToLoadAd:self]; - } -} - -- (void)managerWillPresentInterstitial:(MPInterstitialAdManager *)manager -{ - if ([self.delegate respondsToSelector:@selector(interstitialWillAppear:)]) { - [self.delegate interstitialWillAppear:self]; - } -} - -- (void)managerDidPresentInterstitial:(MPInterstitialAdManager *)manager -{ - if ([self.delegate respondsToSelector:@selector(interstitialDidAppear:)]) { - [self.delegate interstitialDidAppear:self]; - } -} - -- (void)managerWillDismissInterstitial:(MPInterstitialAdManager *)manager -{ - if ([self.delegate respondsToSelector:@selector(interstitialWillDisappear:)]) { - [self.delegate interstitialWillDisappear:self]; - } -} - -- (void)managerDidDismissInterstitial:(MPInterstitialAdManager *)manager -{ - if ([self.delegate respondsToSelector:@selector(interstitialDidDisappear:)]) { - [self.delegate interstitialDidDisappear:self]; - } -} - -- (void)managerDidExpireInterstitial:(MPInterstitialAdManager *)manager -{ - if ([self.delegate respondsToSelector:@selector(interstitialDidExpire:)]) { - [self.delegate interstitialDidExpire:self]; - } -} - -- (void)managerDidReceiveTapEventFromInterstitial:(MPInterstitialAdManager *)manager -{ - if ([self.delegate respondsToSelector:@selector(interstitialDidReceiveTapEvent:)]) { - [self.delegate interstitialDidReceiveTapEvent:self]; - } -} - -- (void)interstitialAdManager:(MPInterstitialAdManager *)manager didReceiveImpressionEventWithImpressionData:(MPImpressionData *)impressionData { - [MoPub sendImpressionDelegateAndNotificationFromAd:self - adUnitID:self.adUnitId - impressionData:impressionData]; -} - -+ (NSMutableArray *)sharedInterstitialAdControllers -{ - return [NSMutableArray arrayWithArray:[[self class] sharedInterstitials].allValues]; -} - -+ (void)removeSharedInterstitialAdController:(MPInterstitialAdController *)controller -{ - @synchronized(self) { - NSMutableDictionary * sharedInterstitials = [[self class] sharedInterstitials]; - [sharedInterstitials removeObjectForKey:controller.adUnitId]; - } -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPInterstitialAdControllerDelegate.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPInterstitialAdControllerDelegate.h deleted file mode 100644 index 19480f5e4b..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPInterstitialAdControllerDelegate.h +++ /dev/null @@ -1,119 +0,0 @@ -// -// MPInterstitialAdControllerDelegate.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPMoPubAd.h" - -@class MPInterstitialAdController; - -/** - * The delegate of an `MPInterstitialAdController` object must adopt the - * `MPInterstitialAdControllerDelegate` protocol. - * - * The optional methods of this protocol allow the delegate to be notified of interstitial state - * changes, such as when an ad has loaded, when an ad has been presented or dismissed from the - * screen, and when an ad has expired. - */ - -@protocol MPInterstitialAdControllerDelegate - -@optional - -/** @name Detecting When an Interstitial Ad is Loaded */ - -/** - * Sent when an interstitial ad object successfully loads an ad. - * - * @param interstitial The interstitial ad object sending the message. - */ -- (void)interstitialDidLoadAd:(MPInterstitialAdController *)interstitial; - -/** - * Sent when an interstitial ad object fails to load an ad. - * - * @param interstitial The interstitial ad object sending the message. - */ -- (void)interstitialDidFailToLoadAd:(MPInterstitialAdController *)interstitial; - -/** - * Sent when an interstitial ad object fails to load an ad. - * - * @param interstitial The interstitial ad object sending the message. - * @param error The error that occurred during the load. - */ -- (void)interstitialDidFailToLoadAd:(MPInterstitialAdController *)interstitial - withError:(NSError *)error; - -/** @name Detecting When an Interstitial Ad is Presented */ - -/** - * Sent immediately before an interstitial ad object is presented on the screen. - * - * Your implementation of this method should pause any application activity that requires user - * interaction. - * - * @param interstitial The interstitial ad object sending the message. - */ -- (void)interstitialWillAppear:(MPInterstitialAdController *)interstitial; - -/** - * Sent after an interstitial ad object has been presented on the screen. - * - * @param interstitial The interstitial ad object sending the message. - */ -- (void)interstitialDidAppear:(MPInterstitialAdController *)interstitial; - -/** @name Detecting When an Interstitial Ad is Dismissed */ - -/** - * Sent immediately before an interstitial ad object will be dismissed from the screen. - * - * @param interstitial The interstitial ad object sending the message. - */ -- (void)interstitialWillDisappear:(MPInterstitialAdController *)interstitial; - -/** - * Sent after an interstitial ad object has been dismissed from the screen, returning control - * to your application. - * - * Your implementation of this method should resume any application activity that was paused - * prior to the interstitial being presented on-screen. - * - * @param interstitial The interstitial ad object sending the message. - */ -- (void)interstitialDidDisappear:(MPInterstitialAdController *)interstitial; - -/** @name Detecting When an Interstitial Ad Expires */ - -/** - * Sent when a loaded interstitial ad is no longer eligible to be displayed. - * - * Interstitial ads from certain networks may expire their content at any time, - * even if the content is currently on-screen. This method notifies you when the currently- - * loaded interstitial has expired and is no longer eligible for display. - * - * If the ad was on-screen when it expired, you can expect that the ad will already have been - * dismissed by the time this message is sent. - * - * Your implementation may include a call to `loadAd` to fetch a new ad, if desired. - * - * @param interstitial The interstitial ad object sending the message. - */ -- (void)interstitialDidExpire:(MPInterstitialAdController *)interstitial; - -/** - * Sent when the user taps the interstitial ad and the ad is about to perform its target action. - * - * This action may include displaying a modal or leaving your application. Certain ad networks - * may not expose a "tapped" callback so you should not rely on this callback to perform - * critical tasks. - * - * @param interstitial The interstitial ad object sending the message. - */ -- (void)interstitialDidReceiveTapEvent:(MPInterstitialAdController *)interstitial; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPInterstitialCustomEvent.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPInterstitialCustomEvent.h deleted file mode 100644 index 2069c1ec91..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPInterstitialCustomEvent.h +++ /dev/null @@ -1,92 +0,0 @@ -// -// MPInterstitialCustomEvent.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPInterstitialCustomEventDelegate.h" - -/** - * The MoPub iOS SDK mediates third party Ad Networks using custom events. The custom events are - * responsible for instantiating and manipulating objects in the third party SDK and translating - * and communicating events from those objects back to the MoPub SDK by notifying a delegate. - * - * `MPInterstitialCustomEvent` is a base class for custom events that support full-screen interstitial ads. - * By implementing subclasses of `MPInterstitialCustomEvent` you can enable the MoPub SDK to - * natively support a wide variety of third-party ad networks. - * - * At runtime, the MoPub SDK will find and instantiate an `MPInterstitialCustomEvent` subclass as needed and - * invoke its `-requestInterstitialWithCustomEventInfo:` method. - */ - - -@interface MPInterstitialCustomEvent : NSObject - -/** @name Requesting and Displaying an Interstitial Ad */ - -/** - * Called when the MoPub SDK requires a new interstitial ad. - * - * When the MoPub SDK receives a response indicating it should load a custom event, it will send - * this message to your custom event class. Your implementation of this method should load an - * interstitial ad from a third-party ad network. It must also notify the - * `MPInterstitialCustomEventDelegate` of certain lifecycle events. - * - * @param info A dictionary containing additional custom data associated with a given custom event - * request. This data is configurable on the MoPub website, and may be used to pass dynamic information, such as publisher IDs. - * @param adMarkup An optional ad markup to use. - */ - -- (void)requestInterstitialWithCustomEventInfo:(NSDictionary *)info adMarkup:(NSString *)adMarkup; - -/** - * Called when the interstitial should be displayed. - * - * This message is sent sometime after an interstitial has been successfully loaded, as a result - * of your code calling `-[MPInterstitialAdController showFromViewController:]`. Your implementation - * of this method should present the interstitial ad from the specified view controller. - * - * If you decide to [opt out of automatic impression tracking](enableAutomaticImpressionAndClickTracking), you should place your - * manual calls to [-trackImpression]([MPInterstitialCustomEventDelegate trackImpression]) in this method to ensure correct metrics. - * - * @param rootViewController The controller to use to present the interstitial modally. - * - */ -- (void)showInterstitialFromRootViewController:(UIViewController *)rootViewController; - -/** @name Impression and Click Tracking */ - -/** - * Override to opt out of automatic impression and click tracking. - * - * By default, the MPInterstitialCustomEventDelegate will automatically record impressions and clicks in - * response to the appropriate callbacks. You may override this behavior by implementing this method - * to return `NO`. - * - * @warning **Important**: If you do this, you are responsible for calling the `[-trackImpression]([MPInterstitialCustomEventDelegate trackImpression])` and - * `[-trackClick]([MPInterstitialCustomEventDelegate trackClick])` methods on the custom event delegate. Additionally, you should make sure that these - * methods are only called **once** per ad. - */ -- (BOOL)enableAutomaticImpressionAndClickTracking; - -/** @name Communicating with the MoPub SDK */ - -/** - * The `MPInterstitialCustomEventDelegate` to send messages to as events occur. - * - * The `delegate` object defines several methods that you should call in order to inform both MoPub - * and your `MPInterstitialAdController`'s delegate of the progress of your custom event. - * - */ - -@property (nonatomic, weak) id delegate; - -/** - * An optional dictionary containing extra local data. - */ -@property (nonatomic, copy) NSDictionary *localExtras; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPInterstitialCustomEvent.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPInterstitialCustomEvent.m deleted file mode 100644 index e26bcfe365..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPInterstitialCustomEvent.m +++ /dev/null @@ -1,32 +0,0 @@ -// -// MPInterstitialCustomEvent.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPInterstitialCustomEvent.h" - -@implementation MPInterstitialCustomEvent - -- (void)requestInterstitialWithCustomEventInfo:(NSDictionary *)info adMarkup:(NSString *)adMarkup -{ - // The default implementation of this method does nothing. Subclasses must override this method - // and implement code to load an interstitial here. -} - -- (BOOL)enableAutomaticImpressionAndClickTracking -{ - // Subclasses may override this method to return NO to perform impression and click tracking - // manually. - return YES; -} - -- (void)showInterstitialFromRootViewController:(UIViewController *)rootViewController -{ - // The default implementation of this method does nothing. Subclasses must override this method - // and implement code to display an interstitial here. -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPInterstitialCustomEventDelegate.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPInterstitialCustomEventDelegate.h deleted file mode 100644 index c4a5105e0c..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPInterstitialCustomEventDelegate.h +++ /dev/null @@ -1,184 +0,0 @@ -// -// MPInterstitialCustomEventDelegate.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import - -@class MPInterstitialCustomEvent; - -/** - * Instances of your custom subclass of `MPInterstitialCustomEvent` will have an `MPInterstitialCustomEventDelegate` delegate. - * You use this delegate to communicate events ad events back to the MoPub SDK. - * - * When mediating a third party ad network it is important to call as many of these methods - * as accurately as possible. Not all ad networks support all these events, and some support - * different events. It is your responsibility to find an appropriate mapping betwen the ad - * network's events and the callbacks defined on `MPInterstitialCustomEventDelegate`. - */ - -@protocol MPInterstitialCustomEventDelegate - -/** - * The user's current location. - * - * @return This method provides the location that was passed into the parent `MPInterstitialAdController`. The MoPub - * SDK does **not** automatically request the user's location. It is your responsibility to pass the location - * into `MPInterstitialAdController`. - * - * You may use this to inform third-party ad networks of the user's location. - */ -- (CLLocation *)location; - -/** @name Interstitial Ad Event Callbacks - Fetching Ads */ - -/** - * Call this method immediately after an ad loads succesfully. - * - * @param customEvent You should pass `self` to allow the MoPub SDK to associate this event with the correct - * instance of your custom event. - * - * @param ad (*optional*) An object that represents the ad that was retrieved. The MoPub SDK does not - * do anything with this optional parameter. - * - * @warning **Important**: Your custom event subclass **must** call this method when it successfully loads an ad. - * Failure to do so will disrupt the mediation waterfall and cause future ad requests to stall. - */ -- (void)interstitialCustomEvent:(MPInterstitialCustomEvent *)customEvent - didLoadAd:(id)ad; - -/** - * Call this method immediately after an ad fails to load. - * - * @param customEvent You should pass `self` to allow the MoPub SDK to associate this event with the correct - * instance of your custom event. - * - * @param error (*optional*) You may pass an error describing the failure. - * - * @warning **Important**: Your custom event subclass **must** call this method when it fails to load an ad. - * Failure to do so will disrupt the mediation waterfall and cause future ad requests to stall. - */ -- (void)interstitialCustomEvent:(MPInterstitialCustomEvent *)customEvent - didFailToLoadAdWithError:(NSError *)error; - -/** - * Call this method if a previously loaded interstitial should no longer be eligible for presentation. - * - * Some third-party networks will mark interstitials as expired (indicating they should not be - * presented) *after* they have loaded. You may use this method to inform the MoPub SDK that a - * previously loaded interstitial has expired and that a new interstitial should be obtained. - * - * @param customEvent You should pass `self` to allow the MoPub SDK to associate this event with the correct - * instance of your custom event. - */ -- (void)interstitialCustomEventDidExpire:(MPInterstitialCustomEvent *)customEvent; - -/** @name Interstitial Ad Event Callbacks - Presenting and Dismissing Ads */ - -/** - * Call this method when an ad is about to appear. - * - * @param customEvent You should pass `self` to allow the MoPub SDK to associate this event with the correct - * instance of your custom event. - * - * @warning **Important**: Your custom event subclass **must** call this method when it is about to present the interstitial. - * Failure to do so will disrupt the mediation waterfall and cause future ad requests to stall. - * - */ -- (void)interstitialCustomEventWillAppear:(MPInterstitialCustomEvent *)customEvent; - -/** - * Call this method when an ad has finished appearing. - * - * @param customEvent You should pass `self` to allow the MoPub SDK to associate this event with the correct - * instance of your custom event. - * - * @warning **Important**: Your custom event subclass **must** call this method when it is finished presenting the interstitial. - * Failure to do so will disrupt the mediation waterfall and cause future ad requests to stall. - * - * **Note**: if it is not possible to know when the interstitial *finished* appearing, you should call - * this immediately after calling `-interstitialCustomEventWillAppear:`. - */ -- (void)interstitialCustomEventDidAppear:(MPInterstitialCustomEvent *)customEvent; - -/** - * Call this method when an ad is about to disappear. - * - * @param customEvent You should pass `self` to allow the MoPub SDK to associate this event with the correct - * instance of your custom event. - * - * @warning **Important**: Your custom event subclass **must** call this method when it is about to dismiss the interstitial. - * Failure to do so will disrupt the mediation waterfall and cause future ad requests to stall. - * - */ -- (void)interstitialCustomEventWillDisappear:(MPInterstitialCustomEvent *)customEvent; - -/** - * Call this method when an ad has finished disappearing. - * - * @param customEvent You should pass `self` to allow the MoPub SDK to associate this event with the correct - * instance of your custom event. - * - * @warning **Important**: Your custom event subclass **must** call this method when it is finished with dismissing the interstitial. - * Failure to do so will disrupt the mediation waterfall and cause future ad requests to stall. - * - * **Note**: if it is not possible to know when the interstitial *finished* dismissing, you should call - * this immediately after calling `-interstitialCustomEventDidDisappear:`. - */ -- (void)interstitialCustomEventDidDisappear:(MPInterstitialCustomEvent *)customEvent; - -/** @name Interstitial Ad Event Callbacks - User Interaction */ - -/** - * Call this method when the user taps on the interstitial ad. - * - * This method is optional. When automatic click and impression tracking is enabled (the default) - * this method will track a click (the click is guaranteed to only be tracked once per ad). - * - * **Note**: some third-party networks provide a "will leave application" callback instead of/in - * addition to a "user did click" callback. You should call this method in response to either of - * those callbacks (since leaving the application is generally an indicator of a user tap). - * - * @param customEvent You should pass `self` to allow the MoPub SDK to associate this event with the correct - * instance of your custom event. - * - */ -- (void)interstitialCustomEventDidReceiveTapEvent:(MPInterstitialCustomEvent *)customEvent; - -/** - * Call this method when the interstitial ad will cause the user to leave the application. - * - * For example, the user may have tapped on a link to visit the App Store or Safari. - * - * @param customEvent You should pass `self` to allow the MoPub SDK to associate this event with the correct - * instance of your custom event. - */ -- (void)interstitialCustomEventWillLeaveApplication:(MPInterstitialCustomEvent *)customEvent; - -/** @name Impression and Click Tracking */ - -/** - * Call this method to track an impression. - * - * @warning **Important**: You should **only** call this method if you have [opted out of automatic click and impression tracking]([MPInterstitialCustomEvent enableAutomaticImpressionAndClickTracking]). - * By default the MoPub SDK automatically tracks impressions. - * - * **Important**: In order to obtain accurate metrics, it is your responsibility to call `trackImpression` only **once** per ad. - */ -- (void)trackImpression; - -/** - * Call this method to track a click. - * - * @warning **Important**: You should **only** call this method if you have [opted out of automatic click and impression tracking]([MPInterstitialCustomEvent enableAutomaticImpressionAndClickTracking]). - * By default the MoPub SDK automatically tracks clicks. - * - * **Important**: In order to obtain accurate metrics, it is your responsibility to call `trackClick` only **once** per ad. - */ -- (void)trackClick; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPMediationSettingsProtocol.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPMediationSettingsProtocol.h deleted file mode 100644 index 0f60353b2f..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPMediationSettingsProtocol.h +++ /dev/null @@ -1,36 +0,0 @@ -// -// MPMediationSettingsProtocol.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -/** - * The MoPub SDK has a concept of mediation settings that allow you to define objects - * that allow the application to configure specific settings for your custom event's ad - * network. - * - * Your object can be a global mediation setting that contains settings you deem to be constant - * across all of your ad network's ads. Ideally this is where you will place settings necessary for - * your ad network's intialization as well. The global medation setting object should be ready for - * your custom event by the time you load the ad from your network. Inside your custom event, you can retrieve - * the global mediation settings by calling `[-globalMediationSettingsForClass:]([MoPub -globalMediationSettingsForClass:])` - * passing in the class type of your global based mediation settings object. - * - * You can also define instance based mediation settings. The application may or may not define - * a mediation settings object per ad unit ID in their application. This allows ads in different locations - * to behave differently. The instance based mediation settings object should be available to your custom event - * by the time you load the ad from your network. Inside your custom event, you can retrieve the instance based - * mediation settings by calling `[-instanceMediationSettingsForClass:]([MPRewardedVideoCustomEventDelegate -instanceMediationSettingsForClass:])` - * passing in the class type of your instance based mediation settings object. - * - * **Important**: Your custom event must not assume it will receive a global or any instance based mediation settings - * as the application may choose not to supply any. Your custom event must have a default implementation in the event - * the application doesn't wish to provide any specific settings. - */ -@protocol MPMediationSettingsProtocol - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPMoPubAd.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPMoPubAd.h deleted file mode 100644 index d2be88e9f2..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPMoPubAd.h +++ /dev/null @@ -1,45 +0,0 @@ -// -// MPMoPubAd.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPImpressionData.h" - -NS_ASSUME_NONNULL_BEGIN - -@protocol MPMoPubAdDelegate; - -/** - This protocol defines functionality that is shared between all MoPub ads. - */ -@protocol MPMoPubAd - -@required -/** - All MoPub ads have a delegate to call back when certain events occur. - */ -@property (nonatomic, weak, nullable) id delegate; - -@end - -/** - This protocol defines callback events shared between all MoPub ads. - */ -@protocol MPMoPubAdDelegate - -@optional -/** - Called when an impression is fired on the @c MPMoPubAd instance. Includes information about the impression if applicable. - - @param ad The @c MPMoPubAd instance that fired the impression - @param impressionData Information about the impression, or @c nil if the server didn't return any information. - */ -- (void)mopubAd:(id)ad didTrackImpressionWithImpressionData:(MPImpressionData * _Nullable)impressionData; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPMoPubAdPlacer.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPMoPubAdPlacer.h deleted file mode 100644 index bd74946744..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPMoPubAdPlacer.h +++ /dev/null @@ -1,48 +0,0 @@ -// -// MPMoPubAdPlacer.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPMoPubAd.h" -#import "MPImpressionData.h" - -NS_ASSUME_NONNULL_BEGIN - -@protocol MPMoPubAdPlacerDelegate; - -/** - This protocol defines functionality that is shared between all MoPub ad placers. - */ -@protocol MPMoPubAdPlacer - -@required -/** - All MoPub ad placers have a delegate to call back when certain events occur. - */ -@property (nonatomic, weak, nullable) id delegate; - -@end - -/** - This protocol defines callback events shared between all MoPub ad placers. - */ -@protocol MPMoPubAdPlacerDelegate - -@optional -/** - Called when an impression is fired on the @c MPMoPubAdPlacer instance. Includes - information about the impression if applicable. - - @param adPlacer The @c MPMoPubAdPlacer instance that fired the impression - @param ad The @c MPMoPubAd instance that fired the impression - @param impressionData Information about the impression, or @c nil if the server didn't return any information. - */ -- (void)mopubAdPlacer:(id)adPlacer didTrackImpressionForAd:(id)ad withImpressionData:(MPImpressionData * _Nullable)impressionData; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPMoPubConfiguration.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPMoPubConfiguration.h deleted file mode 100644 index 433e3c3c2b..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPMoPubConfiguration.h +++ /dev/null @@ -1,94 +0,0 @@ -// -// MPMoPubConfiguration.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPAdapterConfiguration.h" -#import "MPBLogLevel.h" -#import "MPMediationSettingsProtocol.h" -#import "MPRewardedVideo.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MPMoPubConfiguration : NSObject -/** - Optional list of additional mediated network SDKs to pre-initialize from the cache. If the mediated network - SDK has no cache entry, nothing will be done. - @remarks All certified mediated networks will be pre-initialized. This property is meant to pre-initialize - any custom adapters that have not been certified by MoPub. - */ -@property (nonatomic, strong, nullable) NSArray> * additionalNetworks; - -/** - Any valid ad unit ID used within the app used for app initialization. - @remark This is a required field. - */ -@property (nonatomic, strong, nonnull) NSString * adUnitIdForAppInitialization; - -/** - This API can be used if you want to allow supported SDK networks to collect user information on the basis of legitimate interest. The default value is @c NO. - */ -@property (nonatomic, assign) BOOL allowLegitimateInterest; - -/** - Optional global configurations for all ad networks your app supports. - */ -@property (nonatomic, strong, nullable) NSArray> * globalMediationSettings; - -/** - Optional logging level. By default, this value is set to @c MPBLogLevelNone. - */ -@property (nonatomic, assign) MPBLogLevel loggingLevel; - -/** - Optional configuration settings for mediated networks during initialization. To add entries - to this dictionary, use the convenience method @c setNetworkConfiguration:forMediationAdapter: - */ -@property (nonatomic, strong, nullable) NSMutableDictionary *> * mediatedNetworkConfigurations; - -/** - Optional MoPub request options for mediated networks. To add entries - to this dictionary, use the convenience method @c setMoPubRequestOptions:forMediationAdapter: - */ -@property (nonatomic, strong, nullable) NSMutableDictionary *> * moPubRequestOptions; - -/** - Initializes the @c MPMoPubConfiguration object with the required fields. - @param adUnitId Any valid ad unit ID used within the app used for app initialization. - @return A configuration instance. - */ -- (instancetype)initWithAdUnitIdForAppInitialization:(NSString *)adUnitId NS_DESIGNATED_INITIALIZER; - -/** - Sets the network configuration options for a given mediated network class name. - @param configuration Configuration parameters specific to the network. Only @c NSString, @c NSNumber, @c NSArray, and @c NSDictionary types are allowed. This value may be @c nil. - @param adapterClassName The class name of the mediated adapter that will receive the inputted configuration. The adapter class must implement the @c MPAdapterConfiguration protocol. - */ -- (void)setNetworkConfiguration:(NSDictionary * _Nullable)configuration - forMediationAdapter:(NSString *)adapterClassName; - -/** - Sets the mediated network's MoPub request options. - @param options MoPub request options for the mediated network. - @param adapterClassName The class name of the mediated adapter that will receive the inputted configuration. The adapter class must implement the @c MPAdapterConfiguration protocol. - */ -- (void)setMoPubRequestOptions:(NSDictionary * _Nullable)options - forMediationAdapter:(NSString *)adapterClassName; - -/** - Usage of default initializer is disallowed. Use @c initWithAdUnitIdForAppInitialization: instead. - */ -- (instancetype)init NS_UNAVAILABLE; - -/** - Usage of @c new is disallowed. Use @c initWithAdUnitIdForAppInitialization: instead. - */ -+ (instancetype)new NS_UNAVAILABLE; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPMoPubConfiguration.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPMoPubConfiguration.m deleted file mode 100644 index de0ea98b99..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MPMoPubConfiguration.m +++ /dev/null @@ -1,87 +0,0 @@ -// -// MPMoPubConfiguration.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPMoPubConfiguration.h" -#import "MPAdapterConfiguration.h" -#import "MPLogging.h" - -@implementation MPMoPubConfiguration - -- (instancetype)initWithAdUnitIdForAppInitialization:(NSString * _Nonnull)adUnitId { - if (self = [super init]) { - _additionalNetworks = nil; - _adUnitIdForAppInitialization = adUnitId; - _allowLegitimateInterest = NO; - _globalMediationSettings = nil; - _loggingLevel = MPBLogLevelNone; - _mediatedNetworkConfigurations = nil; - _moPubRequestOptions = nil; - } - - return self; -} - -- (void)setNetworkConfiguration:(NSDictionary *)configuration - forMediationAdapter:(NSString *)adapterClassName { - // Invalid adapter class name - if (adapterClassName == nil) { - return; - } - - // Adapter class name does not exist in the runtime. - Class adapterClass = NSClassFromString(adapterClassName); - if (adapterClass == Nil) { - MPLogDebug(@"%@ is not a valid class name.", adapterClassName); - return; - } - - // Adapter class name does not conform to `MPAdapterConfiguration` - if (![adapterClass conformsToProtocol:@protocol(MPAdapterConfiguration)]) { - MPLogDebug(@"%@ does not conform to MPAdapterConfiguration protocol.", adapterClassName); - return; - } - - // Lazy initialization - if (self.mediatedNetworkConfigurations == nil) { - self.mediatedNetworkConfigurations = [NSMutableDictionary dictionaryWithCapacity:1]; - } - - // Add the entry - self.mediatedNetworkConfigurations[adapterClassName] = configuration; -} - -- (void)setMoPubRequestOptions:(NSDictionary * _Nullable)options - forMediationAdapter:(NSString *)adapterClassName { - // Invalid adapter class name - if (adapterClassName == nil) { - return; - } - - // Adapter class name does not exist in the runtime. - Class adapterClass = NSClassFromString(adapterClassName); - if (adapterClass == Nil) { - MPLogDebug(@"%@ is not a valid class name.", adapterClassName); - return; - } - - // Adapter class name does not conform to `MPAdapterConfiguration` - if (![adapterClass conformsToProtocol:@protocol(MPAdapterConfiguration)]) { - MPLogDebug(@"%@ does not conform to MPAdapterConfiguration protocol.", adapterClassName); - return; - } - - // Lazy initialization - if (self.moPubRequestOptions == nil) { - self.moPubRequestOptions = [NSMutableDictionary dictionaryWithCapacity:1]; - } - - // Add the entry - self.moPubRequestOptions[adapterClassName] = options; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MoPub.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MoPub.h deleted file mode 100644 index a8999dffcb..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MoPub.h +++ /dev/null @@ -1,348 +0,0 @@ -// -// MoPub.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPConstants.h" - -#import "MOPUBDisplayAgentType.h" -#import "MPAdapterConfiguration.h" -#import "MPAdConversionTracker.h" -#import "MPAdImpressionTimer.h" -#import "MPAdTargeting.h" -#import "MPAdView.h" -#import "MPAdViewDelegate.h" -#import "MPBannerCustomEvent.h" -#import "MPBannerCustomEventDelegate.h" -#import "MPBaseAdapterConfiguration.h" -#import "MPBool.h" -#import "MPConsentChangedNotification.h" -#import "MPConsentChangedReason.h" -#import "MPConsentError.h" -#import "MPConsentStatus.h" -#import "MPEngineInfo.h" -#import "MPError.h" -#import "MPGlobal.h" -#import "MPImpressionData.h" -#import "MPImpressionTrackedNotification.h" -#import "MPInterstitialAdController.h" -#import "MPInterstitialAdControllerDelegate.h" -#import "MPInterstitialCustomEvent.h" -#import "MPInterstitialCustomEventDelegate.h" -#import "MPLogging.h" -#import "MPBLogLevel.h" -#import "MPMediationSettingsProtocol.h" -#import "MPMoPubAd.h" -#import "MPMoPubAdPlacer.h" -#import "MPMoPubConfiguration.h" -#import "MPRealTimeTimer.h" -#import "MPRewardedVideo.h" -#import "MPRewardedVideoReward.h" -#import "MPRewardedVideoCustomEvent.h" -#import "MPRewardedVideoError.h" -#import "MPViewabilityAdapter.h" -#import "MPViewabilityOption.h" - -#if __has_include("MPNativeAds.h") - #import "MPNativeAds.h" -#endif - -// Import these frameworks for module support. -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import - -#define MoPubKit [MoPub sharedInstance] - -NS_ASSUME_NONNULL_BEGIN - -@interface MoPub : NSObject - -/** - * Returns the MoPub singleton object. - * - * @return The MoPub singleton object. - */ -+ (MoPub * _Nonnull)sharedInstance; - -/** - * A Boolean value indicating whether the MoPub SDK should use Core Location APIs to automatically - * derive targeting information for location-based ads. - * - * When set to NO, the SDK will not attempt to determine device location. When set to YES, the - * SDK will periodically try to listen for location updates in order to request location-based ads. - * This only occurs if location services are enabled and the user has already authorized the use - * of location services for the application. The default value is YES. - * - * If a user is in General Data Protection Regulation (GDPR) region and - * MoPub doesn't obtain consent from the user for using his/her personal data, - * locationUpdatesEnabled will always be set to NO. - * - * @return A Boolean value indicating whether the SDK should listen for location updates. - */ -@property (nonatomic, assign) BOOL locationUpdatesEnabled; - -/** - * A Boolean value indicating whether the MoPub SDK should create a MoPub ID that can be used - * for frequency capping when Limit ad tracking is on & the IDFA we get is - * 00000000-0000-0000-0000-000000000000. - * - * When set to NO, the SDK will not create a MoPub ID in the above case. When set to YES, the - * SDK will generate a MoPub ID. The default value is YES. - * - */ -@property (nonatomic) BOOL frequencyCappingIdUsageEnabled; - -/** - * Forces the usage of @c WKWebView. - * - * Deprecated: @c WKWebView is always used. No need to force it any more. Calling this method will have no effect. - */ -@property (nonatomic, assign) BOOL forceWKWebView __attribute((deprecated("WKWebView is always used. No need to force it any more."))); - -/** - * SDK log level. The default value is `MPBLogLevelNone`. - */ -@property (nonatomic, assign) MPBLogLevel logLevel __attribute((deprecated("Use the MPMoPubConfiguration.loggingLevel instead."))); - -/** - * Initializes the MoPub SDK asynchronously on a background thread. - * @remark This should be called from the app's `application:didFinishLaunchingWithOptions:` method. - * @param configuration Required SDK configuration options. - * @param completionBlock Optional completion block that will be called when initialization has completed. - */ -- (void)initializeSdkWithConfiguration:(MPMoPubConfiguration * _Nonnull)configuration - completion:(void(^_Nullable)(void))completionBlock; - -/** - * A boolean value indicating if the SDK has been initialized. This property's value is @c YES if - * @c initializeSdkWithConfiguration:completion: has been called and completed; the value is @c NO otherwise. - */ -@property (nonatomic, readonly) BOOL isSdkInitialized; - -/** - * Retrieves the global mediation settings for a given class type. - * - * @param aClass The type of mediation settings object you want to receive from the collection. - */ -- (id _Nullable)globalMediationSettingsForClass:(Class)aClass; - -- (NSString * _Nonnull)version; -- (NSString * _Nonnull)bundleIdentifier; - -/** - * Default is MOPUBDisplayAgentTypeInApp = 0. - * - * If displayType is set to MOPUBDisplayAgentTypeNativeSafari = 1, http/https clickthrough URLs are opened in native - * safari browser. - * If displayType is set to MOPUBDisplayAgentTypeSafariViewController = 2, http/https clickthrough URLs are opened in - * SafariViewController. - * - */ -- (void)setClickthroughDisplayAgentType:(MOPUBDisplayAgentType)displayAgentType; - -/** - * Disables viewability measurement via the specified vendor(s) for the rest of the app session. A given vendor cannot - * be re-enabled after being disabled. - * - * @param vendors The viewability vendor(s) to be disabled. This is a bitmask value; ORing vendors together is okay. - */ -- (void)disableViewability:(MPViewabilityOption)vendors; - -/** - Sets the engine that is using this MoPub SDK. - @param info Engine information. - */ -- (void)setEngineInformation:(MPEngineInfo *)info; - -@end - -@interface MoPub (Mediation) - -/** - * Retrieves the adapter configuration for the specified class. - * @param className The classname of the adapter configuration instance to retrieve. - * @return The adapter configuration if available; otherwise @c nil. - */ -- (id _Nullable)adapterConfigurationNamed:(NSString *)className; - -/** - Retrieves the available adapter configuration class names. - */ -- (NSArray * _Nullable)availableAdapterClassNames; - -/** - * Clears all currently cached mediated networks. - */ -- (void)clearCachedNetworks; - -@end - -@interface MoPub (Consent) - -/** - * Querying Consent State - */ - -/** - * Flag indicating that personally identifiable information can be collected. - */ -@property (nonatomic, readonly) BOOL canCollectPersonalInfo; - -/** - * Gives the current consent status of this user. - * Note: NSNotification with name @c kMPConsentChangedNotification can be listened for to be informed of changes - * in the @c currentConsentStatus value. Please see MPConsentChangedNotification.h for more information on this - * notification. - */ -@property (nonatomic, readonly) MPConsentStatus currentConsentStatus; - -/** - * Flag indicating that GDPR is applicable to the user. - */ -@property (nonatomic, readonly) MPBool isGDPRApplicable; - -/** - * When called, @c isGDPRApplicable will always be set to @c MPBoolYes, and GDPR will apply to this user - * regardless of any other conditions. - * Note: This property's value is persisted for the lifetime of the app and cannot be unset. - */ -- (void)forceGDPRApplicable; - -/** - * Consent Acquisition - */ - -/** - This API can be used if you want to allow supported SDK networks to collect user information on the basis of legitimate interest. The default value is @c NO. - */ -@property (nonatomic, assign) BOOL allowLegitimateInterest; - -/** - * `YES` if a consent dialog is presently loaded and ready to be shown; `NO` otherwise - */ -@property (nonatomic, readonly) BOOL isConsentDialogReady; - -/** - * Attempts to load a consent dialog. `completion` is called when either the consent dialog has finished loading - * or has failed to load. If there was an error, the `error` parameter will be non-nil. - */ -- (void)loadConsentDialogWithCompletion:(void (^ _Nullable)(NSError * _Nullable error))completion; - -/** - * If a consent dialog is currently loaded, this method will present it modally on top of @c viewController. If no - * consent dialog is loaded, this method will do nothing. @c didShow is called upon successful presentation of the - * consent dialog; otherwise it is not called. @c didDismiss is called after the dismissal of the consent dialog; - * otherwise (including if the dialog failed to present) it is not called. - */ -- (void)showConsentDialogFromViewController:(UIViewController *)viewController - didShow:(void (^ _Nullable)(void))didShow - didDismiss:(void (^ _Nullable)(void))didDismiss; - -/** - * If a consent dialog is currently loaded, this method will present it modally on top of @c viewController. If no - * consent dialog is loaded, this method will do nothing. @c completion is called upon successful presentation of the - * consent dialog; otherwise it is not called. - */ -- (void)showConsentDialogFromViewController:(UIViewController *)viewController completion:(void (^ _Nullable)(void))completion; - -/** - * Flag indicating that consent needs to be acquired (or reacquired) by the user, and that the consent dialog may need - * to be shown. (Note: This flag can be used for publishers that require use of MoPub's consent dialog, as well as - * publishers that specify their own consent interface) - */ -@property (nonatomic, readonly) BOOL shouldShowConsentDialog; - -/** - * Custom Consent Interface - * Note: publishers must have explicit permission from MoPub to use their own consent interface. - */ - -/** - URL to the MoPub privacy policy in the device's preferred language. If the device's - preferred language could not be determined, English will be used. - @returns The privacy policy URL for the desired language if successful; @c nil if - there is no current vendor list. - */ -- (NSURL * _Nullable)currentConsentPrivacyPolicyUrl; - -/** - URL to the MoPub privacy policy in the language of choice. - @param isoLanguageCode ISO 630-1 language code - @returns The privacy policy URL for the desired language if successful; @c nil if the - language code is invalid or if there is no current vendor list. - */ -- (NSURL * _Nullable)currentConsentPrivacyPolicyUrlWithISOLanguageCode:(NSString * _Nonnull)isoLanguageCode; - -/** - Current vendor list URL in the device's preferred language. If the device's - preferred language could not be determined, English will be used. - @returns The vendor list URL for the desired language if successful; @c nil if - there is no current vendor list. - */ -- (NSURL * _Nullable)currentConsentVendorListUrl; - -/** - Current vendor list URL in the language of choice. - @param isoLanguageCode ISO 630-1 language code - @returns The vendor list URL for the desired language if successful; @c nil if the - language code is invalid or if there is no current vendor list. - */ -- (NSURL * _Nullable)currentConsentVendorListUrlWithISOLanguageCode:(NSString * _Nonnull)isoLanguageCode; - -/** - * Grants consent on behalf of the current user. If you do not have permission from MoPub to use a custom consent - * interface, this method will always fail to grant consent. - */ -- (void)grantConsent; - -/** - * Revokes consent on behalf of the current user. - */ -- (void)revokeConsent; - -/** - * Current IAB format vendor list. - */ -@property (nonatomic, copy, readonly, nullable) NSString * currentConsentIabVendorListFormat; - -/** - * Current version of MoPub’s privacy policy. - */ -@property (nonatomic, copy, readonly, nullable) NSString * currentConsentPrivacyPolicyVersion; - -/** - * Current version of the vendor list. - */ -@property (nonatomic, copy, readonly, nullable) NSString * currentConsentVendorListVersion; - -/** - * IAB vendor list that has been consented to. - */ -@property (nonatomic, copy, readonly, nullable) NSString * previouslyConsentedIabVendorListFormat; - -/** - * MoPub privacy policy version that has been consented to. - */ -@property (nonatomic, copy, readonly, nullable) NSString * previouslyConsentedPrivacyPolicyVersion; - -/** - * Vendor list version that has been consented to. - */ -@property (nonatomic, copy, readonly, nullable) NSString * previouslyConsentedVendorListVersion; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MoPub.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MoPub.m deleted file mode 100644 index 14cf4ed311..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/MoPub.m +++ /dev/null @@ -1,350 +0,0 @@ -// -// MoPub.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MoPub.h" -#import "MPAdServerURLBuilder.h" -#import "MPConsentManager.h" -#import "MPConstants.h" -#import "MPGeolocationProvider.h" -#import "MPLogging.h" -#import "MPMediationManager.h" -#import "MPRewardedVideo.h" -#import "MPIdentityProvider.h" -#import "MPWebView.h" -#import "MOPUBExperimentProvider.h" -#import "MPViewabilityTracker.h" -#import "MPAdConversionTracker.h" -#import "MPConsentManager.h" -#import "MPConsentChangedNotification.h" -#import "MPSessionTracker.h" - -static NSString * const kPublisherEnteredAdUnitIdStorageKey = @"com.mopub.mopub-ios-sdk.initialization.publisher.entered.ad.unit.id"; - -@interface MoPub () - -@property (nonatomic, strong) NSArray *globalMediationSettings; - -@property (nonatomic, assign, readwrite) BOOL isSdkInitialized; - -@property (nonatomic, strong) MOPUBExperimentProvider *experimentProvider; - -@end - -@implementation MoPub - -+ (MoPub *)sharedInstance -{ - static MoPub *sharedInstance = nil; - static dispatch_once_t initOnceToken; - dispatch_once(&initOnceToken, ^{ - sharedInstance = [[MoPub alloc] init]; - }); - return sharedInstance; -} - -- (instancetype)init -{ - if (self = [super init]) { - [self commonInitWithExperimentProvider:MOPUBExperimentProvider.sharedInstance]; - } - return self; -} - -/** - This common init enables unit testing with an `MOPUBExperimentProvider` instance that is not a singleton. - */ -- (void)commonInitWithExperimentProvider:(MOPUBExperimentProvider *)experimentProvider -{ - // Processing personal data if a user is in GDPR region. - [self handlePersonalData]; - _experimentProvider = experimentProvider; -} - -- (void)setLocationUpdatesEnabled:(BOOL)locationUpdatesEnabled -{ - [MPGeolocationProvider.sharedProvider setLocationUpdatesEnabled:locationUpdatesEnabled]; -} - -- (BOOL)locationUpdatesEnabled -{ - return MPGeolocationProvider.sharedProvider.locationUpdatesEnabled; -} - -- (void)setFrequencyCappingIdUsageEnabled:(BOOL)frequencyCappingIdUsageEnabled -{ - [MPIdentityProvider setFrequencyCappingIdUsageEnabled:frequencyCappingIdUsageEnabled]; -} - -- (void)setLogLevel:(MPBLogLevel)level -{ - MPLogging.consoleLogLevel = level; -} - -- (MPBLogLevel)logLevel -{ - return MPLogging.consoleLogLevel; -} - -- (void)setClickthroughDisplayAgentType:(MOPUBDisplayAgentType)displayAgentType -{ - self.experimentProvider.displayAgentType = displayAgentType; -} - -- (BOOL)frequencyCappingIdUsageEnabled -{ - return [MPIdentityProvider frequencyCappingIdUsageEnabled]; -} - -// Keep -version and -bundleIdentifier methods around for Fabric backwards compatibility. -- (NSString *)version -{ - return MP_SDK_VERSION; -} - -- (NSString *)bundleIdentifier -{ - return MP_BUNDLE_IDENTIFIER; -} - -- (void)initializeSdkWithConfiguration:(MPMoPubConfiguration *)configuration - completion:(void(^_Nullable)(void))completionBlock -{ - if (@available(iOS 9, *)) { - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - [self setSdkWithConfiguration:configuration completion:completionBlock]; - }); - } else { - MPLogEvent([MPLogEvent error:[NSError sdkMinimumOsVersion:9] message:nil]); - NSAssert(false, @"MoPub SDK requires iOS 9 and up"); - } -} - -- (void)setSdkWithConfiguration:(MPMoPubConfiguration *)configuration - completion:(void(^_Nullable)(void))completionBlock -{ - @synchronized (self) { - // Set the console logging level. - MPLogging.consoleLogLevel = configuration.loggingLevel; - - // Store the global mediation settings - self.globalMediationSettings = configuration.globalMediationSettings; - - // Create a dispatch group to synchronize mutliple asynchronous tasks. - dispatch_group_t initializationGroup = dispatch_group_create(); - - // Configure the consent manager and synchronize regardless of the result - // of `checkForDoNotTrackAndTransition`. - dispatch_group_enter(initializationGroup); - // If the publisher has changed their adunit ID for app initialization, clear our adunit ID caches - NSString * cachedPublisherEnteredAdUnitID = [NSUserDefaults.standardUserDefaults stringForKey:kPublisherEnteredAdUnitIdStorageKey]; - if (![configuration.adUnitIdForAppInitialization isEqualToString:cachedPublisherEnteredAdUnitID]) { - [MPConsentManager.sharedManager clearAdUnitIdUsedForConsent]; - [NSUserDefaults.standardUserDefaults setObject:configuration.adUnitIdForAppInitialization forKey:kPublisherEnteredAdUnitIdStorageKey]; - } - MPConsentManager.sharedManager.adUnitIdUsedForConsent = configuration.adUnitIdForAppInitialization; - MPConsentManager.sharedManager.allowLegitimateInterest = configuration.allowLegitimateInterest; - [MPConsentManager.sharedManager checkForDoNotTrackAndTransition]; - [MPConsentManager.sharedManager synchronizeConsentWithCompletion:^(NSError * _Nullable error) { - dispatch_group_leave(initializationGroup); - }]; - - // Configure session tracker - [MPSessionTracker initializeNotificationObservers]; - - // Configure mediated network SDKs - __block NSArray> * initializedNetworks = nil; - dispatch_group_enter(initializationGroup); - [MPMediationManager.sharedManager initializeWithAdditionalProviders:configuration.additionalNetworks - configurations:configuration.mediatedNetworkConfigurations - requestOptions:configuration.moPubRequestOptions - complete:^(NSError * error, NSArray> * initializedAdapters) { - initializedNetworks = initializedAdapters; - dispatch_group_leave(initializationGroup); - }]; - - // Once all of the asynchronous tasks have completed, notify the - // completion handler. - dispatch_group_notify(initializationGroup, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ - MPLogEvent([MPLogEvent sdkInitializedWithNetworks:initializedNetworks]); - self.isSdkInitialized = YES; - if (completionBlock) { - completionBlock(); - } - }); - } -} - -- (void)handlePersonalData -{ - [[MPConsentManager sharedManager] checkForIfaChange]; -} - -- (id)globalMediationSettingsForClass:(Class)aClass -{ - NSArray *mediationSettingsCollection = self.globalMediationSettings; - - for (id settings in mediationSettingsCollection) { - if ([settings isKindOfClass:aClass]) { - return settings; - } - } - - return nil; -} - -- (void)disableViewability:(MPViewabilityOption)vendors -{ - [MPViewabilityTracker disableViewability:vendors]; -} - -- (void)setEngineInformation:(MPEngineInfo *)info -{ - MPAdServerURLBuilder.engineInformation = info; -} - -@end - -@implementation MoPub (Mediation) - -- (id)adapterConfigurationNamed:(NSString *)className { - // No class name - if (className == nil) { - return nil; - } - - // Class doesn't exist. - Class classToFind = NSClassFromString(className); - if (classToFind == Nil) { - return nil; - } - - NSPredicate * predicate = [NSPredicate predicateWithFormat:@"self isKindOfClass: %@", classToFind]; - NSArray * adapters = [MPMediationManager.sharedManager.adapters.allValues filteredArrayUsingPredicate:predicate]; - return adapters.firstObject; -} - -- (NSArray * _Nullable)availableAdapterClassNames { - NSMutableArray * adapterClassNames = [NSMutableArray arrayWithCapacity:MPMediationManager.sharedManager.adapters.count]; - [MPMediationManager.sharedManager.adapters.allValues enumerateObjectsUsingBlock:^(id _Nonnull adapter, NSUInteger idx, BOOL * _Nonnull stop) { - NSString * className = NSStringFromClass(adapter.class); - if (className != nil) { - [adapterClassNames addObject:className]; - } - }]; - - return adapterClassNames; -} - -- (void)clearCachedNetworks { - [MPMediationManager.sharedManager clearCache]; -} - -@end - -@implementation MoPub (Consent) - -- (BOOL)shouldShowConsentDialog { - return [MPConsentManager sharedManager].isConsentNeeded; -} - -- (BOOL)canCollectPersonalInfo { - return [MPConsentManager sharedManager].canCollectPersonalInfo; -} - -- (MPBool)isGDPRApplicable { - return [MPConsentManager sharedManager].isGDPRApplicable; -} - -- (void)forceGDPRApplicable { - [MPConsentManager sharedManager].forceIsGDPRApplicable = YES; -} - -- (MPConsentStatus)currentConsentStatus { - return [MPConsentManager sharedManager].currentStatus; -} - -- (NSString *)currentConsentIabVendorListFormat { - return [MPConsentManager sharedManager].iabVendorList; -} - -- (NSString *)currentConsentPrivacyPolicyVersion { - return [MPConsentManager sharedManager].privacyPolicyVersion; -} - -- (NSString *)currentConsentVendorListVersion { - return [MPConsentManager sharedManager].vendorListVersion; -} - -- (NSString *)previouslyConsentedIabVendorListFormat { - return [MPConsentManager sharedManager].consentedIabVendorList; -} - -- (NSString *)previouslyConsentedPrivacyPolicyVersion { - return [MPConsentManager sharedManager].consentedPrivacyPolicyVersion; -} - -- (NSString *)previouslyConsentedVendorListVersion { - return [MPConsentManager sharedManager].consentedVendorListVersion; -} - -- (void)loadConsentDialogWithCompletion:(void (^)(NSError * _Nullable))completion { - [[MPConsentManager sharedManager] loadConsentDialogWithCompletion:completion]; -} - -- (void)showConsentDialogFromViewController:(UIViewController *)viewController - didShow:(void (^ _Nullable)(void))didShow - didDismiss:(void (^ _Nullable)(void))didDismiss { - [[MPConsentManager sharedManager] showConsentDialogFromViewController:viewController - didShow:didShow - didDismiss:didDismiss]; -} - -- (void)showConsentDialogFromViewController:(UIViewController *)viewController completion:(void (^ _Nullable)(void))completion { - [self showConsentDialogFromViewController:viewController - didShow:completion - didDismiss:nil]; -} - -- (BOOL)allowLegitimateInterest { - return [MPConsentManager sharedManager].allowLegitimateInterest; -} - -- (void)setAllowLegitimateInterest:(BOOL)allowLegitimateInterest { - [MPConsentManager sharedManager].allowLegitimateInterest = allowLegitimateInterest; -} - -- (BOOL)isConsentDialogReady { - return [MPConsentManager sharedManager].isConsentDialogLoaded; -} - -- (void)revokeConsent { - [[MPConsentManager sharedManager] revokeConsent]; -} - -- (void)grantConsent { - [[MPConsentManager sharedManager] grantConsent]; -} - -- (NSURL *)currentConsentPrivacyPolicyUrl { - return [[MPConsentManager sharedManager] privacyPolicyUrl]; -} - -- (NSURL *)currentConsentPrivacyPolicyUrlWithISOLanguageCode:(NSString *)isoLanguageCode { - return [[MPConsentManager sharedManager] privacyPolicyUrlWithISOLanguageCode:isoLanguageCode]; -} - -- (NSURL *)currentConsentVendorListUrl { - return [[MPConsentManager sharedManager] vendorListUrl]; -} - -- (NSURL *)currentConsentVendorListUrlWithISOLanguageCode:(NSString *)isoLanguageCode { - return [[MPConsentManager sharedManager] vendorListUrlWithISOLanguageCode:isoLanguageCode]; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/Categories/MPNativeAdError+VAST.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/Categories/MPNativeAdError+VAST.h deleted file mode 100644 index 5b7564e5bd..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/Categories/MPNativeAdError+VAST.h +++ /dev/null @@ -1,12 +0,0 @@ -// -// MPNativeAdError+VAST.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPNativeAdError.h" -#import "MPVASTError.h" - -MPVASTError VASTErrorCodeFromNativeAdErrorCode(MPNativeAdErrorCode nativeAdErrorCode); diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/Categories/MPNativeAdError+VAST.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/Categories/MPNativeAdError+VAST.m deleted file mode 100644 index 389c8369d7..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/Categories/MPNativeAdError+VAST.m +++ /dev/null @@ -1,34 +0,0 @@ -// -// MPNativeAdError+VAST.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPNativeAdError+VAST.h" - -MPVASTError VASTErrorCodeFromNativeAdErrorCode(MPNativeAdErrorCode nativeAdErrorCode) { - switch (nativeAdErrorCode) { - case MPNativeAdErrorUnknown: - return MPVASTErrorUndefined; - case MPNativeAdErrorHTTPError: - return MPVASTErrorTimeoutOfMediaFileURI; - case MPNativeAdErrorInvalidServerResponse: - return MPVASTErrorUndefined; - case MPNativeAdErrorNoInventory: - return MPVASTErrorUnableToFindLinearAdOrMediaFileFromURI; - case MPNativeAdErrorImageDownloadFailed: - return MPVASTErrorCannotPlayMedia; - case MPNativeAdErrorAdUnitWarmingUp: - return MPVASTErrorMezzanineIsBeingProccessed; - case MPNativeAdErrorVASTParsingFailed: - return MPVASTErrorXMLParseFailure; - case MPNativeAdErrorVideoConfigInvalid: - return MPVASTErrorXMLParseFailure; - case MPNativeAdErrorContentDisplayError: - return MPVASTErrorCannotPlayMedia; - case MPNativeAdErrorRenderError: - return MPVASTErrorCannotPlayMedia; - } -} diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/Categories/MPNativeAdRequest+MPNativeAdSource.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/Categories/MPNativeAdRequest+MPNativeAdSource.h deleted file mode 100644 index 0ed7264b5d..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/Categories/MPNativeAdRequest+MPNativeAdSource.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// MPNativeAdRequest+MPNativeAdSource.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPNativeAdRequest.h" - -@interface MPNativeAdRequest (MPNativeAdSource) - -- (void)startForAdSequence:(NSInteger)adSequence withCompletionHandler:(MPNativeAdRequestHandler)handler; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPAdPlacerInvocation.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPAdPlacerInvocation.h deleted file mode 100644 index b165ce3e3e..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPAdPlacerInvocation.h +++ /dev/null @@ -1,125 +0,0 @@ -// -// MPAdPlacerInvocation.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@class MPStreamAdPlacer; - -/** - * A convenience class that handles a lot of the common logic when implementing a wrapper for the delegate / data source of a UI collection object - * (e.g. UITableView or UICollectionView). - * - * When implementing wrapper object methods, you will often have to take the following into consideration: - * - * - Handling cells that contain ads differently from regular content cells. For example, you may want to disable moving an ad cell while allowing - * regular content cells to move. - * - * - Calling through to the original object when handling regular content cells. The original delegate / data source only knows about regular content - * cells. Thus, you need to translate the given index path, that indexes ads and content, to an original index path that only indexes content. - * You can use the original translated index path to have the original delegate / data source process logic on the correct cell. - * - * - Providing the default behavior when the original object doesn't respond to the specific method and an ad doesn't occupy the given index path. - * - * This class takes care of all the work in two steps. Set up and invoke an NSInvocation object by calling invokeForTarget:. If you wish to return - * a value based on the invocation, you may pass the returned invocation to one of the result methods (e.g. boolResultForInvocation:defaultValue:) and - * provide a defaultValue that will be returned if an ad occupies the cell or the original delegate / data source doesn't respond to the selector. - * If an ad is not at the given index path and the original delegate / data source responds to the selector, invokeForTarget: will translate the index - * path for you and pass it to the original delegate / data source. The result method will then return the result from the invocation. - */ - -@interface MPAdPlacerInvocation : NSObject - -/** - * Creates an NSInvocation object with the given parameters and invokes the object. - * This will return nil if there is an ad at the index path or the target doesn't respond to the selector. - * - * @param target The object's original data source or delegate. - * @param selector The method we want to execute on the target if an ad doesn't exist. - * @param arg1 The first argument to the selector. - * @param indexPath The second argument to the selector. - * @param streamAdPlacer The MPStreamAdPlacer backing your UI collection that can translate index paths to their originals. - * - * @return The invocation with all the parameters passed into the method. - */ -+ (NSInvocation *)invokeForTarget:(id)target - with2ArgSelector:(SEL)selector - firstArg:(id)arg1 - secondArg:(NSIndexPath *)indexPath - streamAdPlacer:(MPStreamAdPlacer *)streamAdPlacer; - -/** - * Creates an NSInvocation object with the given parameters and invokes the object. - * This will return nil if there is an ad at the index path or the target doesn't respond to the selector. - * - * @param target The object's original data source or delegate. - * @param selector The method we want to execute on the target if an ad doesn't exist. - * @param arg1 The first argument to the selector. - * @param arg2 The second argument to the selector. - * @param indexPath The third argument to the selector. - * @param streamAdPlacer The MPStreamAdPlacer backing your UI collection that can translate index paths to their originals. - * - * @return The invocation with all the parameters passed into the method. - */ -+ (NSInvocation *)invokeForTarget:(id)target - with3ArgSelector:(SEL)selector - firstArg:(id)arg1 - secondArg:(id)arg2 - thirdArg:(NSIndexPath *)indexPath - streamAdPlacer:(MPStreamAdPlacer *)streamAdPlacer; - -/** - * Creates an NSInvocation object with the given parameters and invokes the object. - * This will return nil if there is an ad at the index path or the target doesn't respond to the selector. - * - * @param target The object's original data source or delegate. - * @param selector The method we want to execute on the target if an ad doesn't exist. - * @param arg1 The first argument to the selector. - * @param arg2 The second argument to the selector. - * @param indexPath The third argument to the selector. - * @param streamAdPlacer The MPStreamAdPlacer backing your UI collection that can translate index paths to their originals. - * - * @return The invocation with all the parameters passed into the method. - */ -+ (NSInvocation *)invokeForTarget:(id)target - with3ArgIntSelector:(SEL)selector - firstArg:(id)arg1 - secondArg:(NSInteger)arg2 - thirdArg:(NSIndexPath *)indexPath - streamAdPlacer:(MPStreamAdPlacer *)streamAdPlacer; - -/** - * Returns the result for an invocation. Will return defaultReturnValue if invocation is nil. - * - * @param invocation The invocation that was returned from invokeForTarget:. - * @param defaultReturnValue What to return when the invocation is nil. - * - * @return defaultReturnValue or the invocation's return value. - */ -+ (BOOL)boolResultForInvocation:(NSInvocation *)invocation defaultValue:(BOOL)defaultReturnValue; - -/** - * Returns the result for an invocation. Will return defaultReturnValue if invocation is nil. - * - * @param invocation The invocation that was returned from invokeForTarget:. - * @param defaultReturnValue What to return when the invocation is nil. - * - * @return defaultReturnValue or the invocation's return value. - */ -+ (NSInteger)integerResultForInvocation:(NSInvocation *)invocation defaultValue:(NSInteger)defaultReturnValue; - -/** - * Returns the result for an invocation. Will return defaultReturnValue if invocation is nil. - * - * @param invocation The invocation that was returned from invokeForTarget:. - * @param defaultReturnValue What to return when the invocation is nil. - * - * @return defaultReturnValue or the invocation's return value. - */ -+ (id)resultForInvocation:(NSInvocation *)invocation defaultValue:(id)defaultReturnValue; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPAdPlacerInvocation.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPAdPlacerInvocation.m deleted file mode 100644 index 900e81b6ed..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPAdPlacerInvocation.m +++ /dev/null @@ -1,130 +0,0 @@ -// -// MPAdPlacerInvocation.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPAdPlacerInvocation.h" -#import "MPStreamAdPlacer.h" - -@implementation MPAdPlacerInvocation - -+ (NSInvocation *)invocationForTarget:(id)target - selector:(SEL)selector - indexPath:(NSIndexPath *)indexPath - streamAdPlacer:(MPStreamAdPlacer *)streamAdPlacer -{ - if (![target respondsToSelector:selector]) { - return nil; - } - - // No invocations for ad rows. - if ([streamAdPlacer isAdAtIndexPath:indexPath]) { - return nil; - } - - // Create the invocation. - NSMethodSignature *signature = [target methodSignatureForSelector:selector]; - NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature]; - [invocation setTarget:target]; - [invocation setSelector:selector]; - return invocation; -} - -+ (NSInvocation *)invokeForTarget:(id)target - with2ArgSelector:(SEL)selector - firstArg:(id)arg1 - secondArg:(NSIndexPath *)indexPath - streamAdPlacer:(MPStreamAdPlacer *)streamAdPlacer -{ - NSInvocation *invocation = [MPAdPlacerInvocation invocationForTarget:target - selector:selector - indexPath:indexPath - streamAdPlacer:streamAdPlacer]; - if (invocation) { - NSIndexPath *origPath = [streamAdPlacer originalIndexPathForAdjustedIndexPath:indexPath]; - [invocation setArgument:&(arg1) atIndex:2]; - [invocation setArgument:&(origPath) atIndex:3]; - [invocation invoke]; - } - return invocation; -} - -+ (NSInvocation *)invokeForTarget:(id)target - with3ArgSelector:(SEL)selector - firstArg:(id)arg1 - secondArg:(id)arg2 - thirdArg:(NSIndexPath *)indexPath - streamAdPlacer:(MPStreamAdPlacer *)streamAdPlacer -{ - NSInvocation *invocation = [MPAdPlacerInvocation invocationForTarget:target - selector:selector - indexPath:indexPath - streamAdPlacer:streamAdPlacer]; - if (invocation) { - NSIndexPath *origPath = [streamAdPlacer originalIndexPathForAdjustedIndexPath:indexPath]; - [invocation setArgument:&(arg1) atIndex:2]; - [invocation setArgument:&(arg2) atIndex:3]; - [invocation setArgument:&(origPath) atIndex:4]; - [invocation invoke]; - } - return invocation; -} - -+ (NSInvocation *)invokeForTarget:(id)target - with3ArgIntSelector:(SEL)selector - firstArg:(id)arg1 - secondArg:(NSInteger)arg2 - thirdArg:(NSIndexPath *)indexPath - streamAdPlacer:(MPStreamAdPlacer *)streamAdPlacer -{ - NSInvocation *invocation = [MPAdPlacerInvocation invocationForTarget:target - selector:selector - indexPath:indexPath - streamAdPlacer:streamAdPlacer]; - if (invocation) { - NSIndexPath *origPath = [streamAdPlacer originalIndexPathForAdjustedIndexPath:indexPath]; - [invocation setArgument:&(arg1) atIndex:2]; - [invocation setArgument:&(arg2) atIndex:3]; - [invocation setArgument:&(origPath) atIndex:4]; - [invocation invoke]; - } - return invocation; -} - -+ (BOOL)boolResultForInvocation:(NSInvocation *)invocation defaultValue:(BOOL)defaultReturnValue -{ - if (!invocation) { - return defaultReturnValue; - } - - BOOL returnValue; - [invocation getReturnValue:&returnValue]; - return returnValue; -} - -+ (id)resultForInvocation:(NSInvocation *)invocation defaultValue:(id)defaultReturnValue -{ - if (!invocation) { - return defaultReturnValue; - } - - __unsafe_unretained id returnValue; - [invocation getReturnValue:&returnValue]; - return returnValue; -} - -+ (NSInteger)integerResultForInvocation:(NSInvocation *)invocation defaultValue:(NSInteger)defaultReturnValue -{ - if (!invocation) { - return defaultReturnValue; - } - - NSInteger returnValue; - [invocation getReturnValue:&returnValue]; - return returnValue; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPBaseNativeAdRenderer+Internal.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPBaseNativeAdRenderer+Internal.h deleted file mode 100644 index 59d1809b31..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPBaseNativeAdRenderer+Internal.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// MPBaseNativeAdRenderer+Internal.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPBaseNativeAdRenderer.h" -#import "MPNativeAdRendering.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MPBaseNativeAdRenderer (Internal) - -- (void)renderSponsoredByTextWithAdapter:(id)adapter; - -@property (nonatomic) UIView *adView; -@property (nonatomic) Class renderingViewClass; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPBaseNativeAdRenderer+Internal.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPBaseNativeAdRenderer+Internal.m deleted file mode 100644 index 268d8e62ed..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPBaseNativeAdRenderer+Internal.m +++ /dev/null @@ -1,63 +0,0 @@ -// -// MPBaseNativeAdRenderer+Internal.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPBaseNativeAdRenderer+Internal.h" -#import "MPLogging.h" -#import "MPNativeAdAdapter.h" -#import "MPNativeAdConstants.h" -#import "MPNativeAdRendering.h" - -@implementation MPBaseNativeAdRenderer (Internal) - -@dynamic adView; -@dynamic renderingViewClass; - -- (void)renderSponsoredByTextWithAdapter:(id)adapter { - // Fast-fail if no label is present in the view - if (![self.adView respondsToSelector:@selector(nativeSponsoredByCompanyTextLabel)]) { - return; - } - - // Generate the text - NSString * sponsoredByText = [self generateSponsoredByTextWithAdapter:adapter]; - - // Set the label with the text - self.adView.nativeSponsoredByCompanyTextLabel.text = sponsoredByText; - self.adView.nativeSponsoredByCompanyTextLabel.hidden = (sponsoredByText == nil); -} - -- (NSString *)generateSponsoredByTextWithAdapter:(id)adapter { - // Fast-fail if no sponsor name is present in the ad response - NSString * sponsorName = adapter.properties[kAdSponsoredByCompanyKey]; - if (sponsorName == nil || [sponsorName isEqualToString:@""]) { - return nil; - } - - NSString * sponsoredByText = nil; - - // Attempt to gather text from integration - if ([self.renderingViewClass respondsToSelector:@selector(localizedSponsoredByTextWithSponsorName:)]) { - sponsoredByText = [self.renderingViewClass localizedSponsoredByTextWithSponsorName:sponsorName]; - - // Validate publisher string - - // Log if the string does not contain the company sponsor name - if (![sponsoredByText containsString:sponsorName]) { - MPLogWarn(@"Native Ad \"Sponsored by\" text does not contain the sponsor name."); - } - } - - // If @c sponsoredByText is still @c nil or @c @"" at this point, use default MoPub string - if (sponsoredByText.length == 0) { - sponsoredByText = [NSString stringWithFormat:@"Sponsored by %@", sponsorName]; - } - - return sponsoredByText; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPCollectionViewAdPlacerCell.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPCollectionViewAdPlacerCell.h deleted file mode 100644 index 1683583611..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPCollectionViewAdPlacerCell.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// MPCollectionViewAdPlacerCell.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@interface MPCollectionViewAdPlacerCell : UICollectionViewCell - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPCollectionViewAdPlacerCell.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPCollectionViewAdPlacerCell.m deleted file mode 100644 index ba1168009b..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPCollectionViewAdPlacerCell.m +++ /dev/null @@ -1,13 +0,0 @@ -// -// MPCollectionViewAdPlacerCell.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPCollectionViewAdPlacerCell.h" - -@implementation MPCollectionViewAdPlacerCell - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPMoPubNativeAdAdapter.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPMoPubNativeAdAdapter.h deleted file mode 100644 index 5b416c1c40..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPMoPubNativeAdAdapter.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// MPMoPubNativeAdAdapter.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPNativeAdAdapter.h" - -@class MPAdConfiguration; - -@interface MPMoPubNativeAdAdapter : NSObject - -@property (nonatomic, weak) id delegate; -@property (nonatomic, readonly) NSArray *impressionTrackerURLs; -@property (nonatomic, readonly) NSArray *clickTrackerURLs; -@property (nonatomic) MPAdConfiguration *adConfiguration; - -- (instancetype)initWithAdProperties:(NSMutableDictionary *)properties; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPMoPubNativeAdAdapter.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPMoPubNativeAdAdapter.m deleted file mode 100644 index 3acb3ea712..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPMoPubNativeAdAdapter.m +++ /dev/null @@ -1,202 +0,0 @@ -// -// MPMoPubNativeAdAdapter.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPAdDestinationDisplayAgent.h" -#import "MPAdImpressionTimer.h" -#import "MPCoreInstanceProvider.h" -#import "MPGlobal.h" -#import "MPMemoryCache.h" -#import "MPMoPubNativeAdAdapter.h" -#import "MPNativeAdConfigValues.h" -#import "MPNativeAdConstants.h" -#import "MPNativeAdError.h" - -static const NSTimeInterval kMoPubRequiredSecondsForImpression = 1.0; -static const CGFloat kMoPubRequiredViewVisibilityPercentage = 0.5; - -@interface MPMoPubNativeAdAdapter () - -@property (nonatomic, strong) MPAdImpressionTimer *impressionTimer; -@property (nonatomic, strong) id destinationDisplayAgent; - -@end - -@implementation MPMoPubNativeAdAdapter - -// synthesize for `MPNativeAdAdapter` protocol -@synthesize properties = _properties; -@synthesize defaultActionURL = _defaultActionURL; - -- (instancetype)initWithAdProperties:(NSMutableDictionary *)properties -{ - if (self = [super init]) { - - // Let's make sure the data types of all the provided native ad properties are strings before creating the adapter - - NSArray *stringKeysToCheck = @[kAdIconImageKey, kAdMainImageKey, kAdTextKey, kAdSponsoredByCompanyKey, kAdTitleKey, kAdCTATextKey, kAdPrivacyIconImageUrlKey, kAdPrivacyIconClickUrlKey]; - - for (NSString *key in stringKeysToCheck) { - id value = properties[key]; - if (value != nil && ![value isKindOfClass:[NSString class]]) { - return nil; - } - } - - // Validate that the views are actually views - NSArray * viewKeysToCheck = @[kAdIconImageViewKey, kAdMainMediaViewKey]; - for (NSString * key in viewKeysToCheck) { - id value = properties[key]; - if (value != nil && ![value isKindOfClass:[UIView class]]) { - return nil; - } - } - - BOOL valid = YES; - NSObject *clickTracker = [properties objectForKey:kClickTrackerURLKey]; - - // The click tracker could either be a single URL or an array of URLS. - if ([clickTracker isKindOfClass:[NSArray class]]) { - _clickTrackerURLs = MPConvertStringArrayToURLArray((NSArray *)clickTracker); - } else if ([clickTracker isKindOfClass:[NSString class]]) { - NSURL *url = [NSURL URLWithString:(NSString *)clickTracker]; - if (url) { - _clickTrackerURLs = @[ url ]; - } else { - valid = NO; - } - } else { - valid = NO; - } - - _defaultActionURL = [NSURL URLWithString:[properties objectForKey:kDefaultActionURLKey]]; - - // Grab the config, figure out requiredSecondsForImpression and requiredViewVisibilityPercentage, - // and set up the timer. - MPNativeAdConfigValues *config = properties[kNativeAdConfigKey]; - NSTimeInterval requiredSecondsForImpression = config.isImpressionMinVisibleSecondsValid ? config.impressionMinVisibleSeconds : kMoPubRequiredSecondsForImpression; - if (config.isImpressionMinVisiblePixelsValid) { - _impressionTimer = [[MPAdImpressionTimer alloc] initWithRequiredSecondsForImpression:requiredSecondsForImpression - requiredViewVisibilityPixels:config.impressionMinVisiblePixels]; - } else { - CGFloat requiredViewVisibilityPercentage = config.isImpressionMinVisiblePercentValid ? (config.impressionMinVisiblePercent / 100.0) : kMoPubRequiredViewVisibilityPercentage; - _impressionTimer = [[MPAdImpressionTimer alloc] initWithRequiredSecondsForImpression:requiredSecondsForImpression - requiredViewVisibilityPercentage:requiredViewVisibilityPercentage]; - } - _impressionTimer.delegate = self; - - [properties removeObjectsForKeys:@[kClickTrackerURLKey, kDefaultActionURLKey, kNativeAdConfigKey]]; - _properties = properties; - - if (!valid) { - return nil; - } - - // The privacy icon has been overridden by the server. We will use its image instead if it is - // already cached. Otherwise, we will defer loading the image until later. - NSString * privacyIconUrl = properties[kAdPrivacyIconImageUrlKey]; - if (privacyIconUrl != nil) { - UIImage * cachedIcon = [MPMemoryCache.sharedInstance imageForKey:privacyIconUrl]; - if (cachedIcon != nil) { - [properties setObject:cachedIcon forKey:kAdPrivacyIconUIImageKey]; - } - } - // Use the default MoPub privacy icon bundled with the SDK. - else { - // Add the privacy icon settings to our properties dictionary. - // Path will not change, so load path and image statically. - static NSString *privacyIconImagePath = nil; - static UIImage *privacyIconImage = nil; - if (!privacyIconImagePath || !privacyIconImage) { - privacyIconImagePath = MPResourcePathForResource(kPrivacyIconImageName); - privacyIconImage = privacyIconImagePath ? [UIImage imageWithContentsOfFile:privacyIconImagePath] : nil; - } - if (privacyIconImagePath) { - [properties setObject:privacyIconImagePath forKey:kAdPrivacyIconImageUrlKey]; - } - if (privacyIconImage) { - [properties setObject:privacyIconImage forKey:kAdPrivacyIconUIImageKey]; - } - } - - _destinationDisplayAgent = [MPAdDestinationDisplayAgent agentWithDelegate:self]; - } - - return self; -} - -- (void)dealloc -{ - [_destinationDisplayAgent cancel]; - [_destinationDisplayAgent setDelegate:nil]; -} - -#pragma mark - - -- (void)willAttachToView:(UIView *)view -{ - [self.impressionTimer startTrackingView:view]; -} - -- (void)displayContentForURL:(NSURL *)URL rootViewController:(UIViewController *)controller -{ - if (!controller) { - return; - } - - if (!URL || ![URL isKindOfClass:[NSURL class]] || ![URL.absoluteString length]) { - return; - } - - [self.destinationDisplayAgent displayDestinationForURL:URL]; -} - -#pragma mark - Privacy Icon - -- (void)displayContentForDAAIconTap -{ - NSURL *defaultPrivacyClickUrl = [NSURL URLWithString:kPrivacyIconTapDestinationURL]; - NSURL *overridePrivacyClickUrl = ({ - NSString *url = self.properties[kAdPrivacyIconClickUrlKey]; - (url != nil ? [NSURL URLWithString:url] : nil); - }); - - [self.destinationDisplayAgent displayDestinationForURL:(overridePrivacyClickUrl != nil ? overridePrivacyClickUrl : defaultPrivacyClickUrl)]; -} - -#pragma mark - - -- (void)adViewWillLogImpression:(UIView *)adView -{ - [self.delegate nativeAdWillLogImpression:self]; -} - -#pragma mark - - -- (UIViewController *)viewControllerForPresentingModalView -{ - return [self.delegate viewControllerForPresentingModalView]; -} - -- (void)displayAgentWillPresentModal -{ - [self.delegate nativeAdWillPresentModalForAdapter:self]; -} - -- (void)displayAgentWillLeaveApplication -{ - [self.delegate nativeAdWillLeaveApplicationFromAdapter:self]; -} - -- (void)displayAgentDidDismissModal -{ - [self.delegate nativeAdDidDismissModalForAdapter:self]; -} - -// - (MPAdConfiguration *)adConfiguration delegate method is automatically implemented via the adConfiguration property declaration. - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPMoPubNativeCustomEvent.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPMoPubNativeCustomEvent.h deleted file mode 100644 index 8ad5ffaeaa..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPMoPubNativeCustomEvent.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// MPMoPubNativeCustomEvent.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPNativeCustomEvent.h" - -@interface MPMoPubNativeCustomEvent : MPNativeCustomEvent - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPMoPubNativeCustomEvent.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPMoPubNativeCustomEvent.m deleted file mode 100644 index 42bec776ab..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPMoPubNativeCustomEvent.m +++ /dev/null @@ -1,64 +0,0 @@ -// -// MPMoPubNativeCustomEvent.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPMoPubNativeCustomEvent.h" -#import "MPMoPubNativeAdAdapter.h" -#import "MPNativeAd+Internal.h" -#import "MPNativeAdError.h" -#import "MPNativeAdConstants.h" -#import "MPLogging.h" -#import "MPNativeAdUtils.h" - -@implementation MPMoPubNativeCustomEvent - -- (void)requestAdWithCustomEventInfo:(NSDictionary *)info adMarkup:(NSString *)adMarkup -{ - NSString * adUnitId = info[kNativeAdUnitId]; - MPLogAdEvent([MPLogEvent adLoadAttemptForAdapter:NSStringFromClass(self.class) dspCreativeId:info[kNativeAdDspCreativeId] dspName:info[kNativeAdDspName]], adUnitId); - - MPMoPubNativeAdAdapter *adAdapter = [[MPMoPubNativeAdAdapter alloc] initWithAdProperties:[info mutableCopy]]; - - if (adAdapter.properties) { - MPNativeAd *interfaceAd = [[MPNativeAd alloc] initWithAdAdapter:adAdapter]; - [interfaceAd.impressionTrackerURLs addObjectsFromArray:adAdapter.impressionTrackerURLs]; - [interfaceAd.clickTrackerURLs addObjectsFromArray:adAdapter.clickTrackerURLs]; - - // Get the image urls so we can download them prior to returning the ad. - NSMutableArray *imageURLs = [NSMutableArray array]; - for (NSString *key in [info allKeys]) { - if ([[key lowercaseString] hasSuffix:@"image"] && [[info objectForKey:key] isKindOfClass:[NSString class]]) { - NSString * urlString = [info objectForKey:key]; - // Empty URL string is acceptable. We only care about non-empty string that is not a valid URL. - if (urlString.length != 0 - && ![MPNativeAdUtils addURLString:urlString toURLArray:imageURLs]) { - NSError * error = MPNativeAdNSErrorForInvalidImageURL(); - MPLogAdEvent([MPLogEvent adLoadFailedForAdapter:NSStringFromClass(self.class) error:error], adUnitId); - [self.delegate nativeCustomEvent:self didFailToLoadAdWithError:error]; - } - } - } - - [super precacheImagesWithURLs:imageURLs completionBlock:^(NSArray *errors) { - if (errors) { - NSError * error = MPNativeAdNSErrorForImageDownloadFailure(); - MPLogAdEvent([MPLogEvent adLoadFailedForAdapter:NSStringFromClass(self.class) error:error], adUnitId); - [self.delegate nativeCustomEvent:self didFailToLoadAdWithError:error]; - } else { - MPLogAdEvent([MPLogEvent adLoadSuccessForAdapter:NSStringFromClass(self.class)], adUnitId); - [self.delegate nativeCustomEvent:self didLoadAd:interfaceAd]; - } - }]; - } else { - NSError * error = MPNativeAdNSErrorForInvalidAdServerResponse(nil); - MPLogAdEvent([MPLogEvent adLoadFailedForAdapter:NSStringFromClass(self.class) error:error], adUnitId); - [self.delegate nativeCustomEvent:self didFailToLoadAdWithError:error]; - } - -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAd+Internal.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAd+Internal.h deleted file mode 100644 index ccdbe9fe99..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAd+Internal.h +++ /dev/null @@ -1,45 +0,0 @@ -// -// MPNativeAd+Internal.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPNativeAd.h" - -@class MPNativeView; - -@interface MPNativeAd (Internal) - -@property (nonatomic, readonly) NSDate *creationDate; -@property (nonatomic) MPNativeView *associatedView; -@property (nonatomic, readwrite, strong) id renderer; -@property (nonatomic, readwrite, strong) MPAdConfiguration *configuration; -@property (nonatomic, readwrite, strong) NSString *adUnitID; -@property (nonatomic, readonly) NSMutableSet *clickTrackerURLs; -@property (nonatomic, readonly) NSMutableSet *impressionTrackerURLs; -@property (nonatomic, readonly, strong) id adAdapter; - -/** - * This method is called by the ad placers when the sizes of the ad placer stream - * view's have changed. The ad placer will get the size from the renderer and just - * pass it through to the mpnativead to update the view size since the ad is the only one - * who has access to the ad view. -*/ -- (void)updateAdViewSize:(CGSize)size; - -/** - * Retrieves the custom ad view with its frame set to the would-be containing native view. Unlike - * `retrieveAdViewWithError:`, this method does not have side effects of changing the view hierarchy - * and is only intended for size calculation purposes. - * - * @param error A pointer to an error object. If an error occurs, this pointer will be set to an - * actual error object containing the error information. - * - * @return If successful, the method will return the rendered ad. The method will - * return nil if it cannot render the ad data to a view. - */ -- (UIView *)retrieveAdViewForSizeCalculationWithError:(NSError **)error; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAd+Internal.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAd+Internal.m deleted file mode 100644 index b4887ad2b8..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAd+Internal.m +++ /dev/null @@ -1,41 +0,0 @@ -// -// MPNativeAd+Internal.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPNativeAd+Internal.h" -#import "MPNativeAdRenderer.h" -#import "MPNativeView.h" - -@implementation MPNativeAd (Internal) - -@dynamic impressionTrackerURLs; -@dynamic clickTrackerURLs; -@dynamic creationDate; -@dynamic adUnitID; -@dynamic renderer; -@dynamic configuration; -@dynamic associatedView; -@dynamic adAdapter; - -- (void)updateAdViewSize:(CGSize)size -{ - self.associatedView.frame = CGRectMake(0, 0, size.width, size.height); -} - -- (UIView *)retrieveAdViewForSizeCalculationWithError:(NSError **)error -{ - // retrieve the ad and apply the frame of the associatedView (superview of the adView) so the - // adView can calculate its own size. It's important that we don't add adView to the associatedView - // because this can mess up expectations in `retrieveAdViewWithError:` especially around hydrating - // image views asynchronously - UIView *adView = [self.renderer retrieveViewWithAdapter:self.adAdapter error:error]; - adView.frame = self.associatedView.bounds; - return adView; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdConfigValues+Internal.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdConfigValues+Internal.h deleted file mode 100644 index 87e74cc584..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdConfigValues+Internal.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// MPNativeAdConfigValues+Internal.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPNativeAdConfigValues.h" - -@interface MPNativeAdConfigValues (Internal) - -- (BOOL)isValidPercentage:(NSInteger)percentage; -- (BOOL)isValidTimeInterval:(NSTimeInterval)timeInterval; -- (BOOL)isValidNumberOfPixels:(CGFloat)pixels; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdConfigValues+Internal.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdConfigValues+Internal.m deleted file mode 100644 index 6f05842f61..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdConfigValues+Internal.m +++ /dev/null @@ -1,27 +0,0 @@ -// -// MPNativeAdConfigValues+Internal.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPNativeAdConfigValues+Internal.h" - -@implementation MPNativeAdConfigValues (Internal) - -- (BOOL)isValidPercentage:(NSInteger)percentage -{ - return (percentage >= 0 && percentage <= 100); -} - -- (BOOL)isValidTimeInterval:(NSTimeInterval)timeInterval -{ - return timeInterval > 0.0; -} - -- (BOOL)isValidNumberOfPixels:(CGFloat)pixels { - return pixels >= 0.0; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdConfigValues.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdConfigValues.h deleted file mode 100644 index 6639a47977..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdConfigValues.h +++ /dev/null @@ -1,30 +0,0 @@ -// -// MPNativeAdConfigValues.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@interface MPNativeAdConfigValues : NSObject - -@property (nonatomic, readonly) CGFloat impressionMinVisiblePixels; -@property (nonatomic, readonly) NSInteger impressionMinVisiblePercent; -@property (nonatomic, readonly) NSTimeInterval impressionMinVisibleSeconds; - -- (instancetype)initWithImpressionMinVisiblePixels:(CGFloat)impressionMinVisiblePixels - impressionMinVisiblePercent:(NSInteger)impressionMinVisiblePercent - impressionMinVisibleSeconds:(NSTimeInterval)impressionMinVisibleSeconds NS_DESIGNATED_INITIALIZER; - -@property (nonatomic, readonly) BOOL isImpressionMinVisiblePercentValid; -@property (nonatomic, readonly) BOOL isImpressionMinVisibleSecondsValid; -@property (nonatomic, readonly) BOOL isImpressionMinVisiblePixelsValid; - -/** - * `init` is not available. - */ -- (instancetype)init __attribute__((unavailable("init not available"))); - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdConfigValues.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdConfigValues.m deleted file mode 100644 index 435b44a9e5..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdConfigValues.m +++ /dev/null @@ -1,38 +0,0 @@ -// -// MPNativeAdConfigValues.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPNativeAdConfigValues.h" -#import "MPNativeAdConfigValues+Internal.h" - -@implementation MPNativeAdConfigValues - -- (instancetype)initWithImpressionMinVisiblePixels:(CGFloat)impressionMinVisiblePixels - impressionMinVisiblePercent:(NSInteger)impressionMinVisiblePercent - impressionMinVisibleSeconds:(NSTimeInterval)impressionMinVisibleSeconds { - if (self = [super init]) { - _impressionMinVisiblePixels = impressionMinVisiblePixels; - _impressionMinVisiblePercent = impressionMinVisiblePercent; - _impressionMinVisibleSeconds = impressionMinVisibleSeconds; - } - - return self; -} - -- (BOOL)isImpressionMinVisibleSecondsValid { - return [self isValidTimeInterval:self.impressionMinVisibleSeconds]; -} - -- (BOOL)isImpressionMinVisiblePercentValid { - return [self isValidPercentage:self.impressionMinVisiblePercent]; -} - -- (BOOL)isImpressionMinVisiblePixelsValid { - return [self isValidNumberOfPixels:self.impressionMinVisiblePixels]; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdRendererConstants.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdRendererConstants.h deleted file mode 100644 index 7dc20d58a8..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdRendererConstants.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// MPNativeAdRendererConstants.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -/** - * Return this value from `MPNativeViewSizeHandler` when you want to display ad content that could - * have variable height and needs to be calculated only after ad properties are available. The - * implementation of ad view conforming to the `MPNativeAdRendering` protocol should implement - * `sizeThatFits:` and handle layout changes appropriately. - */ -FOUNDATION_EXPORT const CGFloat MPNativeViewDynamicDimension; diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdRendererImageHandler.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdRendererImageHandler.h deleted file mode 100644 index 30f912eaf2..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdRendererImageHandler.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// MPNativeAdRendererImageHandler.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import -#import "MPImageLoader.h" - -@protocol MPNativeAdRendererImageHandlerDelegate -@end - -@interface MPNativeAdRendererImageHandler : MPImageLoader - -@property (nonatomic, weak) id delegate; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdRendererImageHandler.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdRendererImageHandler.m deleted file mode 100644 index 7f88b0ae6d..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdRendererImageHandler.m +++ /dev/null @@ -1,15 +0,0 @@ -// -// MPNativeAdRendererImageHandler.m -// MoPubSDK -// -// Created by Haoxin Li on 3/11/20. -// Copyright © 2020 MoPub. All rights reserved. -// - -#import "MPNativeAdRendererImageHandler.h" - -@implementation MPNativeAdRendererImageHandler - -@dynamic delegate; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdSourceQueue.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdSourceQueue.h deleted file mode 100644 index 7177a562f4..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdSourceQueue.h +++ /dev/null @@ -1,32 +0,0 @@ -// -// MPNativeAdSourceQueue.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -@class MPNativeAdRequestTargeting; -@class MPNativeAd; - -@protocol MPNativeAdSourceQueueDelegate; - -@interface MPNativeAdSourceQueue : NSObject - -@property (nonatomic, weak) id delegate; - - -- (instancetype)initWithAdUnitIdentifier:(NSString *)identifier rendererConfigurations:(NSArray *)rendererConfigurations andTargeting:(MPNativeAdRequestTargeting *)targeting; -- (MPNativeAd *)dequeueAdWithMaxAge:(NSTimeInterval)age; -- (NSUInteger)count; -- (void)loadAds; -- (void)cancelRequests; - -@end - -@protocol MPNativeAdSourceQueueDelegate - -- (void)adSourceQueueAdIsAvailable:(MPNativeAdSourceQueue *)source; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdSourceQueue.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdSourceQueue.m deleted file mode 100644 index b0b7b5ca86..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdSourceQueue.m +++ /dev/null @@ -1,153 +0,0 @@ -// -// MPNativeAdSourceQueue.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPNativeAdSourceQueue.h" -#import "MPNativeAd+Internal.h" -#import "MPNativeAdRequestTargeting.h" -#import "MPNativeAdRequest+MPNativeAdSource.h" -#import "MPLogging.h" -#import "MPNativeAdError.h" - -static NSUInteger const kCacheSizeLimit = 1; -static NSTimeInterval const kAdFetchRetryTimes[] = {1, 3, 5, 25, 60, 300}; -// Calculate the number of elements inside the array by taking the size divided by the size of one element. -static NSUInteger const kMaxRetries = sizeof(kAdFetchRetryTimes)/sizeof(kAdFetchRetryTimes[0]); - -@interface MPNativeAdSourceQueue () - -@property (nonatomic) NSMutableArray *adQueue; -@property (nonatomic, assign) NSUInteger adFetchRetryCounter; -@property (nonatomic, assign) NSUInteger currentSequence; -@property (nonatomic, copy) NSString *adUnitIdentifier; -@property (nonatomic) MPNativeAdRequestTargeting *targeting; -@property (nonatomic) NSArray *rendererConfigurations; -@property (nonatomic, assign) BOOL isAdLoading; - -@end - -@implementation MPNativeAdSourceQueue - -#pragma mark - Object Lifecycle - -- (instancetype)initWithAdUnitIdentifier:(NSString *)identifier rendererConfigurations:(NSArray *)rendererConfigurations andTargeting:(MPNativeAdRequestTargeting *)targeting -{ - self = [super init]; - if (self) { - _adUnitIdentifier = [identifier copy]; - _rendererConfigurations = rendererConfigurations; - _targeting = targeting; - _adQueue = [[NSMutableArray alloc] init]; - } - return self; -} - - -#pragma mark - Public Methods - -- (MPNativeAd *)dequeueAd -{ - MPNativeAd *nextAd = [self.adQueue firstObject]; - [self.adQueue removeObject:nextAd]; - [self loadAds]; - return nextAd; -} - -- (MPNativeAd *)dequeueAdWithMaxAge:(NSTimeInterval)age -{ - MPNativeAd *nextAd = [self dequeueAd]; - - while (nextAd && ![self isAdAgeValid:nextAd withMaxAge:age]) { - nextAd = [self dequeueAd]; - } - - return nextAd; -} - -- (void)addNativeAd:(MPNativeAd *)nativeAd -{ - [self.adQueue addObject:nativeAd]; -} - -- (NSUInteger)count -{ - return [self.adQueue count]; -} - -- (void)cancelRequests -{ - [self resetBackoff]; -} - -#pragma mark - Internal Logic - -- (BOOL)isAdAgeValid:(MPNativeAd *)ad withMaxAge:(NSTimeInterval)maxAge -{ - NSTimeInterval adAge = [ad.creationDate timeIntervalSinceNow]; - - return fabs(adAge) < maxAge; -} - -#pragma mark - Ad Requests - -- (void)resetBackoff -{ - [NSObject cancelPreviousPerformRequestsWithTarget:self]; - self.adFetchRetryCounter = 0; -} - -- (void)loadAds -{ - if (self.adFetchRetryCounter == 0) { - [self replenishCache]; - } -} - -- (void)replenishCache -{ - if ([self count] >= kCacheSizeLimit || self.isAdLoading) { - return; - } - - self.isAdLoading = YES; - - MPNativeAdRequest *adRequest = [MPNativeAdRequest requestWithAdUnitIdentifier:self.adUnitIdentifier rendererConfigurations:self.rendererConfigurations]; - adRequest.targeting = self.targeting; - - [adRequest startForAdSequence:self.currentSequence withCompletionHandler:^(MPNativeAdRequest *request, MPNativeAd *response, NSError *error) { - if (response && !error) { - self.adFetchRetryCounter = 0; - - [self addNativeAd:response]; - self.currentSequence++; - if ([self count] == 1) { - [self.delegate adSourceQueueAdIsAvailable:self]; - } - } else { - MPLogDebug(@"%@", error); - //increment in this failure case to prevent retrying a request that wasn't bid on. - //currently under discussion on whether we do this or not. - if (error.code == MPNativeAdErrorNoInventory) { - self.currentSequence++; - } - - if (self.adFetchRetryCounter < kMaxRetries) { - NSTimeInterval retryTime = kAdFetchRetryTimes[self.adFetchRetryCounter]; - self.adFetchRetryCounter++; - [self performSelector:@selector(replenishCache) withObject:nil afterDelay:retryTime]; - MPLogDebug(@"Will re-attempt to replenish the ad cache in %.1f seconds.", retryTime); - } else { - // Don't try to fetch anymore ads after we have tried kMaxRetries times. - MPLogDebug(@"Replenishing the cache has timed out."); - } - } - self.isAdLoading = NO; - [self loadAds]; - }]; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdUtils.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdUtils.h deleted file mode 100644 index 63d027f114..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdUtils.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// MPNativeAdUtils.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -extern NSTimeInterval const kUpdateVisibleCellsInterval; - -@interface MPNativeAdUtils : NSObject - -+ (BOOL)addURLString:(NSString *)urlString toURLArray:(NSMutableArray *)urlArray; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdUtils.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdUtils.m deleted file mode 100644 index edc3ff0cf1..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdUtils.m +++ /dev/null @@ -1,29 +0,0 @@ -// -// MPNativeAdUtils.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPNativeAdUtils.h" - -NSTimeInterval const kUpdateVisibleCellsInterval = 0.25; - -@implementation MPNativeAdUtils - -+ (BOOL)addURLString:(NSString *)urlString toURLArray:(NSMutableArray *)urlArray -{ - if (urlString.length == 0) { - return NO; - } - - NSURL *url = [NSURL URLWithString:urlString]; - if (url) { - [urlArray addObject:url]; - return YES; - } else { - return NO; - } -} -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativePositionResponseDeserializer.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativePositionResponseDeserializer.h deleted file mode 100644 index 52145dc824..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativePositionResponseDeserializer.h +++ /dev/null @@ -1,52 +0,0 @@ -// -// MPNativePositionResponseDeserializer.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import - -@class MPClientAdPositioning; - -typedef enum : NSUInteger { - MPNativePositionResponseDataIsEmpty, - MPNativePositionResponseIsNotValidJSON, - MPNativePositionResponseJSONHasInvalidPositionData, -} MPNativePositionResponseDeserializationErrorCode; - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * The `MPNativePositionResponseDeserializer` class is used to convert HTTP response data - * containing positioning information into ad positioning objects that may be used by various - * native ad placers. - */ -@interface MPNativePositionResponseDeserializer : NSObject - -/** - * Creates and returns an object that can deserialize HTTP response data into ad positioning - * objects. - * - * @return The newly created deserializer. - */ -+ (instancetype)deserializer; - -/** - * Returns an ad positioning object given a data object. - * - * If an error occurs during the data conversion, this method will return an empty positioning - * object containing no desired ad positions. - * - * @param data A data object containing positioning information. - * @param error A pointer to an error object. If an error occurs, this pointer will be set to an - * actual error object containing the error information. - * - * @return An `MPClientAdPositioning` object. This is guaranteed to be non-nil; if an error occurs - * during deserialization, the return value will still be a positioning object with no ad positions. - */ -- (MPClientAdPositioning *)clientPositioningForData:(NSData *)data error:(NSError **)error; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativePositionResponseDeserializer.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativePositionResponseDeserializer.m deleted file mode 100644 index 83cf6ca185..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativePositionResponseDeserializer.m +++ /dev/null @@ -1,251 +0,0 @@ -// -// MPNativePositionResponseDeserializer.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPNativePositionResponseDeserializer.h" -#import "MPClientAdPositioning.h" -#import "NSJSONSerialization+MPAdditions.h" - -static NSString * const MPNativePositionResponseDeserializationErrorDomain = @"com.mopub.iossdk.position.deserialization"; -static NSString * const MPNativePositionResponseFixedPositionsKey = @"fixed"; -static NSString * const MPNativePositionResponseSectionKey = @"section"; -static NSString * const MPNativePositionResponsePositionKey = @"position"; -static NSString * const MPNativePositionResponseRepeatingKey = @"repeating"; -static NSString * const MPNativePositionResponseIntervalKey = @"interval"; -static NSInteger const MPMinRepeatingInterval = 2; -static NSInteger const MPMaxRepeatingInterval = 1 << 16; - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MPNativePositionResponseDeserializer - -+ (instancetype)deserializer -{ - return [[[self class] alloc] init]; -} - -- (MPClientAdPositioning *)clientPositioningForData:(NSData *)data error:(NSError **)error -{ - MPClientAdPositioning *positioning = [MPClientAdPositioning positioning]; - - if (!data || [data length] == 0) { - [self safeAssignError:error code:MPNativePositionResponseDataIsEmpty description:@"Positioning cannot be created from nil or empty data."]; - return [MPClientAdPositioning positioning]; - } - - NSError *deserializationError = nil; - NSDictionary *positionDictionary = [NSJSONSerialization mp_JSONObjectWithData:data options:0 clearNullObjects:YES error:&deserializationError]; - - if (deserializationError) { - [self safeAssignError:error code:MPNativePositionResponseIsNotValidJSON description:@"Failed to deserialize JSON." underlyingError:deserializationError]; - return [MPClientAdPositioning positioning]; - } - - NSError *fixedPositionsError = nil; - NSArray *fixedPositions = [self parseFixedPositionsObject:[positionDictionary objectForKey:MPNativePositionResponseFixedPositionsKey] error:&fixedPositionsError]; - - if (fixedPositionsError) { - if (error) { - *error = fixedPositionsError; - } - return [MPClientAdPositioning positioning]; - } - - NSError *repeatingIntervalError = nil; - NSInteger repeatingInterval = [self parseRepeatingIntervalObject:[positionDictionary objectForKey:MPNativePositionResponseRepeatingKey] error:&repeatingIntervalError]; - - if (repeatingIntervalError) { - if (error) { - *error = repeatingIntervalError; - } - return [MPClientAdPositioning positioning]; - } - - if ([fixedPositions count] == 0 && repeatingInterval <= 0) { - [self safeAssignError:error code:MPNativePositionResponseJSONHasInvalidPositionData description:@"Positioning object must have either fixed positions or a repeating interval."]; - return [MPClientAdPositioning positioning]; - } - - [fixedPositions enumerateObjectsUsingBlock:^(NSIndexPath *indexPath, NSUInteger idx, BOOL *stop) { - [positioning addFixedIndexPath:indexPath]; - }]; - [positioning enableRepeatingPositionsWithInterval:repeatingInterval]; - return positioning; -} - -#pragma mark - Parsing and validation - -- (NSArray *)parseFixedPositionsObject:(id)positionsObject error:(NSError **)error -{ - NSMutableArray *parsedPositions = [NSMutableArray array]; - - if (positionsObject && ![positionsObject isKindOfClass:[NSArray class]]) { - [self safeAssignError:error code:MPNativePositionResponseJSONHasInvalidPositionData description:[NSString stringWithFormat:@"Expected object for key \"%@\" to be an array. Actual: %@", MPNativePositionResponseFixedPositionsKey, positionsObject]]; - return nil; - } - - __block NSError *fixedPositionError = nil; - [positionsObject enumerateObjectsUsingBlock:^(id positionObj, NSUInteger idx, BOOL *stop) { - if (![self validatePositionObject:positionObj error:&fixedPositionError]) { - *stop = YES; - return; - } - - NSInteger section = [self integerFromDictionary:positionObj forKey:MPNativePositionResponseSectionKey defaultValue:0]; - NSInteger position = [self integerFromDictionary:positionObj forKey:MPNativePositionResponsePositionKey defaultValue:0]; - NSIndexPath *indexPath = [NSIndexPath indexPathForRow:position inSection:section]; - [parsedPositions addObject:indexPath]; - }]; - - if (fixedPositionError) { - if (error) { - *error = fixedPositionError; - } - return nil; - } - - return parsedPositions; -} - -- (NSInteger)parseRepeatingIntervalObject:(id)repeatingIntervalObject error:(NSError **)error -{ - if (!repeatingIntervalObject) { - return 0; - } - - NSError *repeatingIntervalError = nil; - if (![self validateRepeatingIntervalObject:repeatingIntervalObject error:&repeatingIntervalError]) { - if (error) { - *error = repeatingIntervalError; - } - return 0; - } - - return [self integerFromDictionary:repeatingIntervalObject forKey:MPNativePositionResponseIntervalKey defaultValue:0]; -} - -- (BOOL)validatePositionObject:(id)positionObject error:(NSError **)error -{ - if (![positionObject isKindOfClass:[NSDictionary class]]) { - [self safeAssignError:error code:MPNativePositionResponseJSONHasInvalidPositionData description:[NSString stringWithFormat:@"Position object is not a dictionary: %@.", positionObject]]; - return NO; - } - - // Section number is not required. If it's present, we have to check that it's non-negative; - // if it isn't there, we assign a section number of 0. - NSInteger section = [positionObject objectForKey:MPNativePositionResponseSectionKey] ? [self integerFromDictionary:positionObject forKey:MPNativePositionResponseSectionKey defaultValue:-1] : 0; - if (section < 0) { - [self safeAssignError:error code:MPNativePositionResponseJSONHasInvalidPositionData description:[NSString stringWithFormat:@"Position object has an invalid \"%@\" value or is not a positive number: %ld.", MPNativePositionResponseSectionKey, (long)section]]; - return NO; - } - - // Unlike section, position is required. It also must be a non-negative number. - NSInteger position = [self integerFromDictionary:positionObject forKey:MPNativePositionResponsePositionKey defaultValue:-1]; - if (position < 0) { - [self safeAssignError:error code:MPNativePositionResponseJSONHasInvalidPositionData description:[NSString stringWithFormat:@"Position object has an invalid \"%@\" value or is not a positive number: %ld.", MPNativePositionResponsePositionKey, (long)position]]; - return NO; - } - - return YES; -} - -- (BOOL)validateRepeatingIntervalObject:(id)repeatingIntervalObject error:(NSError **)error -{ - if (![repeatingIntervalObject isKindOfClass:[NSDictionary class]]) { - [self safeAssignError:error code:MPNativePositionResponseJSONHasInvalidPositionData description:[NSString stringWithFormat:@"Repeating interval object is not a dictionary: %@.", repeatingIntervalObject]]; - return NO; - } - - // The object must contain a value between MPMinRepeatingInterval and MPMaxRepeatingInterval. - NSInteger interval = [self integerFromDictionary:repeatingIntervalObject forKey:MPNativePositionResponseIntervalKey defaultValue:0]; - if (interval < MPMinRepeatingInterval || interval > MPMaxRepeatingInterval) { - [self safeAssignError:error code:MPNativePositionResponseJSONHasInvalidPositionData description:[NSString stringWithFormat:@"\"%@\" value in repeating interval object needs to be between %ld and %ld: %ld.", MPNativePositionResponseIntervalKey, (long)MPMinRepeatingInterval, (long)MPMaxRepeatingInterval, (long)interval]]; - return NO; - } - - return YES; -} - -#pragma mark - Dictionary helpers - -/** - * Returns an `NSInteger` value associated with a certain key in a dictionary, or a specified - * default value if the key is not associated with a valid integer representation. - * - * Valid integer representations include `NSNumber` objects and `NSString` objects that - * consist only of integer or sign characters. - * - * @param dictionary A dictionary containing keys and values. - * @param key The key for which to return an integer value. - * @param defaultValue A value that should be returned if `key` is not associated with an object - * that contains an integer representation. - * - * @return The integer value associated with `key`, or `defaultValue` if the object is not an - * `NSNumber` or an `NSString` representing an integer. - */ -- (NSInteger)integerFromDictionary:(NSDictionary *)dictionary forKey:(NSString *)key defaultValue:(NSInteger)defaultValue -{ - static NSCharacterSet *nonIntegerCharacterSet; - - id object = [dictionary objectForKey:key]; - - if ([object isKindOfClass:[NSNumber class]]) { - return [object integerValue]; - } else if ([object isKindOfClass:[NSString class]]) { - if (!nonIntegerCharacterSet) { - nonIntegerCharacterSet = [[NSCharacterSet characterSetWithCharactersInString:@"0123456789-"] invertedSet]; - } - - // If the string consists of all digits, we'll call -integerValue. Otherwise, return the - // default value. - if ([object rangeOfCharacterFromSet:nonIntegerCharacterSet].location == NSNotFound) { - return [object integerValue]; - } else { - return defaultValue; - } - } else { - return defaultValue; - } -} - -#pragma mark - Error helpers - -- (void)safeAssignError:(NSError **)error code:(MPNativePositionResponseDeserializationErrorCode)code userInfo:(NSDictionary *)userInfo -{ - if (error) { - *error = [self deserializationErrorWithCode:code userInfo:userInfo]; - } -} - -- (void)safeAssignError:(NSError **)error code:(MPNativePositionResponseDeserializationErrorCode)code description:(NSString *)description -{ - [self safeAssignError:error code:code description:description underlyingError:nil]; -} - -- (void)safeAssignError:(NSError **)error code:(MPNativePositionResponseDeserializationErrorCode)code description:(NSString *)description underlyingError:(NSError *)underlyingError -{ - NSMutableDictionary *userInfo = [NSMutableDictionary dictionary]; - - if (description) { - [userInfo setObject:description forKey:NSLocalizedDescriptionKey]; - } - - if (underlyingError) { - [userInfo setObject:underlyingError forKey:NSUnderlyingErrorKey]; - } - - [self safeAssignError:error code:code userInfo:userInfo]; -} - -- (NSError *)deserializationErrorWithCode:(MPNativePositionResponseDeserializationErrorCode)code userInfo:(NSDictionary *)userInfo -{ - return [NSError errorWithDomain:MPNativePositionResponseDeserializationErrorDomain - code:code - userInfo:userInfo]; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativePositionSource.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativePositionSource.h deleted file mode 100644 index d2b897e1bd..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativePositionSource.h +++ /dev/null @@ -1,27 +0,0 @@ -// -// MPNativePositionSource.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@class MPAdPositioning; - -typedef enum : NSUInteger { - MPNativePositionSourceInvalidAdUnitIdentifier, - MPNativePositionSourceEmptyResponse, - MPNativePositionSourceDeserializationFailed, - MPNativePositionSourceConnectionFailed, -} MPNativePositionSourceErrorCode; - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MPNativePositionSource : NSObject - -- (void)loadPositionsWithAdUnitIdentifier:(NSString *)identifier completionHandler:(void (^)(MPAdPositioning *positioning, NSError *error))completionHandler; -- (void)cancel; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativePositionSource.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativePositionSource.m deleted file mode 100644 index 852245dbfc..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativePositionSource.m +++ /dev/null @@ -1,160 +0,0 @@ -// -// MPNativePositionSource.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPNativePositionSource.h" -#import "MPConstants.h" -#import "MPAdPositioning.h" -#import "MPClientAdPositioning.h" -#import "MPLogging.h" -#import "MPNativePositionResponseDeserializer.h" -#import "MPAPIEndpoints.h" -#import "MPHTTPNetworkSession.h" -#import "MPURLRequest.h" -#import "MPAdServerURLBuilder.h" - -static NSString * const kPositioningSourceErrorDomain = @"com.mopub.iossdk.positioningsource"; -static const NSTimeInterval kMaximumRetryInterval = 60.0; -static const NSTimeInterval kMinimumRetryInterval = 1.0; -static const CGFloat kRetryIntervalBackoffMultiplier = 2.0; - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MPNativePositionSource () - -@property (nonatomic, assign) BOOL loading; -@property (nonatomic, copy) NSString *adUnitIdentifier; -@property (nonatomic, strong) NSURLSessionTask *task; -@property (nonatomic, copy) void (^completionHandler)(MPAdPositioning *positioning, NSError *error); -@property (nonatomic, assign) NSTimeInterval maximumRetryInterval; -@property (nonatomic, assign) NSTimeInterval minimumRetryInterval; -@property (nonatomic, assign) NSTimeInterval retryInterval; -@property (nonatomic, assign) NSUInteger retryCount; -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MPNativePositionSource - -- (id)init -{ - if (self) { - self.maximumRetryInterval = kMaximumRetryInterval; - self.minimumRetryInterval = kMinimumRetryInterval; - self.retryInterval = self.minimumRetryInterval; - } - return self; -} - -- (void)dealloc -{ - [_task cancel]; -} - -#pragma mark - Public - -- (void)loadPositionsWithAdUnitIdentifier:(NSString *)identifier completionHandler:(void (^)(MPAdPositioning *positioning, NSError *error))completionHandler -{ - NSAssert(completionHandler != nil, @"A completion handler is required to load positions."); - - if (![identifier length]) { - NSError *invalidIDError = [NSError errorWithDomain:kPositioningSourceErrorDomain code:MPNativePositionSourceInvalidAdUnitIdentifier userInfo:nil]; - completionHandler(nil, invalidIDError); - return; - } - - self.adUnitIdentifier = identifier; - self.completionHandler = completionHandler; - self.retryCount = 0; - self.retryInterval = self.minimumRetryInterval; - - MPLogInfo(@"Requesting ad positions for native ad unit (%@).", identifier); - - MPURLRequest *request = [[MPURLRequest alloc] initWithURL:[MPAdServerURLBuilder nativePositionUrlForAdUnitId:identifier]]; - [self.task cancel]; - self.task = [self httpTaskWithRequest:request]; -} - -- (void)cancel -{ - // Cancel any connection currently in flight. - [self.task cancel]; - - // Cancel any queued retry requests. - [NSObject cancelPreviousPerformRequestsWithTarget:self]; -} - -#pragma mark - Internal - -- (NSURLSessionTask *)httpTaskWithRequest:(MPURLRequest *)request { - __weak __typeof__(self) weakSelf = self; - NSURLSessionTask * task = [MPHTTPNetworkSession startTaskWithHttpRequest:request responseHandler:^(NSData * _Nonnull data, NSHTTPURLResponse * _Nonnull response) { - __typeof__(self) strongSelf = weakSelf; - - [strongSelf parsePositioningData:data]; - } errorHandler:^(NSError * _Nonnull error) { - __typeof__(self) strongSelf = weakSelf; - - // MPNativePositionSource was deallocated during a networking - // operation. Do nothing. - if (strongSelf == nil) { - return; - } - - if (strongSelf.retryInterval >= strongSelf.maximumRetryInterval) { - strongSelf.completionHandler(nil, error); - strongSelf.completionHandler = nil; - } else { - [strongSelf performSelector:@selector(retryLoadingPositions) withObject:nil afterDelay:strongSelf.retryInterval]; - strongSelf.retryInterval = MIN(strongSelf.retryInterval * kRetryIntervalBackoffMultiplier, strongSelf.maximumRetryInterval); - } - }]; - - return task; -} - -- (void)retryLoadingPositions -{ - self.retryCount++; - - MPLogInfo(@"Retrying positions (retry attempt #%lu).", (unsigned long)self.retryCount); - - MPURLRequest *request = [[MPURLRequest alloc] initWithURL:[MPAdServerURLBuilder nativePositionUrlForAdUnitId:self.adUnitIdentifier]]; - [self.task cancel]; - self.task = [self httpTaskWithRequest:request]; -} - -- (void)parsePositioningData:(NSData *)data -{ - NSError *deserializationError = nil; - MPClientAdPositioning *positioning = [[MPNativePositionResponseDeserializer deserializer] clientPositioningForData:data error:&deserializationError]; - - if (deserializationError) { - MPLogDebug(@"Position deserialization failed with error: %@", deserializationError); - - NSError *underlyingError = [[deserializationError userInfo] objectForKey:NSUnderlyingErrorKey]; - if ([underlyingError code] == MPNativePositionResponseDataIsEmpty) { - // Empty response data means the developer hasn't assigned any ad positions for the ad - // unit. No point in retrying the request. - self.completionHandler(nil, [NSError errorWithDomain:kPositioningSourceErrorDomain code:MPNativePositionSourceEmptyResponse userInfo:nil]); - self.completionHandler = nil; - } else if (self.retryInterval >= self.maximumRetryInterval) { - self.completionHandler(nil, deserializationError); - self.completionHandler = nil; - } else { - [self performSelector:@selector(retryLoadingPositions) withObject:nil afterDelay:self.retryInterval]; - self.retryInterval = MIN(self.retryInterval * kRetryIntervalBackoffMultiplier, self.maximumRetryInterval); - } - - return; - } - - self.completionHandler(positioning, nil); - self.completionHandler = nil; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeView.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeView.h deleted file mode 100644 index c031bd16c2..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeView.h +++ /dev/null @@ -1,25 +0,0 @@ -// -// MPNativeView.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@protocol MPNativeViewDelegate; - -@interface MPNativeView : UIView - -@property (nonatomic, weak) id delegate; - -@end - -@protocol MPNativeViewDelegate - -@required - -- (void)nativeViewWillMoveToSuperview:(UIView *)superview; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeView.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeView.m deleted file mode 100644 index 580814636c..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeView.m +++ /dev/null @@ -1,18 +0,0 @@ -// -// MPNativeView.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPNativeView.h" - -@implementation MPNativeView - -- (void)willMoveToSuperview:(UIView *)superview -{ - [self.delegate nativeViewWillMoveToSuperview:superview]; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPStreamAdPlacerDelegate.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPStreamAdPlacerDelegate.h deleted file mode 100644 index a458bd4ee1..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPStreamAdPlacerDelegate.h +++ /dev/null @@ -1,40 +0,0 @@ -// -// MPStreamAdPlacerDelegate.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPMoPubAdPlacer.h" - -@class MPStreamAdPlacer; - -@protocol MPStreamAdPlacerDelegate - -@optional -- (void)adPlacer:(MPStreamAdPlacer *)adPlacer didLoadAdAtIndexPath:(NSIndexPath *)indexPath; -- (void)adPlacer:(MPStreamAdPlacer *)adPlacer didRemoveAdsAtIndexPaths:(NSArray *)indexPaths; - -/* - * This method is called when a native ad, placed by the stream ad placer, will present a modal view controller. - * - * @param placer The stream ad placer that contains the ad displaying the modal. - */ -- (void)nativeAdWillPresentModalForStreamAdPlacer:(MPStreamAdPlacer *)adPlacer; - -/* - * This method is called when a native ad, placed by the stream ad placer, did dismiss its modal view controller. - * - * @param placer The stream ad placer that contains the ad that dismissed the modal. - */ -- (void)nativeAdDidDismissModalForStreamAdPlacer:(MPStreamAdPlacer *)adPlacer; - -/* - * This method is called when a native ad, placed by the stream ad placer, will cause the app to background due to user interaction with the ad. - * - * @param placer The stream ad placer that contains the ad causing the app to background. - */ -- (void)nativeAdWillLeaveApplicationFromStreamAdPlacer:(MPStreamAdPlacer *)adPlacer; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPTableViewAdPlacerCell.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPTableViewAdPlacerCell.h deleted file mode 100644 index 783b1bb0db..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPTableViewAdPlacerCell.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// MPTableViewAdPlacerCell.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@interface MPTableViewAdPlacerCell : UITableViewCell - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPTableViewAdPlacerCell.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPTableViewAdPlacerCell.m deleted file mode 100644 index edf6643f7d..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPTableViewAdPlacerCell.m +++ /dev/null @@ -1,13 +0,0 @@ -// -// MPTableViewAdPlacerCell.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPTableViewAdPlacerCell.h" - -@implementation MPTableViewAdPlacerCell - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPAdPositioning.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPAdPositioning.h deleted file mode 100644 index eb4918461c..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPAdPositioning.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// MPAdPositioning.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@interface MPAdPositioning : NSObject - -@property (nonatomic, assign) NSUInteger repeatingInterval; -@property (nonatomic, strong, readonly) NSMutableOrderedSet *fixedPositions; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPAdPositioning.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPAdPositioning.m deleted file mode 100644 index 94decf0886..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPAdPositioning.m +++ /dev/null @@ -1,40 +0,0 @@ -// -// MPAdPositioning.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPAdPositioning.h" - -@interface MPAdPositioning () - -@property (nonatomic, strong) NSMutableOrderedSet *fixedPositions; - -@end - -@implementation MPAdPositioning - -- (id)init -{ - self = [super init]; - if (self) { - _fixedPositions = [[NSMutableOrderedSet alloc] init]; - } - - return self; -} - - -#pragma mark - - -- (id)copyWithZone:(NSZone *)zone -{ - MPAdPositioning *newPositioning = [[[self class] allocWithZone:zone] init]; - newPositioning.fixedPositions = [self.fixedPositions copyWithZone:zone]; - newPositioning.repeatingInterval = self.repeatingInterval; - return newPositioning; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPBaseNativeAdRenderer.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPBaseNativeAdRenderer.h deleted file mode 100644 index f49971ce31..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPBaseNativeAdRenderer.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// MPBaseNativeAdRenderer.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface MPBaseNativeAdRenderer : NSObject - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPBaseNativeAdRenderer.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPBaseNativeAdRenderer.m deleted file mode 100644 index ff79cb3783..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPBaseNativeAdRenderer.m +++ /dev/null @@ -1,21 +0,0 @@ -// -// MPBaseNativeAdRenderer.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPBaseNativeAdRenderer.h" -#import "MPNativeAdRendering.h" - -@interface MPBaseNativeAdRenderer () - -@property (nonatomic) UIView *adView; -@property (nonatomic) Class renderingViewClass; - -@end - -@implementation MPBaseNativeAdRenderer - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPClientAdPositioning.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPClientAdPositioning.h deleted file mode 100644 index 53745551a6..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPClientAdPositioning.h +++ /dev/null @@ -1,65 +0,0 @@ -// -// MPClientAdPositioning.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPAdPositioning.h" - -/** - * The `MPClientAdPositioning` class is a model that allows you to control the positions where - * native advertisements should appear within a stream. A positioning object works in conjunction - * with an ad placer, giving the ad placer the information it needs to configure the positions and - * frequency of ads. You can specify that ads should appear at fixed index paths and/or at equally - * spaced intervals throughout your content. - * - * Unlike with `MPServerAdPositioning`, which tells an ad placer to obtain its positioning - * information from the MoPub ad server, client ad positioning does not allow you to control your ad - * positions via the MoPub website. - */ - -@interface MPClientAdPositioning : MPAdPositioning - -/** @name Creating a Client Positioning Object */ - -/** - * Creates and returns an empty positioning object. In order for ads to display in a stream, the - * positioning object must either have at least one fixed position or have repeating positions - * enabled. - * - * @return The newly created positioning object. - */ -+ (instancetype)positioning; - -/** - * Tells the positioning object that an ad should be placed at the specified position. - * - * Positions are passed in as absolute index paths within a stream. For example, if you place an - * ad in a table view at a fixed index path with row 1, an ad will appear in row 1, which may shift - * other content items to higher row indexes. - * - * Note: this method uses `NSIndexPath` objects to accommodate streams with multiple sections. If - * your stream does not contain multiple sections, you should pass in index paths with a section - * value of 0. - * - * @param indexPath An index path representing a position for an ad. - */ -- (void)addFixedIndexPath:(NSIndexPath *)indexPath; - -/** - * Tells the positioning object that ads should be displayed evenly throughout a stream using the - * specified interval. - * - * Repeating ads will only appear within a single section. If the receiver has fixed positions, - * the sequence of repeating ads will start to appear following the last registered fixed position. - * If the receiver does not have any fixed positions, ads will appear regularly starting at - * `interval`, within the first section. - * - * @param interval The frequency at which to display ads. This must be a value greater than 1. - */ -- (void)enableRepeatingPositionsWithInterval:(NSUInteger)interval; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPClientAdPositioning.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPClientAdPositioning.m deleted file mode 100644 index cd201026fc..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPClientAdPositioning.m +++ /dev/null @@ -1,34 +0,0 @@ -// -// MPClientAdPositioning.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPClientAdPositioning.h" -#import "MPLogging.h" - -@implementation MPClientAdPositioning - -+ (instancetype)positioning -{ - return [[self alloc] init]; -} - -- (void)addFixedIndexPath:(NSIndexPath *)indexPath -{ - [self.fixedPositions addObject:indexPath]; -} - -- (void)enableRepeatingPositionsWithInterval:(NSUInteger)interval -{ - if (interval > 1) { - self.repeatingInterval = interval; - } else { - MPLogInfo(@"Repeating positions will not be enabled: the provided interval must be greater " - @"than 1."); - } -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPCollectionViewAdPlacer.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPCollectionViewAdPlacer.h deleted file mode 100644 index 9a10c80364..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPCollectionViewAdPlacer.h +++ /dev/null @@ -1,361 +0,0 @@ -// -// MPCollectionViewAdPlacer.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import -#import "MPClientAdPositioning.h" -#import "MPServerAdPositioning.h" -#import "MPCollectionViewAdPlacerDelegate.h" - -@class MPNativeAdRequestTargeting; - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * The `MPCollectionViewAdPlacer` class allows you to request native ads from the MoPub ad server - * and place them into a `UICollectionView` object. - * - * When an instance of this class is initialized with a collection view, it wraps the collection - * view's data source and delegate in order to insert ads and adjust the positions of your regular - * content cells. - */ - -@interface MPCollectionViewAdPlacer : NSObject - -@property (nonatomic, weak) id delegate; - -/** @name Initializing a Collection View Ad Placer */ - -/** - * Creates and returns an ad placer that will insert ads into a collection view at positions that can - * be configured dynamically on the MoPub website. - * - * When you make an ad request, the ad placer will ask the MoPub ad server for the positions where - * ads should be inserted into the collection view. You can configure these positioning values by - * editing your ad unit's settings on the MoPub website. - * - * Using this method is equivalent to calling - * +placerWithCollectionView:viewController:adPositioning:defaultAdRenderingClass: and passing in an - * `MPServerAdPositioning` object as the `positioning` parameter. - * - * @param collectionView The collection view in which to insert ads. - * @param controller The view controller which should be used to present modal content. - * @param rendererConfigurations An array of MPNativeAdRendererConfiguration objects that control how - * the native ad is rendered. - * - * @return An `MPCollectionViewAdPlacer` object. - */ -+ (instancetype)placerWithCollectionView:(UICollectionView *)collectionView viewController:(UIViewController *)controller rendererConfigurations:(NSArray *)rendererConfigurations; - -/** - * Creates and returns an ad placer that will insert ads into a collection view. - * - * When using this method, there are two options for controlling the positions where ads appear - * within the collection view. - * - * First, you may pass an `MPServerAdPositioning` object as the `positioning` parameter, which tells - * the ad placer to obtain positioning information dynamically from the ad server, which you can - * configure on the MoPub website. In many cases, this is the preferred approach, since it allows - * you to modify the positions without rebuilding your application. Note that calling the - * convenience method +placerWithCollectionView:viewController:defaultAdRenderingClass: accomplishes - * this as well. - * - * Alternatively, if you wish to hard-code your positions, you may pass an `MPClientAdPositioning` - * object instead. - * - * @param collectionView The collection view in which to insert ads. - * @param controller The view controller which should be used to present modal content. - * @param positioning The positioning object that specifies where ads should be shown in the stream. - * @param rendererConfigurations An array of MPNativeAdRendererConfiguration objects that control how - * the native ad is rendered. - * - * @return An `MPCollectionViewAdPlacer` object. - */ -+ (instancetype)placerWithCollectionView:(UICollectionView *)collectionView viewController:(UIViewController *)controller adPositioning:(MPAdPositioning *)positioning rendererConfigurations:(NSArray *)rendererConfigurations; - -/** @name Requesting Ads */ - -/** - * Requests ads from the MoPub ad server using the specified ad unit ID. - * - * @param adUnitID A string representing a MoPub ad unit ID. - */ -- (void)loadAdsForAdUnitID:(NSString *)adUnitID; - -/** - * Requests ads from the MoPub ad server using the specified ad unit ID and targeting parameters. - * - * @param adUnitID A string representing a MoPub ad unit ID. - * @param targeting An object containing targeting information, such as geolocation data. - */ -- (void)loadAdsForAdUnitID:(NSString *)adUnitID targeting:(MPNativeAdRequestTargeting *)targeting; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * The MoPub SDK adds interfaces to the `UICollectionView` class to help your application with - * responsibilities related to `MPCollectionViewAdPlacer`. These APIs include methods to help notify - * the ad placer of all modifications to the original collection view, as well as to simplify your - * application code such that it does not need to perform index path manipulations to account for - * the presence of ads. - * - * Since the ad placer replaces the original data source and delegate objects of your collection - * view, the SDK also provides new methods for you to set these properties such that the ad placer - * remains aware of the changes. - */ - -@interface UICollectionView (MPCollectionViewAdPlacer) - -- (void)mp_setAdPlacer:(MPCollectionViewAdPlacer *)placer; - -/** @name Obtaining the Collection View Ad Placer */ - -/** - * Returns the ad placer currently being used for this collection view. - * - * @return An ad placer object or `nil` if no ad placer is being used. - */ -- (MPCollectionViewAdPlacer *)mp_adPlacer; - -/** @name Setting and Getting the Delegate and Data Source */ - -/** - * Sets the collection view's data source. - * - * If your application needs to change a collection view's data source after it has instantiated an - * ad placer using that collection view, use this method rather than - * -[UICollectionView setDataSource:]. - * - * @param dataSource The new collection view data source. - */ -- (void)mp_setDataSource:(id)dataSource; - -/** - * Returns the original data source of the collection view. - * - * When you instantiate an ad placer using a collection view, the ad placer replaces the collection - * view's original data source object. If your application needs to access the original data source, - * use this method instead of -[UICollectionView dataSource]. - * - * @return The original collection view data source. - */ -- (id)mp_dataSource; - -/** - * Sets the collection view's delegate. - * - * If your application needs to change a collection view's delegate after it has instantiated an ad - * placer using that collection view, use this method rather than -[UICollectionView setDelegate:]. - * - * @param delegate The new collection view delegate. - */ -- (void)mp_setDelegate:(id)delegate; - -/** - * Returns the original delegate of the collection view. - * - * When you instantiate an ad placer using a collection view, the ad placer replaces the collection - * view's original delegate object. If your application needs to access the original delegate, use - * this method instead of -[UICollectionView delegate]. - * - * @return The original collection view delegate. - */ -- (id)mp_delegate; - -/** @name Notifying the Collection View Ad Placer of Content Changes */ - -/** - * Reloads all of the data for the collection view. - */ -- (void)mp_reloadData; - -/** - * Inserts new items at the specified index paths, and informs the attached ad placer of the - * insertions. - * - * @param indexPaths An array of `NSIndexPath` objects, each of which contains a section index and - * item index at which to insert a new cell. This parameter must not be `nil`. - */ -- (void)mp_insertItemsAtIndexPaths:(NSArray *)indexPaths; - -/** - * Deletes the items at the specified index paths, and informs the attached ad placer of the - * deletions. - * - * @param indexPaths An array of `NSIndexPath` objects, each of which contains a section index and - * item index for the item you want to delete from the collection view. This parameter must not be - * `nil`. - */ -- (void)mp_deleteItemsAtIndexPaths:(NSArray *)indexPaths; - -/** - * Reloads just the items at the specified index paths. - * - * @param indexPaths An array of `NSIndexPath` objects identifying the items you want to update. - */ -- (void)mp_reloadItemsAtIndexPaths:(NSArray *)indexPaths; - -/** - * Moves an item from one location to another in the collection view, taking into account ads - * inserted by the ad placer. - * - * @param indexPath The index path of the item you want to move. This parameter must not be - * `nil`. - * @param newIndexPath The index path of the item’s new location. This parameter must not be `nil`. - */ -- (void)mp_moveItemAtIndexPath:(NSIndexPath *)indexPath toIndexPath:(NSIndexPath *)newIndexPath; - -/** - * Inserts new sections at the specified indexes, and informs the attached ad placer of the - * insertions. - * - * @param sections An index set containing the indexes of the sections you want to insert. This - * parameter must not be `nil`. - */ -- (void)mp_insertSections:(NSIndexSet *)sections; - -/** - * Deletes the sections at the specified indexes, and informs the attached ad placer of the - * deletions. - * - * @param sections The indexes of the sections you want to delete. This parameter must not be `nil`. - */ -- (void)mp_deleteSections:(NSIndexSet *)sections; - -/** - * Reloads the data in the specified sections of the collection view, and informs the attached ad - * placer that sections may have changed. - * - * @param sections The indexes of the sections to reload. - */ -- (void)mp_reloadSections:(NSIndexSet *)sections; - -/** - * Moves a section from one location to another in the collection view, and informs the attached ad - * placer. - * - * @param section The index path of the section you want to move. This parameter must not be - * `nil`. - * @param newSection The index path of the section’s new location. This parameter must not be `nil`. - */ -- (void)mp_moveSection:(NSInteger)section toSection:(NSInteger)newSection; - -/** @name Methods Involving Index Paths */ - -/** - * Returns the visible cell object at the specified index path. - * - * @param indexPath The index path that specifies the section and item number of the cell. - * - * @return The cell object at the corresponding index path or `nil` if the cell is not visible or - * *indexPath* is out of range. - */ -- (UICollectionViewCell *)mp_cellForItemAtIndexPath:(NSIndexPath *)indexPath; - -/** - * Returns a reusable cell object located by its identifier. - * - * @param identifier The reuse identifier for the specified cell. This parameter must not be `nil`. - * @param indexPath The index path specifying the location of the cell. The data source receives - * this information when it is asked for the cell and should just pass it along. This method uses - * the index path to perform additional configuration based on the cell’s position in the collection - * view. - * - * @return A valid `UICollectionReusableView` object. - */ -- (id)mp_dequeueReusableCellWithReuseIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath*)indexPath; - -/** - * Deselects the item at the specified index. - * - * @param indexPath The index path of the item to select. Specifying `nil` results in no change to - * the current selection. - * @param animated Specify YES to animate the change in the selection or NO to make the change - * without animating it. - */ -- (void)mp_deselectItemAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated; - -/** - * Returns the original index path for the given cell or `nil` if the cell is an ad cell. - * - * @param cell The cell object whose index path you want. - * - * @return The index path of the cell or `nil` if the specified cell contains an ad or is not in the - * collection view. - */ -- (NSIndexPath *)mp_indexPathForCell:(UICollectionViewCell *)cell; - -/** - * Returns the index path of the item at the specified point in the collection view. - * - * @param point A point in the collection view’s coordinate system. - * - * @return The index path of the item at the specified point or `nil` if either an ad or no item was - * found at the specified point. - */ -- (NSIndexPath *)mp_indexPathForItemAtPoint:(CGPoint)point; - -/** - * Returns the original index paths (as if no ads were inserted) for the selected items. - * - * @return An array of the original index paths for the selected items. - */ -- (NSArray *)mp_indexPathsForSelectedItems; - -/** - * Returns an array of original index paths each identifying a visible non-ad item in the collection - * view, calculated before any ads were inserted. - * - * @return An array of the original index paths representing visible non-ad items in the collection - * view. Returns `nil` if no items are visible. - */ -- (NSArray *)mp_indexPathsForVisibleItems; - -/** - * Returns the layout information for the item at the specified index path. - * - * @param indexPath The index path of the item. - * - * @return The layout attributes for the item or `nil` if no item exists at the specified path. - */ -- (UICollectionViewLayoutAttributes *)mp_layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath; - -/** - * Scrolls the collection view contents until the specified item is visible. - * - * @param indexPath The index path of the item to scroll into view. - * @param scrollPosition An option that specifies where the item should be positioned when scrolling - * finishes. - * @param animated Specify YES to animate the scrolling behavior or NO to adjust the scroll - * view’s visible content immediately. - */ -- (void)mp_scrollToItemAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UICollectionViewScrollPosition)scrollPosition animated:(BOOL)animated; - -/** - * Selects the item at the specified index path and optionally scrolls it into view. - * - * @param indexPath The index path of the item to select. Specifying `nil` for this parameter - * clears the current selection. - * @param animated Specify YES to animate the change in the selection or NO to make the change - * without animating it. - * @param scrollPosition An option that specifies where the item should be positioned when scrolling - * finishes. - */ -- (void)mp_selectItemAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated scrollPosition:(UICollectionViewScrollPosition)scrollPosition; - -/** - * Returns an array of the non-ad cells that are visible in the collection view. - * - * @return An array of `UICollectionViewCell` objects, each representing a visible, non-ad cell in - * the receiving collection view. - */ -- (NSArray *)mp_visibleCells; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPCollectionViewAdPlacer.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPCollectionViewAdPlacer.m deleted file mode 100644 index 5445538101..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPCollectionViewAdPlacer.m +++ /dev/null @@ -1,687 +0,0 @@ -// -// MPCollectionViewAdPlacer.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPCollectionViewAdPlacer.h" -#import "MPStreamAdPlacer.h" -#import "MPAdPlacerInvocation.h" -#import "MPTimer.h" -#import "MPNativeAdUtils.h" -#import "MPCollectionViewAdPlacerCell.h" -#import "MPNativeAdRendererConfiguration.h" -#import - -static NSString * const kCollectionViewAdPlacerReuseIdentifier = @"MPCollectionViewAdPlacerReuseIdentifier"; - -@protocol MPNativeAdRenderer; - -@interface MPCollectionViewAdPlacer () - -@property (nonatomic, strong) MPStreamAdPlacer *streamAdPlacer; -@property (nonatomic, strong) UICollectionView *collectionView; -@property (nonatomic, weak) id originalDataSource; -@property (nonatomic, weak) id originalDelegate; -@property (nonatomic, strong) MPTimer *insertionTimer; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MPCollectionViewAdPlacer - -+ (instancetype)placerWithCollectionView:(UICollectionView *)collectionView viewController:(UIViewController *)controller rendererConfigurations:(NSArray *)rendererConfigurations -{ - return [[self class] placerWithCollectionView:collectionView viewController:controller adPositioning:[MPServerAdPositioning positioning] rendererConfigurations:rendererConfigurations]; -} - -+ (instancetype)placerWithCollectionView:(UICollectionView *)collectionView viewController:(UIViewController *)controller adPositioning:(MPAdPositioning *)positioning rendererConfigurations:(NSArray *)rendererConfigurations -{ - MPCollectionViewAdPlacer *collectionViewAdPlacer = [[MPCollectionViewAdPlacer alloc] initWithCollectionView:collectionView viewController:controller adPositioning:positioning rendererConfigurations:rendererConfigurations]; - return collectionViewAdPlacer; -} - -- (instancetype)initWithCollectionView:(UICollectionView *)collectionView viewController:(UIViewController *)controller adPositioning:(MPAdPositioning *)positioning rendererConfigurations:(NSArray *)rendererConfigurations -{ - for (id rendererConfiguration in rendererConfigurations) { - NSAssert([rendererConfiguration isKindOfClass:[MPNativeAdRendererConfiguration class]], @"A collection view ad placer must be instantiated with rendererConfigurations that are of type MPNativeAdRendererConfiguration."); - } - - if (self = [super init]) { - _collectionView = collectionView; - _streamAdPlacer = [MPStreamAdPlacer placerWithViewController:controller adPositioning:positioning rendererConfigurations:rendererConfigurations]; - _streamAdPlacer.delegate = self; - - _insertionTimer = [MPTimer timerWithTimeInterval:kUpdateVisibleCellsInterval - target:self - selector:@selector(updateVisibleCells) - repeats:YES - runLoopMode:NSRunLoopCommonModes]; - [_insertionTimer scheduleNow]; - - _originalDataSource = collectionView.dataSource; - _originalDelegate = collectionView.delegate; - collectionView.dataSource = self; - collectionView.delegate = self; - - [_collectionView registerClass:[MPCollectionViewAdPlacerCell class] forCellWithReuseIdentifier:kCollectionViewAdPlacerReuseIdentifier]; - - [collectionView mp_setAdPlacer:self]; - } - - return self; -} - -- (void)dealloc -{ - [_insertionTimer invalidate]; -} - -#pragma mark - Public - -- (void)loadAdsForAdUnitID:(NSString *)adUnitID -{ - [self.streamAdPlacer loadAdsForAdUnitID:adUnitID]; -} - -- (void)loadAdsForAdUnitID:(NSString *)adUnitID targeting:(MPNativeAdRequestTargeting *)targeting -{ - [self.streamAdPlacer loadAdsForAdUnitID:adUnitID targeting:targeting]; -} - -#pragma mark - Ad Insertion - -- (void)updateVisibleCells -{ - NSArray *visiblePaths = self.collectionView.mp_indexPathsForVisibleItems; - - if ([visiblePaths count]) { - [self.streamAdPlacer setVisibleIndexPaths:visiblePaths]; - } -} - -#pragma mark - - -- (void)adPlacer:(MPStreamAdPlacer *)adPlacer didLoadAdAtIndexPath:(NSIndexPath *)indexPath -{ - NSInteger sectionCount = [self.collectionView.dataSource numberOfSectionsInCollectionView:self.collectionView]; - NSInteger rowCount = [self.collectionView.dataSource collectionView:self.collectionView numberOfItemsInSection:indexPath.section]; - if (indexPath.section >= sectionCount || indexPath.row >= rowCount) { - return; // ignore out-of-range index path that cannot be added to the collection view - } - - BOOL animationsWereEnabled = [UIView areAnimationsEnabled]; - //We only want to enable animations if the index path is before or within our visible cells - BOOL animationsEnabled = ([(NSIndexPath *)[self.collectionView.indexPathsForVisibleItems lastObject] compare:indexPath] != NSOrderedAscending) && animationsWereEnabled; - - [UIView setAnimationsEnabled:animationsEnabled]; - - [self.collectionView insertItemsAtIndexPaths:@[indexPath]]; - - [UIView setAnimationsEnabled:animationsWereEnabled]; -} - -- (void)adPlacer:(MPStreamAdPlacer *)adPlacer didRemoveAdsAtIndexPaths:(NSArray *)indexPaths -{ - NSMutableArray *validIndexPaths = [NSMutableArray new]; - for (NSIndexPath *indexPath in indexPaths) { - NSInteger sectionCount = [self.collectionView numberOfSections]; - NSInteger rowCount = [self.collectionView numberOfItemsInSection:indexPath.section]; - - // ignore out-of-range index path that cannot be removed from the collection view - if (indexPath.section < sectionCount && indexPath.row < rowCount) { - [validIndexPaths addObject:indexPath]; - } - } - - if (validIndexPaths.count == 0) { - return; - } - - BOOL animationsWereEnabled = [UIView areAnimationsEnabled]; - [UIView setAnimationsEnabled:NO]; - - [self.collectionView performBatchUpdates:^{ - [self.collectionView deleteItemsAtIndexPaths:validIndexPaths]; - } completion:^(BOOL finished) { - [UIView setAnimationsEnabled:animationsWereEnabled]; - }]; -} - -- (void)nativeAdWillPresentModalForStreamAdPlacer:(MPStreamAdPlacer *)adPlacer -{ - if ([self.delegate respondsToSelector:@selector(nativeAdWillPresentModalForCollectionViewAdPlacer:)]) { - [self.delegate nativeAdWillPresentModalForCollectionViewAdPlacer:self]; - } -} - -- (void)nativeAdDidDismissModalForStreamAdPlacer:(MPStreamAdPlacer *)adPlacer -{ - if ([self.delegate respondsToSelector:@selector(nativeAdDidDismissModalForCollectionViewAdPlacer:)]) { - [self.delegate nativeAdDidDismissModalForCollectionViewAdPlacer:self]; - } -} - -- (void)nativeAdWillLeaveApplicationFromStreamAdPlacer:(MPStreamAdPlacer *)adPlacer -{ - if ([self.delegate respondsToSelector:@selector(nativeAdWillLeaveApplicationFromCollectionViewAdPlacer:)]) { - [self.delegate nativeAdWillLeaveApplicationFromCollectionViewAdPlacer:self]; - } -} - -- (void)mopubAdPlacer:(id)adPlacer didTrackImpressionForAd:(id)ad withImpressionData:(MPImpressionData *)impressionData { - if ([self.delegate respondsToSelector:@selector(mopubAdPlacer:didTrackImpressionForAd:withImpressionData:)]) { - [self.delegate mopubAdPlacer:self - didTrackImpressionForAd:ad - withImpressionData:impressionData]; - } -} - -#pragma mark - - -- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView -{ - if ([self.originalDataSource respondsToSelector:@selector(numberOfSectionsInCollectionView:)]) { - return [self.originalDataSource numberOfSectionsInCollectionView:collectionView]; - } - else { - return 1; - } -} - -- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section -{ - NSUInteger numberOfItems = [self.originalDataSource collectionView:collectionView numberOfItemsInSection:section]; - [self.streamAdPlacer setItemCount:numberOfItems forSection:section]; - return [self.streamAdPlacer adjustedNumberOfItems:numberOfItems inSection:section]; -} - -- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath -{ - if ([self.streamAdPlacer isAdAtIndexPath:indexPath]) { - MPCollectionViewAdPlacerCell *cell = (MPCollectionViewAdPlacerCell *)[collectionView dequeueReusableCellWithReuseIdentifier:kCollectionViewAdPlacerReuseIdentifier forIndexPath:indexPath]; - cell.clipsToBounds = YES; - - [self.streamAdPlacer renderAdAtIndexPath:indexPath inView:cell.contentView]; - return cell; - } - - NSIndexPath *originalIndexPath = [self.streamAdPlacer originalIndexPathForAdjustedIndexPath:indexPath]; - return [self.originalDataSource collectionView:collectionView cellForItemAtIndexPath:originalIndexPath]; -} - -#pragma mark - - -- (BOOL)collectionView:(UICollectionView *)collectionView canPerformAction:(SEL)action forItemAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender -{ - if ([self.streamAdPlacer isAdAtIndexPath:indexPath]) { - return NO; - } - - id delegate = self.originalDelegate; - if ([delegate respondsToSelector:@selector(collectionView:canPerformAction:forItemAtIndexPath:withSender:)]) { - NSIndexPath *originalPath = [self.streamAdPlacer originalIndexPathForAdjustedIndexPath:indexPath]; - return [delegate collectionView:collectionView canPerformAction:action forItemAtIndexPath:originalPath withSender:sender]; - } - - return NO; -} - -- (void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath -{ - [MPAdPlacerInvocation invokeForTarget:self.originalDelegate with2ArgSelector:@selector(collectionView:didDeselectItemAtIndexPath:) firstArg:collectionView secondArg:indexPath streamAdPlacer:self.streamAdPlacer]; -} - -- (void)collectionView:(UICollectionView *)collectionView didEndDisplayingCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath -{ - [MPAdPlacerInvocation invokeForTarget:self.originalDelegate with3ArgSelector:@selector(collectionView:didEndDisplayingCell:forItemAtIndexPath:) firstArg:collectionView secondArg:cell thirdArg:indexPath streamAdPlacer:self.streamAdPlacer]; -} - -- (void)collectionView:(UICollectionView *)collectionView didHighlightItemAtIndexPath:(NSIndexPath *)indexPath -{ - [MPAdPlacerInvocation invokeForTarget:self.originalDelegate with2ArgSelector:@selector(collectionView:didHighlightItemAtIndexPath:) firstArg:collectionView secondArg:indexPath streamAdPlacer:self.streamAdPlacer]; -} - -- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath -{ - if ([self.streamAdPlacer isAdAtIndexPath:indexPath]) { - // The view inside the cell already has a gesture recognizer to handle the tap event. - [self.collectionView deselectItemAtIndexPath:indexPath animated:NO]; - return; - } - - id delegate = self.originalDelegate; - if ([delegate respondsToSelector:@selector(collectionView:didSelectItemAtIndexPath:)]) { - NSIndexPath *originalPath = [self.streamAdPlacer originalIndexPathForAdjustedIndexPath:indexPath]; - [delegate collectionView:collectionView didSelectItemAtIndexPath:originalPath]; - } -} - -- (void)collectionView:(UICollectionView *)collectionView didUnhighlightItemAtIndexPath:(NSIndexPath *)indexPath -{ - [MPAdPlacerInvocation invokeForTarget:self.originalDelegate with2ArgSelector:@selector(collectionView:didUnhighlightItemAtIndexPath:) firstArg:collectionView secondArg:indexPath streamAdPlacer:self.streamAdPlacer]; -} - -- (void)collectionView:(UICollectionView *)collectionView performAction:(SEL)action forItemAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender -{ - if ([self.streamAdPlacer isAdAtIndexPath:indexPath]) { - return; - } - - id delegate = self.originalDelegate; - if ([delegate respondsToSelector:@selector(collectionView:performAction:forItemAtIndexPath:withSender:)]) { - NSIndexPath *originalPath = [self.streamAdPlacer originalIndexPathForAdjustedIndexPath:indexPath]; - [delegate collectionView:collectionView performAction:action forItemAtIndexPath:originalPath withSender:sender]; - } -} - -- (BOOL)collectionView:(UICollectionView *)collectionView shouldDeselectItemAtIndexPath:(NSIndexPath *)indexPath -{ - NSInvocation *invocation = [MPAdPlacerInvocation invokeForTarget:self.originalDelegate with2ArgSelector:@selector(collectionView:shouldDeselectItemAtIndexPath:) firstArg:collectionView secondArg:indexPath streamAdPlacer:self.streamAdPlacer]; - - return [MPAdPlacerInvocation boolResultForInvocation:invocation defaultValue:YES]; -} - -- (BOOL)collectionView:(UICollectionView *)collectionView shouldHighlightItemAtIndexPath:(NSIndexPath *)indexPath -{ - NSInvocation *invocation = [MPAdPlacerInvocation invokeForTarget:self.originalDelegate with2ArgSelector:@selector(collectionView:shouldHighlightItemAtIndexPath:) firstArg:collectionView secondArg:indexPath streamAdPlacer:self.streamAdPlacer]; - - return [MPAdPlacerInvocation boolResultForInvocation:invocation defaultValue:YES]; -} - -- (BOOL)collectionView:(UICollectionView *)collectionView shouldSelectItemAtIndexPath:(NSIndexPath *)indexPath -{ - NSInvocation *invocation = [MPAdPlacerInvocation invokeForTarget:self.originalDelegate with2ArgSelector:@selector(collectionView:shouldSelectItemAtIndexPath:) firstArg:collectionView secondArg:indexPath streamAdPlacer:self.streamAdPlacer]; - - return [MPAdPlacerInvocation boolResultForInvocation:invocation defaultValue:collectionView.allowsSelection]; -} - -- (BOOL)collectionView:(UICollectionView *)collectionView shouldShowMenuForItemAtIndexPath:(NSIndexPath *)indexPath -{ - NSInvocation *invocation = [MPAdPlacerInvocation invokeForTarget:self.originalDelegate with2ArgSelector:@selector(collectionView:shouldShowMenuForItemAtIndexPath:) firstArg:collectionView secondArg:indexPath streamAdPlacer:self.streamAdPlacer]; - - return [MPAdPlacerInvocation boolResultForInvocation:invocation defaultValue:NO]; -} - -- (void)collectionView:(UICollectionView *)collectionView willDisplayCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath -{ - if ([self.originalDelegate respondsToSelector:@selector(collectionView:willDisplayCell:forItemAtIndexPath:)]) { - [MPAdPlacerInvocation invokeForTarget:self.originalDelegate with3ArgSelector:@selector(collectionView:willDisplayCell:forItemAtIndexPath:) firstArg:collectionView secondArg:cell thirdArg:indexPath streamAdPlacer:self.streamAdPlacer]; - } -} - -#pragma mark - UICollectionViewDelegateFlowLayout - -- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath -{ - if ([self.streamAdPlacer isAdAtIndexPath:indexPath]) { - return [self.streamAdPlacer sizeForAdAtIndexPath:indexPath withMaximumWidth:CGRectGetWidth(self.collectionView.bounds)]; - } - - if ([self.originalDelegate respondsToSelector:@selector(collectionView:layout:sizeForItemAtIndexPath:)]) { - NSIndexPath *originalPath = [self.streamAdPlacer originalIndexPathForAdjustedIndexPath:indexPath]; - id flowLayout = (id)[self originalDelegate]; - return [flowLayout collectionView:collectionView layout:collectionViewLayout sizeForItemAtIndexPath:originalPath]; - } - return ((UICollectionViewFlowLayout *)collectionViewLayout).itemSize; -} - -#pragma mark - Method Forwarding - -- (BOOL)isKindOfClass:(Class)aClass { - return [super isKindOfClass:aClass] || - [self.originalDataSource isKindOfClass:aClass] || - [self.originalDelegate isKindOfClass:aClass]; -} - -- (BOOL)conformsToProtocol:(Protocol *)aProtocol -{ - return [super conformsToProtocol:aProtocol] || - [self.originalDelegate conformsToProtocol:aProtocol] || - [self.originalDataSource conformsToProtocol:aProtocol]; -} - -- (BOOL)respondsToSelector:(SEL)aSelector -{ - return [super respondsToSelector:aSelector] || - [self.originalDataSource respondsToSelector:aSelector] || - [self.originalDelegate respondsToSelector:aSelector]; -} - -- (id)forwardingTargetForSelector:(SEL)aSelector -{ - if ([self.originalDataSource respondsToSelector:aSelector]) { - return self.originalDataSource; - } else if ([self.originalDelegate respondsToSelector:aSelector]) { - return self.originalDelegate; - } else { - return [super forwardingTargetForSelector:aSelector]; - } -} - -@end - -@implementation UICollectionView (MPCollectionViewAdPlacer) - -static char kAdPlacerKey; - -- (void)mp_setAdPlacer:(MPCollectionViewAdPlacer *)placer -{ - objc_setAssociatedObject(self, &kAdPlacerKey, placer, OBJC_ASSOCIATION_ASSIGN); -} - -- (MPCollectionViewAdPlacer *)mp_adPlacer -{ - return objc_getAssociatedObject(self, &kAdPlacerKey); -} - -- (void)mp_setDelegate:(id)delegate -{ - MPCollectionViewAdPlacer *adPlacer = [self mp_adPlacer]; - - if (adPlacer) { - adPlacer.originalDelegate = delegate; - } else { - self.delegate = delegate; - } -} - -- (id)mp_delegate -{ - MPCollectionViewAdPlacer *adPlacer = [self mp_adPlacer]; - - if (adPlacer) { - return adPlacer.originalDelegate; - } else { - return self.delegate; - } -} - -- (void)mp_setDataSource:(id)dataSource -{ - MPCollectionViewAdPlacer *adPlacer = [self mp_adPlacer]; - - if (adPlacer) { - adPlacer.originalDataSource = dataSource; - } else { - self.dataSource = dataSource; - } -} - -- (id)mp_dataSource -{ - MPCollectionViewAdPlacer *adPlacer = [self mp_adPlacer]; - - if (adPlacer) { - return adPlacer.originalDataSource; - } else { - return self.dataSource; - } -} - -- (id)mp_dequeueReusableCellWithReuseIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath -{ - MPCollectionViewAdPlacer *adPlacer = [self mp_adPlacer]; - NSIndexPath *adjustedIndexPath = indexPath; - - if (adPlacer) { - adjustedIndexPath = [adPlacer.streamAdPlacer adjustedIndexPathForOriginalIndexPath:indexPath]; - } - - // Only pass nil through if developer passed it through - if (!indexPath || adjustedIndexPath) { - return [self dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:adjustedIndexPath]; - } else { - return nil; - } -} - -- (NSArray *)mp_indexPathsForSelectedItems -{ - MPCollectionViewAdPlacer *adPlacer = [self mp_adPlacer]; - NSArray *adjustedIndexPaths = [self indexPathsForSelectedItems]; - - if (adPlacer) { - adjustedIndexPaths = [adPlacer.streamAdPlacer originalIndexPathsForAdjustedIndexPaths:adjustedIndexPaths]; - } - - return adjustedIndexPaths; -} - -- (void)mp_selectItemAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated scrollPosition:(UICollectionViewScrollPosition)scrollPosition -{ - MPCollectionViewAdPlacer *adPlacer = [self mp_adPlacer]; - NSIndexPath *adjustedIndexPath = indexPath; - - if (adPlacer) { - adjustedIndexPath = [adPlacer.streamAdPlacer adjustedIndexPathForOriginalIndexPath:indexPath]; - } - - // Only pass nil through if developer passed it through - if (!indexPath || adjustedIndexPath) { - [self selectItemAtIndexPath:adjustedIndexPath animated:animated scrollPosition:scrollPosition]; - } -} - -- (void)mp_deselectItemAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated -{ - MPCollectionViewAdPlacer *adPlacer = [self mp_adPlacer]; - NSIndexPath *adjustedIndexPath = indexPath; - - if (adPlacer) { - adjustedIndexPath = [adPlacer.streamAdPlacer adjustedIndexPathForOriginalIndexPath:indexPath]; - } - - [self deselectItemAtIndexPath:adjustedIndexPath animated:animated]; -} - -- (void)mp_reloadData -{ - [self reloadData]; -} - -- (UICollectionViewLayoutAttributes *)mp_layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath -{ - MPCollectionViewAdPlacer *adPlacer = [self mp_adPlacer]; - NSIndexPath *adjustedIndexPath = indexPath; - - if (adPlacer) { - adjustedIndexPath = [adPlacer.streamAdPlacer adjustedIndexPathForOriginalIndexPath:indexPath]; - } - - return [self layoutAttributesForItemAtIndexPath:adjustedIndexPath]; -} - -- (NSIndexPath *)mp_indexPathForItemAtPoint:(CGPoint)point -{ - MPCollectionViewAdPlacer *adPlacer = [self mp_adPlacer]; - NSIndexPath *adjustedIndexPath = [self indexPathForItemAtPoint:point]; - - if (adPlacer) { - adjustedIndexPath = [adPlacer.streamAdPlacer originalIndexPathForAdjustedIndexPath:adjustedIndexPath]; - } - - return adjustedIndexPath; -} - -- (NSIndexPath *)mp_indexPathForCell:(UICollectionViewCell *)cell -{ - MPCollectionViewAdPlacer *adPlacer = [self mp_adPlacer]; - NSIndexPath *adjustedIndexPath = [self indexPathForCell:cell]; - - if (adPlacer) { - adjustedIndexPath = [adPlacer.streamAdPlacer originalIndexPathForAdjustedIndexPath:adjustedIndexPath]; - } - - return adjustedIndexPath; -} - -- (UICollectionViewCell *)mp_cellForItemAtIndexPath:(NSIndexPath *)indexPath -{ - MPCollectionViewAdPlacer *adPlacer = [self mp_adPlacer]; - NSIndexPath *adjustedIndexPath = indexPath; - - if (adPlacer) { - adjustedIndexPath = [adPlacer.streamAdPlacer adjustedIndexPathForOriginalIndexPath:adjustedIndexPath]; - } - - return [self cellForItemAtIndexPath:adjustedIndexPath]; -} - -- (NSArray *)mp_visibleCells -{ - MPCollectionViewAdPlacer *adPlacer = [self mp_adPlacer]; - - if (adPlacer) { - NSArray *indexPaths = [self mp_indexPathsForVisibleItems]; - NSMutableArray *visibleCells = [NSMutableArray array]; - for (NSIndexPath *indexPath in indexPaths) { - UICollectionViewCell * cell = [self mp_cellForItemAtIndexPath:indexPath]; - if (cell != nil) { - [visibleCells addObject:cell]; - } - } - return visibleCells; - } else { - return [self visibleCells]; - } -} - -- (NSArray *)mp_indexPathsForVisibleItems -{ - MPCollectionViewAdPlacer *adPlacer = [self mp_adPlacer]; - NSArray *adjustedIndexPaths = [self indexPathsForVisibleItems]; - - if (adPlacer) { - adjustedIndexPaths = [adPlacer.streamAdPlacer originalIndexPathsForAdjustedIndexPaths:adjustedIndexPaths]; - } - - return adjustedIndexPaths; -} - -- (void)mp_scrollToItemAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UICollectionViewScrollPosition)scrollPosition animated:(BOOL)animated -{ - MPCollectionViewAdPlacer *adPlacer = [self mp_adPlacer]; - NSIndexPath *adjustedIndexPath = indexPath; - - if (adPlacer) { - adjustedIndexPath = [adPlacer.streamAdPlacer adjustedIndexPathForOriginalIndexPath:adjustedIndexPath]; - } - - // Only pass nil through if developer passed it through - if (!indexPath || adjustedIndexPath) { - [self scrollToItemAtIndexPath:adjustedIndexPath atScrollPosition:scrollPosition animated:animated]; - } -} - -- (void)mp_insertSections:(NSIndexSet *)sections -{ - MPCollectionViewAdPlacer *adPlacer = [self mp_adPlacer]; - - if (adPlacer) { - [adPlacer.streamAdPlacer insertSections:sections]; - } - - [self insertSections:sections]; -} - -- (void)mp_deleteSections:(NSIndexSet *)sections -{ - MPCollectionViewAdPlacer *adPlacer = [self mp_adPlacer]; - - if (adPlacer) { - [adPlacer.streamAdPlacer deleteSections:sections]; - } - - [self deleteSections:sections]; -} - -- (void)mp_reloadSections:(NSIndexSet *)sections -{ - [self reloadSections:sections]; -} - -- (void)mp_moveSection:(NSInteger)section toSection:(NSInteger)newSection -{ - MPCollectionViewAdPlacer *adPlacer = [self mp_adPlacer]; - - if (adPlacer) { - [adPlacer.streamAdPlacer moveSection:section toSection:newSection]; - } - - [self moveSection:section toSection:newSection]; -} - -- (void)mp_insertItemsAtIndexPaths:(NSArray *)indexPaths -{ - MPCollectionViewAdPlacer *adPlacer = [self mp_adPlacer]; - NSArray *adjustedIndexPaths = indexPaths; - - if (adPlacer) { - [adPlacer.streamAdPlacer insertItemsAtIndexPaths:indexPaths]; - adjustedIndexPaths = [adPlacer.streamAdPlacer adjustedIndexPathsForOriginalIndexPaths:indexPaths]; - } - - // We perform the actual UI insertion AFTER updating the stream ad placer's - // data, because the insertion can trigger queries to the data source, which - // needs to reflect the post-insertion state. - [self insertItemsAtIndexPaths:adjustedIndexPaths]; -} - -- (void)mp_deleteItemsAtIndexPaths:(NSArray *)indexPaths -{ - MPCollectionViewAdPlacer *adPlacer = [self mp_adPlacer]; - [self performBatchUpdates:^{ - NSArray *adjustedIndexPaths = indexPaths; - - if (adPlacer) { - // We need to obtain the adjusted index paths to delete BEFORE we - // update the stream ad placer's data. - adjustedIndexPaths = [adPlacer.streamAdPlacer adjustedIndexPathsForOriginalIndexPaths:indexPaths]; - - [adPlacer.streamAdPlacer deleteItemsAtIndexPaths:indexPaths]; - } - - // We perform the actual UI deletion AFTER updating the stream ad placer's - // data, because the deletion can trigger queries to the data source, which - // needs to reflect the post-deletion state. - [self deleteItemsAtIndexPaths:adjustedIndexPaths]; - } completion:nil]; -} - -- (void)mp_reloadItemsAtIndexPaths:(NSArray *)indexPaths -{ - MPCollectionViewAdPlacer *adPlacer = [self mp_adPlacer]; - NSArray *adjustedIndexPaths = indexPaths; - - if (adPlacer) { - adjustedIndexPaths = [adPlacer.streamAdPlacer adjustedIndexPathsForOriginalIndexPaths:indexPaths]; - } - - [self reloadItemsAtIndexPaths:adjustedIndexPaths]; -} - -- (void)mp_moveItemAtIndexPath:(NSIndexPath *)indexPath toIndexPath:(NSIndexPath *)newIndexPath -{ - MPCollectionViewAdPlacer *adPlacer = [self mp_adPlacer]; - NSIndexPath *adjustedFrom = indexPath; - NSIndexPath *adjustedTo = newIndexPath; - - if (adPlacer) { - // We need to obtain the adjusted index paths to move BEFORE we - // update the stream ad placer's data. - adjustedFrom = [adPlacer.streamAdPlacer adjustedIndexPathForOriginalIndexPath:indexPath]; - adjustedTo = [adPlacer.streamAdPlacer adjustedIndexPathForOriginalIndexPath:newIndexPath]; - - [adPlacer.streamAdPlacer moveItemAtIndexPath:indexPath toIndexPath:newIndexPath]; - } - - // We perform the actual UI operation AFTER updating the stream ad placer's - // data, because the operation can trigger queries to the data source, which - // needs to reflect the post-operation state. - [self moveItemAtIndexPath:adjustedFrom toIndexPath:adjustedTo]; -} -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPCollectionViewAdPlacerDelegate.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPCollectionViewAdPlacerDelegate.h deleted file mode 100644 index 8517a92bc6..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPCollectionViewAdPlacerDelegate.h +++ /dev/null @@ -1,38 +0,0 @@ -// -// MPCollectionViewAdPlacerDelegate.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPMoPubAdPlacer.h" - -@class MPCollectionViewAdPlacer; - -@protocol MPCollectionViewAdPlacerDelegate - -@optional - -/* - * This method is called when a native ad, placed by the collection view ad placer, will present a modal view controller. - * - * @param placer The collection view ad placer that contains the ad displaying the modal. - */ -- (void)nativeAdWillPresentModalForCollectionViewAdPlacer:(MPCollectionViewAdPlacer *)placer; - -/* - * This method is called when a native ad, placed by the collection view ad placer, did dismiss its modal view controller. - * - * @param placer The collection view ad placer that contains the ad that dismissed the modal. - */ -- (void)nativeAdDidDismissModalForCollectionViewAdPlacer:(MPCollectionViewAdPlacer *)placer; - -/* - * This method is called when a native ad, placed by the collection view ad placer, will cause the app to background due to user interaction with the ad. - * - * @param placer The collection view ad placer that contains the ad causing the app to background. - */ -- (void)nativeAdWillLeaveApplicationFromCollectionViewAdPlacer:(MPCollectionViewAdPlacer *)placer; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAd.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAd.h deleted file mode 100644 index eedb6d1136..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAd.h +++ /dev/null @@ -1,55 +0,0 @@ -// -// MPNativeAd.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import -#import "MPMoPubAd.h" -#import "MPNativeAdDelegate.h" - -@protocol MPNativeAdAdapter; -@protocol MPNativeAdRenderer; -@class MPAdConfiguration; - -/** - * The `MPNativeAd` class is used to render and manage events for a native advertisement. The - * class provides methods for accessing native ad properties returned by the server, as well as - * convenience methods for URL navigation and metrics-gathering. - */ - -@interface MPNativeAd : NSObject - -/** @name Ad Resources */ - -/** - * The delegate of the `MPNativeAd` object. - */ -@property (nonatomic, weak) id delegate; - -/** - * A dictionary representing the native ad properties. - */ -@property (nonatomic, readonly) NSDictionary *properties; - -- (instancetype)initWithAdAdapter:(id)adAdapter; - -/** @name Retrieving Ad View */ - -/** - * Retrieves a rendered view containing the ad. - * - * @param error A pointer to an error object. If an error occurs, this pointer will be set to an - * actual error object containing the error information. - * - * @return If successful, the method will return a view containing the rendered ad. The method will - * return nil if it cannot render the ad data to a view. - */ -- (UIView *)retrieveAdViewWithError:(NSError **)error; - -- (void)trackMetricForURL:(NSURL *)URL; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAd.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAd.m deleted file mode 100644 index 7212316be3..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAd.m +++ /dev/null @@ -1,258 +0,0 @@ -// -// MPNativeAd.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPNativeAd+Internal.h" -#import "MoPub+Utility.h" -#import "MPAdConfiguration.h" -#import "MPCoreInstanceProvider.h" -#import "MPNativeAdError.h" -#import "MPLogging.h" -#import "MPNativeCache.h" -#import "MPNativeAdRendering.h" -#import "MPImageDownloadQueue.h" -#import "NSJSONSerialization+MPAdditions.h" -#import "MPNativeCustomEvent.h" -#import "MPNativeAdAdapter.h" -#import "MPNativeAdConstants.h" -#import "MPTimer.h" -#import "MPNativeAdRenderer.h" -#import "MPNativeView.h" -#import "MPHTTPNetworkSession.h" -#import "MPURLRequest.h" -#import "MPImpressionTrackedNotification.h" - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MPNativeAd () - -@property (nonatomic, readwrite, strong) id renderer; -@property (nonatomic, readwrite, strong) MPAdConfiguration *configuration; -@property (nonatomic, readwrite, strong) NSString *adUnitID; - -@property (nonatomic, strong) NSDate *creationDate; - -@property (nonatomic, strong) NSMutableSet *clickTrackerURLs; -@property (nonatomic, strong) NSMutableSet *impressionTrackerURLs; - -@property (nonatomic, readonly, strong) id adAdapter; -@property (nonatomic, assign) BOOL hasTrackedImpression; -@property (nonatomic, assign) BOOL hasTrackedClick; - -@property (nonatomic, copy) NSString *adIdentifier; -@property (nonatomic) MPNativeView *associatedView; - -@property (nonatomic) BOOL hasAttachedToView; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MPNativeAd - -- (instancetype)initWithAdAdapter:(id)adAdapter -{ - static int sequenceNumber = 0; - - self = [super init]; - if (self) { - _adAdapter = adAdapter; - if ([_adAdapter respondsToSelector:@selector(setDelegate:)]) { - [_adAdapter setDelegate:self]; - } - _adIdentifier = [[NSString stringWithFormat:@"%d", sequenceNumber++] copy]; - _impressionTrackerURLs = [[NSMutableSet alloc] init]; - _clickTrackerURLs = [[NSMutableSet alloc] init]; - _creationDate = [NSDate date]; - _associatedView = [[MPNativeView alloc] init]; - _associatedView.clipsToBounds = YES; - _associatedView.delegate = self; - - // Add a tap recognizer on top of the view if the ad network isn't handling clicks on its own. - if (!([_adAdapter respondsToSelector:@selector(enableThirdPartyClickTracking)] && [_adAdapter enableThirdPartyClickTracking])) { - UITapGestureRecognizer *recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(adViewTapped)]; - [_associatedView addGestureRecognizer:recognizer]; - } - } - return self; -} - -#pragma mark - Public - -- (UIView *)retrieveAdViewWithError:(NSError **)error -{ - // We always return the same MPNativeView (self.associatedView) so we need to remove its subviews - // before attaching the new ad view to it. Also need to reset the `hasAttachedToView` state - // variable back to `NO` since all of the subviews should be removed. - for (UIView * view in self.associatedView.subviews) { - [view removeFromSuperview]; - } - - if (self.associatedView.subviews.count == 0) { - self.hasAttachedToView = NO; - } - - UIView *adView = [self.renderer retrieveViewWithAdapter:self.adAdapter error:error]; - - if (adView) { - if (!self.hasAttachedToView) { - [self willAttachToView:self.associatedView withAdContentViews:adView.subviews]; - self.hasAttachedToView = YES; - } - - adView.frame = self.associatedView.bounds; - [self.associatedView addSubview:adView]; - - return self.associatedView; - } else { - return nil; - } -} - -- (NSDictionary *)properties -{ - return self.adAdapter.properties; -} - -- (void)trackImpression -{ - if (self.hasTrackedImpression) { - MPLogDebug(@"Impression already tracked."); - return; - } - - MPLogDebug(@"Tracking an impression for %@.", self.adIdentifier); - self.hasTrackedImpression = YES; - [self trackMetricsForURLs:self.impressionTrackerURLs]; - - [MoPub sendImpressionDelegateAndNotificationFromAd:self - adUnitID:self.adUnitID - impressionData:self.configuration.impressionData]; -} - -- (void)trackClick -{ - if (self.hasTrackedClick) { - MPLogDebug(@"Click already tracked."); - return; - } - - MPLogDebug(@"Tracking a click for %@.", self.adIdentifier); - self.hasTrackedClick = YES; - [self trackMetricsForURLs:self.clickTrackerURLs]; - - if ([self.adAdapter respondsToSelector:@selector(trackClick)] && ![self isThirdPartyHandlingClicks]) { - [self.adAdapter trackClick]; - } - -} - -- (void)trackMetricsForURLs:(NSSet *)URLs -{ - for (NSURL *URL in URLs) { - [self trackMetricForURL:URL]; - } -} - -- (void)trackMetricForURL:(NSURL *)URL -{ - MPURLRequest *request = [[MPURLRequest alloc] initWithURL:URL]; - [MPHTTPNetworkSession startTaskWithHttpRequest:request responseHandler:nil errorHandler:nil]; -} - -#pragma mark - Internal - -- (void)willAttachToView:(UIView *)view withAdContentViews:(NSArray *)adContentViews { - if ([self.adAdapter respondsToSelector:@selector(willAttachToView:withAdContentViews:)]) { - [self.adAdapter willAttachToView:view withAdContentViews:adContentViews]; - } else if ([self.adAdapter respondsToSelector:@selector(willAttachToView:)]) { - [self.adAdapter willAttachToView:view]; - } -} - -- (BOOL)isThirdPartyHandlingClicks -{ - return [self.adAdapter respondsToSelector:@selector(enableThirdPartyClickTracking)] && [self.adAdapter enableThirdPartyClickTracking]; -} - -- (void)displayAdContent -{ - [self trackClick]; - - if ([self.adAdapter respondsToSelector:@selector(displayContentForURL:rootViewController:)]) { - [self.adAdapter displayContentForURL:self.adAdapter.defaultActionURL rootViewController:[self.delegate viewControllerForPresentingModalView]]; - } else { - // If this method is called, that means that the backing adapter should implement -displayContentForURL:rootViewController:completion:. - // If it doesn't, we'll log a warning. - MPLogInfo(@"Cannot display native ad content. -displayContentForURL:rootViewController:completion: not implemented by native ad adapter: %@", [self.adAdapter class]); - } -} - -#pragma mark - UITapGestureRecognizer - -- (void)adViewTapped -{ - [self displayAdContent]; - - if ([self.renderer respondsToSelector:@selector(nativeAdTapped)]) { - [self.renderer nativeAdTapped]; - } -} - -#pragma mark - MPNativeViewDelegate - -- (void)nativeViewWillMoveToSuperview:(UIView *)superview -{ - if ([self.renderer respondsToSelector:@selector(adViewWillMoveToSuperview:)]) - { - [self.renderer adViewWillMoveToSuperview:superview]; - } -} - -#pragma mark - MPNativeAdAdapterDelegate - -- (UIViewController *)viewControllerForPresentingModalView -{ - return [self.delegate viewControllerForPresentingModalView]; -} - -- (void)nativeAdWillLogImpression:(id)adAdapter -{ - [self trackImpression]; -} - -- (void)nativeAdDidClick:(id)adAdapter -{ - MPLogAdEvent(MPLogEvent.adTapped, self.adIdentifier); - [self trackClick]; -} - -- (void)nativeAdWillPresentModalForAdapter:(id)adapter -{ - MPLogAdEvent(MPLogEvent.adWillPresentModal, self.adIdentifier); - if ([self.delegate respondsToSelector:@selector(willPresentModalForNativeAd:)]) { - [self.delegate willPresentModalForNativeAd:self]; - } -} - -- (void)nativeAdDidDismissModalForAdapter:(id)adapter -{ - MPLogAdEvent(MPLogEvent.adDidDismissModal, self.adIdentifier); - if ([self.delegate respondsToSelector:@selector(didDismissModalForNativeAd:)]) { - [self.delegate didDismissModalForNativeAd:self]; - } -} - -- (void)nativeAdWillLeaveApplicationFromAdapter:(id)adapter -{ - MPLogAdEvent(MPLogEvent.adWillLeaveApplication, self.adIdentifier); - if ([self.delegate respondsToSelector:@selector(willLeaveApplicationFromNativeAd:)]) { - [self.delegate willLeaveApplicationFromNativeAd:self]; - } -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdAdapter.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdAdapter.h deleted file mode 100644 index b5b9252346..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdAdapter.h +++ /dev/null @@ -1,209 +0,0 @@ -// -// MPNativeAdAdapter.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@protocol MPNativeAdAdapter; - -/** - * Classes that conform to the `MPNativeAdAdapter` protocol can have an - * `MPNativeAdAdapterDelegate` delegate object. You use this delegate to communicate - * native ad events (such as impressions and clicks occurring) back to the MoPub SDK. - */ -@protocol MPNativeAdAdapterDelegate - -@required - -/** - * Asks the delegate for a view controller to use for presenting modal content, such as the in-app - * browser that can appear when an ad is tapped. - * - * @return A view controller that should be used for presenting modal content. - */ -- (UIViewController *)viewControllerForPresentingModalView; - -/** - * You should call this method when your adapter's modal is about to be presented. - * - * @param adapter The adapter that will present the modal. - */ -- (void)nativeAdWillPresentModalForAdapter:(id)adapter; - -/** - * You should call this method when your adapter's modal has been dismissed. - * - * @param adapter The adapter that dismissed the modal. - */ -- (void)nativeAdDidDismissModalForAdapter:(id)adapter; - -/** - * You should call this method when your the user will leave the application due to interaction with the ad. - * - * @param adapter The adapter that represents the ad that caused the user to leave the application. - */ -- (void)nativeAdWillLeaveApplicationFromAdapter:(id)adapter; - -@optional - -/** - * This method is called before the backing native ad logs an impression. - * - * @param adAdapter You should pass `self` to allow the MoPub SDK to associate this event with the - * correct instance of your ad adapter. - */ -- (void)nativeAdWillLogImpression:(id)adAdapter; - -/** - * This method is called when the user interacts with the ad. - * - * @param adAdapter You should pass `self` to allow the MoPub SDK to associate this event with the - * correct instance of your ad adapter. - */ -- (void)nativeAdDidClick:(id)adAdapter; - -@end - -/** - * The `MPNativeAdAdapter` protocol allows the MoPub SDK to interact with native ad objects obtained - * from third-party ad networks. An object that adopts this protocol acts as a wrapper for a native - * ad object, translating its proprietary interface into a common one that the MoPub SDK can - * understand. - * - * An object that adopts this protocol must implement the `properties` property to specify a - * dictionary of assets, such as title and text, that should be rendered as part of a native ad. - * When possible, you should place values in the returned dictionary such that they correspond to - * the pre-defined keys in the MPNativeAdConstants header file. - * - * An adopting object must additionally implement -displayContentForURL:rootViewController:completion: - * to supply the behavior that should occur when the user interacts with the ad. - * - * Optional methods of the protocol allow the adopting object to define when and how impressions - * and interactions should be tracked. - */ -@protocol MPNativeAdAdapter - -@required - -/** @name Ad Resources */ - -/** - * Provides a dictionary of all publicly accessible assets (such as title and text) for the - * native ad. - * - * When possible, you should place values in the returned dictionary such that they correspond to - * the pre-defined keys in the @c MPNativeAdConstants header file. - */ -@property (nonatomic, readonly) NSDictionary *properties; - -/** - * The default click-through URL for the ad. - * - * This may safely be set to nil if your network doesn't expose this value (for example, it may only - * provide a method to handle a click, lacking another for retrieving the URL itself). - */ -@property (nonatomic, readonly) NSURL *defaultActionURL; - -/** @name Handling Ad Interactions */ - -@optional - -/** - * Tells the object to open the specified URL using an appropriate mechanism. - * - * @param URL The URL to be opened. - * @param controller The view controller that should be used to present the modal view controller. - * - * Your implementation of this method should either forward the request to the underlying - * third-party ad object (if it has built-in support for handling ad interactions), or open an - * in-application modal web browser or a modal App Store controller. - */ -- (void)displayContentForURL:(NSURL *)URL rootViewController:(UIViewController *)controller; - -/** - * Determines whether MPNativeAd should track clicks - * - * If not implemented, this will be assumed to return NO, and MPNativeAd will track clicks. - * If this returns YES, then MPNativeAd will defer to the MPNativeAdAdapterDelegate callbacks to - * track clicks. - */ -- (BOOL)enableThirdPartyClickTracking; - -/** - * Tracks a click for this ad. - * - * To avoid reporting discrepancies, you should only implement this method if the third-party ad - * network requires clicks to be reported manually. - */ -- (void)trackClick; - -/** - * The `MPNativeAdAdapterDelegate` to send messages to as events occur. - * - * The `delegate` object defines several methods that you should call in order to inform MoPub - * of interactions with the ad. This delegate needs to be implemented if third party impression and/or - * click tracking is enabled. - */ -@property (nonatomic, weak) id delegate; - -/** @name Responding to an Ad Being Attached to a View */ - -/** - * This method will be called when your ad's content is about to be loaded into a view. - * - * @param view A view that will contain the ad content. - * - * You should implement this method if the underlying third-party ad object needs to be informed - * of this event. - */ -- (void)willAttachToView:(UIView *)view; - -/** - * This method will be called when your ad's content is about to be loaded into a view; subviews which contain ad - * contents are also included. - * - * Note: If both this method and `willAttachToView:` are implemented, ONLY this method will be called. - * - * @param view A view that will contain the ad content. - * @param adContentViews Array of views that contains the ad's content views. - * - * You should implement this method if the underlying third-party ad object needs to be informed of this event. - */ -- (void)willAttachToView:(UIView *)view withAdContentViews:(NSArray *)adContentViews; - -/** - * This method will be called if your implementation provides a privacy icon through the properties dictionary - * and the user has tapped the icon. - */ -- (void)displayContentForDAAIconTap; - -/** - * Return your ad's privacy information icon view. - * - * You should implement this method if your ad supplies its own view for its privacy information icon. - */ -- (UIView *)privacyInformationIconView; - -/** - * Return your ad's main media view. - * - * You should implement this method if your ad supplies its own view for the main media view which is typically - * an image or video. If you implement this method, the SDK will not make any other attempts at retrieving - * the main media asset. - */ -- (UIView *)mainMediaView; - -/** - * Return your ad's icon view. - * - * You should implement this method if your ad supplies its own view for the icon view which is typically - * an image. If you implement this method, the SDK will not make any other attempts at retrieving - * the icon asset. - */ -- (UIView *)iconMediaView; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdConstants.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdConstants.h deleted file mode 100644 index b5b51300b7..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdConstants.h +++ /dev/null @@ -1,42 +0,0 @@ -// -// MPNativeAdConstants.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import - -extern const CGFloat kUniversalStarRatingScale; -extern const CGFloat kStarRatingMaxValue; -extern const CGFloat kStarRatingMinValue; -extern const NSTimeInterval kDefaultRequiredSecondsForImpression; - -/** @name MPNativeAd asset keys */ - -extern NSString *const kAdTitleKey; -extern NSString *const kAdTextKey; -extern NSString *const kAdIconImageKey; -extern NSString *const kAdIconImageViewKey; -extern NSString *const kAdMainImageKey; -extern NSString *const kAdSponsoredByCompanyKey; -extern NSString *const kAdMainMediaViewKey; -extern NSString *const kAdCTATextKey; -extern NSString *const kAdStarRatingKey; -extern NSString *const kVideoConfigKey; -extern NSString *const kVASTVideoKey; -extern NSString *const kNativeAdConfigKey; -extern NSString *const kAdPrivacyIconImageUrlKey; -extern NSString *const kAdPrivacyIconUIImageKey; -extern NSString *const kAdPrivacyIconClickUrlKey; - -extern NSString *const kPrivacyIconImageName; -extern NSString *const kPrivacyIconTapDestinationURL; -extern NSString *const kDefaultActionURLKey; -extern NSString *const kClickTrackerURLKey; - -extern NSString *const kNativeAdUnitId; -extern NSString *const kNativeAdDspCreativeId; -extern NSString *const kNativeAdDspName; diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdConstants.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdConstants.m deleted file mode 100644 index 74fff4e55b..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdConstants.m +++ /dev/null @@ -1,39 +0,0 @@ -// -// MPNativeAdConstants.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPNativeAdConstants.h" - -const CGFloat kUniversalStarRatingScale = 5.0f; -const CGFloat kStarRatingMaxValue = 5.0f; -const CGFloat kStarRatingMinValue = 0.0f; -const NSTimeInterval kDefaultRequiredSecondsForImpression = 1.0; - -NSString *const kAdTitleKey = @"title"; -NSString *const kAdTextKey = @"text"; -NSString *const kAdIconImageKey = @"iconimage"; -NSString *const kAdIconImageViewKey = @"iconimageview"; -NSString *const kAdMainImageKey = @"mainimage"; -NSString *const kAdSponsoredByCompanyKey = @"sponsored"; -NSString *const kAdMainMediaViewKey = @"mainmediaview"; -NSString *const kAdCTATextKey = @"ctatext"; -NSString *const kAdStarRatingKey = @"starrating"; -NSString *const kVideoConfigKey = @"videoconfig"; -NSString *const kVASTVideoKey = @"video"; -NSString *const kNativeAdConfigKey = @"nativeadconfig"; -NSString *const kAdPrivacyIconImageUrlKey = @"privacyicon"; -NSString *const kAdPrivacyIconUIImageKey = @"privacyiconuiimage"; -NSString *const kAdPrivacyIconClickUrlKey = @"privacyclkurl"; - -NSString *const kPrivacyIconImageName = @"MPDAAIcon.png"; -NSString *const kPrivacyIconTapDestinationURL = @"https://www.mopub.com/optout"; -NSString *const kDefaultActionURLKey = @"clk"; -NSString *const kClickTrackerURLKey = @"clktracker"; - -NSString *const kNativeAdUnitId = @"adUnitId"; -NSString *const kNativeAdDspCreativeId = @"dspCreativeId"; -NSString *const kNativeAdDspName = @"dspName"; diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdData.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdData.h deleted file mode 100644 index 7ff49606d7..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdData.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// MPNativeAdData.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@class MPNativeAd; - -@interface MPNativeAdData : NSObject - -@property (nonatomic, copy) NSString *adUnitID; -@property (nonatomic, strong) MPNativeAd *ad; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdData.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdData.m deleted file mode 100644 index 9c8cbf4b17..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdData.m +++ /dev/null @@ -1,13 +0,0 @@ -// -// MPNativeAdData.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPNativeAdData.h" - -@implementation MPNativeAdData - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdDelegate.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdDelegate.h deleted file mode 100644 index 1725dd5b4e..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdDelegate.h +++ /dev/null @@ -1,54 +0,0 @@ -// -// MPNativeAdDelegate.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPMoPubAd.h" - -/** - * The delegate of an `MPNativeAd` object must adopt the `MPNativeAdDelegate` protocol. It must - * implement `viewControllerForPresentingModalView` to provide a root view controller from which - * the ad view should present modal content. - */ -@class MPNativeAd; -@protocol MPNativeAdDelegate - -@optional - -/** - * Sent when the native ad will present its modal content. - * - * @param nativeAd The native ad sending the message. - */ -- (void)willPresentModalForNativeAd:(MPNativeAd *)nativeAd; - -/** - * Sent when a native ad has dismissed its modal content, returning control to your application. - * - * @param nativeAd The native ad sending the message. - */ -- (void)didDismissModalForNativeAd:(MPNativeAd *)nativeAd; - -/** - * Sent when a user is about to leave your application as a result of tapping this native ad. - * - * @param nativeAd The native ad sending the message. - */ -- (void)willLeaveApplicationFromNativeAd:(MPNativeAd *)nativeAd; - -@required - -/** @name Managing Modal Content Presentation */ - -/** - * Asks the delegate for a view controller to use for presenting modal content, such as the in-app - * browser that can appear when an ad is tapped. - * - * @return A view controller that should be used for presenting modal content. - */ -- (UIViewController *)viewControllerForPresentingModalView; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRenderer.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRenderer.h deleted file mode 100644 index 277f6acb39..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRenderer.h +++ /dev/null @@ -1,107 +0,0 @@ -// -// MPNativeAdRenderer.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import - -@protocol MPNativeAdAdapter; -@protocol MPNativeAdRendererSettings; -@class MPNativeAdRendererConfiguration; - -/** - * Provide an implementation of this handler for your renderer settings. - * - * @param maximumWidth Max width of the ad expected to be rendered as. - * - * @return Size of the view as rendered given the maximum width desired. - */ -typedef CGSize (^MPNativeViewSizeHandler)(CGFloat maximumWidth); - -/** - * The MoPub SDK has a concept of native ad renderer that allows you to render the ad however you want. It also gives you the - * ability to expose configurable properties through renderer settings objects to the application that influence how you render - * your native custom event's view. - * - * Your renderer should implement this protocol. Your renderer is responsible for rendering the network's ad data into a view - * when `-retrieveViewWithAdapter:error:` is called. Your renderer will be asked to render the native ad if your renderer configuration - * indicates that your renderer supports your specific native ad network. - * - * Finally, your renderer will live as long as the ad adapter so you may store data in your renderer if necessary. - */ -@protocol MPNativeAdRenderer - -@required - -/** - * You must construct and return an MPNativeAdRendererConfiguration object specific for your renderer. You must - * set all the properties on the configuration object. - * - * @param rendererSettings Application defined settings that you should store in the configuration object that you - * construct. - * - * @return A configuration object that allows the MoPub SDK to instantiate your renderer with the application - * settings and for the supported ad types. - */ -+ (MPNativeAdRendererConfiguration *)rendererConfigurationWithRendererSettings:(id)rendererSettings; - -/** - * This is the init method that will be called when the MoPub SDK initializes your renderer. - * - * @param rendererSettings The renderer settings object that corresponds to your renderer. - */ -- (instancetype)initWithRendererSettings:(id)rendererSettings; - -/** - * You must return a native ad view when `-retrieveViewWithAdapter:error:` is called. Ideally, you should create a native view - * each time this is called as holding onto the view may end up consuming a lot of memory when many ads are being shown. - * However, it is OK to hold a strong reference to the view if you must. - * - * @param adapter Your custom event's adapter class that contains the network specific data necessary to render the ad to - * a view. - * @param error If you can't construct a view for whatever reason, you must fill in this error object. - * - * @return If successful, the method will return a native view presenting the ad. If it - * is unsuccessful at retrieving a view, it will return nil and create - * an error object for the error parameter. - */ -- (UIView *)retrieveViewWithAdapter:(id)adapter error:(NSError **)error; - -@optional - -/** - * The viewSizeHandler is used to allow the app to configure its native ad view size - * given a maximum width when using ad placer solutions. This is not called when the - * app is manually integrating native ads. - * - * You should obtain the renderer's viewSizeHandler from the settings object in - * `-initWithRendererSettings:`. - */ -@property (nonatomic, readonly) MPNativeViewSizeHandler viewSizeHandler; - -/** - * The MoPubSDK will notify your renderer when your native ad's view has moved in - * the hierarchy. superview will be nil if the native ad's view has been removed - * from the view hierarchy. - * - * The view your renderer creates is attached to another view before being added - * to the view hierarchy. As a result, the superview argument will not be the renderer's ad view's superview. - * - * @param superview The app's view that contains the native ad view. There is an - * intermediate view between the renderer's ad view and the app's view. - */ -- (void)adViewWillMoveToSuperview:(UIView *)superview; - -/** - * - * The MoPubSDK will call this method when the user has tapped the ad and will - * invoke the clickthrough action. - * - */ -- (void)nativeAdTapped; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRendererConfiguration.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRendererConfiguration.h deleted file mode 100644 index d5af208776..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRendererConfiguration.h +++ /dev/null @@ -1,39 +0,0 @@ -// -// MPNativeAdRendererConfiguration.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@protocol MPNativeAdRendererSettings; - -/* - * All native ads loaded with the MoPub SDK take a renderer configuration object. This object links - * the necessary native ad objects together. - * - * The configuration stores the renderer settings that will eventually be used when initializing the - * render class. Furthermore, the configuration indicates what custom events the renderer class supports - * through the supportedCustomEvents property. - */ -@interface MPNativeAdRendererConfiguration : NSObject - -/* - * The settings that inform the ad renderer about how it should render the ad. - */ -@property (nonatomic, strong) id rendererSettings; - -/* - * The renderer class used to render supported custom events. - */ -@property (nonatomic, assign) Class rendererClass; - -/* - * An array of custom event class names (as strings) that the renderClass can - * render. - */ -@property (nonatomic, strong) NSArray *supportedCustomEvents; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRendererConfiguration.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRendererConfiguration.m deleted file mode 100644 index 5775e985a3..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRendererConfiguration.m +++ /dev/null @@ -1,13 +0,0 @@ -// -// MPNativeAdRendererConfiguration.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPNativeAdRendererConfiguration.h" - -@implementation MPNativeAdRendererConfiguration - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRendererSettings.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRendererSettings.h deleted file mode 100644 index 53942ce0f8..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRendererSettings.h +++ /dev/null @@ -1,34 +0,0 @@ -// -// MPNativeAdRendererSettings.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPNativeAdRenderer.h" - -/* - * Renderer settings are objects that allow you to expose configurable properties to the application. - * You renderer will be initialized with these settings. - * - * You should create a renderer settings object that adheres to this protocol and exposes configurable - * configurable properties for your renderer class. - */ -@protocol MPNativeAdRendererSettings - -@optional - -/** - * The viewSizeHandler is used to allow the app to configure its native ad view size - * given a maximum width when using ad placer solutions. This is not called when the - * app is manually integrating native ads. - * - * Your renderer settings object should expose a settable viewSizeHandler property so the - * application can choose how it wants to size its ad views. Your renderer will be able - * to use the view size handler from your settings object. - */ -@property (nonatomic, readwrite, copy) MPNativeViewSizeHandler viewSizeHandler; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRendering.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRendering.h deleted file mode 100644 index fb81b5ee3b..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRendering.h +++ /dev/null @@ -1,131 +0,0 @@ -// -// MPNativeAdRendering.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -#import "MPNativeAd.h" - -@class MPNativeAdRenderingImageLoader; - -/** - * The MPNativeAdRendering protocol provides methods for displaying ad content in - * custom view classes. - * - * It can be used for both static native ads and native video ads. If you are serving - * native video ads, you need to implement nativeVideoView. - */ - -@protocol MPNativeAdRendering - -@optional - -/** - * Return the UILabel that your view is using for the main text. - * - * @return a UILabel that is used for the main text. - */ -- (UILabel *)nativeMainTextLabel; - -/** - * Return the UILabel that your view is using for the title text. - * - * @return a UILabel that is used for the title text. - */ -- (UILabel *)nativeTitleTextLabel; - -/** - * Return the UIImageView that your view is using for the icon image. - * - * @return a UIImageView that is used for the icon image. - */ -- (UIImageView *)nativeIconImageView; - -/** - * Return the UIImageView that your view is using for the main image. - * - * @return a UIImageView that is used for the main image. - */ -- (UIImageView *)nativeMainImageView; - -/** - * Return the @c UILabel that your view is using for text indicating the - * sponsor that sponsored the ad. - * - * Sometimes sponsor information is not included with the advertisement; in that - * case, MoPub will set the label's @c text to empty string and the label's @c hidden - * property to @c YES. Please configure your view to be ready for this possibility. - * - * @return a @c UILabel to be used for "Sponsored by Example" text - */ -- (UILabel *)nativeSponsoredByCompanyTextLabel; - -/** - * Specifies custom text for @c nativeSponsoredByCompanyTextLabel, primarily to be used - * for localization, but also can be used for custom copy, e.g., "Brought to you by Example" - * rather than the default "Sponsored by Example". - * - * If this method is not implemented, or is implemented to return @c nil or empty string, we - * will use the default "Sponsored by Example" - * - * @param sponsorName The name of the sponsor who sponored the native ad - * @return an assembled string containing @c sponsorName indicating something to the effect - * of "Sponsored by " - */ -+ (NSString *)localizedSponsoredByTextWithSponsorName:(NSString *)sponsorName; - -/** - * Return the UIView that your view is using for the video. - * You only need to implement this when you are serving video ads. - * - * @return a UIView that is used to hold the video. - */ -- (UIView *)nativeVideoView; - -/** - * Returns the UILabel that your view is using for the call to action (cta) text. - * - * @return a UILabel that is used for the cta text. - */ -- (UILabel *)nativeCallToActionTextLabel; - -/** - * Returns the UIImageView that your view is using for the privacy information icon. - * - * @return a UIImageView that is used for the privacy information icon. - */ -- (UIImageView *)nativePrivacyInformationIconImageView; - -/** - * This method is called if the ad contains a star rating. - * - * Implement this method if you expect and wish to display a star rating. - * - * @param starRating An NSNumber that is a float in the range of 0.0f and 5.0f. - */ -- (void)layoutStarRating:(NSNumber *)starRating; - -/** - * This method allows you to insert your custom native ad elements into your view. - * - * This method will be called when your ad view is added to the view hierarchy. - * - * @param customProperties Dictionary that contains custom native ad elements. - * @param imageLoader Use this object to load your custom images by calling `loadImageForURL:intoImageView:`. - */ -- (void)layoutCustomAssetsWithProperties:(NSDictionary *)customProperties imageLoader:(MPNativeAdRenderingImageLoader *)imageLoader; - -/** - * Specifies a nib object containing a view that should be used to render ads. - * - * If you want to use a nib object to render ads, you must implement this method. - * - * @return an initialized UINib object. This is not allowed to be `nil`. - */ -+ (UINib *)nibForAd; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRenderingImageLoader.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRenderingImageLoader.h deleted file mode 100644 index 8a5b285515..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRenderingImageLoader.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// MPNativeAdRenderingImageLoader.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@class MPNativeAdRendererImageHandler; - -@interface MPNativeAdRenderingImageLoader : NSObject - -- (instancetype)initWithImageHandler:(MPNativeAdRendererImageHandler *)imageHandler; - -- (void)loadImageForURL:(NSURL *)url intoImageView:(UIImageView *)imageView; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRenderingImageLoader.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRenderingImageLoader.m deleted file mode 100644 index ee19f687e1..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRenderingImageLoader.m +++ /dev/null @@ -1,34 +0,0 @@ -// -// MPNativeAdRenderingImageLoader.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPNativeAdRenderingImageLoader.h" -#import "MPNativeAdRendererImageHandler.h" - -@interface MPNativeAdRenderingImageLoader () - -@property (nonatomic) MPNativeAdRendererImageHandler *imageHandler; - -@end - -@implementation MPNativeAdRenderingImageLoader - -- (instancetype)initWithImageHandler:(MPNativeAdRendererImageHandler *)imageHandler -{ - if (self = [super init]) { - _imageHandler = imageHandler; - } - - return self; -} - -- (void)loadImageForURL:(NSURL *)url intoImageView:(UIImageView *)imageView -{ - [self.imageHandler loadImageForURL:url intoImageView:imageView]; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRequest.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRequest.h deleted file mode 100644 index 938e97bd89..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRequest.h +++ /dev/null @@ -1,63 +0,0 @@ -// -// MPNativeAdRequest.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@class MPNativeAd; -@class MPNativeAdRequest; -@class MPNativeAdRequestTargeting; - -typedef void(^MPNativeAdRequestHandler)(MPNativeAdRequest *request, - MPNativeAd *response, - NSError *error); - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * The `MPNativeAdRequest` class is used to manage individual requests to the MoPub ad server for - * native ads. - * - * @warning **Note:** This class is meant for one-off requests for which you intend to manually - * process the native ad response. If you are using `MPTableViewAdPlacer` or - * `MPCollectionViewAdPlacer` to display ads, there should be no need for you to use this class. - */ - -@interface MPNativeAdRequest : NSObject - -/** @name Targeting Information */ - -/** - * An object representing targeting parameters that can be passed to the MoPub ad server to - * serve more relevant advertising. - */ -@property (nonatomic, strong) MPNativeAdRequestTargeting *targeting; - -/** @name Initializing and Starting an Ad Request */ - -/** - * Initializes a request object. - * - * @param identifier The ad unit identifier for this request. An ad unit is a defined placement in - * your application set aside for advertising. Ad unit IDs are created on the MoPub website. - * - * @param rendererConfigurations An array of MPNativeAdRendererConfiguration objects that control how - * the native ad is rendered. - * - * @return An `MPNativeAdRequest` object. - */ -+ (MPNativeAdRequest *)requestWithAdUnitIdentifier:(NSString *)identifier rendererConfigurations:(NSArray *)rendererConfigurations; - -/** - * Executes a request to the MoPub ad server. - * - * @param handler A block to execute when the request finishes. The block includes as parameters the - * request itself and either a valid MPNativeAd or an NSError object indicating failure. - */ -- (void)startWithCompletionHandler:(MPNativeAdRequestHandler)handler; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRequest.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRequest.m deleted file mode 100644 index 2b9b3c5201..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRequest.m +++ /dev/null @@ -1,395 +0,0 @@ -// -// MPNativeAdRequest.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPNativeAdRequest.h" - -#import "MPAdServerURLBuilder.h" -#import "MPCoreInstanceProvider.h" -#import "MPNativeAdError.h" -#import "MPNativeAd+Internal.h" -#import "MPNativeAdRequestTargeting.h" -#import "MPLogging.h" -#import "MPImageDownloadQueue.h" -#import "MPConstants.h" -#import "MPNativeAdConstants.h" -#import "MPNativeCustomEventDelegate.h" -#import "MPNativeCustomEvent.h" -#import "MOPUBNativeVideoAdConfigValues.h" -#import "MOPUBNativeVideoCustomEvent.h" -#import "NSJSONSerialization+MPAdditions.h" -#import "MPAdServerCommunicator.h" -#import "MPNativeAdRenderer.h" -#import "MPMoPubNativeCustomEvent.h" -#import "MPNativeAdRendererConfiguration.h" -#import "NSMutableArray+MPAdditions.h" -#import "MPStopwatch.h" -#import "MPTimer.h" -#import "MPError.h" -#import "NSDate+MPAdditions.h" -#import "NSError+MPAdditions.h" - -static NSString * const kNativeAdErrorDomain = @"com.mopub.NativeAd"; - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MPNativeAdRequest () - -@property (nonatomic, copy) NSString *adUnitId; -@property (nonatomic) NSArray *rendererConfigurations; -@property (nonatomic, strong) NSURL *URL; -@property (nonatomic, strong) MPAdServerCommunicator *communicator; -@property (nonatomic, copy) MPNativeAdRequestHandler completionHandler; -@property (nonatomic, strong) MPNativeCustomEvent *nativeCustomEvent; -@property (nonatomic, strong) MPAdConfiguration *adConfiguration; -@property (nonatomic, strong) NSMutableArray *remainingConfigurations; -@property (nonatomic) id customEventRenderer; -@property (nonatomic, assign) BOOL loading; -@property (nonatomic, strong) MPTimer *timeoutTimer; -@property (nonatomic, strong) MPStopwatch *loadStopwatch; -@property (nonatomic, strong) NSURL *mostRecentlyLoadedURL; // ADF-4286: avoid infinite ad reloads - -@end - -@implementation MPNativeAdRequest - -- (id)initWithAdUnitIdentifier:(NSString *)identifier rendererConfigurations:(NSArray *)rendererConfigurations -{ - self = [super init]; - if (self) { - _adUnitId = [identifier copy]; - _communicator = [[MPAdServerCommunicator alloc] initWithDelegate:self]; - _rendererConfigurations = rendererConfigurations; - _loadStopwatch = MPStopwatch.new; - } - return self; -} - -- (void)dealloc -{ - [_communicator cancel]; - [_communicator setDelegate:nil]; - [_nativeCustomEvent setDelegate:nil]; -} - -#pragma mark - Public - -+ (MPNativeAdRequest *)requestWithAdUnitIdentifier:(NSString *)identifier rendererConfigurations:(NSArray *)rendererConfigurations -{ - return [[self alloc] initWithAdUnitIdentifier:identifier rendererConfigurations:rendererConfigurations]; -} - -- (void)startWithCompletionHandler:(MPNativeAdRequestHandler)handler -{ - if (handler) { - self.URL = [MPAdServerURLBuilder URLWithAdUnitID:self.adUnitId - targeting:self.targeting - desiredAssets:[self.targeting.desiredAssets allObjects] - viewability:NO]; - - [self assignCompletionHandler:handler]; - - [self loadAdWithURL:self.URL]; - } else { - MPLogInfo(@"Native Ad Request did not start - requires completion handler block."); - } -} - -- (void)startForAdSequence:(NSInteger)adSequence withCompletionHandler:(MPNativeAdRequestHandler)handler -{ - if (handler) { - self.URL = [MPAdServerURLBuilder URLWithAdUnitID:self.adUnitId - targeting:self.targeting - desiredAssets:[self.targeting.desiredAssets allObjects] - adSequence:adSequence - viewability:NO]; - - [self assignCompletionHandler:handler]; - - [self loadAdWithURL:self.URL]; - } else { - MPLogInfo(@"Native Ad Request did not start - requires completion handler block."); - } -} - -#pragma mark - Private - -- (void)assignCompletionHandler:(MPNativeAdRequestHandler)handler -{ -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Warc-retain-cycles" - // we explicitly create a block retain cycle here to prevent self from being deallocated if the developer - // removes his strong reference to the request. This retain cycle is broken in - // - (void)completeAdRequestWithAdObject:(MPNativeAd *)adObject error:(NSError *)error - // when self.completionHandler is set to nil. - self.completionHandler = ^(MPNativeAdRequest *request, MPNativeAd *response, NSError *error) { - handler(self, response, error); - }; -#pragma clang diagnostic pop -} - -- (void)loadAdWithURL:(NSURL *)URL -{ - MPLogAdEvent(MPLogEvent.adLoadAttempt, self.adUnitId); - - if (self.loading) { - MPLogInfo(@"Native ad request is already loading an ad. Wait for previous load to finish."); - return; - } - - self.loading = YES; - self.mostRecentlyLoadedURL = URL; - [self.communicator loadURL:URL]; -} - -- (void)getAdWithConfiguration:(MPAdConfiguration *)configuration -{ - if (configuration.customEventClass) { - MPLogInfo(@"Looking for custom event class named %@.", configuration.customEventClass); - } - - [self startTimeoutTimer]; - - // For MoPub native ads, set the classData to be the adResponseData - if ((configuration.customEventClass == [MPMoPubNativeCustomEvent class]) || (configuration.customEventClass == [MOPUBNativeVideoCustomEvent class])) { - NSError *error; - NSMutableDictionary *classData = [NSJSONSerialization mp_JSONObjectWithData:configuration.adResponseData - options:0 - clearNullObjects:YES - error:&error]; - if (configuration.customEventClass == [MOPUBNativeVideoCustomEvent class]) { - classData[kNativeAdConfigKey] = [[MOPUBNativeVideoAdConfigValues alloc] initWithPlayVisiblePercent:configuration.nativeVideoPlayVisiblePercent - pauseVisiblePercent:configuration.nativeVideoPauseVisiblePercent - impressionMinVisiblePixels:configuration.nativeImpressionMinVisiblePixels - impressionMinVisiblePercent:configuration.nativeImpressionMinVisiblePercent - impressionMinVisibleSeconds:configuration.nativeImpressionMinVisibleTimeInterval - maxBufferingTime:configuration.nativeVideoMaxBufferingTime - trackers:configuration.vastVideoTrackers]; - } else if (configuration.customEventClass == [MPMoPubNativeCustomEvent class]) { - classData[kNativeAdConfigKey] = [[MPNativeAdConfigValues alloc] initWithImpressionMinVisiblePixels:configuration.nativeImpressionMinVisiblePixels - impressionMinVisiblePercent:configuration.nativeImpressionMinVisiblePercent - impressionMinVisibleSeconds:configuration.nativeImpressionMinVisibleTimeInterval]; - } - - // Additional information to be passed to the MoPub native custom events - // for the purposes of logging. - classData[kNativeAdUnitId] = self.adUnitId; - classData[kNativeAdDspName] = nil; // Placeholder for future feature - classData[kNativeAdDspCreativeId] = configuration.dspCreativeId; - - configuration.customEventClassData = classData; - } - - // See if we have a renderer that we can use for the custom event now so we can fail early. - NSString *customEventClassName = NSStringFromClass(configuration.customEventClass); - MPNativeAdRendererConfiguration *customEventRendererConfig = nil; - - for (MPNativeAdRendererConfiguration *rendererConfig in self.rendererConfigurations) { - NSArray *supportedCustomEvents = rendererConfig.supportedCustomEvents; - - if ([supportedCustomEvents containsObject:customEventClassName]) { - customEventRendererConfig = rendererConfig; - break; - } - } - - if (customEventRendererConfig == nil) { - NSString * noRendererErrorMessage = [NSString stringWithFormat:@"Could not find renderer configuration for custom event class: %@", NSStringFromClass(configuration.customEventClass)]; - NSError * noRendererError = [NSError errorWithCode:MOPUBErrorNoRenderer localizedDescription:noRendererErrorMessage]; - MPLogEvent([MPLogEvent error:noRendererError message:nil]); - - [self nativeCustomEvent:nil didFailToLoadAdWithError:noRendererError]; - return; - } - // Create a renderer from the config. - self.customEventRenderer = [[customEventRendererConfig.rendererClass alloc] initWithRendererSettings:customEventRendererConfig.rendererSettings]; - - MPNativeCustomEvent *customEvent = [[configuration.customEventClass alloc] init]; - if (![customEvent isKindOfClass:[MPNativeCustomEvent class]]) { - NSString * invalidCustomEventErrorMessage = [NSString stringWithFormat:@"Custom Event Class: %@ does not extend MPNativeCustomEvent", NSStringFromClass(configuration.customEventClass)]; - NSError * invalidCustomEventError = [NSError errorWithCode:MOPUBErrorNoRenderer localizedDescription:invalidCustomEventErrorMessage]; - MPLogEvent([MPLogEvent error:invalidCustomEventError message:nil]); - - [self nativeCustomEvent:nil didFailToLoadAdWithError:invalidCustomEventError]; - return; - } - customEvent.delegate = self; - customEvent.localExtras = self.targeting.localExtras; - self.nativeCustomEvent = customEvent; - - [self.nativeCustomEvent requestAdWithCustomEventInfo:configuration.customEventClassData adMarkup:configuration.advancedBidPayload]; -} - -- (void)failAdRequest { - if (self.adConfiguration.nextURL == nil || [[self.adConfiguration.nextURL absoluteString] length] == 0) { - [self completeAdRequestWithAdObject:nil error:MPNativeAdNSErrorForInvalidAdServerResponse(nil)]; - return; - } - - self.loading = NO; - [self loadAdWithURL:self.adConfiguration.nextURL]; -} - -- (void)completeAdRequestWithAdObject:(MPNativeAd *)adObject error:(NSError *)error -{ - [self didStopLoading]; - - self.loading = NO; - self.remainingConfigurations = nil; - - adObject.renderer = self.customEventRenderer; - adObject.configuration = self.adConfiguration; - adObject.adUnitID = self.adUnitId; - - if ([(id)adObject.adAdapter respondsToSelector:@selector(setAdConfiguration:)]) { - [(id)adObject.adAdapter performSelector:@selector(setAdConfiguration:) withObject:self.adConfiguration]; - } - - if (error == nil) { - MPLogAdEvent(MPLogEvent.adDidLoad, self.adUnitId); - } else { - MPLogAdEvent([MPLogEvent adFailedToLoadWithError:error], self.adUnitId); - } - - if (self.completionHandler) { - self.completionHandler(self, adObject, error); - self.completionHandler = nil; - } -} - -- (void)fetchAdWithConfiguration:(MPAdConfiguration *)configuration { - if (configuration.adUnitWarmingUp) { - MPLogInfo(kMPWarmingUpErrorLogFormatWithAdUnitID, self.adUnitId); - [self completeAdRequestWithAdObject:nil error:MPNativeAdNSErrorForAdUnitWarmingUp()]; - return; - } - - if ([configuration.adType isEqualToString:kAdTypeClear]) { - MPLogInfo(kMPClearErrorLogFormatWithAdUnitID, self.adUnitId); - [self completeAdRequestWithAdObject:nil error:MPNativeAdNSErrorForNoInventory()]; - return; - } - - MPLogInfo(@"Received data from MoPub to construct native ad.\n"); - - // Notify Ad Server of the adapter load. This is fire and forget. - [self.communicator sendBeforeLoadUrlWithConfiguration:configuration]; - - // Start the stopwatch for the adapter load. - [self.loadStopwatch start]; - - [self getAdWithConfiguration:self.adConfiguration]; -} - -#pragma mark - - -- (void)communicatorDidReceiveAdConfigurations:(NSArray *)configurations -{ - self.remainingConfigurations = [configurations mutableCopy]; - self.adConfiguration = [self.remainingConfigurations removeFirst]; - - // There are no configurations to try. Consider this a clear response by the server. - if (self.remainingConfigurations.count == 0 && self.adConfiguration == nil) { - MPLogInfo(kMPClearErrorLogFormatWithAdUnitID, self.adUnitId); - [self completeAdRequestWithAdObject:nil error:MPNativeAdNSErrorForNoInventory()]; - return; - } - - [self fetchAdWithConfiguration:self.adConfiguration]; -} - -- (void)communicatorDidFailWithError:(NSError *)error -{ - MPLogDebug(@"Error: Couldn't retrieve an ad from MoPub. Message: %@", error); - - [self completeAdRequestWithAdObject:nil error:MPNativeAdNSErrorForNetworkConnectionError()]; -} - -- (BOOL)isFullscreenAd { - return NO; -} - -#pragma mark - - -- (void)nativeCustomEvent:(MPNativeCustomEvent *)event didLoadAd:(MPNativeAd *)adObject -{ - // Record the end of the adapter load and send off the fire and forget after-load-url tracker. - NSTimeInterval duration = [self.loadStopwatch stop]; - [self.communicator sendAfterLoadUrlWithConfiguration:self.adConfiguration adapterLoadDuration:duration adapterLoadResult:MPAfterLoadResultAdLoaded]; - - // Add the click tracker url from the header to our set. - if (self.adConfiguration.clickTrackingURL) { - [adObject.clickTrackerURLs addObject:self.adConfiguration.clickTrackingURL]; - } - - // Add the impression tracker url from the header to our set. - if (self.adConfiguration.impressionTrackingURLs) { - [adObject.impressionTrackerURLs addObjectsFromArray:self.adConfiguration.impressionTrackingURLs]; - } - - // Error if we don't have click trackers or impression trackers. - if (adObject.clickTrackerURLs.count < 1 || adObject.impressionTrackerURLs.count < 1) { - [self completeAdRequestWithAdObject:nil error:MPNativeAdNSErrorForInvalidAdServerResponse(@"Invalid ad trackers")]; - } - else { - [self completeAdRequestWithAdObject:adObject error:nil]; - } -} - -- (void)nativeCustomEvent:(MPNativeCustomEvent *)event didFailToLoadAdWithError:(NSError *)error -{ - // Record the end of the adapter load and send off the fire and forget after-load-url tracker - // with the appropriate error code result. - NSTimeInterval duration = [self.loadStopwatch stop]; - MPAfterLoadResult result = (error.isAdRequestTimedOutError ? MPAfterLoadResultTimeout : (event == nil ? MPAfterLoadResultMissingAdapter : MPAfterLoadResultError)); - [self.communicator sendAfterLoadUrlWithConfiguration:self.adConfiguration adapterLoadDuration:duration adapterLoadResult:result]; - - // There are more ad configurations to try. - if (self.remainingConfigurations.count > 0) { - self.adConfiguration = [self.remainingConfigurations removeFirst]; - [self fetchAdWithConfiguration:self.adConfiguration]; - } - // No more configurations to try. Fail over and let Ad Server get more ads - else if (self.adConfiguration.nextURL != nil - && [self.adConfiguration.nextURL isEqual:self.mostRecentlyLoadedURL] == false) { - self.loading = NO; - [self loadAdWithURL:self.adConfiguration.nextURL]; - } - // Nothing left to try. - else { - self.loading = NO; - - MPLogInfo(kMPClearErrorLogFormatWithAdUnitID, self.adUnitId); - [self completeAdRequestWithAdObject:nil error:MPNativeAdNSErrorForNoInventory()]; - } -} - -- (void)startTimeoutTimer -{ - NSTimeInterval timeInterval = (self.adConfiguration && self.adConfiguration.adTimeoutInterval >= 0) ? self.adConfiguration.adTimeoutInterval : NATIVE_TIMEOUT_INTERVAL; - - if (timeInterval > 0) { - self.timeoutTimer = [MPTimer timerWithTimeInterval:timeInterval - target:self - selector:@selector(timeout) - repeats:NO]; - [self.timeoutTimer scheduleNow]; - } -} - -- (void)timeout -{ - NSError * error = [NSError errorWithCode:MOPUBErrorAdRequestTimedOut localizedDescription:@"Native ad request timed out"]; - [self nativeCustomEvent:self.nativeCustomEvent didFailToLoadAdWithError:error]; -} - -- (void)didStopLoading -{ - [self.timeoutTimer invalidate]; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRequestTargeting.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRequestTargeting.h deleted file mode 100644 index d9ab840f85..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRequestTargeting.h +++ /dev/null @@ -1,32 +0,0 @@ -// -// MPNativeAdRequestTargeting.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPAdTargeting.h" - -/** - The @c MPNativeAdRequestTargeting class is used to attach targeting information to - @c MPNativeAdRequest objects. - */ -@interface MPNativeAdRequestTargeting : MPAdTargeting - -/** - Creates and returns an empty @c MPNativeAdRequestTargeting object. - @return A newly initialized @c MPNativeAdRequestTargeting object. - */ -+ (MPNativeAdRequestTargeting *)targeting; - -/** - A set of defined strings that correspond to assets for the intended native ad - object. This set should contain only those assets that will be displayed in the ad. - - The MoPub ad server will attempt to only return the assets in @c desiredAssets. - */ -@property (nonatomic, strong) NSSet * desiredAssets; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRequestTargeting.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRequestTargeting.m deleted file mode 100644 index 324537e0fc..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRequestTargeting.m +++ /dev/null @@ -1,41 +0,0 @@ -// -// MPNativeAdRequestTargeting.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPNativeAdRequestTargeting.h" -#import "MPNativeAdConstants.h" - -#import - -@implementation MPNativeAdRequestTargeting - -+ (MPNativeAdRequestTargeting *)targeting -{ - return [[MPNativeAdRequestTargeting alloc] initWithCreativeSafeSize:CGSizeZero]; -} - -- (void)setDesiredAssets:(NSSet *)desiredAssets -{ - if (_desiredAssets != desiredAssets) { - - NSMutableSet *allowedAdAssets = [NSMutableSet setWithObjects:kAdTitleKey, - kAdTextKey, - kAdSponsoredByCompanyKey, - kAdIconImageKey, - kAdMainImageKey, - kAdCTATextKey, - kAdStarRatingKey, - kAdIconImageViewKey, - kAdMainMediaViewKey, - nil]; - [allowedAdAssets intersectSet:desiredAssets]; - _desiredAssets = allowedAdAssets; - } -} - - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdSource.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdSource.h deleted file mode 100644 index cc80934f86..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdSource.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// MPNativeAdSource.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPNativeAdSourceDelegate.h" -@class MPNativeAdRequestTargeting; - -@interface MPNativeAdSource : NSObject - -@property (nonatomic, weak) id delegate; - -- (instancetype)initWithDelegate:(id)delegate; - -- (void)loadAdsWithAdUnitIdentifier:(NSString *)identifier rendererConfigurations:(NSArray *)rendererConfigurations andTargeting:(MPNativeAdRequestTargeting *)targeting; -- (void)deleteCacheForAdUnitIdentifier:(NSString *)identifier; -- (id)dequeueAdForAdUnitIdentifier:(NSString *)identifier; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdSource.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdSource.m deleted file mode 100644 index 2712cf8059..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdSource.m +++ /dev/null @@ -1,81 +0,0 @@ -// -// MPNativeAdSource.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPNativeAdSource.h" -#import "MPNativeAd.h" -#import "MPNativeAdRequestTargeting.h" -#import "MPNativeAdSourceQueue.h" -#import "MPConstants.h" - -static NSTimeInterval const kCacheTimeoutInterval = MOPUB_ADS_EXPIRATION_INTERVAL; - -@interface MPNativeAdSource () - -@property (nonatomic, strong) NSMutableDictionary *adQueueDictionary; - -@end - -@implementation MPNativeAdSource - -#pragma mark - Object Lifecycle - -- (instancetype)initWithDelegate:(id)delegate -{ - self = [super init]; - if (self) { - _adQueueDictionary = [[NSMutableDictionary alloc] init]; - _delegate = delegate; - } - - return self; -} - -- (void)dealloc -{ - for (NSString *queueKey in [_adQueueDictionary allKeys]) { - [self deleteCacheForAdUnitIdentifier:queueKey]; - } -} - -#pragma mark - Ad Source Interface - -- (void)loadAdsWithAdUnitIdentifier:(NSString *)identifier rendererConfigurations:(NSArray *)rendererConfigurations andTargeting:(MPNativeAdRequestTargeting *)targeting -{ - [self deleteCacheForAdUnitIdentifier:identifier]; - - MPNativeAdSourceQueue *adQueue = [[MPNativeAdSourceQueue alloc] initWithAdUnitIdentifier:identifier rendererConfigurations:rendererConfigurations andTargeting:targeting]; - adQueue.delegate = self; - [self.adQueueDictionary setObject:adQueue forKey:identifier]; - - [adQueue loadAds]; -} - -- (id)dequeueAdForAdUnitIdentifier:(NSString *)identifier -{ - MPNativeAdSourceQueue *adQueue = [self.adQueueDictionary objectForKey:identifier]; - MPNativeAd *nextAd = [adQueue dequeueAdWithMaxAge:kCacheTimeoutInterval]; - return nextAd; -} - -- (void)deleteCacheForAdUnitIdentifier:(NSString *)identifier -{ - MPNativeAdSourceQueue *sourceQueue = [self.adQueueDictionary objectForKey:identifier]; - sourceQueue.delegate = nil; - [sourceQueue cancelRequests]; - - [self.adQueueDictionary removeObjectForKey:identifier]; -} - -#pragma mark - MPNativeAdSourceQueueDelegate - -- (void)adSourceQueueAdIsAvailable:(MPNativeAdSourceQueue *)source -{ - [self.delegate adSourceDidFinishRequest:self]; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdSourceDelegate.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdSourceDelegate.h deleted file mode 100644 index 2f67fb99ee..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdSourceDelegate.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// MPNativeAdSourceDelegate.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@class MPNativeAdSource; - -@protocol MPNativeAdSourceDelegate - -- (void)adSourceDidFinishRequest:(MPNativeAdSource *)source; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAds.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAds.h deleted file mode 100644 index 3c69b2c83b..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAds.h +++ /dev/null @@ -1,40 +0,0 @@ -// -// MPNativeAds.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -/** - Umbrella header for Native Ads format - */ -#import "MPNativeAd.h" -#import "MPNativeAdAdapter.h" -#import "MPNativeAdConstants.h" -#import "MPNativeCustomEvent.h" -#import "MPNativeCustomEventDelegate.h" -#import "MPNativeAdError.h" -#import "MPNativeAdRendering.h" -#import "MPNativeAdRequest.h" -#import "MPNativeAdRequestTargeting.h" -#import "MPNativeView.h" -#import "MPNativeAdUtils.h" -#import "MPCollectionViewAdPlacer.h" -#import "MPCollectionViewAdPlacerDelegate.h" -#import "MPTableViewAdPlacer.h" -#import "MPTableViewAdPlacerDelegate.h" -#import "MPClientAdPositioning.h" -#import "MPServerAdPositioning.h" -#import "MPNativeAdDelegate.h" -#import "MPStaticNativeAdRendererSettings.h" -#import "MPNativeAdRendererConfiguration.h" -#import "MPNativeAdRendererSettings.h" -#import "MPNativeAdRenderer.h" -#import "MPStaticNativeAdRenderer.h" -#import "MPNativeAdRendererImageHandler.h" -#import "MOPUBNativeVideoAdRendererSettings.h" -#import "MOPUBNativeVideoAdRenderer.h" -#import "MPNativeAdRenderingImageLoader.h" -#import "MPStreamAdPlacer.h" -#import "MPStreamAdPlacerDelegate.h" diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeCustomEvent.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeCustomEvent.h deleted file mode 100644 index acbc22f99d..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeCustomEvent.h +++ /dev/null @@ -1,78 +0,0 @@ -// -// MPNativeCustomEvent.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPNativeCustomEventDelegate.h" - -/** - * The MoPub iOS SDK mediates third-party native ad networks using custom events. Custom events are - * responsible for instantiating and manipulating native ad objects in the third-party SDK and - * translating and communicating events from those objects back to the MoPub SDK by notifying a - * delegate. - * - * `MPNativeCustomEvent` is a base class for custom events that support native ads. By implementing - * subclasses of `MPNativeCustomEvent` you can enable the MoPub SDK to support a variety of - * third-party ad networks. - * - * Your implementation should create an `MPNativeAd` object using an appropriate `MPNativeAdAdapter` - * for your network. Your custom event should also call the appropriate - * `MPNativeCustomEventDelegate` methods. - * - * At runtime, the MoPub SDK will find and instantiate an `MPNativeCustomEvent` subclass as needed - * and invoke its `-requestAdWithCustomEventInfo:` method. - */ -@interface MPNativeCustomEvent : NSObject - -/** @name Requesting a Native Ad */ - -/** - * Called when the MoPub SDK requires a new native ad. - * - * When the MoPub SDK receives a response indicating it should load a custom event, it will send - * this message to your custom event class. Your implementation should load a native ad from a - * third-party ad network. - * - * @param info A dictionary containing additional custom data associated with a given custom event - * request. This data is configurable on the MoPub website, and may be used to pass dynamic - * information, such as publisher IDs. - * @param adMarkup An optional ad markup to use. - */ -- (void)requestAdWithCustomEventInfo:(NSDictionary *)info adMarkup:(NSString *)adMarkup; - -/** @name Caching Image Resources */ - -/** - * Downloads and pre-caches images. - * - * If your ad network does not provide built-in support for image caching, you may invoke this - * method in your custom event implementation to pre-cache image assets. If you do call this method, - * you should wait until the completion block is called before invoking the appropriate - * success or failure callbacks on the `MPNativeCustomEventDelegate`. - * - * @param imageURLs An array of `NSURL` objects representing image resource locations. - * @param completionBlock A block that will be called after all download operations are complete. - * If any image downloads do not complete successfully, the `errors` parameter will contain - * error information about the failures. - */ -- (void)precacheImagesWithURLs:(NSArray *)imageURLs completionBlock:(void (^)(NSArray *errors))completionBlock; - -/** @name Communicating with the MoPub SDK */ - -/** - * The `MPNativeCustomEventDelegate` receives messages concerning the status of loading a native ad. - * - * The `delegate` object defines several methods that you should call in order to inform MoPub - * of the progress of your custom event. - */ -@property (nonatomic, weak) id delegate; - -/** - * An optional dictionary containing extra local data. - */ -@property (nonatomic, copy) NSDictionary *localExtras; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeCustomEvent.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeCustomEvent.m deleted file mode 100644 index 528ada06bd..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeCustomEvent.m +++ /dev/null @@ -1,52 +0,0 @@ -// -// MPNativeCustomEvent.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPNativeCustomEvent.h" -#import "MPNativeAdError.h" -#import "MPImageDownloadQueue.h" -#import "MPLogging.h" - -@interface MPNativeCustomEvent () - -@property (nonatomic, strong) MPImageDownloadQueue *imageDownloadQueue; - -@end - -@implementation MPNativeCustomEvent - -- (id)init -{ - self = [super init]; - if (self) { - _imageDownloadQueue = [[MPImageDownloadQueue alloc] init]; - } - - return self; -} - -- (void)precacheImagesWithURLs:(NSArray *)imageURLs completionBlock:(void (^)(NSArray *errors))completionBlock -{ - if (imageURLs.count > 0) { - [_imageDownloadQueue addDownloadImageURLs:imageURLs completionBlock:^(NSDictionary *result, NSArray *errors) { - if (completionBlock) { - completionBlock(errors); - } - }]; - } else { - if (completionBlock) { - completionBlock(nil); - } - } -} - -- (void)requestAdWithCustomEventInfo:(NSDictionary *)info adMarkup:(NSString *)adMarkup -{ - /*override with custom network behavior*/ -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeCustomEventDelegate.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeCustomEventDelegate.h deleted file mode 100644 index 98b3740c38..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeCustomEventDelegate.h +++ /dev/null @@ -1,39 +0,0 @@ -// -// MPNativeCustomEventDelegate.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@class MPNativeAd; -@class MPNativeCustomEvent; - -/** - * Instances of your custom subclass of `MPNativeCustomEvent` will have an - * `MPNativeCustomEventDelegate` delegate object. You use this delegate to communicate progress - * (such as whether an ad has loaded successfully) back to the MoPub SDK. - */ -@protocol MPNativeCustomEventDelegate - -/** - * This method is called when the ad and all required ad assets are loaded. - * - * @param event You should pass `self` to allow the MoPub SDK to associate this event with the - * correct instance of your custom event. - * @param adObject An `MPNativeAd` object, representing the ad that was retrieved. - */ -- (void)nativeCustomEvent:(MPNativeCustomEvent *)event didLoadAd:(MPNativeAd *)adObject; - -/** - * This method is called when the ad or any required ad assets fail to load. - * - * @param event You should pass `self` to allow the MoPub SDK to associate this event with the - * correct instance of your custom event. - * @param error (*optional*) You may pass an error describing the failure. - */ -- (void)nativeCustomEvent:(MPNativeCustomEvent *)event didFailToLoadAdWithError:(NSError *)error; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPServerAdPositioning.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPServerAdPositioning.h deleted file mode 100644 index da3ebd9fe9..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPServerAdPositioning.h +++ /dev/null @@ -1,39 +0,0 @@ -// -// MPServerAdPositioning.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPAdPositioning.h" - -/** - * The `MPServerAdPositioning` class is a model that allows you to control the positions where - * native advertisements should appear within a stream. A server positioning object works in - * conjunction with an ad placer, telling the ad placer that it should retrieve positioning - * information from the MoPub ad server. - * - * Unlike `MPClientAdPositioning`, which represents hard-coded positioning information, a server - * positioning object offers you the benefit of modifying your ad positions via the MoPub website, - * without rebuilding your application. - */ - -@interface MPServerAdPositioning : MPAdPositioning - -/** @name Creating a Server Positioning Object */ - -/** - * Creates and returns a server positioning object. - * - * When an ad placer is set to use server positioning, it will ask the MoPub ad server for the - * positions where ads should be inserted into a given stream. These positioning values are - * configurable on the MoPub website. - * - * @return The newly created positioning object. - * - * @see MPClientAdPositioning - */ -+ (instancetype)positioning; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPServerAdPositioning.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPServerAdPositioning.m deleted file mode 100644 index 9a4329c8e3..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPServerAdPositioning.m +++ /dev/null @@ -1,18 +0,0 @@ -// -// MPServerAdPositioning.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPServerAdPositioning.h" - -@implementation MPServerAdPositioning - -+ (instancetype)positioning -{ - return [[[self class] alloc] init]; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPStaticNativeAdRenderer.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPStaticNativeAdRenderer.h deleted file mode 100644 index d03f668ec6..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPStaticNativeAdRenderer.h +++ /dev/null @@ -1,24 +0,0 @@ -// -// MPStaticNativeAdRenderer.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPBaseNativeAdRenderer.h" -#import "MPNativeAdRenderer.h" - -@class MPNativeAdRendererConfiguration; -@class MPStaticNativeAdRendererSettings; - -@interface MPStaticNativeAdRenderer : MPBaseNativeAdRenderer - -@property (nonatomic, readonly) MPNativeViewSizeHandler viewSizeHandler; - -+ (MPNativeAdRendererConfiguration *)rendererConfigurationWithRendererSettings:(id)rendererSettings; - -+ (MPNativeAdRendererConfiguration *)rendererConfigurationWithRendererSettings:(id)rendererSettings - additionalSupportedCustomEvents:(NSArray *)additionalSupportedCustomEvents; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPStaticNativeAdRenderer.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPStaticNativeAdRenderer.m deleted file mode 100644 index bea388a6d1..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPStaticNativeAdRenderer.m +++ /dev/null @@ -1,256 +0,0 @@ -// -// MPStaticNativeAdRenderer.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPAdDestinationDisplayAgent.h" -#import "MPBaseNativeAdRenderer+Internal.h" -#import "MPHTTPNetworkSession.h" -#import "MPLogging.h" -#import "MPMemoryCache.h" -#import "MPNativeAdAdapter.h" -#import "MPNativeAdConstants.h" -#import "MPNativeAdError.h" -#import "MPNativeAdRenderer.h" -#import "MPNativeAdRendererConfiguration.h" -#import "MPNativeAdRendererConstants.h" -#import "MPNativeAdRendererImageHandler.h" -#import "MPNativeAdRenderingImageLoader.h" -#import "MPNativeCache.h" -#import "MPNativeView.h" -#import "MPStaticNativeAdRenderer.h" -#import "MPStaticNativeAdRendererSettings.h" -#import "MPURLRequest.h" - -/** - * -1.0 is somewhat significant because this also happens to be what `UITableViewAutomaticDimension` - * is so it makes for easier migration to use `UITableViewAutomaticDimension` on iOS 8+ later but is not - * currently passed back in `-tableView:shouldIndentWhileEditingRowAtIndexPath:` directly so it can - * be any abitrary value. - */ -const CGFloat MPNativeViewDynamicDimension = -1.0; - -@interface MPStaticNativeAdRenderer () - -@property (nonatomic) id adapter; -@property (nonatomic) BOOL adViewInViewHierarchy; -@property (nonatomic) MPNativeAdRendererImageHandler *rendererImageHandler; - -@end - -@implementation MPStaticNativeAdRenderer - -+ (MPNativeAdRendererConfiguration *)rendererConfigurationWithRendererSettings:(id)rendererSettings -{ - return [MPStaticNativeAdRenderer rendererConfigurationWithRendererSettings:rendererSettings additionalSupportedCustomEvents:@[]]; -} - -+ (MPNativeAdRendererConfiguration *)rendererConfigurationWithRendererSettings:(id)rendererSettings - additionalSupportedCustomEvents:(NSArray *)additionalSupportedCustomEvents -{ - MPNativeAdRendererConfiguration *config = [[MPNativeAdRendererConfiguration alloc] init]; - config.rendererClass = [self class]; - config.rendererSettings = rendererSettings; - config.supportedCustomEvents = [@[@"MPMoPubNativeCustomEvent"] arrayByAddingObjectsFromArray:additionalSupportedCustomEvents]; - - return config; -} - -- (instancetype)initWithRendererSettings:(id)rendererSettings -{ - if (self = [super init]) { - MPStaticNativeAdRendererSettings *settings = (MPStaticNativeAdRendererSettings *)rendererSettings; - self.renderingViewClass = settings.renderingViewClass; - _viewSizeHandler = [settings.viewSizeHandler copy]; - _rendererImageHandler = [MPNativeAdRendererImageHandler new]; - _rendererImageHandler.delegate = self; - } - - return self; -} - -- (UIView *)retrieveViewWithAdapter:(id)adapter error:(NSError **)error -{ - if (!adapter) { - if (error) { - *error = MPNativeAdNSErrorForRenderValueTypeError(); - } - - return nil; - } - - self.adapter = adapter; - - if ([self.renderingViewClass respondsToSelector:@selector(nibForAd)]) { - self.adView = (UIView *)[[[self.renderingViewClass nibForAd] instantiateWithOwner:nil options:nil] firstObject]; - } else { - self.adView = [[self.renderingViewClass alloc] init]; - } - - self.adView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; - - // We only load text here. We delay loading of images until the view is added to the view hierarchy - // so we don't unnecessarily load images from the cache if the user is scrolling fast. So we will - // just store the image URLs for now. - if ([self.adView respondsToSelector:@selector(nativeMainTextLabel)]) { - self.adView.nativeMainTextLabel.text = adapter.properties[kAdTextKey]; - } - - if ([self.adView respondsToSelector:@selector(nativeTitleTextLabel)]) { - self.adView.nativeTitleTextLabel.text = adapter.properties[kAdTitleKey]; - } - - if ([self.adView respondsToSelector:@selector(nativeCallToActionTextLabel)]) { - self.adView.nativeCallToActionTextLabel.text = adapter.properties[kAdCTATextKey]; - } - - [self renderSponsoredByTextWithAdapter:adapter]; - - if ([self.adView respondsToSelector:@selector(nativePrivacyInformationIconImageView)]) { - UIImage *privacyIconImage = adapter.properties[kAdPrivacyIconUIImageKey]; - NSString *privacyIconImageUrl = adapter.properties[kAdPrivacyIconImageUrlKey]; - // A cached privacy information icon image exists; it should be used. - if (privacyIconImage != nil) { - UIImageView *imageView = self.adView.nativePrivacyInformationIconImageView; - imageView.hidden = NO; - imageView.image = privacyIconImage; - - // Attach a gesture recognizer to handle loading the privacy icon URL. - UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onPrivacyIconTapped)]; - imageView.userInteractionEnabled = YES; - [imageView addGestureRecognizer:tapRecognizer]; - } - // No cached privacy information icon image was cached, but there is a URL for the - // icon. Go fetch the icon and populate the UIImageView when complete. - else if (privacyIconImageUrl != nil) { - NSURL *iconUrl = [NSURL URLWithString:privacyIconImageUrl]; - MPURLRequest *imageRequest = [MPURLRequest requestWithURL:iconUrl]; - - __weak __typeof__(self) weakSelf = self; - [MPHTTPNetworkSession startTaskWithHttpRequest:imageRequest responseHandler:^(NSData * _Nonnull data, NSHTTPURLResponse * _Nonnull response) { - // Cache the successfully retrieved icon image - [MPMemoryCache.sharedInstance setData:data forKey:privacyIconImageUrl]; - - // Populate the image view - __typeof__(self) strongSelf = weakSelf; - UIImageView *imageView = strongSelf.adView.nativePrivacyInformationIconImageView; - imageView.hidden = NO; - imageView.image = [UIImage imageWithData:data]; - - // Attach a gesture recognizer to handle loading the privacy icon URL. - UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:strongSelf action:@selector(onPrivacyIconTapped)]; - imageView.userInteractionEnabled = YES; - [imageView addGestureRecognizer:tapRecognizer]; - } errorHandler:^(NSError * _Nonnull error) { - MPLogInfo(@"Failed to retrieve privacy icon from %@", privacyIconImageUrl); - }]; - } - // The ad network may provide its own view for its privacy information icon. - // We assume the ad handles the tap on the icon as well. - else if ([adapter respondsToSelector:@selector(privacyInformationIconView)]) { - UIView *privacyIconAdView = [adapter privacyInformationIconView]; - privacyIconAdView.frame = self.adView.nativePrivacyInformationIconImageView.bounds; - privacyIconAdView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; - self.adView.nativePrivacyInformationIconImageView.userInteractionEnabled = YES; - [self.adView.nativePrivacyInformationIconImageView addSubview:privacyIconAdView]; - self.adView.nativePrivacyInformationIconImageView.hidden = NO; - } - // No privacy icon - else { - self.adView.nativePrivacyInformationIconImageView.userInteractionEnabled = NO; - self.adView.nativePrivacyInformationIconImageView.hidden = YES; - } - } - - if ([self hasIconView]) { - UIView *iconView = [self.adapter iconMediaView]; - UIView *iconImageView = [self.adView nativeIconImageView]; - - iconView.frame = iconImageView.bounds; - iconView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; - iconImageView.userInteractionEnabled = YES; - - [iconImageView addSubview:iconView]; - } - - if ([self shouldLoadMediaView]) { - UIView *mediaView = [self.adapter mainMediaView]; - UIView *mainImageView = [self.adView nativeMainImageView]; - - mediaView.frame = mainImageView.bounds; - mediaView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; - mainImageView.userInteractionEnabled = YES; - - [mainImageView addSubview:mediaView]; - } - - // See if the ad contains a star rating and notify the view if it does. - if ([self.adView respondsToSelector:@selector(layoutStarRating:)]) { - NSNumber *starRatingNum = adapter.properties[kAdStarRatingKey]; - - if ([starRatingNum isKindOfClass:[NSNumber class]] && starRatingNum.floatValue >= kStarRatingMinValue && starRatingNum.floatValue <= kStarRatingMaxValue) { - [self.adView layoutStarRating:starRatingNum]; - } - } - - return self.adView; -} - -- (BOOL)shouldLoadMediaView -{ - return [self.adapter respondsToSelector:@selector(mainMediaView)] - && [self.adapter mainMediaView] - && [self.adView respondsToSelector:@selector(nativeMainImageView)]; -} - -- (BOOL)hasIconView -{ - return [self.adapter respondsToSelector:@selector(iconMediaView)] - && [self.adapter iconMediaView] - && [self.adView respondsToSelector:@selector(nativeIconImageView)]; -} - -- (void)onPrivacyIconTapped -{ - if ([self.adapter respondsToSelector:@selector(displayContentForDAAIconTap)]) { - [self.adapter displayContentForDAAIconTap]; - } -} - -- (void)adViewWillMoveToSuperview:(UIView *)superview -{ - self.adViewInViewHierarchy = (superview != nil); - - if (superview) { - // Only handle the loading of the icon image if the adapter doesn't already have a view for it. - if (![self hasIconView] && self.adapter.properties[kAdIconImageKey] && [self.adView respondsToSelector:@selector(nativeIconImageView)]) { - [self.rendererImageHandler loadImageForURL:[NSURL URLWithString:self.adapter.properties[kAdIconImageKey]] intoImageView:self.adView.nativeIconImageView]; - } - - // Only handle the loading of the main image if the adapter doesn't already have a view for it. - if (!([self.adapter respondsToSelector:@selector(mainMediaView)] && [self.adapter mainMediaView])) { - if (self.adapter.properties[kAdMainImageKey] && [self.adView respondsToSelector:@selector(nativeMainImageView)]) { - [self.rendererImageHandler loadImageForURL:[NSURL URLWithString:self.adapter.properties[kAdMainImageKey]] intoImageView:self.adView.nativeMainImageView]; - } - } - - // Layout custom assets here as the custom assets may contain images that need to be loaded. - if ([self.adView respondsToSelector:@selector(layoutCustomAssetsWithProperties:imageLoader:)]) { - // Create a simplified image loader for the ad view to use. - MPNativeAdRenderingImageLoader *imageLoader = [[MPNativeAdRenderingImageLoader alloc] initWithImageHandler:self.rendererImageHandler]; - [self.adView layoutCustomAssetsWithProperties:self.adapter.properties imageLoader:imageLoader]; - } - } -} - -#pragma mark - MPNativeAdRendererImageHandlerDelegate - -- (BOOL)nativeAdViewInViewHierarchy -{ - return self.adViewInViewHierarchy; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPStaticNativeAdRendererSettings.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPStaticNativeAdRendererSettings.h deleted file mode 100644 index 807911e373..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPStaticNativeAdRendererSettings.h +++ /dev/null @@ -1,31 +0,0 @@ -// -// MPStaticNativeAdRendererSettings.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPNativeAdRendererSettings.h" -#import "MPNativeAdRenderer.h" - -@interface MPStaticNativeAdRendererSettings : NSObject - -/** - * A rendering class that must be a UIView that implements the MPNativeAdRendering protocol. - * The ad will be rendered to a view of this class type. - */ -@property (nonatomic, assign) Class renderingViewClass; - -/** - * A block that returns the size of the view given a maximum width. This needs to be set when - * used in conjunction with ad placer classes so the ad placers can correctly size the cells - * that contain the ads. - * - * viewSizeHandler is not used for manual native ad integration. You must set the - * frame of your manually integrated native ad view. - */ -@property (nonatomic, readwrite, copy) MPNativeViewSizeHandler viewSizeHandler; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPStaticNativeAdRendererSettings.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPStaticNativeAdRendererSettings.m deleted file mode 100644 index df9e6fb4ab..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPStaticNativeAdRendererSettings.m +++ /dev/null @@ -1,13 +0,0 @@ -// -// MPStaticNativeAdRendererSettings.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPStaticNativeAdRendererSettings.h" - -@implementation MPStaticNativeAdRendererSettings - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPStreamAdPlacementData.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPStreamAdPlacementData.h deleted file mode 100644 index 54ae7900a0..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPStreamAdPlacementData.h +++ /dev/null @@ -1,36 +0,0 @@ -// -// MPStreamAdPlacementData.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import - -@class MPAdPositioning; -@class MPNativeAdData; - -@interface MPStreamAdPlacementData : NSObject - -- (instancetype)initWithPositioning:(MPAdPositioning *)positioning; -- (void)insertAdData:(MPNativeAdData *)data atIndexPath:(NSIndexPath *)adjustedIndexPath; -- (NSArray *)adjustedAdIndexPathsInAdjustedRange:(NSRange)range inSection:(NSInteger)section; -- (void)clearAdsInAdjustedRange:(NSRange)range inSection:(NSInteger)section; -- (NSIndexPath *)nextAdInsertionIndexPathForAdjustedIndexPath:(NSIndexPath *)adjustedIndexPath; -- (NSIndexPath *)previousAdInsertionIndexPathForAdjustedIndexPath:(NSIndexPath *)adjustedIndexPath; -- (BOOL)isAdAtAdjustedIndexPath:(NSIndexPath *)adjustedIndexPath; -- (NSArray *)adjustedIndexPathsWithAdsInSection:(NSUInteger)section; -- (MPNativeAdData *)adDataAtAdjustedIndexPath:(NSIndexPath *)adjustedIndexPath; -- (NSUInteger)adjustedNumberOfItems:(NSUInteger)numberOfItems inSection:(NSUInteger)section; -- (NSIndexPath *)adjustedIndexPathForOriginalIndexPath:(NSIndexPath *)indexPath; -- (NSIndexPath *)originalIndexPathForAdjustedIndexPath:(NSIndexPath *)indexPath; -- (void)insertSections:(NSIndexSet *)sections; -- (void)deleteSections:(NSIndexSet *)sections; -- (void)moveSection:(NSInteger)section toSection:(NSInteger)newSection; -- (void)insertItemsAtIndexPaths:(NSArray *)originalIndexPaths; -- (void)deleteItemsAtIndexPaths:(NSArray *)originalIndexPaths; -- (void)moveItemAtIndexPath:(NSIndexPath *)originalIndexPath toIndexPath:(NSIndexPath *)newIndexPath; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPStreamAdPlacementData.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPStreamAdPlacementData.m deleted file mode 100644 index 52d55f78a2..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPStreamAdPlacementData.m +++ /dev/null @@ -1,515 +0,0 @@ -// -// MPStreamAdPlacementData.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPStreamAdPlacementData.h" -#import "MPAdPositioning.h" -#import "MPLogging.h" - -static const NSUInteger kMaximumNumberOfAdsPerStream = 255; - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MPStreamAdPlacementData () - -@property (nonatomic, strong) NSMutableDictionary *desiredOriginalPositions; -@property (nonatomic, strong) NSMutableDictionary *desiredInsertionPositions; -@property (nonatomic, strong) NSMutableDictionary *originalAdIndexPaths; -@property (nonatomic, strong) NSMutableDictionary *adjustedAdIndexPaths; -@property (nonatomic, strong) NSMutableDictionary *adDataObjects; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MPStreamAdPlacementData - -- (id)initWithPositioning:(MPAdPositioning *)positioning -{ - self = [super init]; - if (self) { - [self initializeDesiredPositionsFromPositioning:positioning]; - self.originalAdIndexPaths = [NSMutableDictionary dictionary]; - self.adjustedAdIndexPaths = [NSMutableDictionary dictionary]; - self.adDataObjects = [NSMutableDictionary dictionary]; - } - return self; -} - - -- (NSMutableArray *)positioningArrayForSection:(NSUInteger)section inDictionary:(NSMutableDictionary *)dictionary -{ - NSMutableArray *array = [dictionary objectForKey:[NSNumber numberWithUnsignedInteger:section]]; - if (array) { - return array; - } else { - array = [NSMutableArray array]; - [dictionary setObject:array forKey:[NSNumber numberWithUnsignedInteger:section]]; - return array; - } -} - -- (void)initializeDesiredPositionsFromPositioning:(MPAdPositioning *)positioning -{ - NSArray *fixedPositions = [[positioning.fixedPositions array] sortedArrayUsingSelector:@selector(compare:)]; - - self.desiredOriginalPositions = [NSMutableDictionary dictionary]; - self.desiredInsertionPositions = [NSMutableDictionary dictionary]; - - [fixedPositions enumerateObjectsUsingBlock:^(NSIndexPath *position, NSUInteger idx, BOOL *stop) { - [self insertDesiredPositionsForIndexPath:position]; - }]; - - //Current behavior only inserts repeating ads following the last fixed position in the table, and they will only be inserted - //within the same section as that position. If no fixed positions exist, repeating ads will be placed only in the first section. - if (positioning.repeatingInterval > 1) { - NSInteger lastInsertionSection = [[fixedPositions lastObject] section]; - - NSMutableArray *desiredOriginalPositions = [self positioningArrayForSection:lastInsertionSection inDictionary:self.desiredOriginalPositions]; - - NSUInteger numberOfFixedAds = [desiredOriginalPositions count]; - NSUInteger numberOfRepeatingAds = kMaximumNumberOfAdsPerStream - numberOfFixedAds; - - NSInteger startingIndex = [fixedPositions lastObject] ? [(NSIndexPath *)[fixedPositions lastObject] row] : -1; - for (NSUInteger repeatingAdIndex = 1; repeatingAdIndex <= numberOfRepeatingAds; repeatingAdIndex++) { - NSInteger adIndexItem = startingIndex + positioning.repeatingInterval * repeatingAdIndex; - [self insertDesiredPositionsForIndexPath:[NSIndexPath indexPathForRow:adIndexItem inSection:lastInsertionSection]]; - } - } -} - -//assumes items are inserted sequentially, beginning to end -- (void)insertDesiredPositionsForIndexPath:(NSIndexPath *)indexPath -{ - NSMutableArray *desiredOriginalPositions = [self positioningArrayForSection:indexPath.section inDictionary:self.desiredOriginalPositions]; - NSIndexPath *insertionIndexPath = [NSIndexPath indexPathForRow:indexPath.row - [desiredOriginalPositions count] inSection:indexPath.section]; - [desiredOriginalPositions addObject:[insertionIndexPath copy]]; - - NSMutableArray *desiredInsertionPositions = [self positioningArrayForSection:indexPath.section inDictionary:self.desiredInsertionPositions]; - [desiredInsertionPositions addObject:[insertionIndexPath copy]]; -} - -- (NSUInteger)adjustedNumberOfItems:(NSUInteger)numberOfItems inSection:(NSUInteger)section -{ - if (numberOfItems <= 0) return 0; - - NSIndexPath *pathOfLastItem = [NSIndexPath indexPathForRow:numberOfItems - 1 inSection:section]; - NSMutableArray *originalAdIndexPaths = [self positioningArrayForSection:section inDictionary:self.originalAdIndexPaths]; - NSUInteger numberOfAdsBeforeLastItem = [self indexOfIndexPath:pathOfLastItem inSortedArray:originalAdIndexPaths options:NSBinarySearchingInsertionIndex | NSBinarySearchingLastEqual]; - - return numberOfItems + numberOfAdsBeforeLastItem; -} - -- (NSIndexPath *)adjustedIndexPathForOriginalIndexPath:(NSIndexPath *)indexPath -{ - if (!indexPath || indexPath.row == NSNotFound) { - return indexPath; - } - - NSMutableArray *originalAdIndexPaths = [self positioningArrayForSection:indexPath.section inDictionary:self.originalAdIndexPaths]; - NSUInteger numberOfAdsBeforeIndexPath = [self indexOfIndexPath:indexPath inSortedArray:originalAdIndexPaths options:NSBinarySearchingInsertionIndex | NSBinarySearchingLastEqual]; - - return [NSIndexPath indexPathForRow:indexPath.row + numberOfAdsBeforeIndexPath inSection:indexPath.section]; -} - -- (NSIndexPath *)originalIndexPathForAdjustedIndexPath:(NSIndexPath *)indexPath -{ - if (!indexPath || indexPath.row == NSNotFound) { - return indexPath; - } else if ([self isAdAtAdjustedIndexPath:indexPath]) { - return nil; - } else { - NSMutableArray *adjustedAdIndexPaths = [self positioningArrayForSection:indexPath.section inDictionary:self.adjustedAdIndexPaths]; - NSUInteger numberOfAdsBeforeIndexPath = [self indexOfIndexPath:indexPath inSortedArray:adjustedAdIndexPaths options:NSBinarySearchingInsertionIndex]; - return [NSIndexPath indexPathForRow:indexPath.row - numberOfAdsBeforeIndexPath inSection:indexPath.section]; - } -} - -- (NSIndexPath *)nextAdInsertionIndexPathForAdjustedIndexPath:(NSIndexPath *)adjustedIndexPath -{ - if (adjustedIndexPath.section > [self largestSectionIndexContainingAds]) { - return nil; - } - - NSMutableArray *desiredInsertionPositions = [self.desiredInsertionPositions objectForKey:[NSNumber numberWithUnsignedInteger:adjustedIndexPath.section]]; - - NSUInteger index = [self indexOfIndexPath:adjustedIndexPath inSortedArray:desiredInsertionPositions options:NSBinarySearchingInsertionIndex | NSBinarySearchingFirstEqual]; - - if (desiredInsertionPositions && (index < [desiredInsertionPositions count])) { - return [desiredInsertionPositions objectAtIndex:index]; - } else { - // Go to the next section. - return [self nextAdInsertionIndexPathForAdjustedIndexPath:[NSIndexPath indexPathForRow:0 inSection:adjustedIndexPath.section+1]]; - } -} - -- (NSIndexPath *)previousAdInsertionIndexPathForAdjustedIndexPath:(NSIndexPath *)adjustedIndexPath -{ - NSMutableArray *desiredInsertionPositions = [self positioningArrayForSection:adjustedIndexPath.section inDictionary:self.desiredInsertionPositions]; - NSUInteger index = [self indexOfIndexPath:adjustedIndexPath inSortedArray:desiredInsertionPositions options:NSBinarySearchingInsertionIndex | NSBinarySearchingFirstEqual]; - - if (index > 0) { - return desiredInsertionPositions[index - 1]; - } else { - return nil; - } -} - -- (void)insertAdData:(MPNativeAdData *)data atIndexPath:(NSIndexPath *)adjustedIndexPath -{ - NSMutableArray *desiredInsertionPositions = [self positioningArrayForSection:adjustedIndexPath.section inDictionary:self.desiredInsertionPositions]; - NSMutableArray *desiredOriginalPositions = [self positioningArrayForSection:adjustedIndexPath.section inDictionary:self.desiredOriginalPositions]; - NSMutableArray *adjustedAdIndexPaths = [self positioningArrayForSection:adjustedIndexPath.section inDictionary:self.adjustedAdIndexPaths]; - NSMutableArray *originalAdIndexPaths = [self positioningArrayForSection:adjustedIndexPath.section inDictionary:self.originalAdIndexPaths]; - NSMutableArray *adDataObjects = [self positioningArrayForSection:adjustedIndexPath.section inDictionary:self.adDataObjects]; - - NSUInteger indexInDesiredArrays = [self indexOfIndexPath:adjustedIndexPath inSortedArray:desiredInsertionPositions options:NSBinarySearchingFirstEqual]; - - if (indexInDesiredArrays == NSNotFound) { - MPLogInfo(@"Attempted to insert an ad at position %@, which is not in the desired array.", adjustedIndexPath); - return; - } - - NSIndexPath *originalPosition = desiredOriginalPositions[indexInDesiredArrays]; - NSIndexPath *insertionPosition = desiredInsertionPositions[indexInDesiredArrays]; - - NSUInteger insertionIndex = [self indexOfIndexPath:insertionPosition inSortedArray:adjustedAdIndexPaths options:NSBinarySearchingInsertionIndex | NSBinarySearchingFirstEqual]; - - [originalAdIndexPaths insertObject:originalPosition atIndex:insertionIndex]; - [adjustedAdIndexPaths insertObject:insertionPosition atIndex:insertionIndex]; - [adDataObjects insertObject:data atIndex:insertionIndex]; - - [desiredOriginalPositions removeObjectAtIndex:indexInDesiredArrays]; - [desiredInsertionPositions removeObjectAtIndex:indexInDesiredArrays]; - - for (NSUInteger i = insertionIndex + 1; i < [adjustedAdIndexPaths count]; i++) { - NSIndexPath *newIndexPath = adjustedAdIndexPaths[i]; - adjustedAdIndexPaths[i] = [NSIndexPath indexPathForRow:newIndexPath.row + 1 inSection:newIndexPath.section]; - } - - for (NSUInteger j = indexInDesiredArrays; j < [desiredInsertionPositions count]; j++) { - NSIndexPath *newInsertionPosition = desiredInsertionPositions[j]; - desiredInsertionPositions[j] = [NSIndexPath indexPathForRow:newInsertionPosition.row + 1 inSection:newInsertionPosition.section]; - } -} - -- (NSArray *)adjustedAdIndexPathsInAdjustedRange:(NSRange)range inSection:(NSInteger)section -{ - NSMutableArray *adjustedIndexPaths = [self positioningArrayForSection:section inDictionary:self.adjustedAdIndexPaths]; - - NSIndexSet *indexesOfObjectsInRange = [adjustedIndexPaths indexesOfObjectsPassingTest:^BOOL(NSIndexPath *adjustedIndexPath, NSUInteger idx, BOOL *stop) { - return NSLocationInRange(adjustedIndexPath.row, range); - }]; - - return [adjustedIndexPaths objectsAtIndexes:indexesOfObjectsInRange]; -} - -- (void)clearAdsInAdjustedRange:(NSRange)range inSection:(NSInteger)section -{ - NSMutableArray *adjustedAdIndexPaths = [self positioningArrayForSection:section inDictionary:self.adjustedAdIndexPaths]; - NSMutableArray *originalAdIndexPaths = [self positioningArrayForSection:section inDictionary:self.originalAdIndexPaths]; - NSMutableArray *adDataObjects = [self positioningArrayForSection:section inDictionary:self.adDataObjects]; - NSMutableArray *desiredInsertionPositions = [self positioningArrayForSection:section inDictionary:self.desiredInsertionPositions]; - NSMutableArray *desiredOriginalPositions = [self positioningArrayForSection:section inDictionary:self.desiredOriginalPositions]; - - NSIndexSet *indexesOfObjectsToRemove = [adjustedAdIndexPaths indexesOfObjectsPassingTest:^BOOL(NSIndexPath *adjustedIndexPath, NSUInteger idx, BOOL *stop) { - return NSLocationInRange(adjustedIndexPath.row, range); - }]; - - if ([indexesOfObjectsToRemove count]) { - [indexesOfObjectsToRemove enumerateIndexesWithOptions:NSEnumerationReverse usingBlock:^(NSUInteger idx, BOOL *stop) { - NSIndexPath *adjustedIndexPathToRemove = adjustedAdIndexPaths[idx]; - NSIndexPath *originalIndexPathToRemove = originalAdIndexPaths[idx]; - NSUInteger insertionIndex = [self indexOfIndexPath:originalIndexPathToRemove inSortedArray:desiredOriginalPositions options:NSBinarySearchingInsertionIndex | NSBinarySearchingFirstEqual]; - for (NSInteger i = insertionIndex; i < [desiredInsertionPositions count]; i++) { - NSIndexPath *nextIndexPath = desiredInsertionPositions[i]; - desiredInsertionPositions[i] = [NSIndexPath indexPathForRow:nextIndexPath.row - 1 inSection:nextIndexPath.section]; - } - [desiredOriginalPositions insertObject:originalIndexPathToRemove atIndex:insertionIndex]; - [desiredInsertionPositions insertObject:adjustedIndexPathToRemove atIndex:insertionIndex]; - - }]; - - [adjustedAdIndexPaths removeObjectsAtIndexes:indexesOfObjectsToRemove]; - [originalAdIndexPaths removeObjectsAtIndexes:indexesOfObjectsToRemove]; - [adDataObjects removeObjectsAtIndexes:indexesOfObjectsToRemove]; - } -} - -- (BOOL)isAdAtAdjustedIndexPath:(NSIndexPath *)adjustedIndexPath -{ - NSMutableArray *adjustedAdIndexPaths = [self positioningArrayForSection:adjustedIndexPath.section inDictionary:self.adjustedAdIndexPaths]; - NSUInteger indexOfIndexPath = [self indexOfIndexPath:adjustedIndexPath inSortedArray:adjustedAdIndexPaths options:NSBinarySearchingFirstEqual]; - - return indexOfIndexPath != NSNotFound; -} - -- (NSArray *)adjustedIndexPathsWithAdsInSection:(NSUInteger)section -{ - return [self positioningArrayForSection:section inDictionary:self.adjustedAdIndexPaths]; -} - -- (MPNativeAdData *)adDataAtAdjustedIndexPath:(NSIndexPath *)adjustedIndexPath -{ - NSMutableArray *adjustedAdIndexPaths = [self positioningArrayForSection:adjustedIndexPath.section inDictionary:self.adjustedAdIndexPaths]; - NSMutableArray *adDataObjects = [self positioningArrayForSection:adjustedIndexPath.section inDictionary:self.adDataObjects]; - - NSUInteger indexOfIndexPath = [self indexOfIndexPath:adjustedIndexPath inSortedArray:adjustedAdIndexPaths options:NSBinarySearchingFirstEqual]; - - if (indexOfIndexPath != NSNotFound) { - return adDataObjects[indexOfIndexPath]; - } else { - return nil; - } -} - -- (void)insertSections:(NSIndexSet *)sections -{ - [sections enumerateIndexesUsingBlock:^(NSUInteger insertionSection, BOOL *stop) { - // Explicitly casting indices to NSInteger because we're counting backwards. - NSInteger maxSection = [self largestSectionIndexContainingAds]; - NSInteger signedInsertionSection = insertionSection; - - // We need to shift all the data above the new section up by 1. - for (NSInteger i = maxSection; i >= signedInsertionSection; --i) { - if (self.desiredInsertionPositions[@(i)]) { - [self moveAllPositioningArraysInDictionariesAtSection:i toSection:i+1]; - } - } - }]; -} - -- (void)deleteSections:(NSIndexSet *)sections -{ - [sections enumerateIndexesWithOptions:NSEnumerationReverse usingBlock:^(NSUInteger deletionSection, BOOL *stop) { - NSUInteger maxSection = [self largestSectionIndexContainingAds]; - - [self clearPositioningArraysInDictionariesAtSection:deletionSection]; - - // We need to shift all the data above the deletionSection down by 1. - for (NSUInteger i = deletionSection; i < maxSection; ++i) { - if (self.desiredInsertionPositions[@(i+1)]) { - [self moveAllPositioningArraysInDictionariesAtSection:i+1 toSection:i]; - } - } - }]; -} - -- (void)moveSection:(NSInteger)section toSection:(NSInteger)newSection -{ - // Store the data at the section we're moving and retain it so it doesn't get deleted. - NSMutableArray *desiredInsertionPositions = [self positioningArrayForSection:section inDictionary:self.desiredInsertionPositions]; - NSMutableArray *desiredOriginalPositions = [self positioningArrayForSection:section inDictionary:self.desiredOriginalPositions]; - NSMutableArray *adjustedAdIndexPaths = [self positioningArrayForSection:section inDictionary:self.adjustedAdIndexPaths]; - NSMutableArray *originalAdIndexPaths = [self positioningArrayForSection:section inDictionary:self.originalAdIndexPaths]; - NSMutableArray *adDataObjects = [self positioningArrayForSection:section inDictionary:self.adDataObjects]; - - // Delete it from our dictionaries. - [self deleteSections:[NSIndexSet indexSetWithIndex:section]]; - - // Now insert an empty section at the new spot. - [self insertSections:[NSIndexSet indexSetWithIndex:newSection]]; - - // Fill in its data. - self.desiredInsertionPositions[@(newSection)] = desiredInsertionPositions; - self.desiredOriginalPositions[@(newSection)] = desiredOriginalPositions; - self.adjustedAdIndexPaths[@(newSection)] = adjustedAdIndexPaths; - self.originalAdIndexPaths[@(newSection)] = originalAdIndexPaths; - self.adDataObjects[@(newSection)] = adDataObjects; - - [self updateAllSectionsForPositioningArraysAtSection:newSection]; -} - -- (void)insertItemsAtIndexPaths:(NSArray *)originalIndexPaths -{ - originalIndexPaths = [originalIndexPaths sortedArrayUsingSelector:@selector(compare:)]; - - [originalIndexPaths enumerateObjectsUsingBlock:^(NSIndexPath *originalIndexPath, NSUInteger idx, BOOL *stop) { - NSMutableArray *desiredOriginalPositions = [self positioningArrayForSection:originalIndexPath.section inDictionary:self.desiredOriginalPositions]; - NSMutableArray *originalAdIndexPaths = [self positioningArrayForSection:originalIndexPath.section inDictionary:self.originalAdIndexPaths]; - - NSUInteger insertionIndex = [self indexOfIndexPath:originalIndexPath inSortedArray:desiredOriginalPositions options:NSBinarySearchingInsertionIndex | NSBinarySearchingFirstEqual]; - for (NSUInteger i = insertionIndex; i < [desiredOriginalPositions count]; i++) { - [self incrementDesiredIndexPathsAtIndex:i inSection:originalIndexPath.section]; - } - - NSUInteger originalInsertionIndex = [self indexOfIndexPath:originalIndexPath inSortedArray:originalAdIndexPaths options:NSBinarySearchingInsertionIndex | NSBinarySearchingFirstEqual]; - for (NSUInteger i = originalInsertionIndex; i < [originalAdIndexPaths count]; i++) { - [self incrementPlacedIndexPathsAtIndex:i inSection:originalIndexPath.section]; - } - }]; -} - -- (void)deleteItemsAtIndexPaths:(NSArray *)originalIndexPaths -{ - originalIndexPaths = [originalIndexPaths sortedArrayUsingSelector:@selector(compare:)]; - - __block NSUInteger currentNumberOfAdsInSection = 0; - __block NSInteger lastSection = [[originalIndexPaths firstObject] section]; - - [originalIndexPaths enumerateObjectsUsingBlock:^(NSIndexPath *originalIndexPath, NSUInteger idx, BOOL *stop) { - // Batch deletions are actually performed one at a time. This requires us to shift up the - // deletion index paths each time a deletion is performed. - // - // For example, batch-deleting the 2nd and 3rd items is not equivalent to incrementally - // deleting the 2nd item and then the 3rd item; the equivalent would be to delete the 2nd - // item each time. - if (originalIndexPath.section != lastSection) { - lastSection = originalIndexPath.section; - currentNumberOfAdsInSection = 0; - } - - NSMutableArray *desiredOriginalPositions = [self positioningArrayForSection:originalIndexPath.section inDictionary:self.desiredOriginalPositions]; - NSMutableArray *originalAdIndexPaths = [self positioningArrayForSection:originalIndexPath.section inDictionary:self.originalAdIndexPaths]; - - NSIndexPath *indexPathOfItemToDelete = [NSIndexPath indexPathForRow:originalIndexPath.row - currentNumberOfAdsInSection inSection:originalIndexPath.section]; - - NSUInteger searchIndexInDesired = [self indexOfIndexPath:indexPathOfItemToDelete inSortedArray:desiredOriginalPositions options:NSBinarySearchingInsertionIndex | NSBinarySearchingLastEqual]; - for (NSUInteger i = searchIndexInDesired; i < [desiredOriginalPositions count]; i++) { - [self decrementDesiredIndexPathsAtIndex:i inSection:originalIndexPath.section]; - } - - NSUInteger searchIndexInPlaced = [self indexOfIndexPath:indexPathOfItemToDelete inSortedArray:originalAdIndexPaths options:NSBinarySearchingInsertionIndex | NSBinarySearchingLastEqual]; - for (NSUInteger i = searchIndexInPlaced; i < [originalAdIndexPaths count]; i++) { - [self decrementPlacedIndexPathsAtIndex:i inSection:originalIndexPath.section]; - } - - currentNumberOfAdsInSection++; - }]; -} - -- (void)moveItemAtIndexPath:(NSIndexPath *)originalIndexPath toIndexPath:(NSIndexPath *)newIndexPath -{ - [self deleteItemsAtIndexPaths:@[originalIndexPath]]; - [self insertItemsAtIndexPaths:@[newIndexPath]]; -} - -#pragma mark - NSIndexPath array helpers - -- (NSUInteger)indexOfIndexPath:(NSIndexPath *)indexPath inSortedArray:(NSArray *)array options:(NSBinarySearchingOptions)options -{ - if (!indexPath || indexPath.row == NSNotFound) { - return NSNotFound; - } - return [array indexOfObject:indexPath inSortedRange:NSMakeRange(0, [array count]) options:options usingComparator:^NSComparisonResult(NSIndexPath *path1, NSIndexPath *path2) { - return [path1 compare:path2]; - }]; -} - -- (void)incrementDesiredIndexPathsAtIndex:(NSUInteger)index inSection:(NSUInteger)section -{ - NSMutableArray *desiredOriginalPositions = [self positioningArrayForSection:section inDictionary:self.desiredOriginalPositions]; - NSMutableArray *desiredInsertionPositions = [self positioningArrayForSection:section inDictionary:self.desiredInsertionPositions]; - - NSIndexPath *currentDesiredOriginalPosition = desiredOriginalPositions[index]; - NSIndexPath *newDesiredOriginalPosition = [NSIndexPath indexPathForRow:currentDesiredOriginalPosition.row + 1 inSection:currentDesiredOriginalPosition.section]; - desiredOriginalPositions[index] = newDesiredOriginalPosition; - - NSIndexPath *currentDesiredInsertionPosition = desiredInsertionPositions[index]; - NSIndexPath *newDesiredInsertionPosition = [NSIndexPath indexPathForRow:currentDesiredInsertionPosition.row + 1 inSection:currentDesiredInsertionPosition.section]; - desiredInsertionPositions[index] = newDesiredInsertionPosition; -} - -- (void)incrementPlacedIndexPathsAtIndex:(NSUInteger)index inSection:(NSUInteger)section -{ - NSMutableArray *originalAdIndexPaths = [self positioningArrayForSection:section inDictionary:self.originalAdIndexPaths]; - NSMutableArray *adjustedAdIndexPaths = [self positioningArrayForSection:section inDictionary:self.adjustedAdIndexPaths]; - - NSIndexPath *currentOriginalIndexPath = originalAdIndexPaths[index]; - NSIndexPath *newOriginalIndexPath = [NSIndexPath indexPathForRow:currentOriginalIndexPath.row + 1 inSection:currentOriginalIndexPath.section]; - originalAdIndexPaths[index] = newOriginalIndexPath; - - NSIndexPath *currentAdjustedIndexPath = adjustedAdIndexPaths[index]; - NSIndexPath *newAdjustedIndexPath = [NSIndexPath indexPathForRow:currentAdjustedIndexPath.row + 1 inSection:currentAdjustedIndexPath.section]; - adjustedAdIndexPaths[index] = newAdjustedIndexPath; -} - -- (void)decrementDesiredIndexPathsAtIndex:(NSUInteger)index inSection:(NSUInteger)section -{ - NSMutableArray *desiredOriginalPositions = [self positioningArrayForSection:section inDictionary:self.desiredOriginalPositions]; - NSMutableArray *desiredInsertionPositions = [self positioningArrayForSection:section inDictionary:self.desiredInsertionPositions]; - - NSIndexPath *currentDesiredOriginalPosition = desiredOriginalPositions[index]; - NSIndexPath *newDesiredOriginalPosition = [NSIndexPath indexPathForRow:currentDesiredOriginalPosition.row - 1 inSection:currentDesiredOriginalPosition.section]; - desiredOriginalPositions[index] = newDesiredOriginalPosition; - - NSIndexPath *currentDesiredInsertionPosition = desiredInsertionPositions[index]; - NSIndexPath *newDesiredInsertionPosition = [NSIndexPath indexPathForRow:currentDesiredInsertionPosition.row - 1 inSection:currentDesiredInsertionPosition.section]; - desiredInsertionPositions[index] = newDesiredInsertionPosition; -} - -- (void)decrementPlacedIndexPathsAtIndex:(NSUInteger)index inSection:(NSUInteger)section -{ - NSMutableArray *originalAdIndexPaths = [self positioningArrayForSection:section inDictionary:self.originalAdIndexPaths]; - NSMutableArray *adjustedAdIndexPaths = [self positioningArrayForSection:section inDictionary:self.adjustedAdIndexPaths]; - - NSIndexPath *currentOriginalIndexPath = originalAdIndexPaths[index]; - NSIndexPath *newOriginalIndexPath = [NSIndexPath indexPathForRow:currentOriginalIndexPath.row - 1 inSection:currentOriginalIndexPath.section]; - originalAdIndexPaths[index] = newOriginalIndexPath; - - NSIndexPath *currentAdjustedIndexPath = adjustedAdIndexPaths[index]; - NSIndexPath *newAdjustedIndexPath = [NSIndexPath indexPathForRow:currentAdjustedIndexPath.row - 1 inSection:currentAdjustedIndexPath.section]; - adjustedAdIndexPaths[index] = newAdjustedIndexPath; -} - -#pragma mark - Section modification helpers - -- (NSUInteger)largestSectionIndexContainingAds -{ - return [[[self.desiredInsertionPositions allKeys] valueForKeyPath:@"@max.unsignedIntValue"] unsignedIntegerValue]; -} - -// Does not update the index path sections. Call updateSectionForPositioningArray to update the sections in the index paths. -- (void)copyPositioningArrayInDictionary:(NSMutableDictionary *)dict atSection:(NSUInteger)atSection toSection:(NSUInteger)toSection -{ - if (dict[@(atSection)]) { - dict[@(toSection)] = dict[@(atSection)]; - } -} - -- (void)clearPositioningArraysInDictionariesAtSection:(NSUInteger)section -{ - [self.desiredInsertionPositions removeObjectForKey:@(section)]; - [self.desiredOriginalPositions removeObjectForKey:@(section)]; - [self.adjustedAdIndexPaths removeObjectForKey:@(section)]; - [self.originalAdIndexPaths removeObjectForKey:@(section)]; - [self.adDataObjects removeObjectForKey:@(section)]; -} - -// Moves the positioning arrays to the correct spots in the dictionaries and also updates the sections for all the index paths. -- (void)moveAllPositioningArraysInDictionariesAtSection:(NSUInteger)atSection toSection:(NSUInteger)toSection -{ - [self copyPositioningArrayInDictionary:self.desiredInsertionPositions atSection:atSection toSection:toSection]; - [self copyPositioningArrayInDictionary:self.desiredOriginalPositions atSection:atSection toSection:toSection]; - [self copyPositioningArrayInDictionary:self.adjustedAdIndexPaths atSection:atSection toSection:toSection]; - [self copyPositioningArrayInDictionary:self.originalAdIndexPaths atSection:atSection toSection:toSection]; - [self copyPositioningArrayInDictionary:self.adDataObjects atSection:atSection toSection:toSection]; - - [self updateAllSectionsForPositioningArraysAtSection:toSection]; - - [self clearPositioningArraysInDictionariesAtSection:atSection]; -} - -- (void)updateAllSectionsForPositioningArraysAtSection:(NSUInteger)section -{ - [self updateSectionForPositioningArray:self.desiredInsertionPositions[@(section)] toSection:section]; - [self updateSectionForPositioningArray:self.desiredOriginalPositions[@(section)] toSection:section]; - [self updateSectionForPositioningArray:self.adjustedAdIndexPaths[@(section)] toSection:section]; - [self updateSectionForPositioningArray:self.originalAdIndexPaths[@(section)] toSection:section]; -} - -- (void)updateSectionForPositioningArray:(NSMutableArray *)positioningArray toSection:(NSUInteger)section -{ - for (NSUInteger i = 0; i < positioningArray.count; ++i) { - NSIndexPath *indexPath = positioningArray[i]; - - NSUInteger indices[] = { section, [indexPath indexAtPosition:1] }; - positioningArray[i] = [NSIndexPath indexPathWithIndexes:indices length:2]; - } -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPStreamAdPlacer.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPStreamAdPlacer.h deleted file mode 100644 index 0a7b581d02..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPStreamAdPlacer.h +++ /dev/null @@ -1,242 +0,0 @@ -// -// MPStreamAdPlacer.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import -#import "MPStreamAdPlacerDelegate.h" -#import "MPClientAdPositioning.h" - -@protocol MPNativeAdRendering; -@class MPNativeAdRequestTargeting; -@class MPNativeAd; - -/** - * The `MPStreamAdPlacer` class allows you to retrieve native ads from the MoPub ad server and - * place them into any custom UI component that represents a stream of content. It does not actually - * present or insert any ads on its own; you must provide a delegate conforming to the - * `MPStreamAdPlacerDelegate` protocol to handle ad insertions. - * - * @warning **Note:** If you are inserting ads into a `UITableView` or `UICollectionView`, you - * should first consider whether the `UITableViewAdPlacer` or `UICollectionViewAdPlacer` classes are - * sufficient for your use case before choosing to use this class. - * - * @discussion Your app's first responsibility when creating a stream ad placer is to communicate - * the state of your stream. Specifically, you must provide it with the count of the - * original content items in your stream using -setItemCount:forSection:, so that it can determine - * where and how many ads should appear. Additionally, you must also make sure to notify the ad - * placer of any insertions, deletions, or rearrangement of content items or sections. - * - * Use the -loadAdsForAdUnitID: method to tell the stream ad placer to begin retrieving ads. In - * order to optimize performance, this call may not immediately result in the ad placer asking its - * delegate to insert any ads. Instead, the ad placer decides whether to insert ads by determining - * what content items are currently visible. This means that your delegate may be intermittently - * informed about new insertions, and is meant to minimize situations in which ads are requested for - * positions in the stream that have a low likelihood of visibility. - * - * ### Responding to Insertions and Rendering Ads - * - * Your delegate should respond to insertion callbacks by updating your stream's data source so - * that it knows to render an ad (rather than an original content item) at the given index path. - * Note that the implementation may vary depending on the design of your data source. - * - * Use -renderAdAtIndexPath:inView: to populate a view with the contents of an ad. - */ - -@interface MPStreamAdPlacer : NSObject - -/** - * An array of `NSIndexPath` objects representing the positions of items that are currently visible - * on the screen. - * - * The stream ad placer uses the contents of this array to determine where ads should be inserted. - * It calculates an on-screen range and uses a small look-ahead to place ads where the user is - * likely to view them. - */ -@property (nonatomic, strong) NSArray *visibleIndexPaths; - -@property (nonatomic, readonly) NSArray *rendererConfigurations; -@property (nonatomic, weak) UIViewController *viewController; -@property (nonatomic, weak) id delegate; -@property (nonatomic, readonly, copy) MPAdPositioning *adPositioning; - -/** - * Creates and returns a new ad placer that can display ads in a stream. - * - * @param controller The view controller which should be used to present modal content. - * @param positioning The positioning object that specifies where ads should be shown in the stream. - * @param rendererConfigurations An array of MPNativeAdRendererConfiguration objects that control how - * the native ad is rendered. You should pass in configurations that can render any ad type that - * may be displayed for the given ad unit. - * - */ -+ (instancetype)placerWithViewController:(UIViewController *)controller adPositioning:(MPAdPositioning *)positioning rendererConfigurations:(NSArray *)rendererConfigurations; - -/** - * Lets the ad placer know of how many items are in a section. This allows the ad placer - * to place ads more effectively around its visible range. - * - * @param count How many items are in the section. - * @param section The section that the ad placer is recording the count for. - */ -- (void)setItemCount:(NSUInteger)count forSection:(NSInteger)section; - -/** - * Uses the corresponding rendering class to render content in the view. - * - * @param indexPath The index path of the cell you want to render. - * @param view The view you want to render your contents into. - */ -- (void)renderAdAtIndexPath:(NSIndexPath *)indexPath inView:(UIView *)view; - -/** - * Get the size of the ad at the index path. - * - * @param indexPath Retrieve the size at indexPath. - * @param maxWidth The maximum acceptable width for the view. - * - * @return The size of the ad at indexPath. - */ -- (CGSize)sizeForAdAtIndexPath:(NSIndexPath *)indexPath withMaximumWidth:(CGFloat)maxWidth; - -/** - * Requests ads from the MoPub ad server using the specified ad unit ID. - * - * @param adUnitID A string representing a MoPub ad unit ID. - */ -- (void)loadAdsForAdUnitID:(NSString *)adUnitID; - -/** - * Requests ads from the MoPub ad server using the specified ad unit ID and targeting parameters. - * - * @param adUnitID A string representing a MoPub ad unit ID. - * @param targeting An object containing targeting information, such as geolocation data. - */ -- (void)loadAdsForAdUnitID:(NSString *)adUnitID targeting:(MPNativeAdRequestTargeting *)targeting; - -/** - * Returns whether an ad is ready to be displayed at the indexPath. - * - * @param indexPath The index path to examine for ad readiness. - */ -- (BOOL)isAdAtIndexPath:(NSIndexPath *)indexPath; - -/** - * Returns the number of items in the given section of the stream, including any ads that have been - * inserted. - * - * @param numberOfItems The number of content items. - * @param section The section the method will retrieve the adjusted number of items for. - */ -- (NSUInteger)adjustedNumberOfItems:(NSUInteger)numberOfItems inSection:(NSUInteger)section; - -/** - * Returns the index path representing the location of an item after accounting for ads that have - * been inserted into the stream. - * - * @param indexPath An index path object identifying the original location of a content item, before - * any ads have been inserted into the stream. - */ -- (NSIndexPath *)adjustedIndexPathForOriginalIndexPath:(NSIndexPath *)indexPath; - -/** - * Asks for the original position of a content item, given its position in the stream after ads - * have been inserted. - * - * If the specified index path does not identify a content item, but rather an ad, this method - * will return nil. - * - * @param indexPath An index path object identifying an item in the stream, after ads have been - * inserted. - */ -- (NSIndexPath *)originalIndexPathForAdjustedIndexPath:(NSIndexPath *)indexPath; - -/** - * Returns the index paths representing the locations of items after accounting for ads that have - * been inserted into the stream. - * - * @param indexPaths An array of index path objects each identifying the original location of a - * content item, before any ads have been inserted into the stream. - */ -- (NSArray *)adjustedIndexPathsForOriginalIndexPaths:(NSArray *)indexPaths; - -/** - * Retrieves the original positions of content items, given their positions in the stream after ads - * have been inserted. - * - * If a specified index path does not identify a content item, but rather an ad, it will not be - * included in the result. - * - * @param indexPaths An array of index path objects each identifying an item in the stream, after - * ads have been inserted. - */ -- (NSArray *)originalIndexPathsForAdjustedIndexPaths:(NSArray *)indexPaths; - -/** @name Notifying the Ad Placer of Content Updates */ - -/** - * Tells the ad placer that content items have been inserted at the specified index paths. - * - * This method allows the ad placer to adjust its ad positions correctly. - * - * @param originalIndexPaths An array of NSIndexPath objects that identify positions where content - * has been inserted. - */ -- (void)insertItemsAtIndexPaths:(NSArray *)originalIndexPaths; - -/** - * Tells the ad placer that content items have been deleted at the specified index paths. - * - * This method allows the ad placer to adjust its ad positions correctly, and remove from the - * stream if necessary - * - * @param originalIndexPaths An array of NSIndexPath objects that identify positions where content - * has been deleted. -*/ -- (void)deleteItemsAtIndexPaths:(NSArray *)originalIndexPaths; - -/** - * Tells the ad placer that a content item has moved from one index path to another. - * - * This method allows the ad placer to adjust its ad positions correctly. - * - * @param fromIndexPath The index path identifying the original location of the item. - * @param toIndexPath The destination index path for the item. - */ -- (void)moveItemAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath; - -/** - * Tells the ad placer that sections have been inserted at the specified indices. - * - * This method allows the ad placer to adjust its ad positions correctly. - * - * @param sections An NSIndexSet that identifies the positions where sections - * have been inserted. - */ -- (void)insertSections:(NSIndexSet *)sections; - -/** - * Tells the ad placer that sections have been deleted at the specified indices. - * - * This method allows the ad placer to adjust its ad positions correctly. - * - * @param sections An NSIndexSet that identifies the positions where sections - * have been deleted. - */ -- (void)deleteSections:(NSIndexSet *)sections; - -/** - * Tells the ad placer that a section has moved from one index to another. - * - * This method allows the ad placer to adjust its ad positions correctly. - * - * @param section The index identifying the original location of the section. - * @param newSection The destination index for the section. - */ -- (void)moveSection:(NSInteger)section toSection:(NSInteger)newSection; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPStreamAdPlacer.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPStreamAdPlacer.m deleted file mode 100644 index 232e9185ac..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPStreamAdPlacer.m +++ /dev/null @@ -1,589 +0,0 @@ -// -// MPStreamAdPlacer.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPAdPositioning.h" -#import "MPLogging.h" -#import "MPNativeAd+Internal.h" -#import "MPNativeAdData.h" -#import "MPNativeAdDelegate.h" -#import "MPNativeAdRendererConfiguration.h" -#import "MPNativeAdRendererConstants.h" -#import "MPNativeAdRendering.h" -#import "MPNativeAdSource.h" -#import "MPNativePositionSource.h" -#import "MPNativeView.h" -#import "MPServerAdPositioning.h" -#import "MPStaticNativeAdRenderer.h" -#import "MPStreamAdPlacementData.h" -#import "MPStreamAdPlacer.h" - -static NSInteger const kAdInsertionLookAheadAmount = 3; -static const NSUInteger kIndexPathItemIndex = 1; - -@protocol MPNativeAdRenderer; - -@interface MPStreamAdPlacer () - -@property (nonatomic, strong) NSArray *rendererConfigurations; -@property (nonatomic, strong) MPNativeAdSource *adSource; -@property (nonatomic, strong) MPNativePositionSource *positioningSource; -@property (nonatomic, copy) MPAdPositioning *adPositioning; -@property (nonatomic, strong) MPStreamAdPlacementData *adPlacementData; -@property (nonatomic, copy) NSString *adUnitID; -@property (nonatomic, strong) NSMutableDictionary *sectionCounts; -@property (nonatomic, strong) NSIndexPath *topConsideredIndexPath; -@property (nonatomic, strong) NSIndexPath *bottomConsideredIndexPath; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MPStreamAdPlacer - -+ (instancetype)placerWithViewController:(UIViewController *)controller adPositioning:(MPAdPositioning *)positioning rendererConfigurations:(NSArray *)rendererConfigurations -{ - MPStreamAdPlacer *placer = [[self alloc] initWithViewController:controller adPositioning:positioning rendererConfigurations:rendererConfigurations]; - return placer; -} - -- (instancetype)initWithViewController:(UIViewController *)controller adPositioning:(MPAdPositioning *)positioning rendererConfigurations:(NSArray *)rendererConfigurations -{ - NSAssert(controller != nil, @"A stream ad placer cannot be instantiated with a nil view controller."); - NSAssert(positioning != nil, @"A stream ad placer cannot be instantiated with a nil positioning object."); - - for (id rendererConfiguration in rendererConfigurations) { - NSAssert([rendererConfiguration isKindOfClass:[MPNativeAdRendererConfiguration class]], @"A stream ad placer must be instantiated with rendererConfigurations that are of type MPNativeAdRendererConfiguration."); - } - - self = [super init]; - if (self) { - _viewController = controller; - _adPositioning = [positioning copy]; - _adSource = [[MPNativeAdSource alloc] initWithDelegate:self]; - _adPlacementData = [[MPStreamAdPlacementData alloc] initWithPositioning:_adPositioning]; - _rendererConfigurations = rendererConfigurations; - _sectionCounts = [[NSMutableDictionary alloc] init]; - } - return self; -} - -- (void)dealloc -{ - [_positioningSource cancel]; -} - -- (void)setVisibleIndexPaths:(NSArray *)visibleIndexPaths -{ - if (visibleIndexPaths.count == 0) { - _visibleIndexPaths = nil; - self.topConsideredIndexPath = nil; - self.bottomConsideredIndexPath = nil; - return; - } - - _visibleIndexPaths = [visibleIndexPaths sortedArrayUsingSelector:@selector(compare:)]; - self.topConsideredIndexPath = self.visibleIndexPaths.firstObject; - self.bottomConsideredIndexPath = [self furthestValidIndexPathAfterIndexPath:self.visibleIndexPaths.lastObject withinDistance:visibleIndexPaths.count + kAdInsertionLookAheadAmount]; - - [self fillAdsInConsideredRange]; -} - -- (void)setItemCount:(NSUInteger)count forSection:(NSInteger)section -{ - self.sectionCounts[@(section)] = @(count); -} - -- (void)renderAdAtIndexPath:(NSIndexPath *)indexPath inView:(UIView *)view -{ - MPNativeAdData *adData = [self.adPlacementData adDataAtAdjustedIndexPath:indexPath]; - - if (!adData) { - MPLogInfo(@"-renderAdAtIndexPath: An ad does not exist at indexPath"); - return; - } - - // Remove any old native ad views from the view prior to adding the new ad view as a sub view. - for (UIView *subview in view.subviews) { - if ([subview isKindOfClass:[MPNativeView class]]) { - [subview removeFromSuperview]; - } - } - - [view addSubview:[adData.ad retrieveAdViewWithError:nil]]; - - CGSize adSize = [self sizeForAd:adData.ad withMaximumWidth:view.bounds.size.width andIndexPath:indexPath]; - [adData.ad updateAdViewSize:adSize]; -} - -- (CGSize)sizeForAdAtIndexPath:(NSIndexPath *)indexPath withMaximumWidth:(CGFloat)maxWidth -{ - MPNativeAdData *adData = [self.adPlacementData adDataAtAdjustedIndexPath:indexPath]; - - // Tell the ad that it should resize the native ad view. - CGSize adSize = [self sizeForAd:adData.ad withMaximumWidth:maxWidth andIndexPath:indexPath]; - [adData.ad updateAdViewSize:adSize]; - - return adSize; -} - -- (void)loadAdsForAdUnitID:(NSString *)adUnitID -{ - [self loadAdsForAdUnitID:adUnitID targeting:nil]; -} - -- (void)loadAdsForAdUnitID:(NSString *)adUnitID targeting:(MPNativeAdRequestTargeting *)targeting -{ - self.adUnitID = adUnitID; - - // Gather all the index paths with ads so we can notify the delegate that ads were removed. - NSMutableArray *adIndexPaths = [NSMutableArray array]; - for (NSNumber *section in self.sectionCounts) { - NSInteger intSection = [section unsignedIntegerValue]; - [adIndexPaths addObjectsFromArray:[self.adPlacementData adjustedIndexPathsWithAdsInSection:intSection]]; - } - - if (!adUnitID) { - // We need some placement data. Pass nil to it so it doesn't do any unnecessary work. - self.adPlacementData = [[MPStreamAdPlacementData alloc] initWithPositioning:nil]; - } else if ([self.adPositioning isKindOfClass:[MPClientAdPositioning class]]) { - // Reset to a placement data that has "desired" ads but not "placed" ones. - self.adPlacementData = [[MPStreamAdPlacementData alloc] initWithPositioning:self.adPositioning]; - } else if ([self.adPositioning isKindOfClass:[MPServerAdPositioning class]]) { - // Reset to a placement data that has no "desired" ads at all. - self.adPlacementData = [[MPStreamAdPlacementData alloc] initWithPositioning:nil]; - - // Get positioning information from the server. - self.positioningSource = [[MPNativePositionSource alloc] init]; - __weak __typeof__(self) weakSelf = self; - [self.positioningSource loadPositionsWithAdUnitIdentifier:self.adUnitID completionHandler:^(MPAdPositioning *positioning, NSError *error) { - __typeof__(self) strongSelf = weakSelf; - - if (!strongSelf) { - return; - } - - if (error) { - if ([error code] == MPNativePositionSourceEmptyResponse) { - MPLogInfo(@"ERROR: Ad placer cannot show any ads because ad positions have " - @"not been configured for your ad unit %@. You must assign positions " - @"by editing the ad unit's settings on the MoPub website.", - strongSelf.adUnitID); - } else { - MPLogInfo(@"ERROR: Ad placer failed to get positions from the ad server for " - @"ad unit ID %@. Error: %@", strongSelf.adUnitID, error); - } - } else { - strongSelf.adPlacementData = [[MPStreamAdPlacementData alloc] initWithPositioning:positioning]; - } - }]; - } - - if (adIndexPaths.count > 0) { - [self.delegate adPlacer:self didRemoveAdsAtIndexPaths:adIndexPaths]; - } - - if (!adUnitID) { - MPLogInfo(@"Ad placer cannot load ads with a nil ad unit ID."); - return; - } - - [self.adSource loadAdsWithAdUnitIdentifier:adUnitID rendererConfigurations:self.rendererConfigurations andTargeting:targeting]; -} - -- (BOOL)isAdAtIndexPath:(NSIndexPath *)indexPath -{ - return [self.adPlacementData isAdAtAdjustedIndexPath:indexPath]; -} - -- (NSUInteger)adjustedNumberOfItems:(NSUInteger)numberOfItems inSection:(NSUInteger)section -{ - return [self.adPlacementData adjustedNumberOfItems:numberOfItems inSection:section]; -} - -- (NSIndexPath *)adjustedIndexPathForOriginalIndexPath:(NSIndexPath *)indexPath -{ - return [self.adPlacementData adjustedIndexPathForOriginalIndexPath:indexPath]; -} - -- (NSIndexPath *)originalIndexPathForAdjustedIndexPath:(NSIndexPath *)indexPath -{ - return [self.adPlacementData originalIndexPathForAdjustedIndexPath:indexPath]; -} - -- (NSArray *)adjustedIndexPathsForOriginalIndexPaths:(NSArray *)indexPaths -{ - NSMutableArray *adjustedIndexPaths = [NSMutableArray array]; - for (NSIndexPath *indexPath in indexPaths) { - [adjustedIndexPaths addObject:[self adjustedIndexPathForOriginalIndexPath:indexPath]]; - } - return [adjustedIndexPaths copy]; -} - -- (NSArray *)originalIndexPathsForAdjustedIndexPaths:(NSArray *)indexPaths -{ - NSMutableArray *originalIndexPaths = [NSMutableArray array]; - for (NSIndexPath *indexPath in indexPaths) { - NSIndexPath *originalIndexPath = [self originalIndexPathForAdjustedIndexPath:indexPath]; - if (originalIndexPath) { - [originalIndexPaths addObject:originalIndexPath]; - } - } - return [originalIndexPaths copy]; -} - -- (void)insertItemsAtIndexPaths:(NSArray *)originalIndexPaths -{ - [self.adPlacementData insertItemsAtIndexPaths:originalIndexPaths]; - [originalIndexPaths enumerateObjectsUsingBlock:^(NSIndexPath *originalIndexPath, NSUInteger idx, BOOL *stop) { - NSInteger section = originalIndexPath.section; - [self setItemCount:[[self.sectionCounts objectForKey:@(section)] integerValue] + 1 forSection:section]; - }]; -} - -- (void)deleteItemsAtIndexPaths:(NSArray *)originalIndexPaths -{ - originalIndexPaths = [originalIndexPaths sortedArrayUsingSelector:@selector(compare:)]; - NSMutableSet *activeSections = [NSMutableSet setWithCapacity:[originalIndexPaths count]]; - [originalIndexPaths enumerateObjectsUsingBlock:^(NSIndexPath *indexPath, NSUInteger idx, BOOL *stop) { - [activeSections addObject:[NSNumber numberWithInteger:indexPath.section]]; - }]; - - NSMutableArray *removedIndexPaths = [NSMutableArray array]; - [activeSections enumerateObjectsUsingBlock:^(NSNumber *section, BOOL *stop) { - NSArray *originalIndexPathsInSection = [originalIndexPaths filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"section = %@", section]]; - NSRange deleteRange = [self rangeToDeleteInSection:section forOriginalContentIndexPaths:originalIndexPathsInSection]; - - NSArray *indexPathsToDelete = [self.adPlacementData adjustedAdIndexPathsInAdjustedRange:deleteRange inSection:[section integerValue]]; - [removedIndexPaths addObjectsFromArray:indexPathsToDelete]; - [self.adPlacementData clearAdsInAdjustedRange:deleteRange inSection:[section integerValue]]; - }]; - - [self.adPlacementData deleteItemsAtIndexPaths:originalIndexPaths]; - - [originalIndexPaths enumerateObjectsUsingBlock:^(NSIndexPath *originalIndexPath, NSUInteger idx, BOOL *stop) { - NSInteger section = originalIndexPath.section; - [self setItemCount:[[self.sectionCounts objectForKey:@(section)] integerValue] - 1 forSection:section]; - }]; - - if ([removedIndexPaths count]) { - [self.delegate adPlacer:self didRemoveAdsAtIndexPaths:removedIndexPaths]; - } -} - -- (void)moveItemAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath -{ - [self.adPlacementData moveItemAtIndexPath:fromIndexPath toIndexPath:toIndexPath]; -} - -- (void)insertSections:(NSIndexSet *)sections -{ - [self.adPlacementData insertSections:sections]; - [self insertItemCountSections:sections]; -} - -- (void)deleteSections:(NSIndexSet *)sections -{ - [self.adPlacementData deleteSections:sections]; - [self deleteItemCountSections:sections]; -} - -- (void)moveSection:(NSInteger)section toSection:(NSInteger)newSection -{ - [self.adPlacementData moveSection:section toSection:newSection]; - - NSUInteger originalSectionCount = [self.sectionCounts[@(section)] unsignedIntegerValue]; - - [self deleteItemCountSections:[NSIndexSet indexSetWithIndex:section]]; - [self insertItemCountSections:[NSIndexSet indexSetWithIndex:newSection]]; - - [self setItemCount:originalSectionCount forSection:newSection]; -} - -#pragma mark - Private - -- (void)insertItemCountSections:(NSIndexSet *)sections -{ - [sections enumerateIndexesUsingBlock:^(NSUInteger insertionSection, BOOL *stop) { - // Explicitly casting indices to NSInteger because we're counting backwards. - NSInteger maxSection = [[[self.sectionCounts allKeys] valueForKeyPath:@"@max.unsignedIntValue"] unsignedIntegerValue]; - NSInteger signedInsertionSection = insertionSection; - - // We need to shift all the data above the new section up by 1. This assumes each section has a count (as each section should). - for (NSInteger i = maxSection; i >= signedInsertionSection; --i) { - NSUInteger currentCount = [self.sectionCounts[@(i)] unsignedIntegerValue]; - [self setItemCount:currentCount forSection:i+1]; - } - - // Setting the count to 0 isn't exactly correct, but it will be updated correctly when numberOfItems/Rows is called onthe data source. - [self setItemCount:0 forSection:insertionSection]; - }]; -} - -- (void)deleteItemCountSections:(NSIndexSet *)sections -{ - [sections enumerateIndexesWithOptions:NSEnumerationReverse usingBlock:^(NSUInteger deletionSection, BOOL *stop) { - NSUInteger maxSection = [[[self.sectionCounts allKeys] valueForKeyPath:@"@max.unsignedIntValue"] unsignedIntegerValue]; - - // We need to shift all the data above the deletionSection down by 1. This assumes each section has a count (as each section should). - for (NSUInteger i = deletionSection; i <= maxSection; ++i) { - NSUInteger nextCount = [self.sectionCounts[@(i+1)] unsignedIntegerValue]; - [self setItemCount:nextCount forSection:i]; - } - - [self.sectionCounts removeObjectForKey:@(maxSection)]; - }]; -} - -/* - * Returns the range to consider removing cells from the datasource for a given section. - * - * We want to prevent a state where ads are present after the last remaining content item. - * In order to do this, we need to find the range between the last remaining content item - * (after deletion occurs) and last item being deleted. If the end of this range includes - * the (current) last remaining item, we should delete all ads within the range, since they - * would otherwise be "trailing" ads. - * - * The range returned from this method will not include any ads that appear before the - * last remaining content item, because all we care about is preventing trailing ads. - */ -- (NSRange)rangeToDeleteInSection:(NSNumber *)section forOriginalContentIndexPaths:(NSArray *)originalContentIndexPaths -{ - NSRange rangeToDelete = NSMakeRange(0, 0); - NSInteger sectionCount = [self.sectionCounts[section] integerValue]; - //In order to remove trailing ads, we need to find the first index path of the last contiguous block of content items - //That we're deleting. Using the item of this index path, we can create a range in which to remove ads from the datasource. - __block NSIndexPath *firstIndexPathOfLastContiguousContentItemBlock = [originalContentIndexPaths lastObject]; - - //determines if the last content item is being deleted. If not, no ads will be deleted. - if (sectionCount == firstIndexPathOfLastContiguousContentItemBlock.row + 1) { - - //Traverses (in reverse) the content index paths being deleted until it reaches the beginning of the section (all items being deleted), or a gap in that block. - [[[originalContentIndexPaths reverseObjectEnumerator] allObjects] enumerateObjectsUsingBlock:^(NSIndexPath *contentPath, NSUInteger idx, BOOL *stop) { - if (idx > 0 && contentPath.row == firstIndexPathOfLastContiguousContentItemBlock.row - 1) { - firstIndexPathOfLastContiguousContentItemBlock = contentPath; - } - }]; - - NSInteger sectionTotal = [self.adPlacementData adjustedNumberOfItems:sectionCount inSection:[section integerValue]]; - - if (firstIndexPathOfLastContiguousContentItemBlock.row == 0) { - rangeToDelete = NSMakeRange(0, sectionTotal); - } else { - //Last content item *not* being deleted - will be the new end of the section. - NSIndexPath *lastRemainingContentIndexPath = [NSIndexPath indexPathForRow:firstIndexPathOfLastContiguousContentItemBlock.row - 1 inSection:firstIndexPathOfLastContiguousContentItemBlock.section]; - NSIndexPath *adjustedLastContent = [self.adPlacementData adjustedIndexPathForOriginalIndexPath:lastRemainingContentIndexPath]; - rangeToDelete = NSMakeRange(adjustedLastContent.row, sectionTotal - adjustedLastContent.row); - } - } - return rangeToDelete; -} - -- (NSIndexPath *)furthestValidIndexPathAfterIndexPath:(NSIndexPath *)startingPath withinDistance:(NSUInteger)numberOfItems -{ - NSUInteger section = [startingPath indexAtPosition:0]; - NSInteger itemIndex = [startingPath indexAtPosition:1]; - - NSNumber *sectionCountNumber = self.sectionCounts[@(section)]; - NSUInteger sectionItemCount = [sectionCountNumber unsignedIntegerValue]; - NSUInteger itemsPassed = 0; - while (itemsPassed < numberOfItems) { - if (sectionItemCount > (itemIndex + 1)) { - ++itemIndex; - ++itemsPassed; - } else { - // Ignore 0 sized sections. - NSUInteger trySection = section; - do { - ++trySection; - sectionCountNumber = self.sectionCounts[@(trySection)]; - sectionItemCount = [sectionCountNumber unsignedIntegerValue]; - } while (sectionCountNumber && sectionItemCount == 0); - - // We can exit and use the last known valid index path if we can't get a section count number. - if (!sectionCountNumber) { - break; - } else { - // Otherwise we move onto the next non-zero section. - section = trySection; - ++itemsPassed; - itemIndex = 0; - } - } - } - - NSUInteger indices[] = {section, itemIndex}; - return [NSIndexPath indexPathWithIndexes:indices length:2]; -} - -- (NSIndexPath *)earliestValidIndexPathBeforeIndexPath:(NSIndexPath *)startingPath withinDistance:(NSUInteger)numberOfItems -{ - NSUInteger section = [startingPath indexAtPosition:0]; - NSInteger itemIndex = [startingPath indexAtPosition:1]; - - NSUInteger itemsPassed = 0; - while (itemsPassed < numberOfItems) { - if ((itemIndex - 1) >= 0) { - --itemIndex; - ++itemsPassed; - } else { - // Ignore 0 sized sections. - NSNumber *sectionCountNumber; - NSUInteger trySection = section; - NSUInteger trySectionCount; - - do { - --trySection; - sectionCountNumber = self.sectionCounts[@(trySection)]; - trySectionCount = [sectionCountNumber unsignedIntegerValue]; - } while (sectionCountNumber && trySectionCount == 0); - - // Exit and use the last known valid index path. - if (!sectionCountNumber) { - break; - } else { - // Otherwise we move backwards. - section = trySection; - itemIndex = trySectionCount - 1; - ++itemsPassed; - } - } - } - - NSUInteger indices[] = {section, itemIndex}; - return [NSIndexPath indexPathWithIndexes:indices length:2]; -} - -// Determines whether or not insertionPath is close enough to the visible cells to place an ad at insertionPath. -- (BOOL)shouldPlaceAdAtIndexPath:(NSIndexPath *)insertionPath -{ - if (!self.topConsideredIndexPath || !self.bottomConsideredIndexPath || !insertionPath) { - return NO; - } - - // We need to make sure the insertionPath is actually at a valid index in a section by confirming the index is less than the count in the section. - NSUInteger originalSectionCount = [self.sectionCounts[@(insertionPath.section)] unsignedIntegerValue]; - NSUInteger adjustedSectionCount = [self adjustedNumberOfItems:originalSectionCount inSection:insertionPath.section]; - - if ([insertionPath indexAtPosition:kIndexPathItemIndex] >= adjustedSectionCount) { - return NO; - } - - NSIndexPath *topAdjustedIndexPath = [self adjustedIndexPathForOriginalIndexPath:self.topConsideredIndexPath]; - NSIndexPath *bottomAdjustedIndexPath = [self adjustedIndexPathForOriginalIndexPath:self.bottomConsideredIndexPath]; - - return ([topAdjustedIndexPath compare:insertionPath] != NSOrderedDescending) && ([bottomAdjustedIndexPath compare:insertionPath] != NSOrderedAscending); -} - -- (MPNativeAdData *)retrieveAdDataForInsertionPath:(NSIndexPath *)insertionPath -{ - MPNativeAd *adObject = [self.adSource dequeueAdForAdUnitIdentifier:self.adUnitID]; - - if (!adObject) { - return nil; - } - - MPNativeAdData *adData = [[MPNativeAdData alloc] init]; - adData.adUnitID = self.adUnitID; - adData.ad = adObject; - - return adData; -} - -- (void)fillAdsInConsideredRange -{ - if (!self.topConsideredIndexPath || !self.bottomConsideredIndexPath) { - return; - } - - NSIndexPath *topAdjustedIndexPath = [self adjustedIndexPathForOriginalIndexPath:self.topConsideredIndexPath]; - NSIndexPath *insertionPath = [self.adPlacementData nextAdInsertionIndexPathForAdjustedIndexPath:topAdjustedIndexPath]; - - while ([self shouldPlaceAdAtIndexPath:insertionPath]) { - MPNativeAdData *adData = [self retrieveAdDataForInsertionPath:insertionPath]; - adData.ad.delegate = self; - - if (!adData) { - break; - } - - [self.adPlacementData insertAdData:adData atIndexPath:insertionPath]; - [self.delegate adPlacer:self didLoadAdAtIndexPath:insertionPath]; - - insertionPath = [self.adPlacementData nextAdInsertionIndexPathForAdjustedIndexPath:insertionPath]; - } -} - -#pragma mark - - -- (void)adSourceDidFinishRequest:(MPNativeAdSource *)source -{ - [self fillAdsInConsideredRange]; -} - -#pragma mark - - -- (UIViewController *)viewControllerForPresentingModalView -{ - return self.viewController; -} - -- (void)willPresentModalForNativeAd:(MPNativeAd *)nativeAd -{ - if ([self.delegate respondsToSelector:@selector(nativeAdWillPresentModalForStreamAdPlacer:)]) { - [self.delegate nativeAdWillPresentModalForStreamAdPlacer:self]; - } -} - -- (void)didDismissModalForNativeAd:(MPNativeAd *)nativeAd -{ - if ([self.delegate respondsToSelector:@selector(nativeAdDidDismissModalForStreamAdPlacer:)]) { - [self.delegate nativeAdDidDismissModalForStreamAdPlacer:self]; - } -} - -- (void)willLeaveApplicationFromNativeAd:(MPNativeAd *)nativeAd -{ - if ([self.delegate respondsToSelector:@selector(nativeAdWillLeaveApplicationFromStreamAdPlacer:)]) { - [self.delegate nativeAdWillLeaveApplicationFromStreamAdPlacer:self]; - } -} - -- (void)mopubAd:(id)ad didTrackImpressionWithImpressionData:(MPImpressionData *)impressionData { - if ([self.delegate respondsToSelector:@selector(mopubAdPlacer:didTrackImpressionForAd:withImpressionData:)]) { - [self.delegate mopubAdPlacer:self - didTrackImpressionForAd:ad - withImpressionData:impressionData]; - } -} - -#pragma mark - Internal - -- (CGSize)sizeForAd:(MPNativeAd *)ad withMaximumWidth:(CGFloat)maxWidth andIndexPath:(NSIndexPath *)indexPath -{ - id renderer = ad.renderer; - - CGSize adSize; - - if ([renderer respondsToSelector:@selector(viewSizeHandler)] && renderer.viewSizeHandler) { - adSize = [renderer viewSizeHandler](maxWidth); - if (adSize.height == MPNativeViewDynamicDimension) { - UIView *adView = [ad retrieveAdViewForSizeCalculationWithError:nil]; - if (adView) { - CGSize hydratedAdViewSize = [adView sizeThatFits:CGSizeMake(adSize.width, CGFLOAT_MAX)]; - return hydratedAdViewSize; - } - } - return adSize; - } - - adSize = CGSizeMake(maxWidth, 44.0f); - MPLogInfo(@"WARNING: + (CGSize)viewSizeHandler is NOT implemented for native ad renderer %@ at index path %@. You MUST implement this method to ensure that ad placer native ad cells are correctly sized. Returning a default size of %@ for now.", NSStringFromClass([(id)renderer class]), indexPath, NSStringFromCGSize(adSize)); - - return adSize; -} -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPTableViewAdPlacer.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPTableViewAdPlacer.h deleted file mode 100644 index 26a83d5635..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPTableViewAdPlacer.h +++ /dev/null @@ -1,405 +0,0 @@ -// -// MPTableViewAdPlacer.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import -#import "MPClientAdPositioning.h" -#import "MPServerAdPositioning.h" -#import "MPTableViewAdPlacerDelegate.h" - -@class MPNativeAdRequestTargeting; - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * The `MPTableViewAdPlacer` class allows you to request native ads from the MoPub ad server and - * place them into a `UITableView` object. - * - * When an instance of this class is initialized with a table view, it wraps the table view's - * data source and delegate in order to insert ads and adjust the positions of your regular - * content cells. - */ - -@interface MPTableViewAdPlacer : NSObject - -@property (nonatomic, weak) id delegate; - -/** @name Initializing a Table View Ad Placer */ - -/** - * Creates and returns an ad placer that will insert ads into a table view at positions that can - * be configured dynamically on the MoPub website. - * - * When you make an ad request, the ad placer will ask the MoPub ad server for the positions where - * ads should be inserted into the table view. You can configure these positioning values by - * editing your ad unit's settings on the MoPub website. - * - * Using this method is equivalent to calling - * +placerWithTableView:viewController:adPositioning:rendererConfigurations: and passing in an - * `MPServerAdPositioning` object as the `positioning` parameter. - * - * @param tableView The table view in which to insert ads. - * @param controller The view controller which should be used to present modal content. - * @param rendererConfigurations An array of MPNativeAdRendererConfiguration objects that control how - * the native ad is rendered. You should pass in configurations that can render any ad type that - * may be displayed for the given ad unit. - * - * @return An `MPTableViewAdPlacer` object. - */ -+ (instancetype)placerWithTableView:(UITableView *)tableView viewController:(UIViewController *)controller rendererConfigurations:(NSArray *)rendererConfigurations; - -/** - * Creates and returns an ad placer that will insert ads into a table view at specified positions. - * - * When using this method, there are two options for controlling the positions where ads appear - * within the table view. - * - * First, you may pass an `MPServerAdPositioning` object as the `positioning` parameter, which tells - * the ad placer to obtain positioning information dynamically from the ad server, which you can - * configure on the MoPub website. In many cases, this is the preferred approach, since it allows - * you to modify the positions without rebuilding your application. Note that calling the - * convenience method +placerWithTableView:viewController:defaultAdRenderingClass: accomplishes - * this as well. - * - * Alternatively, if you wish to hard-code your positions, you may pass an `MPClientAdPositioning` - * object instead. - * - * @param tableView The table view in which to insert ads. - * @param controller The view controller which should be used to present modal content. - * @param positioning The positioning object that specifies where ads should be shown in the stream. - * @param rendererConfigurations An array of MPNativeAdRendererConfiguration objects that control how - * the native ad is rendered. You should pass in configurations that can render any ad type that - * may be displayed for the given ad unit. - * - * @return An `MPTableViewAdPlacer` object. - */ -+ (instancetype)placerWithTableView:(UITableView *)tableView viewController:(UIViewController *)controller adPositioning:(MPAdPositioning *)positioning rendererConfigurations:(NSArray *)rendererConfigurations; - -/** @name Requesting Ads */ - -/** - * Requests ads from the MoPub ad server using the specified ad unit ID. - * - * @param adUnitID A string representing a MoPub ad unit ID. - */ -- (void)loadAdsForAdUnitID:(NSString *)adUnitID; - -/** - * Requests ads from the MoPub ad server using the specified ad unit ID and targeting parameters. - * - * @param adUnitID A string representing a MoPub ad unit ID. - * @param targeting An object containing targeting information, such as geolocation data. - */ -- (void)loadAdsForAdUnitID:(NSString *)adUnitID targeting:(MPNativeAdRequestTargeting *)targeting; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * The MoPub SDK adds interfaces to the `UITableView` class to help your application with - * responsibilities related to `MPTableViewAdPlacer`. These APIs include methods to help notify the - * ad placer of all modifications to the original table view, as well as to simplify your - * application code such that it does not need to perform index path manipulations to account for - * the presence of ads. - * - * Since the ad placer replaces the original data source and delegate objects of your table view, - * the SDK also provides new methods for you to set these properties such that the ad placer remains - * aware of the changes. - */ - -@interface UITableView (MPTableViewAdPlacer) - -- (void)mp_setAdPlacer:(MPTableViewAdPlacer *)placer; - -/** @name Obtaining the Table View Ad Placer */ - -/** - * Returns the ad placer currently being used for this table view. - * - * @return An ad placer object or `nil` if no ad placer is being used. - */ -- (MPTableViewAdPlacer *)mp_adPlacer; - -/** @name Setting and Getting the Delegate and Data Source */ - -/** - * Sets the table view's data source. - * - * If your application needs to change a table view's data source after it has instantiated an ad - * placer using that table view, use this method rather than -[UITableView setDataSource:]. - * - * @param dataSource The new table view data source. - */ -- (void)mp_setDataSource:(id)dataSource; - -/** - * Returns the original data source of the table view. - * - * When you instantiate an ad placer using a table view, the ad placer replaces the table view's - * original data source object. If your application needs to access the original data source, use - * this method instead of -[UITableView dataSource]. - * - * @return The original table view data source. - */ -- (id)mp_dataSource; - -/** - * Sets the table view's delegate. - * - * If your application needs to change a table view's delegate after it has instantiated an ad - * placer using that table view, use this method rather than -[UITableView setDelegate:]. - * - * @param delegate The new table view delegate. - */ -- (void)mp_setDelegate:(id)delegate; - -/** - * Returns the original delegate of the table view. - * - * When you instantiate an ad placer using a table view, the ad placer replaces the table view's - * original delegate object. If your application needs to access the original delegate, use this - * method instead of -[UITableView delegate]. - * - * @return The original table view delegate. - */ -- (id)mp_delegate; - -/** @name Notifying the Table View Ad Placer of Content Changes */ - -/** - * Begin a series of method calls that insert, delete, or select rows and sections of the table - * view. - */ -- (void)mp_beginUpdates; - -/** - * Conclude a series of method calls that insert, delete, select, or reload rows and sections of - * the table view. - */ -- (void)mp_endUpdates; - -/** - * Reloads the rows and sections of the table view. - */ -- (void)mp_reloadData; - -/** - * Inserts rows in the receiver at the locations identified by an array of index paths, and informs - * the attached ad placer of the insertions. - * - * @param indexPaths An array of `NSIndexPath` objects that represent rows to insert into the - * table. - * @param animation A constant that either specifies the kind of animation to perform when - * inserting the cells or requests no animation. - */ -- (void)mp_insertRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation; - -/** - * Deletes rows in the receiver at the locations identified by an array of index paths, and informs - * the attached ad placer of the deletions. - * - * @param indexPaths An array of `NSIndexPath` objects identifying the rows to delete. - * @param animation A constant that either specifies the kind of animation to perform when - * deleting the cells or requests no animation. - */ -- (void)mp_deleteRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation; - -/** - * Reloads the specified rows using the given animation effect, and informs the attached ad placer - * that the row positions may have changed. - * - * @param indexPaths An array of `NSIndexPath` objects identifying the rows to reload. - * @param animation A constant that indicates how the reloading is to be animated. - */ -- (void)mp_reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation; - -/** - * Moves the row at a specified location to a destination location, taking into account ads - * inserted by the ad placer. - * - * @param indexPath An index path identifying the row to move. - * @param newIndexPath An index path identifying the row that is the destination of the row at - * *indexPath*. - */ -- (void)mp_moveRowAtIndexPath:(NSIndexPath *)indexPath toIndexPath:(NSIndexPath *)newIndexPath; - -/** - * Inserts one or more sections in the receiver, and informs the attached ad placer of the - * insertions. - * - * @param sections An index set that specifies the sections to insert in the receiving table view. - * If a section already exists at the specified index location, it is moved down one index - * location. - * @param animation A constant that indicates how the insertion is to be animated. - */ -- (void)mp_insertSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation; - -/** - * Deletes one or more sections in the receiver, and informs the attached ad placer of the - * deletions. - * - * @param sections An index set that specifies the sections to delete from the receiving table - * view. If a section exists after the specified index location, it is moved up one index location. - * @param animation A constant that either specifies the kind of animation to perform when deleting - * the section or requests no animation. - */ -- (void)mp_deleteSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation; - -/** - * Reloads the specified sections, and informs the attached ad placer that sections may have - * changed. - * - * @param sections An index set identifying the sections to reload. - * @param animation A constant that indicates how the reloading is to be animated. - */ -- (void)mp_reloadSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation; - -/** - * Moves a section to a new location in the table view, and informs the attached ad placer. - * - * @param section The index of the section to move. - * @param newSection The index in the table view that is the destination of the move for the - * section. The existing section at that location slides up or down to an adjoining index position - * to make room for it. - */ -- (void)mp_moveSection:(NSInteger)section toSection:(NSInteger)newSection; - -/** @name Methods Involving Index Paths */ - -/** - * Returns the table view cell at the specified index path. - * - * @param indexPath The index path locating the row in the table view. - * - * @return An object representing a cell of the table or `nil` if the cell is not visible or - * *indexPath* is out of range. - */ -- (UITableViewCell *)mp_cellForRowAtIndexPath:(NSIndexPath *)indexPath; - -/** - * Returns a reusable table-view cell object for the specified reuse identifier. - * - * @param identifier A string identifying the cell object to be reused. This parameter must not be - * `nil`. - * @param indexPath The index path specifying the location of the cell. The data source receives - * this information when asked for the cell and should just pass it along. - * - * @return A `UITableViewCell` object with the associated reuse identifier. - */ -- (id)mp_dequeueReusableCellWithIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath; - -/** - * Deselects a given row identified by index path, with an option to animate the deselection. - * - * @param indexPath An index path identifying a row in the receiver. - * @param animated YES if you want to animate the deselection and NO if the change should be - * immediate. - */ -- (void)mp_deselectRowAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated; - -/** - * Returns an index path representing the original row and section of a given table view cell, - * calculated before any ads were inserted. - * - * @param cell A cell object of the table view. - * - * @return An index path representing the row and section of the cell or `nil` if the index path - * is invalid or is a reference to a cell containing an ad. - */ -- (NSIndexPath *)mp_indexPathForCell:(UITableViewCell *)cell; - -/** - * Returns an index path representing the original row and section at the given point. - * - * @param point A point in the local coordinate system of the receiver (the table view's bounds). - * - * @return An index path representing the row and section associated with *point* or `nil` if the - * point is out of bounds of any row or is associated with a cell containing an ad. - */ -- (NSIndexPath *)mp_indexPathForRowAtPoint:(CGPoint)point; - -/** - * Returns the original index path for the selected row, as if no ads have been inserted. - * - * @return The original index path for the selected row. - */ -- (NSIndexPath *)mp_indexPathForSelectedRow; - -/** - * Returns an array of index paths each representing a non-ad row enclosed by a given rectangle, - * calculated before any ads were inserted. - * - * @param rect A rectangle defining an area of the table view in local coordinates. - * - * @return An array of `NSIndexPath` objects each representing a row and section index identifying - * a row within *rect*. Index paths representing ads are not returned. - */ -- (NSArray *)mp_indexPathsForRowsInRect:(CGRect)rect; - -/** - * Returns an array of the original index paths for the selected rows, as if no ads have been - * inserted. - * - * @return An array of the original index paths for the selected rows. - */ -- (NSArray *)mp_indexPathsForSelectedRows; - -/** - * Returns an array of index paths each identifying a visible non-ad row in the table view, - * calculated before any ads were inserted. - * - * @return An array of `NSIndexPath` objects each representing a visible non-ad row in the table - * view. Returns `nil` if no rows are visible. - */ -- (NSArray *)mp_indexPathsForVisibleRows; - -/** - * Returns the drawing area for a row identified by index path. - * - * @param indexPath An index path object that identifies a row of your original content. - * - * @return A rectangle defining the area in which the table view draws the row or `CGRectZero` if - * *indexPath* is invalid. - */ -- (CGRect)mp_rectForRowAtIndexPath:(NSIndexPath *)indexPath; - -/** - * Scrolls the table view so that the selected row nearest to a specified position in the table - * view is at that position. - * - * @param indexPath An index path that identifies a row in the table view by its row index and - * its section index. - * @param scrollPosition A constant that identifies a relative position in the receiving table view - * (top, middle, bottom) for row when scrolling concludes. - * @param animated YES if you want to animate the change in position, NO if it should be - * immediate. - */ -- (void)mp_scrollToRowAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UITableViewScrollPosition)scrollPosition animated:(BOOL)animated; - -/** - * Selects a row in the receiver identified by index path, optionally scrolling the row to a - * location in the receiver. - * - * @param indexPath An index path identifying a row in the receiver. - * @param animated YES if you want to animate the selection and any change in position, NO if - * the change should be immediate. - * @param scrollPosition A constant that identifies a relative position in the receiving table view - * (top, middle, bottom) for the row when scrolling concludes. - */ -- (void)mp_selectRowAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated scrollPosition:(UITableViewScrollPosition)scrollPosition; - -/** - * Returns an array of the non-ad cells that are visible in the table view. - * - * @return An array containing `UITableViewCell` objects, each representing a visible, non-ad cell - * in the receiving table view. - */ -- (NSArray *)mp_visibleCells; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPTableViewAdPlacer.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPTableViewAdPlacer.m deleted file mode 100644 index 5f17668ecb..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPTableViewAdPlacer.m +++ /dev/null @@ -1,904 +0,0 @@ -// -// MPTableViewAdPlacer.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPTableViewAdPlacer.h" -#import "MPStreamAdPlacer.h" -#import "MPAdPlacerInvocation.h" -#import "MPTimer.h" -#import "MPNativeAdRendering.h" -#import "MPNativeAdUtils.h" -#import "MPGlobal.h" -#import "MPNativeAdRendererConfiguration.h" -#import "MPTableViewAdPlacerCell.h" -#import - -static NSString * const kTableViewAdPlacerReuseIdentifier = @"MPTableViewAdPlacerReuseIdentifier"; - -@interface MPTableViewAdPlacer () - -@property (nonatomic, strong) MPStreamAdPlacer *streamAdPlacer; -@property (nonatomic, strong) UITableView *tableView; -@property (nonatomic, weak) id originalDataSource; -@property (nonatomic, weak) id originalDelegate; -@property (nonatomic, strong) MPTimer *insertionTimer; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MPTableViewAdPlacer - -+ (instancetype)placerWithTableView:(UITableView *)tableView viewController:(UIViewController *)controller rendererConfigurations:(NSArray *)rendererConfigurations -{ - return [[self class] placerWithTableView:tableView viewController:controller adPositioning:[MPServerAdPositioning positioning] rendererConfigurations:rendererConfigurations]; -} - -+ (instancetype)placerWithTableView:(UITableView *)tableView viewController:(UIViewController *)controller adPositioning:(MPAdPositioning *)positioning rendererConfigurations:(NSArray *)rendererConfigurations -{ - MPTableViewAdPlacer *tableViewAdPlacer = [[MPTableViewAdPlacer alloc] initWithTableView:tableView viewController:controller adPositioning:positioning rendererConfigurations:rendererConfigurations]; - return tableViewAdPlacer; -} - -- (instancetype)initWithTableView:(UITableView *)tableView viewController:(UIViewController *)controller adPositioning:(MPAdPositioning *)positioning rendererConfigurations:(NSArray *)rendererConfigurations -{ - for (id rendererConfiguration in rendererConfigurations) { - NSAssert([rendererConfiguration isKindOfClass:[MPNativeAdRendererConfiguration class]], @"A table view ad placer must be instantiated with rendererConfigurations that are of type MPNativeAdRendererConfiguration."); - } - - if (self = [super init]) { - _tableView = tableView; - _streamAdPlacer = [MPStreamAdPlacer placerWithViewController:controller adPositioning:positioning rendererConfigurations:rendererConfigurations]; - _streamAdPlacer.delegate = self; - - _originalDataSource = tableView.dataSource; - _originalDelegate = tableView.delegate; - tableView.dataSource = self; - tableView.delegate = self; - - [self.tableView registerClass:[MPTableViewAdPlacerCell class] forCellReuseIdentifier:kTableViewAdPlacerReuseIdentifier]; - - [tableView mp_setAdPlacer:self]; - } - return self; -} - -- (void)dealloc -{ - [_insertionTimer invalidate]; -} - -#pragma mark - Public - -- (void)loadAdsForAdUnitID:(NSString *)adUnitID -{ - [self loadAdsForAdUnitID:adUnitID targeting:nil]; -} - -- (void)loadAdsForAdUnitID:(NSString *)adUnitID targeting:(MPNativeAdRequestTargeting *)targeting -{ - if (!self.insertionTimer) { - self.insertionTimer = [MPTimer timerWithTimeInterval:kUpdateVisibleCellsInterval - target:self - selector:@selector(updateVisibleCells) - repeats:YES - runLoopMode:NSRunLoopCommonModes]; - [self.insertionTimer scheduleNow]; - } - [self.streamAdPlacer loadAdsForAdUnitID:adUnitID targeting:targeting]; -} - -#pragma mark - Ad Insertion - -- (void)updateVisibleCells -{ - NSArray *visiblePaths = self.tableView.mp_indexPathsForVisibleRows; - - if ([visiblePaths count]) { - [self.streamAdPlacer setVisibleIndexPaths:visiblePaths]; - } -} - -#pragma mark - - -- (void)adPlacer:(MPStreamAdPlacer *)adPlacer didLoadAdAtIndexPath:(NSIndexPath *)indexPath -{ - NSInteger sectionCount = [self.tableView.dataSource numberOfSectionsInTableView:self.tableView]; - NSInteger rowCount = [self.tableView.dataSource tableView:self.tableView numberOfRowsInSection:indexPath.section]; - if (indexPath.section >= sectionCount || indexPath.row >= rowCount) { - return; // ignore out-of-range index path that cannot be added to the collection view - } - - BOOL originalAnimationsEnabled = [UIView areAnimationsEnabled]; - //We only want to enable animations if the index path is before or within our visible cells - BOOL animationsEnabled = ([(NSIndexPath *)[self.tableView.indexPathsForVisibleRows lastObject] compare:indexPath] != NSOrderedAscending) && originalAnimationsEnabled; - - [UIView setAnimationsEnabled:animationsEnabled]; - [self.tableView mp_beginUpdates]; - [self.tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationMiddle]; - [self.tableView mp_endUpdates]; - [UIView setAnimationsEnabled:originalAnimationsEnabled]; -} - -- (void)adPlacer:(MPStreamAdPlacer *)adPlacer didRemoveAdsAtIndexPaths:(NSArray *)indexPaths -{ - NSMutableArray *validIndexPaths = [NSMutableArray new]; - for (NSIndexPath *indexPath in indexPaths) { - NSInteger sectionCount = [self.tableView numberOfSections]; - NSInteger rowCount = [self.tableView numberOfRowsInSection:indexPath.section]; - - // ignore out-of-range index path that cannot be removed from the table view - if (indexPath.section < sectionCount && indexPath.row < rowCount) { - [validIndexPaths addObject:indexPath]; - } - } - - if (validIndexPaths.count == 0) { - return; - } - - BOOL originalAnimationsEnabled = [UIView areAnimationsEnabled]; - [UIView setAnimationsEnabled:NO]; - [self.tableView mp_beginUpdates]; - [self.tableView deleteRowsAtIndexPaths:validIndexPaths withRowAnimation:UITableViewRowAnimationNone]; - [self.tableView mp_endUpdates]; - [UIView setAnimationsEnabled:originalAnimationsEnabled]; -} - -- (void)nativeAdWillPresentModalForStreamAdPlacer:(MPStreamAdPlacer *)adPlacer -{ - if ([self.delegate respondsToSelector:@selector(nativeAdWillPresentModalForTableViewAdPlacer:)]) { - [self.delegate nativeAdWillPresentModalForTableViewAdPlacer:self]; - } -} - -- (void)nativeAdDidDismissModalForStreamAdPlacer:(MPStreamAdPlacer *)adPlacer -{ - if ([self.delegate respondsToSelector:@selector(nativeAdDidDismissModalForTableViewAdPlacer:)]) { - [self.delegate nativeAdDidDismissModalForTableViewAdPlacer:self]; - } -} - -- (void)nativeAdWillLeaveApplicationFromStreamAdPlacer:(MPStreamAdPlacer *)adPlacer -{ - if ([self.delegate respondsToSelector:@selector(nativeAdWillLeaveApplicationFromTableViewAdPlacer:)]) { - [self.delegate nativeAdWillLeaveApplicationFromTableViewAdPlacer:self]; - } -} - -- (void)mopubAdPlacer:(id)adPlacer didTrackImpressionForAd:(id)ad withImpressionData:(MPImpressionData *)impressionData { - if ([self.delegate respondsToSelector:@selector(mopubAdPlacer:didTrackImpressionForAd:withImpressionData:)]) { - [self.delegate mopubAdPlacer:self - didTrackImpressionForAd:ad - withImpressionData:impressionData]; - } -} - -#pragma mark - - -// Default is 1 if not implemented -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView -{ - if ([self.originalDataSource respondsToSelector:@selector(numberOfSectionsInTableView:)]) { - return [self.originalDataSource numberOfSectionsInTableView:tableView]; - } - else { - return 1; - } -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section -{ - NSUInteger numberOfItems = [self.originalDataSource tableView:tableView numberOfRowsInSection:section]; - [self.streamAdPlacer setItemCount:numberOfItems forSection:section]; - return [self.streamAdPlacer adjustedNumberOfItems:numberOfItems inSection:section]; -} - -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath -{ - if ([self.streamAdPlacer isAdAtIndexPath:indexPath]) { - MPTableViewAdPlacerCell *cell = (MPTableViewAdPlacerCell *)[tableView dequeueReusableCellWithIdentifier:kTableViewAdPlacerReuseIdentifier forIndexPath:indexPath]; - cell.clipsToBounds = YES; - - [self.streamAdPlacer renderAdAtIndexPath:indexPath inView:cell.contentView]; - return cell; - } - NSIndexPath *originalIndexPath = [self.streamAdPlacer originalIndexPathForAdjustedIndexPath:indexPath]; - return [self.originalDataSource tableView:tableView cellForRowAtIndexPath:originalIndexPath]; -} - -- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath -{ - if ([self.streamAdPlacer isAdAtIndexPath:indexPath]) { - return NO; - } - - id datasource = self.originalDataSource; - if ([datasource respondsToSelector:@selector(tableView:canEditRowAtIndexPath:)]) { - NSIndexPath *origPath = [self.streamAdPlacer originalIndexPathForAdjustedIndexPath:indexPath]; - return [datasource tableView:tableView canEditRowAtIndexPath:origPath]; - } - - // When the data source doesn't implement tableView:canEditRowAtIndexPath:, Apple assumes the cells are editable. So we return YES. - return YES; -} - -- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath -{ - NSInvocation *invocation = [MPAdPlacerInvocation invokeForTarget:self.originalDataSource with2ArgSelector:@selector(tableView:canMoveRowAtIndexPath:) firstArg:tableView secondArg:indexPath streamAdPlacer:self.streamAdPlacer]; - - return [MPAdPlacerInvocation boolResultForInvocation:invocation defaultValue:NO]; -} - -- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath -{ - [MPAdPlacerInvocation invokeForTarget:self.originalDataSource with3ArgIntSelector:@selector(tableView:commitEditingStyle:forRowAtIndexPath:) firstArg:tableView secondArg:editingStyle thirdArg:indexPath streamAdPlacer:self.streamAdPlacer]; -} - -- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath -{ - if ([self.streamAdPlacer isAdAtIndexPath:sourceIndexPath]) { - // Can't move an ad explicitly. - return; - } - - id dataSource = self.originalDataSource; - if ([dataSource respondsToSelector:@selector(tableView:moveRowAtIndexPath:toIndexPath:)]) { - NSIndexPath *origSource = [self.streamAdPlacer originalIndexPathForAdjustedIndexPath:sourceIndexPath]; - NSIndexPath *origDestination = [self.streamAdPlacer originalIndexPathForAdjustedIndexPath:destinationIndexPath]; - [dataSource tableView:tableView moveRowAtIndexPath:origSource toIndexPath:origDestination]; - } -} - -#pragma mark - - -// We don't override the following: -// -// -tableView:targetIndexPathForMoveFromRowAtIndexPath:toProposedIndexPath - No need to override because -// targeting is typically based on the adjusted paths. -// -// -tableView:accessoryTypeForRowWithIndexPath - Deprecated, and causes a runtime exception. - -- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath -{ - if ([self.streamAdPlacer isAdAtIndexPath:indexPath]) { - return [self.streamAdPlacer sizeForAdAtIndexPath:indexPath withMaximumWidth:CGRectGetWidth(self.tableView.bounds)].height; - } - - if ([self.originalDelegate respondsToSelector:@selector(tableView:heightForRowAtIndexPath:)]) { - NSIndexPath *originalIndexPath = [self.streamAdPlacer originalIndexPathForAdjustedIndexPath:indexPath]; - return [self.originalDelegate tableView:tableView heightForRowAtIndexPath:originalIndexPath]; - } - - return tableView.rowHeight; -} - -- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath -{ - [MPAdPlacerInvocation invokeForTarget:self.originalDelegate with3ArgSelector:@selector(tableView:willDisplayCell:forRowAtIndexPath:) firstArg:tableView secondArg:cell thirdArg:indexPath streamAdPlacer:self.streamAdPlacer]; -} - -- (void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath -{ - [MPAdPlacerInvocation invokeForTarget:self.originalDelegate with3ArgSelector:@selector(tableView:didEndDisplayingCell:forRowAtIndexPath:) firstArg:tableView secondArg:cell thirdArg:indexPath streamAdPlacer:self.streamAdPlacer]; -} - -- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath -{ - [MPAdPlacerInvocation invokeForTarget:self.originalDelegate with2ArgSelector:@selector(tableView:accessoryButtonTappedForRowWithIndexPath:) firstArg:tableView secondArg:indexPath streamAdPlacer:self.streamAdPlacer]; -} - -- (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath -{ - NSInvocation *invocation = [MPAdPlacerInvocation invokeForTarget:self.originalDelegate with2ArgSelector:@selector(tableView:shouldHighlightRowAtIndexPath:) firstArg:tableView secondArg:indexPath streamAdPlacer:self.streamAdPlacer]; - - return [MPAdPlacerInvocation boolResultForInvocation:invocation defaultValue:YES]; -} - -- (void)tableView:(UITableView *)tableView didHighlightRowAtIndexPath:(NSIndexPath *)indexPath -{ - [MPAdPlacerInvocation invokeForTarget:self.originalDelegate with2ArgSelector:@selector(tableView:didHighlightRowAtIndexPath:) firstArg:tableView secondArg:indexPath streamAdPlacer:self.streamAdPlacer]; -} - -- (void)tableView:(UITableView *)tableView didUnhighlightRowAtIndexPath:(NSIndexPath *)indexPath -{ - [MPAdPlacerInvocation invokeForTarget:self.originalDelegate with2ArgSelector:@selector(tableView:didUnhighlightRowAtIndexPath:) firstArg:tableView secondArg:indexPath streamAdPlacer:self.streamAdPlacer]; -} - -- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath -{ - if ([self.streamAdPlacer isAdAtIndexPath:indexPath]) { - return indexPath; - } - - id delegate = self.originalDelegate; - if ([delegate respondsToSelector:@selector(tableView:willSelectRowAtIndexPath:)]) { - NSIndexPath *origPath = [self.streamAdPlacer originalIndexPathForAdjustedIndexPath:indexPath]; - NSIndexPath *origResult = [delegate tableView:tableView willSelectRowAtIndexPath:origPath]; - return [self.streamAdPlacer adjustedIndexPathForOriginalIndexPath:origResult]; - } - - return indexPath; -} - -- (NSIndexPath *)tableView:(UITableView *)tableView willDeselectRowAtIndexPath:(NSIndexPath *)indexPath -{ - if ([self.streamAdPlacer isAdAtIndexPath:indexPath]) { - return indexPath; - } - - id delegate = self.originalDelegate; - if ([delegate respondsToSelector:@selector(tableView:willDeselectRowAtIndexPath:)]) { - NSIndexPath *origPath = [self.streamAdPlacer originalIndexPathForAdjustedIndexPath:indexPath]; - NSIndexPath *origResult = [delegate tableView:tableView willDeselectRowAtIndexPath:origPath]; - return [self.streamAdPlacer adjustedIndexPathForOriginalIndexPath:origResult]; - } - - return indexPath; -} - -- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath -{ - if ([self.streamAdPlacer isAdAtIndexPath:indexPath]) { - // The view inside the cell already has a gesture recognizer to handle the tap event. - [self.tableView deselectRowAtIndexPath:indexPath animated:NO]; - return; - } - - id delegate = self.originalDelegate; - if ([delegate respondsToSelector:@selector(tableView:didSelectRowAtIndexPath:)]) { - NSIndexPath *originalPath = [self.streamAdPlacer originalIndexPathForAdjustedIndexPath:indexPath]; - [delegate tableView:tableView didSelectRowAtIndexPath:originalPath]; - } -} - -- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath -{ - [MPAdPlacerInvocation invokeForTarget:self.originalDelegate with2ArgSelector:@selector(tableView:didDeselectRowAtIndexPath:) firstArg:tableView secondArg:indexPath streamAdPlacer:self.streamAdPlacer]; -} - -- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath -{ - if ([self.streamAdPlacer isAdAtIndexPath:indexPath]) { - return UITableViewCellEditingStyleNone; - } - - id delegate = self.originalDelegate; - if ([delegate respondsToSelector:@selector(tableView:editingStyleForRowAtIndexPath:)]) { - NSIndexPath *origPath = [self.streamAdPlacer originalIndexPathForAdjustedIndexPath:indexPath]; - return [delegate tableView:tableView editingStyleForRowAtIndexPath:origPath]; - } - - // Apple returns UITableViewCellEditingStyleDelete by default when the cell is editable. So we'll do the same. - // We'll also return UITableViewCellEditingStyleNone if the cell isn't editable. - BOOL editable = [self tableView:tableView canEditRowAtIndexPath:indexPath]; - - if (editable) { - return UITableViewCellEditingStyleDelete; - } else { - return UITableViewCellEditingStyleNone; - } -} - -- (NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath -{ - NSInvocation *invocation = [MPAdPlacerInvocation invokeForTarget:self.originalDelegate with2ArgSelector:@selector(tableView:titleForDeleteConfirmationButtonForRowAtIndexPath:) firstArg:tableView secondArg:indexPath streamAdPlacer:self.streamAdPlacer]; - - return [MPAdPlacerInvocation resultForInvocation:invocation defaultValue:@"Delete"]; -} - -- (BOOL)tableView:(UITableView *)tableView shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath -{ - NSInvocation *invocation = [MPAdPlacerInvocation invokeForTarget:self.originalDelegate with2ArgSelector:@selector(tableView:shouldIndentWhileEditingRowAtIndexPath:) firstArg:tableView secondArg:indexPath streamAdPlacer:self.streamAdPlacer]; - - return [MPAdPlacerInvocation boolResultForInvocation:invocation defaultValue:YES]; -} - -- (void)tableView:(UITableView *)tableView willBeginEditingRowAtIndexPath:(NSIndexPath *)indexPath -{ - [MPAdPlacerInvocation invokeForTarget:self.originalDelegate with2ArgSelector:@selector(tableView:willBeginEditingRowAtIndexPath:) firstArg:tableView secondArg:indexPath streamAdPlacer:self.streamAdPlacer]; -} - -- (void)tableView:(UITableView *)tableView didEndEditingRowAtIndexPath:(NSIndexPath *)indexPath -{ - [MPAdPlacerInvocation invokeForTarget:self.originalDelegate with2ArgSelector:@selector(tableView:didEndEditingRowAtIndexPath:) firstArg:tableView secondArg:indexPath streamAdPlacer:self.streamAdPlacer]; -} - -- (NSInteger)tableView:(UITableView *)tableView indentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath -{ - NSInvocation *invocation = [MPAdPlacerInvocation invokeForTarget:self.originalDelegate with2ArgSelector:@selector(tableView:indentationLevelForRowAtIndexPath:) firstArg:tableView secondArg:indexPath streamAdPlacer:self.streamAdPlacer]; - - return [MPAdPlacerInvocation integerResultForInvocation:invocation - defaultValue:UITableViewCellEditingStyleNone]; -} - -- (BOOL)tableView:(UITableView *)tableView shouldShowMenuForRowAtIndexPath:(NSIndexPath *)indexPath -{ - NSInvocation *invocation = [MPAdPlacerInvocation invokeForTarget:self.originalDelegate with2ArgSelector:@selector(tableView:shouldShowMenuForRowAtIndexPath:) firstArg:tableView secondArg:indexPath streamAdPlacer:self.streamAdPlacer]; - - return [MPAdPlacerInvocation boolResultForInvocation:invocation defaultValue:NO]; -} - -- (BOOL)tableView:(UITableView *)tableView canPerformAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender -{ - if ([self.streamAdPlacer isAdAtIndexPath:indexPath]) { - // Can't copy or paste to an ad. - return NO; - } - - id delegate = self.originalDelegate; - if ([delegate respondsToSelector:@selector(tableView:canPerformAction:forRowAtIndexPath:withSender:)]) { - NSIndexPath *origPath = [self.streamAdPlacer originalIndexPathForAdjustedIndexPath:indexPath]; - return [delegate tableView:tableView canPerformAction:action forRowAtIndexPath:origPath withSender:sender]; - } - - return NO; -} - -- (void)tableView:(UITableView *)tableView performAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender { - - if ([self.streamAdPlacer isAdAtIndexPath:indexPath]) { - // Can't copy or paste to an ad. - return; - } - - id delegate = self.originalDelegate; - if ([delegate respondsToSelector:@selector(tableView:performAction:forRowAtIndexPath:withSender:)]) { - NSIndexPath *origPath = [self.streamAdPlacer originalIndexPathForAdjustedIndexPath:indexPath]; - [delegate tableView:tableView performAction:action forRowAtIndexPath:origPath withSender:sender]; - } -} - -- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { - if ([self.originalDelegate respondsToSelector:@selector(tableView:viewForHeaderInSection:)]) { - return [self.originalDelegate tableView:tableView viewForHeaderInSection:section]; - } - - return nil; -} - -- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { - if ([self.originalDelegate respondsToSelector:@selector(tableView:viewForFooterInSection:)]) { - return [self.originalDelegate tableView:tableView viewForFooterInSection:section]; - } - - return nil; -} - -- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { - if ([self.originalDelegate respondsToSelector:@selector(tableView:heightForHeaderInSection:)]) { - return [self.originalDelegate tableView:tableView heightForHeaderInSection:section]; - } - - return 0; -} - -- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForHeaderInSection:(NSInteger)section { - if ([self.originalDelegate respondsToSelector:@selector(tableView:estimatedHeightForHeaderInSection:)]) { - return [self.originalDelegate tableView:tableView estimatedHeightForHeaderInSection:section]; - } - - return 0; -} - -- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section { - if ([self.originalDelegate respondsToSelector:@selector(tableView:heightForFooterInSection:)]) { - return [self.originalDelegate tableView:tableView heightForFooterInSection:section]; - } - - return 0; -} - -- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForFooterInSection:(NSInteger)section { - if ([self.originalDelegate respondsToSelector:@selector(tableView:estimatedHeightForFooterInSection:)]) { - return [self.originalDelegate tableView:tableView estimatedHeightForFooterInSection:section]; - } - - return 0; -} - -#pragma mark - Method Forwarding - -- (BOOL)isKindOfClass:(Class)aClass { - return [super isKindOfClass:aClass] || - [self.originalDataSource isKindOfClass:aClass] || - [self.originalDelegate isKindOfClass:aClass]; -} - -- (BOOL)conformsToProtocol:(Protocol *)aProtocol -{ - return [super conformsToProtocol:aProtocol] || - [self.originalDelegate conformsToProtocol:aProtocol] || - [self.originalDataSource conformsToProtocol:aProtocol]; -} - -- (BOOL)respondsToSelector:(SEL)aSelector -{ - return [super respondsToSelector:aSelector] || - [self.originalDataSource respondsToSelector:aSelector] || - [self.originalDelegate respondsToSelector:aSelector]; -} - -- (id)forwardingTargetForSelector:(SEL)aSelector -{ - if ([self.originalDataSource respondsToSelector:aSelector]) { - return self.originalDataSource; - } else if ([self.originalDelegate respondsToSelector:aSelector]) { - return self.originalDelegate; - } else { - return [super forwardingTargetForSelector:aSelector]; - } -} - -@end - -#pragma mark - - -@implementation UITableView (MPTableViewAdPlacer) - -static char kAdPlacerKey; - -- (void)mp_setAdPlacer:(MPTableViewAdPlacer *)placer -{ - objc_setAssociatedObject(self, &kAdPlacerKey, placer, OBJC_ASSOCIATION_ASSIGN); -} - -- (MPTableViewAdPlacer *)mp_adPlacer -{ - return objc_getAssociatedObject(self, &kAdPlacerKey); -} - -- (void)mp_setDelegate:(id)delegate -{ - MPTableViewAdPlacer *adPlacer = [self mp_adPlacer]; - - if (adPlacer) { - adPlacer.originalDelegate = delegate; - } else { - self.delegate = delegate; - } -} - -- (id)mp_delegate -{ - MPTableViewAdPlacer *adPlacer = [self mp_adPlacer]; - - if (adPlacer) { - return adPlacer.originalDelegate; - } else { - return self.delegate; - } -} - -- (void)mp_setDataSource:(id)dataSource -{ - MPTableViewAdPlacer *adPlacer = [self mp_adPlacer]; - - if (adPlacer) { - adPlacer.originalDataSource = dataSource; - } else { - self.dataSource = dataSource; - } -} - -- (id)mp_dataSource -{ - MPTableViewAdPlacer *adPlacer = [self mp_adPlacer]; - - if (adPlacer) { - return adPlacer.originalDataSource; - } else { - return self.dataSource; - } -} - -- (void)mp_reloadData -{ - [self reloadData]; -} - -- (CGRect)mp_rectForRowAtIndexPath:(NSIndexPath *)indexPath -{ - MPTableViewAdPlacer *adPlacer = [self mp_adPlacer]; - NSIndexPath *adjustedIndexPath = indexPath; - - if (adPlacer) { - adjustedIndexPath = [adPlacer.streamAdPlacer adjustedIndexPathForOriginalIndexPath:adjustedIndexPath]; - } - - if (!indexPath || adjustedIndexPath) { - return [self rectForRowAtIndexPath:adjustedIndexPath]; - } else { - return CGRectZero; - } -} - -- (NSIndexPath *)mp_indexPathForRowAtPoint:(CGPoint)point -{ - MPTableViewAdPlacer *adPlacer = [self mp_adPlacer]; - NSIndexPath *adjustedIndexPath = [self indexPathForRowAtPoint:point]; - - if (adPlacer) { - adjustedIndexPath = [adPlacer.streamAdPlacer originalIndexPathForAdjustedIndexPath:adjustedIndexPath]; - } - - return adjustedIndexPath; -} - -- (NSIndexPath *)mp_indexPathForCell:(UITableViewCell *)cell -{ - MPTableViewAdPlacer *adPlacer = [self mp_adPlacer]; - NSIndexPath *adjustedIndexPath = [self indexPathForCell:cell]; - - if (adPlacer) { - adjustedIndexPath = [adPlacer.streamAdPlacer originalIndexPathForAdjustedIndexPath:adjustedIndexPath]; - } - - return adjustedIndexPath; -} - -- (NSArray *)mp_indexPathsForRowsInRect:(CGRect)rect -{ - MPTableViewAdPlacer *adPlacer = [self mp_adPlacer]; - NSArray *indexPaths = [self indexPathsForRowsInRect:rect]; - - if (adPlacer) { - indexPaths = [adPlacer.streamAdPlacer originalIndexPathsForAdjustedIndexPaths:indexPaths]; - } - - return indexPaths; -} - -- (UITableViewCell *)mp_cellForRowAtIndexPath:(NSIndexPath *)indexPath -{ - MPTableViewAdPlacer *adPlacer = [self mp_adPlacer]; - NSIndexPath *adjustedIndexPath = indexPath; - - if (adPlacer) { - adjustedIndexPath = [adPlacer.streamAdPlacer adjustedIndexPathForOriginalIndexPath:adjustedIndexPath]; - } - - return [self cellForRowAtIndexPath:adjustedIndexPath]; -} - -- (NSArray *)mp_visibleCells -{ - MPTableViewAdPlacer *adPlacer = [self mp_adPlacer]; - - if (adPlacer) { - NSArray *indexPaths = [self mp_indexPathsForVisibleRows]; - NSMutableArray *visibleCells = [NSMutableArray array]; - for (NSIndexPath *indexPath in indexPaths) { - UITableViewCell * cell = [self mp_cellForRowAtIndexPath:indexPath]; - if (cell != nil) { - [visibleCells addObject:cell]; - } - } - return visibleCells; - } else { - return [self visibleCells]; - } -} - -- (NSArray *)mp_indexPathsForVisibleRows -{ - MPTableViewAdPlacer *adPlacer = [self mp_adPlacer]; - NSArray *adjustedIndexPaths = [self indexPathsForVisibleRows]; - - if (adPlacer) { - adjustedIndexPaths = [adPlacer.streamAdPlacer originalIndexPathsForAdjustedIndexPaths:adjustedIndexPaths]; - } - - return adjustedIndexPaths; -} - -- (void)mp_scrollToRowAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UITableViewScrollPosition)scrollPosition animated:(BOOL)animated -{ - MPTableViewAdPlacer *adPlacer = [self mp_adPlacer]; - NSIndexPath *adjustedIndexPath = indexPath; - - if (adPlacer && indexPath.row != NSNotFound) { - adjustedIndexPath = [adPlacer.streamAdPlacer adjustedIndexPathForOriginalIndexPath:adjustedIndexPath]; - } - - [self scrollToRowAtIndexPath:adjustedIndexPath atScrollPosition:scrollPosition animated:animated]; -} - -- (void)mp_beginUpdates -{ - [self beginUpdates]; -} - -- (void)mp_endUpdates -{ - [self endUpdates]; -} - -- (void)mp_insertSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation -{ - MPTableViewAdPlacer *adPlacer = [self mp_adPlacer]; - - if (adPlacer) { - [adPlacer.streamAdPlacer insertSections:sections]; - } - - [self insertSections:sections withRowAnimation:animation]; -} - -- (void)mp_deleteSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation -{ - MPTableViewAdPlacer *adPlacer = [self mp_adPlacer]; - - if (adPlacer) { - [adPlacer.streamAdPlacer deleteSections:sections]; - } - - [self deleteSections:sections withRowAnimation:animation]; -} - -- (void)mp_reloadSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation -{ - [self reloadSections:sections withRowAnimation:animation]; -} - -- (void)mp_moveSection:(NSInteger)section toSection:(NSInteger)newSection -{ - MPTableViewAdPlacer *adPlacer = [self mp_adPlacer]; - - if (adPlacer) { - [adPlacer.streamAdPlacer moveSection:section toSection:newSection]; - } - - [self moveSection:section toSection:newSection]; -} - -- (void)mp_insertRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation -{ - MPTableViewAdPlacer *adPlacer = [self mp_adPlacer]; - NSArray *adjustedIndexPaths = indexPaths; - - if (adPlacer) { - [adPlacer.streamAdPlacer insertItemsAtIndexPaths:indexPaths]; - adjustedIndexPaths = [adPlacer.streamAdPlacer adjustedIndexPathsForOriginalIndexPaths:indexPaths]; - } - - // We perform the actual UI insertion AFTER updating the stream ad placer's - // data, because the insertion can trigger queries to the data source, which - // needs to reflect the post-insertion state. - [self insertRowsAtIndexPaths:adjustedIndexPaths withRowAnimation:animation]; -} - -- (void)mp_deleteRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation -{ - MPTableViewAdPlacer *adPlacer = [self mp_adPlacer]; - NSArray *adjustedIndexPaths = indexPaths; - - // We need to wrap the delete process in begin/end updates in case any ad - // cells are also deleted. MPStreamAdPlacer's deleteItemsAtIndexPaths: can - // call the delegate's didRemoveAdsAtIndexPaths, which will remove those - // ads from the tableview. - [self mp_beginUpdates]; - if (adPlacer) { - // We need to obtain the adjusted index paths to delete BEFORE we - // update the stream ad placer's data. - adjustedIndexPaths = [adPlacer.streamAdPlacer adjustedIndexPathsForOriginalIndexPaths:indexPaths]; - [adPlacer.streamAdPlacer deleteItemsAtIndexPaths:indexPaths]; - } - - // We perform the actual UI deletion AFTER updating the stream ad placer's - // data, because the deletion can trigger queries to the data source, which - // needs to reflect the post-deletion state. - [self deleteRowsAtIndexPaths:adjustedIndexPaths withRowAnimation:animation]; - [self mp_endUpdates]; -} - -- (void)mp_reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation -{ - MPTableViewAdPlacer *adPlacer = [self mp_adPlacer]; - NSArray *adjustedIndexPaths = indexPaths; - - if (adPlacer) { - adjustedIndexPaths = [adPlacer.streamAdPlacer adjustedIndexPathsForOriginalIndexPaths:indexPaths]; - } - - [self reloadRowsAtIndexPaths:adjustedIndexPaths withRowAnimation:animation]; -} - -- (void)mp_moveRowAtIndexPath:(NSIndexPath *)indexPath toIndexPath:(NSIndexPath *)newIndexPath -{ - MPTableViewAdPlacer *adPlacer = [self mp_adPlacer]; - NSIndexPath *adjustedFrom = indexPath; - NSIndexPath *adjustedTo = newIndexPath; - - if (adPlacer) { - // We need to obtain the adjusted index paths to move BEFORE we - // update the stream ad placer's data. - adjustedFrom = [adPlacer.streamAdPlacer adjustedIndexPathForOriginalIndexPath:indexPath]; - adjustedTo = [adPlacer.streamAdPlacer adjustedIndexPathForOriginalIndexPath:newIndexPath]; - - [adPlacer.streamAdPlacer moveItemAtIndexPath:indexPath toIndexPath:newIndexPath]; - } - - // We perform the actual UI operation AFTER updating the stream ad placer's - // data, because the operation can trigger queries to the data source, which - // needs to reflect the post-operation state. - [self moveRowAtIndexPath:adjustedFrom toIndexPath:adjustedTo]; -} - -- (NSIndexPath *)mp_indexPathForSelectedRow -{ - MPTableViewAdPlacer *adPlacer = [self mp_adPlacer]; - NSIndexPath *adjustedIndexPath = [self indexPathForSelectedRow]; - - if (adPlacer) { - adjustedIndexPath = [adPlacer.streamAdPlacer originalIndexPathForAdjustedIndexPath:adjustedIndexPath]; - } - - return adjustedIndexPath; -} - -- (NSArray *)mp_indexPathsForSelectedRows -{ - MPTableViewAdPlacer *adPlacer = [self mp_adPlacer]; - NSArray *adjustedIndexPaths = [self indexPathsForSelectedRows]; - - if (adPlacer) { - adjustedIndexPaths = [adPlacer.streamAdPlacer originalIndexPathsForAdjustedIndexPaths:adjustedIndexPaths]; - } - - return adjustedIndexPaths; -} - -- (void)mp_selectRowAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated scrollPosition:(UITableViewScrollPosition)scrollPosition -{ - MPTableViewAdPlacer *adPlacer = [self mp_adPlacer]; - NSIndexPath *adjustedIndexPath = indexPath; - - if (adPlacer) { - adjustedIndexPath = [adPlacer.streamAdPlacer adjustedIndexPathForOriginalIndexPath:indexPath]; - } - - if (!indexPath || adjustedIndexPath) { - [self selectRowAtIndexPath:adjustedIndexPath animated:animated scrollPosition:scrollPosition]; - } -} - -- (void)mp_deselectRowAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated -{ - MPTableViewAdPlacer *adPlacer = [self mp_adPlacer]; - NSIndexPath *adjustedIndexPath = indexPath; - - if (adPlacer) { - adjustedIndexPath = [adPlacer.streamAdPlacer adjustedIndexPathForOriginalIndexPath:indexPath]; - } - - if (!indexPath || adjustedIndexPath) { - [self deselectRowAtIndexPath:adjustedIndexPath animated:animated]; - } -} - -- (id)mp_dequeueReusableCellWithIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath -{ - MPTableViewAdPlacer *adPlacer = [self mp_adPlacer]; - NSIndexPath *adjustedIndexPath = indexPath; - - if (adPlacer) { - adjustedIndexPath = [adPlacer.streamAdPlacer adjustedIndexPathForOriginalIndexPath:indexPath]; - } - - if (!indexPath || adjustedIndexPath) { - if ([self respondsToSelector:@selector(dequeueReusableCellWithIdentifier:forIndexPath:)]) { - return [self dequeueReusableCellWithIdentifier:identifier forIndexPath:adjustedIndexPath]; - } else { - return [self dequeueReusableCellWithIdentifier:identifier]; - } - } else { - return nil; - } -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPTableViewAdPlacerDelegate.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPTableViewAdPlacerDelegate.h deleted file mode 100644 index 017240b279..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPTableViewAdPlacerDelegate.h +++ /dev/null @@ -1,38 +0,0 @@ -// -// MPTableViewAdPlacerDelegate.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPMoPubAdPlacer.h" - -@class MPTableViewAdPlacer; - -@protocol MPTableViewAdPlacerDelegate - -@optional - -/* - * This method is called when a native ad, placed by the table view ad placer, will present a modal view controller. - * - * @param placer The table view ad placer that contains the ad displaying the modal. - */ -- (void)nativeAdWillPresentModalForTableViewAdPlacer:(MPTableViewAdPlacer *)placer; - -/* - * This method is called when a native ad, placed by the table view ad placer, did dismiss its modal view controller. - * - * @param placer The table view ad placer that contains the ad that dismissed the modal. - */ -- (void)nativeAdDidDismissModalForTableViewAdPlacer:(MPTableViewAdPlacer *)placer; - -/* - * This method is called when a native ad, placed by the table view ad placer, will cause the app to background due to user interaction with the ad. - * - * @param placer The table view ad placer that contains the ad causing the app to background. - */ -- (void)nativeAdWillLeaveApplicationFromTableViewAdPlacer:(MPTableViewAdPlacer *)placer; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBAVPlayer.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBAVPlayer.h deleted file mode 100644 index 3c747cb809..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBAVPlayer.h +++ /dev/null @@ -1,40 +0,0 @@ -// -// MOPUBAVPlayer.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@class MOPUBAVPlayer; - -@protocol MOPUBAVPlayerDelegate - -- (void)avPlayer:(MOPUBAVPlayer *)player didError:(NSError *)error withMessage:(NSString *)message; - -- (void)avPlayer:(MOPUBAVPlayer *)player playbackTimeDidProgress:(NSTimeInterval)currentPlaybackTime; - -- (void)avPlayerDidFinishPlayback:(MOPUBAVPlayer *)player; - -- (void)avPlayerDidRecoverFromStall:(MOPUBAVPlayer *)player; - -- (void)avPlayerDidStall:(MOPUBAVPlayer *)player; - -@end - - -@interface MOPUBAVPlayer : AVPlayer - -// Indicates the duration of the player item. -@property (nonatomic, readonly) NSTimeInterval currentItemDuration; - -// Returns the current time of the current player item. -@property (nonatomic, readonly) NSTimeInterval currentPlaybackTime; - -- (id)initWithDelegate:(id)delegate playerItem:(AVPlayerItem *)playerItem; - -- (void)dispose; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBAVPlayer.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBAVPlayer.m deleted file mode 100644 index 708c44aac8..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBAVPlayer.m +++ /dev/null @@ -1,260 +0,0 @@ -// -// MOPUBAVPlayer.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MOPUBAVPlayer.h" -#import "MPLogging.h" -#import "MPReachabilityManager.h" -#import "MPTimer.h" -#import "MPCoreInstanceProvider.h" - -static CGFloat const kAvPlayerTimerInterval = 0.1f; - -static NSString * const MPAVPlayerItemLoadErrorTemplate = @"Loading player item at %@ failed."; - -@interface MOPUBAVPlayer() - -@property (nonatomic, weak, readonly) id delegate; - -@property (nonatomic, copy) NSURL *mediaURL; -@property (nonatomic) MPTimer *playbackTimer; -@property (nonatomic) CMTime lastContinuousPlaybackCMTime; -@property (nonatomic) BOOL playbackDidStall; - -@end - -@implementation MOPUBAVPlayer - -- (id)initWithDelegate:(id)delegate playerItem:(AVPlayerItem *)playerItem -{ - if (playerItem && delegate) { - self = [super initWithPlayerItem:playerItem]; - if (self) { - _delegate = delegate; - - // AVPlayer KVO doesn't handle disconnect/reconnect case. - // Reachability is used to detect network drop and reconnect. - [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(checkNetworkStatus:) name:kMPReachabilityChangedNotification object:nil]; - [MPReachabilityManager.sharedManager startMonitoring]; - } - return self; - } else { - return nil; - } -} - -- (void)dealloc -{ - [self dispose]; -} - -#pragma mark - controls of AVPlayer - -- (void)play -{ - [super play]; - [self startTimeObserver]; - MPLogDebug(@"start playback"); -} - -- (void)pause -{ - [super pause]; - [self stopTimeObserver]; - MPLogDebug(@"playback paused"); -} - -- (void)setMuted:(BOOL)muted -{ - if ([[self superclass] instancesRespondToSelector:@selector(setMuted:)]) { - [super setMuted:muted]; - } else { - if (muted) { - [self setAudioVolume:0]; - } else { - [self setAudioVolume:1]; - } - } -} - -// iOS 6 doesn't have muted for avPlayerItem. Use volume to control mute/unmute -- (void)setAudioVolume:(float)volume -{ - NSArray *audioTracks = [self.currentItem.asset tracksWithMediaType:AVMediaTypeAudio]; - NSMutableArray *allAudioParams = [NSMutableArray array]; - for (AVAssetTrack *track in audioTracks) { - AVMutableAudioMixInputParameters *audioInputParams = [AVMutableAudioMixInputParameters audioMixInputParameters]; - [audioInputParams setVolume:volume atTime:kCMTimeZero]; - [audioInputParams setTrackID:[track trackID]]; - [allAudioParams addObject:audioInputParams]; - } - AVMutableAudioMix *audioMix = [AVMutableAudioMix audioMix]; - [audioMix setInputParameters:allAudioParams]; - [self.currentItem setAudioMix:audioMix]; -} - -#pragma mark - Timer - -- (void)startTimeObserver -{ - // Use custom timer to check for playback time changes and stall detection, since there are bugs - // in the AVPlayer time observing API that can cause crashes. Also, the AVPlayerItem stall notification - // does not always report accurately. - if (_playbackTimer == nil) { - // Add timer to main run loop with common modes to allow the timer to tick while user is scrolling. - _playbackTimer = [MPTimer timerWithTimeInterval:kAvPlayerTimerInterval - target:self - selector:@selector(timerTick) - repeats:YES - runLoopMode:NSRunLoopCommonModes]; - [_playbackTimer scheduleNow]; - _lastContinuousPlaybackCMTime = kCMTimeZero; - - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playbackDidFinish) name:AVPlayerItemDidPlayToEndTimeNotification object:self.currentItem]; - } else { - [_playbackTimer resume]; - } -} - -- (void)timerTick -{ - if (!self.currentItem || self.currentItem.error != nil) { - [self stopTimeObserver]; - NSError *error = nil; - NSString *errorMessage = nil; - if (self.currentItem) { - error = self.currentItem.error; - errorMessage = self.currentItem.error.description ?: self.currentItem.errorLog.description; - } else { - errorMessage = [NSString stringWithFormat:MPAVPlayerItemLoadErrorTemplate, self.mediaURL]; - } - - if ([self.delegate respondsToSelector:@selector(avPlayer:didError:withMessage:)]) { - [self.delegate avPlayer:self didError:error withMessage:errorMessage]; - } - MPLogInfo(@"avplayer experienced error: %@", errorMessage); - } else { - CMTime currentCMTime = self.currentTime; - int32_t result = CMTimeCompare(currentCMTime, self.lastContinuousPlaybackCMTime); - // finished or stalled - if (result == 0) { - NSTimeInterval duration = self.currentItemDuration; - NSTimeInterval currentPlaybackTime = self.currentPlaybackTime; - if (!isnan(duration) && !isnan(currentPlaybackTime) && duration > 0 && currentPlaybackTime > 0) { - [self avPlayerDidStall]; - } - } else { - self.lastContinuousPlaybackCMTime = currentCMTime; - if (result > 0) { - NSTimeInterval currentPlaybackTime = self.currentPlaybackTime; - if (!isnan(currentPlaybackTime) && isfinite(currentPlaybackTime)) { - // There are bugs in AVPlayer that causes the currentTime to be negative - if (currentPlaybackTime < 0) { - currentPlaybackTime = 0; - } - [self avPlayer:self playbackTimeDidProgress:currentPlaybackTime]; - } - } - } - - } -} - -- (void)stopTimeObserver -{ - [_playbackTimer pause]; - MPLogDebug(@"AVPlayer timer stopped"); -} - -#pragma mark - disconnect/reconnect handling -- (void)checkNetworkStatus:(NSNotification *)notice -{ - MPNetworkStatus remoteHostStatus = MPReachabilityManager.sharedManager.currentStatus; - - if (remoteHostStatus == MPNotReachable) { - if (!self.rate) { - [self pause]; - if ([self.delegate respondsToSelector:@selector(avPlayerDidStall:)]) { - [self.delegate avPlayerDidStall:self]; - } - } - } else { - if (!self.rate) { - [self play]; - } - } -} - -#pragma mark - avPlayer state changes - -- (void)avPlayer:(MOPUBAVPlayer *)player playbackTimeDidProgress:(NSTimeInterval)currentPlaybackTime -{ - if (self.playbackDidStall) { - self.playbackDidStall = NO; - if ([self.delegate respondsToSelector:@selector(avPlayerDidRecoverFromStall:)]) { - [self.delegate avPlayerDidRecoverFromStall:self]; - } - } - - if ([self.delegate respondsToSelector:@selector(avPlayer:playbackTimeDidProgress:)]) { - [self.delegate avPlayer:self playbackTimeDidProgress:currentPlaybackTime]; - } -} - -- (void)avPlayerDidStall -{ - // Only call delegate methods once per stall cycle. - if (!self.playbackDidStall && [self.delegate respondsToSelector:@selector(avPlayerDidStall:)]) { - [self.delegate avPlayerDidStall:self]; - } - self.playbackDidStall = YES; -} - -- (void)playbackDidFinish -{ - // Make sure we stop time observing once we know we've done playing. - [self stopTimeObserver]; - if ([self.delegate respondsToSelector:@selector(avPlayerDidFinishPlayback:)]) { - [self.delegate avPlayerDidFinishPlayback:self]; - } - MPLogDebug(@"playback finished"); -} - -- (void)dispose -{ - [[NSNotificationCenter defaultCenter] removeObserver:self]; - - [self stopTimeObserver]; - [MPReachabilityManager.sharedManager stopMonitoring]; - if (_playbackTimer) { - [_playbackTimer invalidate]; - _playbackTimer = nil; - } - - // Cancel preroll after time observer is removed, - // otherwise an NSInternalInconsistencyException may be thrown and crash on - // [AVCMNotificationDispatcher _copyAndRemoveListenerAndCallbackForWeakReferenceToListener:callback:name:object:], - // depends on timing. - [self cancelPendingPrerolls]; -} - - -#pragma mark - getter - -- (NSTimeInterval)currentItemDuration -{ - NSTimeInterval duration = CMTimeGetSeconds(self.currentItem.duration); - return (isfinite(duration)) ? duration : NAN; -} - -- (NSTimeInterval)currentPlaybackTime -{ - NSTimeInterval currentTime = CMTimeGetSeconds(self.currentTime); - return (isfinite(currentTime)) ? currentTime : NAN; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBAVPlayerView.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBAVPlayerView.h deleted file mode 100644 index 7ec41e329c..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBAVPlayerView.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// MOPUBAVPlayerView.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@class AVPlayer; - -@interface MOPUBAVPlayerView : UIView - -@property (nonatomic) AVPlayer *player; -@property (nonatomic) NSString *videoGravity; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBAVPlayerView.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBAVPlayerView.m deleted file mode 100644 index 0782fb0439..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBAVPlayerView.m +++ /dev/null @@ -1,43 +0,0 @@ -// -// MOPUBAVPlayerView.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MOPUBAVPlayerView.h" - -@implementation MOPUBAVPlayerView - -+ (Class)layerClass -{ - return [AVPlayerLayer class]; -} - -- (AVPlayer *)player -{ - AVPlayerLayer *playerLayer = (AVPlayerLayer *)self.layer; - return playerLayer.player; -} - -- (void)setPlayer:(AVPlayer *)player -{ - AVPlayerLayer *playerLayer = (AVPlayerLayer *)self.layer; - playerLayer.player = player; -} - -- (NSString *)videoGravity -{ - AVPlayerLayer *playerLayer = (AVPlayerLayer *)self.layer; - return playerLayer.videoGravity; -} - -- (void)setVideoGravity:(NSString *)videoGravity -{ - AVPlayerLayer *playerLayer = (AVPlayerLayer *)self.layer; - playerLayer.videoGravity = videoGravity; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBActivityIndicatorView.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBActivityIndicatorView.h deleted file mode 100644 index 3d5486b67b..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBActivityIndicatorView.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// MOPUBActivityIndicatorView.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@interface MOPUBActivityIndicatorView : UIView - -- (void)startAnimating; -- (void)stopAnimating; -- (BOOL)isAnimating; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBActivityIndicatorView.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBActivityIndicatorView.m deleted file mode 100644 index b2bbd408ba..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBActivityIndicatorView.m +++ /dev/null @@ -1,59 +0,0 @@ -// -// MOPUBActivityIndicatorView.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MOPUBActivityIndicatorView.h" -#import "MPGlobal.h" -#import "UIColor+MPAdditions.h" - -static NSString * const kSpinnerBgColor = @"#000000"; -static CGFloat const kSpinnerAlpha = 0.5f; -static CGFloat const kSpinnerCornerRadius = 4.0f; - -@interface MOPUBActivityIndicatorView() - -@property (nonatomic) UIActivityIndicatorView *activityIndicator; -@property (nonatomic) UIView *bgView; - -@end - -@implementation MOPUBActivityIndicatorView - -- (instancetype)initWithFrame:(CGRect)frame -{ - if (self = [super initWithFrame:frame]) { - _bgView = [[UIView alloc] initWithFrame:frame]; - _bgView.backgroundColor = [UIColor mp_colorFromHexString:kSpinnerBgColor alpha:kSpinnerAlpha]; - _bgView.layer.cornerRadius = kSpinnerCornerRadius; - [self addSubview:_bgView]; - - _activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite]; - _activityIndicator.center = self.center; - _activityIndicator.frame = CGRectIntegral(_activityIndicator.frame); - [self addSubview:_activityIndicator]; - } - return self; -} - -- (void)startAnimating -{ - self.bgView.hidden = NO; - [self.activityIndicator startAnimating]; -} - -- (void)stopAnimating -{ - self.bgView.hidden = YES; - [self.activityIndicator stopAnimating]; -} - -- (BOOL)isAnimating -{ - return self.activityIndicator.isAnimating; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBFullscreenPlayerViewController.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBFullscreenPlayerViewController.h deleted file mode 100644 index c7cf73cab8..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBFullscreenPlayerViewController.h +++ /dev/null @@ -1,33 +0,0 @@ -// -// MOPUBFullscreenPlayerViewController.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@class MOPUBPlayerViewController; -@class MOPUBPlayerView; -@class MOPUBFullscreenPlayerViewController; - -@protocol MOPUBFullscreenPlayerViewControllerDelegate - -- (void)playerDidProgressToTime:(NSTimeInterval)playbackTime; -- (void)ctaTapped:(MOPUBFullscreenPlayerViewController *)viewController; -- (void)fullscreenPlayerWillLeaveApplication:(MOPUBFullscreenPlayerViewController *)viewController; - -@end - -typedef void (^MOPUBFullScreenPlayerViewControllerDismissBlock)(UIView *originalParentView); - -@interface MOPUBFullscreenPlayerViewController : UIViewController - -@property (nonatomic) MOPUBPlayerView *playerView; - -@property (nonatomic, weak) id delegate; - -- (instancetype)initWithVideoPlayer:(MOPUBPlayerViewController *)playerController nativeAdProperties:(NSDictionary *)properties dismissBlock:(MOPUBFullScreenPlayerViewControllerDismissBlock)dismiss; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBFullscreenPlayerViewController.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBFullscreenPlayerViewController.m deleted file mode 100644 index 15d2982cb9..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBFullscreenPlayerViewController.m +++ /dev/null @@ -1,411 +0,0 @@ -// -// MOPUBFullscreenPlayerViewController.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MOPUBFullscreenPlayerViewController.h" -#import "MOPUBPlayerView.h" -#import "MOPUBPlayerViewController.h" -#import "MPAdDestinationDisplayAgent.h" -#import "MPCoreInstanceProvider.h" -#import "MPExtendedHitBoxButton.h" -#import "MPHTTPNetworkSession.h" -#import "MPGlobal.h" -#import "MPLogging.h" -#import "MPMemoryCache.h" -#import "MPNativeAdConstants.h" -#import "MPURLRequest.h" -#import "MOPUBActivityIndicatorView.h" -#import "UIView+MPAdditions.h" -#import "UIColor+MPAdditions.h" - -static CGFloat const kPrivacyIconFullscreenLeftMargin = 16.0f; -static CGFloat const kPrivacyIconFullscreenTopMargin = 16.0f; -static CGFloat const kPrivacyIconSize = 16.0f; -static CGFloat const kCloseButtonRightMargin = 16.0f; -static CGFloat const kDefaultButtonTouchAreaInsets = 10.0f; - -static NSString * const kCloseButtonImage = @"MPCloseBtn.png"; -static NSString * const kCtaButtonTitleText = @"Learn More"; -static CGFloat const kCtaButtonTopMarginPortrait = 15.0f; -static CGFloat const kCtaButtonTrailingMarginLandscape = 15.0f; -static CGFloat const kCtaButtonBottomMarginLandscape = 15.0f; -static CGFloat const kCtaButtonBottomCornerRadius = 4.0f; -static CGFloat const kCtaButtonBottomBorderWidth = 0.5f; -static CGFloat const kCtaButtonBottomFontSize = 18.0f; -static CGFloat const kCtaButtonContentInsetsHorizontal = 35.0f; -static CGFloat const kCtaButtonContentInsetsVertical = 10.0f; -static CGFloat const kCtaButtonBackgroundAlpha = 0.2f; -static NSString * const kCtaButtonBackgroundColor = @"#000000"; - -static NSString * const kTopGradientColor = @"#000000"; -static NSString * const kBottomGradientColor= @"#000000"; -static CGFloat const kTopGradientAlpha = 0.4f; -static CGFloat const kBottomGradientAlpha = 0.0f; -static CGFloat const kGradientHeight = 42; - -static CGFloat const kStallSpinnerSize = 35.0f; - -@interface MOPUBFullscreenPlayerViewController () - -// UI components -@property (nonatomic, strong) MPExtendedHitBoxButton *privacyButton; -@property (nonatomic, strong) MPExtendedHitBoxButton *closeButton; -@property (nonatomic, strong) MPExtendedHitBoxButton *ctaButton; -@property (nonatomic) MOPUBActivityIndicatorView *stallSpinner; -@property (nonatomic) UIActivityIndicatorView *playerNotReadySpinner; -@property (nonatomic) UIView *gradientView; -@property (nonatomic) CAGradientLayer *gradient; - -@property (nonatomic) MOPUBPlayerViewController *playerController; -@property (nonatomic) UIView *originalParentView; -@property (nonatomic) id displayAgent; -@property (nonatomic, copy) MOPUBFullScreenPlayerViewControllerDismissBlock dismissBlock; - -// Overrides -@property (nonatomic, copy) NSString * overridePrivacyIcon; -@property (nonatomic, strong) UIImage * overridePrivacyIconImage; -@property (nonatomic, copy) NSString * overridePrivacyClickUrl; - -@end - -@implementation MOPUBFullscreenPlayerViewController - -- (instancetype)initWithVideoPlayer:(MOPUBPlayerViewController *)playerController - nativeAdProperties:(NSDictionary *)properties - dismissBlock:(MOPUBFullScreenPlayerViewControllerDismissBlock)dismissBlock -{ - if (self = [super init]) { - _playerController = playerController; - _originalParentView = self.playerController.playerView.superview; - _playerView = self.playerController.playerView; - _playerController.delegate = self; - _dismissBlock = [dismissBlock copy]; - _displayAgent = [MPAdDestinationDisplayAgent agentWithDelegate:self]; - _overridePrivacyIcon = properties[kAdPrivacyIconImageUrlKey]; - _overridePrivacyIconImage = properties[kAdPrivacyIconUIImageKey]; - _overridePrivacyClickUrl = properties[kAdPrivacyIconClickUrlKey]; - self.modalPresentationStyle = UIModalPresentationFullScreen; - } - return self; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - [self.playerController willEnterFullscreen]; - - self.view.backgroundColor = [UIColor blackColor]; - [self.view addSubview:self.playerView]; - - [self createAndAddGradientView]; - - self.privacyButton = [MPExtendedHitBoxButton buttonWithType:UIButtonTypeCustom]; - self.privacyButton.frame = CGRectMake(0, 0, kPrivacyIconSize, kPrivacyIconSize); - [self setPrivacyIconImageForButton:self.privacyButton]; - [self.privacyButton addTarget:self action:@selector(privacyButtonTapped) forControlEvents:UIControlEventTouchUpInside]; - self.privacyButton.touchAreaInsets = UIEdgeInsetsMake(kDefaultButtonTouchAreaInsets, kDefaultButtonTouchAreaInsets, kDefaultButtonTouchAreaInsets, kDefaultButtonTouchAreaInsets); - [self.view addSubview:self.privacyButton]; - - self.closeButton = [MPExtendedHitBoxButton buttonWithType:UIButtonTypeCustom]; - [self.closeButton setImage:[UIImage imageNamed:MPResourcePathForResource(kCloseButtonImage)] forState:UIControlStateNormal]; - [self.closeButton addTarget:self action:@selector(closeButtonTapped) forControlEvents:UIControlEventTouchUpInside]; - self.closeButton.touchAreaInsets = UIEdgeInsetsMake(kDefaultButtonTouchAreaInsets, kDefaultButtonTouchAreaInsets, kDefaultButtonTouchAreaInsets, kDefaultButtonTouchAreaInsets); - [self.closeButton sizeToFit]; - [self.view addSubview:self.closeButton]; - - self.ctaButton = [MPExtendedHitBoxButton buttonWithType:UIButtonTypeCustom]; - [self.ctaButton setTitle:kCtaButtonTitleText forState:UIControlStateNormal]; - [self.ctaButton setBackgroundColor:[UIColor mp_colorFromHexString:kCtaButtonBackgroundColor alpha:kCtaButtonBackgroundAlpha]]; - [self.ctaButton addTarget:self action:@selector(ctaButtonTapped) forControlEvents:UIControlEventTouchUpInside]; - self.ctaButton.layer.cornerRadius = kCtaButtonBottomCornerRadius; - self.ctaButton.titleLabel.font = [UIFont fontWithName:@"HelveticaNeue" size:kCtaButtonBottomFontSize]; - [self.ctaButton setContentEdgeInsets:UIEdgeInsetsMake(kCtaButtonContentInsetsVertical, kCtaButtonContentInsetsHorizontal, kCtaButtonContentInsetsVertical, kCtaButtonContentInsetsHorizontal)]; - [[self.ctaButton layer] setBorderWidth:kCtaButtonBottomBorderWidth]; - [[self.ctaButton layer] setBorderColor:[UIColor whiteColor].CGColor]; - [self.ctaButton sizeToFit]; - [self.view addSubview:self.ctaButton]; - - if (!self.playerController.isReadyToPlay) { - [self createPlayerNotReadySpinner]; - } - - // Once the video enters fullscreen mode, we should resume the playback if it is paused. - if (self.playerController.paused) { - [self.playerController resume]; - } -} - -- (void)setPrivacyIconImageForButton:(UIButton *)button -{ - if (button == nil) { - return; - } - - // A cached privacy information icon image exists; it should be used. - if (self.overridePrivacyIconImage != nil) { - [button setImage:self.overridePrivacyIconImage forState:UIControlStateNormal]; - } - // No cached privacy information icon image was cached, but there is a URL for the - // icon. Go fetch the icon and populate the UIImageView when complete. - else if (self.overridePrivacyIcon != nil) { - NSURL *iconUrl = [NSURL URLWithString:self.overridePrivacyIcon]; - MPURLRequest *imageRequest = [MPURLRequest requestWithURL:iconUrl]; - - [MPHTTPNetworkSession startTaskWithHttpRequest:imageRequest responseHandler:^(NSData * _Nonnull data, NSHTTPURLResponse * _Nonnull response) { - // Cache the successfully retrieved icon image - [MPMemoryCache.sharedInstance setData:data forKey:self.overridePrivacyIcon]; - - // Populate the button - [button setImage:[UIImage imageWithData:data] forState:UIControlStateNormal]; - } errorHandler:^(NSError * _Nonnull error) { - MPLogInfo(@"Failed to retrieve privacy icon from %@", self.overridePrivacyIcon); - }]; - } - // Default to built in MoPub privacy icon. - else { - [button setImage:[UIImage imageNamed:MPResourcePathForResource(kPrivacyIconImageName)] forState:UIControlStateNormal]; - } -} - -- (void)createAndAddGradientView -{ - // Create the gradient - self.gradientView = [UIView new]; - self.gradientView.userInteractionEnabled = NO; - UIColor *topColor = [UIColor mp_colorFromHexString:kTopGradientColor alpha:kTopGradientAlpha]; - UIColor *bottomColor= [UIColor mp_colorFromHexString:kBottomGradientColor alpha:kBottomGradientAlpha]; - self.gradient = [CAGradientLayer layer]; - self.gradient.colors = [NSArray arrayWithObjects: (id)topColor.CGColor, (id)bottomColor.CGColor, nil]; - CGSize screenSize = MPScreenBounds().size; - self.gradient.frame = CGRectMake(0, 0, screenSize.width, kGradientHeight); - - //Add gradient to view - [self.gradientView.layer insertSublayer:self.gradient atIndex:0]; - [self.view addSubview:self.gradientView]; -} - -- (void)showStallSpinner -{ - if (!self.stallSpinner) { - self.stallSpinner = [[MOPUBActivityIndicatorView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, kStallSpinnerSize, kStallSpinnerSize)]; - [self.view addSubview:self.stallSpinner]; - } -} - -- (void)hideStallSpinner -{ - if (self.stallSpinner) { - [self.stallSpinner stopAnimating]; - [self.stallSpinner removeFromSuperview]; - } -} - -- (void)createPlayerNotReadySpinner -{ - if (!self.playerNotReadySpinner) { - self.playerNotReadySpinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite]; - [self.view addSubview:self.playerNotReadySpinner]; - [self.playerNotReadySpinner startAnimating]; - } -} - -- (void)removePlayerNotReadySpinner -{ - [self.playerNotReadySpinner stopAnimating]; - [self.playerNotReadySpinner removeFromSuperview]; - self.playerNotReadySpinner = nil; -} - -#pragma mark - Layout UI components - -- (void)viewWillLayoutSubviews -{ - [super viewWillLayoutSubviews]; - - [self layoutPlayerView]; - [self layoutPrivacyButton]; - [self layoutCloseButton]; - [self layoutCtaButton]; - [self layoutStallSpinner]; - [self layoutPlayerNotReadySpinner]; - [self layoutGradientView]; -} - -- (void)layoutPlayerView -{ - CGSize screenSize = MPScreenBounds().size; - self.playerView.videoGravity = AVLayerVideoGravityResizeAspectFill; - if (UIInterfaceOrientationIsLandscape(MPInterfaceOrientation())) { - self.playerView.frame = CGRectMake(0, 0, screenSize.width, screenSize.height); - } else { - self.playerView.mp_width = screenSize.width; - self.playerView.mp_height = self.playerView.mp_width/self.playerController.videoAspectRatio; - self.playerView.center = self.view.center; - self.playerView.frame = CGRectIntegral(self.playerView.frame); - } -} - -- (void)layoutPrivacyButton -{ - self.privacyButton.mp_x = kPrivacyIconFullscreenLeftMargin; - self.privacyButton.mp_y = kPrivacyIconFullscreenTopMargin; -} - -- (void)layoutCloseButton -{ - CGSize screenSize = MPScreenBounds().size; - self.closeButton.mp_x = screenSize.width - kCloseButtonRightMargin - self.closeButton.mp_width; - CGFloat privacyCenterY = self.privacyButton.frame.origin.y + self.privacyButton.mp_height/2.0f; - self.closeButton.mp_y = privacyCenterY - self.closeButton.mp_height/2.0f; - self.closeButton.frame = CGRectIntegral(self.closeButton.frame); -} - -- (void)layoutCtaButton -{ - CGRect applicationFrame = MPApplicationFrame(YES); - BOOL isLandscapeOrientation = applicationFrame.size.width > applicationFrame.size.height; - - if (isLandscapeOrientation) { - self.ctaButton.mp_x = CGRectGetMaxX(self.playerView.frame) - kCtaButtonTrailingMarginLandscape - CGRectGetWidth(self.ctaButton.bounds); - self.ctaButton.mp_y = CGRectGetMaxY(self.playerView.frame) - kCtaButtonBottomMarginLandscape - CGRectGetHeight(self.ctaButton.bounds); - } else { - self.ctaButton.center = self.view.center; - self.ctaButton.mp_y = CGRectGetMaxY(self.playerView.frame) + kCtaButtonTopMarginPortrait; - self.ctaButton.frame = CGRectIntegral(self.ctaButton.frame); - } -} - -- (void)layoutStallSpinner -{ - if (self.stallSpinner) { - CGSize screenSize = MPScreenBounds().size; - self.stallSpinner.center = CGPointMake(screenSize.width/2.0f, screenSize.height/2.0f); - self.stallSpinner.frame = CGRectIntegral(self.stallSpinner.frame); - } -} - -- (void)layoutPlayerNotReadySpinner -{ - if (self.playerNotReadySpinner) { - CGSize screenSize = MPScreenBounds().size; - self.playerNotReadySpinner.center = CGPointMake(screenSize.width/2.0f, screenSize.height/2.0f); - self.playerNotReadySpinner.frame = CGRectIntegral(self.playerNotReadySpinner.frame); - } -} - -- (void)layoutGradientView -{ - if (UIInterfaceOrientationIsLandscape(MPInterfaceOrientation())) { - self.gradientView.hidden = NO; - } else { - self.gradientView.hidden = YES; - } - CGSize screenSize = MPScreenBounds().size; - self.gradient.frame = CGRectMake(0, 0, screenSize.width, kGradientHeight); - self.gradientView.frame = CGRectMake(0, 0, screenSize.width, kGradientHeight); -} - -#pragma mark - button tap - -- (void)closeButtonTapped -{ - [self dismissViewControllerAnimated:NO completion:^{ - if (self.dismissBlock) { - self.dismissBlock(self.originalParentView); - } - }]; -} - -- (void)ctaButtonTapped -{ - if ([self.delegate respondsToSelector:@selector(ctaTapped:)]) { - [self.delegate ctaTapped:self]; - } - [self.displayAgent displayDestinationForURL:self.playerController.defaultActionURL]; -} - -- (void)privacyButtonTapped -{ - NSURL *defaultPrivacyClickUrl = [NSURL URLWithString:kPrivacyIconTapDestinationURL]; - NSURL *overridePrivacyClickUrl = ({ - NSString *url = self.overridePrivacyClickUrl; - (url != nil ? [NSURL URLWithString:url] : nil); - }); - - [self.displayAgent displayDestinationForURL:(overridePrivacyClickUrl != nil ? overridePrivacyClickUrl : defaultPrivacyClickUrl)]; -} - -#pragma mark - MOPUBPlayerViewControllerDelegate - -- (void)playerPlaybackDidStart:(MOPUBPlayerViewController *)player -{ - [self removePlayerNotReadySpinner]; -} - -- (void)playerViewController:(MOPUBPlayerViewController *)playerViewController willShowReplayView:(MOPUBPlayerView *)view -{ - [self.view bringSubviewToFront:self.privacyButton]; -} - -- (void)playerViewController:(MOPUBPlayerViewController *)playerViewController didStall:(MOPUBAVPlayer *)player -{ - if (self.stallSpinner) { - if (!self.stallSpinner.superview) { - [self.view addSubview:self.stallSpinner]; - } - if (!self.stallSpinner.isAnimating) { - [self.stallSpinner startAnimating]; - } - } else { - [self showStallSpinner]; - [self.stallSpinner startAnimating]; - } -} - -- (void)playerViewController:(MOPUBPlayerViewController *)playerViewController didRecoverFromStall:(MOPUBAVPlayer *)player -{ - [self hideStallSpinner]; -} - -- (void)playerDidProgressToTime:(NSTimeInterval)playbackTime -{ - if ([self.delegate respondsToSelector:@selector(playerDidProgressToTime:)]) { - [self.delegate playerDidProgressToTime:playbackTime]; - } -} - -#pragma mark - - -- (UIViewController *)viewControllerForPresentingModalView -{ - return self; -} - -- (void)displayAgentWillPresentModal -{ - [self.playerController pause]; -} - -- (void)displayAgentWillLeaveApplication -{ - [self.playerController pause]; - [self.delegate fullscreenPlayerWillLeaveApplication:self]; -} - -- (void)displayAgentDidDismissModal -{ - [self.playerController resume]; -} - -- (BOOL)prefersStatusBarHidden -{ - return YES; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoAdAdapter.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoAdAdapter.h deleted file mode 100644 index 0b6fa275e0..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoAdAdapter.h +++ /dev/null @@ -1,26 +0,0 @@ -// -// MOPUBNativeVideoAdAdapter.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPNativeAdAdapter.h" - -@class MPAdConfiguration; - -@interface MOPUBNativeVideoAdAdapter : NSObject - -@property (nonatomic, weak) id delegate; -@property (nonatomic, readonly) NSArray *impressionTrackerURLs; -@property (nonatomic, readonly) NSArray *clickTrackerURLs; -@property (nonatomic) MPAdConfiguration *adConfiguration; - -- (instancetype)initWithAdProperties:(NSMutableDictionary *)properties; - -- (void)handleVideoViewImpression; -- (void)handleVideoViewClick; -- (void)handleVideoHasProgressedToTime:(NSTimeInterval)playbackTime; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoAdAdapter.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoAdAdapter.m deleted file mode 100644 index 24456d8f0d..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoAdAdapter.m +++ /dev/null @@ -1,232 +0,0 @@ -// -// MOPUBNativeVideoAdAdapter.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MOPUBNativeVideoAdAdapter.h" -#import "MOPUBNativeVideoAdConfigValues.h" -#import "MPAdDestinationDisplayAgent.h" -#import "MPAdImpressionTimer.h" -#import "MPCoreInstanceProvider.h" -#import "MPLogging.h" -#import "MPMemoryCache.h" -#import "MPNativeAdConstants.h" -#import "MPNativeAdError.h" - -@interface MOPUBNativeVideoAdAdapter() - -@property (nonatomic) MPAdImpressionTimer *impressionTimer; -@property (nonatomic, strong) id destinationDisplayAgent; - -@end - -@implementation MOPUBNativeVideoAdAdapter - -// synthesize for `MPNativeAdAdapter` protocol -@synthesize properties = _properties; -@synthesize defaultActionURL = _defaultActionURL; - -- (instancetype)initWithAdProperties:(NSMutableDictionary *)properties -{ - if (self = [super init]) { - - // Let's make sure the data types of all the provided native ad properties are strings before creating the adapter. - - NSArray *stringKeysToCheck = @[kAdIconImageKey, kAdMainImageKey, kAdTextKey, kAdSponsoredByCompanyKey, kAdTitleKey, kAdCTATextKey, kVASTVideoKey, kAdPrivacyIconImageUrlKey, kAdPrivacyIconClickUrlKey]; - - for (NSString *key in stringKeysToCheck) { - id value = properties[key]; - if (value != nil && ![value isKindOfClass:[NSString class]]) { - return nil; - } - } - - // Validate that the views are actually views - NSArray * viewKeysToCheck = @[kAdIconImageViewKey, kAdMainMediaViewKey]; - for (NSString * key in viewKeysToCheck) { - id value = properties[key]; - if (value != nil && ![value isKindOfClass:[UIView class]]) { - return nil; - } - } - - BOOL valid = YES; - NSObject *clickTracker = [properties objectForKey:kClickTrackerURLKey]; - - // The click tracker could either be a single URL or an array of URLS. - if ([clickTracker isKindOfClass:[NSArray class]]) { - _clickTrackerURLs = MPConvertStringArrayToURLArray((NSArray *)clickTracker); - } else if ([clickTracker isKindOfClass:[NSString class]]) { - NSURL *url = [NSURL URLWithString:(NSString *)clickTracker]; - if (url) { - _clickTrackerURLs = @[ url ]; - } else { - valid = NO; - } - } else { - valid = NO; - } - - _defaultActionURL = [NSURL URLWithString:[properties objectForKey:kDefaultActionURLKey]]; - - [properties removeObjectsForKeys:[NSArray arrayWithObjects:kClickTrackerURLKey, kDefaultActionURLKey, nil]]; - _properties = properties; - - if (!valid) { - return nil; - } - - // The privacy icon has been overridden by the server. We will use its image instead if it is - // already cached. Otherwise, we will defer loading the image until later. - NSString * privacyIconUrl = properties[kAdPrivacyIconImageUrlKey]; - if (privacyIconUrl != nil) { - UIImage * cachedIcon = [MPMemoryCache.sharedInstance imageForKey:privacyIconUrl]; - if (cachedIcon != nil) { - [properties setObject:cachedIcon forKey:kAdPrivacyIconUIImageKey]; - } - } - // Use the default MoPub privacy icon bundled with the SDK. - else { - // Add the privacy icon settings to our properties dictionary. - // Path will not change, so load path and image statically. - static NSString *privacyIconImagePath = nil; - static UIImage *privacyIconImage = nil; - if (!privacyIconImagePath || !privacyIconImage) { - privacyIconImagePath = MPResourcePathForResource(kPrivacyIconImageName); - privacyIconImage = privacyIconImagePath ? [UIImage imageWithContentsOfFile:privacyIconImagePath] : nil; - } - if (privacyIconImagePath) { - [properties setObject:privacyIconImagePath forKey:kAdPrivacyIconImageUrlKey]; - } - if (privacyIconImage) { - [properties setObject:privacyIconImage forKey:kAdPrivacyIconUIImageKey]; - } - } - - _destinationDisplayAgent = [MPAdDestinationDisplayAgent agentWithDelegate:self]; - - _impressionTimer = nil; - } - - return self; -} - -- (void)dealloc -{ - [self removeStaticImpressionTimer]; - [_destinationDisplayAgent cancel]; - [_destinationDisplayAgent setDelegate:nil]; - _delegate = nil; -} - -#pragma mark - Private - -- (void)removeStaticImpressionTimer -{ - _impressionTimer.delegate = nil; - _impressionTimer = nil; -} - -#pragma mark - - -- (void)willAttachToView:(UIView *)view -{ - [self removeStaticImpressionTimer]; - - // Set up an impression timer that will fire the mopub impression if the video fails to play prior to meeting the video impression tracking requirements. - MOPUBNativeVideoAdConfigValues *nativeVideoAdConfig = [self.properties objectForKey:kNativeAdConfigKey]; - - // If we have a valid pixel value, use it to track the impression. If not, use percentage instead. - if (nativeVideoAdConfig.isImpressionMinVisiblePixelsValid) { - self.impressionTimer = [[MPAdImpressionTimer alloc] initWithRequiredSecondsForImpression:nativeVideoAdConfig.impressionMinVisibleSeconds - requiredViewVisibilityPixels:nativeVideoAdConfig.impressionMinVisiblePixels]; - } else { - // impressionMinVisiblePercent is an integer (a value of 50 means 50%) while the impression timer takes in a float (.50 means 50%) so we have to multiply it by .01f. - self.impressionTimer = [[MPAdImpressionTimer alloc] initWithRequiredSecondsForImpression:nativeVideoAdConfig.impressionMinVisibleSeconds - requiredViewVisibilityPercentage:nativeVideoAdConfig.impressionMinVisiblePercent * 0.01f]; - } - self.impressionTimer.delegate = self; - - [self.impressionTimer startTrackingView:view]; -} - -- (void)displayContentForURL:(NSURL *)URL rootViewController:(UIViewController *)controller -{ - if (!controller) { - return; - } - - if (!URL || ![URL isKindOfClass:[NSURL class]] || ![URL.absoluteString length]) { - return; - } - - [self.destinationDisplayAgent displayDestinationForURL:URL]; -} - -#pragma mark - Privacy Icon - -- (void)displayContentForDAAIconTap -{ - NSURL *defaultPrivacyClickUrl = [NSURL URLWithString:kPrivacyIconTapDestinationURL]; - NSURL *overridePrivacyClickUrl = ({ - NSString *url = self.properties[kAdPrivacyIconClickUrlKey]; - (url != nil ? [NSURL URLWithString:url] : nil); - }); - - [self.destinationDisplayAgent displayDestinationForURL:(overridePrivacyClickUrl != nil ? overridePrivacyClickUrl : defaultPrivacyClickUrl)]; -} - -#pragma mark - Impression and click tracking. Renderer calls those two methods - -- (void)handleVideoViewImpression -{ - [self.delegate nativeAdWillLogImpression:self]; -} - -- (void)handleVideoViewClick -{ - [self.delegate nativeAdDidClick:self]; -} - -- (void)handleVideoHasProgressedToTime:(NSTimeInterval)playbackTime -{ - // If the video makes progress, don't allow static impression tracking. - self.impressionTimer.delegate = nil; - self.impressionTimer = nil; -} - -#pragma mark - - -- (void)adViewWillLogImpression:(UIView *)adView -{ - // We'll fire a static impression if the video hasn't started playing by the time the static impression timer has met its requirements. - [self.delegate nativeAdWillLogImpression:self]; -} - -#pragma mark - - -- (UIViewController *)viewControllerForPresentingModalView -{ - return [self.delegate viewControllerForPresentingModalView]; -} - -- (void)displayAgentWillPresentModal -{ - [self.delegate nativeAdWillPresentModalForAdapter:self]; -} - -- (void)displayAgentWillLeaveApplication -{ - [self.delegate nativeAdWillLeaveApplicationFromAdapter:self]; -} - -- (void)displayAgentDidDismissModal -{ - [self.delegate nativeAdDidDismissModalForAdapter:self]; -} - -// -adConfiguration delegate method is automatically implemented via the adConfiguration property declaration. -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoAdConfigValues.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoAdConfigValues.h deleted file mode 100644 index df8470d6de..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoAdConfigValues.h +++ /dev/null @@ -1,32 +0,0 @@ -// -// MOPUBNativeVideoAdConfigValues.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPNativeAdConfigValues.h" - -@interface MOPUBNativeVideoAdConfigValues : MPNativeAdConfigValues - -@property (nonatomic, readonly) NSInteger playVisiblePercent; -@property (nonatomic, readonly) NSInteger pauseVisiblePercent; -@property (nonatomic, readonly) NSTimeInterval maxBufferingTime; -@property (nonatomic, readonly) NSDictionary *trackers; - -- (instancetype)initWithPlayVisiblePercent:(NSInteger)playVisiblePercent - pauseVisiblePercent:(NSInteger)pauseVisiblePercent - impressionMinVisiblePixels:(CGFloat)impressionMinVisiblePixels - impressionMinVisiblePercent:(NSInteger)impressionMinVisiblePercent - impressionMinVisibleSeconds:(NSTimeInterval)impressionMinVisibleSeconds - maxBufferingTime:(NSTimeInterval)maxBufferingTime - trackers:(NSDictionary *)trackers NS_DESIGNATED_INITIALIZER; - -@property (nonatomic, readonly) BOOL isValid; - -- (instancetype)initWithImpressionMinVisiblePixels:(CGFloat)impressionMinVisiblePixels - impressionMinVisiblePercent:(NSInteger)impressionMinVisiblePercent - impressionMinVisibleSeconds:(NSTimeInterval)impressionMinVisibleSeconds __attribute__((unavailable("initWithImpressionMinVisiblePixels:impressionMinVisiblePercent:impressionMinVisibleSeconds: not available"))); - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoAdConfigValues.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoAdConfigValues.m deleted file mode 100644 index cc09eafc32..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoAdConfigValues.m +++ /dev/null @@ -1,43 +0,0 @@ -// -// MOPUBNativeVideoAdConfigValues.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MOPUBNativeVideoAdConfigValues.h" -#import "MPNativeAdConfigValues+Internal.h" - -@implementation MOPUBNativeVideoAdConfigValues - -- (instancetype)initWithPlayVisiblePercent:(NSInteger)playVisiblePercent - pauseVisiblePercent:(NSInteger)pauseVisiblePercent - impressionMinVisiblePixels:(CGFloat)impressionMinVisiblePixels - impressionMinVisiblePercent:(NSInteger)impressionMinVisiblePercent - impressionMinVisibleSeconds:(NSTimeInterval)impressionMinVisibleSeconds - maxBufferingTime:(NSTimeInterval)maxBufferingTime - trackers:(NSDictionary *)trackers -{ - self = [super initWithImpressionMinVisiblePixels:impressionMinVisiblePixels - impressionMinVisiblePercent:impressionMinVisiblePercent - impressionMinVisibleSeconds:impressionMinVisibleSeconds]; - if (self) { - _playVisiblePercent = playVisiblePercent; - _pauseVisiblePercent = pauseVisiblePercent; - _maxBufferingTime = maxBufferingTime; - _trackers = trackers; - } - return self; -} - -- (BOOL)isValid -{ - return ((self.isImpressionMinVisiblePixelsValid || self.isImpressionMinVisiblePercentValid) && // OR because we only need pixels or percent, not both - self.isImpressionMinVisibleSecondsValid && - [self isValidPercentage:self.playVisiblePercent] && - [self isValidPercentage:self.pauseVisiblePercent] && - [self isValidTimeInterval:self.maxBufferingTime]); -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoCustomEvent.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoCustomEvent.h deleted file mode 100644 index 457e9c2f68..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoCustomEvent.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// MOPUBNativeVideoCustomEvent.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPNativeCustomEvent.h" - -@interface MOPUBNativeVideoCustomEvent : MPNativeCustomEvent - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoCustomEvent.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoCustomEvent.m deleted file mode 100644 index 4403679949..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoCustomEvent.m +++ /dev/null @@ -1,95 +0,0 @@ -// -// MOPUBNativeVideoCustomEvent.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPNativeAd.h" -#import "MPNativeAdError.h" -#import "MPNativeAdUtils.h" -#import "MPNativeAdConstants.h" -#import "MOPUBNativeVideoAdAdapter.h" -#import "MOPUBNativeVideoAdConfigValues.h" -#import "MOPUBNativeVideoCustomEvent.h" -#import "MPLogging.h" -#import "MPVideoConfig.h" -#import "MPVASTManager.h" -#import "MPNativeAd+Internal.h" - -@implementation MOPUBNativeVideoCustomEvent - -- (void)handleSuccessfulVastParsing:(MPVASTResponse *)mpVastResponse info:(NSDictionary *)info -{ - NSString * adUnitId = info[kNativeAdUnitId]; - NSMutableDictionary *infoMutableCopy = [info mutableCopy]; - [infoMutableCopy setObject:[[MPVideoConfig alloc] initWithVASTResponse:mpVastResponse additionalTrackers:((MOPUBNativeVideoAdConfigValues *)info[kNativeAdConfigKey]).trackers] forKey:kVideoConfigKey]; - MOPUBNativeVideoAdAdapter *adAdapter = [[MOPUBNativeVideoAdAdapter alloc] initWithAdProperties:infoMutableCopy]; - if (adAdapter.properties) { - MPNativeAd *interfaceAd = [[MPNativeAd alloc] initWithAdAdapter:adAdapter]; - [interfaceAd.impressionTrackerURLs addObjectsFromArray:adAdapter.impressionTrackerURLs]; - [interfaceAd.clickTrackerURLs addObjectsFromArray:adAdapter.clickTrackerURLs]; - // Get the image urls so we can download them prior to returning the ad. - NSMutableArray *imageURLs = [NSMutableArray array]; - for (NSString *key in [info allKeys]) { - if ([[key lowercaseString] hasSuffix:@"image"] && [[info objectForKey:key] isKindOfClass:[NSString class]]) { - NSString * urlString = [info objectForKey:key]; - // Empty URL string is acceptable. We only care about non-empty string that is not a valid URL. - if (urlString.length != 0 - && ![MPNativeAdUtils addURLString:urlString toURLArray:imageURLs]) { - NSError * error = MPNativeAdNSErrorForInvalidImageURL(); - MPLogAdEvent([MPLogEvent adLoadFailedForAdapter:NSStringFromClass(self.class) error:error], adUnitId); - [self.delegate nativeCustomEvent:self didFailToLoadAdWithError:error]; - } - } - } - - [super precacheImagesWithURLs:imageURLs completionBlock:^(NSArray *errors) { - if (errors) { - NSError * error = MPNativeAdNSErrorForImageDownloadFailure(); - MPLogAdEvent([MPLogEvent adLoadFailedForAdapter:NSStringFromClass(self.class) error:error], adUnitId); - [self.delegate nativeCustomEvent:self didFailToLoadAdWithError:error]; - } else { - MPLogAdEvent([MPLogEvent adLoadSuccessForAdapter:NSStringFromClass(self.class)], adUnitId); - [self.delegate nativeCustomEvent:self didLoadAd:interfaceAd]; - } - }]; - } else { - NSError * error = MPNativeAdNSErrorForInvalidAdServerResponse(nil); - MPLogAdEvent([MPLogEvent adLoadFailedForAdapter:NSStringFromClass(self.class) error:error], adUnitId); - [self.delegate nativeCustomEvent:self didFailToLoadAdWithError:error]; - } -} - -- (void)requestAdWithCustomEventInfo:(NSDictionary *)info adMarkup:(NSString *)adMarkup -{ - NSString * adUnitId = info[kNativeAdUnitId]; - MPLogAdEvent([MPLogEvent adLoadAttemptForAdapter:NSStringFromClass(self.class) dspCreativeId:info[kNativeAdDspCreativeId] dspName:info[kNativeAdDspName]], adUnitId); - - MOPUBNativeVideoAdConfigValues *nativeVideoAdConfigValues = [info objectForKey:kNativeAdConfigKey]; - if (nativeVideoAdConfigValues && [nativeVideoAdConfigValues isValid]) { - NSString *vastString = [info objectForKey:kVASTVideoKey]; - if (vastString) { - [MPVASTManager fetchVASTWithData:[vastString dataUsingEncoding:NSUTF8StringEncoding] - completion: ^(MPVASTResponse *mpVastResponse, NSError *error) { - if (error) { - MPLogAdEvent([MPLogEvent adLoadFailedForAdapter:NSStringFromClass(self.class) error:error], adUnitId); - [self.delegate nativeCustomEvent:self didFailToLoadAdWithError:MPNativeAdNSErrorForVASTParsingFailure()]; - } else { - [self handleSuccessfulVastParsing:mpVastResponse info:info]; - } - }]; - } else { - NSError * error = MPNativeAdNSErrorForVASTParsingFailure(); - MPLogAdEvent([MPLogEvent adLoadFailedForAdapter:NSStringFromClass(self.class) error:error], adUnitId); - [self.delegate nativeCustomEvent:self didFailToLoadAdWithError:error]; - } - } else { - NSError * error = MPNativeAdNSErrorForVideoConfigInvalid(); - MPLogAdEvent([MPLogEvent adLoadFailedForAdapter:NSStringFromClass(self.class) error:error], adUnitId); - [self.delegate nativeCustomEvent:self didFailToLoadAdWithError:error]; - } -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBPlayerManager.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBPlayerManager.h deleted file mode 100644 index b35fec462f..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBPlayerManager.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// MOPUBPlayerManager.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@class MOPUBPlayerViewController; -@class MOPUBNativeVideoAdConfigValues; -@class MPVideoConfig; - -@interface MOPUBPlayerManager : NSObject - -+ (MOPUBPlayerManager *)sharedInstance; -- (void)disposePlayerViewController; - -- (MOPUBPlayerViewController *)playerViewControllerWithVideoConfig:(MPVideoConfig *)videoConfig nativeVideoAdConfig:(MOPUBNativeVideoAdConfigValues *)nativeVideoAdConfig; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBPlayerManager.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBPlayerManager.m deleted file mode 100644 index a4b0a3f643..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBPlayerManager.m +++ /dev/null @@ -1,49 +0,0 @@ -// -// MOPUBPlayerManager.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MOPUBPlayerManager.h" -#import "MOPUBPlayerViewController.h" -#import "MPVideoConfig.h" -#import "MOPUBNativeVideoAdConfigValues.h" - -@interface MOPUBPlayerManager() - -@property (nonatomic) MOPUBPlayerViewController *currentPlayerViewController; - -@end - -@implementation MOPUBPlayerManager - -+ (MOPUBPlayerManager *)sharedInstance -{ - static MOPUBPlayerManager *sharedInstance; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - sharedInstance = [[MOPUBPlayerManager alloc] init]; - }); - return sharedInstance; -} - -- (void)disposePlayerViewController -{ - [self.currentPlayerViewController dispose]; - self.currentPlayerViewController = nil; -} - -- (MOPUBPlayerViewController *)playerViewControllerWithVideoConfig:(MPVideoConfig *)videoConfig nativeVideoAdConfig:(MOPUBNativeVideoAdConfigValues *)nativeVideoAdConfig -{ - // make sure only one instance of avPlayer at a time - if (self.currentPlayerViewController) { - [self disposePlayerViewController]; - } - - self.currentPlayerViewController = [[MOPUBPlayerViewController alloc] initWithVideoConfig:videoConfig nativeVideoAdConfig:nativeVideoAdConfig]; - return self.currentPlayerViewController; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBPlayerView.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBPlayerView.h deleted file mode 100644 index 91e0bf7a89..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBPlayerView.h +++ /dev/null @@ -1,41 +0,0 @@ -// -// MOPUBPlayerView.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MOPUBAVPlayer.h" - -@class MOPUBPlayerView; - -typedef NS_ENUM(NSUInteger, MOPUBPlayerDisplayMode) { - MOPUBPlayerDisplayModeInline = 0, - MOPUBPlayerDisplayModeFullscreen -}; - -@protocol MOPUBPlayerViewDelegate - -- (void)playerViewDidTapReplayButton:(MOPUBPlayerView *)view; -- (void)playerViewWillShowReplayView:(MOPUBPlayerView *)view; -- (void)playerViewWillEnterFullscreen:(MOPUBPlayerView *)view; - -@end - -@interface MOPUBPlayerView : UIControl - -@property (nonatomic) MOPUBAVPlayer *avPlayer; -@property (nonatomic) MOPUBPlayerDisplayMode displayMode; -@property (nonatomic, copy) NSString *videoGravity; - -- (instancetype)initWithFrame:(CGRect)frame delegate:(id)delegate; - -- (void)createPlayerView; -- (void)playbackTimeDidProgress; -- (void)playbackDidFinish; -- (void)setProgressBarVisible:(BOOL)visible; -- (void)handleVideoInitFailure; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBPlayerView.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBPlayerView.m deleted file mode 100644 index 2f4bbf288f..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBPlayerView.m +++ /dev/null @@ -1,234 +0,0 @@ -// -// MOPUBPlayerView.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPGlobal.h" -#import "MPLogging.h" -#import "MOPUBAVPlayerView.h" -#import "MOPUBAVPlayer.h" -#import "MOPUBAVPlayerView.h" -#import "MOPUBPlayerView.h" -#import "MOPUBPlayerViewController.h" -#import "MOPUBReplayView.h" -#import "UIView+MPAdditions.h" -#import "UIColor+MPAdditions.h" - -static NSString * const kProgressBarFillColor = @"#FFCC4D"; -static CGFloat const kVideoProgressBarHeight = 4.0f; - -// gradient -static NSString * const kTopGradientColor = @"#000000"; -static NSString * const kBottomGradientColor = @"#000000"; -static CGFloat const kTopGradientAlpha = 0.0f; -static CGFloat const kBottomGradientAlpha = 0.4f; -static CGFloat const kGradientViewHeight = 25.0f; - -@interface MOPUBPlayerView() - -// UI elements -@property (nonatomic) MOPUBAVPlayerView *avView; -@property (nonatomic) MOPUBReplayView *replayView; -@property (nonatomic) UIButton *replayVideoButton; -@property (nonatomic) UIView *progressBarBackground; -@property (nonatomic) UIView *progressBar; -@property (nonatomic) UIView *gradientView; -@property (nonatomic) CAGradientLayer *gradient; - -@property (nonatomic) UITapGestureRecognizer *tapGestureRecognizer; -@property (nonatomic, weak) id delegate; - -@end - -@implementation MOPUBPlayerView - -- (instancetype)initWithFrame:(CGRect)frame delegate:(id)delegate -{ - self = [super initWithFrame:frame]; - if (self) { - _delegate = delegate; - - _tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(avPlayerTapped)]; - [self addGestureRecognizer:_tapGestureRecognizer]; - - self.accessibilityLabel = @"MoPub Native Video"; - } - return self; -} - -- (void)dealloc -{ - [self.tapGestureRecognizer removeTarget:self action:@selector(avPlayerTapped)]; -} - -- (void)createPlayerView -{ - self.clipsToBounds = YES; - if (!self.gradientView && self.displayMode == MOPUBPlayerDisplayModeInline) { - // Create the gradient - self.gradientView = [UIView new]; - UIColor *topColor = [UIColor mp_colorFromHexString:kTopGradientColor alpha:kTopGradientAlpha]; - UIColor *bottomColor = [UIColor mp_colorFromHexString:kBottomGradientColor alpha:kBottomGradientAlpha]; - self.gradient = [CAGradientLayer layer]; - self.gradient.colors = [NSArray arrayWithObjects: (id)topColor.CGColor, (id)bottomColor.CGColor, nil]; - self.gradient.frame = CGRectMake(0, 0, CGRectGetWidth(self.bounds), kGradientViewHeight); - - //Add gradient to view - [self.gradientView.layer insertSublayer:self.gradient atIndex:0]; - [self addSubview:self.gradientView]; - } - - if (!self.progressBar) { - self.progressBar = [[UIView alloc] init]; - self.progressBarBackground = [[UIView alloc] init]; - [self addSubview:self.progressBarBackground]; - - self.progressBarBackground.backgroundColor = [UIColor colorWithRed:.5f green:.5f blue:.5f alpha:.5f]; - self.progressBar.backgroundColor = [UIColor mp_colorFromHexString:kProgressBarFillColor alpha:1.0f]; - [self addSubview:self.progressBar]; - } -} - -#pragma mark - set avPlayer - -- (void)setAvPlayer:(MOPUBAVPlayer *)player -{ - if (!player) { - MPLogInfo(@"Cannot set avPlayer to nil"); - return; - } - if (_avPlayer == player) { - return; - } - _avPlayer = player; - [_avView removeFromSuperview]; - _avView = [[MOPUBAVPlayerView alloc] initWithFrame:CGRectZero]; - _avView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; - self.videoGravity = AVLayerVideoGravityResizeAspectFill; - self.avView.player = self.avPlayer; - self.avView.frame = (CGRect){CGPointZero, self.bounds.size}; - [self insertSubview:_avView atIndex:0]; -} - -- (void)setVideoGravity:(NSString *)videoGravity -{ - ((AVPlayerLayer *)_avView.layer).videoGravity = videoGravity; -} - -// make the player view not clickable when initializing video failed. -- (void)handleVideoInitFailure -{ - [self removeGestureRecognizer:self.tapGestureRecognizer]; -} - -#pragma mark - Synchronize UI Elements - -- (void)playbackTimeDidProgress -{ - [self layoutProgressBar]; -} - -- (void)playbackDidFinish -{ - if (!self.replayView) { - self.replayView = [[MOPUBReplayView alloc] initWithFrame:self.avView.bounds displayMode:self.displayMode]; - __weak __typeof__(self) weakSelf = self; - self.replayView.actionBlock = ^(MOPUBReplayView *view) { - __strong __typeof__(self) strongSelf = weakSelf; - if ([strongSelf.delegate respondsToSelector:@selector(playerViewDidTapReplayButton:)]) { - [strongSelf.delegate playerViewDidTapReplayButton:strongSelf]; - } - [strongSelf.replayView removeFromSuperview]; - strongSelf.replayView = nil; - }; - [self addSubview:self.replayView]; - - if ([self.delegate respondsToSelector:@selector(playerViewWillShowReplayView:)]) { - [self.delegate playerViewWillShowReplayView:self]; - } - } -} - -- (void)setProgressBarVisible:(BOOL)visible -{ - self.progressBarBackground.hidden = !visible; - self.progressBar.hidden = !visible; -} - -#pragma mark - Touch event - -- (void)avPlayerTapped -{ - // Only trigger tap event in infeed mode - if (self.displayMode == MOPUBPlayerDisplayModeInline) { - self.displayMode = MOPUBPlayerDisplayModeFullscreen; - if ([self.delegate respondsToSelector:@selector(playerViewWillEnterFullscreen:)]) { - [self.delegate playerViewWillEnterFullscreen:self]; - } - [self setNeedsLayout]; - [self layoutIfNeeded]; - } -} - -#pragma mark - layout views - -- (void)layoutSubviews -{ - [super layoutSubviews]; - - [self layoutProgressBar]; - [self layoutGradientview]; - [self layoutReplayView]; -} - -- (void)layoutProgressBar -{ - if (self.avPlayer && !isnan(self.avPlayer.currentItemDuration)) { - CGFloat vcWidth = CGRectGetWidth(self.bounds); - CGFloat currentProgress = self.avPlayer.currentPlaybackTime/self.avPlayer.currentItemDuration; - if (currentProgress < 0) { - currentProgress = 0; - MPLogInfo(@"Progress shouldn't be < 0"); - } - if (currentProgress > 1) { - currentProgress = 1; - MPLogInfo(@"Progress shouldn't be > 1"); - } - - self.progressBar.frame = CGRectMake(0, CGRectGetMaxY(self.avView.frame)- kVideoProgressBarHeight, vcWidth * currentProgress, kVideoProgressBarHeight); - self.progressBarBackground.frame = CGRectMake(0, CGRectGetMaxY(self.avView.frame) - kVideoProgressBarHeight, vcWidth, kVideoProgressBarHeight); - } -} - - -- (void)layoutGradientview -{ - if (self.displayMode == MOPUBPlayerDisplayModeInline) { - self.gradientView.hidden = NO; - self.gradient.frame = CGRectMake(0, 0, CGRectGetWidth(self.bounds), kGradientViewHeight); - self.gradientView.frame = CGRectMake(0, CGRectGetMaxY(self.avView.frame) - kGradientViewHeight, CGRectGetWidth(self.bounds), kGradientViewHeight); - } else { - self.gradientView.hidden = YES; - } -} - -- (void)layoutReplayView -{ - if (self.replayView) { - CGSize appFrameSize = MPApplicationFrame(YES).size; - BOOL isLandscapeOrientation = appFrameSize.width > appFrameSize.height; - - if (isLandscapeOrientation && self.displayMode == MOPUBPlayerDisplayModeFullscreen) { - self.replayView.frame = CGRectMake(0, 0, appFrameSize.width, appFrameSize.height); - } else { - self.replayView.frame = self.avView.frame; - } - [self.replayView setNeedsLayout]; - [self.replayView layoutIfNeeded]; - } -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBPlayerViewController.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBPlayerViewController.h deleted file mode 100644 index e27bdb2e17..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBPlayerViewController.h +++ /dev/null @@ -1,77 +0,0 @@ -// -// MOPUBPlayerViewController.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MOPUBPlayerView.h" -#import "MPVASTTracking.h" - -@class AVPlayerItem; -@class MOPUBAVPlayer; -@class MOPUBPlayerViewController; -@class MOPUBNativeVideoAdConfigValues; -@class MPVASTTracking; -@class MPVideoConfig; - -@protocol MOPUBPlayerViewControllerDelegate - -@optional - -- (void)willEnterFullscreen:(MOPUBPlayerViewController *)viewController; -- (void)playerPlaybackWillStart:(MOPUBPlayerViewController *)player; -- (void)playerPlaybackDidStart:(MOPUBPlayerViewController *)player; -- (void)playerDidProgressToTime:(NSTimeInterval)playbackTime; -- (void)playerViewController:(MOPUBPlayerViewController *)playerViewController didTapReplayButton:(MOPUBPlayerView *)view; -- (void)playerViewController:(MOPUBPlayerViewController *)playerViewController willShowReplayView:(MOPUBPlayerView *)view; -- (void)playerViewController:(MOPUBPlayerViewController *)playerViewController didStall:(MOPUBAVPlayer *)player; -- (void)playerViewController:(MOPUBPlayerViewController *)playerViewController didRecoverFromStall:(MOPUBAVPlayer *)player; - -- (UIViewController *)viewControllerForPresentingModalView; - -@end - -@interface MOPUBPlayerViewController : UIViewController - -@property (nonatomic, readonly) MOPUBPlayerView *playerView; -@property (nonatomic, readonly) AVPlayerItem *playerItem; -@property (nonatomic, readonly) MOPUBAVPlayer *avPlayer; -@property (nonatomic, readonly) MPVASTTracking *vastTracking; -@property (nonatomic, readonly) CGFloat videoAspectRatio; -@property (nonatomic, readonly) MOPUBNativeVideoAdConfigValues *nativeVideoAdConfig; - -#pragma mark - Configurations/States -@property (nonatomic) MOPUBPlayerDisplayMode displayMode; -@property (nonatomic) BOOL muted; -@property (nonatomic) BOOL playing; -@property (nonatomic) BOOL paused; -@property (nonatomic) BOOL isReadyToPlay; -@property (nonatomic) BOOL disposed; - -#pragma mark - Call to action click tracking url -@property (nonatomic) NSURL *defaultActionURL; - -@property (nonatomic, weak) id delegate; - -#pragma mark - Initializer -- (instancetype)initWithVideoConfig:(MPVideoConfig *)videoConfig nativeVideoAdConfig:(MOPUBNativeVideoAdConfigValues *)nativeVideoAdConfig; -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; - -- (void)loadAndPlayVideo; -- (void)seekToTime:(NSTimeInterval)time; -- (void)pause; -- (void)resume; -- (void)dispose; - -- (BOOL)shouldStartNewPlayer; -- (BOOL)shouldResumePlayer; -- (BOOL)shouldPausePlayer; - -- (void)willEnterFullscreen; -- (void)willExitFullscreen; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBPlayerViewController.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBPlayerViewController.m deleted file mode 100644 index c071626ff0..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBPlayerViewController.m +++ /dev/null @@ -1,644 +0,0 @@ -// -// MOPUBPlayerViewController.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MOPUBAVPlayer.h" -#import "MOPUBFullscreenPlayerViewController.h" -#import "MOPUBPlayerViewController.h" -#import "MOPUBActivityIndicatorView.h" -#import "MPAdDestinationDisplayAgent.h" -#import "MPCoreInstanceProvider.h" -#import "MPExtendedHitBoxButton.h" -#import "MPGlobal.h" -#import "MPLogging.h" -#import "MOPUBNativeVideoAdConfigValues.h" -#import "MPVastTracking.h" -#import "MPVideoConfig.h" -#import "UIView+MPAdditions.h" -#import "MOPUBNativeVideoAdConfigValues.h" -#import "MPVideoConfig.h" - -#define kDefaultVideoAspectRatio 16.0f/9.0f - -static NSString * const kMutedButtonImage = @"MPMutedBtn.png"; -static NSString * const kUnmutedButtonImage = @"MPUnmutedBtn.png"; - -static NSString * const kTracksKey = @"tracks"; -static NSString * const kPlayableKey = @"playable"; - -// playerItem keys -static NSString * const kStatusKey = @"status"; -static NSString * const kCurrentItemKey = @"currentItem"; -static NSString * const kLoadedTimeRangesKey = @"loadedTimeRanges"; -static void *AudioControllerBufferingObservationContext = &AudioControllerBufferingObservationContext; - -// UI specifications -static CGFloat const kMuteIconInlineModeLeftMargin = 6.0f; -static CGFloat const kMuteIconInlineModeBottomMargin = 5.0f; -static CGFloat const kMuteIconInlineModeTouchAreaInsets = 25.0f; - -static CGFloat const kLoadingIndicatorTopMargin = 8.0f; -static CGFloat const kLoadingIndicatorRightMargin = 8.0f; - -// force resume playback in 3 seconds. player might get stuck due to stalled item -static CGFloat const kDelayPlayInSeconds = 3.0f; - -// We compare the buffered time to the length of the video to determine when it has been -// fully buffered. To account for rounding errors, allow a small error when making this -// calculation. -static const double kVideoFinishedBufferingAllowedError = 0.1; - -@interface MOPUBPlayerViewController() - -@property (nonatomic, strong) MPVideoConfig *videoConfig; -@property (nonatomic) MPExtendedHitBoxButton *muteButton; -@property (nonatomic) UIActivityIndicatorView *loadingIndicator; -@property (nonatomic) id displayAgent; - -// KVO might be triggerd multipe times. This property is used to make sure the view will only be created once. -@property (nonatomic) BOOL alreadyInitialized; -@property (nonatomic) BOOL downloadFinishedEventFired; -@property (nonatomic) BOOL alreadyCreatedPlayerView; -@property (nonatomic) BOOL finishedPlaying; -@property (nonatomic) BOOL startedLoading; - -@end - -@implementation MOPUBPlayerViewController - -- (instancetype)initWithVideoConfig:(MPVideoConfig *)videoConfig nativeVideoAdConfig:(MOPUBNativeVideoAdConfigValues *)nativeVideoAdConfig -{ - if (self = [super init]) { - _videoConfig = videoConfig; - _playerView = [[MOPUBPlayerView alloc] initWithFrame:CGRectZero delegate:self]; - self.displayMode = MOPUBPlayerDisplayModeInline; - - NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; - [notificationCenter addObserver:self selector:@selector(applicationDidEnterBackground:) name:UIApplicationDidEnterBackgroundNotification object:nil]; - [notificationCenter addObserver:self selector:@selector(applicationDidEnterForeground:) name:UIApplicationWillEnterForegroundNotification object:nil]; - _nativeVideoAdConfig = nativeVideoAdConfig; - - // default aspect ratio is 16:9 - _videoAspectRatio = kDefaultVideoAspectRatio; - } - return self; -} - -#pragma mark - UIViewController - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - [self.view addSubview:self.playerView]; - [self startLoadingIndicator]; -} - -- (void)viewWillLayoutSubviews -{ - [super viewWillLayoutSubviews]; - - // Bring mute button to front. This is necessary because the video view might be detached - // and re-attached during fullscreen to in-feed transition - [self.view bringSubviewToFront:self.muteButton]; - // Set playerView's frame so it will work for rotation - self.playerView.frame = self.view.bounds; - - [self layoutLoadingIndicator]; -} - -- (void)layoutLoadingIndicator -{ - if (_loadingIndicator) { - _loadingIndicator.mp_x = CGRectGetWidth(self.view.bounds) - kLoadingIndicatorRightMargin - CGRectGetWidth(_loadingIndicator.bounds); - _loadingIndicator.mp_y = kLoadingIndicatorTopMargin; - } -} - -#pragma mark - dealloc or dispose the controller - -- (void)dealloc -{ - [[NSNotificationCenter defaultCenter] removeObserver:self]; - - if (self.avPlayer) { - [self.avPlayer removeObserver:self forKeyPath:kStatusKey]; - } - - if (self.playerItem) { - [self.playerItem removeObserver:self forKeyPath:kStatusKey]; - [self.playerItem removeObserver:self forKeyPath:kLoadedTimeRangesKey]; - } - - MPLogDebug(@"playerViewController dealloc called"); -} - -- (void)dispose -{ - [self.view removeFromSuperview]; - [self.avPlayer dispose]; - self.avPlayer = nil; - self.disposed = YES; -} - -#pragma mark - load asset, set up aVplayer and avPlayer view - -- (void)handleVideoInitError -{ - [self.vastTracking handleVideoEvent:MPVideoEventError - videoTimeOffset:self.avPlayer.currentPlaybackTime]; - [self stopLoadingIndicator]; - [self.playerView handleVideoInitFailure]; - [self.vastTracking handleVASTError:MPVASTErrorCannotPlayMedia videoTimeOffset:0]; -} - -- (void)loadAndPlayVideo -{ - MPVASTMediaFile *mediaFile = [MPVASTMediaFile bestMediaFileFromCandidates:self.videoConfig.mediaFiles - forContainerSize:self.view.window.bounds.size - containerScaleFactor:[UIScreen mainScreen].scale]; - _vastTracking = [[MPVASTTracking alloc] initWithVideoConfig:self.videoConfig videoURL:mediaFile.URL]; - - if (mediaFile == nil) { - MPLogError(@"failed to obtain media file"); - [self handleVideoInitError]; - return; - } - - AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:mediaFile.URL options:nil]; - - if (asset == nil) { - MPLogError(@"failed to initialize video asset for URL %@", mediaFile.URL); - [self handleVideoInitError]; - - return; - } - - self.startedLoading = YES; - - NSArray *requestedKeys = @[kTracksKey, kPlayableKey]; - [asset loadValuesAsynchronouslyForKeys:requestedKeys completionHandler:^{ - dispatch_async(dispatch_get_main_queue(), ^{ - if (!self.disposed) { - [self prepareToPlayAsset:asset withKeys:requestedKeys]; - } - }); - }]; -} - -- (void)setVideoAspectRatioWithAsset:(AVURLAsset *)asset -{ - if (asset && [asset tracksWithMediaType:AVMediaTypeVideo].count > 0) { - AVAssetTrack *videoTrack = [asset tracksWithMediaType:AVMediaTypeVideo][0]; - CGSize naturalSize = CGSizeApplyAffineTransform(videoTrack.naturalSize, videoTrack.preferredTransform); - naturalSize = CGSizeMake(fabs(naturalSize.width), fabs(naturalSize.height)); - - // make sure the natural size is at least 1pt (not 0) check - if (naturalSize.height > 0 && naturalSize.width > 0) { - _videoAspectRatio = naturalSize.width / naturalSize.height; - } - } -} - -- (void)prepareToPlayAsset:(AVURLAsset *)asset withKeys:(NSArray *)requestedKeys -{ - NSError *error = nil; - - if (!asset.playable) { - MPLogInfo(@"asset is not playable"); - [self handleVideoInitError]; - - return; - } - - AVKeyValueStatus status = [asset statusOfValueForKey:kTracksKey error:&error]; - if (status == AVKeyValueStatusFailed) { - MPLogInfo(@"AVKeyValueStatusFailed"); - [self handleVideoInitError]; - - return; - } else if (status == AVKeyValueStatusLoaded) { - [self setVideoAspectRatioWithAsset:asset]; - - self.playerItem = [AVPlayerItem playerItemWithAsset:asset]; - self.avPlayer = [[MOPUBAVPlayer alloc] initWithDelegate:self playerItem:self.playerItem]; - self.avPlayer.muted = YES; - - [self.playerView setAvPlayer:self.avPlayer]; - } -} - -#pragma mark - video ready to play -- (void)initOnVideoReady -{ - [self startPlayer]; -} - -- (void)createView -{ - [self.playerView createPlayerView]; - [self createMuteButton]; -} - -- (void)createMuteButton -{ - if (!self.muteButton) { - self.muteButton = [MPExtendedHitBoxButton buttonWithType:UIButtonTypeCustom]; - [self.muteButton setImage:[UIImage imageNamed:MPResourcePathForResource(kMutedButtonImage)] forState:UIControlStateNormal]; - [self.muteButton setImage:[UIImage imageNamed:MPResourcePathForResource(kUnmutedButtonImage)] forState:UIControlStateSelected]; - [self.muteButton addTarget:self action:@selector(muteButtonTapped) forControlEvents:UIControlEventTouchUpInside]; - self.muteButton.touchAreaInsets = UIEdgeInsetsMake(kMuteIconInlineModeTouchAreaInsets, kMuteIconInlineModeTouchAreaInsets, kMuteIconInlineModeTouchAreaInsets, kMuteIconInlineModeTouchAreaInsets); - [self.muteButton sizeToFit]; - [self.view addSubview:self.muteButton]; - self.muteButton.frame = CGRectMake(kMuteIconInlineModeLeftMargin, CGRectGetMaxY(self.view.bounds) - kMuteIconInlineModeBottomMargin - CGRectGetHeight(self.muteButton.bounds), CGRectGetWidth(self.muteButton.bounds), CGRectGetHeight(self.muteButton.bounds)); - } -} - -- (void)startPlayer -{ - [self.avPlayer play]; - self.playing = YES; - self.isReadyToPlay = YES; - if ([self.delegate respondsToSelector:@selector(playerPlaybackDidStart:)]) { - [self.delegate playerPlaybackDidStart:self]; - } -} - -#pragma mark - displayAgent - -- (id )displayAgent -{ - if (!_displayAgent) { - _displayAgent = [MPAdDestinationDisplayAgent agentWithDelegate:self]; - } - return _displayAgent; -} - - -#pragma mark - setter for player related objects - -- (void)setPlayerItem:(AVPlayerItem *)playerItem -{ - if (_playerItem) { - [_playerItem removeObserver:self forKeyPath:kStatusKey]; - [_playerItem removeObserver:self forKeyPath:kLoadedTimeRangesKey]; - } - _playerItem = playerItem; - if (!playerItem) { - return; - } - - [_playerItem addObserver:self forKeyPath:kStatusKey options:NSKeyValueObservingOptionInitial | NSKeyValueObservingOptionNew context:nil]; - [_playerItem addObserver:self - forKeyPath:kLoadedTimeRangesKey - options:NSKeyValueObservingOptionInitial | NSKeyValueObservingOptionNew - context:AudioControllerBufferingObservationContext]; -} - -- (void)setAvPlayer:(MOPUBAVPlayer *)avPlayer -{ - if (_avPlayer) { - [_avPlayer removeObserver:self forKeyPath:kStatusKey]; - } - _avPlayer = avPlayer; - if (_avPlayer) { - NSKeyValueObservingOptions options = (NSKeyValueObservingOptionInitial | NSKeyValueObservingOptionNew); - [_avPlayer addObserver:self forKeyPath:kStatusKey options:options context:nil]; - } -} - -- (void)setMuted:(BOOL)muted -{ - _muted = muted; - [self.muteButton setSelected:!muted]; - self.avPlayer.muted = muted; -} - -#pragma mark - displayMode - -- (MOPUBPlayerDisplayMode)displayMode -{ - return self.playerView.displayMode; -} - -- (void)setDisplayMode:(MOPUBPlayerDisplayMode)displayMode -{ - self.playerView.displayMode = displayMode; - if (displayMode == MOPUBPlayerDisplayModeInline) { - self.muted = YES; - } else { - self.muted = NO; - } -} - -#pragma mark - acvivityIndicator -- (UIActivityIndicatorView *)loadingIndicator -{ - if (!_loadingIndicator) { - _loadingIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite]; - _loadingIndicator.hidesWhenStopped = YES; - _loadingIndicator.color = [UIColor whiteColor]; - [self.view addSubview:_loadingIndicator]; - } - return _loadingIndicator; -} - -- (void)startLoadingIndicator -{ - [self.loadingIndicator.superview bringSubviewToFront:_loadingIndicator]; - [self.loadingIndicator startAnimating]; -} - -- (void)stopLoadingIndicator -{ - if (_loadingIndicator && _loadingIndicator.isAnimating) { - [_loadingIndicator stopAnimating]; - } -} - -- (void)removeLoadingIndicator -{ - if (_loadingIndicator) { - [_loadingIndicator stopAnimating]; - [_loadingIndicator removeFromSuperview]; - _loadingIndicator = nil; - } -} - - -#pragma mark - Tap actions - -- (void)muteButtonTapped -{ - self.muteButton.selected = !self.muteButton.selected; - self.muted = !self.muteButton.selected; - - NSString *event = self.muted ? MPVideoEventMute : MPVideoEventUnmute; - [self.vastTracking handleVideoEvent:event videoTimeOffset:self.avPlayer.currentPlaybackTime]; -} - -# pragma mark - KVO - -- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context -{ - if (object == self.avPlayer) { - if (self.avPlayer.status == AVPlayerItemStatusFailed) { - MPLogInfo(@"avPlayer status failed"); - [self.vastTracking handleVideoEvent:MPVideoEventError - videoTimeOffset:self.avPlayer.currentPlaybackTime]; - } - } else if (object == self.playerItem) { - if (context == AudioControllerBufferingObservationContext) { - NSArray *timeRangeArray = [self.playerItem loadedTimeRanges]; - if (timeRangeArray && timeRangeArray.count > 0) { - CMTimeRange aTimeRange = [[timeRangeArray objectAtIndex:0] CMTimeRangeValue]; - double startTime = CMTimeGetSeconds(aTimeRange.start); - double loadedDuration = CMTimeGetSeconds(aTimeRange.duration); - double videoDuration = CMTimeGetSeconds(self.playerItem.duration); - if ((startTime + loadedDuration + kVideoFinishedBufferingAllowedError) >= videoDuration && !self.downloadFinishedEventFired) { - self.downloadFinishedEventFired = YES; - } - } - } - if ([keyPath isEqualToString:kStatusKey]) { - switch (self.playerItem.status) { - case AVPlayerItemStatusReadyToPlay: - if (!self.alreadyInitialized) { - self.alreadyInitialized = YES; - [self initOnVideoReady]; - } - break; - case AVPlayerItemStatusFailed: - { - MPLogInfo(@"avPlayerItem status failed"); - [self.vastTracking handleVideoEvent:MPVideoEventError - videoTimeOffset:self.avPlayer.currentPlaybackTime]; - break; - } - default: - break; - } - } - } else { - [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; - } -} - -#pragma mark - player controls - -- (void)pause -{ - self.paused = YES; - self.playing = NO; - [self.avPlayer pause]; - [self.vastTracking handleVideoEvent:MPVideoEventPause - videoTimeOffset:self.avPlayer.currentPlaybackTime]; -} - -- (void)resume -{ - self.paused = NO; - self.playing = YES; - [self.avPlayer play]; - [self.vastTracking handleVideoEvent:MPVideoEventResume - videoTimeOffset:self.avPlayer.currentPlaybackTime]; -} - -- (void)seekToTime:(NSTimeInterval)time -{ - [self.avPlayer seekToTime:CMTimeMakeWithSeconds(time, NSEC_PER_SEC) toleranceBefore:kCMTimeZero toleranceAfter:kCMTimeZero]; -} - -#pragma mark - auto play helper method -- (BOOL)shouldStartNewPlayer -{ - UIApplicationState state = [[UIApplication sharedApplication] applicationState]; - if (!self.startedLoading && !self.playing && !self.paused && state == UIApplicationStateActive) { - return YES; - } - return NO; -} - -- (BOOL)shouldResumePlayer -{ - UIApplicationState state = [[UIApplication sharedApplication] applicationState]; - if (self.startedLoading && self.paused == YES && self.displayMode == MOPUBPlayerDisplayModeInline - && state == UIApplicationStateActive) { - return YES; - } - return NO; -} - -- (BOOL)shouldPausePlayer -{ - if (self.playing && self.displayMode == MOPUBPlayerDisplayModeInline) { - return YES; - } - return NO; -} - -#pragma mark - enter fullscreen or exit fullscreen - -- (void)willEnterFullscreen -{ - self.displayMode = MOPUBPlayerDisplayModeFullscreen; - [self.vastTracking handleVideoEvent:MPVideoEventFullScreen videoTimeOffset:self.avPlayer.currentPlaybackTime]; - [self.vastTracking handleVideoEvent:MPVideoEventExpand - videoTimeOffset:self.avPlayer.currentPlaybackTime]; -} - -- (void)willExitFullscreen -{ - self.displayMode = MOPUBPlayerDisplayModeInline; - [self.vastTracking handleVideoEvent:MPVideoEventExitFullScreen - videoTimeOffset:self.avPlayer.currentPlaybackTime]; - [self.vastTracking handleVideoEvent:MPVideoEventCollapse - videoTimeOffset:self.avPlayer.currentPlaybackTime]; -} - -#pragma mark - MOPUBAVPlayerDelegate - -- (void)avPlayer:(MOPUBAVPlayer *)player playbackTimeDidProgress:(NSTimeInterval)currentPlaybackTime -{ - // stop the loading indicator if it exists and is animating. - [self stopLoadingIndicator]; - - // When the KVO sends AVPlayerItemStatusReadyToPlay, there could still be a delay for the video really starts playing. - // If we create the mute button and progress bar immediately after AVPlayerItemStatusReadyToPlay signal, we might - // end up with showing them before the video is visible. To prevent that, we create mute button and progress bar here. - // There will be 0.1s delay after the video starts playing, but it's a much better user experience. - - if (!self.alreadyCreatedPlayerView) { - [self createView]; - self.alreadyCreatedPlayerView = YES; - } - - [self.playerView playbackTimeDidProgress]; - - if ([self.delegate respondsToSelector:@selector(playerDidProgressToTime:)]) { - [self.delegate playerDidProgressToTime:currentPlaybackTime]; - } -} - -- (void)avPlayer:(MOPUBAVPlayer *)player didError:(NSError *)error withMessage:(NSString *)message -{ - [self.avPlayer pause]; - [self.vastTracking handleVideoEvent:MPVideoEventError - videoTimeOffset:self.avPlayer.currentPlaybackTime]; -} - -- (void)avPlayerDidFinishPlayback:(MOPUBAVPlayer *)player -{ - self.finishedPlaying = YES; - [self removeLoadingIndicator]; - [self.avPlayer pause]; - // update view - [self.playerView playbackDidFinish]; - [self.vastTracking handleVideoEvent:MPVideoEventComplete - videoTimeOffset:self.avPlayer.currentPlaybackTime]; -} - -- (void)avPlayerDidRecoverFromStall:(MOPUBAVPlayer *)player -{ - if (self.displayMode == MOPUBPlayerDisplayModeInline) { - [self removeLoadingIndicator]; - } else { - if ([self.delegate respondsToSelector:@selector(playerViewController:didRecoverFromStall:)]) { - [self.delegate playerViewController:self didRecoverFromStall:player]; - } - } - - [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(resume) object:nil]; -} - -- (void)avPlayerDidStall:(MOPUBAVPlayer *)player -{ - if (self.displayMode == MOPUBPlayerDisplayModeInline) { - [self startLoadingIndicator]; - } else { - if ([self.delegate respondsToSelector:@selector(playerViewController:didStall:)]) { - [self.delegate playerViewController:self didStall:self.avPlayer]; - } - } - - // Try to resume the video play after 3 seconds. The perform selector request is cancelled when - // didRecoverFromStall signal is received. This way, we won't queue up the requests. - [self performSelector:@selector(resume) withObject:nil afterDelay:kDelayPlayInSeconds]; -} - -#pragma mark - MOPUBPlayerViewDelegate -- (void)playerViewDidTapReplayButton:(MOPUBPlayerView *)view -{ - self.muteButton.hidden = NO; - self.finishedPlaying = NO; - [self.playerView setProgressBarVisible:YES]; - [self seekToTime:0]; - [self.avPlayer play]; -} - -- (void)playerViewWillShowReplayView:(MOPUBPlayerView *)view -{ - self.muteButton.hidden = YES; - [self.playerView setProgressBarVisible:NO]; - if (self.displayMode == MOPUBPlayerDisplayModeFullscreen) { - if ([self.delegate respondsToSelector:@selector(playerViewController:didTapReplayButton:)]) { - [self.delegate playerViewController:self willShowReplayView:self.playerView]; - } - } -} - -- (void)playerViewWillEnterFullscreen:(MOPUBPlayerView *)view -{ - if ([self.delegate respondsToSelector:@selector(willEnterFullscreen:)]) { - [self.delegate willEnterFullscreen:self]; - } -} - -#pragma mark - Application state monitoring - -- (void)applicationDidEnterBackground:(NSNotification *)notification -{ - if (self.avPlayer && self.avPlayer.rate > 0) { - [self pause]; - } -} - -- (void)applicationDidEnterForeground:(NSNotification *)notification -{ - // Resume video playback only if the visible area is larger than or equal to the autoplay threshold. - - BOOL playVisible = MPViewIntersectsParentWindowWithPercent(self.playerView, self.nativeVideoAdConfig.playVisiblePercent/100.0f); - if (self.avPlayer && self.isReadyToPlay && !self.finishedPlaying && playVisible) { - [self resume]; - } -} - -#pragma mark - - -- (UIViewController *)viewControllerForPresentingModalView -{ - return [self.delegate viewControllerForPresentingModalView]; -} - -- (void)displayAgentWillPresentModal -{ - [self pause]; -} - -- (void)displayAgentWillLeaveApplication -{ - [self pause]; -} - -- (void)displayAgentDidDismissModal -{ - [self resume]; -} - -@end - diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBReplayView.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBReplayView.h deleted file mode 100644 index 5402c80049..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBReplayView.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// MOPUBReplayView.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MOPUBPlayerView.h" - -@class MOPUBReplayView; - -typedef void (^MPBReplayActionBlock)(MOPUBReplayView *replayView); - -@interface MOPUBReplayView : UIView - -@property (nonatomic, copy) MPBReplayActionBlock actionBlock; - -- (instancetype)initWithFrame:(CGRect)frame displayMode:(MOPUBPlayerDisplayMode)displayMode; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBReplayView.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBReplayView.m deleted file mode 100644 index 1b5205b754..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBReplayView.m +++ /dev/null @@ -1,59 +0,0 @@ -// -// MOPUBReplayView.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MOPUBReplayView.h" -#import "MPGlobal.h" -#import "UIView+MPAdditions.h" -#import "UIColor+MPAdditions.h" - -static NSString * const kPlayButtonImage = @"MPPlayBtn.png"; -static NSString * const kOverlayBgColor = @"#000000"; -static CGFloat const kOverlayAlpha = 0.5f; - -@interface MOPUBReplayView() - -@property (nonatomic) UIView *overlayView; -@property (nonatomic) UIButton *replayVideoButton; - -@end - -@implementation MOPUBReplayView - -- (instancetype)initWithFrame:(CGRect)frame displayMode:(MOPUBPlayerDisplayMode)displayMode -{ - if (self = [super initWithFrame:frame]) { - // only apply the overlay for fullscreen mode - if (displayMode == MOPUBPlayerDisplayModeFullscreen) { - _overlayView = [UIView new]; - _overlayView.backgroundColor = [UIColor mp_colorFromHexString:kOverlayBgColor alpha:kOverlayAlpha]; - [self addSubview:_overlayView]; - } - - _replayVideoButton = [UIButton buttonWithType:UIButtonTypeCustom]; - [_replayVideoButton setImage:[UIImage imageNamed:MPResourcePathForResource(kPlayButtonImage)] forState:UIControlStateNormal]; - [_replayVideoButton addTarget:self action:@selector(replayButtonTapped) forControlEvents:UIControlEventTouchUpInside]; - [_replayVideoButton sizeToFit]; - [self addSubview:_replayVideoButton]; - } - return self; -} - -- (void)layoutSubviews -{ - [super layoutSubviews]; - self.overlayView.frame = self.bounds; - self.replayVideoButton.center = self.center; - self.replayVideoButton.frame = CGRectIntegral(self.replayVideoButton.frame); -} - -- (void)replayButtonTapped -{ - self.actionBlock(self); -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/MOPUBNativeVideoAdRenderer.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/MOPUBNativeVideoAdRenderer.h deleted file mode 100644 index e68f745c84..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/MOPUBNativeVideoAdRenderer.h +++ /dev/null @@ -1,21 +0,0 @@ -// -// MOPUBNativeVideoAdRenderer.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPBaseNativeAdRenderer.h" -#import "MPNativeAdRenderer.h" - -@class MPNativeAdRendererConfiguration; -@class MPStaticNativeAdRendererSettings; - -@interface MOPUBNativeVideoAdRenderer : MPBaseNativeAdRenderer - -@property (nonatomic, readonly) MPNativeViewSizeHandler viewSizeHandler; - -+ (MPNativeAdRendererConfiguration *)rendererConfigurationWithRendererSettings:(id)rendererSettings; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/MOPUBNativeVideoAdRenderer.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/MOPUBNativeVideoAdRenderer.m deleted file mode 100644 index abafef8319..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/MOPUBNativeVideoAdRenderer.m +++ /dev/null @@ -1,406 +0,0 @@ -// -// MOPUBNativeVideoAdRenderer.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MOPUBNativeVideoAdRenderer.h" -#import "MPBaseNativeAdRenderer+Internal.h" -#import "MPNativeAdRendererConfiguration.h" -#import "MPNativeAdRenderer.h" -#import "MPNativeAdRendering.h" -#import "MPNativeAdAdapter.h" -#import "MPNativeAdConstants.h" -#import "MPNativeAdError.h" -#import "MPNativeAdError+VAST.h" -#import "MPNativeAdRendererImageHandler.h" -#import "MPTimer.h" -#import "MPGlobal.h" -#import "MPLogging.h" -#import "MOPUBNativeVideoAdRendererSettings.h" -#import "MOPUBFullscreenPlayerViewController.h" -#import "MOPUBPlayerManager.h" -#import "MOPUBNativeVideoAdAdapter.h" -#import "MPVASTTracking.h" -#import "MPVideoConfig.h" -#import "MOPUBNativeVideoAdConfigValues.h" -#import "MOPUBPlayerViewController.h" -#import "MPNativeAdRenderingImageLoader.h" -#import "MPURLRequest.h" -#import "MPHTTPNetworkSession.h" -#import "MPMemoryCache.h" - -static const CGFloat kAutoPlayTimerInterval = 0.25f; - -@interface MOPUBNativeVideoAdRenderer () - -@property (nonatomic) MOPUBNativeVideoAdAdapter *adapter; -@property (nonatomic) BOOL adViewInViewHierarchy; -@property (nonatomic) MPNativeAdRendererImageHandler *rendererImageHandler; - -@property (nonatomic, weak) MOPUBPlayerViewController *videoController; -@property (nonatomic) MPTimer *autoPlayTimer; -@property (nonatomic) MPVideoConfig *videoConfig; -@property (nonatomic) MPVASTTracking *vastTracking; -@property (nonatomic) MOPUBNativeVideoAdConfigValues *nativeVideoAdConfig; -@property (nonatomic) BOOL trackingImpressionFired; - -@end - -@implementation MOPUBNativeVideoAdRenderer - -+ (MPNativeAdRendererConfiguration *)rendererConfigurationWithRendererSettings:(id)rendererSettings -{ - MPNativeAdRendererConfiguration *config = [[MPNativeAdRendererConfiguration alloc] init]; - config.rendererClass = [self class]; - config.rendererSettings = rendererSettings; - config.supportedCustomEvents = @[@"MOPUBNativeVideoCustomEvent"]; - - return config; -} - -- (instancetype)initWithRendererSettings:(id)rendererSettings -{ - if (self = [super init]) { - MOPUBNativeVideoAdRendererSettings *settings = (MOPUBNativeVideoAdRendererSettings *)rendererSettings; - self.renderingViewClass = settings.renderingViewClass; - _viewSizeHandler = [settings.viewSizeHandler copy]; - _rendererImageHandler = [MPNativeAdRendererImageHandler new]; - _rendererImageHandler.delegate = self; - } - - return self; -} - -- (MPVASTTracking *)vastTracking { - return self.videoController.vastTracking; -} - -- (void)dealloc -{ - [_autoPlayTimer invalidate]; - _autoPlayTimer = nil; - - // free the video memory - [[MOPUBPlayerManager sharedInstance] disposePlayerViewController]; -} - -- (UIView *)retrieveViewWithAdapter:(MOPUBNativeVideoAdAdapter *)adapter error:(NSError **)error -{ - if (!adapter) { - if (error) { - *error = MPNativeAdNSErrorForRenderValueTypeError(); - [self.vastTracking handleVASTError:VASTErrorCodeFromNativeAdErrorCode((*error).code) videoTimeOffset:0]; - } - - return nil; - } - - self.adapter = adapter; - - [self initAdView]; - [self setupVideoView]; - - self.adView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; - - // We only load text here. We delay loading of images until the view is added to the view hierarchy - // so we don't unnecessarily load images from the cache if the user is scrolling fast. So we will - // just store the image URLs for now. - if ([self.adView respondsToSelector:@selector(nativeMainTextLabel)]) { - self.adView.nativeMainTextLabel.text = [adapter.properties objectForKey:kAdTextKey]; - } - - if ([self.adView respondsToSelector:@selector(nativeTitleTextLabel)]) { - self.adView.nativeTitleTextLabel.text = [adapter.properties objectForKey:kAdTitleKey]; - } - - if ([self.adView respondsToSelector:@selector(nativeCallToActionTextLabel)] && self.adView.nativeCallToActionTextLabel) { - self.adView.nativeCallToActionTextLabel.text = [adapter.properties objectForKey:kAdCTATextKey]; - } - - [self renderSponsoredByTextWithAdapter:adapter]; - - if ([self.adView respondsToSelector:@selector(nativePrivacyInformationIconImageView)]) { - UIImage *privacyIconImage = [adapter.properties objectForKey:kAdPrivacyIconUIImageKey]; - NSString *privacyIconImageUrl = [adapter.properties objectForKey:kAdPrivacyIconImageUrlKey]; - // A cached privacy information icon image exists; it should be used. - if (privacyIconImage != nil) { - UIImageView *imageView = self.adView.nativePrivacyInformationIconImageView; - imageView.hidden = NO; - imageView.image = privacyIconImage; - - // Attach a gesture recognizer to handle loading the privacy icon URL. - UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onPrivacyIconTapped)]; - imageView.userInteractionEnabled = YES; - [imageView addGestureRecognizer:tapRecognizer]; - } - // No cached privacy information icon image was cached, but there is a URL for the - // icon. Go fetch the icon and populate the UIImageView when complete. - else if (privacyIconImageUrl != nil) { - NSURL *iconUrl = [NSURL URLWithString:privacyIconImageUrl]; - MPURLRequest *imageRequest = [MPURLRequest requestWithURL:iconUrl]; - - __weak __typeof__(self) weakSelf = self; - [MPHTTPNetworkSession startTaskWithHttpRequest:imageRequest responseHandler:^(NSData * _Nonnull data, NSHTTPURLResponse * _Nonnull response) { - // Cache the successfully retrieved icon image - [MPMemoryCache.sharedInstance setData:data forKey:privacyIconImageUrl]; - - // Populate the image view - __typeof__(self) strongSelf = weakSelf; - UIImageView *imageView = strongSelf.adView.nativePrivacyInformationIconImageView; - imageView.hidden = NO; - imageView.image = [UIImage imageWithData:data]; - - // Attach a gesture recognizer to handle loading the privacy icon URL. - UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:strongSelf action:@selector(onPrivacyIconTapped)]; - imageView.userInteractionEnabled = YES; - [imageView addGestureRecognizer:tapRecognizer]; - } errorHandler:^(NSError * _Nonnull error) { - MPLogInfo(@"Failed to retrieve privacy icon from %@", privacyIconImageUrl); - [self.vastTracking handleVASTError:MPVASTErrorUndefined videoTimeOffset:0]; - }]; - } - // The ad network may provide its own view for its privacy information icon. - // We assume the ad handles the tap on the icon as well. - else if ([adapter respondsToSelector:@selector(privacyInformationIconView)]) { - UIView *privacyIconAdView = [adapter privacyInformationIconView]; - privacyIconAdView.frame = self.adView.nativePrivacyInformationIconImageView.bounds; - privacyIconAdView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; - self.adView.nativePrivacyInformationIconImageView.userInteractionEnabled = YES; - [self.adView.nativePrivacyInformationIconImageView addSubview:privacyIconAdView]; - self.adView.nativePrivacyInformationIconImageView.hidden = NO; - } - // No privacy icon - else { - self.adView.nativePrivacyInformationIconImageView.userInteractionEnabled = NO; - self.adView.nativePrivacyInformationIconImageView.hidden = YES; - } - } - - if ([self hasIconView]) { - UIView *iconView = [self.adapter iconMediaView]; - UIView *iconImageView = [self.adView nativeIconImageView]; - - iconView.frame = iconImageView.bounds; - iconView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; - iconImageView.userInteractionEnabled = YES; - - [iconImageView addSubview:iconView]; - } - - if ([self shouldLoadMediaView]) { - UIView *mediaView = [self.adapter mainMediaView]; - UIView *mainImageView = [self.adView nativeMainImageView]; - - mediaView.frame = mainImageView.bounds; - mediaView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; - mediaView.userInteractionEnabled = YES; - mainImageView.userInteractionEnabled = YES; - - [mainImageView addSubview:mediaView]; - } - - // See if the ad contains a star rating and notify the view if it does. - if ([self.adView respondsToSelector:@selector(layoutStarRating:)]) { - NSNumber *starRatingNum = [adapter.properties objectForKey:kAdStarRatingKey]; - - if ([starRatingNum isKindOfClass:[NSNumber class]] && starRatingNum.floatValue >= kStarRatingMinValue && starRatingNum.floatValue <= kStarRatingMaxValue) { - [self.adView layoutStarRating:starRatingNum]; - } - } - - return self.adView; -} - -- (BOOL)shouldLoadMediaView -{ - return [self.adapter respondsToSelector:@selector(mainMediaView)] - && [self.adapter mainMediaView] - && [self.adView respondsToSelector:@selector(nativeMainImageView)]; -} - -- (BOOL)hasIconView -{ - return [self.adapter respondsToSelector:@selector(iconMediaView)] - && [self.adapter iconMediaView] - && [self.adView respondsToSelector:@selector(nativeIconImageView)]; -} - -- (void)onPrivacyIconTapped -{ - if ([self.adapter respondsToSelector:@selector(displayContentForDAAIconTap)]) { - [self.adapter displayContentForDAAIconTap]; - } -} - -- (void)adViewWillMoveToSuperview:(UIView *)superview -{ - self.adViewInViewHierarchy = (superview != nil); - - if (superview) { - // Only handle the loading of the icon image if the adapter doesn't already have a view for it. - if (![self hasIconView] && [self.adapter.properties objectForKey:kAdIconImageKey] && [self.adView respondsToSelector:@selector(nativeIconImageView)]) { - [self.rendererImageHandler loadImageForURL:[NSURL URLWithString:[self.adapter.properties objectForKey:kAdIconImageKey]] intoImageView:self.adView.nativeIconImageView]; - } - - // Only handle the loading of the main image if the adapter doesn't already have a view for it. - if (!([self.adapter respondsToSelector:@selector(mainMediaView)] && [self.adapter mainMediaView])) { - if ([self.adapter.properties objectForKey:kAdMainImageKey] && [self.adView respondsToSelector:@selector(nativeMainImageView)]) { - [self.rendererImageHandler loadImageForURL:[NSURL URLWithString:[self.adapter.properties objectForKey:kAdMainImageKey]] intoImageView:self.adView.nativeMainImageView]; - } - } - - // Layout custom assets here as the custom assets may contain images that need to be loaded. - if ([self.adView respondsToSelector:@selector(layoutCustomAssetsWithProperties:imageLoader:)]) { - // Create a simplified image loader for the ad view to use. - MPNativeAdRenderingImageLoader *imageLoader = [[MPNativeAdRenderingImageLoader alloc] initWithImageHandler:self.rendererImageHandler]; - [self.adView layoutCustomAssetsWithProperties:self.adapter.properties imageLoader:imageLoader]; - } - } -} - -- (void)tick:(MPTimer *)timer -{ - if (self.videoController) { - BOOL playVisible = MPViewIntersectsParentWindowWithPercent(self.videoController.playerView, self.nativeVideoAdConfig.playVisiblePercent/100.0f); - if (playVisible) { - // start new - if ([self.videoController shouldStartNewPlayer]) { - [self.videoController loadAndPlayVideo]; - } - - // resume play - if ([self.videoController shouldResumePlayer]) { - [self.videoController resume]; - } - } - - // pause video - BOOL pauseVisible = !MPViewIntersectsParentWindowWithPercent(self.videoController.playerView, self.nativeVideoAdConfig.pauseVisiblePercent/100.0f); - if (pauseVisible) { - if ([self.videoController shouldPausePlayer]) { - [self.videoController pause]; - } - } - } -} - -#pragma mark - MOPUBPlayerViewControllerDelegate - -- (void)willEnterFullscreen:(MOPUBPlayerViewController *)viewController -{ - [self enterFullscreen:[[self.adapter delegate] viewControllerForPresentingModalView]]; -} - -- (void)playerDidProgressToTime:(NSTimeInterval)playbackTime -{ - [self.adapter handleVideoHasProgressedToTime:playbackTime]; - - // Only the first impression is tracked. - if (!self.trackingImpressionFired) { - self.trackingImpressionFired = YES; - - // Fire MoPub impression tracking - [self.adapter handleVideoViewImpression]; - // Fire VAST Impression Tracking - [self.vastTracking handleVideoEvent:MPVideoEventImpression - videoTimeOffset:playbackTime]; - } - - NSTimeInterval videoDuration = CMTimeGetSeconds(self.videoController.playerItem.duration); - [self.vastTracking handleVideoProgressEvent:playbackTime videoDuration:videoDuration]; -} - -- (void)ctaTapped:(MOPUBFullscreenPlayerViewController *)viewController -{ - // MoPub video CTA button clicked. Only the first click is tracked. The check is handled in MPNativeAd. - [self.adapter handleVideoViewClick]; - [self.vastTracking handleVideoEvent:MPVideoEventClick - videoTimeOffset:self.videoController.avPlayer.currentPlaybackTime]; -} - -- (void)fullscreenPlayerWillLeaveApplication:(MOPUBFullscreenPlayerViewController *)viewController -{ - if ([self.adapter.delegate respondsToSelector:@selector(nativeAdWillLeaveApplicationFromAdapter:)]) { - [self.adapter.delegate nativeAdWillLeaveApplicationFromAdapter:self.adapter]; - } -} - -// being called from MPNativeAd -- (void)nativeAdTapped -{ - [self.vastTracking handleVideoEvent:MPVideoEventClick - videoTimeOffset:self.videoController.avPlayer.currentPlaybackTime]; -} - -#pragma mark - MPNativeAdRendererImageHandlerDelegate - -- (BOOL)nativeAdViewInViewHierarchy -{ - return self.adViewInViewHierarchy; -} - -#pragma mark - Internal -- (void)enterFullscreen:(UIViewController *)fromViewController -{ - MOPUBFullscreenPlayerViewController *vc = [[MOPUBFullscreenPlayerViewController alloc] initWithVideoPlayer:self.videoController nativeAdProperties:self.adapter.properties dismissBlock:^(UIView *originalParentView) { - self.videoController.view.frame = originalParentView.bounds; - self.videoController.delegate = self; - [self.videoController willExitFullscreen]; - if ([self.adapter.delegate respondsToSelector:@selector(nativeAdDidDismissModalForAdapter:)]) { - [self.adapter.delegate nativeAdDidDismissModalForAdapter:self.adapter]; - } - [originalParentView addSubview:self.videoController.playerView]; - }]; - vc.delegate = self; - if ([self.adapter.delegate respondsToSelector:@selector(nativeAdWillPresentModalForAdapter:)]) { - [self.adapter.delegate nativeAdWillPresentModalForAdapter:self.adapter]; - } - [fromViewController presentViewController:vc animated:NO completion:nil]; -} - -- (void)initAdView -{ - if (!self.videoController) { - if ([self.renderingViewClass respondsToSelector:@selector(nibForAd)]) { - self.adView = (UIView *)[[[self.renderingViewClass nibForAd] instantiateWithOwner:nil options:nil] firstObject]; - } else { - self.adView = [[self.renderingViewClass alloc] init]; - } - } -} - -- (void)setupVideoView -{ - // If a video controller is nil or it's already been disposed, create/recreate the videoController - if ([self.adView respondsToSelector:(@selector(nativeVideoView))]) { - BOOL createdNewVideoController = NO; - self.videoConfig = [self.adapter.properties objectForKey:kVideoConfigKey]; - self.nativeVideoAdConfig = [self.adapter.properties objectForKey:kNativeAdConfigKey]; - - if (!self.videoController || self.videoController.disposed) { - createdNewVideoController = YES; - self.videoController = [[MOPUBPlayerManager sharedInstance] playerViewControllerWithVideoConfig:self.videoConfig - nativeVideoAdConfig:self.nativeVideoAdConfig]; - self.videoController.defaultActionURL = self.adapter.defaultActionURL; - self.videoController.displayMode = MOPUBPlayerDisplayModeInline; - self.videoController.delegate = self; - self.videoController.view.frame = self.adView.nativeVideoView.bounds; - [self.adView.nativeVideoView addSubview:self.videoController.view]; - [self.adView bringSubviewToFront:self.adView.nativeVideoView]; - - if (!self.autoPlayTimer) { - self.autoPlayTimer = [MPTimer timerWithTimeInterval:kAutoPlayTimerInterval - target:self - selector:@selector(tick:) - repeats:YES - runLoopMode:NSRunLoopCommonModes]; - [self.autoPlayTimer scheduleNow]; - } - } - } -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/MOPUBNativeVideoAdRendererSettings.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/MOPUBNativeVideoAdRendererSettings.h deleted file mode 100644 index 48857255e9..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/MOPUBNativeVideoAdRendererSettings.h +++ /dev/null @@ -1,31 +0,0 @@ -// -// MOPUBNativeVideoAdRendererSettings.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPNativeAdRendererSettings.h" -#import "MPNativeAdRenderer.h" - -@interface MOPUBNativeVideoAdRendererSettings : NSObject - -/** - * A rendering class that must be a UIView that implements the MPNativeAdRendering protocol. - * The ad will be rendered to a view of this class type. - */ -@property (nonatomic, assign) Class renderingViewClass; - -/** - * A block that returns the size of the view given a maximum width. This needs to be set when - * used in conjunction with ad placer classes so the ad placers can correctly size the cells - * that contain the ads. - * - * viewSizeHandler is not used for manual native ad integration. You must set the - * frame of your manually integrated native ad view. - */ -@property (nonatomic, readwrite, copy) MPNativeViewSizeHandler viewSizeHandler; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/MOPUBNativeVideoAdRendererSettings.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/MOPUBNativeVideoAdRendererSettings.m deleted file mode 100644 index 4f19fbc42b..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/MOPUBNativeVideoAdRendererSettings.m +++ /dev/null @@ -1,13 +0,0 @@ -// -// MOPUBNativeVideoAdRendererSettings.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MOPUBNativeVideoAdRendererSettings.h" - -@implementation MOPUBNativeVideoAdRendererSettings - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPAdapters.plist b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPAdapters.plist deleted file mode 100644 index 3044eb66d6..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPAdapters.plist +++ /dev/null @@ -1,19 +0,0 @@ - - - - - AdColonyAdapterConfiguration - AppLovinAdapterConfiguration - ChartboostAdapterConfiguration - FacebookAdapterConfiguration - FlurryAdapterConfiguration - GoogleAdMobAdapterConfiguration - IronSourceAdapterConfiguration - SnapAdAdapterConfiguration - TapjoyAdapterConfiguration - UnityAdsAdapterConfiguration - VerizonAdapterConfiguration - VungleAdapterConfiguration - MintegralAdapterConfiguration - - diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPCloseBtn.png b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPCloseBtn.png deleted file mode 100644 index c96fa80865..0000000000 Binary files a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPCloseBtn.png and /dev/null differ diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPCloseBtn@2x.png b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPCloseBtn@2x.png deleted file mode 100644 index b87f96b229..0000000000 Binary files a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPCloseBtn@2x.png and /dev/null differ diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPCloseBtn@3x.png b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPCloseBtn@3x.png deleted file mode 100644 index 42e927b2af..0000000000 Binary files a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPCloseBtn@3x.png and /dev/null differ diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPCloseButtonX.png b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPCloseButtonX.png deleted file mode 100644 index ca4fa29814..0000000000 Binary files a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPCloseButtonX.png and /dev/null differ diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPCloseButtonX@2x.png b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPCloseButtonX@2x.png deleted file mode 100644 index 85e39a31b6..0000000000 Binary files a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPCloseButtonX@2x.png and /dev/null differ diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPCloseButtonX@3x.png b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPCloseButtonX@3x.png deleted file mode 100644 index c6e5df439c..0000000000 Binary files a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPCloseButtonX@3x.png and /dev/null differ diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPDAAIcon.png b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPDAAIcon.png deleted file mode 100644 index 3443a86174..0000000000 Binary files a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPDAAIcon.png and /dev/null differ diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPDAAIcon@2x.png b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPDAAIcon@2x.png deleted file mode 100644 index e09e34bef9..0000000000 Binary files a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPDAAIcon@2x.png and /dev/null differ diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPDAAIcon@3x.png b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPDAAIcon@3x.png deleted file mode 100644 index 22a01abd05..0000000000 Binary files a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPDAAIcon@3x.png and /dev/null differ diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPMutedBtn.png b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPMutedBtn.png deleted file mode 100644 index fe63b365e2..0000000000 Binary files a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPMutedBtn.png and /dev/null differ diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPMutedBtn@2x.png b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPMutedBtn@2x.png deleted file mode 100644 index d6443f02c8..0000000000 Binary files a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPMutedBtn@2x.png and /dev/null differ diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPMutedBtn@3x.png b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPMutedBtn@3x.png deleted file mode 100644 index 8ccd290a07..0000000000 Binary files a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPMutedBtn@3x.png and /dev/null differ diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPPlayBtn.png b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPPlayBtn.png deleted file mode 100644 index ddaca971ce..0000000000 Binary files a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPPlayBtn.png and /dev/null differ diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPPlayBtn@2x.png b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPPlayBtn@2x.png deleted file mode 100644 index 51c911e22c..0000000000 Binary files a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPPlayBtn@2x.png and /dev/null differ diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPPlayBtn@3x.png b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPPlayBtn@3x.png deleted file mode 100644 index 1affb6ec8d..0000000000 Binary files a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPPlayBtn@3x.png and /dev/null differ diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPUnmutedBtn.png b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPUnmutedBtn.png deleted file mode 100644 index a7d52e3b07..0000000000 Binary files a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPUnmutedBtn.png and /dev/null differ diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPUnmutedBtn@2x.png b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPUnmutedBtn@2x.png deleted file mode 100644 index 1860e97922..0000000000 Binary files a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPUnmutedBtn@2x.png and /dev/null differ diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPUnmutedBtn@3x.png b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPUnmutedBtn@3x.png deleted file mode 100644 index 6ec3ce6885..0000000000 Binary files a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPUnmutedBtn@3x.png and /dev/null differ diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Resources/MRAID.bundle/mraid.js b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Resources/MRAID.bundle/mraid.js deleted file mode 100644 index b2a7a4a546..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Resources/MRAID.bundle/mraid.js +++ /dev/null @@ -1,916 +0,0 @@ -/* -Do not modify this version of the file. It will be copied over when any of the project's targets are built. -If you wish to modify mraid.js, modify the version located at mopub-sdk-common/mraid/mraid.js. -*/ -(function() { - var isIOS = (/iphone|ipad|ipod/i).test(window.navigator.userAgent.toLowerCase()); - if (isIOS) { - console = {}; - console.log = function(log) { - var iframe = document.createElement('iframe'); - iframe.setAttribute('src', 'ios-log: ' + log); - document.documentElement.appendChild(iframe); - iframe.parentNode.removeChild(iframe); - iframe = null; - }; - console.debug = console.info = console.warn = console.error = console.log; - } -}()); - - -(function() { - var mraid = window.mraid = {}; - - ////////////////////////////////////////////////////////////////////////////////////////////////// - - // Bridge interface to SDK - - var bridge = window.mraidbridge = { - nativeSDKFiredReady: false, - nativeCallQueue: [], - nativeCallInFlight: false, - lastSizeChangeProperties: null - }; - - bridge.fireChangeEvent = function(properties) { - for (var p in properties) { - if (properties.hasOwnProperty(p)) { - // Change handlers defined by MRAID below - var handler = changeHandlers[p]; - handler(properties[p]); - } - } - }; - - bridge.nativeCallComplete = function(command) { - if (this.nativeCallQueue.length === 0) { - this.nativeCallInFlight = false; - return; - } - - var nextCall = this.nativeCallQueue.pop(); - window.location = nextCall; - }; - - bridge.executeNativeCall = function(args) { - var command = args.shift(); - - if (!this.nativeSDKFiredReady) { - console.log('rejecting ' + command + ' because mraid is not ready'); - bridge.notifyErrorEvent('mraid is not ready', command); - return; - } - - var call = 'mraid://' + command; - - var key, value; - var isFirstArgument = true; - - for (var i = 0; i < args.length; i += 2) { - key = args[i]; - value = args[i + 1]; - - if (value === null) continue; - - if (isFirstArgument) { - call += '?'; - isFirstArgument = false; - } else { - call += '&'; - } - - call += encodeURIComponent(key) + '=' + encodeURIComponent(value); - } - - if (this.nativeCallInFlight) { - this.nativeCallQueue.push(call); - } else { - this.nativeCallInFlight = true; - window.location = call; - } - }; - - - bridge.setCurrentPosition = function(x, y, width, height) { - currentPosition = { - x: x, - y: y, - width: width, - height: height - }; - broadcastEvent(EVENTS.INFO, 'Set current position to ' + stringify(currentPosition)); - }; - - bridge.setDefaultPosition = function(x, y, width, height) { - defaultPosition = { - x: x, - y: y, - width: width, - height: height - }; - broadcastEvent(EVENTS.INFO, 'Set default position to ' + stringify(defaultPosition)); - }; - - bridge.setMaxSize = function(width, height) { - maxSize = { - width: width, - height: height - }; - - expandProperties.width = width; - expandProperties.height = height; - - broadcastEvent(EVENTS.INFO, 'Set max size to ' + stringify(maxSize)); - }; - - bridge.setPlacementType = function(_placementType) { - placementType = _placementType; - broadcastEvent(EVENTS.INFO, 'Set placement type to ' + stringify(placementType)); - }; - - bridge.setScreenSize = function(width, height) { - screenSize = { - width: width, - height: height - }; - broadcastEvent(EVENTS.INFO, 'Set screen size to ' + stringify(screenSize)); - }; - - bridge.setState = function(_state) { - state = _state; - broadcastEvent(EVENTS.INFO, 'Set state to ' + stringify(state)); - broadcastEvent(EVENTS.STATECHANGE, state); - }; - - bridge.setIsViewable = function(_isViewable) { - isViewable = _isViewable; - broadcastEvent(EVENTS.INFO, 'Set isViewable to ' + stringify(isViewable)); - broadcastEvent(EVENTS.VIEWABLECHANGE, isViewable); - }; - - bridge.setSupports = function(sms, tel, calendar, storePicture, inlineVideo) { - supportProperties = { - sms: sms, - tel: tel, - calendar: calendar, - storePicture: storePicture, - inlineVideo: inlineVideo - }; - }; - - bridge.notifyReadyEvent = function() { - this.nativeSDKFiredReady = true; - broadcastEvent(EVENTS.READY); - }; - - bridge.notifyErrorEvent = function(message, action) { - broadcastEvent(EVENTS.ERROR, message, action); - }; - - // Temporary aliases while we migrate to the new API - bridge.fireReadyEvent = bridge.notifyReadyEvent; - bridge.fireErrorEvent = bridge.notifyErrorEvent; - - bridge.notifySizeChangeEvent = function(width, height) { - if (this.lastSizeChangeProperties && - width == this.lastSizeChangeProperties.width && height == this.lastSizeChangeProperties.height) { - return; - } - - this.lastSizeChangeProperties = { - width: width, - height: height - }; - broadcastEvent(EVENTS.SIZECHANGE, width, height); - }; - - bridge.notifyStateChangeEvent = function() { - if (state === STATES.LOADING) { - broadcastEvent(EVENTS.INFO, 'Native SDK initialized.'); - } - - broadcastEvent(EVENTS.INFO, 'Set state to ' + stringify(state)); - broadcastEvent(EVENTS.STATECHANGE, state); - }; - - bridge.notifyViewableChangeEvent = function() { - broadcastEvent(EVENTS.INFO, 'Set isViewable to ' + stringify(isViewable)); - broadcastEvent(EVENTS.VIEWABLECHANGE, isViewable); - }; - - - // Constants. //////////////////////////////////////////////////////////////////////////////////// - - var VERSION = mraid.VERSION = '2.0'; - - var STATES = mraid.STATES = { - LOADING: 'loading', - DEFAULT: 'default', - EXPANDED: 'expanded', - HIDDEN: 'hidden', - RESIZED: 'resized' - }; - - var EVENTS = mraid.EVENTS = { - ERROR: 'error', - INFO: 'info', - READY: 'ready', - STATECHANGE: 'stateChange', - VIEWABLECHANGE: 'viewableChange', - SIZECHANGE: 'sizeChange' - }; - - var PLACEMENT_TYPES = mraid.PLACEMENT_TYPES = { - UNKNOWN: 'unknown', - INLINE: 'inline', - INTERSTITIAL: 'interstitial' - }; - - // External MRAID state: may be directly or indirectly modified by the ad JS. //////////////////// - - // Properties which define the behavior of an expandable ad. - var expandProperties = { - width: false, - height: false, - useCustomClose: false, - isModal: true - }; - - var resizeProperties = { - width: false, - height: false, - offsetX: false, - offsetY: false, - customClosePosition: 'top-right', - allowOffscreen: true - }; - - var orientationProperties = { - allowOrientationChange: true, - forceOrientation: "none" - }; - - var supportProperties = { - sms: false, - tel: false, - calendar: false, - storePicture: false, - inlineVideo: false - }; - - // default is undefined so that notifySizeChangeEvent can track changes - var lastSizeChangeProperties; - - var maxSize = {}; - - var currentPosition = {}; - - var defaultPosition = {}; - - var screenSize = {}; - - var hasSetCustomClose = false; - - var listeners = {}; - - // Internal MRAID state. Modified by the native SDK. ///////////////////////////////////////////// - - var state = STATES.LOADING; - - var isViewable = false; - - var placementType = PLACEMENT_TYPES.UNKNOWN; - - var hostSDKVersion = { - 'major': 0, - 'minor': 0, - 'patch': 0 - }; - - ////////////////////////////////////////////////////////////////////////////////////////////////// - - var EventListeners = function(event) { - this.event = event; - this.count = 0; - var listeners = {}; - - this.add = function(func) { - var id = String(func); - if (!listeners[id]) { - listeners[id] = func; - this.count++; - } - }; - - this.remove = function(func) { - var id = String(func); - if (listeners[id]) { - listeners[id] = null; - delete listeners[id]; - this.count--; - return true; - } else { - return false; - } - }; - - this.removeAll = function() { - for (var id in listeners) { - if (listeners.hasOwnProperty(id)) this.remove(listeners[id]); - } - }; - - this.broadcast = function(args) { - for (var id in listeners) { - if (listeners.hasOwnProperty(id)) listeners[id].apply(mraid, args); - } - }; - - this.toString = function() { - var out = [event, ':']; - for (var id in listeners) { - if (listeners.hasOwnProperty(id)) out.push('|', id, '|'); - } - return out.join(''); - }; - }; - - var broadcastEvent = function() { - var args = new Array(arguments.length); - var l = arguments.length; - for (var i = 0; i < l; i++) args[i] = arguments[i]; - var event = args.shift(); - if (listeners[event]) listeners[event].broadcast(args); - }; - - var contains = function(value, array) { - for (var i in array) { - if (array[i] === value) return true; - } - return false; - }; - - var clone = function(obj) { - if (obj === null) return null; - var f = function() {}; - f.prototype = obj; - return new f(); - }; - - var stringify = function(obj) { - if (typeof obj === 'object') { - var out = []; - if (obj.push) { - // Array. - for (var p in obj) out.push(obj[p]); - return '[' + out.join(',') + ']'; - } else { - // Other object. - for (var p in obj) out.push("'" + p + "': " + obj[p]); - return '{' + out.join(',') + '}'; - } - } else return String(obj); - }; - - var trim = function(str) { - return str.replace(/^\s+|\s+$/g, ''); - }; - - // Functions that will be invoked by the native SDK whenever a "change" event occurs. - var changeHandlers = { - state: function(val) { - if (state === STATES.LOADING) { - broadcastEvent(EVENTS.INFO, 'Native SDK initialized.'); - } - state = val; - broadcastEvent(EVENTS.INFO, 'Set state to ' + stringify(val)); - broadcastEvent(EVENTS.STATECHANGE, state); - }, - - viewable: function(val) { - isViewable = val; - broadcastEvent(EVENTS.INFO, 'Set isViewable to ' + stringify(val)); - broadcastEvent(EVENTS.VIEWABLECHANGE, isViewable); - }, - - placementType: function(val) { - broadcastEvent(EVENTS.INFO, 'Set placementType to ' + stringify(val)); - placementType = val; - }, - - sizeChange: function(val) { - broadcastEvent(EVENTS.INFO, 'Set screenSize to ' + stringify(val)); - for (var key in val) { - if (val.hasOwnProperty(key)) screenSize[key] = val[key]; - } - }, - - supports: function(val) { - broadcastEvent(EVENTS.INFO, 'Set supports to ' + stringify(val)); - supportProperties = val; - }, - - hostSDKVersion: function(val) { - // val is expected to be formatted like 'X.Y.Z[-+]identifier'. - var versions = val.split('.').map(function(version) { - return parseInt(version, 10); - }).filter(function(version) { - return version >= 0; - }); - - if (versions.length >= 3) { - hostSDKVersion['major'] = parseInt(versions[0], 10); - hostSDKVersion['minor'] = parseInt(versions[1], 10); - hostSDKVersion['patch'] = parseInt(versions[2], 10); - broadcastEvent(EVENTS.INFO, 'Set hostSDKVersion to ' + stringify(hostSDKVersion)); - } - } - }; - - var validate = function(obj, validators, action, merge) { - if (!merge) { - // Check to see if any required properties are missing. - if (obj === null) { - broadcastEvent(EVENTS.ERROR, 'Required object not provided.', action); - return false; - } else { - for (var i in validators) { - if (validators.hasOwnProperty(i) && obj[i] === undefined) { - broadcastEvent(EVENTS.ERROR, 'Object is missing required property: ' + i, action); - return false; - } - } - } - } - - for (var prop in obj) { - var validator = validators[prop]; - var value = obj[prop]; - if (validator && !validator(value)) { - // Failed validation. - broadcastEvent(EVENTS.ERROR, 'Value of property ' + prop + ' is invalid: ' + value, action); - return false; - } - } - return true; - }; - - var expandPropertyValidators = { - useCustomClose: function(v) { return (typeof v === 'boolean'); }, - }; - - ////////////////////////////////////////////////////////////////////////////////////////////////// - - mraid.addEventListener = function(event, listener) { - if (!event || !listener) { - broadcastEvent(EVENTS.ERROR, 'Both event and listener are required.', 'addEventListener'); - } else if (!contains(event, EVENTS)) { - broadcastEvent(EVENTS.ERROR, 'Unknown MRAID event: ' + event, 'addEventListener'); - } else { - if (!listeners[event]) { - listeners[event] = new EventListeners(event); - } - listeners[event].add(listener); - } - }; - - mraid.close = function() { - if (state === STATES.HIDDEN) { - broadcastEvent(EVENTS.ERROR, 'Ad cannot be closed when it is already hidden.', - 'close'); - } else bridge.executeNativeCall(['close']); - }; - - mraid.expand = function(URL) { - if (!(this.getState() === STATES.DEFAULT || this.getState() === STATES.RESIZED)) { - broadcastEvent(EVENTS.ERROR, 'Ad can only be expanded from the default or resized state.', 'expand'); - } else { - var args = ['expand', - 'shouldUseCustomClose', expandProperties.useCustomClose - ]; - - if (URL) { - args = args.concat(['url', URL]); - } - - bridge.executeNativeCall(args); - } - }; - - mraid.getExpandProperties = function() { - var properties = { - width: expandProperties.width, - height: expandProperties.height, - useCustomClose: expandProperties.useCustomClose, - isModal: expandProperties.isModal - }; - return properties; - }; - - - mraid.getCurrentPosition = function() { - return { - x: currentPosition.x, - y: currentPosition.y, - width: currentPosition.width, - height: currentPosition.height - }; - }; - - mraid.getDefaultPosition = function() { - return { - x: defaultPosition.x, - y: defaultPosition.y, - width: defaultPosition.width, - height: defaultPosition.height - }; - }; - - mraid.getMaxSize = function() { - return { - width: maxSize.width, - height: maxSize.height - }; - }; - - mraid.getPlacementType = function() { - return placementType; - }; - - mraid.getScreenSize = function() { - return { - width: screenSize.width, - height: screenSize.height - }; - }; - - mraid.getState = function() { - return state; - }; - - mraid.isViewable = function() { - return isViewable; - }; - - mraid.getVersion = function() { - return mraid.VERSION; - }; - - mraid.open = function(URL) { - if (!URL) broadcastEvent(EVENTS.ERROR, 'URL is required.', 'open'); - else bridge.executeNativeCall(['open', 'url', URL]); - }; - - mraid.removeEventListener = function(event, listener) { - if (!event) { - broadcastEvent(EVENTS.ERROR, 'Event is required.', 'removeEventListener'); - return; - } - - if (listener) { - // If we have a valid event, we'll try to remove the listener from it. - var success = false; - if (listeners[event]) { - success = listeners[event].remove(listener); - } - - // If we didn't have a valid event or couldn't remove the listener from the event, broadcast an error and return early. - if (!success) { - broadcastEvent(EVENTS.ERROR, 'Listener not currently registered for event.', 'removeEventListener'); - return; - } - - } else if (!listener && listeners[event]) { - listeners[event].removeAll(); - } - - if (listeners[event] && listeners[event].count === 0) { - listeners[event] = null; - delete listeners[event]; - } - }; - - mraid.setExpandProperties = function(properties) { - if (validate(properties, expandPropertyValidators, 'setExpandProperties', true)) { - if (properties.hasOwnProperty('useCustomClose')) { - expandProperties.useCustomClose = properties.useCustomClose; - } - } - }; - - mraid.useCustomClose = function(shouldUseCustomClose) { - expandProperties.useCustomClose = shouldUseCustomClose; - hasSetCustomClose = true; - bridge.executeNativeCall(['usecustomclose', 'shouldUseCustomClose', shouldUseCustomClose]); - }; - - // MRAID 2.0 APIs //////////////////////////////////////////////////////////////////////////////// - - mraid.createCalendarEvent = function(parameters) { - CalendarEventParser.initialize(parameters); - if (CalendarEventParser.parse()) { - bridge.executeNativeCall(CalendarEventParser.arguments); - } else { - broadcastEvent(EVENTS.ERROR, CalendarEventParser.errors[0], 'createCalendarEvent'); - } - }; - - mraid.supports = function(feature) { - return supportProperties[feature]; - }; - - mraid.playVideo = function(uri) { - if (!mraid.isViewable()) { - broadcastEvent(EVENTS.ERROR, 'playVideo cannot be called until the ad is viewable', 'playVideo'); - return; - } - - if (!uri) { - broadcastEvent(EVENTS.ERROR, 'playVideo must be called with a valid URI', 'playVideo'); - } else { - bridge.executeNativeCall(['playVideo', 'uri', uri]); - } - }; - - mraid.storePicture = function(uri) { - if (!mraid.isViewable()) { - broadcastEvent(EVENTS.ERROR, 'storePicture cannot be called until the ad is viewable', 'storePicture'); - return; - } - - if (!uri) { - broadcastEvent(EVENTS.ERROR, 'storePicture must be called with a valid URI', 'storePicture'); - } else { - bridge.executeNativeCall(['storePicture', 'uri', uri]); - } - }; - - - var resizePropertyValidators = { - width: function(v) { - return !isNaN(v) && v > 0; - }, - height: function(v) { - return !isNaN(v) && v > 0; - }, - offsetX: function(v) { - return !isNaN(v); - }, - offsetY: function(v) { - return !isNaN(v); - }, - customClosePosition: function(v) { - return (typeof v === 'string' && - ['top-right', 'bottom-right', 'top-left', 'bottom-left', 'center', 'top-center', 'bottom-center'].indexOf(v) > -1); - }, - allowOffscreen: function(v) { - return (typeof v === 'boolean'); - } - }; - - mraid.setOrientationProperties = function(properties) { - - if (properties.hasOwnProperty('allowOrientationChange')) { - orientationProperties.allowOrientationChange = properties.allowOrientationChange; - } - - if (properties.hasOwnProperty('forceOrientation')) { - orientationProperties.forceOrientation = properties.forceOrientation; - } - - var args = ['setOrientationProperties', - 'allowOrientationChange', orientationProperties.allowOrientationChange, - 'forceOrientation', orientationProperties.forceOrientation - ]; - bridge.executeNativeCall(args); - }; - - mraid.getOrientationProperties = function() { - return { - allowOrientationChange: orientationProperties.allowOrientationChange, - forceOrientation: orientationProperties.forceOrientation - }; - }; - - mraid.resize = function() { - if (!(this.getState() === STATES.DEFAULT || this.getState() === STATES.RESIZED)) { - broadcastEvent(EVENTS.ERROR, 'Ad can only be resized from the default or resized state.', 'resize'); - } else if (!resizeProperties.width || !resizeProperties.height) { - broadcastEvent(EVENTS.ERROR, 'Must set resize properties before calling resize()', 'resize'); - } else { - var args = ['resize', - 'width', resizeProperties.width, - 'height', resizeProperties.height, - 'offsetX', resizeProperties.offsetX || 0, - 'offsetY', resizeProperties.offsetY || 0, - 'customClosePosition', resizeProperties.customClosePosition, - 'allowOffscreen', !!resizeProperties.allowOffscreen - ]; - - bridge.executeNativeCall(args); - } - }; - - mraid.getResizeProperties = function() { - var properties = { - width: resizeProperties.width, - height: resizeProperties.height, - offsetX: resizeProperties.offsetX, - offsetY: resizeProperties.offsetY, - customClosePosition: resizeProperties.customClosePosition, - allowOffscreen: resizeProperties.allowOffscreen - }; - return properties; - }; - - mraid.setResizeProperties = function(properties) { - if (validate(properties, resizePropertyValidators, 'setResizeProperties', true)) { - - var desiredProperties = ['width', 'height', 'offsetX', 'offsetY', 'customClosePosition', 'allowOffscreen']; - - var length = desiredProperties.length; - - for (var i = 0; i < length; i++) { - var propname = desiredProperties[i]; - if (properties.hasOwnProperty(propname)) { - resizeProperties[propname] = properties[propname]; - } - } - } - }; - - // Determining SDK version /////////////////////////////////////////////////////////////////////// - - mraid.getHostSDKVersion = function() { - return hostSDKVersion; - } - - // Calendar helpers ////////////////////////////////////////////////////////////////////////////// - - var CalendarEventParser = { - initialize: function(parameters) { - this.parameters = parameters; - this.errors = []; - this.arguments = ['createCalendarEvent']; - }, - - parse: function() { - if (!this.parameters) { - this.errors.push('The object passed to createCalendarEvent cannot be null.'); - } else { - this.parseDescription(); - this.parseLocation(); - this.parseSummary(); - this.parseStartAndEndDates(); - this.parseReminder(); - this.parseRecurrence(); - this.parseTransparency(); - } - - var errorCount = this.errors.length; - if (errorCount) { - this.arguments.length = 0; - } - - return (errorCount === 0); - }, - - parseDescription: function() { - this._processStringValue('description'); - }, - - parseLocation: function() { - this._processStringValue('location'); - }, - - parseSummary: function() { - this._processStringValue('summary'); - }, - - parseStartAndEndDates: function() { - this._processDateValue('start'); - this._processDateValue('end'); - }, - - parseReminder: function() { - var reminder = this._getParameter('reminder'); - if (!reminder) { - return; - } - - if (reminder < 0) { - this.arguments.push('relativeReminder'); - this.arguments.push(parseInt(reminder) / 1000); - } else { - this.arguments.push('absoluteReminder'); - this.arguments.push(reminder); - } - }, - - parseRecurrence: function() { - var recurrenceDict = this._getParameter('recurrence'); - if (!recurrenceDict) { - return; - } - - this.parseRecurrenceInterval(recurrenceDict); - this.parseRecurrenceFrequency(recurrenceDict); - this.parseRecurrenceEndDate(recurrenceDict); - this.parseRecurrenceArrayValue(recurrenceDict, 'daysInWeek'); - this.parseRecurrenceArrayValue(recurrenceDict, 'daysInMonth'); - this.parseRecurrenceArrayValue(recurrenceDict, 'daysInYear'); - this.parseRecurrenceArrayValue(recurrenceDict, 'monthsInYear'); - }, - - parseTransparency: function() { - var validValues = ['opaque', 'transparent']; - - if (this.parameters.hasOwnProperty('transparency')) { - var transparency = this.parameters.transparency; - if (contains(transparency, validValues)) { - this.arguments.push('transparency'); - this.arguments.push(transparency); - } else { - this.errors.push('transparency must be opaque or transparent'); - } - } - }, - - parseRecurrenceArrayValue: function(recurrenceDict, kind) { - if (recurrenceDict.hasOwnProperty(kind)) { - var array = recurrenceDict[kind]; - if (!array || !(array instanceof Array)) { - this.errors.push(kind + ' must be an array.'); - } else { - var arrayStr = array.join(','); - this.arguments.push(kind); - this.arguments.push(arrayStr); - } - } - }, - - parseRecurrenceInterval: function(recurrenceDict) { - if (recurrenceDict.hasOwnProperty('interval')) { - var interval = recurrenceDict.interval; - if (!interval) { - this.errors.push('Recurrence interval cannot be null.'); - } else { - this.arguments.push('interval'); - this.arguments.push(interval); - } - } else { - // If a recurrence rule was specified without an interval, use a default value of 1. - this.arguments.push('interval'); - this.arguments.push(1); - } - }, - - parseRecurrenceFrequency: function(recurrenceDict) { - if (recurrenceDict.hasOwnProperty('frequency')) { - var frequency = recurrenceDict.frequency; - var validFrequencies = ['daily', 'weekly', 'monthly', 'yearly']; - if (contains(frequency, validFrequencies)) { - this.arguments.push('frequency'); - this.arguments.push(frequency); - } else { - this.errors.push('Recurrence frequency must be one of: "daily", "weekly", "monthly", "yearly".'); - } - } - }, - - parseRecurrenceEndDate: function(recurrenceDict) { - var expires = recurrenceDict.expires; - - if (!expires) { - return; - } - - this.arguments.push('expires'); - this.arguments.push(expires); - }, - - _getParameter: function(key) { - if (this.parameters.hasOwnProperty(key)) { - return this.parameters[key]; - } - - return null; - }, - - _processStringValue: function(kind) { - if (this.parameters.hasOwnProperty(kind)) { - var value = this.parameters[kind]; - this.arguments.push(kind); - this.arguments.push(value); - } - }, - - _processDateValue: function(kind) { - if (this.parameters.hasOwnProperty(kind)) { - var dateString = this._getParameter(kind); - this.arguments.push(kind); - this.arguments.push(dateString); - } - } - }; -}()); diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPMoPubRewardedPlayableCustomEvent.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPMoPubRewardedPlayableCustomEvent.h deleted file mode 100644 index 0ba06bb869..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPMoPubRewardedPlayableCustomEvent.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// MPMoPubRewardedPlayableCustomEvent.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPRewardedVideoCustomEvent.h" -#import "MPPrivateRewardedVideoCustomEventDelegate.h" - -@interface MPMoPubRewardedPlayableCustomEvent : MPRewardedVideoCustomEvent - -@property (nonatomic, weak) id delegate; -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPMoPubRewardedPlayableCustomEvent.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPMoPubRewardedPlayableCustomEvent.m deleted file mode 100644 index 3111475aa0..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPMoPubRewardedPlayableCustomEvent.m +++ /dev/null @@ -1,210 +0,0 @@ -// -// MPMoPubRewardedPlayableCustomEvent.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPMoPubRewardedPlayableCustomEvent.h" -#import "MPMRAIDInterstitialViewController.h" -#import "MPAdConfiguration.h" -#import "MPError.h" -#import "MPLogging.h" -#import "MPRewardedVideoError.h" -#import "MPCountdownTimerView.h" -#import "UIView+MPAdditions.h" - -const NSTimeInterval kDefaultCountdownTimerIntervalInSeconds = 30; - -@interface MPMoPubRewardedPlayableCustomEvent() - -@property (nonatomic, assign) BOOL adAvailable; -@property (nonatomic, strong) MPMRAIDInterstitialViewController *interstitial; -@property (nonatomic, strong) MPCountdownTimerView *timerView; -@property (nonatomic, assign) BOOL userRewarded; -@property (nonatomic, assign) NSTimeInterval countdownDuration; - -@end - -@interface MPMoPubRewardedPlayableCustomEvent (MPInterstitialViewControllerDelegate) -@end - -@implementation MPMoPubRewardedPlayableCustomEvent - -- (NSString *)adUnitId { - return [self.delegate adUnitId]; -} - -- (void)dealloc { - [_timerView stopAndSignalCompletion:NO]; -} - -// Lazy initialization property for the MRAID interstitial. -- (MPMRAIDInterstitialViewController *)interstitial { - if (_interstitial == nil) { - _interstitial = [[MPMRAIDInterstitialViewController alloc] initWithAdConfiguration:self.delegate.configuration]; - } - - return _interstitial; -} - -// Retrieves a valid countdown duration to use for the timer. In the event that `rewardedPlayableDuration` -// from `MPAdConfiguration` is less than zero, the default value `kDefaultCountdownTimerIntervalInSeconds` -// will be used instead. -- (NSTimeInterval)countdownDuration { - NSTimeInterval duration = self.delegate.configuration.rewardedPlayableDuration; - if (duration <= 0) { - duration = kDefaultCountdownTimerIntervalInSeconds; - } - - return duration; -} - -// Shows the native close button and deallocates the countdown timer since it will no -// longer be used. -- (void)showCloseButton { - [self.interstitial setCloseButtonStyle:MPInterstitialCloseButtonStyleAlwaysVisible]; - [self.timerView removeFromSuperview]; - self.timerView = nil; -} - -// Only reward the user once; either by countdown timer elapsing or rewarding on click -// (if configured). -- (void)rewardUserWithConfiguration:(MPAdConfiguration *)configuration timerHasElapsed:(BOOL)hasElasped { - if (!self.userRewarded && (hasElasped || configuration.rewardedPlayableShouldRewardOnClick)) { - MPLogInfo(@"MoPub rewarded playable user rewarded."); - - [self.delegate rewardedVideoShouldRewardUserForCustomEvent:self reward:configuration.selectedReward]; - self.userRewarded = YES; - } -} - -#pragma mark - MPRewardedVideoCustomEvent - -@dynamic delegate; - -- (void)requestRewardedVideoWithCustomEventInfo:(NSDictionary *)info adMarkup:(NSString *)adMarkup { - MPAdConfiguration * configuration = self.delegate.configuration; - MPLogAdEvent([MPLogEvent adLoadAttemptForAdapter:NSStringFromClass(configuration.customEventClass) dspCreativeId:configuration.dspCreativeId dspName:nil], self.adUnitId); - - self.interstitial.delegate = self; - - [self.interstitial setCloseButtonStyle:MPInterstitialCloseButtonStyleAlwaysHidden]; - [self.interstitial startLoading]; -} - -- (BOOL)hasAdAvailable { - return self.adAvailable; -} - -- (void)handleAdPlayedForCustomEventNetwork { - // no-op -} - -- (void)handleCustomEventInvalidated { - // no-op -} - -- (void)presentRewardedVideoFromViewController:(UIViewController *)viewController { - MPLogAdEvent([MPLogEvent adShowAttemptForAdapter:NSStringFromClass(self.class)], self.adUnitId); - - // Error handling block. - __typeof__(self) __weak weakSelf = self; - void (^onShowError)(NSError *) = ^(NSError * error) { - __typeof__(self) strongSelf = weakSelf; - if (strongSelf != nil) { - MPLogAdEvent([MPLogEvent adShowFailedForAdapter:NSStringFromClass(strongSelf.class) error:error], strongSelf.adUnitId); - - [strongSelf.delegate rewardedVideoDidFailToPlayForCustomEvent:strongSelf error:error]; - [strongSelf showCloseButton]; - } - }; - - // No ad available to show. - if (!self.hasAdAvailable) { - NSError * error = [NSError errorWithDomain:MoPubRewardedVideoAdsSDKDomain code:MPRewardedVideoAdErrorNoAdsAvailable userInfo:nil]; - onShowError(error); - return; - } - - // Add the countdown timer to the interstitial and start the timer. - self.timerView = [[MPCountdownTimerView alloc] initWithDuration:self.countdownDuration timerCompletion:^(BOOL hasElapsed) { - __typeof__(self) strongSelf = weakSelf; - if (strongSelf != nil) { - [strongSelf rewardUserWithConfiguration:strongSelf.delegate.configuration timerHasElapsed:hasElapsed]; - [strongSelf showCloseButton]; - } - }]; - [self.interstitial.view addSubview:self.timerView]; - - NSArray *constraints = @[[self.timerView.topAnchor constraintEqualToAnchor:self.interstitial.view.mp_safeTopAnchor], - [self.timerView.rightAnchor constraintEqualToAnchor:self.interstitial.view.mp_safeRightAnchor]]; - [NSLayoutConstraint activateConstraints:constraints]; - self.timerView.translatesAutoresizingMaskIntoConstraints = NO; - - [self.timerView start]; - - [self.interstitial presentInterstitialFromViewController:viewController complete:^(NSError * error) { - if (error != nil) { - onShowError(error); - } - else { - MPLogAdEvent([MPLogEvent adShowSuccessForAdapter:NSStringFromClass(self.class)], self.adUnitId); - } - }]; -} - -@end - -#pragma mark - MPInterstitialViewControllerDelegate - -@implementation MPMoPubRewardedPlayableCustomEvent (MPInterstitialViewControllerDelegate) - -- (void)interstitialDidLoadAd:(id)interstitial { - MPLogAdEvent([MPLogEvent adLoadSuccessForAdapter:NSStringFromClass(self.class)], self.adUnitId); - - self.adAvailable = YES; - [self.delegate rewardedVideoDidLoadAdForCustomEvent:self]; -} - -- (void)interstitialDidAppear:(id)interstitial { - [self.delegate rewardedVideoDidAppearForCustomEvent:self]; -} - -- (void)interstitialWillAppear:(id)interstitial { - [self.delegate rewardedVideoWillAppearForCustomEvent:self]; -} - -- (void)interstitialDidFailToLoadAd:(id)interstitial { - NSString * message = [NSString stringWithFormat:@"Failed to load creative:\n%@", self.delegate.configuration.adResponseHTMLString]; - NSError * error = [NSError errorWithCode:MOPUBErrorAdapterFailedToLoadAd localizedDescription:message]; - MPLogAdEvent([MPLogEvent adLoadFailedForAdapter:NSStringFromClass(self.class) error:error], self.adUnitId); - - self.adAvailable = NO; - [self.delegate rewardedVideoDidFailToLoadAdForCustomEvent:self error:nil]; -} - -- (void)interstitialWillDisappear:(id)interstitial { - [self.delegate rewardedVideoWillDisappearForCustomEvent:self]; -} - -- (void)interstitialDidDisappear:(id)interstitial { - self.adAvailable = NO; - [self.timerView stopAndSignalCompletion:NO]; - [self.delegate rewardedVideoDidDisappearForCustomEvent:self]; - - // Get rid of the interstitial view controller when done with it so we don't hold on longer than needed - self.interstitial = nil; -} - -- (void)interstitialDidReceiveTapEvent:(id)interstitial { - [self rewardUserWithConfiguration:self.delegate.configuration timerHasElapsed:NO]; - [self.delegate rewardedVideoDidReceiveTapEventForCustomEvent:self]; -} - -- (void)interstitialWillLeaveApplication:(id)interstitial { - [self.delegate rewardedVideoWillLeaveApplicationForCustomEvent:self]; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPMoPubRewardedVideoCustomEvent.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPMoPubRewardedVideoCustomEvent.h deleted file mode 100644 index ad737ba9d2..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPMoPubRewardedVideoCustomEvent.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// MPMoPubRewardedVideoCustomEvent.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -// Copyright (c) 2015 MoPub. All rights reserved. -// - -#import "MPRewardedVideoCustomEvent.h" -#import "MPPrivateRewardedVideoCustomEventDelegate.h" - -@interface MPMoPubRewardedVideoCustomEvent : MPRewardedVideoCustomEvent - -@property (nonatomic, weak) id delegate; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPMoPubRewardedVideoCustomEvent.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPMoPubRewardedVideoCustomEvent.m deleted file mode 100644 index cd09db07f6..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPMoPubRewardedVideoCustomEvent.m +++ /dev/null @@ -1,161 +0,0 @@ -// -// MPMoPubRewardedVideoCustomEvent.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPMoPubRewardedVideoCustomEvent.h" -#import "MPMRAIDInterstitialViewController.h" -#import "MPError.h" -#import "MPLogging.h" -#import "MPRewardedVideoReward.h" -#import "MPAdConfiguration.h" -#import "MPRewardedVideoAdapter.h" -#import "MPRewardedVideoReward.h" -#import "MPRewardedVideoError.h" - -@interface MPMoPubRewardedVideoCustomEvent() - -@property (nonatomic) MPMRAIDInterstitialViewController *interstitial; -@property (nonatomic) BOOL adAvailable; - -@end - -@interface MPMoPubRewardedVideoCustomEvent (MPInterstitialViewControllerDelegate) -@end - -@implementation MPMoPubRewardedVideoCustomEvent - -@dynamic delegate; - -- (NSString *)adUnitId -{ - return [self.delegate adUnitId]; -} - -- (void)requestRewardedVideoWithCustomEventInfo:(NSDictionary *)info adMarkup:(NSString *)adMarkup -{ - MPAdConfiguration * configuration = self.delegate.configuration; - MPLogAdEvent([MPLogEvent adLoadAttemptForAdapter:NSStringFromClass(configuration.customEventClass) dspCreativeId:configuration.dspCreativeId dspName:nil], self.adUnitId); - - self.interstitial = [[MPMRAIDInterstitialViewController alloc] initWithAdConfiguration:configuration]; - self.interstitial.delegate = self; - - [self.interstitial setCloseButtonStyle:MPInterstitialCloseButtonStyleAlwaysHidden]; - [self.interstitial startLoading]; -} - -- (BOOL)hasAdAvailable -{ - return self.adAvailable; -} - -- (void)handleAdPlayedForCustomEventNetwork -{ - // no-op -} - -- (void)handleCustomEventInvalidated -{ - // no-op -} - -- (void)presentRewardedVideoFromViewController:(UIViewController *)viewController -{ - MPLogAdEvent([MPLogEvent adShowAttemptForAdapter:NSStringFromClass(self.class)], self.adUnitId); - - // Error handling block. - __typeof__(self) __weak weakSelf = self; - void (^onShowError)(NSError *) = ^(NSError * error) { - __typeof__(self) strongSelf = weakSelf; - if (strongSelf != nil) { - MPLogAdEvent([MPLogEvent adShowFailedForAdapter:NSStringFromClass(strongSelf.class) error:error], strongSelf.adUnitId); - - [strongSelf.delegate rewardedVideoDidFailToPlayForCustomEvent:strongSelf error:error]; - } - }; - - // No ad available to show. - if (!self.hasAdAvailable) { - NSError * error = [NSError errorWithDomain:MoPubRewardedVideoAdsSDKDomain code:MPRewardedVideoAdErrorNoAdsAvailable userInfo:nil]; - onShowError(error); - return; - } - - [self.interstitial presentInterstitialFromViewController:viewController complete:^(NSError * error) { - if (error != nil) { - onShowError(error); - } - else { - MPLogAdEvent([MPLogEvent adShowSuccessForAdapter:NSStringFromClass(self.class)], self.adUnitId); - } - }]; -} - -@end - -#pragma mark - MPInterstitialViewControllerDelegate - -@implementation MPMoPubRewardedVideoCustomEvent (MPInterstitialViewControllerDelegate) - -- (void)interstitialDidLoadAd:(id)interstitial -{ - MPLogAdEvent([MPLogEvent adLoadSuccessForAdapter:NSStringFromClass(self.class)], self.adUnitId); - - self.adAvailable = YES; - [self.delegate rewardedVideoDidLoadAdForCustomEvent:self]; -} - -- (void)interstitialDidAppear:(id)interstitial -{ - [self.delegate rewardedVideoDidAppearForCustomEvent:self]; -} - -- (void)interstitialWillAppear:(id)interstitial -{ - [self.delegate rewardedVideoWillAppearForCustomEvent:self]; -} - -- (void)interstitialDidFailToLoadAd:(id)interstitial -{ - NSString * message = [NSString stringWithFormat:@"Failed to load creative:\n%@", self.delegate.configuration.adResponseHTMLString]; - NSError * error = [NSError errorWithCode:MOPUBErrorAdapterFailedToLoadAd localizedDescription:message]; - MPLogAdEvent([MPLogEvent adLoadFailedForAdapter:NSStringFromClass(self.class) error:error], self.adUnitId); - - self.adAvailable = NO; - [self.delegate rewardedVideoDidFailToLoadAdForCustomEvent:self error:nil]; -} - -- (void)interstitialWillDisappear:(id)interstitial -{ - [self.delegate rewardedVideoWillDisappearForCustomEvent:self]; -} - -- (void)interstitialDidDisappear:(id)interstitial -{ - self.adAvailable = NO; - [self.delegate rewardedVideoDidDisappearForCustomEvent:self]; - - // Get rid of the interstitial view controller when done with it so we don't hold on longer than needed - self.interstitial = nil; -} - -- (void)interstitialDidReceiveTapEvent:(id)interstitial -{ - [self.delegate rewardedVideoDidReceiveTapEventForCustomEvent:self]; -} - -- (void)interstitialWillLeaveApplication:(id)interstitial -{ - [self.delegate rewardedVideoWillLeaveApplicationForCustomEvent:self]; -} - -- (void)interstitialRewardedVideoEnded -{ - MPLogInfo(@"MoPub rewarded video finished playing."); - [self.delegate rewardedVideoShouldRewardUserForCustomEvent:self reward:self.delegate.configuration.selectedReward]; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPPrivateRewardedVideoCustomEventDelegate.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPPrivateRewardedVideoCustomEventDelegate.h deleted file mode 100644 index fd22d5aab5..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPPrivateRewardedVideoCustomEventDelegate.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// MPPrivateRewardedVideoCustomEventDelegate.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPRewardedVideoCustomEvent.h" - -@class MPAdConfiguration; -@class CLLocation; - -@protocol MPPrivateRewardedVideoCustomEventDelegate - -- (NSString *)adUnitId; -- (MPAdConfiguration *)configuration; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPRewardedVideo+Internal.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPRewardedVideo+Internal.h deleted file mode 100644 index 7c81cabf6b..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPRewardedVideo+Internal.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// MPRewardedVideo+Internal.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPRewardedVideo.h" - -@interface MPRewardedVideo (Internal) - -+ (MPRewardedVideo *)sharedInstance; -- (void)startRewardedVideoConnectionWithUrl:(NSURL *)url; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPRewardedVideoAdManager.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPRewardedVideoAdManager.h deleted file mode 100644 index 08751f0de0..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPRewardedVideoAdManager.h +++ /dev/null @@ -1,96 +0,0 @@ -// -// MPRewardedVideoAdManager.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPAdTargeting.h" -#import "MPImpressionData.h" - -@class MPRewardedVideoReward; -@protocol MPRewardedVideoAdManagerDelegate; - -/** - * `MPRewardedVideoAdManager` represents a rewarded video for a single ad unit ID. This is the object that - * `MPRewardedVideo` uses to load and present the ad. - */ -@interface MPRewardedVideoAdManager : NSObject - -@property (nonatomic, weak) id delegate; -@property (nonatomic, readonly) NSString *adUnitId; -@property (nonatomic, strong) NSArray *mediationSettings; -@property (nonatomic, copy) NSString *customerId; -@property (nonatomic, strong) MPAdTargeting *targeting; - -/** - * An array of rewards that are available for the rewarded ad that can be selected when presenting the ad. - */ -@property (nonatomic, readonly) NSArray *availableRewards; - -/** - * The currently selected reward that will be awarded to the user upon completion of the ad. By default, - * this corresponds to the first reward in `availableRewards`. - */ -@property (nonatomic, readonly) MPRewardedVideoReward *selectedReward; - -- (instancetype)initWithAdUnitID:(NSString *)adUnitID delegate:(id)delegate; - -/** - * Returns the custom event class type. - */ -- (Class)customEventClass; - -/** - * Loads a rewarded video ad with the ad manager's ad unit ID. - * - * @param customerId The user's id within the app. - * @param targeting Optional ad targeting parameters. - * - * However, if an ad has been played for the last time a load was issued and load is called again, the method will request a new ad. - */ -- (void)loadRewardedVideoAdWithCustomerId:(NSString *)customerId targeting:(MPAdTargeting *)targeting; - -/** - * Tells the caller whether the underlying ad network currently has an ad available for presentation. - */ -- (BOOL)hasAdAvailable; - -/** - * Plays a rewarded video ad. - * - * @param viewController Presents the rewarded video ad from viewController. - * @param reward A reward chosen from `availableRewards` to award the user upon completion. - * This value should not be `nil`. If the reward that is passed in did not come from `availableRewards`, - * this method will not present the rewarded ad and invoke `rewardedVideoDidFailToPlayForAdManager:error:`. - * @param customData Optional custom data string to include in the server-to-server callback. If a server-to-server callback - * is not used, or if the ad unit is configured for local rewarding, this value will not be persisted. - */ -- (void)presentRewardedVideoAdFromViewController:(UIViewController *)viewController withReward:(MPRewardedVideoReward *)reward customData:(NSString *)customData; - -/** - * This method is called when another ad unit has played a rewarded video from the same network this ad manager's custom event - * represents. - */ -- (void)handleAdPlayedForCustomEventNetwork; - -@end - -@protocol MPRewardedVideoAdManagerDelegate - -- (void)rewardedVideoDidLoadForAdManager:(MPRewardedVideoAdManager *)manager; -- (void)rewardedVideoDidFailToLoadForAdManager:(MPRewardedVideoAdManager *)manager error:(NSError *)error; -- (void)rewardedVideoDidExpireForAdManager:(MPRewardedVideoAdManager *)manager; -- (void)rewardedVideoDidFailToPlayForAdManager:(MPRewardedVideoAdManager *)manager error:(NSError *)error; -- (void)rewardedVideoWillAppearForAdManager:(MPRewardedVideoAdManager *)manager; -- (void)rewardedVideoDidAppearForAdManager:(MPRewardedVideoAdManager *)manager; -- (void)rewardedVideoWillDisappearForAdManager:(MPRewardedVideoAdManager *)manager; -- (void)rewardedVideoDidDisappearForAdManager:(MPRewardedVideoAdManager *)manager; -- (void)rewardedVideoDidReceiveTapEventForAdManager:(MPRewardedVideoAdManager *)manager; -- (void)rewardedVideoAdManager:(MPRewardedVideoAdManager *)manager didReceiveImpressionEventWithImpressionData:(MPImpressionData *)impressionData; -- (void)rewardedVideoWillLeaveApplicationForAdManager:(MPRewardedVideoAdManager *)manager; -- (void)rewardedVideoShouldRewardUserForAdManager:(MPRewardedVideoAdManager *)manager reward:(MPRewardedVideoReward *)reward; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPRewardedVideoAdManager.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPRewardedVideoAdManager.m deleted file mode 100644 index 452d191765..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPRewardedVideoAdManager.m +++ /dev/null @@ -1,388 +0,0 @@ -// -// MPRewardedVideoAdManager.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPRewardedVideoAdManager.h" - -#import "MPAdServerCommunicator.h" -#import "MPAdServerURLBuilder.h" -#import "MPRewardedVideoAdapter.h" -#import "MPCoreInstanceProvider.h" -#import "MPRewardedVideoError.h" -#import "MPLogging.h" -#import "MPStopwatch.h" -#import "MoPub.h" -#import "NSMutableArray+MPAdditions.h" -#import "NSDate+MPAdditions.h" -#import "NSError+MPAdditions.h" - -@interface MPRewardedVideoAdManager () - -@property (nonatomic, strong) MPRewardedVideoAdapter *adapter; -@property (nonatomic, strong) MPAdServerCommunicator *communicator; -@property (nonatomic, strong) MPAdConfiguration *configuration; -@property (nonatomic, strong) NSMutableArray *remainingConfigurations; -@property (nonatomic, strong) NSURL *mostRecentlyLoadedURL; // ADF-4286: avoid infinite ad reloads -@property (nonatomic, assign) BOOL loading; -@property (nonatomic, assign) BOOL playedAd; -@property (nonatomic, assign) BOOL ready; -@property (nonatomic, strong) MPStopwatch *loadStopwatch; - -@end - -@implementation MPRewardedVideoAdManager - -- (instancetype)initWithAdUnitID:(NSString *)adUnitID delegate:(id)delegate -{ - if (self = [super init]) { - _adUnitId = [adUnitID copy]; - _communicator = [[MPAdServerCommunicator alloc] initWithDelegate:self]; - _delegate = delegate; - _loadStopwatch = MPStopwatch.new; - } - - return self; -} - -- (void)dealloc -{ - [_communicator cancel]; -} - -- (NSArray *)availableRewards -{ - return self.configuration.availableRewards; -} - -- (MPRewardedVideoReward *)selectedReward -{ - return self.configuration.selectedReward; -} - -- (Class)customEventClass -{ - return self.configuration.customEventClass; -} - -- (BOOL)hasAdAvailable -{ - //An Ad is not ready or has expired. - if (!self.ready) { - return NO; - } - - // If we've already played an ad, return NO since we allow one play per load. - if (self.playedAd) { - return NO; - } - return [self.adapter hasAdAvailable]; -} - -- (void)loadRewardedVideoAdWithCustomerId:(NSString *)customerId targeting:(MPAdTargeting *)targeting -{ - MPLogAdEvent(MPLogEvent.adLoadAttempt, self.adUnitId); - - // We will just tell the delegate that we have loaded an ad if we already have one ready. However, if we have already - // played a video for this ad manager, we will go ahead and request another ad from the server so we aren't potentially - // stuck playing ads from the same network for a prolonged period of time which could be unoptimal with respect to the waterfall. - if (self.ready && !self.playedAd) { - // If we already have an ad, do not set the customerId. We'll leave the customerId as the old one since the ad we currently have - // may be tied to an older customerId. - [self.delegate rewardedVideoDidLoadForAdManager:self]; - } else { - // This has multiple behaviors. For ads that require us to set the customID: (outside of load), this will overwrite the ad's previously - // set customerId. Other ads require customerId on presentation in which we will use this new id coming in when presenting the ad. - self.customerId = customerId; - self.targeting = targeting; - [self loadAdWithURL:[MPAdServerURLBuilder URLWithAdUnitID:self.adUnitId targeting:targeting]]; - } -} - -- (void)presentRewardedVideoAdFromViewController:(UIViewController *)viewController withReward:(MPRewardedVideoReward *)reward customData:(NSString *)customData -{ - MPLogAdEvent(MPLogEvent.adShowAttempt, self.adUnitId); - - // Don't allow the ad to be shown if it isn't ready. - if (!self.ready) { - NSError *error = [NSError errorWithDomain:MoPubRewardedVideoAdsSDKDomain code:MPRewardedVideoAdErrorNoAdReady userInfo:@{ NSLocalizedDescriptionKey: @"Rewarded video ad view is not ready to be shown"}]; - MPLogInfo(@"%@ error: %@", NSStringFromSelector(_cmd), error.localizedDescription); - [self.delegate rewardedVideoDidFailToPlayForAdManager:self error:error]; - return; - } - - // If we've already played an ad, don't allow playing of another since we allow one play per load. - if (self.playedAd) { - NSError *error = [NSError errorWithDomain:MoPubRewardedVideoAdsSDKDomain code:MPRewardedVideoAdErrorAdAlreadyPlayed userInfo:nil]; - [self.delegate rewardedVideoDidFailToPlayForAdManager:self error:error]; - return; - } - - // No reward is specified - if (reward == nil) { - // Only a single currency; It should automatically select the only currency available. - if (self.availableRewards.count == 1) { - MPRewardedVideoReward * defaultReward = self.availableRewards[0]; - self.configuration.selectedReward = defaultReward; - } - // Unspecified rewards in a multicurrency situation are not allowed. - else { - NSError *error = [NSError errorWithDomain:MoPubRewardedVideoAdsSDKDomain code:MPRewardedVideoAdErrorNoRewardSelected userInfo:nil]; - [self.delegate rewardedVideoDidFailToPlayForAdManager:self error:error]; - return; - } - } - // Reward is specified - else { - // Verify that the reward exists in the list of available rewards. If it doesn't, fail to play the ad. - if (![self.availableRewards containsObject:reward]) { - NSError *error = [NSError errorWithDomain:MoPubRewardedVideoAdsSDKDomain code:MPRewardedVideoAdErrorInvalidReward userInfo:nil]; - [self.delegate rewardedVideoDidFailToPlayForAdManager:self error:error]; - return; - } - // Reward passes validation, set it as selected. - else { - self.configuration.selectedReward = reward; - } - } - - [self.adapter presentRewardedVideoFromViewController:viewController customData:customData]; -} - -- (void)handleAdPlayedForCustomEventNetwork -{ - // We only need to notify the backing ad network if the ad is marked ready for display. - if (self.ready) { - [self.adapter handleAdPlayedForCustomEventNetwork]; - } -} - -#pragma mark - Private - -- (void)loadAdWithURL:(NSURL *)URL -{ - self.playedAd = NO; - - if (self.loading) { - MPLogEvent([MPLogEvent error:NSError.adAlreadyLoading message:nil]); - return; - } - - self.loading = YES; - self.mostRecentlyLoadedURL = URL; - [self.communicator loadURL:URL]; -} - -- (void)fetchAdWithConfiguration:(MPAdConfiguration *)configuration { - MPLogInfo(@"Rewarded video ad is fetching ad type: %@", configuration.adType); - - if (configuration.adUnitWarmingUp) { - MPLogInfo(kMPWarmingUpErrorLogFormatWithAdUnitID, self.adUnitId); - self.loading = NO; - NSError *error = [NSError errorWithDomain:MoPubRewardedVideoAdsSDKDomain code:MPRewardedVideoAdErrorAdUnitWarmingUp userInfo:nil]; - [self.delegate rewardedVideoDidFailToLoadForAdManager:self error:error]; - return; - } - - if ([configuration.adType isEqualToString:kAdTypeClear]) { - MPLogInfo(kMPClearErrorLogFormatWithAdUnitID, self.adUnitId); - self.loading = NO; - NSError *error = [NSError errorWithDomain:MoPubRewardedVideoAdsSDKDomain code:MPRewardedVideoAdErrorNoAdsAvailable userInfo:nil]; - [self.delegate rewardedVideoDidFailToLoadForAdManager:self error:error]; - return; - } - - // Notify Ad Server of the adapter load. This is fire and forget. - [self.communicator sendBeforeLoadUrlWithConfiguration:configuration]; - - // Start the stopwatch for the adapter load. - [self.loadStopwatch start]; - - MPRewardedVideoAdapter *adapter = [[MPRewardedVideoAdapter alloc] initWithDelegate:self]; - - if (adapter == nil) { - NSError *error = [NSError errorWithDomain:MoPubRewardedVideoAdsSDKDomain code:MPRewardedVideoAdErrorUnknown userInfo:nil]; - [self rewardedVideoDidFailToLoadForAdapter:nil error:error]; - return; - } - - self.adapter = adapter; - [self.adapter getAdWithConfiguration:configuration targeting:self.targeting]; -} - -#pragma mark - MPAdServerCommunicatorDelegate - -- (void)communicatorDidReceiveAdConfigurations:(NSArray *)configurations -{ - self.remainingConfigurations = [configurations mutableCopy]; - self.configuration = [self.remainingConfigurations removeFirst]; - - // There are no configurations to try. Consider this a clear response by the server. - if (self.remainingConfigurations.count == 0 && self.configuration == nil) { - MPLogInfo(kMPClearErrorLogFormatWithAdUnitID, self.adUnitId); - self.loading = NO; - NSError *error = [NSError errorWithDomain:MoPubRewardedVideoAdsSDKDomain code:MPRewardedVideoAdErrorNoAdsAvailable userInfo:nil]; - [self.delegate rewardedVideoDidFailToLoadForAdManager:self error:error]; - return; - } - - [self fetchAdWithConfiguration:self.configuration]; -} - -- (void)communicatorDidFailWithError:(NSError *)error -{ - self.ready = NO; - self.loading = NO; - - [self.delegate rewardedVideoDidFailToLoadForAdManager:self error:error]; -} - -- (BOOL)isFullscreenAd { - return YES; -} - -#pragma mark - MPRewardedVideoAdapterDelegate - -- (id)instanceMediationSettingsForClass:(Class)aClass -{ - for (id settings in self.mediationSettings) { - if ([settings isKindOfClass:aClass]) { - return settings; - } - } - - return nil; -} - -- (void)rewardedVideoDidLoadForAdapter:(MPRewardedVideoAdapter *)adapter -{ - self.remainingConfigurations = nil; - self.ready = YES; - self.loading = NO; - - // Record the end of the adapter load and send off the fire and forget after-load-url tracker. - // Start the stopwatch for the adapter load. - NSTimeInterval duration = [self.loadStopwatch stop]; - [self.communicator sendAfterLoadUrlWithConfiguration:self.configuration adapterLoadDuration:duration adapterLoadResult:MPAfterLoadResultAdLoaded]; - - MPLogAdEvent(MPLogEvent.adDidLoad, self.adUnitId); - [self.delegate rewardedVideoDidLoadForAdManager:self]; -} - -- (void)rewardedVideoDidFailToLoadForAdapter:(MPRewardedVideoAdapter *)adapter error:(NSError *)error -{ - // Record the end of the adapter load and send off the fire and forget after-load-url tracker - // with the appropriate error code result. - NSTimeInterval duration = [self.loadStopwatch stop]; - MPAfterLoadResult result = (error.isAdRequestTimedOutError ? MPAfterLoadResultTimeout : (adapter == nil ? MPAfterLoadResultMissingAdapter : MPAfterLoadResultError)); - [self.communicator sendAfterLoadUrlWithConfiguration:self.configuration adapterLoadDuration:duration adapterLoadResult:result]; - - // There are more ad configurations to try. - if (self.remainingConfigurations.count > 0) { - self.configuration = [self.remainingConfigurations removeFirst]; - [self fetchAdWithConfiguration:self.configuration]; - } - // No more configurations to try. Send new request to Ads server to get more Ads. - else if (self.configuration.nextURL != nil - && [self.configuration.nextURL isEqual:self.mostRecentlyLoadedURL] == false) { - self.ready = NO; - self.loading = NO; - [self loadAdWithURL:self.configuration.nextURL]; - } - // No more configurations to try and no more pages to load. - else { - self.ready = NO; - self.loading = NO; - - NSString *errorDescription = [NSString stringWithFormat:kMPClearErrorLogFormatWithAdUnitID, self.adUnitId]; - NSError * clearResponseError = [NSError errorWithDomain:MoPubRewardedVideoAdsSDKDomain - code:MPRewardedVideoAdErrorNoAdsAvailable - userInfo:@{NSLocalizedDescriptionKey: errorDescription}]; - MPLogAdEvent([MPLogEvent adFailedToLoadWithError:clearResponseError], self.adUnitId); - [self.delegate rewardedVideoDidFailToLoadForAdManager:self error:clearResponseError]; - } -} - -- (void)rewardedVideoDidExpireForAdapter:(MPRewardedVideoAdapter *)adapter -{ - self.ready = NO; - - MPLogAdEvent([MPLogEvent adExpiredWithTimeInterval:MPConstants.adsExpirationInterval], self.adUnitId); - [self.delegate rewardedVideoDidExpireForAdManager:self]; -} - -- (void)rewardedVideoDidFailToPlayForAdapter:(MPRewardedVideoAdapter *)adapter error:(NSError *)error -{ - // Playback of the rewarded video failed; reset the internal played state - // so that a new rewarded video ad can be loaded. - self.ready = NO; - self.playedAd = NO; - - MPLogAdEvent([MPLogEvent adShowFailedWithError:error], self.adUnitId); - [self.delegate rewardedVideoDidFailToPlayForAdManager:self error:error]; -} - -- (void)rewardedVideoWillAppearForAdapter:(MPRewardedVideoAdapter *)adapter -{ - MPLogAdEvent(MPLogEvent.adWillAppear, self.adUnitId); - [self.delegate rewardedVideoWillAppearForAdManager:self]; -} - -- (void)rewardedVideoDidAppearForAdapter:(MPRewardedVideoAdapter *)adapter -{ - MPLogAdEvent(MPLogEvent.adDidAppear, self.adUnitId); - [self.delegate rewardedVideoDidAppearForAdManager:self]; -} - -- (void)rewardedVideoWillDisappearForAdapter:(MPRewardedVideoAdapter *)adapter -{ - MPLogAdEvent(MPLogEvent.adWillDisappear, self.adUnitId); - [self.delegate rewardedVideoWillDisappearForAdManager:self]; -} - -- (void)rewardedVideoDidDisappearForAdapter:(MPRewardedVideoAdapter *)adapter -{ - // Successful playback of the rewarded video; reset the internal played state. - self.ready = NO; - self.playedAd = YES; - - MPLogAdEvent(MPLogEvent.adDidDisappear, self.adUnitId); - [self.delegate rewardedVideoDidDisappearForAdManager:self]; -} - -- (void)rewardedVideoDidReceiveTapEventForAdapter:(MPRewardedVideoAdapter *)adapter -{ - MPLogAdEvent(MPLogEvent.adWillPresentModal, self.adUnitId); - [self.delegate rewardedVideoDidReceiveTapEventForAdManager:self]; -} - -- (void)rewardedVideoDidReceiveImpressionEventForAdapter:(MPRewardedVideoAdapter *)adapter { - [self.delegate rewardedVideoAdManager:self didReceiveImpressionEventWithImpressionData:self.configuration.impressionData]; -} - -- (void)rewardedVideoWillLeaveApplicationForAdapter:(MPRewardedVideoAdapter *)adapter -{ - MPLogAdEvent(MPLogEvent.adWillLeaveApplication, self.adUnitId); - [self.delegate rewardedVideoWillLeaveApplicationForAdManager:self]; -} - -- (void)rewardedVideoShouldRewardUserForAdapter:(MPRewardedVideoAdapter *)adapter reward:(MPRewardedVideoReward *)reward -{ - MPLogAdEvent([MPLogEvent adShouldRewardUserWithReward:reward], self.adUnitId); - [self.delegate rewardedVideoShouldRewardUserForAdManager:self reward:reward]; -} - -- (NSString *)rewardedVideoAdUnitId -{ - return self.adUnitId; -} - -- (NSString *)rewardedVideoCustomerId -{ - return self.customerId; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPRewardedVideoAdapter.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPRewardedVideoAdapter.h deleted file mode 100644 index c178840eeb..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPRewardedVideoAdapter.h +++ /dev/null @@ -1,84 +0,0 @@ -// -// MPRewardedVideoAdapter.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import -#import "MPPrivateRewardedVideoCustomEventDelegate.h" - -@class MPAdConfiguration; -@class MPAdTargeting; -@class MPRewardedVideoReward; - -@protocol MPRewardedVideoAdapterDelegate; -@protocol MPMediationSettingsProtocol; - -/** - * `MPRewardedVideoAdapter` directly communicates with the appropriate custom event to - * load and show a rewarded video. It is also the class that handles impression - * and click tracking. Finally, the class will report a failure to load an ad if the ad - * takes too long to load. - */ -@interface MPRewardedVideoAdapter : NSObject - -@property (nonatomic, weak) id delegate; - -- (instancetype)initWithDelegate:(id)delegate; - -/** - * Called to retrieve an ad once we get a response from the server. - * - * @param configuration Contains the details about the ad we are loading. - 8 @param targeting Optional ad targeting details for the ad we are loading. - */ -- (void)getAdWithConfiguration:(MPAdConfiguration *)configuration targeting:(MPAdTargeting *)targeting; - -/** - * Tells the caller whether the underlying ad network currently has an ad available for presentation. - */ -- (BOOL)hasAdAvailable; - -/** - * Plays a rewarded video ad. - * - * @param viewController Presents the rewarded video ad from viewController. - * @param customData Optional custom data string to include in the server-to-server callback. If a server-to-server callback - * is not used, or if the ad unit is configured for local rewarding, this value will not be persisted. - */ -- (void)presentRewardedVideoFromViewController:(UIViewController *)viewController customData:(NSString *)customData; - -/** - * This method is called when another ad unit has played a rewarded video from the same network this adapter's custom event - * represents. - */ -- (void)handleAdPlayedForCustomEventNetwork; - -@end - -@protocol MPRewardedVideoAdapterDelegate - -- (id)instanceMediationSettingsForClass:(Class)aClass; - -- (void)rewardedVideoDidLoadForAdapter:(MPRewardedVideoAdapter *)adapter; -- (void)rewardedVideoDidFailToLoadForAdapter:(MPRewardedVideoAdapter *)adapter error:(NSError *)error; -- (void)rewardedVideoDidExpireForAdapter:(MPRewardedVideoAdapter *)adapter; -- (void)rewardedVideoDidFailToPlayForAdapter:(MPRewardedVideoAdapter *)adapter error:(NSError *)error; -- (void)rewardedVideoWillAppearForAdapter:(MPRewardedVideoAdapter *)adapter; -- (void)rewardedVideoDidAppearForAdapter:(MPRewardedVideoAdapter *)adapter; -- (void)rewardedVideoWillDisappearForAdapter:(MPRewardedVideoAdapter *)adapter; -- (void)rewardedVideoDidDisappearForAdapter:(MPRewardedVideoAdapter *)adapter; -- (void)rewardedVideoDidReceiveTapEventForAdapter:(MPRewardedVideoAdapter *)adapter; -- (void)rewardedVideoDidReceiveImpressionEventForAdapter:(MPRewardedVideoAdapter *)adapter; -- (void)rewardedVideoWillLeaveApplicationForAdapter:(MPRewardedVideoAdapter *)adapter; -- (void)rewardedVideoShouldRewardUserForAdapter:(MPRewardedVideoAdapter *)adapter reward:(MPRewardedVideoReward *)reward; - -@optional -- (NSString *)rewardedVideoAdUnitId; -- (NSString *)rewardedVideoCustomerId; -- (MPAdConfiguration *)configuration; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPRewardedVideoAdapter.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPRewardedVideoAdapter.m deleted file mode 100644 index 37cfe7b43b..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPRewardedVideoAdapter.m +++ /dev/null @@ -1,329 +0,0 @@ -// -// MPRewardedVideoAdapter.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPRewardedVideoAdapter.h" - -#import "MPAdConfiguration.h" -#import "MPAdServerURLBuilder.h" -#import "MPAdTargeting.h" -#import "MPAnalyticsTracker.h" -#import "MPCoreInstanceProvider.h" -#import "MPError.h" -#import "MPRewardedVideoError.h" -#import "MPRewardedVideoCustomEvent.h" -#import "MPLogging.h" -#import "MPTimer.h" -#import "MPRewardedVideoReward.h" -#import "MPRewardedVideo+Internal.h" -#import "MPConstants.h" -#import "MPMoPubRewardedVideoCustomEvent.h" -#import "MPMoPubRewardedPlayableCustomEvent.h" -#import "MPRealTimeTimer.h" -#import "MPVASTInterstitialCustomEvent.h" -#import "NSString+MPAdditions.h" - -static const NSUInteger kExcessiveCustomDataLength = 8196; - -@interface MPRewardedVideoAdapter () - -@property (nonatomic, strong) id rewardedVideoCustomEvent; -@property (nonatomic, strong) MPAdConfiguration *configuration; -@property (nonatomic, strong) MPTimer *timeoutTimer; -@property (nonatomic, assign) BOOL hasTrackedImpression; -@property (nonatomic, assign) BOOL hasTrackedClick; -// Once an ad successfully loads, we want to block sending more successful load events. -@property (nonatomic, assign) BOOL hasSuccessfullyLoaded; -// Since we only notify the application of one success per load, we also only notify the application of one expiration per success. -@property (nonatomic, assign) BOOL hasExpired; -@property (nonatomic, strong) MPRealTimeTimer *expirationTimer; -@property (nonatomic, copy) NSString * customData; - -@end - -@implementation MPRewardedVideoAdapter - -- (instancetype)initWithDelegate:(id)delegate -{ - if (self = [super init]) { - _delegate = delegate; - } - - return self; -} - -- (void)dealloc -{ - // The rewarded video system now no longer holds references to the custom event. The custom event may have a system - // that holds extra references to the custom event. Let's tell the custom event that we no longer need it. - [_rewardedVideoCustomEvent handleCustomEventInvalidated]; - - [_timeoutTimer invalidate]; - - // Make sure the custom event isn't released synchronously as objects owned by the custom event - // may do additional work after a callback that results in dealloc being called - [[MPCoreInstanceProvider sharedProvider] keepObjectAliveForCurrentRunLoopIteration:_rewardedVideoCustomEvent]; -} - -- (void)getAdWithConfiguration:(MPAdConfiguration *)configuration targeting:(MPAdTargeting *)targeting -{ - MPLogInfo(@"Looking for custom event class named %@.", configuration.customEventClass); - - self.configuration = configuration; - id customEvent = [[configuration.customEventClass alloc] init]; - if (![customEvent conformsToProtocol:@protocol(MPRewardedVideoCustomEvent)]) { - NSError * error = [NSError customEventClass:configuration.customEventClass doesNotInheritFrom:MPRewardedVideoCustomEvent.class]; - MPLogEvent([MPLogEvent error:error message:nil]); - [self.delegate rewardedVideoDidFailToLoadForAdapter:nil error:error]; - return; - } - customEvent.delegate = self; - customEvent.localExtras = targeting.localExtras; - - self.rewardedVideoCustomEvent = customEvent; - [self startTimeoutTimer]; - - [self.rewardedVideoCustomEvent requestRewardedVideoWithCustomEventInfo:configuration.customEventClassData adMarkup:configuration.advancedBidPayload]; -} - -- (BOOL)hasAdAvailable -{ - return [self.rewardedVideoCustomEvent hasAdAvailable]; -} - -- (void)presentRewardedVideoFromViewController:(UIViewController *)viewController customData:(NSString *)customData -{ - NSUInteger customDataLength = customData.length; - // Only persist the custom data field if it's non-empty and there is a server-to-server - // callback URL. The persisted custom data will be url encoded. - if (customDataLength > 0 && self.configuration.rewardedVideoCompletionUrl != nil) { - // Warn about excessive custom data length, but allow the custom data to be sent anyway - if (customDataLength > kExcessiveCustomDataLength) { - MPLogInfo(@"Custom data length %lu exceeds the receommended maximum length of %lu characters.", (unsigned long)customDataLength, (unsigned long)kExcessiveCustomDataLength); - } - - self.customData = customData; - } - - [self.rewardedVideoCustomEvent presentRewardedVideoFromViewController:viewController]; -} - -- (void)handleAdPlayedForCustomEventNetwork -{ - [self.rewardedVideoCustomEvent handleAdPlayedForCustomEventNetwork]; -} - -#pragma mark - Private - -- (void)startTimeoutTimer -{ - NSTimeInterval timeInterval = (self.configuration && self.configuration.adTimeoutInterval >= 0) ? - self.configuration.adTimeoutInterval : REWARDED_VIDEO_TIMEOUT_INTERVAL; - - if (timeInterval > 0) { - self.timeoutTimer = [MPTimer timerWithTimeInterval:timeInterval - target:self - selector:@selector(timeout) - repeats:NO]; - [self.timeoutTimer scheduleNow]; - } -} - -- (void)timeout -{ - NSError * error = [NSError errorWithCode:MOPUBErrorAdRequestTimedOut localizedDescription:@"Rewarded video ad request timed out"]; - [self.delegate rewardedVideoDidFailToLoadForAdapter:self error:error]; - self.delegate = nil; -} - -- (void)didStopLoading -{ - [self.timeoutTimer invalidate]; -} - -- (NSURL *)rewardedVideoCompletionUrlByAppendingClientParams -{ - NSString * sourceCompletionUrl = self.configuration.rewardedVideoCompletionUrl; - NSString * customerId = ([self.delegate respondsToSelector:@selector(rewardedVideoCustomerId)] ? [self.delegate rewardedVideoCustomerId] : nil); - MPRewardedVideoReward * reward = (self.configuration.selectedReward != nil && ![self.configuration.selectedReward.currencyType isEqualToString:kMPRewardedVideoRewardCurrencyTypeUnspecified] ? self.configuration.selectedReward : nil); - NSString * customEventName = NSStringFromClass([self.rewardedVideoCustomEvent class]); - - return [MPAdServerURLBuilder rewardedCompletionUrl:sourceCompletionUrl - withCustomerId:customerId - rewardType:reward.currencyType - rewardAmount:reward.amount - customEventName:customEventName - additionalData:self.customData]; -} - -#pragma mark - Metrics - -- (void)trackImpression -{ - [[MPAnalyticsTracker sharedTracker] trackImpressionForConfiguration:self.configuration]; - self.hasTrackedImpression = YES; - [self.expirationTimer invalidate]; - [self.delegate rewardedVideoDidReceiveImpressionEventForAdapter:self]; -} - -- (void)trackClick -{ - [[MPAnalyticsTracker sharedTracker] trackClickForConfiguration:self.configuration]; -} - -#pragma mark - MPRewardedVideoCustomEventDelegate - -- (id)instanceMediationSettingsForClass:(Class)aClass -{ - return [self.delegate instanceMediationSettingsForClass:aClass]; -} - -- (void)rewardedVideoDidLoadAdForCustomEvent:(id)customEvent -{ - // Don't report multiple successful loads. Backing ad networks may replenish their caches triggering multiple successful load - // callbacks. - if (self.hasSuccessfullyLoaded) { - return; - } - - self.hasSuccessfullyLoaded = YES; - [self didStopLoading]; - [self.delegate rewardedVideoDidLoadForAdapter:self]; - - // Check for MoPub-specific custom events before setting the timer - // Custom events for 3rd party SDK have their own timeout and expiration handling - if ([customEvent isKindOfClass:[MPVASTInterstitialCustomEvent class]] - || [customEvent isKindOfClass:[MPMoPubRewardedVideoCustomEvent class]] - || [customEvent isKindOfClass:[MPMoPubRewardedPlayableCustomEvent class]]) { - // Set up timer for expiration - __weak __typeof__(self) weakSelf = self; - self.expirationTimer = [[MPRealTimeTimer alloc] initWithInterval:[MPConstants adsExpirationInterval] block:^(MPRealTimeTimer *timer){ - __strong __typeof__(weakSelf) strongSelf = weakSelf; - if (strongSelf && !strongSelf.hasTrackedImpression) { - [strongSelf rewardedVideoDidExpireForCustomEvent:strongSelf.rewardedVideoCustomEvent]; - } - [strongSelf.expirationTimer invalidate]; - }]; - [self.expirationTimer scheduleNow]; - } -} - -- (void)rewardedVideoDidFailToLoadAdForCustomEvent:(id)customEvent error:(NSError *)error -{ - // Detach the custom event from the adapter. An ad *may* end up, after some time, loading successfully - // from the underlying network, but we don't want to bubble up the event to the application since we - // are reporting a timeout here. - [self.rewardedVideoCustomEvent handleCustomEventInvalidated]; - self.rewardedVideoCustomEvent = nil; - - [self didStopLoading]; - [self.delegate rewardedVideoDidFailToLoadForAdapter:self error:error]; -} - -- (void)rewardedVideoDidExpireForCustomEvent:(id)customEvent -{ - // Only allow one expire per custom event to match up with one successful load callback per custom event. - if (self.hasExpired) { - return; - } - - self.hasExpired = YES; - [self.delegate rewardedVideoDidExpireForAdapter:self]; -} - -- (void)rewardedVideoDidFailToPlayForCustomEvent:(id)customEvent error:(NSError *)error -{ - [self.delegate rewardedVideoDidFailToPlayForAdapter:self error:error]; -} - -- (void)rewardedVideoWillAppearForCustomEvent:(id)customEvent -{ - [self.delegate rewardedVideoWillAppearForAdapter:self]; -} - -- (void)rewardedVideoDidAppearForCustomEvent:(id)customEvent -{ - if ([self.rewardedVideoCustomEvent enableAutomaticImpressionAndClickTracking] && !self.hasTrackedImpression) { - [self trackImpression]; - } - - [self.delegate rewardedVideoDidAppearForAdapter:self]; -} - -- (void)rewardedVideoWillDisappearForCustomEvent:(id)customEvent -{ - [self.delegate rewardedVideoWillDisappearForAdapter:self]; -} - -- (void)rewardedVideoDidDisappearForCustomEvent:(id)customEvent -{ - [self.delegate rewardedVideoDidDisappearForAdapter:self]; -} - -- (void)rewardedVideoWillLeaveApplicationForCustomEvent:(id)customEvent -{ - [self.delegate rewardedVideoWillLeaveApplicationForAdapter:self]; -} - -- (void)rewardedVideoDidReceiveTapEventForCustomEvent:(id)customEvent -{ - if ([self.rewardedVideoCustomEvent enableAutomaticImpressionAndClickTracking] && !self.hasTrackedClick) { - self.hasTrackedClick = YES; - [self trackClick]; - } - - [self.delegate rewardedVideoDidReceiveTapEventForAdapter:self]; -} - -- (void)rewardedVideoShouldRewardUserForCustomEvent:(id)customEvent reward:(MPRewardedVideoReward *)reward -{ - if (self.configuration) { - // Send server to server callback if available - if (self.configuration.rewardedVideoCompletionUrl) { - [[MPRewardedVideo sharedInstance] startRewardedVideoConnectionWithUrl:[self rewardedVideoCompletionUrlByAppendingClientParams]]; - } - - MPRewardedVideoReward *mopubConfiguredReward = self.configuration.selectedReward; - - // If reward is set in adConfig, use reward that's set in adConfig. - // Currency type has to be defined in mopubConfiguredReward in order to use mopubConfiguredReward. - if (mopubConfiguredReward && ![mopubConfiguredReward.currencyType isEqualToString:kMPRewardedVideoRewardCurrencyTypeUnspecified]) { - reward = mopubConfiguredReward; - } - } - - // Notify client with the reward if present. - if (reward) { - [self.delegate rewardedVideoShouldRewardUserForAdapter:self reward:reward]; - } -} - -- (NSString *)customerIdForRewardedVideoCustomEvent:(id)customEvent -{ - if ([self.delegate respondsToSelector:@selector(rewardedVideoCustomerId)]) { - return [self.delegate rewardedVideoCustomerId]; - } - - return nil; -} - -#pragma mark - MPPrivateRewardedVideoCustomEventDelegate - -- (NSString *)adUnitId -{ - if ([self.delegate respondsToSelector:@selector(rewardedVideoAdUnitId)]) { - return [self.delegate rewardedVideoAdUnitId]; - } - return nil; -} - -- (MPAdConfiguration *)configuration -{ - return _configuration; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPRewardedVideoConnection.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPRewardedVideoConnection.h deleted file mode 100644 index 38fc8f60fc..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPRewardedVideoConnection.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// MPRewardedVideoConnection.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -@class MPRewardedVideoConnection; - -@protocol MPRewardedVideoConnectionDelegate - -- (void)rewardedVideoConnectionCompleted:(MPRewardedVideoConnection *)connection url:(NSURL *)url; - -@end - -@interface MPRewardedVideoConnection : NSObject - -- (instancetype)initWithUrl:(NSURL *)url delegate:(id)delegate; -- (void)sendRewardedVideoCompletionRequest; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPRewardedVideoConnection.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPRewardedVideoConnection.m deleted file mode 100644 index 289dc92dc5..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPRewardedVideoConnection.m +++ /dev/null @@ -1,100 +0,0 @@ -// -// MPRewardedVideoConnection.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -// Copyright © 2016 MoPub. All rights reserved. -// - -#import -#import "MPRewardedVideoConnection.h" -#import "MPHTTPNetworkSession.h" -#import "MPURLRequest.h" - -static const NSTimeInterval kMaximumRequestRetryInterval = 900.0; // 15 mins -static const NSTimeInterval kMinimumRequestRetryInterval = 5.0; -static const NSTimeInterval kMaximumBackoffTime = 60.0; -static const CGFloat kRetryIntervalBackoffMultiplier = 2.0; - -@interface MPRewardedVideoConnection() - -@property (nonatomic, strong) NSURLSessionTask *task; -@property (nonatomic) NSURL *url; -@property (nonatomic) NSUInteger retryCount; -@property (nonatomic) NSTimeInterval accumulatedRetryInterval; -@property (nonatomic, weak) id delegate; - -@end - -@implementation MPRewardedVideoConnection - -- (instancetype)initWithUrl:(NSURL *)url delegate:(id)delegate -{ - if (self = [super init]) { - _url = url; - _delegate = delegate; - } - return self; -} - -- (void)sendRewardedVideoCompletionRequest -{ - MPURLRequest *request = [MPURLRequest requestWithURL:self.url]; - [self.task cancel]; - - __weak __typeof__(self) weakSelf = self; - self.task = [MPHTTPNetworkSession startTaskWithHttpRequest:request responseHandler:^(NSData * _Nonnull data, NSHTTPURLResponse * _Nonnull response) { - __typeof__(self) strongSelf = weakSelf; - - NSInteger statusCode = response.statusCode; - - // only retry on 5xx - if (statusCode >= 500 && statusCode <= 599) { - [strongSelf retryRewardedVideoCompletionRequest]; - } else { - [strongSelf.delegate rewardedVideoConnectionCompleted:strongSelf url:strongSelf.url]; - } - } errorHandler:^(NSError * _Nonnull error) { - __typeof__(self) strongSelf = weakSelf; - - if (error.code == NSURLErrorTimedOut || - error.code == NSURLErrorNetworkConnectionLost || - error.code == NSURLErrorNotConnectedToInternet) { - [strongSelf retryRewardedVideoCompletionRequest]; - } else { - [strongSelf.delegate rewardedVideoConnectionCompleted:strongSelf url:strongSelf.url]; - } - }]; -} - -- (void)retryRewardedVideoCompletionRequest -{ - NSTimeInterval retryInterval = [self backoffTime:self.retryCount]; - - self.accumulatedRetryInterval += retryInterval; - - if (self.accumulatedRetryInterval < kMaximumRequestRetryInterval) { - [self performSelector:@selector(sendRewardedVideoCompletionRequest) withObject:nil afterDelay:retryInterval]; - } else { - [self.delegate rewardedVideoConnectionCompleted:self url:self.url]; - [self.task cancel]; - } - self.retryCount++; -} - -- (NSTimeInterval)backoffTime:(NSUInteger)retryCount -{ - NSTimeInterval interval = pow(kRetryIntervalBackoffMultiplier, retryCount) * kMinimumRequestRetryInterval; - - // If interval > kMaximumBackoffTime, we'll retry every kMaximumBackoffTime seconds to ensure retry happens - // often enough. - if (interval > kMaximumBackoffTime) { - interval = kMaximumBackoffTime; - } - return interval; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideo.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideo.h deleted file mode 100644 index c155cf54f4..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideo.h +++ /dev/null @@ -1,333 +0,0 @@ -// -// MPRewardedVideo.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import -#import "MPImpressionData.h" - -@class MPRewardedVideoReward; -@class CLLocation; -@protocol MPRewardedVideoDelegate; - -/** - * `MPRewardedVideo` allows you to load and play rewarded video ads. All ad events are - * reported, with an ad unit ID, to the delegate allowing the application to respond to the events - * for the corresponding ad. - * - * **Important**: You must call `[initializeRewardedVideoWithGlobalMediationSettings:delegate:][MoPub initializeRewardedVideoWithGlobalMediationSettings:delegate:]` - * to initialize the rewarded video system. - */ -@interface MPRewardedVideo : NSObject - -/** - * Sets the delegate that will be the receiver of rewarded video events for the given - * ad unit ID. - * @remark A weak reference to the delegate will be held. - * @param delegate Delegate that will recieve rewarded video events for the ad unit ID. - * @param adUnitId Ad unit ID - */ -+ (void)setDelegate:(id)delegate forAdUnitId:(NSString *)adUnitId; - -/** - * Removes the delegate as a receiver of rewarded video events for all available ad unit IDs. - * @param delegate Reference to the delegate to remove as a listener. - */ -+ (void)removeDelegate:(id)delegate; - -/** - * Removes the rewarded video delegate that is associated with the ad unit ID. - * @param adUnitId Ad unit ID of the delegate to remove. - */ -+ (void)removeDelegateForAdUnitId:(NSString *)adUnitId; - -/** - * Loads a rewarded video ad for the given ad unit ID. - * - * The mediation settings array should contain ad network specific objects for networks that may be loaded for the given ad unit ID. - * You should set the properties on these objects to determine how the underlying ad network should behave. You only need to supply - * objects for the networks you wish to configure. If you do not want your network to behave differently from its default behavior, do - * not pass in an mediation settings object for that network. - * - * @param adUnitID The ad unit ID that ads should be loaded from. - * @param mediationSettings An array of mediation settings objects that map to networks that may show ads for the ad unit ID. This array - * should only contain objects for networks you wish to configure. This can be nil. - */ -+ (void)loadRewardedVideoAdWithAdUnitID:(NSString *)adUnitID withMediationSettings:(NSArray *)mediationSettings; - -/** - * Loads a rewarded video ad for the given ad unit ID. - * - * The mediation settings array should contain ad network specific objects for networks that may be loaded for the given ad unit ID. - * You should set the properties on these objects to determine how the underlying ad network should behave. You only need to supply - * objects for the networks you wish to configure. If you do not want your network to behave differently from its default behavior, do - * not pass in an mediation settings object for that network. - * - * @param adUnitID The ad unit ID that ads should be loaded from. - * @param keywords A string representing a set of non-personally identifiable keywords that should be passed to the MoPub ad server to receive more relevant advertising. - * @param userDataKeywords A string representing a set of personally identifiable keywords that should be passed to the MoPub ad server to receive - * more relevant advertising. - * @param mediationSettings An array of mediation settings objects that map to networks that may show ads for the ad unit ID. This array - * should only contain objects for networks you wish to configure. This can be nil. - - * Note: If a user is in General Data Protection Regulation (GDPR) region and MoPub doesn't obtain consent from the user, "keywords" will be sent to the server but "userDataKeywords" will be excluded. - */ -+ (void)loadRewardedVideoAdWithAdUnitID:(NSString *)adUnitID keywords:(NSString *)keywords userDataKeywords:(NSString *)userDataKeywords mediationSettings:(NSArray *)mediationSettings; - -/** - * Loads a rewarded video ad for the given ad unit ID. - * - * The mediation settings array should contain ad network specific objects for networks that may be loaded for the given ad unit ID. - * You should set the properties on these objects to determine how the underlying ad network should behave. You only need to supply - * objects for the networks you wish to configure. If you do not want your network to behave differently from its default behavior, do - * not pass in an mediation settings object for that network. - * - * @deprecated This API is deprecated and will be removed in a future version. - * - * @param adUnitID The ad unit ID that ads should be loaded from. - * @param keywords A string representing a set of non-personally identifiable keywords that should be passed to the MoPub ad server to receive more relevant advertising. - * @param userDataKeywords A string representing a set of personally identifiable keywords that should be passed to the MoPub ad server to receive - * more relevant advertising. - * @param location Latitude/Longitude that are passed to the MoPub ad server - * @param mediationSettings An array of mediation settings objects that map to networks that may show ads for the ad unit ID. This array - * should only contain objects for networks you wish to configure. This can be nil. - - * Note: If a user is in General Data Protection Regulation (GDPR) region and MoPub doesn't obtain consent from the user, "keywords" will be sent to the server but "userDataKeywords" will be excluded. - */ -+ (void)loadRewardedVideoAdWithAdUnitID:(NSString *)adUnitID keywords:(NSString *)keywords userDataKeywords:(NSString *)userDataKeywords location:(CLLocation *)location mediationSettings:(NSArray *)mediationSettings __attribute__((deprecated("This API is deprecated and will be removed in a future version. Use loadRewardedVideoAdWithAdUnitID:keywords:userDataKeywords:mediationSettings: instead"))); - -/** - * Loads a rewarded video ad for the given ad unit ID. - * - * The mediation settings array should contain ad network specific objects for networks that may be loaded for the given ad unit ID. - * You should set the properties on these objects to determine how the underlying ad network should behave. You only need to supply - * objects for the networks you wish to configure. If you do not want your network to behave differently from its default behavior, do - * not pass in an mediation settings object for that network. - * - * @param adUnitID The ad unit ID that ads should be loaded from. - * @param keywords A string representing a set of non-personally identifiable keywords that should be passed to the MoPub ad server to receive more relevant advertising. - * @param userDataKeywords A string representing a set of personally identifiable keywords that should be passed to the MoPub ad server to receive - * more relevant advertising. - * @param customerId This is the ID given to the user by the publisher to identify them in their app - * @param mediationSettings An array of mediation settings objects that map to networks that may show ads for the ad unit ID. This array - * should only contain objects for networks you wish to configure. This can be nil. - - * Note: If a user is in General Data Protection Regulation (GDPR) region and MoPub doesn't obtain consent from the user, "keywords" will be sent to the server but "userDataKeywords" will be excluded. - */ -+ (void)loadRewardedVideoAdWithAdUnitID:(NSString *)adUnitID keywords:(NSString *)keywords userDataKeywords:(NSString *)userDataKeywords customerId:(NSString *)customerId mediationSettings:(NSArray *)mediationSettings; - -/** - * Loads a rewarded video ad for the given ad unit ID. - * - * The mediation settings array should contain ad network specific objects for networks that may be loaded for the given ad unit ID. - * You should set the properties on these objects to determine how the underlying ad network should behave. You only need to supply - * objects for the networks you wish to configure. If you do not want your network to behave differently from its default behavior, do - * not pass in an mediation settings object for that network. - * - * @deprecated This API is deprecated and will be removed in a future version. - * - * @param adUnitID The ad unit ID that ads should be loaded from. - * @param keywords A string representing a set of non-personally identifiable keywords that should be passed to the MoPub ad server to receive more relevant advertising. - * @param userDataKeywords A string representing a set of personally identifiable keywords that should be passed to the MoPub ad server to receive - * more relevant advertising. - * @param location Latitude/Longitude that are passed to the MoPub ad server - * @param customerId This is the ID given to the user by the publisher to identify them in their app - * @param mediationSettings An array of mediation settings objects that map to networks that may show ads for the ad unit ID. This array - * should only contain objects for networks you wish to configure. This can be nil. - - * Note: If a user is in General Data Protection Regulation (GDPR) region and MoPub doesn't obtain consent from the user, "keywords" will be sent to the server but "userDataKeywords" will be excluded. - */ -+ (void)loadRewardedVideoAdWithAdUnitID:(NSString *)adUnitID keywords:(NSString *)keywords userDataKeywords:(NSString *)userDataKeywords location:(CLLocation *)location customerId:(NSString *)customerId mediationSettings:(NSArray *)mediationSettings __attribute__((deprecated("This API is deprecated and will be removed in a future version. Use loadRewardedVideoAdWithAdUnitID:keywords:userDataKeywords:customerId:mediationSettings: instead"))); - -/** - * Loads a rewarded video ad for the given ad unit ID. - * - * The mediation settings array should contain ad network specific objects for networks that may be loaded for the given ad unit ID. - * You should set the properties on these objects to determine how the underlying ad network should behave. You only need to supply - * objects for the networks you wish to configure. If you do not want your network to behave differently from its default behavior, do - * not pass in an mediation settings object for that network. - * - * @param adUnitID The ad unit ID that ads should be loaded from. - * @param keywords A string representing a set of non-personally identifiable keywords that should be passed to the MoPub ad server to receive more relevant advertising. - * @param userDataKeywords A string representing a set of personally identifiable keywords that should be passed to the MoPub ad server to receive - * more relevant advertising. - * @param customerId This is the ID given to the user by the publisher to identify them in their app - * @param mediationSettings An array of mediation settings objects that map to networks that may show ads for the ad unit ID. This array - * should only contain objects for networks you wish to configure. This can be nil. - * @param localExtras An optional dictionary containing extra local data. - - * Note: If a user is in General Data Protection Regulation (GDPR) region and MoPub doesn't obtain consent from the user, "keywords" will be sent to the server but "userDataKeywords" will be excluded. - */ -+ (void)loadRewardedVideoAdWithAdUnitID:(NSString *)adUnitID keywords:(NSString *)keywords userDataKeywords:(NSString *)userDataKeywords customerId:(NSString *)customerId mediationSettings:(NSArray *)mediationSettings localExtras:(NSDictionary *)localExtras; - -/** - * Loads a rewarded video ad for the given ad unit ID. - * - * The mediation settings array should contain ad network specific objects for networks that may be loaded for the given ad unit ID. - * You should set the properties on these objects to determine how the underlying ad network should behave. You only need to supply - * objects for the networks you wish to configure. If you do not want your network to behave differently from its default behavior, do - * not pass in an mediation settings object for that network. - * - * @deprecated This API is deprecated and will be removed in a future version. - * - * @param adUnitID The ad unit ID that ads should be loaded from. - * @param keywords A string representing a set of non-personally identifiable keywords that should be passed to the MoPub ad server to receive more relevant advertising. - * @param userDataKeywords A string representing a set of personally identifiable keywords that should be passed to the MoPub ad server to receive - * more relevant advertising. - * @param location Latitude/Longitude that are passed to the MoPub ad server - * @param customerId This is the ID given to the user by the publisher to identify them in their app - * @param mediationSettings An array of mediation settings objects that map to networks that may show ads for the ad unit ID. This array - * should only contain objects for networks you wish to configure. This can be nil. - * @param localExtras An optional dictionary containing extra local data. - - * Note: If a user is in General Data Protection Regulation (GDPR) region and MoPub doesn't obtain consent from the user, "keywords" will be sent to the server but "userDataKeywords" will be excluded. - */ -+ (void)loadRewardedVideoAdWithAdUnitID:(NSString *)adUnitID keywords:(NSString *)keywords userDataKeywords:(NSString *)userDataKeywords location:(CLLocation *)location customerId:(NSString *)customerId mediationSettings:(NSArray *)mediationSettings localExtras:(NSDictionary *)localExtras __attribute__((deprecated("This API is deprecated and will be removed in a future version. Use loadRewardedVideoAdWithAdUnitID:keywords:userDataKeywords:customerId:mediationSettings:localExtras: instead"))); - -/** - * Returns whether or not an ad is available for the given ad unit ID. - * - * @param adUnitID The ad unit ID associated with the ad you want to retrieve the availability for. - */ -+ (BOOL)hasAdAvailableForAdUnitID:(NSString *)adUnitID; - -/** - * Returns an array of rewards that are available for the given ad unit ID. - */ -+ (NSArray *)availableRewardsForAdUnitID:(NSString *)adUnitID; - -/** - * The currently selected reward that will be awarded to the user upon completion of the ad. By default, - * this corresponds to the first reward in `availableRewardsForAdUnitID:`. - */ -+ (MPRewardedVideoReward *)selectedRewardForAdUnitID:(NSString *)adUnitID; - -/** - * Plays a rewarded video ad. - * - * @param adUnitID The ad unit ID associated with the video ad you wish to play. - * @param viewController The view controller that will present the rewarded video ad. - * @param reward A reward selected from `availableRewardsForAdUnitID:` to award the user upon successful completion of the ad. - * This value should not be `nil`. - * - * @warning **Important**: You should not attempt to play the rewarded video unless `+hasAdAvailableForAdUnitID:` indicates that an - * ad is available for playing or you have received the `[-rewardedVideoAdDidLoadForAdUnitID:]([MPRewardedVideoDelegate rewardedVideoAdDidLoadForAdUnitID:])` - * message. - */ -+ (void)presentRewardedVideoAdForAdUnitID:(NSString *)adUnitID fromViewController:(UIViewController *)viewController withReward:(MPRewardedVideoReward *)reward; - -/** - * Plays a rewarded video ad. - * - * @param adUnitID The ad unit ID associated with the video ad you wish to play. - * @param viewController The view controller that will present the rewarded video ad. - * @param reward A reward selected from `availableRewardsForAdUnitID:` to award the user upon successful completion of the ad. - * This value should not be `nil`. - * @param customData Optional custom data string to include in the server-to-server callback. If a server-to-server callback - * is not used, or if the ad unit is configured for local rewarding, this value will not be persisted. - * - * @warning **Important**: You should not attempt to play the rewarded video unless `+hasAdAvailableForAdUnitID:` indicates that an - * ad is available for playing or you have received the `[-rewardedVideoAdDidLoadForAdUnitID:]([MPRewardedVideoDelegate rewardedVideoAdDidLoadForAdUnitID:])` - * message. - */ -+ (void)presentRewardedVideoAdForAdUnitID:(NSString *)adUnitID fromViewController:(UIViewController *)viewController withReward:(MPRewardedVideoReward *)reward customData:(NSString *)customData; - -@end - -@protocol MPRewardedVideoDelegate - -@optional - -/** - * This method is called after an ad loads successfully. - * - * @param adUnitID The ad unit ID of the ad associated with the event. - */ -- (void)rewardedVideoAdDidLoadForAdUnitID:(NSString *)adUnitID; - -/** - * This method is called after an ad fails to load. - * - * @param adUnitID The ad unit ID of the ad associated with the event. - * @param error An error indicating why the ad failed to load. - */ -- (void)rewardedVideoAdDidFailToLoadForAdUnitID:(NSString *)adUnitID error:(NSError *)error; - -/** - * This method is called when a previously loaded rewarded video is no longer eligible for presentation. - * - * @param adUnitID The ad unit ID of the ad associated with the event. - */ -- (void)rewardedVideoAdDidExpireForAdUnitID:(NSString *)adUnitID; - -/** - * This method is called when an attempt to play a rewarded video fails. - * - * @param adUnitID The ad unit ID of the ad associated with the event. - * @param error An error describing why the video couldn't play. - */ -- (void)rewardedVideoAdDidFailToPlayForAdUnitID:(NSString *)adUnitID error:(NSError *)error; - -/** - * This method is called when a rewarded video ad is about to appear. - * - * @param adUnitID The ad unit ID of the ad associated with the event. - */ -- (void)rewardedVideoAdWillAppearForAdUnitID:(NSString *)adUnitID; - -/** - * This method is called when a rewarded video ad has appeared. - * - * @param adUnitID The ad unit ID of the ad associated with the event. - */ -- (void)rewardedVideoAdDidAppearForAdUnitID:(NSString *)adUnitID; - -/** - * This method is called when a rewarded video ad will be dismissed. - * - * @param adUnitID The ad unit ID of the ad associated with the event. - */ -- (void)rewardedVideoAdWillDisappearForAdUnitID:(NSString *)adUnitID; - -/** - * This method is called when a rewarded video ad has been dismissed. - * - * @param adUnitID The ad unit ID of the ad associated with the event. - */ -- (void)rewardedVideoAdDidDisappearForAdUnitID:(NSString *)adUnitID; - -/** - * This method is called when the user taps on the ad. - * - * @param adUnitID The ad unit ID of the ad associated with the event. - */ -- (void)rewardedVideoAdDidReceiveTapEventForAdUnitID:(NSString *)adUnitID; - -/** - * This method is called when a rewarded video ad will cause the user to leave the application. - * - * @param adUnitID The ad unit ID of the ad associated with the event. - */ -- (void)rewardedVideoAdWillLeaveApplicationForAdUnitID:(NSString *)adUnitID; - -/** - * This method is called when the user should be rewarded for watching a rewarded video ad. - * - * @param adUnitID The ad unit ID of the ad associated with the event. - * @param reward The object that contains all the information regarding how much you should reward the user. - */ -- (void)rewardedVideoAdShouldRewardForAdUnitID:(NSString *)adUnitID reward:(MPRewardedVideoReward *)reward; - -/** - Called when an impression is fired on a Rewarded Video. Includes information about the impression if applicable. - - @param adUnitID The ad unit ID of the rewarded video that fired the impression. - @param impressionData Information about the impression, or @c nil if the server didn't return any information. - */ -- (void)didTrackImpressionWithAdUnitID:(NSString *)adUnitID impressionData:(MPImpressionData *)impressionData; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideo.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideo.m deleted file mode 100644 index c897a1fd25..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideo.m +++ /dev/null @@ -1,345 +0,0 @@ -// -// MPRewardedVideo.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPRewardedVideo.h" -#import "MPAdTargeting.h" -#import "MPGlobal.h" -#import "MPImpressionTrackedNotification.h" -#import "MPLogging.h" -#import "MPRewardedVideoAdManager.h" -#import "MPRewardedVideoError.h" -#import "MPRewardedVideoConnection.h" -#import "MPRewardedVideoCustomEvent.h" -#import "MoPub+Utility.h" - -static MPRewardedVideo *gSharedInstance = nil; - -@interface MPRewardedVideo () - -@property (nonatomic, strong) NSMutableDictionary *rewardedVideoAdManagers; -@property (nonatomic) NSMutableArray *rewardedVideoConnections; -@property (nonatomic, strong) NSMapTable> * delegateTable; - -+ (MPRewardedVideo *)sharedInstance; - -@end - -@implementation MPRewardedVideo - -- (instancetype)init -{ - if (self = [super init]) { - _rewardedVideoAdManagers = [[NSMutableDictionary alloc] init]; - _rewardedVideoConnections = [NSMutableArray new]; - - // Keys (ad unit ID) are strong, values (delegates) are weak. - _delegateTable = [NSMapTable strongToWeakObjectsMapTable]; - } - - return self; -} - -+ (void)setDelegate:(id)delegate forAdUnitId:(NSString *)adUnitId -{ - if (adUnitId == nil) { - return; - } - - [[[self class] sharedInstance].delegateTable setObject:delegate forKey:adUnitId]; -} - -+ (void)removeDelegate:(id)delegate -{ - if (delegate == nil) { - return; - } - - NSMapTable * mapTable = [[self class] sharedInstance].delegateTable; - - // Find all keys that contain the delegate - NSMutableArray * keys = [NSMutableArray array]; - for (NSString * key in mapTable) { - if ([mapTable objectForKey:key] == delegate) { - [keys addObject:key]; - } - } - - // Remove all of the found keys - for (NSString * key in keys) { - [mapTable removeObjectForKey:key]; - } -} - -+ (void)removeDelegateForAdUnitId:(NSString *)adUnitId -{ - if (adUnitId == nil) { - return; - } - - [[[self class] sharedInstance].delegateTable removeObjectForKey:adUnitId]; -} - -+ (void)loadRewardedVideoAdWithAdUnitID:(NSString *)adUnitID withMediationSettings:(NSArray *)mediationSettings -{ - [MPRewardedVideo loadRewardedVideoAdWithAdUnitID:adUnitID keywords:nil userDataKeywords:nil customerId:nil mediationSettings:mediationSettings localExtras:nil]; -} - -+ (void)loadRewardedVideoAdWithAdUnitID:(NSString *)adUnitID keywords:(NSString *)keywords userDataKeywords:(NSString *)userDataKeywords location:(CLLocation *)location mediationSettings:(NSArray *)mediationSettings -{ - [self loadRewardedVideoAdWithAdUnitID:adUnitID keywords:keywords userDataKeywords:userDataKeywords customerId:nil mediationSettings:mediationSettings]; -} - -+ (void)loadRewardedVideoAdWithAdUnitID:(NSString *)adUnitID keywords:(NSString *)keywords userDataKeywords:(NSString *)userDataKeywords mediationSettings:(NSArray *)mediationSettings -{ - [self loadRewardedVideoAdWithAdUnitID:adUnitID keywords:keywords userDataKeywords:userDataKeywords customerId:nil mediationSettings:mediationSettings]; -} - -+ (void)loadRewardedVideoAdWithAdUnitID:(NSString *)adUnitID keywords:(NSString *)keywords userDataKeywords:(NSString *)userDataKeywords location:(CLLocation *)location customerId:(NSString *)customerId mediationSettings:(NSArray *)mediationSettings -{ - [self loadRewardedVideoAdWithAdUnitID:adUnitID keywords:keywords userDataKeywords:userDataKeywords customerId:customerId mediationSettings:mediationSettings localExtras:nil]; -} - -+ (void)loadRewardedVideoAdWithAdUnitID:(NSString *)adUnitID keywords:(NSString *)keywords userDataKeywords:(NSString *)userDataKeywords customerId:(NSString *)customerId mediationSettings:(NSArray *)mediationSettings -{ - [self loadRewardedVideoAdWithAdUnitID:adUnitID keywords:keywords userDataKeywords:userDataKeywords customerId:customerId mediationSettings:mediationSettings localExtras:nil]; -} - -+ (void)loadRewardedVideoAdWithAdUnitID:(NSString *)adUnitID keywords:(NSString *)keywords userDataKeywords:(NSString *)userDataKeywords location:(CLLocation *)location customerId:(NSString *)customerId mediationSettings:(NSArray *)mediationSettings localExtras:(NSDictionary *)localExtras -{ - [self loadRewardedVideoAdWithAdUnitID:adUnitID keywords:keywords userDataKeywords:userDataKeywords customerId:customerId mediationSettings:mediationSettings localExtras:localExtras]; -} - -+ (void)loadRewardedVideoAdWithAdUnitID:(NSString *)adUnitID keywords:(NSString *)keywords userDataKeywords:(NSString *)userDataKeywords customerId:(NSString *)customerId mediationSettings:(NSArray *)mediationSettings localExtras:(NSDictionary *)localExtras -{ - MPRewardedVideo *sharedInstance = [[self class] sharedInstance]; - - if (![adUnitID length]) { - NSError *error = [NSError errorWithDomain:MoPubRewardedVideoAdsSDKDomain code:MPRewardedVideoAdErrorInvalidAdUnitID userInfo:nil]; - id delegate = [sharedInstance.delegateTable objectForKey:adUnitID]; - [delegate rewardedVideoAdDidFailToLoadForAdUnitID:adUnitID error:error]; - return; - } - - MPRewardedVideoAdManager *adManager = sharedInstance.rewardedVideoAdManagers[adUnitID]; - - if (!adManager) { - adManager = [[MPRewardedVideoAdManager alloc] initWithAdUnitID:adUnitID delegate:sharedInstance]; - sharedInstance.rewardedVideoAdManagers[adUnitID] = adManager; - } - - adManager.mediationSettings = mediationSettings; - - // Ad targeting options - MPAdTargeting * targeting = [MPAdTargeting targetingWithCreativeSafeSize:MPApplicationFrame(YES).size]; - targeting.keywords = keywords; - targeting.localExtras = localExtras; - targeting.userDataKeywords = userDataKeywords; - - [adManager loadRewardedVideoAdWithCustomerId:customerId targeting:targeting]; -} - -+ (BOOL)hasAdAvailableForAdUnitID:(NSString *)adUnitID -{ - MPRewardedVideo *sharedInstance = [[self class] sharedInstance]; - MPRewardedVideoAdManager *adManager = sharedInstance.rewardedVideoAdManagers[adUnitID]; - - return [adManager hasAdAvailable]; -} - -+ (NSArray *)availableRewardsForAdUnitID:(NSString *)adUnitID -{ - MPRewardedVideo *sharedInstance = [[self class] sharedInstance]; - MPRewardedVideoAdManager *adManager = sharedInstance.rewardedVideoAdManagers[adUnitID]; - - return adManager.availableRewards; -} - -+ (MPRewardedVideoReward *)selectedRewardForAdUnitID:(NSString *)adUnitID -{ - MPRewardedVideo *sharedInstance = [[self class] sharedInstance]; - MPRewardedVideoAdManager *adManager = sharedInstance.rewardedVideoAdManagers[adUnitID]; - - return adManager.selectedReward; -} - -+ (void)presentRewardedVideoAdForAdUnitID:(NSString *)adUnitID fromViewController:(UIViewController *)viewController withReward:(MPRewardedVideoReward *)reward customData:(NSString *)customData -{ - MPRewardedVideo *sharedInstance = [[self class] sharedInstance]; - MPRewardedVideoAdManager *adManager = sharedInstance.rewardedVideoAdManagers[adUnitID]; - - if (!adManager) { - MPLogInfo(@"The rewarded video could not be shown: " - @"no ads have been loaded for adUnitID: %@", adUnitID); - - return; - } - - if (!viewController) { - MPLogInfo(@"The rewarded video could not be shown: " - @"a nil view controller was passed to -presentRewardedVideoAdForAdUnitID:fromViewController:."); - - return; - } - - if (![viewController.view.window isKeyWindow]) { - MPLogInfo(@"Attempting to present a rewarded video ad in non-key window. The ad may not render properly."); - } - - [adManager presentRewardedVideoAdFromViewController:viewController withReward:reward customData:customData]; -} - -+ (void)presentRewardedVideoAdForAdUnitID:(NSString *)adUnitID fromViewController:(UIViewController *)viewController withReward:(MPRewardedVideoReward *)reward -{ - [MPRewardedVideo presentRewardedVideoAdForAdUnitID:adUnitID fromViewController:viewController withReward:reward customData:nil]; -} - -#pragma mark - Private - -+ (MPRewardedVideo *)sharedInstance -{ - static dispatch_once_t once; - - dispatch_once(&once, ^{ - gSharedInstance = [[self alloc] init]; - }); - - return gSharedInstance; -} - -#pragma mark - MPRewardedVideoAdManagerDelegate - -- (void)rewardedVideoDidLoadForAdManager:(MPRewardedVideoAdManager *)manager -{ - id delegate = [self.delegateTable objectForKey:manager.adUnitId]; - if ([delegate respondsToSelector:@selector(rewardedVideoAdDidLoadForAdUnitID:)]) { - [delegate rewardedVideoAdDidLoadForAdUnitID:manager.adUnitId]; - } -} - -- (void)rewardedVideoDidFailToLoadForAdManager:(MPRewardedVideoAdManager *)manager error:(NSError *)error -{ - id delegate = [self.delegateTable objectForKey:manager.adUnitId]; - if ([delegate respondsToSelector:@selector(rewardedVideoAdDidFailToLoadForAdUnitID:error:)]) { - [delegate rewardedVideoAdDidFailToLoadForAdUnitID:manager.adUnitId error:error]; - } -} - -- (void)rewardedVideoDidExpireForAdManager:(MPRewardedVideoAdManager *)manager -{ - id delegate = [self.delegateTable objectForKey:manager.adUnitId]; - if ([delegate respondsToSelector:@selector(rewardedVideoAdDidExpireForAdUnitID:)]) { - [delegate rewardedVideoAdDidExpireForAdUnitID:manager.adUnitId]; - } -} - -- (void)rewardedVideoDidFailToPlayForAdManager:(MPRewardedVideoAdManager *)manager error:(NSError *)error -{ - id delegate = [self.delegateTable objectForKey:manager.adUnitId]; - if ([delegate respondsToSelector:@selector(rewardedVideoAdDidFailToPlayForAdUnitID:error:)]) { - [delegate rewardedVideoAdDidFailToPlayForAdUnitID:manager.adUnitId error:error]; - } -} - -- (void)rewardedVideoWillAppearForAdManager:(MPRewardedVideoAdManager *)manager -{ - id delegate = [self.delegateTable objectForKey:manager.adUnitId]; - if ([delegate respondsToSelector:@selector(rewardedVideoAdWillAppearForAdUnitID:)]) { - [delegate rewardedVideoAdWillAppearForAdUnitID:manager.adUnitId]; - } -} - -- (void)rewardedVideoDidAppearForAdManager:(MPRewardedVideoAdManager *)manager -{ - id delegate = [self.delegateTable objectForKey:manager.adUnitId]; - if ([delegate respondsToSelector:@selector(rewardedVideoAdDidAppearForAdUnitID:)]) { - [delegate rewardedVideoAdDidAppearForAdUnitID:manager.adUnitId]; - } -} - -- (void)rewardedVideoWillDisappearForAdManager:(MPRewardedVideoAdManager *)manager -{ - id delegate = [self.delegateTable objectForKey:manager.adUnitId]; - if ([delegate respondsToSelector:@selector(rewardedVideoAdWillDisappearForAdUnitID:)]) { - [delegate rewardedVideoAdWillDisappearForAdUnitID:manager.adUnitId]; - } -} - -- (void)rewardedVideoDidDisappearForAdManager:(MPRewardedVideoAdManager *)manager -{ - id delegate = [self.delegateTable objectForKey:manager.adUnitId]; - if ([delegate respondsToSelector:@selector(rewardedVideoAdDidDisappearForAdUnitID:)]) { - [delegate rewardedVideoAdDidDisappearForAdUnitID:manager.adUnitId]; - } - - // Since multiple ad units may be attached to the same network, we should notify the custom events (which should then notify the application) - // that their ads may not be available anymore since another ad unit might have "played" their ad. We go through and notify all ad managers - // that are of the type of ad that is playing now. - Class customEventClass = manager.customEventClass; - - for (id key in self.rewardedVideoAdManagers) { - MPRewardedVideoAdManager *adManager = self.rewardedVideoAdManagers[key]; - - if (adManager != manager && adManager.customEventClass == customEventClass) { - [adManager handleAdPlayedForCustomEventNetwork]; - } - } -} - -- (void)rewardedVideoDidReceiveTapEventForAdManager:(MPRewardedVideoAdManager *)manager -{ - id delegate = [self.delegateTable objectForKey:manager.adUnitId]; - if ([delegate respondsToSelector:@selector(rewardedVideoAdDidReceiveTapEventForAdUnitID:)]) { - [delegate rewardedVideoAdDidReceiveTapEventForAdUnitID:manager.adUnitId]; - } -} - -- (void)rewardedVideoAdManager:(MPRewardedVideoAdManager *)manager didReceiveImpressionEventWithImpressionData:(MPImpressionData *)impressionData -{ - [MoPub sendImpressionNotificationFromAd:nil - adUnitID:manager.adUnitId - impressionData:impressionData]; - - id delegate = [self.delegateTable objectForKey:manager.adUnitId]; - if ([delegate respondsToSelector:@selector(didTrackImpressionWithAdUnitID:impressionData:)]) { - [delegate didTrackImpressionWithAdUnitID:manager.adUnitId impressionData:impressionData]; - } -} - -- (void)rewardedVideoWillLeaveApplicationForAdManager:(MPRewardedVideoAdManager *)manager -{ - id delegate = [self.delegateTable objectForKey:manager.adUnitId]; - if ([delegate respondsToSelector:@selector(rewardedVideoAdWillLeaveApplicationForAdUnitID:)]) { - [delegate rewardedVideoAdWillLeaveApplicationForAdUnitID:manager.adUnitId]; - } -} - -- (void)rewardedVideoShouldRewardUserForAdManager:(MPRewardedVideoAdManager *)manager reward:(MPRewardedVideoReward *)reward -{ - id delegate = [self.delegateTable objectForKey:manager.adUnitId]; - if ([delegate respondsToSelector:@selector(rewardedVideoAdShouldRewardForAdUnitID:reward:)]) { - [delegate rewardedVideoAdShouldRewardForAdUnitID:manager.adUnitId reward:reward]; - } -} - -#pragma mark - rewarded video server to server callback - -- (void)startRewardedVideoConnectionWithUrl:(NSURL *)url -{ - MPRewardedVideoConnection *connection = [[MPRewardedVideoConnection alloc] initWithUrl:url delegate:self]; - [self.rewardedVideoConnections addObject:connection]; - [connection sendRewardedVideoCompletionRequest]; -} - -#pragma mark - MPRewardedVideoConnectionDelegate - -- (void)rewardedVideoConnectionCompleted:(MPRewardedVideoConnection *)connection url:(NSURL *)url -{ - [self.rewardedVideoConnections removeObject:connection]; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideoCustomEvent.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideoCustomEvent.h deleted file mode 100644 index dd4069884d..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideoCustomEvent.h +++ /dev/null @@ -1,321 +0,0 @@ -// -// MPRewardedVideoCustomEvent.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import - -@protocol MPRewardedVideoCustomEventDelegate; -@protocol MPMediationSettingsProtocol; - -@class MPRewardedVideoReward; - -/** - * The MoPub iOS SDK mediates third party Ad Networks using custom events. The custom events are - * responsible for instantiating and manipulating objects in the third party SDK and translating - * and communicating events from those objects back to the MoPub SDK by notifying a delegate. - * - * @c MPRewardedVideoCustomEvent is a base class for custom events that support full-screen rewarded - * video ads, and it conforms to a protocol of the same name @c MPRewardedVideoCustomEvent. - * By implementing subclasses of @c MPRewardedVideoCustomEvent you can enable the MoPub SDK to - * natively support a wide variety of third-party ad networks. By conforming to @c MPRewardedVideoCustomEvent, - * other custom event classes for regular interstitial and VAST video can conform to the same set of - * reward handling definitions and enable future unification. - * - * At runtime, the MoPub SDK will find and instantiate an @c MPRewardedVideoCustomEvent subclass as needed and - * invoke its @c -requestRewardedVideoWithCustomEventInfo: method. - */ - -@protocol MPRewardedVideoCustomEvent - -/** - * An optional dictionary containing extra local data. - */ -@property (nonatomic, copy) NSDictionary * localExtras; - -@property (nonatomic, weak) id delegate; - -/** @name Requesting and Displaying a Rewarded Video Ad */ - -/** - * Called when the MoPub SDK requires a new rewarded video ad. - * - * When the MoPub SDK receives a response indicating it should load a custom event, it will send - * this message to your custom event class. Your implementation of this method should load an - * rewarded video ad from a third-party ad network. It must also notify the - * `MPRewardedVideoCustomEventDelegate` of certain lifecycle events. - * - * The default implementation of this method does nothing. Subclasses must override this method and implement code to load a rewarded video here. - * - * **Important**: The application may provide a mediation settings object containing properties that you should use to configure how you use - * the ad network's APIs. Call `[-mediationSettingsForClass:]([MPRewardedVideoCustomEventDelegate mediationSettingsForClass:])` - * specifying a specific class that your custom event uses to retrieve the mediation settings object if it exists. You define - * the mediation settings class and the properties it supports for your custom event. - * - * @param info A dictionary containing additional custom data associated with a given custom event - * request. This data is configurable on the MoPub website, and may be used to pass dynamic information, such as publisher IDs. - * @param adMarkup An optional ad markup to use. - */ -- (void)requestRewardedVideoWithCustomEventInfo:(NSDictionary *)info adMarkup:(NSString *)adMarkup; - -/** - * Called when the MoPubSDK wants to know if an ad is currently available for the ad network. - * - * This call is typically invoked when the application wants to check whether an ad unit has an ad ready to display. - * - * Subclasses must override this method and implement coheck whether or not a rewarded vidoe ad is available for presentation. - * - */ -- (BOOL)hasAdAvailable; - -/** - * Called when the rewarded video should be displayed. - * - * This message is sent sometime after a rewarded video has been successfully loaded, as a result - * of your code calling `-[MPRewardedVideo presentRewardedVideoAdForAdUnitID:fromViewController:]`. Your implementation - * of this method should present the rewarded video ad from the specified view controller. - * - * The default implementation of this method does nothing. Subclasses must override this method and implement code to display a rewarded video here. - * - * If you decide to [opt out of automatic impression tracking](enableAutomaticImpressionAndClickTracking), you should place your - * manual calls to [-trackImpression]([MPRewardedVideoCustomEventDelegate trackImpression]) in this method to ensure correct metrics. - * - * @param viewController The controller to use to present the rewarded video modally. - */ -- (void)presentRewardedVideoFromViewController:(UIViewController *)viewController; - -/** @name Impression and Click Tracking */ - -/** - * Override to opt out of automatic impression and click tracking. - * - * By default, the MPRewardedVideoCustomEventDelegate will automatically record impressions and clicks in - * response to the appropriate callbacks. You may override this behavior by implementing this method - * to return `NO`. - * - * @warning **Important**: If you do this, you are responsible for calling the `[-trackImpression]([MPRewardedVideoCustomEventDelegate trackImpression])` and - * `[-trackClick]([MPRewardedVideoCustomEventDelegate trackClick])` methods on the custom event delegate. Additionally, you should make sure that these - * methods are only called **once** per ad. - */ -- (BOOL)enableAutomaticImpressionAndClickTracking; - -/** - * Override this method to handle when an ad was played for this custom event's network, but under a different ad unit ID. - * - * Due to the way ad mediation works, two ad units may load the same ad network for displaying ads. When one ad unit plays - * an ad, the other ad unit may need to update its state and notify the application an ad may no longer be available as it - * may have already played. If an ad becomes unavailable for this custom event, call - * `[-rewardedVideoDidExpireForCustomEvent:]([MPRewardedVideoCustomEventDelegate rewardedVideoDidExpireForCustomEvent:])` - * to notify the application that an ad is no longer available. - * - * This method will only be called if your custom event has reported that an ad had successfully loaded. The default implementation of this method does nothing. - * Subclasses must override this method and implement code to handle when the custom event is no longer needed by the rewarded video system. - */ -- (void)handleAdPlayedForCustomEventNetwork; - -/** - * Override this method to handle when the custom event is no longer needed by the rewarded video system. - * - * This method is called once the rewarded video system no longer references your custom event. This method - * is provided as you may have a centralized object holding onto this custom event. If that is the case and your - * centralized object no longer needs the custom event, then you should remove the custom event from the centralized - * object in this method causing the custom event to deallocate. See `MPAdColonyRewardedVideoCustomEvent` for an - * example of how and why this method is used. - * - * Implementation of this method is not necessary if you do not hold any extra references to it. `-dealloc` will still - * be called. However, it is expected you will need to override this method to prevent memory leaks. It is safe to override with nothing - * if you believe you will not leak memory. - */ -- (void)handleCustomEventInvalidated; - -@end - -/** - * A basic base class that conforms to @c MPRewardedVideoCustomEvent. - */ -@interface MPRewardedVideoCustomEvent : NSObject - -@property (nonatomic, copy) NSDictionary * localExtras; -@property (nonatomic, weak) id delegate; - -@end - -@protocol MPRewardedVideoCustomEventDelegate - -/** @name Rewarded Video Ad Mediation Settings */ - -/** - * Call this method to retrieve a mediation settings object (if one is provided by the application) for this instance - * of your ad. - * - * @param aClass The specific mediation settings class your custom event uses to configure itself for its ad network. - */ -- (id)instanceMediationSettingsForClass:(Class)aClass; - -/** @name Rewarded Video Ad Event Callbacks - Fetching Ads */ - -/** - * Call this method immediately after an ad loads succesfully. - * - * @param customEvent You should pass `self` to allow the MoPub SDK to associate this event with the correct - * instance of your custom event. - * - * @warning **Important**: Your custom event subclass **must** call this method when it successfully loads an ad. - * Failure to do so will disrupt the mediation waterfall and cause future ad requests to stall. - */ -- (void)rewardedVideoDidLoadAdForCustomEvent:(id)customEvent; - -/** - * Call this method immediately after an ad fails to load. - * - * @param customEvent You should pass `self` to allow the MoPub SDK to associate this event with the correct - * instance of your custom event. - * - * @param error (*optional*) You may pass an error describing the failure. - * - * @warning **Important**: Your custom event subclass **must** call this method when it fails to load an ad. - * Failure to do so will disrupt the mediation waterfall and cause future ad requests to stall. - */ -- (void)rewardedVideoDidFailToLoadAdForCustomEvent:(id)customEvent error:(NSError *)error; - -/** - * Call this method if a previously loaded rewarded video should no longer be eligible for presentation. - * - * Some third-party networks will mark rewarded videos as expired (indicating they should not be - * presented) *after* they have loaded. You may use this method to inform the MoPub SDK that a - * previously loaded rewarded video has expired and that a new rewarded video should be obtained. - * - * @param customEvent You should pass `self` to allow the MoPub SDK to associate this event with the correct - * instance of your custom event. - */ -- (void)rewardedVideoDidExpireForCustomEvent:(id)customEvent; - -/** - * Call this method when the application has attempted to play a rewarded video and it cannot be played. - * - * A common usage of this delegate method is when the application tries to play an ad and an ad is not available for play. - * - * @param customEvent You should pass `self` to allow the MoPub SDK to associate this event with the correct - * instance of your custom event. - * - * @param error The error describing why the video couldn't play. - */ -- (void)rewardedVideoDidFailToPlayForCustomEvent:(id)customEvent error:(NSError *)error; - -/** - * Call this method when an ad is about to appear. - * - * @param customEvent You should pass `self` to allow the MoPub SDK to associate this event with the correct - * instance of your custom event. - * - * @warning **Important**: Your custom event subclass **must** call this method when it is about to present the rewarded video. - * Failure to do so will disrupt the mediation waterfall and cause future ad requests to stall. - */ -- (void)rewardedVideoWillAppearForCustomEvent:(id)customEvent; - -/** - * Call this method when an ad has finished appearing. - * - * @param customEvent You should pass `self` to allow the MoPub SDK to associate this event with the correct - * instance of your custom event. - * - * @warning **Important**: Your custom event subclass **must** call this method when it is finished presenting the rewarded video. - * Failure to do so will disrupt the mediation waterfall and cause future ad requests to stall. - * - * **Note**: If it is not possible to know when the rewarded video *finished* appearing, you should call - * this immediately after calling `-rewardedVideoWillAppearForCustomEvent:`. - */ -- (void)rewardedVideoDidAppearForCustomEvent:(id)customEvent; - -/** - * Call this method when an ad is about to disappear. - * - * @param customEvent You should pass `self` to allow the MoPub SDK to associate this event with the correct - * instance of your custom event. - * - * @warning **Important**: Your custom event subclass **must** call this method when it is about to dismiss the rewarded video. - * Failure to do so will disrupt the mediation waterfall and cause future ad requests to stall. - */ -- (void)rewardedVideoWillDisappearForCustomEvent:(id)customEvent; - -/** - * Call this method when an ad has finished disappearing. - * - * @param customEvent You should pass `self` to allow the MoPub SDK to associate this event with the correct - * instance of your custom event. - * - * @warning **Important**: Your custom event subclass **must** call this method when it is finished with dismissing the rewarded video. - * Failure to do so will disrupt the mediation waterfall and cause future ad requests to stall. - * - * **Note**: if it is not possible to know when the rewarded video *finished* dismissing, you should call - * this immediately after calling `-rewardedVideoWillDisappearForCustomEvent:`. - */ -- (void)rewardedVideoDidDisappearForCustomEvent:(id)customEvent; - -/** - * Call this method when the rewarded video ad will cause the user to leave the application. - * - * For example, the user may have tapped on the video which redirects the user to the App Store or Safari. - * - * @param customEvent You should pass `self` to allow the MoPub SDK to associate this event with the correct - * instance of your custom event. - */ -- (void)rewardedVideoWillLeaveApplicationForCustomEvent:(id)customEvent; - -/** - * Call this method when the user taps on the rewarded video ad. - * - * This method is optional. When automatic click and impression tracking are enabled (the default) - * this method will track a click (the click is guaranteed to only be tracked once per ad). - * - * **Note**: some third-party networks provide a "will leave application" callback instead of/in - * addition to a "user did click" callback. You should call this method in response to either of - * those callbacks (since leaving the application is generally an indicator of a user tap). - * - * @param customEvent You should pass `self` to allow the MoPub SDK to associate this event with the correct - * instance of your custom event. - */ -- (void)rewardedVideoDidReceiveTapEventForCustomEvent:(id)customEvent; - -/** - * Call this method when the user should be rewarded for watching the rewarded video. - * - * @param customEvent You should pass `self` to allow the MoPub SDK to associate this event with the correct - * instance of your custom event. - * - * @param reward The reward object that contains the currency type as well as the amount that should be rewarded to - * the user. If the concept of currency type doesn't exist for your ad network, set the reward's currency type as - * kMPRewardedVideoRewardCurrencyTypeUnspecified. - */ -- (void)rewardedVideoShouldRewardUserForCustomEvent:(id)customEvent reward:(MPRewardedVideoReward *)reward; - -/** - * Call this method to get the customer ID associated with this custom event. - * - * @return The user's customer ID. - */ -- (NSString *)customerIdForRewardedVideoCustomEvent:(id)customEvent; - -/** @name Impression and Click Tracking */ - -/** - * Call this method to track an impression. - * - * @warning **Important**: You should **only** call this method if you have [opted out of automatic click and impression tracking]([MPRewardedVideoCustomEvent enableAutomaticImpressionAndClickTracking]). - * By default the MoPub SDK automatically tracks impressions. - */ -- (void)trackImpression; - -/** - * Call this method to track a click. - * - * @warning **Important**: You should **only** call this method if you have [opted out of automatic click and impression tracking]([MPRewardedVideoCustomEvent enableAutomaticImpressionAndClickTracking]). - * By default the MoPub SDK automatically tracks clicks. - */ -- (void)trackClick; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideoCustomEvent.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideoCustomEvent.m deleted file mode 100644 index cb712df3ed..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideoCustomEvent.m +++ /dev/null @@ -1,53 +0,0 @@ -// -// MPRewardedVideoCustomEvent.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPRewardedVideoCustomEvent.h" -#import - -@implementation MPRewardedVideoCustomEvent - -- (void)requestRewardedVideoWithCustomEventInfo:(NSDictionary *)info adMarkup:(NSString *)adMarkup -{ - // The default implementation of this method does nothing. Subclasses must override this method - // and implement code to load a rewarded video here. -} - -- (BOOL)hasAdAvailable -{ - // Subclasses must override this method and implement coheck whether or not a rewarded vidoe ad - // is available for presentation. - - return NO; -} - -- (void)presentRewardedVideoFromViewController:(UIViewController *)viewController -{ - // The default implementation of this method does nothing. Subclasses must override this method - // and implement code to display a rewarded video here. -} - -- (BOOL)enableAutomaticImpressionAndClickTracking -{ - // Subclasses may override this method to return NO to perform impression and click tracking - // manually. - return YES; -} - -- (void)handleAdPlayedForCustomEventNetwork -{ - // The default implementation of this method does nothing. Subclasses must override this method - // and implement code to handle when another ad unit plays an ad for the same ad network this custom event is representing. -} - -- (void)handleCustomEventInvalidated -{ - // The default implementation of this method does nothing. Subclasses must override this method - // and implement code to handle when the custom event is no longer needed by the rewarded video system. -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideoError.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideoError.h deleted file mode 100644 index 1d9362c7f4..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideoError.h +++ /dev/null @@ -1,26 +0,0 @@ -// -// MPRewardedVideoError.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -typedef enum { - MPRewardedVideoAdErrorUnknown = -1, - - MPRewardedVideoAdErrorTimeout = -1000, - MPRewardedVideoAdErrorAdUnitWarmingUp = -1001, - MPRewardedVideoAdErrorNoAdsAvailable = -1100, - MPRewardedVideoAdErrorInvalidCustomEvent = -1200, - MPRewardedVideoAdErrorMismatchingAdTypes = -1300, - MPRewardedVideoAdErrorAdAlreadyPlayed = -1400, - MPRewardedVideoAdErrorNoAdReady = -1401, - MPRewardedVideoAdErrorInvalidAdUnitID = -1500, - MPRewardedVideoAdErrorInvalidReward = -1600, - MPRewardedVideoAdErrorNoRewardSelected = -1601, -} MPRewardedVideoErrorCode; - -extern NSString * const MoPubRewardedVideoAdsSDKDomain; diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideoError.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideoError.m deleted file mode 100644 index 9e00a77492..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideoError.m +++ /dev/null @@ -1,11 +0,0 @@ -// -// MPRewardedVideoError.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPRewardedVideoError.h" - -NSString * const MoPubRewardedVideoAdsSDKDomain = @"MoPubRewardedVideoAdsSDKDomain"; diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideoReward.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideoReward.h deleted file mode 100644 index 170bdf309e..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideoReward.h +++ /dev/null @@ -1,60 +0,0 @@ -// -// MPRewardedVideoReward.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -/** - * A constant that indicates that no currency type was specified with the reward. - */ -extern NSString *const kMPRewardedVideoRewardCurrencyTypeUnspecified; - -/** - * A constant that indicates that no currency amount was specified with the reward. - */ -extern NSInteger const kMPRewardedVideoRewardCurrencyAmountUnspecified; - - -/** - * `MPRewardedVideoReward` contains all the information needed to reward the user for watching - * a rewarded video ad. The class provides a currency amount and currency type. - */ - -@interface MPRewardedVideoReward : NSObject - -/** - * The type of currency that should be rewarded to the user. - * - * An undefined currency type should be specified as `kMPRewardedVideoRewardCurrencyTypeUnspecified`. - */ -@property (nonatomic, readonly) NSString *currencyType; - -/** - * The amount of currency to reward to the user. - * - * An undefined currency amount should be specified as `kMPRewardedVideoRewardCurrencyAmountUnspecified` - * wrapped as an NSNumber. - */ -@property (nonatomic, readonly) NSNumber *amount; - -/** - * Initializes the object with an undefined currency type (`kMPRewardedVideoRewardCurrencyTypeUnspecified`) and - * the amount passed in. - * - * @param amount The amount of currency the user is receiving. - */ -- (instancetype)initWithCurrencyAmount:(NSNumber *)amount; - -/** - * Initializes the object's properties with the currencyType and amount. - * - * @param currencyType The type of currency the user is receiving. - * @param amount The amount of currency the user is receiving. - */ -- (instancetype)initWithCurrencyType:(NSString *)currencyType amount:(NSNumber *)amount; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideoReward.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideoReward.m deleted file mode 100644 index e461bdf478..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideoReward.m +++ /dev/null @@ -1,39 +0,0 @@ -// -// MPRewardedVideoReward.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPRewardedVideoReward.h" - -NSString *const kMPRewardedVideoRewardCurrencyTypeUnspecified = @"MPMoPubRewardedVideoRewardCurrencyTypeUnspecified"; -NSInteger const kMPRewardedVideoRewardCurrencyAmountUnspecified = 0; - -@implementation MPRewardedVideoReward - -- (instancetype)initWithCurrencyType:(NSString *)currencyType amount:(NSNumber *)amount -{ - if (self = [super init]) { - _currencyType = currencyType; - _amount = amount; - } - - return self; -} - -- (instancetype)initWithCurrencyAmount:(NSNumber *)amount -{ - return [self initWithCurrencyType:kMPRewardedVideoRewardCurrencyTypeUnspecified amount:amount]; -} - -- (NSString *)description { - NSString * message = nil; - if (self.amount != nil && self.currencyType != nil) { - message = [NSString stringWithFormat:@"%@ %@", self.amount, self.currencyType]; - } - return message; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MPViewabilityAdapterAvid.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MPViewabilityAdapterAvid.h deleted file mode 100644 index d210405f9f..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MPViewabilityAdapterAvid.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// MPViewabilityAdapterAvid.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#if __has_include() -#import -#elif __has_include() -#import -#else -#import "MPViewabilityAdapter.h" -#endif - -__attribute__((weak_import)) -@interface MPViewabilityAdapterAvid : NSObject < - MPViewabilityAdapterForWebView, - MPViewabilityAdapterForNativeVideoView -> -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MPViewabilityAdapterAvid.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MPViewabilityAdapterAvid.m deleted file mode 100644 index d5315aebfd..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MPViewabilityAdapterAvid.m +++ /dev/null @@ -1,175 +0,0 @@ -// -// MPViewabilityAdapterAvid.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#if __has_include("MoPub.h") -#import "MoPub.h" -#import "MPLogging.h" -#endif - -#import "MPViewabilityAdapterAvid.h" - -#if __has_include("MoPub_Avid.h") -#import "MoPub_Avid.h" -#define __HAS_AVID_LIB_ -#endif - -@interface MPViewabilityAdapterAvid() -@property (nonatomic, readwrite) BOOL isTracking; - -#ifdef __HAS_AVID_LIB_ -@property (nonatomic, strong) MoPub_AbstractAvidAdSession * avidAdSession; - -/** - The key is an `MPVideoEvent`, and the value is the `NSValue` represenation of a selector from - `MoPub_AvidVideoPlaybackListener`. - */ -@property (nonatomic, strong) NSDictionary *videoEventHandlerMap; -#endif -@end - -@implementation MPViewabilityAdapterAvid - -#pragma mark - MPViewabilityAdapter - -- (void)startTracking { -#ifdef __HAS_AVID_LIB_ - // Only start tracking if: - // 1. Avid is not already tracking - // 2. Avid session is valid - if (!self.isTracking && self.avidAdSession != nil) { - [self.avidAdSession.avidDeferredAdSessionListener recordReadyEvent]; - self.isTracking = YES; - MPLogInfo(@"IAS tracking started"); - } -#endif -} - -- (void)stopTracking { -#ifdef __HAS_AVID_LIB_ - // Only stop tracking if: - // 1. IAS is already tracking - if (self.isTracking) { - [self.avidAdSession endSession]; - if (self.avidAdSession) { - MPLogInfo(@"IAS tracking stopped"); - } - } - - // Mark IAS as not tracking - self.isTracking = NO; -#endif -} - -- (void)registerFriendlyObstructionView:(UIView *)view { -#ifdef __HAS_AVID_LIB_ - [self.avidAdSession registerFriendlyObstruction:view]; -#endif -} - -#pragma mark - MPViewabilityAdapterForWebView - -- (instancetype)initWithWebView:(UIView *)webView isVideo:(BOOL)isVideo startTrackingImmediately:(BOOL)startTracking { - if (self = [super init]) { - _isTracking = NO; - -#ifdef __HAS_AVID_LIB_ - MoPub_ExternalAvidAdSessionContext * avidAdSessionContext = [MoPub_ExternalAvidAdSessionContext contextWithPartnerVersion:[[MoPub sharedInstance] version] isDeferred:!startTracking]; - if (isVideo) { - _avidAdSession = [MoPub_AvidAdSessionManager startAvidVideoAdSessionWithContext:avidAdSessionContext]; - } - else { - _avidAdSession = [MoPub_AvidAdSessionManager startAvidDisplayAdSessionWithContext:avidAdSessionContext]; - } - - [_avidAdSession registerAdView:webView]; - - if (startTracking) { - _isTracking = YES; - MPLogInfo(@"IAS tracking started"); - } -#endif - } - - return self; -} - -#pragma mark - MPViewabilityAdapterForNativeVideoView - -- (instancetype)initWithNativeVideoView:(UIView *)nativeVideoView startTrackingImmediately:(BOOL)startTracking { - if (self = [super init]) { - _isTracking = NO; - -#ifdef __HAS_AVID_LIB_ - MoPub_ExternalAvidAdSessionContext *avidAdSessionContext - = [MoPub_ExternalAvidAdSessionContext contextWithPartnerVersion:[[MoPub sharedInstance] version] - isDeferred:!startTracking]; - _avidAdSession = [MoPub_AvidAdSessionManager startAvidManagedVideoAdSessionWithContext:avidAdSessionContext]; - [_avidAdSession registerAdView:nativeVideoView]; - - // note: not every `MPVideoEvent` has a corresponding `MoPub_AvidVideoPlaybackListener` call - _videoEventHandlerMap = @{ - MPVideoEventClick: [NSValue valueWithPointer:@selector(recordAdClickThruEvent)], - MPVideoEventClose: [NSValue valueWithPointer:@selector(recordAdUserCloseEvent)], - MPVideoEventCloseLinear: [NSValue valueWithPointer:@selector(recordAdUserCloseEvent)], - MPVideoEventComplete: [NSValue valueWithPointer:@selector(recordAdCompleteEvent)], - MPVideoEventError: [NSValue valueWithPointer:@selector(recordAdErrorWithMessage:)], - MPVideoEventExitFullScreen: [NSValue valueWithPointer:@selector(recordAdExitedFullscreenEvent)], - MPVideoEventExpand: [NSValue valueWithPointer:@selector(recordAdExpandedChangeEvent)], - MPVideoEventFirstQuartile: [NSValue valueWithPointer:@selector(recordAdVideoFirstQuartileEvent)], - MPVideoEventFullScreen: [NSValue valueWithPointer:@selector(recordAdEnteredFullscreenEvent)], - MPVideoEventImpression: [NSValue valueWithPointer:@selector(recordAdImpressionEvent)], - MPVideoEventMidpoint: [NSValue valueWithPointer:@selector(recordAdVideoMidpointEvent)], - MPVideoEventPause: [NSValue valueWithPointer:@selector(recordAdPausedEvent)], - MPVideoEventResume: [NSValue valueWithPointer:@selector(recordAdPlayingEvent)], - MPVideoEventSkip: [NSValue valueWithPointer:@selector(recordAdSkippedEvent)], - MPVideoEventStart: [NSValue valueWithPointer:@selector(recordAdVideoStartEvent)], - MPVideoEventThirdQuartile: [NSValue valueWithPointer:@selector(recordAdVideoThirdQuartileEvent)] - }; - - if (startTracking) { - _isTracking = YES; - MPLogInfo(@"IAS tracking started"); - } -#endif - } - - return self; -} - -- (void)trackNativeVideoEvent:(MPVideoEvent)event eventInfo:(NSDictionary *)eventInfo { -#ifdef __HAS_AVID_LIB_ - if ([self.avidAdSession isKindOfClass:[MoPub_AvidManagedVideoAdSession class]] == NO) { - MPLogInfo(@"%s is called but the ad session is not for native video", __PRETTY_FUNCTION__); - return; - } - - MoPub_AvidManagedVideoAdSession *session = (MoPub_AvidManagedVideoAdSession *)self.avidAdSession; - NSValue *selectorValue = self.videoEventHandlerMap[event]; - SEL selector = selectorValue.pointerValue; - BOOL didTrack = NO; - - if (selector != nil) { - NSString *selectorString = NSStringFromSelector(selector); - if ([selectorString componentsSeparatedByString:@":"].count == 1) { // no argument - [session.avidVideoPlaybackListener performSelector:selector]; - didTrack = YES; - } else if ([selectorString componentsSeparatedByString:@":"].count == 2) { // one argument - if (selector == @selector(MPVideoEventError)) { - [session.avidVideoPlaybackListener performSelector:selector withObject:eventInfo[@"message"]]; - didTrack = YES; - } - } - } - - if (didTrack == NO) { - MPLogInfo(@"%s Unsupported tracking event %@", __PRETTY_FUNCTION__, event); - } -#endif -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AbstractAvidAdSession.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AbstractAvidAdSession.h deleted file mode 100644 index b7d2088d66..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AbstractAvidAdSession.h +++ /dev/null @@ -1,24 +0,0 @@ -// -// AbstractAvidAdSession.h -// AppVerificationLibrary -// -// Created by Daria Sukhonosova on 05/04/16. -// Copyright © 2016 Integral. All rights reserved. -// - -#import -#import "MoPub_AvidDeferredAdSessionListener.h" - -@class UIView; - -@interface MoPub_AbstractAvidAdSession : NSObject - -@property(nonatomic, readonly) NSString *avidAdSessionId; -@property(nonatomic, readonly) id avidDeferredAdSessionListener; - -- (void)registerAdView:(UIView *)view; -- (void)unregisterAdView:(UIView *)view; -- (void)endSession; -- (void)registerFriendlyObstruction:(UIView *)friendlyObstruction; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AbstractAvidManagedAdSession.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AbstractAvidManagedAdSession.h deleted file mode 100644 index 072c4556e8..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AbstractAvidManagedAdSession.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// Created by Daria Sukhonosova on 11/05/16. -// Copyright (c) 2016 Integral. All rights reserved. -// - -#import -#import "MoPub_AbstractAvidAdSession.h" - -@interface MoPub_AbstractAvidManagedAdSession : MoPub_AbstractAvidAdSession - -- (void)injectJavaScriptResource:(NSString *)javaScriptResource; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_Avid.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_Avid.h deleted file mode 100644 index 5b616eaa28..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_Avid.h +++ /dev/null @@ -1,10 +0,0 @@ -#import "MoPub_AvidAdSessionManager.h" -#import "MoPub_AbstractAvidAdSession.h" -#import "MoPub_AbstractAvidManagedAdSession.h" -#import "MoPub_AvidDisplayAdSession.h" -#import "MoPub_AvidVideoAdSession.h" -#import "MoPub_AvidManagedDisplayAdSession.h" -#import "MoPub_AvidManagedVideoAdSession.h" -#import "MoPub_AvidVideoPlaybackListener.h" -#import "MoPub_ExternalAvidAdSessionContext.h" -#import "MoPub_AvidDeferredAdSessionListener.h" diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AvidAdSessionManager.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AvidAdSessionManager.h deleted file mode 100644 index 2793fe3b40..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AvidAdSessionManager.h +++ /dev/null @@ -1,26 +0,0 @@ -// -// AvidAdSessionManager.h -// AppVerificationLibrary -// -// Created by Daria Sukhonosova on 05/04/16. -// Copyright © 2016 Integral. All rights reserved. -// - -#import -#import "MoPub_AvidDisplayAdSession.h" -#import "MoPub_AvidManagedDisplayAdSession.h" -#import "MoPub_AvidVideoAdSession.h" -#import "MoPub_AvidManagedVideoAdSession.h" -#import "MoPub_ExternalAvidAdSessionContext.h" - -@interface MoPub_AvidAdSessionManager : NSObject - -+ (NSString *)version; -+ (NSString *)releaseDate; - -+ (MoPub_AvidVideoAdSession *)startAvidVideoAdSessionWithContext:(MoPub_ExternalAvidAdSessionContext *)avidAdSessionContext; -+ (MoPub_AvidDisplayAdSession *)startAvidDisplayAdSessionWithContext:(MoPub_ExternalAvidAdSessionContext *)avidAdSessionContext; -+ (MoPub_AvidManagedVideoAdSession *)startAvidManagedVideoAdSessionWithContext:(MoPub_ExternalAvidAdSessionContext *)avidAdSessionContext; -+ (MoPub_AvidManagedDisplayAdSession *)startAvidManagedDisplayAdSessionWithContext:(MoPub_ExternalAvidAdSessionContext *)avidAdSessionContext; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AvidDeferredAdSessionListener.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AvidDeferredAdSessionListener.h deleted file mode 100644 index c300c426e3..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AvidDeferredAdSessionListener.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// AvidDeferredAdSessionListener.h -// AppVerificationLibrary -// -// Created by Evgeniy Gubin on 22.06.16. -// Copyright © 2016 Integral. All rights reserved. -// - -#import - -@protocol MoPub_AvidDeferredAdSessionListener - -- (void)recordReadyEvent; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AvidDisplayAdSession.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AvidDisplayAdSession.h deleted file mode 100644 index 65548cd8dd..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AvidDisplayAdSession.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// AvidDisplayAdSession.h -// AppVerificationLibrary -// -// Created by Daria Sukhonosova on 05/04/16. -// Copyright © 2016 Integral. All rights reserved. -// - -#import "MoPub_AbstractAvidAdSession.h" - -@interface MoPub_AvidDisplayAdSession : MoPub_AbstractAvidAdSession - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AvidManagedDisplayAdSession.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AvidManagedDisplayAdSession.h deleted file mode 100644 index 87b762a16c..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AvidManagedDisplayAdSession.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// AvidManagedDisplayAdSession.h -// AppVerificationLibrary -// -// Created by Daria Sukhonosova on 05/04/16. -// Copyright © 2016 Integral. All rights reserved. -// - -#import "MoPub_AbstractAvidManagedAdSession.h" - -@interface MoPub_AvidManagedDisplayAdSession : MoPub_AbstractAvidManagedAdSession - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AvidManagedVideoAdSession.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AvidManagedVideoAdSession.h deleted file mode 100644 index 4878738467..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AvidManagedVideoAdSession.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// AvidManagedVideoAdSession.h -// AppVerificationLibrary -// -// Created by Daria Sukhonosova on 05/04/16. -// Copyright © 2016 Integral. All rights reserved. -// - -#import "MoPub_AbstractAvidManagedAdSession.h" -#import "MoPub_AvidVideoPlaybackListener.h" - -@interface MoPub_AvidManagedVideoAdSession : MoPub_AbstractAvidManagedAdSession - -@property(nonatomic, readonly) id avidVideoPlaybackListener; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AvidVideoAdSession.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AvidVideoAdSession.h deleted file mode 100644 index bbd4a9548a..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AvidVideoAdSession.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// AvidVideoAdSession.h -// AppVerificationLibrary -// -// Created by Evgeniy Gubin on 17.06.16. -// Copyright © 2016 Integral. All rights reserved. -// - -#import "MoPub_AbstractAvidAdSession.h" - -@interface MoPub_AvidVideoAdSession : MoPub_AbstractAvidAdSession - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AvidVideoPlaybackListener.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AvidVideoPlaybackListener.h deleted file mode 100644 index 887aaa6dd5..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AvidVideoPlaybackListener.h +++ /dev/null @@ -1,36 +0,0 @@ -// -// AvidVideoPlaybackListener.h -// AppVerificationLibrary -// -// Created by Evgeniy Gubin on 22.06.16. -// Copyright © 2016 Integral. All rights reserved. -// - -#import - -@protocol MoPub_AvidVideoPlaybackListener - -- (void)recordAdImpressionEvent; -- (void)recordAdStartedEvent; -- (void)recordAdLoadedEvent; -- (void)recordAdVideoStartEvent; -- (void)recordAdStoppedEvent; -- (void)recordAdCompleteEvent; -- (void)recordAdClickThruEvent; -- (void)recordAdVideoFirstQuartileEvent; -- (void)recordAdVideoMidpointEvent; -- (void)recordAdVideoThirdQuartileEvent; -- (void)recordAdPausedEvent; -- (void)recordAdPlayingEvent; -- (void)recordAdExpandedChangeEvent; -- (void)recordAdUserMinimizeEvent; -- (void)recordAdUserAcceptInvitationEvent; -- (void)recordAdUserCloseEvent; -- (void)recordAdSkippedEvent; -- (void)recordAdVolumeChangeEvent:(NSInteger)volume; -- (void)recordAdEnteredFullscreenEvent; -- (void)recordAdExitedFullscreenEvent; -- (void)recordAdDurationChangeEvent:(NSString *)adDuration adRemainingTime:(NSString *)adRemainingTime; -- (void)recordAdErrorWithMessage:(NSString *)message; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_ExternalAvidAdSessionContext.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_ExternalAvidAdSessionContext.h deleted file mode 100644 index c09821c4ea..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_ExternalAvidAdSessionContext.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// ExternalAvidAdSessionContext.h -// AppVerificationLibrary -// -// Created by Daria Sukhonosova on 18/04/16. -// Copyright © 2016 Integral. All rights reserved. -// - -#import - -@interface MoPub_ExternalAvidAdSessionContext : NSObject - -@property(nonatomic, readonly) NSString *partnerVersion; -@property(nonatomic, readonly) BOOL isDeferred; - -+ (instancetype)contextWithPartnerVersion:(NSString *)partnerVersion; -+ (instancetype)contextWithPartnerVersion:(NSString *)partnerVersion isDeferred:(BOOL)isDeferred; - -- (instancetype)initWithPartnerVersion:(NSString *)partnerVersion; -- (instancetype)initWithPartnerVersion:(NSString *)partnerVersion isDeferred:(BOOL)isDeferred; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/libAvid-mopub-3.6.1.a b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/libAvid-mopub-3.6.1.a deleted file mode 100644 index 033b0d796e..0000000000 Binary files a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/libAvid-mopub-3.6.1.a and /dev/null differ diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/Headers b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/Headers deleted file mode 120000 index a177d2a6b9..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/Headers +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Headers \ No newline at end of file diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/MPUBMoatMobileAppKit b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/MPUBMoatMobileAppKit deleted file mode 120000 index 43a761f94f..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/MPUBMoatMobileAppKit +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/MPUBMoatMobileAppKit \ No newline at end of file diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/Versions/A/Headers/MPUBMoatAnalytics.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/Versions/A/Headers/MPUBMoatAnalytics.h deleted file mode 100644 index 16f43ed73d..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/Versions/A/Headers/MPUBMoatAnalytics.h +++ /dev/null @@ -1,33 +0,0 @@ -// -// MPUBMoatAnalytics.h -// MPUBMoatMobileAppKit -// -// Created by Moat on 6/2/16. -// Copyright © 2016 Moat. All rights reserved. -// - -#import -#import -#import "MPUBMoatWebTracker.h" -#import "MPUBMoatNativeDisplayTracker.h" -#import "MPUBMoatVideoTracker.h" - -@interface MPUBMoatOptions : NSObject - -@property BOOL locationServicesEnabled; -@property BOOL debugLoggingEnabled; -@property BOOL IDFACollectionEnabled; - -@end - -@interface MPUBMoatAnalytics : NSObject - -+ (instancetype)sharedInstance; - -- (void)start; - -- (void)startWithOptions:(MPUBMoatOptions *)options; - -- (void)prepareNativeDisplayTracking:(NSString *)partnerCode; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/Versions/A/Headers/MPUBMoatBaseTracker.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/Versions/A/Headers/MPUBMoatBaseTracker.h deleted file mode 100644 index 44d8dd7db1..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/Versions/A/Headers/MPUBMoatBaseTracker.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// MPUBMoatBaseTracker.h -// MPUBMoatMobileAppKit -// -// Created by Moat on 7/27/16. -// Copyright © 2016 Moat. All rights reserved. -// - -#import -#import - -@interface MPUBMoatBaseTracker : NSObject -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/Versions/A/Headers/MPUBMoatMobileAppKit.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/Versions/A/Headers/MPUBMoatMobileAppKit.h deleted file mode 100644 index 155b050a8a..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/Versions/A/Headers/MPUBMoatMobileAppKit.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// MoatMobileAppKit.h -// MoatMobileAppKit -// -// Created by Moat on 12/31/14. -// Copyright © 2016 Moat. All rights reserved. -// - -#import -#import "MPUBMoatAnalytics.h" - -@interface MPUBMoatMobileAppKit : NSObject - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/Versions/A/Headers/MPUBMoatNativeDisplayTracker.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/Versions/A/Headers/MPUBMoatNativeDisplayTracker.h deleted file mode 100644 index cbb05d4f20..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/Versions/A/Headers/MPUBMoatNativeDisplayTracker.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// Created by Moat on 2/24/15. -// Copyright © 2016 Moat. All rights reserved. -// -// This class is used to track native ads -- ads that are rendered using native UI elements rather than a WebView. -// The class creates an internally managed WebView instance, loads our JavaScript tag into it, and then dispatches -// viewability-related signals (pertaining to the native ad it is tracking) into that WebView. - -#import -#import "MPUBMoatBaseTracker.h" - -@interface MPUBMoatNativeDisplayTracker : MPUBMoatBaseTracker - -// Use this to track ads that can't run JavaScript. This method accepts any UIView. -// Web-based ads, including "opaque" web containers (Google's DFPBannerView, etc.) are best tracked using MoatWebTracker instead. -+ (MPUBMoatNativeDisplayTracker *)trackerWithAdView:(UIView *)adView withAdIds:(NSDictionary *)adIds; - -- (void)startTracking; - -// Call to stop tracking the current ad. -- (void)stopTracking; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/Versions/A/Headers/MPUBMoatVideoTracker.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/Versions/A/Headers/MPUBMoatVideoTracker.h deleted file mode 100644 index fb4c4209c3..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/Versions/A/Headers/MPUBMoatVideoTracker.h +++ /dev/null @@ -1,34 +0,0 @@ -// -// MoatVideoTracker.h -// MoatMobileAppKit -// -// Created by Moat on 2/20/15. -// Copyright © 2016 Moat. All rights reserved. -// -// This class is used for tracking AVPlayer and MPMoviePlayerController based ads. - -#import -#import -#import -#import - -#import "MPUBMoatBaseTracker.h" - -@interface MPUBMoatVideoTracker : MPUBMoatBaseTracker - -+ (MPUBMoatVideoTracker *)trackerWithPartnerCode:(NSString *)partnerCode; - -- (bool)trackVideoAd:(NSDictionary *)adIds - usingMPMoviePlayer:(MPMoviePlayerController *)player; - -- (bool)trackVideoAd:(NSDictionary *)adIds - usingAVMoviePlayer:(AVPlayer *)player - withLayer:(CALayer *)layer - withContainingView:(UIView *)view; - -- (void)changeTargetLayer:(CALayer *)newLayer - withContainingView:(UIView *)view; - -- (void)stopTracking; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/Versions/A/Headers/MPUBMoatWebTracker.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/Versions/A/Headers/MPUBMoatWebTracker.h deleted file mode 100644 index 3f1c4a5e8d..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/Versions/A/Headers/MPUBMoatWebTracker.h +++ /dev/null @@ -1,24 +0,0 @@ -// -// MPUBMoatWebTracker.h -// MPUBMoatMobileAppKit -// -// Created by Moat on 6/2/16. -// Copyright © 2016 Moat. All rights reserved. -// - -#import -#import -#import "MPUBMoatBaseTracker.h" - -@interface MPUBMoatWebTracker : MPUBMoatBaseTracker - -+ (MPUBMoatWebTracker *)trackerWithWebComponent:(UIView *)webViewOrWebViewContainer; - -// Use this to track hybrid, two-view ads that consist both of a native UIView and a web-based component. -+ (MPUBMoatWebTracker *)trackerWithAdView:(UIView *)adView withWebComponent:(UIView *)webViewOrWebViewContainer; - -- (bool)startTracking; - -- (void)stopTracking; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/Versions/A/MPUBMoatMobileAppKit b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/Versions/A/MPUBMoatMobileAppKit deleted file mode 100644 index 132ab8ee56..0000000000 Binary files a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/Versions/A/MPUBMoatMobileAppKit and /dev/null differ diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/Versions/Current b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/Versions/Current deleted file mode 120000 index 8c7e5a667f..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/Versions/Current +++ /dev/null @@ -1 +0,0 @@ -A \ No newline at end of file diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPViewabilityAdapterMoat.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPViewabilityAdapterMoat.h deleted file mode 100644 index 4cef586037..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPViewabilityAdapterMoat.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// MPViewabilityAdapterMoat.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#if __has_include() -#import -#elif __has_include() -#import -#else -#import "MPViewabilityAdapter.h" -#endif - -__attribute__((weak_import)) -@interface MPViewabilityAdapterMoat : NSObject -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPViewabilityAdapterMoat.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPViewabilityAdapterMoat.m deleted file mode 100644 index 930ba3bf8c..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPViewabilityAdapterMoat.m +++ /dev/null @@ -1,129 +0,0 @@ -// -// MPViewabilityAdapterMoat.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#if __has_include("MoPub.h") -#import "MPLogging.h" -#endif - -#import "MPViewabilityAdapterMoat.h" -#import - -#if __has_include() -#import -#define __HAS_MOAT_FRAMEWORK_ -#endif - -#ifdef __HAS_MOAT_FRAMEWORK_ -static NSString *const kMOATSendAdStoppedJavascript = @"MoTracker.sendMoatAdStoppedEvent()"; -#endif - -@interface MPViewabilityAdapterMoat() -@property (nonatomic, readwrite) BOOL isTracking; - -#ifdef __HAS_MOAT_FRAMEWORK_ -@property (nonatomic, strong) MPUBMoatWebTracker * moatWebTracker; -@property (nonatomic, strong) UIView *webView; -@property (nonatomic, assign) BOOL isVideo; -#endif -@end - -@implementation MPViewabilityAdapterMoat - -#pragma mark - MPViewabilityAdapter - -- (void)startTracking { -#ifdef __HAS_MOAT_FRAMEWORK_ - // Only start tracking if: - // 1. Moat is not already tracking - // 2. Moat is allocated - if (!self.isTracking && self.moatWebTracker != nil) { - [self.moatWebTracker startTracking]; - self.isTracking = YES; - MPLogInfo(@"MOAT tracking started"); - } -#endif -} - -- (void)stopTracking { -#ifdef __HAS_MOAT_FRAMEWORK_ - // Only stop tracking if: - // 1. Moat is currently tracking - if (self.isTracking) { - void (^moatEndTrackingBlock)(void) = ^{ - [self.moatWebTracker stopTracking]; - if (self.moatWebTracker) { - MPLogInfo(@"MOAT tracking stopped"); - } - }; - // If video, as a safeguard, dispatch `AdStopped` event before we stop tracking. - // (MoTracker makes sure AdStopped is only dispatched once no matter how many times - // this function is called) - if (self.isVideo) { - if ([self.webView isKindOfClass:[WKWebView class]]) { - WKWebView *typedWebView = (WKWebView *)self.webView; - [typedWebView evaluateJavaScript:kMOATSendAdStoppedJavascript - completionHandler:^(id result, NSError *error){ - moatEndTrackingBlock(); - }]; - } else { - MPLogInfo(@"Unexpected web view class: %@", self.webView.class); - moatEndTrackingBlock(); - } - } else { - moatEndTrackingBlock(); - } - - // Mark Moat as not tracking - self.isTracking = NO; - } -#endif -} - -- (void)registerFriendlyObstructionView:(UIView *)view { - // Nothing to do -} - -#pragma mark - MPViewabilityAdapterForWebView - -- (instancetype)initWithWebView:(UIView *)webView isVideo:(BOOL)isVideo startTrackingImmediately:(BOOL)startTracking { - if (self = [super init]) { - _isTracking = NO; - -#ifdef __HAS_MOAT_FRAMEWORK_ - static dispatch_once_t sMoatSharedInstanceStarted; - dispatch_once(&sMoatSharedInstanceStarted, ^{ - // explicitly disable location tracking and IDFA tracking - MPUBMoatOptions *options = [[MPUBMoatOptions alloc] init]; - options.locationServicesEnabled = NO; - options.IDFACollectionEnabled = NO; - options.debugLoggingEnabled = NO; - - // start with options - [[MPUBMoatAnalytics sharedInstance] startWithOptions:options]; - }); - - _moatWebTracker = [MPUBMoatWebTracker trackerWithWebComponent:webView]; - _webView = webView; - _isVideo = isVideo; - if (_moatWebTracker == nil) { - NSString * adViewClassName = NSStringFromClass([webView class]); - MPLogError(@"Couldn't attach Moat to %@.", adViewClassName); - } - - if (startTracking) { - [_moatWebTracker startTracking]; - _isTracking = YES; - MPLogInfo(@"MOAT tracking started"); - } -#endif - } - - return self; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MPViewabilityAdapter.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MPViewabilityAdapter.h deleted file mode 100644 index f71f776949..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MPViewabilityAdapter.h +++ /dev/null @@ -1,77 +0,0 @@ -// -// MPViewabilityAdapter.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPVideoEvent.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - This protocol is for the adapters of various viewability SDK's. - */ -@protocol MPViewabilityAdapter - -@property (nonatomic, readonly) BOOL isTracking; - -/** - Start tracking. - */ -- (void)startTracking; - -/** - Stop tracking. - */ -- (void)stopTracking; - -/** - Register a view that is laid out above the tracked ad view, which also belongs to the same UI - component as the tracked view, such as the Learn More button, Close button, and video progress bar - of the ad view. - */ -- (void)registerFriendlyObstructionView:(UIView *)view; - -@end - -#pragma mark - MPViewabilityAdapterForWebView - -@protocol MPViewabilityAdapterForWebView - -/** - Instantiate a viewability adapter for a web view. - @param webView Either a `WKWebView` or its subclass, or a superview of a `WKWebView` or its subclass. - @param isVideo Whether the web view is a video player. - @param startTracking Whether to start tracking right away. - */ -- (instancetype)initWithWebView:(UIView *)webView - isVideo:(BOOL)isVideo - startTrackingImmediately:(BOOL)startTracking; - -@end - -#pragma mark - MPViewabilityAdapterForNativeVideoView - -@protocol MPViewabilityAdapterForNativeVideoView - -/** - Instantiate a viewability adapter for a native video view. - * @param nativeVideoView A view that is backed by `AVPlayerLayer`, or a superview of it - * @param startTracking Flag indicating that viewability tracking should start immediately. - */ -- (instancetype)initWithNativeVideoView:(UIView *)nativeVideoView startTrackingImmediately:(BOOL)startTracking; - -/** - * Track an `MPVideoEvent` event for a native video view. - * @param event The event to track. - * @param eventInfo For `MPVideoEventError`, it's a dictionary with "message" as key and an - * `NSString` for the message. It's nil for all other events. - */ -- (void)trackNativeVideoEvent:(MPVideoEvent)event eventInfo:(NSDictionary * _Nullable)eventInfo; - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MPViewabilityOption.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MPViewabilityOption.h deleted file mode 100644 index cf228b58d5..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MPViewabilityOption.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// MPViewabilityOption.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -/** - * Available viewability options - * @remark Any changes made to this bitmask should also be reflected in `MPViewabilityTracker` - * `+ (void)initialize` method. - */ -typedef NS_OPTIONS(NSInteger, MPViewabilityOption) { - MPViewabilityOptionNone = 0, - MPViewabilityOptionIAS = 1 << 0, - MPViewabilityOptionMoat = 1 << 1, - MPViewabilityOptionAll = ((MPViewabilityOptionMoat << 1) - 1) -}; diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MPViewabilityTracker.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MPViewabilityTracker.h deleted file mode 100644 index 39efcf227d..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MPViewabilityTracker.h +++ /dev/null @@ -1,98 +0,0 @@ -// -// MPViewabilityTracker.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPViewabilityOption.h" -#import "MPVASTTrackingEvent.h" - -NS_ASSUME_NONNULL_BEGIN - -@class MPWebView; - -/** - * Notification that is fired when at least one viewability vendor is disabled. - */ -extern NSString *const kDisableViewabilityTrackerNotification; - -/** - * Key for accessing the disabled viewability vendors bitmask in the `userInfo` of - * `kDisableViewabilityTrackerNotification`. - */ -extern NSString *const kDisabledViewabilityTrackers; - -/** - * Provides viewability tracking of an ad view. - * Tracking will automatically be stopped upon deallocation. - */ -@interface MPViewabilityTracker : NSObject - -/** - * Returns a bit mask indicating which viewability libraries are included and enabled. A value - * of `MPViewabilityOptionNone` represents that no viewability vendors are enabled or included. - */ -+ (MPViewabilityOption)enabledViewabilityVendors; - -/** - * Disables viewability tracking for the specified vendors for the duration of the session. - * @remark Viewability cannot be re-enabled for a vendor once it has been disabled. - * @param vendors Vendors to stop viewability tracking - */ -+ (void)disableViewability:(MPViewabilityOption)vendors; - -/** - * Initializes a viewability tracker that tracks ads rendered by a web view. - * @param webView The ad web view that should be tracked. - * @param isVideo Flag indicating that the ad being tracked is a video. - * @param startTracking Flag indicating that viewability tracking should start immediately. - * @return A viewability tracker instance. - */ -- (instancetype)initWithWebView:(MPWebView *)webView - isVideo:(BOOL)isVideo - startTrackingImmediately:(BOOL)startTracking NS_DESIGNATED_INITIALIZER; - -/** - Instantiate a viewability adapter for a native video view. - * @param nativeVideoView A view that is backed by `AVPlayerLayer`, or a superview of it - * @param startTracking Flag indicating that viewability tracking should start immediately. - */ -- (instancetype)initWithNativeVideoView:(UIView *)nativeVideoView - startTrackingImmediately:(BOOL)startTracking NS_DESIGNATED_INITIALIZER; - -/** - * Starts viewability tracking. This will do nothing if it is currently tracking. - */ -- (void)startTracking; - -/** - * Stops viewability tracking. This will do nothing if it is not currently tracking. - */ -- (void)stopTracking; - -/** - * Use this method to register views that appear over the web view but that are supposed to be present (e.g., - * interstitial close buttons) - * @param view The view obstructing the ad view - */ -- (void)registerFriendlyObstructionView:(UIView *)view; - -/** - * Track an `MPVideoEvent` event for a native video view. - * @param event The event to track. - * @param eventInfo For `MPVideoEventError`, it's a dictionary with "message" as key and an - * `NSString` for the message. It's nil for all other events. - */ -- (void)trackNativeVideoEvent:(MPVideoEvent)event eventInfo:(NSDictionary * _Nullable)eventInfo; - -/** - * `init` is not available. - */ -- (instancetype)init __attribute__((unavailable("init not available"))); - -@end - -NS_ASSUME_NONNULL_END diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MPViewabilityTracker.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MPViewabilityTracker.m deleted file mode 100644 index b3a69e635b..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MPViewabilityTracker.m +++ /dev/null @@ -1,259 +0,0 @@ -// -// MPViewabilityTracker.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MoPub.h" -#import "MPLogging.h" -#import "MPViewabilityAdapter.h" -#import "MPViewabilityTracker.h" -#import "MPWebView+Viewability.h" - -/** - * Macro that queries if a bitmask value is currently in the given bitmask - * Examples: - * bitmask = 0x0110 - * value_1 = 0x0001 - * value_2 = 0x0100 - * value_3 = 0x0111 - * - * OptionsHasValue(bitmask, value_1) // returns NO - * OptionsHasValue(bitmask, value_2) // returns YES - * OptionsHasValue(bitmask, value_3) // returns NO - */ -#define OptionsHasValue(options, value) (((options) & (value)) == (value)) - -static MPViewabilityOption sEnabledViewabilityVendors = 0; -static NSDictionary * sSupportedAdapters = nil; -NSString *const kDisableViewabilityTrackerNotification = @"com.mopub.mopub-ios-sdk.viewability.disabletracking"; -NSString *const kDisabledViewabilityTrackers = @"disableViewabilityTrackers"; - -@interface MPViewabilityTracker() -// Map of `MPViewabilityOption`: `id` -@property (nonatomic, strong) NSDictionary> * trackers; -@end - -@implementation MPViewabilityTracker - -+ (void)initialize { - if (self == [MPViewabilityTracker class]) { - // Initialize the current mapping of viewability vendors to their - // associated adapter class names. - // This map should be updated when there are changes to `MPViewabilityOption`. - sSupportedAdapters = @{ @(MPViewabilityOptionMoat): @"MPViewabilityAdapterMoat", - @(MPViewabilityOptionIAS): @"MPViewabilityAdapterAvid", - }; - - // Initial population of the enabled viewability vendors. - for (NSInteger index = 1; index < MPViewabilityOptionAll; index = index << 1) { - NSString * adapterClassName = sSupportedAdapters[@(index)]; - if (NSClassFromString(adapterClassName)) { - sEnabledViewabilityVendors |= index; - MPLogInfo(@"%@ was found.", adapterClassName); - } - } - } -} - -- (instancetype)initWithWebView:(MPWebView *)webView - isVideo:(BOOL)isVideo - startTrackingImmediately:(BOOL)startTracking { - if (self = [super init]) { - // While the viewability SDKs have features that allow the developer to pass in a container view, WKWebView is - // not always in MPWebView's view hierarchy. Pass in the contained web view to be safe, as we don't know for - // sure *how* or *when* MPWebView is traversed. - UIView *view = webView.containedWebView; - - // Invalid ad view - if (view == nil) { - MPLogInfo(@"nil ad view passed into %s", __PRETTY_FUNCTION__); - return nil; - } - - // Register handler for disabling of viewability tracking. - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onDisableViewabilityTrackingForNotification:) name:kDisableViewabilityTrackerNotification object:nil]; - - // Initialize all known and enabled viewability trackers. - NSMutableDictionary> * trackers = [NSMutableDictionary dictionary]; - for (NSInteger index = 1; index < MPViewabilityOptionAll; index = index << 1) { - NSString * className = sSupportedAdapters[@(index)]; - id tracker = [self initializeTrackerWithClassName:className - forViewabilityOption:index - withAdView:view - isVideo:isVideo - startTrackingImmediately:startTracking]; - if (tracker != nil) { - trackers[@(index)] = tracker; - } - } - - _trackers = trackers; - } - - return self; -} - -- (id)initializeTrackerWithClassName:(NSString *)className - forViewabilityOption:(MPViewabilityOption)option - withAdView:(UIView *)webView - isVideo:(BOOL)isVideo - startTrackingImmediately:(BOOL)startTracking { - // Ignore invalid options and empty class name - if (option == MPViewabilityOptionNone || option == MPViewabilityOptionAll || className.length == 0) { - return nil; - } - - // Check if the tracker class exists in the runtime and if it is enabled before - // attempting to initialize it. - Class adapterClass = NSClassFromString(className); - if (adapterClass - && [adapterClass conformsToProtocol:@protocol(MPViewabilityAdapterForWebView)] - && OptionsHasValue(sEnabledViewabilityVendors, option)) { - id tracker = [[adapterClass alloc] - initWithWebView:webView - isVideo:isVideo - startTrackingImmediately:startTracking]; - return tracker; - } - - return nil; -} - -- (instancetype)initWithNativeVideoView:(UIView *)nativeVideoView - startTrackingImmediately:(BOOL)startTracking { - if (self = [super init]) { - if (nativeVideoView == nil) { - MPLogInfo(@"nil ad view passed into %s", __PRETTY_FUNCTION__); - return nil; - } - - // Register handler for disabling of viewability tracking. - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(onDisableViewabilityTrackingForNotification:) - name:kDisableViewabilityTrackerNotification - object:nil]; - - // Initialize all known and enabled viewability trackers. - NSMutableDictionary> * trackers = [NSMutableDictionary dictionary]; - for (NSInteger index = 1; index < MPViewabilityOptionAll; index = index << 1) { - NSString *className = sSupportedAdapters[@(index)]; - id tracker = [self initializeTrackerWithClassName:className - forViewabilityOption:index - withNativeVideoView:nativeVideoView - startTrackingImmediately:startTracking]; - if (tracker != nil) { - trackers[@(index)] = tracker; - } - } - - _trackers = trackers; - } - - return self; -} - -- (id)initializeTrackerWithClassName:(NSString *)className - forViewabilityOption:(MPViewabilityOption)option - withNativeVideoView:(UIView *)nativeVideoView - startTrackingImmediately:(BOOL)startTracking { - // Ignore invalid options and empty class name - if (option == MPViewabilityOptionNone || option == MPViewabilityOptionAll || className.length == 0) { - return nil; - } - - // Check if the tracker class exists in the runtime and if it is enabled before init attempt - Class adapterClass = NSClassFromString(className); - if (adapterClass - && [adapterClass conformsToProtocol:@protocol(MPViewabilityAdapterForNativeVideoView)] - && OptionsHasValue(sEnabledViewabilityVendors, option)) { - id tracker = [[adapterClass alloc] - initWithNativeVideoView:nativeVideoView - startTrackingImmediately:startTracking]; - return tracker; - } - - return nil; -} - -- (void)dealloc { - [[NSNotificationCenter defaultCenter] removeObserver:self]; - [self stopTracking]; -} - -- (void)startTracking { - [self.trackers.allValues makeObjectsPerformSelector:@selector(startTracking)]; -} - -- (void)stopTracking:(MPViewabilityOption)vendors { - for (NSInteger index = 1; index < MPViewabilityOptionAll; index = index << 1) { - if (OptionsHasValue(vendors, index) && self.trackers[@(index)] != nil) { - id tracker = self.trackers[@(index)]; - [tracker stopTracking]; - } - } -} - -- (void)stopTracking { - [self stopTracking:MPViewabilityOptionAll]; -} - -- (void)registerFriendlyObstructionView:(UIView *)view { - [self.trackers.allValues makeObjectsPerformSelector:@selector(registerFriendlyObstructionView:) withObject:view]; -} - -- (void)trackNativeVideoEvent:(MPVideoEvent)event eventInfo:(NSDictionary *)eventInfo { - for (id tracker in self.trackers.allValues) { - if ([tracker conformsToProtocol:@protocol(MPViewabilityAdapterForNativeVideoView)]) { - [((id)tracker) trackNativeVideoEvent:event - eventInfo:eventInfo]; - } - } -} - -+ (MPViewabilityOption)enabledViewabilityVendors { - return sEnabledViewabilityVendors; -} - -+ (void)disableViewability:(MPViewabilityOption)vendors { - // Keep around the old viewability bitmask for comparing if the - // state has changed. - MPViewabilityOption oldEnabledVendors = sEnabledViewabilityVendors; - - // Disable specified vendors - for (NSInteger index = 1; index < MPViewabilityOptionAll; index = index << 1) { - if (OptionsHasValue(vendors, index)) { - sEnabledViewabilityVendors &= ~index; - } - } - - // Broadcast that some viewability tracking has been disabled. - if (vendors != MPViewabilityOptionNone && oldEnabledVendors != sEnabledViewabilityVendors) { - [[NSNotificationCenter defaultCenter] postNotificationName:kDisableViewabilityTrackerNotification object:nil userInfo:@{kDisabledViewabilityTrackers: @(vendors)}]; - } -} - -#pragma mark - Notification Handlers - -- (void)onDisableViewabilityTrackingForNotification:(NSNotification *)notification { - MPViewabilityOption disabledTrackers = MPViewabilityOptionNone; - if (notification.userInfo != nil && [notification.userInfo objectForKey:kDisabledViewabilityTrackers] != nil) { - disabledTrackers = (MPViewabilityOption)[[notification.userInfo objectForKey:kDisabledViewabilityTrackers] integerValue]; - } - - // Immediately stop all tracking for the disabled viewability vendors. - [self stopTracking:disabledTrackers]; - - // Remove the disabled trackers - NSMutableDictionary> * updatedTrackers = [self.trackers mutableCopy]; - for (NSInteger index = 1; index < MPViewabilityOptionAll; index = index << 1) { - if (OptionsHasValue(disabledTrackers, index) && self.trackers[@(index)] != nil) { - [updatedTrackers removeObjectForKey:@(index)]; - } - } - self.trackers = updatedTrackers; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MPWebView+Viewability.h b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MPWebView+Viewability.h deleted file mode 100644 index 2d2bc1a240..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MPWebView+Viewability.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// MPWebView+Viewability.h -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPWebView.h" - -@interface MPWebView (Viewability) - -/** - * Returns the @c WKWebView instance attached to this @c MPWebView. Exposed for the purpose of having - * a reliable way to attach viewability SDKs to a web view. - * - * Note: Please do not alter the hierarchy of this view (i.e., don't ever call it with `addSubview` or - * `removeFromSuperview`). Call those methods on the MPWebView instance instead. - */ -@property (nonatomic, readonly) UIView *containedWebView; - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MPWebView+Viewability.m b/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MPWebView+Viewability.m deleted file mode 100644 index 7079187723..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MPWebView+Viewability.m +++ /dev/null @@ -1,24 +0,0 @@ -// -// MPWebView+Viewability.m -// -// Copyright 2018-2020 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPWebView+Viewability.h" -#import - -@interface MPWebView () - -- (WKWebView *)wkWebView; - -@end - -@implementation MPWebView (Viewability) - -- (UIView *)containedWebView { - return self.wkWebView; -} - -@end diff --git a/iphone/Maps/Pods/mopub-ios-sdk/README.md b/iphone/Maps/Pods/mopub-ios-sdk/README.md deleted file mode 100644 index 84761eecbf..0000000000 --- a/iphone/Maps/Pods/mopub-ios-sdk/README.md +++ /dev/null @@ -1,124 +0,0 @@ -# MoPub iOS SDK - -Thanks for taking a look at MoPub! We take pride in having an easy-to-use, flexible monetization solution that works across multiple platforms. - -Sign up for an account at [http://app.mopub.com/](http://app.mopub.com/). - -## Need Help? - -You can find integration documentation on our [developer help site](https://developers.mopub.com/publishers/ios/get-started/). Additional documentation can be found [here](https://www.mopub.com/resources/docs). - -To file an issue with our team, email [support@mopub.com](mailto:support@mopub.com). - -## New Pull Requests? - -Thank you for submitting pull requests to the MoPub iOS GitHub repository. Our team regularly monitors and investigates all submissions for inclusion in our official SDK releases. Please note that MoPub does not directly merge these pull requests at this time. Please reach out to your account team or [support@mopub.com](mailto:support@mopub.com) if you have further questions. - -## Disclosure -MoPub SDK 4.16 and above integrates technology from our partners Integral Ad Science, Inc. (“IAS”) and Moat, Inc. (“Moat”) in order to support viewability measurement and other proprietary reporting that [IAS](https://integralads.com/capabilities/viewability/) and [Moat](https://moat.com/analytics) provide to their advertiser and publisher clients. You have the option to remove or disable this technology by following the opt-out instructions [below](#disableViewability). - -If you do not remove or disable IAS's and/or Moat’s technology in accordance with these instructions, you agree that IAS's [privacy policy](https://integralads.com/privacy-policy/) and [license](https://integralads.com/sdk-license-agreement) and Moat’s [privacy policy](https://moat.com/privacy), [terms](https://moat.com/terms), and [license](https://moat.com/sdklicense.txt), respectively, apply to your integration of these partners' technologies into your application. - -## Installation - -The MoPub SDK supports multiple methods for installing the library in a project. - -The current version of the SDK is 5.12.0 - -### Installation with CocoaPods - -[CocoaPods](https://cocoapods.org/) is a dependency manager for Swift and Objective-C Cocoa projects, which automates and simplifies the process of using 3rd-party libraries like the MoPub SDK in your projects. You can install it with the following command: - -``` -$ gem install cocoapods -``` - -**Podfile** -To integrate MoPub SDK into your Xcode project using CocoaPods, specify it in your Podfile: - -``` -source 'https://github.com/CocoaPods/Specs.git' -platform :ios, '9.0' -use_frameworks! - -target 'MyApp' do - pod 'mopub-ios-sdk', '~> 5.9' -end -``` - -Then, run the following command: - -``` -$ pod install -``` - -### Manual Integration with Dynamic Framework - -MoPub provides a prepackaged archive of the dynamic framework: - -- **[MoPub SDK Framework.zip](https://github.com/mopub/mopub-ios-sdk/releases/download/5.12.0/mopub-framework-5.12.0.zip)** - - Includes everything you need to serve HTML, MRAID, and Native MoPub advertisements. Third party ad networks are not included. - -Add the dynamic framework to the target's Embedded Binaries section of the General tab. - -### Manual Integration with Source Code - -MoPub provides two prepackaged archives of source code: - -- **[MoPub Base SDK.zip](https://github.com/mopub/mopub-ios-sdk/releases/download/5.12.0/mopub-base-5.12.0.zip)** - - Includes everything you need to serve HTML, MRAID, and Native MoPub advertisements. Third party ad networks are not included. - -- **[MoPub Base SDK Excluding Native.zip](https://github.com/mopub/mopub-ios-sdk/releases/download/5.12.0/mopub-nonnative-5.12.0.zip)** - - Includes everything you need to serve HTML and MRAID advertisements. Third party ad networks and Native MoPub advertisements are not included. - -## Integrate - -Integration instructions are available on the [wiki](https://github.com/mopub/mopub-ios-sdk/wiki/Getting-Started). - -## New in this Version - -Please view the [changelog](https://github.com/mopub/mopub-ios-sdk/blob/master/CHANGELOG.md) for details. - -- **Features** - - Location setters for all formats are marked deprecated and will be removed in a future release. - - Added Mintegral as a supported network. - - A new field `appVersion` has been added to `MPImpressionData`. - - Update the Sample app to 64-bit architectures only. - - Added ad load history to the Saved Ads section in the Sample app. - -- **Bug Fixes** - - Fixed potential multithreading crash in `MPAdServerURLBuilder`. - -See the [Getting Started Guide](https://github.com/mopub/mopub-ios-sdk/wiki/Getting-Started#app-transport-security-settings) for instructions on setting up ATS in your app. - -## Upgrading to SDK 5.0 - -Please see the [Getting Started Guide](https://developers.mopub.com/docs/ios/getting-started/) for instructions on upgrading from SDK 4.X to SDK 5.0. - -For GDPR-specific upgrading instructions, also see the [GDPR Integration Guide](https://developers.mopub.com/docs/publisher/gdpr). - -### Disabling Viewability Measurement -There are a few options for opting out of viewability measurement: -##### Opting Out in a Manual Integration -Before dragging the MoPubSDK folder into your Xcode project, simply delete the “Moat” folder to opt out of Moat or the “Avid” folder to opt out of IAS in MoPubSDK/Viewability/. If you would like to opt out of both, delete both folders. -##### Opting Out in a CocoaPods Integration -Including `pod 'mopub-ios-sdk'` in your Podfile will include both IAS and Moat SDKs, as well as the MoPub SDK. In order to opt out: -- `pod 'mopub-ios-sdk/Avid'` will include the IAS SDK, but not the Moat SDK, as well as the MoPub SDK. -- `pod 'mopub-ios-sdk/Moat'` will include the Moat SDK, but not the IAS SDK, as well as the MoPub SDK. -- `pod 'mopub-ios-sdk/Core'` will only include the MoPub SDK, with viewability measurement totally disabled. - -Make sure to run `pod update` once your Podfile is set up to your preferences. -##### Software Disable -If you would like to opt out of viewability measurement but do not want to modify the MoPub SDK, a function is provided for your convenience. As soon as possible after calling `- (void)initializeSdkWithConfiguration:completion:`, call `[[MoPub sharedInstance] disableViewability:(vendors)]`. In place of “(vendors)”, `MPViewabilityOptionIAS` will disable IAS but leave Moat enabled, `MPViewabilityOptionMoat` will disable Moat but leave IAS enabled, and `MPViewabilityOptionAll` will disable all viewability measurement. - -## Requirements - -- iOS 9.0 and up -- Xcode 11.0 and up - -## License - -We have launched a new license as of version 3.2.0. To view the full license, visit [http://www.mopub.com/legal/sdk-license-agreement/](http://www.mopub.com/legal/sdk-license-agreement/) diff --git a/iphone/Maps/Pods/nanopb/LICENSE.txt b/iphone/Maps/Pods/nanopb/LICENSE.txt deleted file mode 100644 index d11c9af1d7..0000000000 --- a/iphone/Maps/Pods/nanopb/LICENSE.txt +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (c) 2011 Petteri Aimonen - -This software is provided 'as-is', without any express or -implied warranty. In no event will the authors be held liable -for any damages arising from the use of this software. - -Permission is granted to anyone to use this software for any -purpose, including commercial applications, and to alter it and -redistribute it freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you - must not claim that you wrote the original software. If you use - this software in a product, an acknowledgment in the product - documentation would be appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and - must not be misrepresented as being the original software. - -3. This notice may not be removed or altered from any source - distribution. diff --git a/iphone/Maps/Pods/nanopb/README.md b/iphone/Maps/Pods/nanopb/README.md deleted file mode 100644 index 1a73cdda77..0000000000 --- a/iphone/Maps/Pods/nanopb/README.md +++ /dev/null @@ -1,71 +0,0 @@ -Nanopb - Protocol Buffers for Embedded Systems -============================================== - -[![Build Status](https://travis-ci.org/nanopb/nanopb.svg?branch=master)](https://travis-ci.org/nanopb/nanopb) - -Nanopb is a small code-size Protocol Buffers implementation in ansi C. It is -especially suitable for use in microcontrollers, but fits any memory -restricted system. - -* **Homepage:** https://jpa.kapsi.fi/nanopb/ -* **Documentation:** https://jpa.kapsi.fi/nanopb/docs/ -* **Downloads:** https://jpa.kapsi.fi/nanopb/download/ -* **Forum:** https://groups.google.com/forum/#!forum/nanopb - - - -Using the nanopb library ------------------------- -To use the nanopb library, you need to do two things: - -1. Compile your .proto files for nanopb, using `protoc`. -2. Include *pb_encode.c*, *pb_decode.c* and *pb_common.c* in your project. - -The easiest way to get started is to study the project in "examples/simple". -It contains a Makefile, which should work directly under most Linux systems. -However, for any other kind of build system, see the manual steps in -README.txt in that folder. - - - -Using the Protocol Buffers compiler (protoc) --------------------------------------------- -The nanopb generator is implemented as a plugin for the Google's own `protoc` -compiler. This has the advantage that there is no need to reimplement the -basic parsing of .proto files. However, it does mean that you need the -Google's protobuf library in order to run the generator. - -If you have downloaded a binary package for nanopb (either Windows, Linux or -Mac OS X version), the `protoc` binary is included in the 'generator-bin' -folder. In this case, you are ready to go. Simply run this command: - - generator-bin/protoc --nanopb_out=. myprotocol.proto - -However, if you are using a git checkout or a plain source distribution, you -need to provide your own version of `protoc` and the Google's protobuf library. -On Linux, the necessary packages are `protobuf-compiler` and `python-protobuf`. -On Windows, you can either build Google's protobuf library from source or use -one of the binary distributions of it. In either case, if you use a separate -`protoc`, you need to manually give the path to nanopb generator: - - protoc --plugin=protoc-gen-nanopb=nanopb/generator/protoc-gen-nanopb ... - - - -Running the tests ------------------ -If you want to perform further development of the nanopb core, or to verify -its functionality using your compiler and platform, you'll want to run the -test suite. The build rules for the test suite are implemented using Scons, -so you need to have that installed (ex: `sudo apt install scons` on Ubuntu). To run the tests: - - cd tests - scons - -This will show the progress of various test cases. If the output does not -end in an error, the test cases were successful. - -Note: Mac OS X by default aliases 'clang' as 'gcc', while not actually -supporting the same command line options as gcc does. To run tests on -Mac OS X, use: "scons CC=clang CXX=clang". Same way can be used to run -tests with different compilers on any platform. diff --git a/iphone/Maps/Pods/nanopb/pb.h b/iphone/Maps/Pods/nanopb/pb.h deleted file mode 100644 index 2c5868b27a..0000000000 --- a/iphone/Maps/Pods/nanopb/pb.h +++ /dev/null @@ -1,599 +0,0 @@ -/* Common parts of the nanopb library. Most of these are quite low-level - * stuff. For the high-level interface, see pb_encode.h and pb_decode.h. - */ - -#ifndef PB_H_INCLUDED -#define PB_H_INCLUDED - -/***************************************************************** - * Nanopb compilation time options. You can change these here by * - * uncommenting the lines, or on the compiler command line. * - *****************************************************************/ - -/* Enable support for dynamically allocated fields */ -/* #define PB_ENABLE_MALLOC 1 */ - -/* Define this if your CPU / compiler combination does not support - * unaligned memory access to packed structures. */ -/* #define PB_NO_PACKED_STRUCTS 1 */ - -/* Increase the number of required fields that are tracked. - * A compiler warning will tell if you need this. */ -/* #define PB_MAX_REQUIRED_FIELDS 256 */ - -/* Add support for tag numbers > 255 and fields larger than 255 bytes. */ -/* #define PB_FIELD_16BIT 1 */ - -/* Add support for tag numbers > 65536 and fields larger than 65536 bytes. */ -/* #define PB_FIELD_32BIT 1 */ - -/* Disable support for error messages in order to save some code space. */ -/* #define PB_NO_ERRMSG 1 */ - -/* Disable support for custom streams (support only memory buffers). */ -/* #define PB_BUFFER_ONLY 1 */ - -/* Switch back to the old-style callback function signature. - * This was the default until nanopb-0.2.1. */ -/* #define PB_OLD_CALLBACK_STYLE */ - - -/* Don't encode scalar arrays as packed. This is only to be used when - * the decoder on the receiving side cannot process packed scalar arrays. - * Such example is older protobuf.js. */ -/* #define PB_ENCODE_ARRAYS_UNPACKED 1 */ - -/****************************************************************** - * You usually don't need to change anything below this line. * - * Feel free to look around and use the defined macros, though. * - ******************************************************************/ - - -/* Version of the nanopb library. Just in case you want to check it in - * your own program. */ -#define NANOPB_VERSION nanopb-0.3.9.5 - -/* Include all the system headers needed by nanopb. You will need the - * definitions of the following: - * - strlen, memcpy, memset functions - * - [u]int_least8_t, uint_fast8_t, [u]int_least16_t, [u]int32_t, [u]int64_t - * - size_t - * - bool - * - * If you don't have the standard header files, you can instead provide - * a custom header that defines or includes all this. In that case, - * define PB_SYSTEM_HEADER to the path of this file. - */ -#ifdef PB_SYSTEM_HEADER -#include PB_SYSTEM_HEADER -#else -#include -#include -#include -#include - -#ifdef PB_ENABLE_MALLOC -#include -#endif -#endif - -/* Macro for defining packed structures (compiler dependent). - * This just reduces memory requirements, but is not required. - */ -#if defined(PB_NO_PACKED_STRUCTS) - /* Disable struct packing */ -# define PB_PACKED_STRUCT_START -# define PB_PACKED_STRUCT_END -# define pb_packed -#elif defined(__GNUC__) || defined(__clang__) - /* For GCC and clang */ -# define PB_PACKED_STRUCT_START -# define PB_PACKED_STRUCT_END -# define pb_packed __attribute__((packed)) -#elif defined(__ICCARM__) || defined(__CC_ARM) - /* For IAR ARM and Keil MDK-ARM compilers */ -# define PB_PACKED_STRUCT_START _Pragma("pack(push, 1)") -# define PB_PACKED_STRUCT_END _Pragma("pack(pop)") -# define pb_packed -#elif defined(_MSC_VER) && (_MSC_VER >= 1500) - /* For Microsoft Visual C++ */ -# define PB_PACKED_STRUCT_START __pragma(pack(push, 1)) -# define PB_PACKED_STRUCT_END __pragma(pack(pop)) -# define pb_packed -#else - /* Unknown compiler */ -# define PB_PACKED_STRUCT_START -# define PB_PACKED_STRUCT_END -# define pb_packed -#endif - -/* Handly macro for suppressing unreferenced-parameter compiler warnings. */ -#ifndef PB_UNUSED -#define PB_UNUSED(x) (void)(x) -#endif - -/* Compile-time assertion, used for checking compatible compilation options. - * If this does not work properly on your compiler, use - * #define PB_NO_STATIC_ASSERT to disable it. - * - * But before doing that, check carefully the error message / place where it - * comes from to see if the error has a real cause. Unfortunately the error - * message is not always very clear to read, but you can see the reason better - * in the place where the PB_STATIC_ASSERT macro was called. - */ -#ifndef PB_NO_STATIC_ASSERT -#ifndef PB_STATIC_ASSERT -#define PB_STATIC_ASSERT(COND,MSG) typedef char PB_STATIC_ASSERT_MSG(MSG, __LINE__, __COUNTER__)[(COND)?1:-1]; -#define PB_STATIC_ASSERT_MSG(MSG, LINE, COUNTER) PB_STATIC_ASSERT_MSG_(MSG, LINE, COUNTER) -#define PB_STATIC_ASSERT_MSG_(MSG, LINE, COUNTER) pb_static_assertion_##MSG##LINE##COUNTER -#endif -#else -#define PB_STATIC_ASSERT(COND,MSG) -#endif - -/* Number of required fields to keep track of. */ -#ifndef PB_MAX_REQUIRED_FIELDS -#define PB_MAX_REQUIRED_FIELDS 64 -#endif - -#if PB_MAX_REQUIRED_FIELDS < 64 -#error You should not lower PB_MAX_REQUIRED_FIELDS from the default value (64). -#endif - -/* List of possible field types. These are used in the autogenerated code. - * Least-significant 4 bits tell the scalar type - * Most-significant 4 bits specify repeated/required/packed etc. - */ - -typedef uint_least8_t pb_type_t; - -/**** Field data types ****/ - -/* Numeric types */ -#define PB_LTYPE_BOOL 0x00 /* bool */ -#define PB_LTYPE_VARINT 0x01 /* int32, int64, enum, bool */ -#define PB_LTYPE_UVARINT 0x02 /* uint32, uint64 */ -#define PB_LTYPE_SVARINT 0x03 /* sint32, sint64 */ -#define PB_LTYPE_FIXED32 0x04 /* fixed32, sfixed32, float */ -#define PB_LTYPE_FIXED64 0x05 /* fixed64, sfixed64, double */ - -/* Marker for last packable field type. */ -#define PB_LTYPE_LAST_PACKABLE 0x05 - -/* Byte array with pre-allocated buffer. - * data_size is the length of the allocated PB_BYTES_ARRAY structure. */ -#define PB_LTYPE_BYTES 0x06 - -/* String with pre-allocated buffer. - * data_size is the maximum length. */ -#define PB_LTYPE_STRING 0x07 - -/* Submessage - * submsg_fields is pointer to field descriptions */ -#define PB_LTYPE_SUBMESSAGE 0x08 - -/* Extension pseudo-field - * The field contains a pointer to pb_extension_t */ -#define PB_LTYPE_EXTENSION 0x09 - -/* Byte array with inline, pre-allocated byffer. - * data_size is the length of the inline, allocated buffer. - * This differs from PB_LTYPE_BYTES by defining the element as - * pb_byte_t[data_size] rather than pb_bytes_array_t. */ -#define PB_LTYPE_FIXED_LENGTH_BYTES 0x0A - -/* Number of declared LTYPES */ -#define PB_LTYPES_COUNT 0x0B -#define PB_LTYPE_MASK 0x0F - -/**** Field repetition rules ****/ - -#define PB_HTYPE_REQUIRED 0x00 -#define PB_HTYPE_OPTIONAL 0x10 -#define PB_HTYPE_REPEATED 0x20 -#define PB_HTYPE_ONEOF 0x30 -#define PB_HTYPE_MASK 0x30 - -/**** Field allocation types ****/ - -#define PB_ATYPE_STATIC 0x00 -#define PB_ATYPE_POINTER 0x80 -#define PB_ATYPE_CALLBACK 0x40 -#define PB_ATYPE_MASK 0xC0 - -#define PB_ATYPE(x) ((x) & PB_ATYPE_MASK) -#define PB_HTYPE(x) ((x) & PB_HTYPE_MASK) -#define PB_LTYPE(x) ((x) & PB_LTYPE_MASK) - -/* Data type used for storing sizes of struct fields - * and array counts. - */ -#if defined(PB_FIELD_32BIT) - typedef uint32_t pb_size_t; - typedef int32_t pb_ssize_t; -#elif defined(PB_FIELD_16BIT) - typedef uint_least16_t pb_size_t; - typedef int_least16_t pb_ssize_t; -#else - typedef uint_least8_t pb_size_t; - typedef int_least8_t pb_ssize_t; -#endif -#define PB_SIZE_MAX ((pb_size_t)-1) - -/* Data type for storing encoded data and other byte streams. - * This typedef exists to support platforms where uint8_t does not exist. - * You can regard it as equivalent on uint8_t on other platforms. - */ -typedef uint_least8_t pb_byte_t; - -/* This structure is used in auto-generated constants - * to specify struct fields. - * You can change field sizes if you need structures - * larger than 256 bytes or field tags larger than 256. - * The compiler should complain if your .proto has such - * structures. Fix that by defining PB_FIELD_16BIT or - * PB_FIELD_32BIT. - */ -PB_PACKED_STRUCT_START -typedef struct pb_field_s pb_field_t; -struct pb_field_s { - pb_size_t tag; - pb_type_t type; - pb_size_t data_offset; /* Offset of field data, relative to previous field. */ - pb_ssize_t size_offset; /* Offset of array size or has-boolean, relative to data */ - pb_size_t data_size; /* Data size in bytes for a single item */ - pb_size_t array_size; /* Maximum number of entries in array */ - - /* Field definitions for submessage - * OR default value for all other non-array, non-callback types - * If null, then field will zeroed. */ - const void *ptr; -} pb_packed; -PB_PACKED_STRUCT_END - -/* Make sure that the standard integer types are of the expected sizes. - * Otherwise fixed32/fixed64 fields can break. - * - * If you get errors here, it probably means that your stdint.h is not - * correct for your platform. - */ -#ifndef PB_WITHOUT_64BIT -PB_STATIC_ASSERT(sizeof(int64_t) == 2 * sizeof(int32_t), INT64_T_WRONG_SIZE) -PB_STATIC_ASSERT(sizeof(uint64_t) == 2 * sizeof(uint32_t), UINT64_T_WRONG_SIZE) -#endif - -/* This structure is used for 'bytes' arrays. - * It has the number of bytes in the beginning, and after that an array. - * Note that actual structs used will have a different length of bytes array. - */ -#define PB_BYTES_ARRAY_T(n) struct { pb_size_t size; pb_byte_t bytes[n]; } -#define PB_BYTES_ARRAY_T_ALLOCSIZE(n) ((size_t)n + offsetof(pb_bytes_array_t, bytes)) - -struct pb_bytes_array_s { - pb_size_t size; - pb_byte_t bytes[1]; -}; -typedef struct pb_bytes_array_s pb_bytes_array_t; - -/* This structure is used for giving the callback function. - * It is stored in the message structure and filled in by the method that - * calls pb_decode. - * - * The decoding callback will be given a limited-length stream - * If the wire type was string, the length is the length of the string. - * If the wire type was a varint/fixed32/fixed64, the length is the length - * of the actual value. - * The function may be called multiple times (especially for repeated types, - * but also otherwise if the message happens to contain the field multiple - * times.) - * - * The encoding callback will receive the actual output stream. - * It should write all the data in one call, including the field tag and - * wire type. It can write multiple fields. - * - * The callback can be null if you want to skip a field. - */ -typedef struct pb_istream_s pb_istream_t; -typedef struct pb_ostream_s pb_ostream_t; -typedef struct pb_callback_s pb_callback_t; -struct pb_callback_s { -#ifdef PB_OLD_CALLBACK_STYLE - /* Deprecated since nanopb-0.2.1 */ - union { - bool (*decode)(pb_istream_t *stream, const pb_field_t *field, void *arg); - bool (*encode)(pb_ostream_t *stream, const pb_field_t *field, const void *arg); - } funcs; -#else - /* New function signature, which allows modifying arg contents in callback. */ - union { - bool (*decode)(pb_istream_t *stream, const pb_field_t *field, void **arg); - bool (*encode)(pb_ostream_t *stream, const pb_field_t *field, void * const *arg); - } funcs; -#endif - - /* Free arg for use by callback */ - void *arg; -}; - -/* Wire types. Library user needs these only in encoder callbacks. */ -typedef enum { - PB_WT_VARINT = 0, - PB_WT_64BIT = 1, - PB_WT_STRING = 2, - PB_WT_32BIT = 5 -} pb_wire_type_t; - -/* Structure for defining the handling of unknown/extension fields. - * Usually the pb_extension_type_t structure is automatically generated, - * while the pb_extension_t structure is created by the user. However, - * if you want to catch all unknown fields, you can also create a custom - * pb_extension_type_t with your own callback. - */ -typedef struct pb_extension_type_s pb_extension_type_t; -typedef struct pb_extension_s pb_extension_t; -struct pb_extension_type_s { - /* Called for each unknown field in the message. - * If you handle the field, read off all of its data and return true. - * If you do not handle the field, do not read anything and return true. - * If you run into an error, return false. - * Set to NULL for default handler. - */ - bool (*decode)(pb_istream_t *stream, pb_extension_t *extension, - uint32_t tag, pb_wire_type_t wire_type); - - /* Called once after all regular fields have been encoded. - * If you have something to write, do so and return true. - * If you do not have anything to write, just return true. - * If you run into an error, return false. - * Set to NULL for default handler. - */ - bool (*encode)(pb_ostream_t *stream, const pb_extension_t *extension); - - /* Free field for use by the callback. */ - const void *arg; -}; - -struct pb_extension_s { - /* Type describing the extension field. Usually you'll initialize - * this to a pointer to the automatically generated structure. */ - const pb_extension_type_t *type; - - /* Destination for the decoded data. This must match the datatype - * of the extension field. */ - void *dest; - - /* Pointer to the next extension handler, or NULL. - * If this extension does not match a field, the next handler is - * automatically called. */ - pb_extension_t *next; - - /* The decoder sets this to true if the extension was found. - * Ignored for encoding. */ - bool found; -}; - -/* Memory allocation functions to use. You can define pb_realloc and - * pb_free to custom functions if you want. */ -#ifdef PB_ENABLE_MALLOC -# ifndef pb_realloc -# define pb_realloc(ptr, size) realloc(ptr, size) -# endif -# ifndef pb_free -# define pb_free(ptr) free(ptr) -# endif -#endif - -/* This is used to inform about need to regenerate .pb.h/.pb.c files. */ -#define PB_PROTO_HEADER_VERSION 30 - -/* These macros are used to declare pb_field_t's in the constant array. */ -/* Size of a structure member, in bytes. */ -#define pb_membersize(st, m) (sizeof ((st*)0)->m) -/* Number of entries in an array. */ -#define pb_arraysize(st, m) (pb_membersize(st, m) / pb_membersize(st, m[0])) -/* Delta from start of one member to the start of another member. */ -#define pb_delta(st, m1, m2) ((int)offsetof(st, m1) - (int)offsetof(st, m2)) -/* Marks the end of the field list */ -#define PB_LAST_FIELD {0,(pb_type_t) 0,0,0,0,0,0} - -/* Macros for filling in the data_offset field */ -/* data_offset for first field in a message */ -#define PB_DATAOFFSET_FIRST(st, m1, m2) (offsetof(st, m1)) -/* data_offset for subsequent fields */ -#define PB_DATAOFFSET_OTHER(st, m1, m2) (offsetof(st, m1) - offsetof(st, m2) - pb_membersize(st, m2)) -/* data offset for subsequent fields inside an union (oneof) */ -#define PB_DATAOFFSET_UNION(st, m1, m2) (PB_SIZE_MAX) -/* Choose first/other based on m1 == m2 (deprecated, remains for backwards compatibility) */ -#define PB_DATAOFFSET_CHOOSE(st, m1, m2) (int)(offsetof(st, m1) == offsetof(st, m2) \ - ? PB_DATAOFFSET_FIRST(st, m1, m2) \ - : PB_DATAOFFSET_OTHER(st, m1, m2)) - -/* Required fields are the simplest. They just have delta (padding) from - * previous field end, and the size of the field. Pointer is used for - * submessages and default values. - */ -#define PB_REQUIRED_STATIC(tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_STATIC | PB_HTYPE_REQUIRED | ltype, \ - fd, 0, pb_membersize(st, m), 0, ptr} - -/* Optional fields add the delta to the has_ variable. */ -#define PB_OPTIONAL_STATIC(tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_STATIC | PB_HTYPE_OPTIONAL | ltype, \ - fd, \ - pb_delta(st, has_ ## m, m), \ - pb_membersize(st, m), 0, ptr} - -#define PB_SINGULAR_STATIC(tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_STATIC | PB_HTYPE_OPTIONAL | ltype, \ - fd, 0, pb_membersize(st, m), 0, ptr} - -/* Repeated fields have a _count field and also the maximum number of entries. */ -#define PB_REPEATED_STATIC(tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_STATIC | PB_HTYPE_REPEATED | ltype, \ - fd, \ - pb_delta(st, m ## _count, m), \ - pb_membersize(st, m[0]), \ - pb_arraysize(st, m), ptr} - -/* Allocated fields carry the size of the actual data, not the pointer */ -#define PB_REQUIRED_POINTER(tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_POINTER | PB_HTYPE_REQUIRED | ltype, \ - fd, 0, pb_membersize(st, m[0]), 0, ptr} - -/* Optional fields don't need a has_ variable, as information would be redundant */ -#define PB_OPTIONAL_POINTER(tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_POINTER | PB_HTYPE_OPTIONAL | ltype, \ - fd, 0, pb_membersize(st, m[0]), 0, ptr} - -/* Same as optional fields*/ -#define PB_SINGULAR_POINTER(tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_POINTER | PB_HTYPE_OPTIONAL | ltype, \ - fd, 0, pb_membersize(st, m[0]), 0, ptr} - -/* Repeated fields have a _count field and a pointer to array of pointers */ -#define PB_REPEATED_POINTER(tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_POINTER | PB_HTYPE_REPEATED | ltype, \ - fd, pb_delta(st, m ## _count, m), \ - pb_membersize(st, m[0]), 0, ptr} - -/* Callbacks are much like required fields except with special datatype. */ -#define PB_REQUIRED_CALLBACK(tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_CALLBACK | PB_HTYPE_REQUIRED | ltype, \ - fd, 0, pb_membersize(st, m), 0, ptr} - -#define PB_OPTIONAL_CALLBACK(tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_CALLBACK | PB_HTYPE_OPTIONAL | ltype, \ - fd, 0, pb_membersize(st, m), 0, ptr} - -#define PB_SINGULAR_CALLBACK(tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_CALLBACK | PB_HTYPE_OPTIONAL | ltype, \ - fd, 0, pb_membersize(st, m), 0, ptr} - -#define PB_REPEATED_CALLBACK(tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_CALLBACK | PB_HTYPE_REPEATED | ltype, \ - fd, 0, pb_membersize(st, m), 0, ptr} - -/* Optional extensions don't have the has_ field, as that would be redundant. - * Furthermore, the combination of OPTIONAL without has_ field is used - * for indicating proto3 style fields. Extensions exist in proto2 mode only, - * so they should be encoded according to proto2 rules. To avoid the conflict, - * extensions are marked as REQUIRED instead. - */ -#define PB_OPTEXT_STATIC(tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_STATIC | PB_HTYPE_REQUIRED | ltype, \ - 0, \ - 0, \ - pb_membersize(st, m), 0, ptr} - -#define PB_OPTEXT_POINTER(tag, st, m, fd, ltype, ptr) \ - PB_OPTIONAL_POINTER(tag, st, m, fd, ltype, ptr) - -#define PB_OPTEXT_CALLBACK(tag, st, m, fd, ltype, ptr) \ - PB_OPTIONAL_CALLBACK(tag, st, m, fd, ltype, ptr) - -/* The mapping from protobuf types to LTYPEs is done using these macros. */ -#define PB_LTYPE_MAP_BOOL PB_LTYPE_BOOL -#define PB_LTYPE_MAP_BYTES PB_LTYPE_BYTES -#define PB_LTYPE_MAP_DOUBLE PB_LTYPE_FIXED64 -#define PB_LTYPE_MAP_ENUM PB_LTYPE_VARINT -#define PB_LTYPE_MAP_UENUM PB_LTYPE_UVARINT -#define PB_LTYPE_MAP_FIXED32 PB_LTYPE_FIXED32 -#define PB_LTYPE_MAP_FIXED64 PB_LTYPE_FIXED64 -#define PB_LTYPE_MAP_FLOAT PB_LTYPE_FIXED32 -#define PB_LTYPE_MAP_INT32 PB_LTYPE_VARINT -#define PB_LTYPE_MAP_INT64 PB_LTYPE_VARINT -#define PB_LTYPE_MAP_MESSAGE PB_LTYPE_SUBMESSAGE -#define PB_LTYPE_MAP_SFIXED32 PB_LTYPE_FIXED32 -#define PB_LTYPE_MAP_SFIXED64 PB_LTYPE_FIXED64 -#define PB_LTYPE_MAP_SINT32 PB_LTYPE_SVARINT -#define PB_LTYPE_MAP_SINT64 PB_LTYPE_SVARINT -#define PB_LTYPE_MAP_STRING PB_LTYPE_STRING -#define PB_LTYPE_MAP_UINT32 PB_LTYPE_UVARINT -#define PB_LTYPE_MAP_UINT64 PB_LTYPE_UVARINT -#define PB_LTYPE_MAP_EXTENSION PB_LTYPE_EXTENSION -#define PB_LTYPE_MAP_FIXED_LENGTH_BYTES PB_LTYPE_FIXED_LENGTH_BYTES - -/* This is the actual macro used in field descriptions. - * It takes these arguments: - * - Field tag number - * - Field type: BOOL, BYTES, DOUBLE, ENUM, UENUM, FIXED32, FIXED64, - * FLOAT, INT32, INT64, MESSAGE, SFIXED32, SFIXED64 - * SINT32, SINT64, STRING, UINT32, UINT64 or EXTENSION - * - Field rules: REQUIRED, OPTIONAL or REPEATED - * - Allocation: STATIC, CALLBACK or POINTER - * - Placement: FIRST or OTHER, depending on if this is the first field in structure. - * - Message name - * - Field name - * - Previous field name (or field name again for first field) - * - Pointer to default value or submsg fields. - */ - -#define PB_FIELD(tag, type, rules, allocation, placement, message, field, prevfield, ptr) \ - PB_ ## rules ## _ ## allocation(tag, message, field, \ - PB_DATAOFFSET_ ## placement(message, field, prevfield), \ - PB_LTYPE_MAP_ ## type, ptr) - -/* Field description for repeated static fixed count fields.*/ -#define PB_REPEATED_FIXED_COUNT(tag, type, placement, message, field, prevfield, ptr) \ - {tag, PB_ATYPE_STATIC | PB_HTYPE_REPEATED | PB_LTYPE_MAP_ ## type, \ - PB_DATAOFFSET_ ## placement(message, field, prevfield), \ - 0, \ - pb_membersize(message, field[0]), \ - pb_arraysize(message, field), ptr} - -/* Field description for oneof fields. This requires taking into account the - * union name also, that's why a separate set of macros is needed. - */ -#define PB_ONEOF_STATIC(u, tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_STATIC | PB_HTYPE_ONEOF | ltype, \ - fd, pb_delta(st, which_ ## u, u.m), \ - pb_membersize(st, u.m), 0, ptr} - -#define PB_ONEOF_POINTER(u, tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_POINTER | PB_HTYPE_ONEOF | ltype, \ - fd, pb_delta(st, which_ ## u, u.m), \ - pb_membersize(st, u.m[0]), 0, ptr} - -#define PB_ONEOF_FIELD(union_name, tag, type, rules, allocation, placement, message, field, prevfield, ptr) \ - PB_ONEOF_ ## allocation(union_name, tag, message, field, \ - PB_DATAOFFSET_ ## placement(message, union_name.field, prevfield), \ - PB_LTYPE_MAP_ ## type, ptr) - -#define PB_ANONYMOUS_ONEOF_STATIC(u, tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_STATIC | PB_HTYPE_ONEOF | ltype, \ - fd, pb_delta(st, which_ ## u, m), \ - pb_membersize(st, m), 0, ptr} - -#define PB_ANONYMOUS_ONEOF_POINTER(u, tag, st, m, fd, ltype, ptr) \ - {tag, PB_ATYPE_POINTER | PB_HTYPE_ONEOF | ltype, \ - fd, pb_delta(st, which_ ## u, m), \ - pb_membersize(st, m[0]), 0, ptr} - -#define PB_ANONYMOUS_ONEOF_FIELD(union_name, tag, type, rules, allocation, placement, message, field, prevfield, ptr) \ - PB_ANONYMOUS_ONEOF_ ## allocation(union_name, tag, message, field, \ - PB_DATAOFFSET_ ## placement(message, field, prevfield), \ - PB_LTYPE_MAP_ ## type, ptr) - -/* These macros are used for giving out error messages. - * They are mostly a debugging aid; the main error information - * is the true/false return value from functions. - * Some code space can be saved by disabling the error - * messages if not used. - * - * PB_SET_ERROR() sets the error message if none has been set yet. - * msg must be a constant string literal. - * PB_GET_ERROR() always returns a pointer to a string. - * PB_RETURN_ERROR() sets the error and returns false from current - * function. - */ -#ifdef PB_NO_ERRMSG -#define PB_SET_ERROR(stream, msg) PB_UNUSED(stream) -#define PB_GET_ERROR(stream) "(errmsg disabled)" -#else -#define PB_SET_ERROR(stream, msg) (stream->errmsg = (stream)->errmsg ? (stream)->errmsg : (msg)) -#define PB_GET_ERROR(stream) ((stream)->errmsg ? (stream)->errmsg : "(none)") -#endif - -#define PB_RETURN_ERROR(stream, msg) return PB_SET_ERROR(stream, msg), false - -#endif diff --git a/iphone/Maps/Pods/nanopb/pb_common.c b/iphone/Maps/Pods/nanopb/pb_common.c deleted file mode 100644 index 4fb7186b73..0000000000 --- a/iphone/Maps/Pods/nanopb/pb_common.c +++ /dev/null @@ -1,97 +0,0 @@ -/* pb_common.c: Common support functions for pb_encode.c and pb_decode.c. - * - * 2014 Petteri Aimonen - */ - -#include "pb_common.h" - -bool pb_field_iter_begin(pb_field_iter_t *iter, const pb_field_t *fields, void *dest_struct) -{ - iter->start = fields; - iter->pos = fields; - iter->required_field_index = 0; - iter->dest_struct = dest_struct; - iter->pData = (char*)dest_struct + iter->pos->data_offset; - iter->pSize = (char*)iter->pData + iter->pos->size_offset; - - return (iter->pos->tag != 0); -} - -bool pb_field_iter_next(pb_field_iter_t *iter) -{ - const pb_field_t *prev_field = iter->pos; - - if (prev_field->tag == 0) - { - /* Handle empty message types, where the first field is already the terminator. - * In other cases, the iter->pos never points to the terminator. */ - return false; - } - - iter->pos++; - - if (iter->pos->tag == 0) - { - /* Wrapped back to beginning, reinitialize */ - (void)pb_field_iter_begin(iter, iter->start, iter->dest_struct); - return false; - } - else - { - /* Increment the pointers based on previous field size */ - size_t prev_size = prev_field->data_size; - - if (PB_HTYPE(prev_field->type) == PB_HTYPE_ONEOF && - PB_HTYPE(iter->pos->type) == PB_HTYPE_ONEOF && - iter->pos->data_offset == PB_SIZE_MAX) - { - /* Don't advance pointers inside unions */ - return true; - } - else if (PB_ATYPE(prev_field->type) == PB_ATYPE_STATIC && - PB_HTYPE(prev_field->type) == PB_HTYPE_REPEATED) - { - /* In static arrays, the data_size tells the size of a single entry and - * array_size is the number of entries */ - prev_size *= prev_field->array_size; - } - else if (PB_ATYPE(prev_field->type) == PB_ATYPE_POINTER) - { - /* Pointer fields always have a constant size in the main structure. - * The data_size only applies to the dynamically allocated area. */ - prev_size = sizeof(void*); - } - - if (PB_HTYPE(prev_field->type) == PB_HTYPE_REQUIRED) - { - /* Count the required fields, in order to check their presence in the - * decoder. */ - iter->required_field_index++; - } - - iter->pData = (char*)iter->pData + prev_size + iter->pos->data_offset; - iter->pSize = (char*)iter->pData + iter->pos->size_offset; - return true; - } -} - -bool pb_field_iter_find(pb_field_iter_t *iter, uint32_t tag) -{ - const pb_field_t *start = iter->pos; - - do { - if (iter->pos->tag == tag && - PB_LTYPE(iter->pos->type) != PB_LTYPE_EXTENSION) - { - /* Found the wanted field */ - return true; - } - - (void)pb_field_iter_next(iter); - } while (iter->pos != start); - - /* Searched all the way back to start, and found nothing. */ - return false; -} - - diff --git a/iphone/Maps/Pods/nanopb/pb_common.h b/iphone/Maps/Pods/nanopb/pb_common.h deleted file mode 100644 index 60b3d37491..0000000000 --- a/iphone/Maps/Pods/nanopb/pb_common.h +++ /dev/null @@ -1,42 +0,0 @@ -/* pb_common.h: Common support functions for pb_encode.c and pb_decode.c. - * These functions are rarely needed by applications directly. - */ - -#ifndef PB_COMMON_H_INCLUDED -#define PB_COMMON_H_INCLUDED - -#include "pb.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* Iterator for pb_field_t list */ -struct pb_field_iter_s { - const pb_field_t *start; /* Start of the pb_field_t array */ - const pb_field_t *pos; /* Current position of the iterator */ - unsigned required_field_index; /* Zero-based index that counts only the required fields */ - void *dest_struct; /* Pointer to start of the structure */ - void *pData; /* Pointer to current field value */ - void *pSize; /* Pointer to count/has field */ -}; -typedef struct pb_field_iter_s pb_field_iter_t; - -/* Initialize the field iterator structure to beginning. - * Returns false if the message type is empty. */ -bool pb_field_iter_begin(pb_field_iter_t *iter, const pb_field_t *fields, void *dest_struct); - -/* Advance the iterator to the next field. - * Returns false when the iterator wraps back to the first field. */ -bool pb_field_iter_next(pb_field_iter_t *iter); - -/* Advance the iterator until it points at a field with the given tag. - * Returns false if no such field exists. */ -bool pb_field_iter_find(pb_field_iter_t *iter, uint32_t tag); - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif - diff --git a/iphone/Maps/Pods/nanopb/pb_decode.c b/iphone/Maps/Pods/nanopb/pb_decode.c deleted file mode 100644 index ce5c4ae980..0000000000 --- a/iphone/Maps/Pods/nanopb/pb_decode.c +++ /dev/null @@ -1,1548 +0,0 @@ -/* pb_decode.c -- decode a protobuf using minimal resources - * - * 2011 Petteri Aimonen - */ - -/* Use the GCC warn_unused_result attribute to check that all return values - * are propagated correctly. On other compilers and gcc before 3.4.0 just - * ignore the annotation. - */ -#if !defined(__GNUC__) || ( __GNUC__ < 3) || (__GNUC__ == 3 && __GNUC_MINOR__ < 4) - #define checkreturn -#else - #define checkreturn __attribute__((warn_unused_result)) -#endif - -#include "pb.h" -#include "pb_decode.h" -#include "pb_common.h" - -/************************************** - * Declarations internal to this file * - **************************************/ - -typedef bool (*pb_decoder_t)(pb_istream_t *stream, const pb_field_t *field, void *dest) checkreturn; - -static bool checkreturn buf_read(pb_istream_t *stream, pb_byte_t *buf, size_t count); -static bool checkreturn read_raw_value(pb_istream_t *stream, pb_wire_type_t wire_type, pb_byte_t *buf, size_t *size); -static bool checkreturn decode_static_field(pb_istream_t *stream, pb_wire_type_t wire_type, pb_field_iter_t *iter); -static bool checkreturn decode_callback_field(pb_istream_t *stream, pb_wire_type_t wire_type, pb_field_iter_t *iter); -static bool checkreturn decode_field(pb_istream_t *stream, pb_wire_type_t wire_type, pb_field_iter_t *iter); -static void iter_from_extension(pb_field_iter_t *iter, pb_extension_t *extension); -static bool checkreturn default_extension_decoder(pb_istream_t *stream, pb_extension_t *extension, uint32_t tag, pb_wire_type_t wire_type); -static bool checkreturn decode_extension(pb_istream_t *stream, uint32_t tag, pb_wire_type_t wire_type, pb_field_iter_t *iter); -static bool checkreturn find_extension_field(pb_field_iter_t *iter); -static void pb_field_set_to_default(pb_field_iter_t *iter); -static void pb_message_set_to_defaults(const pb_field_t fields[], void *dest_struct); -static bool checkreturn pb_dec_bool(pb_istream_t *stream, const pb_field_t *field, void *dest); -static bool checkreturn pb_dec_varint(pb_istream_t *stream, const pb_field_t *field, void *dest); -static bool checkreturn pb_decode_varint32_eof(pb_istream_t *stream, uint32_t *dest, bool *eof); -static bool checkreturn pb_dec_uvarint(pb_istream_t *stream, const pb_field_t *field, void *dest); -static bool checkreturn pb_dec_svarint(pb_istream_t *stream, const pb_field_t *field, void *dest); -static bool checkreturn pb_dec_fixed32(pb_istream_t *stream, const pb_field_t *field, void *dest); -static bool checkreturn pb_dec_fixed64(pb_istream_t *stream, const pb_field_t *field, void *dest); -static bool checkreturn pb_dec_bytes(pb_istream_t *stream, const pb_field_t *field, void *dest); -static bool checkreturn pb_dec_string(pb_istream_t *stream, const pb_field_t *field, void *dest); -static bool checkreturn pb_dec_submessage(pb_istream_t *stream, const pb_field_t *field, void *dest); -static bool checkreturn pb_dec_fixed_length_bytes(pb_istream_t *stream, const pb_field_t *field, void *dest); -static bool checkreturn pb_skip_varint(pb_istream_t *stream); -static bool checkreturn pb_skip_string(pb_istream_t *stream); - -#ifdef PB_ENABLE_MALLOC -static bool checkreturn allocate_field(pb_istream_t *stream, void *pData, size_t data_size, size_t array_size); -static bool checkreturn pb_release_union_field(pb_istream_t *stream, pb_field_iter_t *iter); -static void pb_release_single_field(const pb_field_iter_t *iter); -#endif - -#ifdef PB_WITHOUT_64BIT -#define pb_int64_t int32_t -#define pb_uint64_t uint32_t -#else -#define pb_int64_t int64_t -#define pb_uint64_t uint64_t -#endif - -/* --- Function pointers to field decoders --- - * Order in the array must match pb_action_t LTYPE numbering. - */ -static const pb_decoder_t PB_DECODERS[PB_LTYPES_COUNT] = { - &pb_dec_bool, - &pb_dec_varint, - &pb_dec_uvarint, - &pb_dec_svarint, - &pb_dec_fixed32, - &pb_dec_fixed64, - - &pb_dec_bytes, - &pb_dec_string, - &pb_dec_submessage, - NULL, /* extensions */ - &pb_dec_fixed_length_bytes -}; - -/******************************* - * pb_istream_t implementation * - *******************************/ - -static bool checkreturn buf_read(pb_istream_t *stream, pb_byte_t *buf, size_t count) -{ - size_t i; - const pb_byte_t *source = (const pb_byte_t*)stream->state; - stream->state = (pb_byte_t*)stream->state + count; - - if (buf != NULL) - { - for (i = 0; i < count; i++) - buf[i] = source[i]; - } - - return true; -} - -bool checkreturn pb_read(pb_istream_t *stream, pb_byte_t *buf, size_t count) -{ - if (count == 0) - return true; - -#ifndef PB_BUFFER_ONLY - if (buf == NULL && stream->callback != buf_read) - { - /* Skip input bytes */ - pb_byte_t tmp[16]; - while (count > 16) - { - if (!pb_read(stream, tmp, 16)) - return false; - - count -= 16; - } - - return pb_read(stream, tmp, count); - } -#endif - - if (stream->bytes_left < count) - PB_RETURN_ERROR(stream, "end-of-stream"); - -#ifndef PB_BUFFER_ONLY - if (!stream->callback(stream, buf, count)) - PB_RETURN_ERROR(stream, "io error"); -#else - if (!buf_read(stream, buf, count)) - return false; -#endif - - stream->bytes_left -= count; - return true; -} - -/* Read a single byte from input stream. buf may not be NULL. - * This is an optimization for the varint decoding. */ -static bool checkreturn pb_readbyte(pb_istream_t *stream, pb_byte_t *buf) -{ - if (stream->bytes_left == 0) - PB_RETURN_ERROR(stream, "end-of-stream"); - -#ifndef PB_BUFFER_ONLY - if (!stream->callback(stream, buf, 1)) - PB_RETURN_ERROR(stream, "io error"); -#else - *buf = *(const pb_byte_t*)stream->state; - stream->state = (pb_byte_t*)stream->state + 1; -#endif - - stream->bytes_left--; - - return true; -} - -pb_istream_t pb_istream_from_buffer(const pb_byte_t *buf, size_t bufsize) -{ - pb_istream_t stream; - /* Cast away the const from buf without a compiler error. We are - * careful to use it only in a const manner in the callbacks. - */ - union { - void *state; - const void *c_state; - } state; -#ifdef PB_BUFFER_ONLY - stream.callback = NULL; -#else - stream.callback = &buf_read; -#endif - state.c_state = buf; - stream.state = state.state; - stream.bytes_left = bufsize; -#ifndef PB_NO_ERRMSG - stream.errmsg = NULL; -#endif - return stream; -} - -/******************** - * Helper functions * - ********************/ - -static bool checkreturn pb_decode_varint32_eof(pb_istream_t *stream, uint32_t *dest, bool *eof) -{ - pb_byte_t byte; - uint32_t result; - - if (!pb_readbyte(stream, &byte)) - { - if (stream->bytes_left == 0) - { - if (eof) - { - *eof = true; - } - } - - return false; - } - - if ((byte & 0x80) == 0) - { - /* Quick case, 1 byte value */ - result = byte; - } - else - { - /* Multibyte case */ - uint_fast8_t bitpos = 7; - result = byte & 0x7F; - - do - { - if (!pb_readbyte(stream, &byte)) - return false; - - if (bitpos >= 32) - { - /* Note: The varint could have trailing 0x80 bytes, or 0xFF for negative. */ - uint8_t sign_extension = (bitpos < 63) ? 0xFF : 0x01; - - if ((byte & 0x7F) != 0x00 && ((result >> 31) == 0 || byte != sign_extension)) - { - PB_RETURN_ERROR(stream, "varint overflow"); - } - } - else - { - result |= (uint32_t)(byte & 0x7F) << bitpos; - } - bitpos = (uint_fast8_t)(bitpos + 7); - } while (byte & 0x80); - - if (bitpos == 35 && (byte & 0x70) != 0) - { - /* The last byte was at bitpos=28, so only bottom 4 bits fit. */ - PB_RETURN_ERROR(stream, "varint overflow"); - } - } - - *dest = result; - return true; -} - -bool checkreturn pb_decode_varint32(pb_istream_t *stream, uint32_t *dest) -{ - return pb_decode_varint32_eof(stream, dest, NULL); -} - -#ifndef PB_WITHOUT_64BIT -bool checkreturn pb_decode_varint(pb_istream_t *stream, uint64_t *dest) -{ - pb_byte_t byte; - uint_fast8_t bitpos = 0; - uint64_t result = 0; - - do - { - if (bitpos >= 64) - PB_RETURN_ERROR(stream, "varint overflow"); - - if (!pb_readbyte(stream, &byte)) - return false; - - result |= (uint64_t)(byte & 0x7F) << bitpos; - bitpos = (uint_fast8_t)(bitpos + 7); - } while (byte & 0x80); - - *dest = result; - return true; -} -#endif - -bool checkreturn pb_skip_varint(pb_istream_t *stream) -{ - pb_byte_t byte; - do - { - if (!pb_read(stream, &byte, 1)) - return false; - } while (byte & 0x80); - return true; -} - -bool checkreturn pb_skip_string(pb_istream_t *stream) -{ - uint32_t length; - if (!pb_decode_varint32(stream, &length)) - return false; - - return pb_read(stream, NULL, length); -} - -bool checkreturn pb_decode_tag(pb_istream_t *stream, pb_wire_type_t *wire_type, uint32_t *tag, bool *eof) -{ - uint32_t temp; - *eof = false; - *wire_type = (pb_wire_type_t) 0; - *tag = 0; - - if (!pb_decode_varint32_eof(stream, &temp, eof)) - { - return false; - } - - if (temp == 0) - { - *eof = true; /* Special feature: allow 0-terminated messages. */ - return false; - } - - *tag = temp >> 3; - *wire_type = (pb_wire_type_t)(temp & 7); - return true; -} - -bool checkreturn pb_skip_field(pb_istream_t *stream, pb_wire_type_t wire_type) -{ - switch (wire_type) - { - case PB_WT_VARINT: return pb_skip_varint(stream); - case PB_WT_64BIT: return pb_read(stream, NULL, 8); - case PB_WT_STRING: return pb_skip_string(stream); - case PB_WT_32BIT: return pb_read(stream, NULL, 4); - default: PB_RETURN_ERROR(stream, "invalid wire_type"); - } -} - -/* Read a raw value to buffer, for the purpose of passing it to callback as - * a substream. Size is maximum size on call, and actual size on return. - */ -static bool checkreturn read_raw_value(pb_istream_t *stream, pb_wire_type_t wire_type, pb_byte_t *buf, size_t *size) -{ - size_t max_size = *size; - switch (wire_type) - { - case PB_WT_VARINT: - *size = 0; - do - { - (*size)++; - if (*size > max_size) return false; - if (!pb_read(stream, buf, 1)) return false; - } while (*buf++ & 0x80); - return true; - - case PB_WT_64BIT: - *size = 8; - return pb_read(stream, buf, 8); - - case PB_WT_32BIT: - *size = 4; - return pb_read(stream, buf, 4); - - case PB_WT_STRING: - /* Calling read_raw_value with a PB_WT_STRING is an error. - * Explicitly handle this case and fallthrough to default to avoid - * compiler warnings. - */ - - default: PB_RETURN_ERROR(stream, "invalid wire_type"); - } -} - -/* Decode string length from stream and return a substream with limited length. - * Remember to close the substream using pb_close_string_substream(). - */ -bool checkreturn pb_make_string_substream(pb_istream_t *stream, pb_istream_t *substream) -{ - uint32_t size; - if (!pb_decode_varint32(stream, &size)) - return false; - - *substream = *stream; - if (substream->bytes_left < size) - PB_RETURN_ERROR(stream, "parent stream too short"); - - substream->bytes_left = size; - stream->bytes_left -= size; - return true; -} - -bool checkreturn pb_close_string_substream(pb_istream_t *stream, pb_istream_t *substream) -{ - if (substream->bytes_left) { - if (!pb_read(substream, NULL, substream->bytes_left)) - return false; - } - - stream->state = substream->state; - -#ifndef PB_NO_ERRMSG - stream->errmsg = substream->errmsg; -#endif - return true; -} - -/************************* - * Decode a single field * - *************************/ - -static bool checkreturn decode_static_field(pb_istream_t *stream, pb_wire_type_t wire_type, pb_field_iter_t *iter) -{ - pb_type_t type; - pb_decoder_t func; - - type = iter->pos->type; - func = PB_DECODERS[PB_LTYPE(type)]; - - switch (PB_HTYPE(type)) - { - case PB_HTYPE_REQUIRED: - return func(stream, iter->pos, iter->pData); - - case PB_HTYPE_OPTIONAL: - if (iter->pSize != iter->pData) - *(bool*)iter->pSize = true; - return func(stream, iter->pos, iter->pData); - - case PB_HTYPE_REPEATED: - if (wire_type == PB_WT_STRING - && PB_LTYPE(type) <= PB_LTYPE_LAST_PACKABLE) - { - /* Packed array */ - bool status = true; - pb_size_t *size = (pb_size_t*)iter->pSize; - - pb_istream_t substream; - if (!pb_make_string_substream(stream, &substream)) - return false; - - while (substream.bytes_left > 0 && *size < iter->pos->array_size) - { - void *pItem = (char*)iter->pData + iter->pos->data_size * (*size); - if (!func(&substream, iter->pos, pItem)) - { - status = false; - break; - } - (*size)++; - } - - if (substream.bytes_left != 0) - PB_RETURN_ERROR(stream, "array overflow"); - if (!pb_close_string_substream(stream, &substream)) - return false; - - return status; - } - else - { - /* Repeated field */ - pb_size_t *size = (pb_size_t*)iter->pSize; - char *pItem = (char*)iter->pData + iter->pos->data_size * (*size); - - if ((*size)++ >= iter->pos->array_size) - PB_RETURN_ERROR(stream, "array overflow"); - - return func(stream, iter->pos, pItem); - } - - case PB_HTYPE_ONEOF: - *(pb_size_t*)iter->pSize = iter->pos->tag; - if (PB_LTYPE(type) == PB_LTYPE_SUBMESSAGE) - { - /* We memset to zero so that any callbacks are set to NULL. - * Then set any default values. */ - memset(iter->pData, 0, iter->pos->data_size); - pb_message_set_to_defaults((const pb_field_t*)iter->pos->ptr, iter->pData); - } - return func(stream, iter->pos, iter->pData); - - default: - PB_RETURN_ERROR(stream, "invalid field type"); - } -} - -#ifdef PB_ENABLE_MALLOC -/* Allocate storage for the field and store the pointer at iter->pData. - * array_size is the number of entries to reserve in an array. - * Zero size is not allowed, use pb_free() for releasing. - */ -static bool checkreturn allocate_field(pb_istream_t *stream, void *pData, size_t data_size, size_t array_size) -{ - void *ptr = *(void**)pData; - - if (data_size == 0 || array_size == 0) - PB_RETURN_ERROR(stream, "invalid size"); - -#ifdef __AVR__ - /* Workaround for AVR libc bug 53284: http://savannah.nongnu.org/bugs/?53284 - * Realloc to size of 1 byte can cause corruption of the malloc structures. - */ - if (data_size == 1 && array_size == 1) - { - data_size = 2; - } -#endif - - /* Check for multiplication overflows. - * This code avoids the costly division if the sizes are small enough. - * Multiplication is safe as long as only half of bits are set - * in either multiplicand. - */ - { - const size_t check_limit = (size_t)1 << (sizeof(size_t) * 4); - if (data_size >= check_limit || array_size >= check_limit) - { - const size_t size_max = (size_t)-1; - if (size_max / array_size < data_size) - { - PB_RETURN_ERROR(stream, "size too large"); - } - } - } - - /* Allocate new or expand previous allocation */ - /* Note: on failure the old pointer will remain in the structure, - * the message must be freed by caller also on error return. */ - ptr = pb_realloc(ptr, array_size * data_size); - if (ptr == NULL) - PB_RETURN_ERROR(stream, "realloc failed"); - - *(void**)pData = ptr; - return true; -} - -/* Clear a newly allocated item in case it contains a pointer, or is a submessage. */ -static void initialize_pointer_field(void *pItem, pb_field_iter_t *iter) -{ - if (PB_LTYPE(iter->pos->type) == PB_LTYPE_STRING || - PB_LTYPE(iter->pos->type) == PB_LTYPE_BYTES) - { - *(void**)pItem = NULL; - } - else if (PB_LTYPE(iter->pos->type) == PB_LTYPE_SUBMESSAGE) - { - /* We memset to zero so that any callbacks are set to NULL. - * Then set any default values. */ - memset(pItem, 0, iter->pos->data_size); - pb_message_set_to_defaults((const pb_field_t *) iter->pos->ptr, pItem); - } -} -#endif - -static bool checkreturn decode_pointer_field(pb_istream_t *stream, pb_wire_type_t wire_type, pb_field_iter_t *iter) -{ -#ifndef PB_ENABLE_MALLOC - PB_UNUSED(wire_type); - PB_UNUSED(iter); - PB_RETURN_ERROR(stream, "no malloc support"); -#else - pb_type_t type; - pb_decoder_t func; - - type = iter->pos->type; - func = PB_DECODERS[PB_LTYPE(type)]; - - switch (PB_HTYPE(type)) - { - case PB_HTYPE_REQUIRED: - case PB_HTYPE_OPTIONAL: - case PB_HTYPE_ONEOF: - if (PB_LTYPE(type) == PB_LTYPE_SUBMESSAGE && - *(void**)iter->pData != NULL) - { - /* Duplicate field, have to release the old allocation first. */ - pb_release_single_field(iter); - } - - if (PB_HTYPE(type) == PB_HTYPE_ONEOF) - { - *(pb_size_t*)iter->pSize = iter->pos->tag; - } - - if (PB_LTYPE(type) == PB_LTYPE_STRING || - PB_LTYPE(type) == PB_LTYPE_BYTES) - { - return func(stream, iter->pos, iter->pData); - } - else - { - if (!allocate_field(stream, iter->pData, iter->pos->data_size, 1)) - return false; - - initialize_pointer_field(*(void**)iter->pData, iter); - return func(stream, iter->pos, *(void**)iter->pData); - } - - case PB_HTYPE_REPEATED: - if (wire_type == PB_WT_STRING - && PB_LTYPE(type) <= PB_LTYPE_LAST_PACKABLE) - { - /* Packed array, multiple items come in at once. */ - bool status = true; - pb_size_t *size = (pb_size_t*)iter->pSize; - size_t allocated_size = *size; - void *pItem; - pb_istream_t substream; - - if (!pb_make_string_substream(stream, &substream)) - return false; - - while (substream.bytes_left) - { - if (*size == PB_SIZE_MAX) - { -#ifndef PB_NO_ERRMSG - stream->errmsg = "too many array entries"; -#endif - status = false; - break; - } - - if ((size_t)*size + 1 > allocated_size) - { - /* Allocate more storage. This tries to guess the - * number of remaining entries. Round the division - * upwards. */ - size_t remain = (substream.bytes_left - 1) / iter->pos->data_size + 1; - if (remain < PB_SIZE_MAX - allocated_size) - allocated_size += remain; - else - allocated_size += 1; - - if (!allocate_field(&substream, iter->pData, iter->pos->data_size, allocated_size)) - { - status = false; - break; - } - } - - /* Decode the array entry */ - pItem = *(char**)iter->pData + iter->pos->data_size * (*size); - initialize_pointer_field(pItem, iter); - if (!func(&substream, iter->pos, pItem)) - { - status = false; - break; - } - - (*size)++; - } - if (!pb_close_string_substream(stream, &substream)) - return false; - - return status; - } - else - { - /* Normal repeated field, i.e. only one item at a time. */ - pb_size_t *size = (pb_size_t*)iter->pSize; - void *pItem; - - if (*size == PB_SIZE_MAX) - PB_RETURN_ERROR(stream, "too many array entries"); - - if (!allocate_field(stream, iter->pData, iter->pos->data_size, (size_t)(*size + 1))) - return false; - - pItem = *(char**)iter->pData + iter->pos->data_size * (*size); - (*size)++; - initialize_pointer_field(pItem, iter); - return func(stream, iter->pos, pItem); - } - - default: - PB_RETURN_ERROR(stream, "invalid field type"); - } -#endif -} - -static bool checkreturn decode_callback_field(pb_istream_t *stream, pb_wire_type_t wire_type, pb_field_iter_t *iter) -{ - pb_callback_t *pCallback = (pb_callback_t*)iter->pData; -#ifdef PB_OLD_CALLBACK_STYLE - void *arg; -#else - void **arg; -#endif - - if (pCallback == NULL || pCallback->funcs.decode == NULL) - return pb_skip_field(stream, wire_type); - -#ifdef PB_OLD_CALLBACK_STYLE - arg = pCallback->arg; -#else - arg = &(pCallback->arg); -#endif - - if (wire_type == PB_WT_STRING) - { - pb_istream_t substream; - - if (!pb_make_string_substream(stream, &substream)) - return false; - - do - { - if (!pCallback->funcs.decode(&substream, iter->pos, arg)) - PB_RETURN_ERROR(stream, "callback failed"); - } while (substream.bytes_left); - - if (!pb_close_string_substream(stream, &substream)) - return false; - - return true; - } - else - { - /* Copy the single scalar value to stack. - * This is required so that we can limit the stream length, - * which in turn allows to use same callback for packed and - * not-packed fields. */ - pb_istream_t substream; - pb_byte_t buffer[10]; - size_t size = sizeof(buffer); - - if (!read_raw_value(stream, wire_type, buffer, &size)) - return false; - substream = pb_istream_from_buffer(buffer, size); - - return pCallback->funcs.decode(&substream, iter->pos, arg); - } -} - -static bool checkreturn decode_field(pb_istream_t *stream, pb_wire_type_t wire_type, pb_field_iter_t *iter) -{ -#ifdef PB_ENABLE_MALLOC - /* When decoding an oneof field, check if there is old data that must be - * released first. */ - if (PB_HTYPE(iter->pos->type) == PB_HTYPE_ONEOF) - { - if (!pb_release_union_field(stream, iter)) - return false; - } -#endif - - switch (PB_ATYPE(iter->pos->type)) - { - case PB_ATYPE_STATIC: - return decode_static_field(stream, wire_type, iter); - - case PB_ATYPE_POINTER: - return decode_pointer_field(stream, wire_type, iter); - - case PB_ATYPE_CALLBACK: - return decode_callback_field(stream, wire_type, iter); - - default: - PB_RETURN_ERROR(stream, "invalid field type"); - } -} - -static void iter_from_extension(pb_field_iter_t *iter, pb_extension_t *extension) -{ - /* Fake a field iterator for the extension field. - * It is not actually safe to advance this iterator, but decode_field - * will not even try to. */ - const pb_field_t *field = (const pb_field_t*)extension->type->arg; - (void)pb_field_iter_begin(iter, field, extension->dest); - iter->pData = extension->dest; - iter->pSize = &extension->found; - - if (PB_ATYPE(field->type) == PB_ATYPE_POINTER) - { - /* For pointer extensions, the pointer is stored directly - * in the extension structure. This avoids having an extra - * indirection. */ - iter->pData = &extension->dest; - } -} - -/* Default handler for extension fields. Expects a pb_field_t structure - * in extension->type->arg. */ -static bool checkreturn default_extension_decoder(pb_istream_t *stream, - pb_extension_t *extension, uint32_t tag, pb_wire_type_t wire_type) -{ - const pb_field_t *field = (const pb_field_t*)extension->type->arg; - pb_field_iter_t iter; - - if (field->tag != tag) - return true; - - iter_from_extension(&iter, extension); - extension->found = true; - return decode_field(stream, wire_type, &iter); -} - -/* Try to decode an unknown field as an extension field. Tries each extension - * decoder in turn, until one of them handles the field or loop ends. */ -static bool checkreturn decode_extension(pb_istream_t *stream, - uint32_t tag, pb_wire_type_t wire_type, pb_field_iter_t *iter) -{ - pb_extension_t *extension = *(pb_extension_t* const *)iter->pData; - size_t pos = stream->bytes_left; - - while (extension != NULL && pos == stream->bytes_left) - { - bool status; - if (extension->type->decode) - status = extension->type->decode(stream, extension, tag, wire_type); - else - status = default_extension_decoder(stream, extension, tag, wire_type); - - if (!status) - return false; - - extension = extension->next; - } - - return true; -} - -/* Step through the iterator until an extension field is found or until all - * entries have been checked. There can be only one extension field per - * message. Returns false if no extension field is found. */ -static bool checkreturn find_extension_field(pb_field_iter_t *iter) -{ - const pb_field_t *start = iter->pos; - - do { - if (PB_LTYPE(iter->pos->type) == PB_LTYPE_EXTENSION) - return true; - (void)pb_field_iter_next(iter); - } while (iter->pos != start); - - return false; -} - -/* Initialize message fields to default values, recursively */ -static void pb_field_set_to_default(pb_field_iter_t *iter) -{ - pb_type_t type; - type = iter->pos->type; - - if (PB_LTYPE(type) == PB_LTYPE_EXTENSION) - { - pb_extension_t *ext = *(pb_extension_t* const *)iter->pData; - while (ext != NULL) - { - pb_field_iter_t ext_iter; - ext->found = false; - iter_from_extension(&ext_iter, ext); - pb_field_set_to_default(&ext_iter); - ext = ext->next; - } - } - else if (PB_ATYPE(type) == PB_ATYPE_STATIC) - { - bool init_data = true; - if (PB_HTYPE(type) == PB_HTYPE_OPTIONAL && iter->pSize != iter->pData) - { - /* Set has_field to false. Still initialize the optional field - * itself also. */ - *(bool*)iter->pSize = false; - } - else if (PB_HTYPE(type) == PB_HTYPE_REPEATED || - PB_HTYPE(type) == PB_HTYPE_ONEOF) - { - /* REPEATED: Set array count to 0, no need to initialize contents. - ONEOF: Set which_field to 0. */ - *(pb_size_t*)iter->pSize = 0; - init_data = false; - } - - if (init_data) - { - if (PB_LTYPE(iter->pos->type) == PB_LTYPE_SUBMESSAGE) - { - /* Initialize submessage to defaults */ - pb_message_set_to_defaults((const pb_field_t *) iter->pos->ptr, iter->pData); - } - else if (iter->pos->ptr != NULL) - { - /* Initialize to default value */ - memcpy(iter->pData, iter->pos->ptr, iter->pos->data_size); - } - else - { - /* Initialize to zeros */ - memset(iter->pData, 0, iter->pos->data_size); - } - } - } - else if (PB_ATYPE(type) == PB_ATYPE_POINTER) - { - /* Initialize the pointer to NULL. */ - *(void**)iter->pData = NULL; - - /* Initialize array count to 0. */ - if (PB_HTYPE(type) == PB_HTYPE_REPEATED || - PB_HTYPE(type) == PB_HTYPE_ONEOF) - { - *(pb_size_t*)iter->pSize = 0; - } - } - else if (PB_ATYPE(type) == PB_ATYPE_CALLBACK) - { - /* Don't overwrite callback */ - } -} - -static void pb_message_set_to_defaults(const pb_field_t fields[], void *dest_struct) -{ - pb_field_iter_t iter; - - if (!pb_field_iter_begin(&iter, fields, dest_struct)) - return; /* Empty message type */ - - do - { - pb_field_set_to_default(&iter); - } while (pb_field_iter_next(&iter)); -} - -/********************* - * Decode all fields * - *********************/ - -bool checkreturn pb_decode_noinit(pb_istream_t *stream, const pb_field_t fields[], void *dest_struct) -{ - uint32_t fields_seen[(PB_MAX_REQUIRED_FIELDS + 31) / 32] = {0, 0}; - const uint32_t allbits = ~(uint32_t)0; - uint32_t extension_range_start = 0; - pb_field_iter_t iter; - - /* 'fixed_count_field' and 'fixed_count_size' track position of a repeated fixed - * count field. This can only handle _one_ repeated fixed count field that - * is unpacked and unordered among other (non repeated fixed count) fields. - */ - const pb_field_t *fixed_count_field = NULL; - pb_size_t fixed_count_size = 0; - - /* Return value ignored, as empty message types will be correctly handled by - * pb_field_iter_find() anyway. */ - (void)pb_field_iter_begin(&iter, fields, dest_struct); - - while (stream->bytes_left) - { - uint32_t tag; - pb_wire_type_t wire_type; - bool eof; - - if (!pb_decode_tag(stream, &wire_type, &tag, &eof)) - { - if (eof) - break; - else - return false; - } - - if (!pb_field_iter_find(&iter, tag)) - { - /* No match found, check if it matches an extension. */ - if (tag >= extension_range_start) - { - if (!find_extension_field(&iter)) - extension_range_start = (uint32_t)-1; - else - extension_range_start = iter.pos->tag; - - if (tag >= extension_range_start) - { - size_t pos = stream->bytes_left; - - if (!decode_extension(stream, tag, wire_type, &iter)) - return false; - - if (pos != stream->bytes_left) - { - /* The field was handled */ - continue; - } - } - } - - /* No match found, skip data */ - if (!pb_skip_field(stream, wire_type)) - return false; - continue; - } - - /* If a repeated fixed count field was found, get size from - * 'fixed_count_field' as there is no counter contained in the struct. - */ - if (PB_HTYPE(iter.pos->type) == PB_HTYPE_REPEATED - && iter.pSize == iter.pData) - { - if (fixed_count_field != iter.pos) { - /* If the new fixed count field does not match the previous one, - * check that the previous one is NULL or that it finished - * receiving all the expected data. - */ - if (fixed_count_field != NULL && - fixed_count_size != fixed_count_field->array_size) - { - PB_RETURN_ERROR(stream, "wrong size for fixed count field"); - } - - fixed_count_field = iter.pos; - fixed_count_size = 0; - } - - iter.pSize = &fixed_count_size; - } - - if (PB_HTYPE(iter.pos->type) == PB_HTYPE_REQUIRED - && iter.required_field_index < PB_MAX_REQUIRED_FIELDS) - { - uint32_t tmp = ((uint32_t)1 << (iter.required_field_index & 31)); - fields_seen[iter.required_field_index >> 5] |= tmp; - } - - if (!decode_field(stream, wire_type, &iter)) - return false; - } - - /* Check that all elements of the last decoded fixed count field were present. */ - if (fixed_count_field != NULL && - fixed_count_size != fixed_count_field->array_size) - { - PB_RETURN_ERROR(stream, "wrong size for fixed count field"); - } - - /* Check that all required fields were present. */ - { - /* First figure out the number of required fields by - * seeking to the end of the field array. Usually we - * are already close to end after decoding. - */ - unsigned req_field_count; - pb_type_t last_type; - unsigned i; - do { - req_field_count = iter.required_field_index; - last_type = iter.pos->type; - } while (pb_field_iter_next(&iter)); - - /* Fixup if last field was also required. */ - if (PB_HTYPE(last_type) == PB_HTYPE_REQUIRED && iter.pos->tag != 0) - req_field_count++; - - if (req_field_count > PB_MAX_REQUIRED_FIELDS) - req_field_count = PB_MAX_REQUIRED_FIELDS; - - if (req_field_count > 0) - { - /* Check the whole words */ - for (i = 0; i < (req_field_count >> 5); i++) - { - if (fields_seen[i] != allbits) - PB_RETURN_ERROR(stream, "missing required field"); - } - - /* Check the remaining bits (if any) */ - if ((req_field_count & 31) != 0) - { - if (fields_seen[req_field_count >> 5] != - (allbits >> (32 - (req_field_count & 31)))) - { - PB_RETURN_ERROR(stream, "missing required field"); - } - } - } - } - - return true; -} - -bool checkreturn pb_decode(pb_istream_t *stream, const pb_field_t fields[], void *dest_struct) -{ - bool status; - pb_message_set_to_defaults(fields, dest_struct); - status = pb_decode_noinit(stream, fields, dest_struct); - -#ifdef PB_ENABLE_MALLOC - if (!status) - pb_release(fields, dest_struct); -#endif - - return status; -} - -bool pb_decode_delimited_noinit(pb_istream_t *stream, const pb_field_t fields[], void *dest_struct) -{ - pb_istream_t substream; - bool status; - - if (!pb_make_string_substream(stream, &substream)) - return false; - - status = pb_decode_noinit(&substream, fields, dest_struct); - - if (!pb_close_string_substream(stream, &substream)) - return false; - return status; -} - -bool pb_decode_delimited(pb_istream_t *stream, const pb_field_t fields[], void *dest_struct) -{ - pb_istream_t substream; - bool status; - - if (!pb_make_string_substream(stream, &substream)) - return false; - - status = pb_decode(&substream, fields, dest_struct); - - if (!pb_close_string_substream(stream, &substream)) - return false; - return status; -} - -bool pb_decode_nullterminated(pb_istream_t *stream, const pb_field_t fields[], void *dest_struct) -{ - /* This behaviour will be separated in nanopb-0.4.0, see issue #278. */ - return pb_decode(stream, fields, dest_struct); -} - -#ifdef PB_ENABLE_MALLOC -/* Given an oneof field, if there has already been a field inside this oneof, - * release it before overwriting with a different one. */ -static bool pb_release_union_field(pb_istream_t *stream, pb_field_iter_t *iter) -{ - pb_size_t old_tag = *(pb_size_t*)iter->pSize; /* Previous which_ value */ - pb_size_t new_tag = iter->pos->tag; /* New which_ value */ - - if (old_tag == 0) - return true; /* Ok, no old data in union */ - - if (old_tag == new_tag) - return true; /* Ok, old data is of same type => merge */ - - /* Release old data. The find can fail if the message struct contains - * invalid data. */ - if (!pb_field_iter_find(iter, old_tag)) - PB_RETURN_ERROR(stream, "invalid union tag"); - - pb_release_single_field(iter); - - /* Restore iterator to where it should be. - * This shouldn't fail unless the pb_field_t structure is corrupted. */ - if (!pb_field_iter_find(iter, new_tag)) - PB_RETURN_ERROR(stream, "iterator error"); - - return true; -} - -static void pb_release_single_field(const pb_field_iter_t *iter) -{ - pb_type_t type; - type = iter->pos->type; - - if (PB_HTYPE(type) == PB_HTYPE_ONEOF) - { - if (*(pb_size_t*)iter->pSize != iter->pos->tag) - return; /* This is not the current field in the union */ - } - - /* Release anything contained inside an extension or submsg. - * This has to be done even if the submsg itself is statically - * allocated. */ - if (PB_LTYPE(type) == PB_LTYPE_EXTENSION) - { - /* Release fields from all extensions in the linked list */ - pb_extension_t *ext = *(pb_extension_t**)iter->pData; - while (ext != NULL) - { - pb_field_iter_t ext_iter; - iter_from_extension(&ext_iter, ext); - pb_release_single_field(&ext_iter); - ext = ext->next; - } - } - else if (PB_LTYPE(type) == PB_LTYPE_SUBMESSAGE && PB_ATYPE(type) != PB_ATYPE_CALLBACK) - { - /* Release fields in submessage or submsg array */ - void *pItem = iter->pData; - pb_size_t count = 1; - - if (PB_ATYPE(type) == PB_ATYPE_POINTER) - { - pItem = *(void**)iter->pData; - } - - if (PB_HTYPE(type) == PB_HTYPE_REPEATED) - { - if (PB_ATYPE(type) == PB_ATYPE_STATIC && iter->pSize == iter->pData) { - /* No _count field so use size of the array */ - count = iter->pos->array_size; - } else { - count = *(pb_size_t*)iter->pSize; - } - - if (PB_ATYPE(type) == PB_ATYPE_STATIC && count > iter->pos->array_size) - { - /* Protect against corrupted _count fields */ - count = iter->pos->array_size; - } - } - - if (pItem) - { - while (count--) - { - pb_release((const pb_field_t*)iter->pos->ptr, pItem); - pItem = (char*)pItem + iter->pos->data_size; - } - } - } - - if (PB_ATYPE(type) == PB_ATYPE_POINTER) - { - if (PB_HTYPE(type) == PB_HTYPE_REPEATED && - (PB_LTYPE(type) == PB_LTYPE_STRING || - PB_LTYPE(type) == PB_LTYPE_BYTES)) - { - /* Release entries in repeated string or bytes array */ - void **pItem = *(void***)iter->pData; - pb_size_t count = *(pb_size_t*)iter->pSize; - while (count--) - { - pb_free(*pItem); - *pItem++ = NULL; - } - } - - if (PB_HTYPE(type) == PB_HTYPE_REPEATED) - { - /* We are going to release the array, so set the size to 0 */ - *(pb_size_t*)iter->pSize = 0; - } - - /* Release main item */ - pb_free(*(void**)iter->pData); - *(void**)iter->pData = NULL; - } -} - -void pb_release(const pb_field_t fields[], void *dest_struct) -{ - pb_field_iter_t iter; - - if (!dest_struct) - return; /* Ignore NULL pointers, similar to free() */ - - if (!pb_field_iter_begin(&iter, fields, dest_struct)) - return; /* Empty message type */ - - do - { - pb_release_single_field(&iter); - } while (pb_field_iter_next(&iter)); -} -#endif - -/* Field decoders */ - -bool pb_decode_bool(pb_istream_t *stream, bool *dest) -{ - return pb_dec_bool(stream, NULL, (void*)dest); -} - -bool pb_decode_svarint(pb_istream_t *stream, pb_int64_t *dest) -{ - pb_uint64_t value; - if (!pb_decode_varint(stream, &value)) - return false; - - if (value & 1) - *dest = (pb_int64_t)(~(value >> 1)); - else - *dest = (pb_int64_t)(value >> 1); - - return true; -} - -bool pb_decode_fixed32(pb_istream_t *stream, void *dest) -{ - pb_byte_t bytes[4]; - - if (!pb_read(stream, bytes, 4)) - return false; - - *(uint32_t*)dest = ((uint32_t)bytes[0] << 0) | - ((uint32_t)bytes[1] << 8) | - ((uint32_t)bytes[2] << 16) | - ((uint32_t)bytes[3] << 24); - return true; -} - -#ifndef PB_WITHOUT_64BIT -bool pb_decode_fixed64(pb_istream_t *stream, void *dest) -{ - pb_byte_t bytes[8]; - - if (!pb_read(stream, bytes, 8)) - return false; - - *(uint64_t*)dest = ((uint64_t)bytes[0] << 0) | - ((uint64_t)bytes[1] << 8) | - ((uint64_t)bytes[2] << 16) | - ((uint64_t)bytes[3] << 24) | - ((uint64_t)bytes[4] << 32) | - ((uint64_t)bytes[5] << 40) | - ((uint64_t)bytes[6] << 48) | - ((uint64_t)bytes[7] << 56); - - return true; -} -#endif - -static bool checkreturn pb_dec_bool(pb_istream_t *stream, const pb_field_t *field, void *dest) -{ - uint32_t value; - PB_UNUSED(field); - if (!pb_decode_varint32(stream, &value)) - return false; - - *(bool*)dest = (value != 0); - return true; -} - -static bool checkreturn pb_dec_varint(pb_istream_t *stream, const pb_field_t *field, void *dest) -{ - pb_uint64_t value; - pb_int64_t svalue; - pb_int64_t clamped; - if (!pb_decode_varint(stream, &value)) - return false; - - /* See issue 97: Google's C++ protobuf allows negative varint values to - * be cast as int32_t, instead of the int64_t that should be used when - * encoding. Previous nanopb versions had a bug in encoding. In order to - * not break decoding of such messages, we cast <=32 bit fields to - * int32_t first to get the sign correct. - */ - if (field->data_size == sizeof(pb_int64_t)) - svalue = (pb_int64_t)value; - else - svalue = (int32_t)value; - - /* Cast to the proper field size, while checking for overflows */ - if (field->data_size == sizeof(pb_int64_t)) - clamped = *(pb_int64_t*)dest = svalue; - else if (field->data_size == sizeof(int32_t)) - clamped = *(int32_t*)dest = (int32_t)svalue; - else if (field->data_size == sizeof(int_least16_t)) - clamped = *(int_least16_t*)dest = (int_least16_t)svalue; - else if (field->data_size == sizeof(int_least8_t)) - clamped = *(int_least8_t*)dest = (int_least8_t)svalue; - else - PB_RETURN_ERROR(stream, "invalid data_size"); - - if (clamped != svalue) - PB_RETURN_ERROR(stream, "integer too large"); - - return true; -} - -static bool checkreturn pb_dec_uvarint(pb_istream_t *stream, const pb_field_t *field, void *dest) -{ - pb_uint64_t value, clamped; - if (!pb_decode_varint(stream, &value)) - return false; - - /* Cast to the proper field size, while checking for overflows */ - if (field->data_size == sizeof(pb_uint64_t)) - clamped = *(pb_uint64_t*)dest = value; - else if (field->data_size == sizeof(uint32_t)) - clamped = *(uint32_t*)dest = (uint32_t)value; - else if (field->data_size == sizeof(uint_least16_t)) - clamped = *(uint_least16_t*)dest = (uint_least16_t)value; - else if (field->data_size == sizeof(uint_least8_t)) - clamped = *(uint_least8_t*)dest = (uint_least8_t)value; - else - PB_RETURN_ERROR(stream, "invalid data_size"); - - if (clamped != value) - PB_RETURN_ERROR(stream, "integer too large"); - - return true; -} - -static bool checkreturn pb_dec_svarint(pb_istream_t *stream, const pb_field_t *field, void *dest) -{ - pb_int64_t value, clamped; - if (!pb_decode_svarint(stream, &value)) - return false; - - /* Cast to the proper field size, while checking for overflows */ - if (field->data_size == sizeof(pb_int64_t)) - clamped = *(pb_int64_t*)dest = value; - else if (field->data_size == sizeof(int32_t)) - clamped = *(int32_t*)dest = (int32_t)value; - else if (field->data_size == sizeof(int_least16_t)) - clamped = *(int_least16_t*)dest = (int_least16_t)value; - else if (field->data_size == sizeof(int_least8_t)) - clamped = *(int_least8_t*)dest = (int_least8_t)value; - else - PB_RETURN_ERROR(stream, "invalid data_size"); - - if (clamped != value) - PB_RETURN_ERROR(stream, "integer too large"); - - return true; -} - -static bool checkreturn pb_dec_fixed32(pb_istream_t *stream, const pb_field_t *field, void *dest) -{ - PB_UNUSED(field); - return pb_decode_fixed32(stream, dest); -} - -static bool checkreturn pb_dec_fixed64(pb_istream_t *stream, const pb_field_t *field, void *dest) -{ - PB_UNUSED(field); -#ifndef PB_WITHOUT_64BIT - return pb_decode_fixed64(stream, dest); -#else - PB_UNUSED(dest); - PB_RETURN_ERROR(stream, "no 64bit support"); -#endif -} - -static bool checkreturn pb_dec_bytes(pb_istream_t *stream, const pb_field_t *field, void *dest) -{ - uint32_t size; - size_t alloc_size; - pb_bytes_array_t *bdest; - - if (!pb_decode_varint32(stream, &size)) - return false; - - if (size > PB_SIZE_MAX) - PB_RETURN_ERROR(stream, "bytes overflow"); - - alloc_size = PB_BYTES_ARRAY_T_ALLOCSIZE(size); - if (size > alloc_size) - PB_RETURN_ERROR(stream, "size too large"); - - if (PB_ATYPE(field->type) == PB_ATYPE_POINTER) - { -#ifndef PB_ENABLE_MALLOC - PB_RETURN_ERROR(stream, "no malloc support"); -#else - if (!allocate_field(stream, dest, alloc_size, 1)) - return false; - bdest = *(pb_bytes_array_t**)dest; -#endif - } - else - { - if (alloc_size > field->data_size) - PB_RETURN_ERROR(stream, "bytes overflow"); - bdest = (pb_bytes_array_t*)dest; - } - - bdest->size = (pb_size_t)size; - return pb_read(stream, bdest->bytes, size); -} - -static bool checkreturn pb_dec_string(pb_istream_t *stream, const pb_field_t *field, void *dest) -{ - uint32_t size; - size_t alloc_size; - bool status; - if (!pb_decode_varint32(stream, &size)) - return false; - - /* Space for null terminator */ - alloc_size = size + 1; - - if (alloc_size < size) - PB_RETURN_ERROR(stream, "size too large"); - - if (PB_ATYPE(field->type) == PB_ATYPE_POINTER) - { -#ifndef PB_ENABLE_MALLOC - PB_RETURN_ERROR(stream, "no malloc support"); -#else - if (!allocate_field(stream, dest, alloc_size, 1)) - return false; - dest = *(void**)dest; -#endif - } - else - { - if (alloc_size > field->data_size) - PB_RETURN_ERROR(stream, "string overflow"); - } - - status = pb_read(stream, (pb_byte_t*)dest, size); - *((pb_byte_t*)dest + size) = 0; - return status; -} - -static bool checkreturn pb_dec_submessage(pb_istream_t *stream, const pb_field_t *field, void *dest) -{ - bool status; - pb_istream_t substream; - const pb_field_t* submsg_fields = (const pb_field_t*)field->ptr; - - if (!pb_make_string_substream(stream, &substream)) - return false; - - if (field->ptr == NULL) - PB_RETURN_ERROR(stream, "invalid field descriptor"); - - /* New array entries need to be initialized, while required and optional - * submessages have already been initialized in the top-level pb_decode. */ - if (PB_HTYPE(field->type) == PB_HTYPE_REPEATED) - status = pb_decode(&substream, submsg_fields, dest); - else - status = pb_decode_noinit(&substream, submsg_fields, dest); - - if (!pb_close_string_substream(stream, &substream)) - return false; - return status; -} - -static bool checkreturn pb_dec_fixed_length_bytes(pb_istream_t *stream, const pb_field_t *field, void *dest) -{ - uint32_t size; - - if (!pb_decode_varint32(stream, &size)) - return false; - - if (size > PB_SIZE_MAX) - PB_RETURN_ERROR(stream, "bytes overflow"); - - if (size == 0) - { - /* As a special case, treat empty bytes string as all zeros for fixed_length_bytes. */ - memset(dest, 0, field->data_size); - return true; - } - - if (size != field->data_size) - PB_RETURN_ERROR(stream, "incorrect fixed length bytes size"); - - return pb_read(stream, (pb_byte_t*)dest, field->data_size); -} diff --git a/iphone/Maps/Pods/nanopb/pb_decode.h b/iphone/Maps/Pods/nanopb/pb_decode.h deleted file mode 100644 index 3577c20166..0000000000 --- a/iphone/Maps/Pods/nanopb/pb_decode.h +++ /dev/null @@ -1,178 +0,0 @@ -/* pb_decode.h: Functions to decode protocol buffers. Depends on pb_decode.c. - * The main function is pb_decode. You also need an input stream, and the - * field descriptions created by nanopb_generator.py. - */ - -#ifndef PB_DECODE_H_INCLUDED -#define PB_DECODE_H_INCLUDED - -#include "pb.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* Structure for defining custom input streams. You will need to provide - * a callback function to read the bytes from your storage, which can be - * for example a file or a network socket. - * - * The callback must conform to these rules: - * - * 1) Return false on IO errors. This will cause decoding to abort. - * 2) You can use state to store your own data (e.g. buffer pointer), - * and rely on pb_read to verify that no-body reads past bytes_left. - * 3) Your callback may be used with substreams, in which case bytes_left - * is different than from the main stream. Don't use bytes_left to compute - * any pointers. - */ -struct pb_istream_s -{ -#ifdef PB_BUFFER_ONLY - /* Callback pointer is not used in buffer-only configuration. - * Having an int pointer here allows binary compatibility but - * gives an error if someone tries to assign callback function. - */ - int *callback; -#else - bool (*callback)(pb_istream_t *stream, pb_byte_t *buf, size_t count); -#endif - - void *state; /* Free field for use by callback implementation */ - size_t bytes_left; - -#ifndef PB_NO_ERRMSG - const char *errmsg; -#endif -}; - -/*************************** - * Main decoding functions * - ***************************/ - -/* Decode a single protocol buffers message from input stream into a C structure. - * Returns true on success, false on any failure. - * The actual struct pointed to by dest must match the description in fields. - * Callback fields of the destination structure must be initialized by caller. - * All other fields will be initialized by this function. - * - * Example usage: - * MyMessage msg = {}; - * uint8_t buffer[64]; - * pb_istream_t stream; - * - * // ... read some data into buffer ... - * - * stream = pb_istream_from_buffer(buffer, count); - * pb_decode(&stream, MyMessage_fields, &msg); - */ -bool pb_decode(pb_istream_t *stream, const pb_field_t fields[], void *dest_struct); - -/* Same as pb_decode, except does not initialize the destination structure - * to default values. This is slightly faster if you need no default values - * and just do memset(struct, 0, sizeof(struct)) yourself. - * - * This can also be used for 'merging' two messages, i.e. update only the - * fields that exist in the new message. - * - * Note: If this function returns with an error, it will not release any - * dynamically allocated fields. You will need to call pb_release() yourself. - */ -bool pb_decode_noinit(pb_istream_t *stream, const pb_field_t fields[], void *dest_struct); - -/* Same as pb_decode, except expects the stream to start with the message size - * encoded as varint. Corresponds to parseDelimitedFrom() in Google's - * protobuf API. - */ -bool pb_decode_delimited(pb_istream_t *stream, const pb_field_t fields[], void *dest_struct); - -/* Same as pb_decode_delimited, except that it does not initialize the destination structure. - * See pb_decode_noinit - */ -bool pb_decode_delimited_noinit(pb_istream_t *stream, const pb_field_t fields[], void *dest_struct); - -/* Same as pb_decode, except allows the message to be terminated with a null byte. - * NOTE: Until nanopb-0.4.0, pb_decode() also allows null-termination. This behaviour - * is not supported in most other protobuf implementations, so pb_decode_delimited() - * is a better option for compatibility. - */ -bool pb_decode_nullterminated(pb_istream_t *stream, const pb_field_t fields[], void *dest_struct); - -#ifdef PB_ENABLE_MALLOC -/* Release any allocated pointer fields. If you use dynamic allocation, you should - * call this for any successfully decoded message when you are done with it. If - * pb_decode() returns with an error, the message is already released. - */ -void pb_release(const pb_field_t fields[], void *dest_struct); -#endif - - -/************************************** - * Functions for manipulating streams * - **************************************/ - -/* Create an input stream for reading from a memory buffer. - * - * Alternatively, you can use a custom stream that reads directly from e.g. - * a file or a network socket. - */ -pb_istream_t pb_istream_from_buffer(const pb_byte_t *buf, size_t bufsize); - -/* Function to read from a pb_istream_t. You can use this if you need to - * read some custom header data, or to read data in field callbacks. - */ -bool pb_read(pb_istream_t *stream, pb_byte_t *buf, size_t count); - - -/************************************************ - * Helper functions for writing field callbacks * - ************************************************/ - -/* Decode the tag for the next field in the stream. Gives the wire type and - * field tag. At end of the message, returns false and sets eof to true. */ -bool pb_decode_tag(pb_istream_t *stream, pb_wire_type_t *wire_type, uint32_t *tag, bool *eof); - -/* Skip the field payload data, given the wire type. */ -bool pb_skip_field(pb_istream_t *stream, pb_wire_type_t wire_type); - -/* Decode an integer in the varint format. This works for enum, int32, - * int64, uint32 and uint64 field types. */ -#ifndef PB_WITHOUT_64BIT -bool pb_decode_varint(pb_istream_t *stream, uint64_t *dest); -#else -#define pb_decode_varint pb_decode_varint32 -#endif - -/* Decode an integer in the varint format. This works for enum, int32, - * and uint32 field types. */ -bool pb_decode_varint32(pb_istream_t *stream, uint32_t *dest); - -/* Decode a bool value in varint format. */ -bool pb_decode_bool(pb_istream_t *stream, bool *dest); - -/* Decode an integer in the zig-zagged svarint format. This works for sint32 - * and sint64. */ -#ifndef PB_WITHOUT_64BIT -bool pb_decode_svarint(pb_istream_t *stream, int64_t *dest); -#else -bool pb_decode_svarint(pb_istream_t *stream, int32_t *dest); -#endif - -/* Decode a fixed32, sfixed32 or float value. You need to pass a pointer to - * a 4-byte wide C variable. */ -bool pb_decode_fixed32(pb_istream_t *stream, void *dest); - -#ifndef PB_WITHOUT_64BIT -/* Decode a fixed64, sfixed64 or double value. You need to pass a pointer to - * a 8-byte wide C variable. */ -bool pb_decode_fixed64(pb_istream_t *stream, void *dest); -#endif - -/* Make a limited-length substream for reading a PB_WT_STRING field. */ -bool pb_make_string_substream(pb_istream_t *stream, pb_istream_t *substream); -bool pb_close_string_substream(pb_istream_t *stream, pb_istream_t *substream); - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif diff --git a/iphone/Maps/Pods/nanopb/pb_encode.c b/iphone/Maps/Pods/nanopb/pb_encode.c deleted file mode 100644 index 0f89d98199..0000000000 --- a/iphone/Maps/Pods/nanopb/pb_encode.c +++ /dev/null @@ -1,902 +0,0 @@ -/* pb_encode.c -- encode a protobuf using minimal resources - * - * 2011 Petteri Aimonen - */ - -#include "pb.h" -#include "pb_encode.h" -#include "pb_common.h" - -/* Use the GCC warn_unused_result attribute to check that all return values - * are propagated correctly. On other compilers and gcc before 3.4.0 just - * ignore the annotation. - */ -#if !defined(__GNUC__) || ( __GNUC__ < 3) || (__GNUC__ == 3 && __GNUC_MINOR__ < 4) - #define checkreturn -#else - #define checkreturn __attribute__((warn_unused_result)) -#endif - -/************************************** - * Declarations internal to this file * - **************************************/ -typedef bool (*pb_encoder_t)(pb_ostream_t *stream, const pb_field_t *field, const void *src) checkreturn; - -static bool checkreturn buf_write(pb_ostream_t *stream, const pb_byte_t *buf, size_t count); -static bool checkreturn encode_array(pb_ostream_t *stream, const pb_field_t *field, const void *pData, size_t count, pb_encoder_t func); -static bool checkreturn encode_field(pb_ostream_t *stream, const pb_field_t *field, const void *pData); -static bool checkreturn default_extension_encoder(pb_ostream_t *stream, const pb_extension_t *extension); -static bool checkreturn encode_extension_field(pb_ostream_t *stream, const pb_field_t *field, const void *pData); -static void *pb_const_cast(const void *p); -static bool checkreturn pb_enc_bool(pb_ostream_t *stream, const pb_field_t *field, const void *src); -static bool checkreturn pb_enc_varint(pb_ostream_t *stream, const pb_field_t *field, const void *src); -static bool checkreturn pb_enc_uvarint(pb_ostream_t *stream, const pb_field_t *field, const void *src); -static bool checkreturn pb_enc_svarint(pb_ostream_t *stream, const pb_field_t *field, const void *src); -static bool checkreturn pb_enc_fixed32(pb_ostream_t *stream, const pb_field_t *field, const void *src); -static bool checkreturn pb_enc_fixed64(pb_ostream_t *stream, const pb_field_t *field, const void *src); -static bool checkreturn pb_enc_bytes(pb_ostream_t *stream, const pb_field_t *field, const void *src); -static bool checkreturn pb_enc_string(pb_ostream_t *stream, const pb_field_t *field, const void *src); -static bool checkreturn pb_enc_submessage(pb_ostream_t *stream, const pb_field_t *field, const void *src); -static bool checkreturn pb_enc_fixed_length_bytes(pb_ostream_t *stream, const pb_field_t *field, const void *src); - -#ifdef PB_WITHOUT_64BIT -#define pb_int64_t int32_t -#define pb_uint64_t uint32_t - -static bool checkreturn pb_encode_negative_varint(pb_ostream_t *stream, pb_uint64_t value); -#else -#define pb_int64_t int64_t -#define pb_uint64_t uint64_t -#endif - -/* --- Function pointers to field encoders --- - * Order in the array must match pb_action_t LTYPE numbering. - */ -static const pb_encoder_t PB_ENCODERS[PB_LTYPES_COUNT] = { - &pb_enc_bool, - &pb_enc_varint, - &pb_enc_uvarint, - &pb_enc_svarint, - &pb_enc_fixed32, - &pb_enc_fixed64, - - &pb_enc_bytes, - &pb_enc_string, - &pb_enc_submessage, - NULL, /* extensions */ - &pb_enc_fixed_length_bytes -}; - -/******************************* - * pb_ostream_t implementation * - *******************************/ - -static bool checkreturn buf_write(pb_ostream_t *stream, const pb_byte_t *buf, size_t count) -{ - size_t i; - pb_byte_t *dest = (pb_byte_t*)stream->state; - stream->state = dest + count; - - for (i = 0; i < count; i++) - dest[i] = buf[i]; - - return true; -} - -pb_ostream_t pb_ostream_from_buffer(pb_byte_t *buf, size_t bufsize) -{ - pb_ostream_t stream; -#ifdef PB_BUFFER_ONLY - stream.callback = (void*)1; /* Just a marker value */ -#else - stream.callback = &buf_write; -#endif - stream.state = buf; - stream.max_size = bufsize; - stream.bytes_written = 0; -#ifndef PB_NO_ERRMSG - stream.errmsg = NULL; -#endif - return stream; -} - -bool checkreturn pb_write(pb_ostream_t *stream, const pb_byte_t *buf, size_t count) -{ - if (count > 0 && stream->callback != NULL) - { - if (stream->bytes_written + count > stream->max_size) - PB_RETURN_ERROR(stream, "stream full"); - -#ifdef PB_BUFFER_ONLY - if (!buf_write(stream, buf, count)) - PB_RETURN_ERROR(stream, "io error"); -#else - if (!stream->callback(stream, buf, count)) - PB_RETURN_ERROR(stream, "io error"); -#endif - } - - stream->bytes_written += count; - return true; -} - -/************************* - * Encode a single field * - *************************/ - -/* Read a bool value without causing undefined behavior even if the value - * is invalid. See issue #434 and - * https://stackoverflow.com/questions/27661768/weird-results-for-conditional - */ -static bool safe_read_bool(const void *pSize) -{ - const char *p = (const char *)pSize; - size_t i; - for (i = 0; i < sizeof(bool); i++) - { - if (p[i] != 0) - return true; - } - return false; -} - -/* Encode a static array. Handles the size calculations and possible packing. */ -static bool checkreturn encode_array(pb_ostream_t *stream, const pb_field_t *field, - const void *pData, size_t count, pb_encoder_t func) -{ - size_t i; - const void *p; -#ifndef PB_ENCODE_ARRAYS_UNPACKED - size_t size; -#endif - - if (count == 0) - return true; - - if (PB_ATYPE(field->type) != PB_ATYPE_POINTER && count > field->array_size) - PB_RETURN_ERROR(stream, "array max size exceeded"); - -#ifndef PB_ENCODE_ARRAYS_UNPACKED - /* We always pack arrays if the datatype allows it. */ - if (PB_LTYPE(field->type) <= PB_LTYPE_LAST_PACKABLE) - { - if (!pb_encode_tag(stream, PB_WT_STRING, field->tag)) - return false; - - /* Determine the total size of packed array. */ - if (PB_LTYPE(field->type) == PB_LTYPE_FIXED32) - { - size = 4 * count; - } - else if (PB_LTYPE(field->type) == PB_LTYPE_FIXED64) - { - size = 8 * count; - } - else - { - pb_ostream_t sizestream = PB_OSTREAM_SIZING; - p = pData; - for (i = 0; i < count; i++) - { - if (!func(&sizestream, field, p)) - return false; - p = (const char*)p + field->data_size; - } - size = sizestream.bytes_written; - } - - if (!pb_encode_varint(stream, (pb_uint64_t)size)) - return false; - - if (stream->callback == NULL) - return pb_write(stream, NULL, size); /* Just sizing.. */ - - /* Write the data */ - p = pData; - for (i = 0; i < count; i++) - { - if (!func(stream, field, p)) - return false; - p = (const char*)p + field->data_size; - } - } - else -#endif - { - p = pData; - for (i = 0; i < count; i++) - { - if (!pb_encode_tag_for_field(stream, field)) - return false; - - /* Normally the data is stored directly in the array entries, but - * for pointer-type string and bytes fields, the array entries are - * actually pointers themselves also. So we have to dereference once - * more to get to the actual data. */ - if (PB_ATYPE(field->type) == PB_ATYPE_POINTER && - (PB_LTYPE(field->type) == PB_LTYPE_STRING || - PB_LTYPE(field->type) == PB_LTYPE_BYTES)) - { - if (!func(stream, field, *(const void* const*)p)) - return false; - } - else - { - if (!func(stream, field, p)) - return false; - } - p = (const char*)p + field->data_size; - } - } - - return true; -} - -/* In proto3, all fields are optional and are only encoded if their value is "non-zero". - * This function implements the check for the zero value. */ -static bool pb_check_proto3_default_value(const pb_field_t *field, const void *pData) -{ - pb_type_t type = field->type; - const void *pSize = (const char*)pData + field->size_offset; - - if (PB_HTYPE(type) == PB_HTYPE_REQUIRED) - { - /* Required proto2 fields inside proto3 submessage, pretty rare case */ - return false; - } - else if (PB_HTYPE(type) == PB_HTYPE_REPEATED) - { - /* Repeated fields inside proto3 submessage: present if count != 0 */ - if (field->size_offset != 0) - return *(const pb_size_t*)pSize == 0; - else if (PB_ATYPE(type) == PB_ATYPE_STATIC) - return false; /* Fixed length array */ - } - else if (PB_HTYPE(type) == PB_HTYPE_ONEOF) - { - /* Oneof fields */ - return *(const pb_size_t*)pSize == 0; - } - else if (PB_HTYPE(type) == PB_HTYPE_OPTIONAL && field->size_offset != 0) - { - /* Proto2 optional fields inside proto3 submessage */ - return safe_read_bool(pSize) == false; - } - - /* Rest is proto3 singular fields */ - - if (PB_ATYPE(type) == PB_ATYPE_STATIC) - { - if (PB_LTYPE(type) == PB_LTYPE_BYTES) - { - const pb_bytes_array_t *bytes = (const pb_bytes_array_t*)pData; - return bytes->size == 0; - } - else if (PB_LTYPE(type) == PB_LTYPE_STRING) - { - return *(const char*)pData == '\0'; - } - else if (PB_LTYPE(type) == PB_LTYPE_FIXED_LENGTH_BYTES) - { - /* Fixed length bytes is only empty if its length is fixed - * as 0. Which would be pretty strange, but we can check - * it anyway. */ - return field->data_size == 0; - } - else if (PB_LTYPE(type) == PB_LTYPE_SUBMESSAGE) - { - /* Check all fields in the submessage to find if any of them - * are non-zero. The comparison cannot be done byte-per-byte - * because the C struct may contain padding bytes that must - * be skipped. - */ - pb_field_iter_t iter; - if (pb_field_iter_begin(&iter, (const pb_field_t*)field->ptr, pb_const_cast(pData))) - { - do - { - if (!pb_check_proto3_default_value(iter.pos, iter.pData)) - { - return false; - } - } while (pb_field_iter_next(&iter)); - } - return true; - } - } - - { - /* Catch-all branch that does byte-per-byte comparison for zero value. - * - * This is for all pointer fields, and for static PB_LTYPE_VARINT, - * UVARINT, SVARINT, FIXED32, FIXED64, EXTENSION fields, and also - * callback fields. These all have integer or pointer value which - * can be compared with 0. - */ - pb_size_t i; - const char *p = (const char*)pData; - for (i = 0; i < field->data_size; i++) - { - if (p[i] != 0) - { - return false; - } - } - - return true; - } -} - -/* Encode a field with static or pointer allocation, i.e. one whose data - * is available to the encoder directly. */ -static bool checkreturn encode_basic_field(pb_ostream_t *stream, - const pb_field_t *field, const void *pData) -{ - pb_encoder_t func; - bool implicit_has; - const void *pSize = &implicit_has; - - func = PB_ENCODERS[PB_LTYPE(field->type)]; - - if (field->size_offset) - { - /* Static optional, repeated or oneof field */ - pSize = (const char*)pData + field->size_offset; - } - else if (PB_HTYPE(field->type) == PB_HTYPE_OPTIONAL) - { - /* Proto3 style field, optional but without explicit has_ field. */ - implicit_has = !pb_check_proto3_default_value(field, pData); - } - else - { - /* Required field, always present */ - implicit_has = true; - } - - if (PB_ATYPE(field->type) == PB_ATYPE_POINTER) - { - /* pData is a pointer to the field, which contains pointer to - * the data. If the 2nd pointer is NULL, it is interpreted as if - * the has_field was false. - */ - pData = *(const void* const*)pData; - implicit_has = (pData != NULL); - } - - switch (PB_HTYPE(field->type)) - { - case PB_HTYPE_REQUIRED: - if (!pData) - PB_RETURN_ERROR(stream, "missing required field"); - if (!pb_encode_tag_for_field(stream, field)) - return false; - if (!func(stream, field, pData)) - return false; - break; - - case PB_HTYPE_OPTIONAL: - if (safe_read_bool(pSize)) - { - if (!pb_encode_tag_for_field(stream, field)) - return false; - - if (!func(stream, field, pData)) - return false; - } - break; - - case PB_HTYPE_REPEATED: { - pb_size_t count; - if (field->size_offset != 0) { - count = *(const pb_size_t*)pSize; - } else { - count = field->array_size; - } - if (!encode_array(stream, field, pData, count, func)) - return false; - break; - } - - case PB_HTYPE_ONEOF: - if (*(const pb_size_t*)pSize == field->tag) - { - if (!pb_encode_tag_for_field(stream, field)) - return false; - - if (!func(stream, field, pData)) - return false; - } - break; - - default: - PB_RETURN_ERROR(stream, "invalid field type"); - } - - return true; -} - -/* Encode a field with callback semantics. This means that a user function is - * called to provide and encode the actual data. */ -static bool checkreturn encode_callback_field(pb_ostream_t *stream, - const pb_field_t *field, const void *pData) -{ - const pb_callback_t *callback = (const pb_callback_t*)pData; - -#ifdef PB_OLD_CALLBACK_STYLE - const void *arg = callback->arg; -#else - void * const *arg = &(callback->arg); -#endif - - if (callback->funcs.encode != NULL) - { - if (!callback->funcs.encode(stream, field, arg)) - PB_RETURN_ERROR(stream, "callback error"); - } - return true; -} - -/* Encode a single field of any callback or static type. */ -static bool checkreturn encode_field(pb_ostream_t *stream, - const pb_field_t *field, const void *pData) -{ - switch (PB_ATYPE(field->type)) - { - case PB_ATYPE_STATIC: - case PB_ATYPE_POINTER: - return encode_basic_field(stream, field, pData); - - case PB_ATYPE_CALLBACK: - return encode_callback_field(stream, field, pData); - - default: - PB_RETURN_ERROR(stream, "invalid field type"); - } -} - -/* Default handler for extension fields. Expects to have a pb_field_t - * pointer in the extension->type->arg field. */ -static bool checkreturn default_extension_encoder(pb_ostream_t *stream, - const pb_extension_t *extension) -{ - const pb_field_t *field = (const pb_field_t*)extension->type->arg; - - if (PB_ATYPE(field->type) == PB_ATYPE_POINTER) - { - /* For pointer extensions, the pointer is stored directly - * in the extension structure. This avoids having an extra - * indirection. */ - return encode_field(stream, field, &extension->dest); - } - else - { - return encode_field(stream, field, extension->dest); - } -} - -/* Walk through all the registered extensions and give them a chance - * to encode themselves. */ -static bool checkreturn encode_extension_field(pb_ostream_t *stream, - const pb_field_t *field, const void *pData) -{ - const pb_extension_t *extension = *(const pb_extension_t* const *)pData; - PB_UNUSED(field); - - while (extension) - { - bool status; - if (extension->type->encode) - status = extension->type->encode(stream, extension); - else - status = default_extension_encoder(stream, extension); - - if (!status) - return false; - - extension = extension->next; - } - - return true; -} - -/********************* - * Encode all fields * - *********************/ - -static void *pb_const_cast(const void *p) -{ - /* Note: this casts away const, in order to use the common field iterator - * logic for both encoding and decoding. */ - union { - void *p1; - const void *p2; - } t; - t.p2 = p; - return t.p1; -} - -bool checkreturn pb_encode(pb_ostream_t *stream, const pb_field_t fields[], const void *src_struct) -{ - pb_field_iter_t iter; - if (!pb_field_iter_begin(&iter, fields, pb_const_cast(src_struct))) - return true; /* Empty message type */ - - do { - if (PB_LTYPE(iter.pos->type) == PB_LTYPE_EXTENSION) - { - /* Special case for the extension field placeholder */ - if (!encode_extension_field(stream, iter.pos, iter.pData)) - return false; - } - else - { - /* Regular field */ - if (!encode_field(stream, iter.pos, iter.pData)) - return false; - } - } while (pb_field_iter_next(&iter)); - - return true; -} - -bool pb_encode_delimited(pb_ostream_t *stream, const pb_field_t fields[], const void *src_struct) -{ - return pb_encode_submessage(stream, fields, src_struct); -} - -bool pb_encode_nullterminated(pb_ostream_t *stream, const pb_field_t fields[], const void *src_struct) -{ - const pb_byte_t zero = 0; - - if (!pb_encode(stream, fields, src_struct)) - return false; - - return pb_write(stream, &zero, 1); -} - -bool pb_get_encoded_size(size_t *size, const pb_field_t fields[], const void *src_struct) -{ - pb_ostream_t stream = PB_OSTREAM_SIZING; - - if (!pb_encode(&stream, fields, src_struct)) - return false; - - *size = stream.bytes_written; - return true; -} - -/******************** - * Helper functions * - ********************/ - -#ifdef PB_WITHOUT_64BIT -bool checkreturn pb_encode_negative_varint(pb_ostream_t *stream, pb_uint64_t value) -{ - pb_byte_t buffer[10]; - size_t i = 0; - size_t compensation = 32;/* we need to compensate 32 bits all set to 1 */ - - while (value) - { - buffer[i] = (pb_byte_t)((value & 0x7F) | 0x80); - value >>= 7; - if (compensation) - { - /* re-set all the compensation bits we can or need */ - size_t bits = compensation > 7 ? 7 : compensation; - value ^= (pb_uint64_t)((0xFFu >> (8 - bits)) << 25); /* set the number of bits needed on the lowest of the most significant 7 bits */ - compensation -= bits; - } - i++; - } - buffer[i - 1] &= 0x7F; /* Unset top bit on last byte */ - - return pb_write(stream, buffer, i); -} -#endif - -bool checkreturn pb_encode_varint(pb_ostream_t *stream, pb_uint64_t value) -{ - pb_byte_t buffer[10]; - size_t i = 0; - - if (value <= 0x7F) - { - pb_byte_t v = (pb_byte_t)value; - return pb_write(stream, &v, 1); - } - - while (value) - { - buffer[i] = (pb_byte_t)((value & 0x7F) | 0x80); - value >>= 7; - i++; - } - buffer[i-1] &= 0x7F; /* Unset top bit on last byte */ - - return pb_write(stream, buffer, i); -} - -bool checkreturn pb_encode_svarint(pb_ostream_t *stream, pb_int64_t value) -{ - pb_uint64_t zigzagged; - if (value < 0) - zigzagged = ~((pb_uint64_t)value << 1); - else - zigzagged = (pb_uint64_t)value << 1; - - return pb_encode_varint(stream, zigzagged); -} - -bool checkreturn pb_encode_fixed32(pb_ostream_t *stream, const void *value) -{ - uint32_t val = *(const uint32_t*)value; - pb_byte_t bytes[4]; - bytes[0] = (pb_byte_t)(val & 0xFF); - bytes[1] = (pb_byte_t)((val >> 8) & 0xFF); - bytes[2] = (pb_byte_t)((val >> 16) & 0xFF); - bytes[3] = (pb_byte_t)((val >> 24) & 0xFF); - return pb_write(stream, bytes, 4); -} - -#ifndef PB_WITHOUT_64BIT -bool checkreturn pb_encode_fixed64(pb_ostream_t *stream, const void *value) -{ - uint64_t val = *(const uint64_t*)value; - pb_byte_t bytes[8]; - bytes[0] = (pb_byte_t)(val & 0xFF); - bytes[1] = (pb_byte_t)((val >> 8) & 0xFF); - bytes[2] = (pb_byte_t)((val >> 16) & 0xFF); - bytes[3] = (pb_byte_t)((val >> 24) & 0xFF); - bytes[4] = (pb_byte_t)((val >> 32) & 0xFF); - bytes[5] = (pb_byte_t)((val >> 40) & 0xFF); - bytes[6] = (pb_byte_t)((val >> 48) & 0xFF); - bytes[7] = (pb_byte_t)((val >> 56) & 0xFF); - return pb_write(stream, bytes, 8); -} -#endif - -bool checkreturn pb_encode_tag(pb_ostream_t *stream, pb_wire_type_t wiretype, uint32_t field_number) -{ - pb_uint64_t tag = ((pb_uint64_t)field_number << 3) | wiretype; - return pb_encode_varint(stream, tag); -} - -bool checkreturn pb_encode_tag_for_field(pb_ostream_t *stream, const pb_field_t *field) -{ - pb_wire_type_t wiretype; - switch (PB_LTYPE(field->type)) - { - case PB_LTYPE_BOOL: - case PB_LTYPE_VARINT: - case PB_LTYPE_UVARINT: - case PB_LTYPE_SVARINT: - wiretype = PB_WT_VARINT; - break; - - case PB_LTYPE_FIXED32: - wiretype = PB_WT_32BIT; - break; - - case PB_LTYPE_FIXED64: - wiretype = PB_WT_64BIT; - break; - - case PB_LTYPE_BYTES: - case PB_LTYPE_STRING: - case PB_LTYPE_SUBMESSAGE: - case PB_LTYPE_FIXED_LENGTH_BYTES: - wiretype = PB_WT_STRING; - break; - - default: - PB_RETURN_ERROR(stream, "invalid field type"); - } - - return pb_encode_tag(stream, wiretype, field->tag); -} - -bool checkreturn pb_encode_string(pb_ostream_t *stream, const pb_byte_t *buffer, size_t size) -{ - if (!pb_encode_varint(stream, (pb_uint64_t)size)) - return false; - - return pb_write(stream, buffer, size); -} - -bool checkreturn pb_encode_submessage(pb_ostream_t *stream, const pb_field_t fields[], const void *src_struct) -{ - /* First calculate the message size using a non-writing substream. */ - pb_ostream_t substream = PB_OSTREAM_SIZING; - size_t size; - bool status; - - if (!pb_encode(&substream, fields, src_struct)) - { -#ifndef PB_NO_ERRMSG - stream->errmsg = substream.errmsg; -#endif - return false; - } - - size = substream.bytes_written; - - if (!pb_encode_varint(stream, (pb_uint64_t)size)) - return false; - - if (stream->callback == NULL) - return pb_write(stream, NULL, size); /* Just sizing */ - - if (stream->bytes_written + size > stream->max_size) - PB_RETURN_ERROR(stream, "stream full"); - - /* Use a substream to verify that a callback doesn't write more than - * what it did the first time. */ - substream.callback = stream->callback; - substream.state = stream->state; - substream.max_size = size; - substream.bytes_written = 0; -#ifndef PB_NO_ERRMSG - substream.errmsg = NULL; -#endif - - status = pb_encode(&substream, fields, src_struct); - - stream->bytes_written += substream.bytes_written; - stream->state = substream.state; -#ifndef PB_NO_ERRMSG - stream->errmsg = substream.errmsg; -#endif - - if (substream.bytes_written != size) - PB_RETURN_ERROR(stream, "submsg size changed"); - - return status; -} - -/* Field encoders */ - -static bool checkreturn pb_enc_bool(pb_ostream_t *stream, const pb_field_t *field, const void *src) -{ - uint32_t value = safe_read_bool(src) ? 1 : 0; - PB_UNUSED(field); - return pb_encode_varint(stream, value); -} - -static bool checkreturn pb_enc_varint(pb_ostream_t *stream, const pb_field_t *field, const void *src) -{ - pb_int64_t value = 0; - - if (field->data_size == sizeof(int_least8_t)) - value = *(const int_least8_t*)src; - else if (field->data_size == sizeof(int_least16_t)) - value = *(const int_least16_t*)src; - else if (field->data_size == sizeof(int32_t)) - value = *(const int32_t*)src; - else if (field->data_size == sizeof(pb_int64_t)) - value = *(const pb_int64_t*)src; - else - PB_RETURN_ERROR(stream, "invalid data_size"); - -#ifdef PB_WITHOUT_64BIT - if (value < 0) - return pb_encode_negative_varint(stream, (pb_uint64_t)value); - else -#endif - return pb_encode_varint(stream, (pb_uint64_t)value); -} - -static bool checkreturn pb_enc_uvarint(pb_ostream_t *stream, const pb_field_t *field, const void *src) -{ - pb_uint64_t value = 0; - - if (field->data_size == sizeof(uint_least8_t)) - value = *(const uint_least8_t*)src; - else if (field->data_size == sizeof(uint_least16_t)) - value = *(const uint_least16_t*)src; - else if (field->data_size == sizeof(uint32_t)) - value = *(const uint32_t*)src; - else if (field->data_size == sizeof(pb_uint64_t)) - value = *(const pb_uint64_t*)src; - else - PB_RETURN_ERROR(stream, "invalid data_size"); - - return pb_encode_varint(stream, value); -} - -static bool checkreturn pb_enc_svarint(pb_ostream_t *stream, const pb_field_t *field, const void *src) -{ - pb_int64_t value = 0; - - if (field->data_size == sizeof(int_least8_t)) - value = *(const int_least8_t*)src; - else if (field->data_size == sizeof(int_least16_t)) - value = *(const int_least16_t*)src; - else if (field->data_size == sizeof(int32_t)) - value = *(const int32_t*)src; - else if (field->data_size == sizeof(pb_int64_t)) - value = *(const pb_int64_t*)src; - else - PB_RETURN_ERROR(stream, "invalid data_size"); - - return pb_encode_svarint(stream, value); -} - -static bool checkreturn pb_enc_fixed64(pb_ostream_t *stream, const pb_field_t *field, const void *src) -{ - PB_UNUSED(field); -#ifndef PB_WITHOUT_64BIT - return pb_encode_fixed64(stream, src); -#else - PB_UNUSED(src); - PB_RETURN_ERROR(stream, "no 64bit support"); -#endif -} - -static bool checkreturn pb_enc_fixed32(pb_ostream_t *stream, const pb_field_t *field, const void *src) -{ - PB_UNUSED(field); - return pb_encode_fixed32(stream, src); -} - -static bool checkreturn pb_enc_bytes(pb_ostream_t *stream, const pb_field_t *field, const void *src) -{ - const pb_bytes_array_t *bytes = NULL; - - bytes = (const pb_bytes_array_t*)src; - - if (src == NULL) - { - /* Treat null pointer as an empty bytes field */ - return pb_encode_string(stream, NULL, 0); - } - - if (PB_ATYPE(field->type) == PB_ATYPE_STATIC && - PB_BYTES_ARRAY_T_ALLOCSIZE(bytes->size) > field->data_size) - { - PB_RETURN_ERROR(stream, "bytes size exceeded"); - } - - return pb_encode_string(stream, bytes->bytes, bytes->size); -} - -static bool checkreturn pb_enc_string(pb_ostream_t *stream, const pb_field_t *field, const void *src) -{ - size_t size = 0; - size_t max_size = field->data_size; - const char *p = (const char*)src; - - if (PB_ATYPE(field->type) == PB_ATYPE_POINTER) - max_size = (size_t)-1; - - if (src == NULL) - { - size = 0; /* Treat null pointer as an empty string */ - } - else - { - /* strnlen() is not always available, so just use a loop */ - while (size < max_size && *p != '\0') - { - size++; - p++; - } - } - - return pb_encode_string(stream, (const pb_byte_t*)src, size); -} - -static bool checkreturn pb_enc_submessage(pb_ostream_t *stream, const pb_field_t *field, const void *src) -{ - if (field->ptr == NULL) - PB_RETURN_ERROR(stream, "invalid field descriptor"); - - return pb_encode_submessage(stream, (const pb_field_t*)field->ptr, src); -} - -static bool checkreturn pb_enc_fixed_length_bytes(pb_ostream_t *stream, const pb_field_t *field, const void *src) -{ - return pb_encode_string(stream, (const pb_byte_t*)src, field->data_size); -} - diff --git a/iphone/Maps/Pods/nanopb/pb_encode.h b/iphone/Maps/Pods/nanopb/pb_encode.h deleted file mode 100644 index 8bf78dd53f..0000000000 --- a/iphone/Maps/Pods/nanopb/pb_encode.h +++ /dev/null @@ -1,170 +0,0 @@ -/* pb_encode.h: Functions to encode protocol buffers. Depends on pb_encode.c. - * The main function is pb_encode. You also need an output stream, and the - * field descriptions created by nanopb_generator.py. - */ - -#ifndef PB_ENCODE_H_INCLUDED -#define PB_ENCODE_H_INCLUDED - -#include "pb.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* Structure for defining custom output streams. You will need to provide - * a callback function to write the bytes to your storage, which can be - * for example a file or a network socket. - * - * The callback must conform to these rules: - * - * 1) Return false on IO errors. This will cause encoding to abort. - * 2) You can use state to store your own data (e.g. buffer pointer). - * 3) pb_write will update bytes_written after your callback runs. - * 4) Substreams will modify max_size and bytes_written. Don't use them - * to calculate any pointers. - */ -struct pb_ostream_s -{ -#ifdef PB_BUFFER_ONLY - /* Callback pointer is not used in buffer-only configuration. - * Having an int pointer here allows binary compatibility but - * gives an error if someone tries to assign callback function. - * Also, NULL pointer marks a 'sizing stream' that does not - * write anything. - */ - int *callback; -#else - bool (*callback)(pb_ostream_t *stream, const pb_byte_t *buf, size_t count); -#endif - void *state; /* Free field for use by callback implementation. */ - size_t max_size; /* Limit number of output bytes written (or use SIZE_MAX). */ - size_t bytes_written; /* Number of bytes written so far. */ - -#ifndef PB_NO_ERRMSG - const char *errmsg; -#endif -}; - -/*************************** - * Main encoding functions * - ***************************/ - -/* Encode a single protocol buffers message from C structure into a stream. - * Returns true on success, false on any failure. - * The actual struct pointed to by src_struct must match the description in fields. - * All required fields in the struct are assumed to have been filled in. - * - * Example usage: - * MyMessage msg = {}; - * uint8_t buffer[64]; - * pb_ostream_t stream; - * - * msg.field1 = 42; - * stream = pb_ostream_from_buffer(buffer, sizeof(buffer)); - * pb_encode(&stream, MyMessage_fields, &msg); - */ -bool pb_encode(pb_ostream_t *stream, const pb_field_t fields[], const void *src_struct); - -/* Same as pb_encode, but prepends the length of the message as a varint. - * Corresponds to writeDelimitedTo() in Google's protobuf API. - */ -bool pb_encode_delimited(pb_ostream_t *stream, const pb_field_t fields[], const void *src_struct); - -/* Same as pb_encode, but appends a null byte to the message for termination. - * NOTE: This behaviour is not supported in most other protobuf implementations, so pb_encode_delimited() - * is a better option for compatibility. - */ -bool pb_encode_nullterminated(pb_ostream_t *stream, const pb_field_t fields[], const void *src_struct); - -/* Encode the message to get the size of the encoded data, but do not store - * the data. */ -bool pb_get_encoded_size(size_t *size, const pb_field_t fields[], const void *src_struct); - -/************************************** - * Functions for manipulating streams * - **************************************/ - -/* Create an output stream for writing into a memory buffer. - * The number of bytes written can be found in stream.bytes_written after - * encoding the message. - * - * Alternatively, you can use a custom stream that writes directly to e.g. - * a file or a network socket. - */ -pb_ostream_t pb_ostream_from_buffer(pb_byte_t *buf, size_t bufsize); - -/* Pseudo-stream for measuring the size of a message without actually storing - * the encoded data. - * - * Example usage: - * MyMessage msg = {}; - * pb_ostream_t stream = PB_OSTREAM_SIZING; - * pb_encode(&stream, MyMessage_fields, &msg); - * printf("Message size is %d\n", stream.bytes_written); - */ -#ifndef PB_NO_ERRMSG -#define PB_OSTREAM_SIZING {0,0,0,0,0} -#else -#define PB_OSTREAM_SIZING {0,0,0,0} -#endif - -/* Function to write into a pb_ostream_t stream. You can use this if you need - * to append or prepend some custom headers to the message. - */ -bool pb_write(pb_ostream_t *stream, const pb_byte_t *buf, size_t count); - - -/************************************************ - * Helper functions for writing field callbacks * - ************************************************/ - -/* Encode field header based on type and field number defined in the field - * structure. Call this from the callback before writing out field contents. */ -bool pb_encode_tag_for_field(pb_ostream_t *stream, const pb_field_t *field); - -/* Encode field header by manually specifing wire type. You need to use this - * if you want to write out packed arrays from a callback field. */ -bool pb_encode_tag(pb_ostream_t *stream, pb_wire_type_t wiretype, uint32_t field_number); - -/* Encode an integer in the varint format. - * This works for bool, enum, int32, int64, uint32 and uint64 field types. */ -#ifndef PB_WITHOUT_64BIT -bool pb_encode_varint(pb_ostream_t *stream, uint64_t value); -#else -bool pb_encode_varint(pb_ostream_t *stream, uint32_t value); -#endif - -/* Encode an integer in the zig-zagged svarint format. - * This works for sint32 and sint64. */ -#ifndef PB_WITHOUT_64BIT -bool pb_encode_svarint(pb_ostream_t *stream, int64_t value); -#else -bool pb_encode_svarint(pb_ostream_t *stream, int32_t value); -#endif - -/* Encode a string or bytes type field. For strings, pass strlen(s) as size. */ -bool pb_encode_string(pb_ostream_t *stream, const pb_byte_t *buffer, size_t size); - -/* Encode a fixed32, sfixed32 or float value. - * You need to pass a pointer to a 4-byte wide C variable. */ -bool pb_encode_fixed32(pb_ostream_t *stream, const void *value); - -#ifndef PB_WITHOUT_64BIT -/* Encode a fixed64, sfixed64 or double value. - * You need to pass a pointer to a 8-byte wide C variable. */ -bool pb_encode_fixed64(pb_ostream_t *stream, const void *value); -#endif - -/* Encode a submessage field. - * You need to pass the pb_field_t array and pointer to struct, just like - * with pb_encode(). This internally encodes the submessage twice, first to - * calculate message size and then to actually write it out. - */ -bool pb_encode_submessage(pb_ostream_t *stream, const pb_field_t fields[], const void *src_struct); - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif